request->post();
$rule = new Validate([
'article_id' => 'require|number'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
// $data['article_id'] = 1144;
$check = $this->production_article_obj->where('article_id', $data['article_id'])->where('state', 0)->find();
if ($check) {
return jsonError('Instance already exists');
}
$article_info = $this->article_obj->where('article_id', $data['article_id'])->find();
$files = $this->article_file_obj
->where('article_id', $article_info['article_id'])
->where('type_name', 'manuscirpt')
->order('ctime desc')
->limit(1)
->select();
if (count($files) == 0) {
return jsonError('No Manuscript');
}
$url = $this->ts_base_url."api/typeset/webReaddoc";
$program['fileRoute'] = "https://submission.tmrjournals.com/public/" . $files[0]['file_url'];
$res = object_to_array(json_decode(myPost($url, $program)));
$file_runs = $res['data'];
// return jsonSuccess($file_runs);
//整理信息
$frag = [];
$aa = [];
$frag['title'] = $article_info['title'];
$start_refer = false;
foreach ($file_runs as $k => $v) {
if ($start_refer && $v != '') {
if (strlen($v) > 500) {
$start_refer = false;
$frag['main'][] = $v;
continue;
}
$frag['references'][] = $v;
continue;
}
$g_val = trim(preg_replace('/\<.*?\>/', '', $v));
$aa[] = $g_val;
if ((strpos(strtolower(trim($g_val)), "keyword") == 0 || strpos(strtolower(trim($g_val)), "keyword") == 1) && !isset($frag['keywords'])) {
$frag['keywords'] = $v;
continue;
}
if (strtolower($g_val) == 'reference:' || strtolower($g_val) == 'references:' || strtolower($g_val) == 'references' || strtolower($g_val) == 'reference') {
$start_refer = true;
continue;
}
$frag['main'][] = $v;
}
if(!isset($frag['main'])){
return jsonError("manuscript file error!");
}
$insert['main'] = isset($frag['main']) ? json_encode($frag['main']) : '';
$insert['article_id'] = $data['article_id'];
$insert['journal_id'] = $article_info['journal_id'];
$insert['ctime'] = time();
$p_article_id = $this->production_article_obj->insertGetId($insert);
//将主体内容写入数据库
foreach($frag['main'] as $v){
$ca['p_article_id'] = $p_article_id;
$ca['content'] = $v;
$ca['content_g'] = '';
$ca['ctime'] = time();
$this->production_article_main_obj->insert($ca);
}
return jsonSuccess([]);
}
public function getWebMains(){
$data = $this->request->post();
$rule = new Validate([
"article_id"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$url = "http://journalapi.tmrjournals.com/public/index.php/master/Article/getArticleMainsForSubmission";
$pro['article_id'] = $data['article_id'];
$res = object_to_array(json_decode(myPost($url,$pro)));
$re['mains'] = $res['data']['mains'];
$re['article'] = $res['data']['article'];
return jsonSuccess($re);
}
public function addWebMain(){
$data = $this->request->post();
$rule = new Validate([
"article_id"=>'require',
"pre_id"=>"require",
"type"=>"require",
"content"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$url = "http://journalapi.tmrjournals.com/public/index.php/master/Article/addArticleMainAddForSubmission";
$res = object_to_array(json_decode(myPost($url,$data)));
return jsonSuccess([]);
}
public function addWebMains(){
$data = $this->request->post();
$rule = new Validate([
"article_id"=>'require',
"pre_id"=>"require",
"contents"=>"require|array"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$url = "http://journalapi.tmrjournals.com/public/index.php/master/Article/addArticleMainsAddForSubmission";
$program['article_id'] = $data['article_id'];
$program['pre_id'] = $data['pre_id'];
$program['contents'] = json_encode($data['contents']);
$res = object_to_array(json_decode(myPost($url,$program)));
return jsonSuccess($res);
}
/**添加主题内容的空白行
* @return void
*/
public function addWebMainEmpty(){
$data = $this->request->post();
$rule = new Validate([
"article_id"=>"require",
"pre_id"=>"require",
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$url = "http://journalapi.tmrjournals.com/public/index.php/master/Article/addArticleMainAddEmptyForSubmission";
$res = object_to_array(json_decode(myPost($url,$data)));
return jsonSuccess([]);
}
/**清空web的主体内容
* @return void
*/
public function clearWebMains(){
$data = $this->request->post();
$rule = new Validate([
"article_id"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$url = "http://journalapi.tmrjournals.com/public/index.php/master/Article/clearArticleMainForSubmission";
$res = object_to_array(json_decode(myPost($url,$data)));
return jsonSuccess([]);
}
public function delWebMain(){
$data = $this->request->post();
$rule = new Validate([
"article_main_id"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$url = "http://journalapi.tmrjournals.com/public/index.php/master/Article/delArticleMainForSubmission";
$res = object_to_array(json_decode(myPost($url,$data)));
return jsonSuccess([]);
}
public function delWebMains(){
$data = $this->request->post();
$rule = new Validate([
"ids"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$program['ids'] = json_encode($data['ids']);
$url = "http://journalapi.tmrjournals.com/public/index.php/master/Article/delArticleMainsForSubmission";
$res = object_to_array(json_decode(myPost($url,$program)));
return jsonSuccess([]);
}
public function editWebMain(){
$data = $this->request->post();
$rule = new Validate([
"article_main_id"=>"require",
"type"=>"require",
"content"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$url = "http://journalapi.tmrjournals.com/public/index.php/master/Article/editArticleMainForSubmission";
$res = object_to_array(json_decode(myPost($url,$data)));
return jsonSuccess([]);
}
/**
* 获取全部生成实例的main内容
* @return \think\response\Json|void
* @author wangjinlei
*/
public function getProductionMains(){
$data = $this->request->post();
$rule = new Validate([
"p_article_id" => "require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$p_info = $this->production_article_obj->where('p_article_id',$data['p_article_id'])->find();
$frag = $this->getProductionMainImgs($data['p_article_id']);
if(count($frag)==0){
return jsonError("create error");
}
$re['mains'] = $frag;
$re['production'] = $p_info;
return jsonSuccess($re);
}
/**
* @return void
*/
public function getProductionMainsByDoi(){
$data = $this->request->post();
$rule = new Validate([
'doi'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$a = explode('/',$data['doi']);
$pro_info = $this->production_article_obj->where('doi',$a[1])->where('state',2)->find();
if(!$pro_info){
return jsonError("production error");
}
if(isset($data['file'])&&$data['file']!=""){
$frag = $this->getProductionMainImgsByNew($pro_info['p_article_id'],$data['file']);
}else{
$frag = $this->getProductionMainImgs($pro_info['p_article_id']);
}
if(count($frag)==0){
return jsonError("create error");
}
$re['mains'] = $frag;
$re['production'] = $pro_info;
return jsonSuccess($re);
}
/**
* 删除main内容的某一行
* @return void
*
*/
public function delProductionMain(){
$data = $this->request->post();
$rule = new Validate([
'p_main_id' => 'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$this->production_article_main_obj->where('p_main_id',$data['p_main_id'])->update(['state'=>1]);
return jsonSuccess([]);
}
/**添加主体文章图片
* @return void
*/
public function addProductionMainImg(){
$data = $this->request->post();
$rule = new Validate([
'p_article_id'=>'require',
"pre_type"=>"require",
"body"=>"require",
"content"=>"require",
"width"=>"require",
"note"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$insert['p_article_id'] = $data['p_article_id'];
if($data['pre_type']=="main"){
$insert['p_main_id'] = $data['body'];
}else{
$insert['pre_id'] = $data['body'];
}
$insert['content'] = $data['content'];
$insert['width'] = $data['width'];
$insert['title'] = $data['title'];
$insert['note'] = $data['note'];
$this->production_article_main_img_obj->insert($insert);
return jsonSuccess([]);
}
/**删除mainimg
* @return void
*/
public function delProductionMainImg(){
$data = $this->request->post();
$rule = new Validate([
'p_main_img_id'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$p_img_info = $this->production_article_main_img_obj->where('p_main_img_id',$data['p_main_img_id'])->find();
$next_info = $this->production_article_main_img_obj->where('pre_id',$p_img_info['p_main_img_id'])->find();
if($next_info){
if($p_img_info['p_main_id']==0){
$this->production_article_main_img_obj->where('p_main_img_id',$next_info['p_main_img_id'])->update(['pre_id'=>$p_img_info['pre_id']]);
}else{
$this->production_article_main_img_obj->where('p_main_img_id',$next_info['p_main_img_id'])->update(['p_main_id'=>$p_img_info['p_main_id']]);
}
}
$this->production_article_main_img_obj->where('p_main_img_id',$data['p_main_img_id'])->update(['state'=>1]);
return jsonSuccess([]);
}
/**编辑mainimg
* @return void
*/
public function editProductionMainImg(){
$data = $this->request->post();
$rule = new Validate([
'p_main_img_id'=>'require',
"width"=>"require",
"content"=>"require",
"note"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$update['width']=$data['width'];
$update['content']=$data['content'];
$update['title'] = $data['title'];
$update['note'] = $data['note'];
$this->production_article_main_img_obj->where('p_main_img_id',$data['p_main_img_id'])->update($update);
return jsonSuccess([]);
}
/**
* 编辑main内容
* @return \think\response\Json|void
*
*/
public function editProductionMain(){
$data = $this->request->post();
$rule = new Validate([
'p_main_id' => 'require',
'content'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$update['content'] = trim($data['content']);
$this->production_article_main_obj->where('p_main_id',$data['p_main_id'])->update($update);
return jsonSuccess([]);
}
public function pushMainToWeb(){
$data = $this->request->post();
$rule = new Validate([
'article_id'=>"require",
"p_article_id"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$url = "http://journalapi.tmrjournals.com/public/index.php/master/Article/addArticleMainForSubmission";
$pro['article_id'] = $data['article_id'];
$pro['p_article_id'] = $data['p_article_id'];
$res = object_to_array(json_decode(myPost($url,$pro)));
// if($res['code']==1){
// return jsonError("Repeated submission");
// }
return jsonSuccess([]);
}
/**main内容gpt程序校对
* @return void
*
*/
public function mainGptcheck(){
$data = $this->request->post();
$rule = new Validate([
'p_main_id'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$main_info = $this->production_article_main_obj->where('p_main_id',$data['p_main_id'])->find();
if(mb_strlen($main_info['content'])<20){
return trim($main_info['content']);
}
$res = object_to_array(json_decode(pushGpt('请将以下内容按照医学期刊的标准校对,不要改变原意,主要是对格式和拼写的校对,将这四个标签保留,将校对好的内容返回 :'.trim($main_info['content']))));
$r = $res['choices'][0]['message']['content'];
$re['content'] = $r;
return jsonSuccess($re);
}
public function getPublicMains(){
}
/**
* 删除生产实例
*/
public function delProduction()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_id' => 'require|number'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$this->production_article_obj->where('p_article_id', $data['p_article_id'])->update(['state' => 1]);
return jsonSuccess([]);
}
/**
* 编辑生产实例
*/
public function editProduction()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_id' => 'require|number',
'journal_stage_id' => 'require',
'title' => 'require',
'type' => 'require',
'acknowledgment' => 'require',
'keywords' => 'require',
'author_contribution' => 'require',
'abbr' => 'require',
'abstract' => 'require'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$p_info = $this->production_article_obj->where('p_article_id', $data['p_article_id'])->find();
$journal_info = $this->journal_obj->where('journal_id', $p_info['journal_id'])->find();
$update['title'] = trim($data['title']);
$update['journal_stage_id'] = $data['journal_stage_id'];
$update['type'] = trim($data['type']);
$update['icon'] = isset($data['icon']) ? trim($data['icon']) : '';
$update['tradition_tag'] = isset($data['tradition_tag']) ? trim($data['tradition_tag']) : '';
$update['tradition'] = isset($data['tradition']) ? trim($data['tradition']) : '';
$update['author_contribution'] = trim($data['author_contribution']);
$update['mhoo'] = isset($data['mhoo']) ? trim($data['mhoo']) : '';
$update['ltai'] = isset($data['ltai']) ? trim($data['ltai']) : '';
// $update['abstract'] = trim($data['abstract']);
$update['keywords'] = trim($data['keywords']);
$update['abbreviation'] = isset($data['abbreviation']) ? trim($data['abbreviation']) : '';
$update['acknowledgment'] = trim($data['acknowledgment']);
$update['abbr'] = trim($data['abbr']);
// $update['pub_date'] = trim($data['pub_date']);
$update['npp'] = isset($data['npp']) ? $data['npp'] : '';
//生成doi号
// $doi = '';
// if ($p_info['doi'] == '') {
// $url = 'http://journalapi.tmrjournals.com/public/index.php/master/Journal/getStageDetail';
// $cs['journal_stage_id'] = $data['journal_stage_id'];
// $list = object_to_array(json_decode(myPost($url, $cs)));
// $re = $list['data']['stage'];
// $doi = $this->createdoi($re['stage_year'], $re['stage_vol'], $journal_info['abbr']);
// }else{
// $doi = $p_info['doi'];
// }
// $update['doi'] = $doi;
$update['abstract'] = isset($data['abstract']) ? trim($data['abstract']) : '';
$this->production_article_obj->where('p_article_id', $data['p_article_id'])->update($update);
return jsonSuccess($update);
}
/**
* 获取文章排版结果列表
*/
public function getArticleFrags()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_id' => 'require|number'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$list = $this->production_article_frag_obj->where('p_article_id', $data['p_article_id'])->where('state', 0)->select();
$re['frags'] = $list;
return jsonSuccess($re);
}
// /**
// * 编辑文章主要内容
// */
// public function editMainContent()
// {
// $data = $this->request->post();
// $rule = new Validate([
// 'p_article_id' => 'require|number',
// 'main' => 'require'
// ]);
// if (!$rule->check($data)) {
// return jsonError($rule->getError());
// }
// $update['main'] = $data['main'];
// $this->production_article_obj->where('p_article_id', $data['p_article_id'])->update($update);
// return jsonSuccess([]);
// }
private function createdoi($year, $vol, $abbr)
{
$frag = '';
$doi = $abbr . $year . $vol . rand(1000, 9999);
$frag = $doi;
$check = $this->production_article_obj->where('doi', $doi)->find();
if ($check) {
$frag = $this->createdoi($year, $vol, $abbr);
}
return $frag;
}
/**
* 获取引用文献列表
*/
public function getReferList()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_id' => 'require|number'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$this->refuseReferIndex($data['p_article_id']);
$dois = $this->production_article_refer_obj->where("p_article_id", $data['p_article_id'])->where("refer_doi","<>","")->where("state",0)->group("refer_doi")->having("count(*)>1")->column("refer_doi");
$list = $this->production_article_refer_obj->where('p_article_id', $data['p_article_id'])->where('state', 0)->order("index")->select();
$aRepeat = [];
foreach ($list as $k => $v){
if(in_array($v['refer_doi'],$dois)){
$list[$k]['is_repeat'] = 1;
$aRepeat[$v['refer_doi']][] = $v['index'];
}else{
$list[$k]['is_repeat'] = 0;
}
}
$re['refers'] = $list;
$re['repeat'] = empty($aRepeat) ? [] : $aRepeat;
return jsonSuccess($re);
}
/**
* 修改参考文献的最终结果
*/
public function editReferFrag()
{
$data = $this->request->post();
$rule = new Validate([
'p_refer_id' => 'require',
'refer_frag' => 'require'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$updata['refer_frag'] = trim($data['refer_frag']);
$updata['cs'] = 1;
$this->production_article_refer_obj->where('p_refer_id', $data['p_refer_id'])->update($updata);
return jsonSuccess([]);
}
/**
* 获取生产实例列表
*/
public function getProductionList()
{
$data = $this->request->post();
$rule = new Validate([
'editor_id' => 'require|number',
'journal_id' => 'require',
'pageIndex' => 'require',
'pageSize' => 'require'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$journalids = [];
if ($data['journal_id'] == 0) {
$journalids = $this->journal_obj->where('editor_id', $data['editor_id'])->column('journal_id');
}else{
$journalids[] = $data['journal_id'];
}
$limit_start = ($data['pageIndex'] - 1) * $data['pageSize'];
$list = $this->production_article_obj
->field('t_production_article.*,t_article.accept_sn')
->join('t_article', 't_article.article_id = t_production_article.article_id', 'left')
->where('t_production_article.journal_id', 'in', $journalids)
->where('t_production_article.state', 0)
->limit($limit_start, $data['pageSize'])
->select();
$count = $this->production_article_obj->where('journal_id', 'in', $journalids)->where('state', 0)->count();
$re['productions'] = $list;
$re['count'] = $count;
return jsonSuccess($re);
}
/**
* 编辑文章信息在排版之后
*/
public function editArticleLast()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_id' => 'require|number',
// 'abstract' => 'require',
'doi' => 'require',
'pub_date' => 'require'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
if(isset($data['abstract'])){
$updata['abstract'] = trim($data['abstract']);
}
$updata['doi'] = $data['doi'];
$updata['pub_date'] = $data['pub_date'];
$this->production_article_obj->where('p_article_id', $data['p_article_id'])->update($updata);
return jsonSuccess([]);
}
/**
* 推送文章到官网系统
*/
public function pushArticleToSystem()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_id' => 'require'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$p_info = $this->production_article_obj->where('p_article_id', $data['p_article_id'])->find();
if($p_info['topics']==""||$p_info['related']==""){
return jsonError("Topic and related articles cannot be empty");
}
if ($p_info['state'] != 0) {
return jsonError("Non repeatable submission");
}
if ($p_info['proof_state'] != 2) {
return jsonError('Warning: It is a violation to publish your article online without completing PROOF.
The ONLINE step will only continue if you have completed the PROOF step.');
}
//参考文献重复的不能提交
// $this->production_article_refer_obj->where("p_article_id",$data['p_article_id'])->where("state",0)->group("refer_doi")->
$article_info = $this->article_obj->where('article_id', $p_info['article_id'])->find();
$journal_info = $this->journal_obj->where('journal_id', $article_info['journal_id'])->find();
$authors = $this->production_article_author_obj->where('p_article_id', $data['p_article_id'])->where('state', 0)->select();
$report_authors = [];
foreach ($authors as $k => $v) {
$cache = $this->production_article_author_to_organ_obj
->field('t_production_article_organ.organ_name')
->join('t_production_article_organ', 't_production_article_organ.p_article_organ_id = t_production_article_author_to_organ.p_article_organ_id', 'left')
->where('t_production_article_author_to_organ.p_article_author_id', $v['p_article_author_id'])
->where('t_production_article_author_to_organ.state', 0)
->select();
$authors[$k]['organs'] = $cache;
if($v['is_report']==1){
$c_user = $this->user_obj->where('email',$v['email'])->find();
$cac['user_id'] = $c_user['user_id'];
$report_authors[] = $cac;
}
}
$organs = $this->production_article_organ_obj->where('p_article_id', $data['p_article_id'])->where('state', 0)->select();
//check信息是否完整
if (count($authors) == 0 || $p_info['journal_stage_id'] == '' || $p_info['doi'] == '' || $p_info['abstract'] == '' || $p_info['npp'] == '') {
return jsonError('Incomplete information');
}
//发送推送请求
// $url = "http://www.journal.com/master/Article/addArticleForSubmission";
$url = 'http://journalapi.tmrjournals.com/public/index.php/master/Article/addArticleForSubmission';
$pra = [];
$pra['p_article_id'] = $data['p_article_id'];
$pra['title'] = $p_info['title'];
$pra['journal_stage_id'] = $p_info['journal_stage_id'];
$pra['issn'] = $journal_info['issn'];
$pra['ltai'] = $p_info['ltai'];
$pra['type'] = $p_info['type'];
$pra['doi'] = $p_info['doi'];
$pra['tradition_tag'] = $p_info['tradition_tag'];
$pra['tradition'] = $p_info['tradition'];
$pra['mhoo'] = $p_info['mhoo'];
$pra['abstract'] = $p_info['abstract'];
$pra['pub_date'] = $p_info['pub_date'];
$pra['abbr'] = $p_info['abbr'];
$pra['icon'] = $p_info['icon'];
$pra['lx_online'] = $journal_info['cycle']==0?0:1;
$pra['related'] = $p_info['related'];
$pra['topics'] = $p_info['topics'];
if ($p_info['file_sub'] != '') {
$pra['file_sub'] = $p_info['file_sub'];
}
if ($p_info['file_sub2'] != '') {
$pra['file_sub2'] = $p_info['file_sub2'];
}
if ($p_info['file_cdf'] != '') {
$pra['file_cdf'] = $p_info['file_cdf'];
}
if ($p_info['endnote'] != '') {
$pra['endnote'] = $p_info['endnote'];
}
if ($p_info['bibtex'] != '') {
$pra['bibtex'] = $p_info['bibtex'];
}
if ($p_info['file_original'] != ''){
$pra['file_original'] = $p_info['file_original'];
}
$pra['file_pdf'] = $p_info['file_pdf'];
$pra['keywords'] = $p_info['keywords'];
$pra['npp'] = $p_info['npp'];
$pra['authors'] = json_encode($authors);
$pra['organs'] = json_encode($organs);
$res = object_to_array(json_decode(myPost($url, $pra)));
if ($res['code'] == 0) {
$r_update['state'] = 2;
$r_update['w_article_id'] = isset($res['data']['article_id'])?$res['data']['article_id']:0;
$this->production_article_obj->where('p_article_id', $data['p_article_id'])->update($r_update);
foreach($report_authors as $v){
$iua['user_id'] = $v['user_id'];
$iua['w_article_id'] = $res['data']['article_id'];
$iua['w_article_doi'] = '10.53388/'.$p_info['doi'];
$iua['journal_title'] = $journal_info['title'];
$this->user_author_obj->insert($iua);
}
//推送到生成AI内容队列 chengxiaoling start 20250530
if(!empty($p_info['type']) && in_array($p_info['type'], ['Article','Review','Mini Review'])){
$iArticleId = empty($r_update['w_article_id']) ? 0 : $r_update['w_article_id'];
if(!empty($iArticleId)){
Queue::push('app\api\job\ArticleAiCreateContent@fire', ['article_id' => $iArticleId], 'ArticleAiCreateContent');
}
}
//推送到生成AI内容队列 chengxiaoling end 20250530
//推送到关联文章发送邮件提醒队列【立即发送提醒邮件给关联文章的作者及文章作者】 chengxiaoling start 20250609
if(!empty($p_info['related'])){
$iArticleId = empty($r_update['w_article_id']) ? 0 : $r_update['w_article_id'];
if(!empty($iArticleId)){
Queue::push('app\api\job\RelatedArticle@fire', ['article_id' => $iArticleId], 'RelatedArticle');
}
}
//推送到关联文章发送邮件提醒队列【立即发送提醒邮件给关联文章的作者及文章作者】 chengxiaoling end 20250609
return jsonSuccess([]);
} else {
return jsonError('system error:' . $res['msg']);
}
}
public function getPdfByHtml(){
$data = $this->request->post();
$html = $data['html'];
$path = ROOT_PATH . 'public' . DS . 'testpdf' . DS;
$intFontSize = 10.5;
// $defaultConfig = (new Mpdf\Config\ConfigVariables())->getDefaults();
$defaultConfig = (new ConfigVariables())->getDefaults();
$fontDirs = $defaultConfig['fontDir'];
// $defaultFontConfig = (new Mpdf\Config\FontVariables())->getDefaults();
$defaultFontConfig = (new FontVariables())->getDefaults();
$fontData = $defaultFontConfig['fontdata'];
$mpdf = new \Mpdf\Mpdf([
'mode' => 'utf-8',
'format' => 'A4',
'default_font_size' => $intFontSize,
'useSubstitutions' => true, //中文支持关键
'useAdobeCJK' => true,
'margin_left' => 0,
'margin_right' => 0,
'margin_top' => 0,
'margin_bottom' => 0,
'margin_header' => 0,
'margin_footer' => 0,
'fontDir' => array_merge($fontDirs, [
__DIR__ . '/custom/font/directory',
]),
'fontdata' => $fontData + [
'宋体' => [
'R' => 'Sun-ExtA.ttf',
'I' => 'Sun-ExtB.ttf',
]
],
'default_font' => '宋体' //CSS中写的汉字宋体就这么写要是别的自定义的就写自己的 自定义字体关键
]);
$strContent = $html;
$mpdf->WriteHTML($strContent);
$strFileName_New = time() . rand(100, 999) . '.pdf';
$mpdf->Output($path .$strFileName_New, 'f');
return jsonSuccess(['url'=>$strFileName_New]);
}
public function creatpdf()
{
$path = ROOT_PATH . 'public' . DS . 'testpdf' . DS;
$mpdf = new Mpdf(['mode' => 'utf-8', 'format' => 'A4']);
$mpdf->SetDisplayMode('fullpage');
$mpdf->autoScriptToLang = true;
$mpdf->autoLangToFont = true;
$fileUrl = $path . '1234.pdf';
$mpdf->WriteHTML(file_get_contents($path . 'meaut1.html'));
$mpdf->Output($fileUrl, "D");
}
public function creatpdf1()
{
$path = ROOT_PATH . 'public' . DS . 'testpdf' . DS;
$intFontSize = 10.5;
// $defaultConfig = (new Mpdf\Config\ConfigVariables())->getDefaults();
$defaultConfig = (new ConfigVariables())->getDefaults();
$fontDirs = $defaultConfig['fontDir'];
// $defaultFontConfig = (new Mpdf\Config\FontVariables())->getDefaults();
$defaultFontConfig = (new FontVariables())->getDefaults();
$fontData = $defaultFontConfig['fontdata'];
$mpdf = new \Mpdf\Mpdf([
'mode' => 'utf-8',
'format' => 'A4',
'default_font_size' => $intFontSize,
'useSubstitutions' => true, //中文支持关键
'useAdobeCJK' => true,
'margin_left' => 0,
'margin_right' => 0,
'margin_top' => 0,
'margin_bottom' => 0,
'margin_header' => 0,
'margin_footer' => 0,
'fontDir' => array_merge($fontDirs, [
__DIR__ . '/custom/font/directory',
]),
'fontdata' => $fontData + [
'宋体' => [
'R' => 'Sun-ExtA.ttf',
'I' => 'Sun-ExtB.ttf',
]
],
'default_font' => '宋体' //CSS中写的汉字宋体就这么写要是别的自定义的就写自己的 自定义字体关键
]);
//自定义标签样式设置也可以直接修改DefaultCss.php中的默认设置
// $mpdf->defaultCSS["BODY"]['FONT-SIZE'] = '10.5pt';
// $mpdf->defaultCSS["BODY"]['LINE-HEIGHT'] = '1.6em';
// $mpdf->defaultCSS["P"]['MARGIN'] = '0 0';
// $mpdf->defaultCSS["P"]['PADDING'] = '0';
// $mpdf->defaultCSS["H1"]['FONT-SIZE'] = '16pt';
// $mpdf->defaultCSS["H1"]['MARGIN'] = '0 0';
// $mpdf->defaultCSS["H2"]['FONT-SIZE'] = '10.5pt';
// $mpdf->defaultCSS["H2"]['MARGIN'] = '0em 0';
// $mpdf->defaultCSS["H4"]['FONT-SIZE'] = '14pt';
// $mpdf->defaultCSS["H4"]['MARGIN'] = '0 0';
// $mpdf->defaultCSS["H5"]['FONT-SIZE'] = '10.5pt';
// $mpdf->defaultCSS["H5"]['FONT-WEIGHT'] = 'normal';
// $mpdf->defaultCSS["H5"]['MARGIN'] = '-3.4em 0 0 0';
// $mpdf->defaultCSS['SPAN'] = [
// 'PADDINT-LEFT' => '14px',
// 'PADDINT-RIGHT' => '14px',
// 'PADDINT-TOP' => '0px',
// 'PADDINT-BOTTOM' => '0px'
// ];
$strContent =file_get_contents($path . 'meaut33.html');
$mpdf->WriteHTML($strContent);
$strFileName_New = $path .time() . rand(100, 999) . '.pdf';
$mpdf->Output($strFileName_New, true); //第二个参数true是直接下载 不设置默认仅保存
}
// public function bekjournal($str)
// {
// preg_match("/[0-9]{4}/", $str, $math);
// $year = $math[0];
// $frag[0] = trim(substr($str, 0, stripos($str, $year)));
// $frag[1] = substr($str, stripos($str, $year));
// return $frag;
// }
public function prgeAuthor($author)
{
$a = explode(',', $author);
if (count($a) < 7) {
return $author . '.';
} else {
return trim($a[0]) . ', ' . trim($a[1]) . ', ' . trim($a[2]) . ', et al.';
}
}
// public function testTypeSetting(){
// $data['p_article_id'] = 7;
// $p_info = $this->production_article_obj->where('p_article_id', $data['p_article_id'])->find();
// $article_info = $this->article_obj->where('article_id', $p_info['article_id'])->find();
// $journal_info = $this->journal_obj->where('journal_id', $p_info['journal_id'])->find();
// $editor_info = $this->user_obj->where('user_id', $journal_info['editor_id'])->find();
// $typesetInfo = [];
// $typesetInfo['info_title'] = $p_info['title'];
// $typesetInfo['info_type'] = $p_info['type'];
// $typesetInfo['doi'] = $p_info['doi'];
// $typesetInfo['topic'] = '';
// $typesetInfo['mainText'] = $p_info['main'];
// $au_res = $this->authorFormate($data['p_article_id']);
// $typesetInfo['author'] = $au_res['author'];
// $typesetInfo['authorAddress'] = $au_res['address'];
// $typesetInfo['authorContribution'] = $p_info['author_contribution'];
// //查询通讯作者
// $corr_authors = $this->production_article_author_obj->where('p_article_id', $data['p_article_id'])->where('is_report', 1)->where('state', 0)->select();
// $corrauthor = '';
// $corremail = '';
// foreach ($corr_authors as $v) {
// $corrauthor .= trim($v['first_name']) . ' ' . trim($v['last_name']) . '. ';
// $corremail .= $v['email'] . '. ';
// }
// $typesetInfo['authorCorresponding'] = substr(trim($corrauthor), 0, -1);
// $typesetInfo['authorCorrespondingEmail'] = substr(trim($corremail), 0, -1);
// $typesetInfo['traditon'] = $p_info['tradition'];
// $typesetInfo['journal'] = $journal_info['title'];
// $typesetInfo['jabbr'] = $journal_info['jabbr'];
// //查询分期
// $url = 'http://journalapi.tmrjournals.com/public/index.php/master/Journal/getStageDetail';
// $cs['journal_stage_id'] = $p_info['journal_stage_id'];
// $list = object_to_array(json_decode(myPost($url, $cs)));
// $stage_re = $list['data']['stage'];
// $typesetInfo['stage'] = $stage_re['stage_year'] . ';' . $stage_re['stage_vol'] . '(' . $stage_re['stage_no'] . '):' . $p_info['npp']; //2022;6(1):17
// $typesetInfo['little_author'] = $p_info['abbr'];
// $typesetInfo['website'] = $journal_info['website'];
// $typesetInfo['acknowledgment'] = $p_info['acknowledgment'];
// $typesetInfo['received_date'] = date("d F Y", $article_info['ctime']);;
// $typesetInfo['accepted_date'] = date("d F Y", $article_info['rtime']);
// $typesetInfo['online_date'] = $p_info['pub_date']; //这里可能会有问题
// $typesetInfo['abbreviation'] = $p_info['abbreviation'];
// $typesetInfo['abstractText'] = $p_info['abstract'];
// $typesetInfo['keywords'] = $p_info['keywords'];
// $typesetInfo['userAccount'] = $editor_info['nickname'];
// //获取文件
// // $files = $this->article_file_obj
// // ->where('article_id', $article_info['article_id'])
// // ->where('type_name', 'manuscirpt')
// // ->order('ctime desc')
// // ->limit(1)
// // ->select();
// // if (count($files) == 0) {
// // return jsonError('No Manuscript');
// // }
// // $typesetInfo['filename'] = "http://api.tmrjournals.com/public/" . $files[0]['file_url'];
// $rs = $this->production_article_refer_obj->where('p_article_id', $p_info['p_article_id'])->where('state', 0)->select();
// // $refers = [];
// // foreach ($rs as $v) {
// // $refers[] = $v['refer_frag'];
// // }
// $typesetInfo['refers'] = json_encode($rs);
// $url = "http://localhost:8081/typeset/webtest";
// $res = object_to_array(json_decode(myPost1($url, $typesetInfo)));
// dump($res);
// }
/**
* 排版主方法入口
*/
public function doTypeSetting()
{
$data = $this->request->post();
// 验证规则
$rule = new Validate([
'p_article_id' => 'require|number'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$p_info = $this->production_article_obj->where('p_article_id', $data['p_article_id'])->find();
$article_info = $this->article_obj->where('article_id', $p_info['article_id'])->find();
$journal_info = $this->journal_obj->where('journal_id', $p_info['journal_id'])->find();
$editor_info = $this->user_obj->where('user_id', $journal_info['editor_id'])->find();
$typesetInfo = [];
$typesetInfo['info_title'] = $p_info['title'];
$typesetInfo['info_type'] = $p_info['type'];
$typesetInfo['doi'] = $p_info['doi'];
$typesetInfo['topic'] = '';
$typesetInfo['mainText'] = $p_info['main'];
$au_res = $this->authorFormate($data['p_article_id']);
$typesetInfo['author'] = $au_res['author'];
$typesetInfo['authorAddress'] = $au_res['address'];
$typesetInfo['authorContribution'] = $p_info['author_contribution'];
//查询通讯作者
$corr_authors = $this->production_article_author_obj->where('p_article_id', $data['p_article_id'])->where('is_report', 1)->where('state', 0)->select();
$corrauthor = '';
$corremail = '';
foreach ($corr_authors as $v) {
$corrauthor .= trim($v['first_name']) . ' ' . trim($v['last_name']) . '. ';
$corremail .= $v['email'] . '. ';
}
$typesetInfo['authorCorresponding'] = substr(trim($corrauthor), 0, -1);
$typesetInfo['authorCorrespondingEmail'] = substr(trim($corremail), 0, -1);
$typesetInfo['traditon'] = $p_info['tradition'];
$typesetInfo['journal'] = $journal_info['title'];
$typesetInfo['jabbr'] = $journal_info['jabbr'];
//查询分期
$url = 'http://journalapi.tmrjournals.com/public/index.php/master/Journal/getStageDetail';
$cs['journal_stage_id'] = $p_info['journal_stage_id'];
$list = object_to_array(json_decode(myPost($url, $cs)));
$stage_re = $list['data']['stage'];
$typesetInfo['stage'] = $stage_re['stage_year'] . ';' . $stage_re['stage_vol'] . '(' . $stage_re['stage_no'] . '):' . $p_info['npp']; //2022;6(1):17
$typesetInfo['little_author'] = $p_info['abbr'];
$typesetInfo['website'] = $journal_info['website'];
$typesetInfo['acknowledgment'] = $p_info['acknowledgment'];
$typesetInfo['received_date'] = date("d F Y", $article_info['ctime']);;
$typesetInfo['accepted_date'] = date("d F Y", $article_info['rtime']);
$typesetInfo['online_date'] = $p_info['pub_date']; //这里可能会有问题
$typesetInfo['abbreviation'] = $p_info['abbreviation'];
$typesetInfo['abstractText'] = $p_info['abstract'];
$typesetInfo['keywords'] = $p_info['keywords'];
$typesetInfo['userAccount'] = $editor_info['nickname'];
//获取文件
$files = $this->article_file_obj
->where('article_id', $article_info['article_id'])
->where('type_name', 'manuscirpt')
->order('ctime desc')
->limit(1)
->select();
if (count($files) == 0) {
return jsonError('No Manuscript');
}
$typesetInfo['filename'] = "http://api.tmrjournals.com/public/" . $files[0]['file_url'];
$rs = $this->production_article_refer_obj->where('p_article_id', $p_info['p_article_id'])->where('state', 0)->order("index")->select();
// $refers = [];
// foreach ($rs as $v) {
// $refers[] = $v['refer_frag'];
// }
// $typesetInfo['refers'] = json_encode($refers);
$typesetInfo['refers'] = json_encode($rs);
$url = $this->ts_base_url."api/typeset/webGetDocx";
// $url = "http://localhost:8081/typeset/webGetDocx";
$res = object_to_array(json_decode(myPost1($url, $typesetInfo)));
if (!isset($res['data']['file']) || $res['data']['file'] == '') {
return jsonError('create error');
}
$file_res = date('Ymd') . DS . $res['data']['file'];
$tf_insert['p_article_id'] = $p_info['p_article_id'];
$tf_insert['url'] = $file_res;
$tf_insert['ctime'] = time();
$this->production_article_frag_obj->insert($tf_insert);
return jsonSuccess([]);
}
public function getTopicsByIssn(){
$data = $this->request->post();
$rule = new Validate([
"p_article_id"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$p_info = $this->production_article_obj->where("p_article_id",$data['p_article_id'])->find();
$journal_info = $this->journal_obj->where("journal_id",$p_info['journal_id'])->find();
$url = 'http://journalapi.tmrjournals.com/public/index.php/master/Article/getTopicByIssn';
$pra = [];
$pra['issn'] = $journal_info['issn'];
$res = object_to_array(json_decode(myPost($url, $pra)));
$re['now'] = $p_info['topics']==""?[]:json_decode($p_info['topics']);
$re['list'] = $res['data']['list'];
return jsonSuccess($re);
}
public function getProductRelatedList(){
$data = $this->request->post();
$rule = new Validate([
"p_article_id"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$p_info = $this->production_article_obj->where("p_article_id",$data['p_article_id'])->find();
if($p_info['related']==""){
return jsonSuccess(['list'=>null]);
}
$url = 'http://journalapi.tmrjournals.com/public/index.php/master/Article/getArticlesForSubmission';
$pra = [];
$pra['ids'] = $p_info['related'];
$res = object_to_array(json_decode(myPost($url, $pra)));
$re['list'] = $res['data']['list'];
return jsonSuccess($re);
}
public function addProductRelated(){
$data = $this->request->post();
$rule = new Validate([
"p_article_id"=>"require",
"article_id"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$p_info = $this->production_article_obj->where("p_article_id",$data['p_article_id'])->find();
if ($p_info['related']==""){
$list[] = $data['article_id'];
}else{
if(array_search($data['article_id'], json_decode($p_info['related']))!==false){
return jsonSuccess([]);
}
$list = json_decode($p_info['related']);
$list[] = $data['article_id'];
sort($list);
}
$l = self::repalecArray($list);
$this->production_article_obj->where("p_article_id",$data['p_article_id'])->update(['related'=>count($l)>0?json_encode($l):'']);
return jsonSuccess($list);
}
private function repalecArray($list){
$frag = [];
foreach ($list as $v){
$frag[] = $v;
}
return $frag;
}
public function delProductRelated(){
$data = $this->request->post();
$rule = new Validate([
"p_article_id"=>"require",
"article_id"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$p_info = $this->production_article_obj->where("p_article_id",$data['p_article_id'])->find();
$list = json_decode($p_info['related']);
$key = array_search($data['article_id'],$list);
if($key!==false){
unset($list[$key]);
}
$this->production_article_obj->where("p_article_id",$data['p_article_id'])->update(['related'=>json_encode(self::repalecArray($list))]);
return jsonSuccess(['list'=>$list]);
}
// public function editProductTopics(){
// $data = $this->request->post();
// $rule = new Validate([
// "p_article_id"=>"require",
// "list"=>"require"
// ]);
// if(!$rule->check($data)){
// return jsonError($rule->getError());
// }
// $this->production_article_obj->where("p_article_id",$data['p_article_id'])->update(['topics'=>json_encode($data['list'])]);
// return jsonSuccess([]);
// }
public function addProductTopic(){
$data = $this->request->post();
$rule = new Validate([
"p_article_id"=>"require",
"journal_topic_id"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$p_info = $this->production_article_obj->where("p_article_id",$data['p_article_id'])->find();
if($p_info['topics']==""){
$list[] = $data['journal_topic_id'];
}else{
if(array_search($data['journal_topic_id'],json_decode($p_info['topics']))!==false){
return jsonSuccess([]);
}
$list = json_decode($p_info['topics']);
$list[] = $data['journal_topic_id'];
sort($list);
}
$this->production_article_obj->where("p_article_id",$data['p_article_id'])->update(['topics'=>json_encode(self::repalecArray($list))]);
return jsonSuccess(['list'=>$list]);
}
public function delProductTopic(){
$data = $this->request->post();
$rule = new Validate([
"p_article_id"=>"require",
"journal_topic_id"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$p_info = $this->production_article_obj->where("p_article_id",$data['p_article_id'])->find();
$list = json_decode($p_info['topics']);
$key = array_search($data['journal_topic_id'],$list);
if($key!==false){
unset($list[$key]);
}
$l = self::repalecArray($list);
$this->production_article_obj->where("p_article_id",$data['p_article_id'])->update(['topics'=>count($l)>0?json_encode($l):'']);
return jsonSuccess(['list'=>$list]);
}
public function editProductRelated(){
$data = $this->request->post();
$rule = new Validate([
"p_article_id"=>"require",
"list"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$this->production_article_obj->where("p_article_id",$data['p_article_id'])->update(['related'=>json_encode($data['list'])]);
return jsonSuccess([]);
}
private function abstractChange($str){
$html = preg_replace('/(.*?)<\/strong>/', '{b}$2{/b}', $str);
$html = strip_tags($html);
$html = str_replace("{b}","",$html);
$html = str_replace("{/b}","",$html);
return $html;
}
public function doTypeSettingNew(){
$data = $this->request->post();
$rule = new Validate([
"article_id"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$p_info = $this->production_article_obj->where("article_id",$data['article_id'])->whereIn("state",[0,2])->find();
if(!$p_info){
return jsonError("error");
}
$article_info = $this->article_obj->where('article_id', $p_info['article_id'])->find();
$journal_info = $this->journal_obj->where('journal_id', $p_info['journal_id'])->find();
$editor_info = $this->user_obj->where('user_id', $journal_info['editor_id'])->find();
$typesetInfo = [];
$typesetInfo['info_title'] = $p_info['title'];
$typesetInfo['info_type'] = $p_info['type'];
$typesetInfo['doi'] = $p_info['doi'];
$typesetInfo['topic'] = '';
// $typesetInfo['mainText'] = $p_info['main'];
$au_res = $this->authorFormate($p_info['p_article_id']);
$typesetInfo['author'] = $au_res['author'];
$typesetInfo['authorAddress'] = $au_res['address'];
$typesetInfo['authorAddressList'] = $au_res['addressList1'];
$typesetInfo['authorContribution'] = $p_info['author_contribution'];
//查询通讯作者
$corr_authors = $this->production_article_author_obj->where('p_article_id', $p_info['p_article_id'])->where('is_report', 1)->where('state', 0)->select();
$corrauthor = '';
$corremail = '';
foreach ($corr_authors as $v) {
$corrauthor .= trim($v['first_name']) . ' ' . trim($v['last_name']) . '. ';
$corremail .= $v['email'] . '. ';
}
$typesetInfo['authorCorresponding'] = substr(trim($corrauthor), 0, -1);
$typesetInfo['authorCorrespondingEmail'] = substr(trim($corremail), 0, -1);
$typesetInfo['traditon'] = $p_info['tradition'];
$typesetInfo['journal'] = $journal_info['title'];
$typesetInfo['jabbr'] = $journal_info['jabbr'];
//查询分期
$url = 'http://journalapi.tmrjournals.com/public/index.php/master/Journal/getStageDetail';
$cs['journal_stage_id'] = $p_info['journal_stage_id'];
$list = object_to_array(json_decode(myPost($url, $cs)));
$stage_re = $list['data']['stage'];
$typesetInfo['stage'] = $stage_re['stage_year'] . ';' . $stage_re['stage_vol'] . '(' . $stage_re['stage_no'] . '):' . $p_info['npp']; //2022;6(1):17
$typesetInfo['little_author'] = $p_info['abbr'];
$typesetInfo['website'] = $journal_info['website'];
$typesetInfo['acknowledgment'] = $p_info['acknowledgment'];
// $received_info = $this->article_msg_obj->where("article_id",$p_info['article_id'])->where("state_from",4)->where("state_to",1)->find();
$received_data = $article_info['received_time']>0?$article_info['received_time']:$article_info['ctime'];
$typesetInfo['received_date'] = date("d F Y", $received_data);
$super_num = $this->article_author_obj->where("article_id",$p_info['article_id'])->where("state",0)->where("is_super",1)->count();
$typesetInfo['has_more'] = $super_num>1;
$typesetInfo['accepted_date'] = date("d F Y", $article_info['rtime']);
$typesetInfo['online_date'] = $p_info['pub_date']; //这里可能会有问题
$typesetInfo['abbreviation'] = $p_info['abbreviation'];
$typesetInfo['abstractText'] = $this->abstractChange($p_info['abstract']);
$typesetInfo['keywords'] = $p_info['keywords'];
$typesetInfo['userAccount'] = $editor_info['nickname'];
$files = $this->article_file_obj
->where('article_id', $article_info['article_id'])
->where('type_name', 'manuscirpt')
->order('ctime desc')
->limit(1)
->select();
if (count($files) == 0) {
return jsonError('No Manuscript');
}
$typesetInfo['filename'] = "http://api.tmrjournals.com/public/" . $files[0]['file_url'];
$rs = $this->production_article_refer_obj->where('p_article_id', $p_info['p_article_id'])->where('state', 0)->order("index")->select();
$typesetInfo['refers'] = json_encode($rs);
$main_list = $this->article_main_obj->where("article_id",$data['article_id'])->whereIn("state",[0,2])->order("sort")->select();
$start = 0;
foreach ($main_list as $k => $v){
$cas = strip_tags($v['content']);
if(strtolower(substr($cas, 0, 8)) === "keywords"){
$start = $k;
break;
}
}
$mainList = [];
$images = [];
$tables = [];
$nbsp = false;
foreach ($main_list as $k =>$item){
if($start>=$k){
continue;
}
$main_string = "";
if($item['type']==1){
continue;
$info = $this->article_main_image_obj->where("ami_id",$item['ami_id'])->find();
$arr['image'] = $info['url'];
$arr['title'] = "".$info['title']."";
$arr['note'] = $info['note'];
$images[$info['ami_id']] = $arr;
$main_string = "
";
}else if($item['type']==2){
continue;
$info = $this->article_main_table_obj->where("amt_id",$item['amt_id'])->find();
$arr_table['title'] = "".strip_tags($info['title'])."";
$arr_table['table_data'] = $info['table_data'];
$arr_table['note'] = $info['note'];
$tables[$info['amt_id']] = $arr_table;
$main_string = "";
}else{
if($item['is_h1']==1){
// $main_string = "".$item['content']."";
$main_string = "".strip_tags($item['content'])."
";
$nbsp = true;
}else if($item['is_h2']==1||$item['is_h3']==1){
$main_string = "".$item['content']."";
$nbsp = false;
}else{
$main_string = $nbsp?"".$item['content']:$item['content'];
$nbsp = false;
}
}
$mainList[] = $main_string;
}
$typesetInfo['mainText'] = json_encode($mainList);
// $typesetInfo['images'] = $images==[]?null:$images;
// $typesetInfo['tables'] = $tables==[]?null:$tables;
$as = $this->user_obj->field("t_user.*,t_article_reviewer_question.is_anonymous")
->join("t_article_reviewer","t_article_reviewer.reviewer_id=t_user.user_id","left")
->join("t_article_reviewer_question","t_article_reviewer_question.art_rev_id=t_article_reviewer.art_rev_id","left")
->where("t_article_reviewer.article_id",$article_info['article_id'])
->whereIn("t_article_reviewer.state",[1,2,3])
->select();
$as_str = "";
$has_yc = false;
foreach ($as as $v){
if($v['is_anonymous']==1){
$has_yc = true;
}else{
$as_str .= $v["realname"].", ";
}
}
$aca= trim(trim($as_str),",");
// return jsonSuccess(["ddd"=>$has_yc?$aca." and other anonymous reviewers":$aca]);
if($as_str==""){
$author_str = "all anonymous reviewers";
}else{
$author_str = $has_yc?$aca." and other anonymous reviewers":$aca;
}
$typesetInfo['author_str'] = $author_str;
$typesetInfo['images'] = null;
$typesetInfo['tables'] = null;
$url = $this->ts_base_url."api/typeset/createDocx";
// $url = "http://192.168.110.110:8081/typeset/createDocx";
// $url = "http://192.168.110.110:8081/typeset/testqt";
$res = object_to_array(json_decode(myPost1($url, $typesetInfo)));
if (!isset($res['data']['file']) || $res['data']['file'] == '') {
return jsonError('create error');
}
$file_res = date('Ymd') . DS . $res['data']['file'];
$tf_insert['p_article_id'] = $p_info['p_article_id'];
$tf_insert['url'] = $file_res;
$tf_insert['ctime'] = time();
$this->production_article_frag_obj->insert($tf_insert);
return jsonSuccess($res);
}
public function readTest(){
$url = "http://192.168.110.110:8081/typeset/readdoc";
$typesetInfo['filename'] = "11.docx";
$res = object_to_array(json_decode(myPost($url, $typesetInfo)));
return jsonSuccess($res);
}
/**
* 获取生产实例详情
*/
public function getProductionDetail()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_id' => 'require|number'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$p_info = $this->production_article_obj->where('p_article_id', $data['p_article_id'])->find();
proofState($p_info['article_id']);
$list = $this->production_article_author_obj->where('p_article_id', $data['p_article_id'])->where('state', 0)->select();
foreach ($list as $k => $v) {
$list[$k]['organs'] = $this->production_article_author_to_organ_obj
->field("t_production_article_organ.*")
->join("t_production_article_organ", 't_production_article_organ.p_article_organ_id = t_production_article_author_to_organ.p_article_organ_id', 'left')
->where('t_production_article_author_to_organ.p_article_author_id', $v['p_article_author_id'])
->where('t_production_article_author_to_organ.state', 0)
->select();
}
$re['production'] = $p_info;
$re['author'] = $list;
return jsonSuccess($re);
}
public function getProductionPreview()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_id' => 'require|number'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$p_info = $this->production_article_obj->where('p_article_id', $data['p_article_id'])->find();
$article_info = $this->article_obj->where('article_id', $p_info['article_id'])->find();
$journal_info = $this->journal_obj->where('journal_id', $article_info['journal_id'])->find();
// $list = $this->production_article_author_obj->where('p_article_id', $data['p_article_id'])->where('state', 0)->select();
$re['production'] = $p_info;
$re['author'] = $this->authorFormate($data['p_article_id']);
$re['journal'] = $journal_info;
return jsonSuccess($re);
}
/**
* 获取生产实例详情通过文章id
*/
public function getProductionDetailByArticleid()
{
$data = $this->request->post();
$rule = new Validate([
'article_id' => 'require|number'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$p_info = $this->production_article_obj->where('article_id', $data['article_id'])->where('state', 0)->find();
$article_info = $this->article_obj->where('article_id', $p_info['article_id'])->find();
$journal_info = $this->journal_obj->where('journal_id', $article_info['journal_id'])->find();
$re['production'] = $p_info;
$re['article'] = $article_info;
$re['journal'] = $journal_info;
return jsonSuccess($re);
}
/**
* 添加作者机构
*/
public function addAuthorOrgan()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_id' => 'require|number',
'organ_name' => 'require'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$p_info = $this->production_article_obj->where('p_article_id', $data['p_article_id'])->find();
$insert['p_article_id'] = $data['p_article_id'];
$insert['article_id'] = $p_info['article_id'];
$insert['organ_name'] = trim($data['organ_name']);
$this->production_article_organ_obj->insert($insert);
return jsonSuccess([]);
}
/**
* 删除作者机构
*/
public function delAuthorOrgan()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_organ_id' => 'require|number'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$this->production_article_organ_obj->where('p_article_organ_id', $data['p_article_organ_id'])->update(['state' => 1]);
$this->production_article_author_to_organ_obj->where('p_article_organ_id', $data['p_article_organ_id'])->update(['state' => 1]);
return jsonSuccess([]);
}
/**
* 编辑作者信息
*/
public function editAuthor()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_author_id' => 'require',
'first_name' => 'require',
'last_name' => 'require',
'author_country' => 'require',
'is_first' => 'require',
'is_report' => 'require',
'organs' => 'require'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$old_article_author_info = $this->production_article_author_obj->where('p_article_author_id', $data['p_article_author_id'])->find();
//判断邮箱是否重复 chengxiaoling 20250926 start
if(empty($old_article_author_info)){
return jsonError('Author information does not exist');
}
$iPArticleId = empty($old_article_author_info['p_article_id']) ? 0 : $old_article_author_info['p_article_id'];
$sEmail = empty($data['email']) ? '' : $data['email'];
$iAuthorId = empty($old_article_author_info['p_article_author_id']) ? 0 : $old_article_author_info['p_article_author_id'];
if(!empty($sEmail) && !empty($iPArticleId)){
$aWhere = ['p_article_id' => $iPArticleId,'email' => $sEmail,'state' => 0,'p_article_author_id' => ['<>',$iAuthorId]];
$aAuthor = $this->production_article_author_obj->field('p_article_author_id')->where($aWhere)->find();
if(!empty($aAuthor)){
return jsonError("Email has been bound by another author");
}
}
//判断邮箱是否重复 chengxiaoling 20250926 end
$article_info = $this->article_obj->where('article_id', $old_article_author_info['article_id'])->find();
$updata['author_name'] = $article_info['journal_id'] == 21 ? trim($data['last_name']) . trim($data['first_name']) : trim($data['first_name']) . ' ' . trim($data['last_name']);
$updata['first_name'] = trim($data['first_name']);
$updata['last_name'] = trim($data['last_name']);
$updata['orcid'] = isset($data['orcid']) ? $data['orcid'] : '';
$updata['author_country'] = $data['author_country'];
$updata['is_first'] = $data['is_first'];
$updata['is_report'] = $data['is_report'];
$updata['email'] = isset($data['email']) ? trim($data['email']) : '';
$this->production_article_author_obj->where('p_article_author_id', $data['p_article_author_id'])->update($updata);
if (is_array($data['organs'])) {
$has_ids = [];
foreach ($data['organs'] as $v) {
$cache_one = $this->production_article_author_to_organ_obj
->where('p_article_author_id', $data['p_article_author_id'])
->where('p_article_organ_id', $v)
->where('state', 0)
->find();
if ($cache_one == null) {
$insert['p_article_id'] = $old_article_author_info['p_article_id'];
$insert['p_article_author_id'] = $data['p_article_author_id'];
$insert['p_article_organ_id'] = $v;
$this->production_article_author_to_organ_obj->insert($insert);
}
$has_ids[] = intval($v);
}
$this->production_article_author_to_organ_obj->where('p_article_author_id', $data['p_article_author_id'])->where('state', 0)->where('p_article_organ_id', 'not in', $has_ids)->update(['state' => 1]);
} else {
$this->production_article_author_to_organ_obj->where('p_article_author_id', $data['p_article_author_id'])->where('state', 0)->update(['state' => 1]);
}
return jsonSuccess([]);
}
/**
* 编辑作者机构信息
*/
public function editAuthorOrgan()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_organ_id' => 'require|number',
'organ_name' => 'require'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$this->production_article_organ_obj->where('p_article_organ_id', $data['p_article_organ_id'])->update(['organ_name' => $data['organ_name']]);
return jsonSuccess([]);
}
/**
* 获取机构列表
*/
public function getOrganList()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_id' => 'require|number'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$list = $this->production_article_organ_obj->where('p_article_id', $data['p_article_id'])->where('state', 0)->select();
$re['organs'] = $list;
return jsonSuccess($re);
}
/**
* 添加作者
*/
public function addAuthor()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_id' => 'require|number',
'first_name' => 'require',
'last_name' => 'require',
'author_country' => 'require',
'is_first' => 'require',
'is_report' => 'require'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$p_info = $this->production_article_obj->where('p_article_id', $data['p_article_id'])->find();
$article_info = $this->article_obj->where('article_id', $p_info['article_id'])->find();
//判断邮箱是否重复 chengxiaoling 20250926 start
$iPArticleId = empty($data['p_article_id']) ? 0 : $data['p_article_id'];
$sEmail = empty($data['email']) ? '' : $data['email'];
if(!empty($sEmail) && !empty($iPArticleId)){
$aWhere = ['p_article_id' => $iPArticleId,'email' => $sEmail,'state' => 0];
$aAuthor = $this->production_article_author_obj->field('p_article_author_id')->where($aWhere)->find();
if(!empty($aAuthor)){
return jsonError("Email has been bound by another author");
}
}
//判断邮箱是否重复 chengxiaoling 20250926 end
$insert['p_article_id'] = $data['p_article_id'];
$insert['article_id'] = $p_info['article_id'];
$insert['author_name'] = $article_info['journal_id'] == 21 ? trim($data['last_name']) . trim($data['first_name']) : trim($data['first_name']) . ' ' . trim($data['last_name']);
$insert['first_name'] = trim($data['first_name']);
$insert['last_name'] = trim($data['last_name']);
$insert['orcid'] = isset($data['orcid']) ? $data['orcid'] : '';
$insert['author_country'] = $data['author_country'];
$insert['is_first'] = $data['is_first'];
$insert['is_report'] = $data['is_report'];
$insert['email'] = isset($data['email']) ? trim($data['email']) : '';
Db::startTrans();
$pa_id = $this->production_article_author_obj->insertGetId($insert);
$or_res = true;
if (isset($data['organs']) && is_array($data['organs'])) {
foreach ($data['organs'] as $v) {
$cache_ins['p_article_id'] = $data['p_article_id'];
$cache_ins['p_article_author_id'] = $pa_id;
$cache_ins['p_article_organ_id'] = $v;
$or_res = $this->production_article_author_to_organ_obj->insert($cache_ins) ? true : false;
}
}
if ($pa_id && $or_res) {
Db::commit();
return jsonSuccess([]);
} else {
Db::rollback();
return jsonError("system error");
}
}
/**
* gpt校对main内容
*/
public function freshMain(){
$data = $this->request->post();
$rule = new Validate([
'p_article_id'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$list = $this->production_article_main_obj->where('p_article_id',$data['p_article_id'])->where('state',0)->select();
foreach($list as $v){
if($v['content']==''||strlen($v['content'])<60){
$this->production_article_main_obj->where('p_main_id',$v['p_main_id'])->update(['content_g'=>$v['content']]);
}else{
Queue::push('app\api\job\gpt@fresh', $v, 'gpt');
}
}
return jsonSuccess([]);
}
public function testref(){
// $mes['role'] = "user";
// $mes['content'] = "你好啊";
// $ckey = md5(rand(1000,9999).time().rand(10000,99999));
// GptChar([$mes],$ckey);
// echo $ckey;
dump(pushGpt("The role of inflammation in MPNs has been increasingly reported in the literature, overproduction of inflammatory cytokines is a clinical feature of patients with MPNs [17-23]. The core proteins screened for inflammation-related RELA, TNF and IL6. IL6 is an important cytosolic inflammatory factor in vivo and the most commonly overexpressed inflammatory factor in myeloid malignancies[24], which promotes STAT3 phosphorylation[25]. Activated IL6/STAT3 signaling can further mediate the production of TNFα, IL1β and other inflammatory factors, continuously enhancing the inflammatory response. TNF mediates the clonal advantage of mutant cells in MPNs[20], and inhibition of TNFR showed a therapeutic effect in mice with MPNs [26]. The above data suggest a central role of inflammation-related factors in MPNs. It suggests that DHI may play a role in treating myeloproliferative neoplasms through multiple targets."));
// $production_obj = $this->production_article_main_obj->where('p_main_id',4)->find();
// freshContent($production_obj);
}
/**
* 更新引用条目
*/
public function freshRefers()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_id' => 'require',
'refers' => 'require|array'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$p_info = $this->production_article_obj->where('p_article_id', $data['p_article_id'])->find();
//清空之前的引用条目
$this->production_article_refer_obj->where('p_article_id', $p_info['p_article_id'])->update(['state' => 1]);
foreach ($data['refers'] as $k => $v) {
$cache_insert['p_article_id'] = $p_info['p_article_id'];
$cache_insert['refer_content'] = $v;
$cache_insert['index'] = $k;
$cache_insert['ctime'] = time();
$this->production_article_refer_obj->insert($cache_insert);
}
$this->referToDoi($data['p_article_id']);
$this->doiTofrag($data['p_article_id']);
//写入获取参考文献详情队列 chengxiaoling 20251127 start
if(!empty($data['p_article_id'])){
\think\Queue::push('app\api\job\AiCheckRefer@fire',['p_article_id' => $data['p_article_id']],'AiCheckRefer');
}
//写入获取参考文献详情队列 chengxiaoling 20251127 end
return jsonSuccess([]);
}
/**
* 合并到上个文献中
*/
public function referHB()
{
$data = $this->request->post();
$rule = new Validate([
'p_refer_id' => 'require'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$refer_info = $this->production_article_refer_obj->where('p_refer_id', $data['p_refer_id'])->find();
$refer_rev_res = $this->production_article_refer_obj
->where('p_article_id', $refer_info['p_article_id'])
->where('state', 0)
->where('p_refer_id', '<', $refer_info['p_refer_id'])
->order('p_refer_id desc')
->limit(1)->select();
$refer_rev_info = $refer_rev_res[0];
$updata['refer_frag'] = $refer_rev_info['refer_frag'] . $refer_info['refer_frag'];
$updata['cs'] = 0;
$this->production_article_refer_obj->where('p_refer_id', $refer_rev_info['p_refer_id'])->update($updata);
$this->production_article_refer_obj->where('p_refer_id', $refer_info['p_refer_id'])->update(['state' => 1]);
return jsonSuccess([]);
}
/**
* 参考文献识别doi
*/
public function referToDoi($p_article_id)
{
$p_info = $this->production_article_obj->where('p_article_id', $p_article_id)->find();
$refers = $this->production_article_refer_obj->where('p_article_id', $p_info['p_article_id'])->where('state', 0)->select();
foreach ($refers as $v) { //处理doi
if (strripos($v['refer_content'], 'doi:') == false && strripos($v['refer_content'], 'doi.org/') == false) {
continue;
}
$doi = '';
if (strripos($v['refer_content'], 'doi.org/') != false) {
$cache_arr = explode(' ', trim(substr($v['refer_content'], strripos($v['refer_content'], 'doi.org/') + 8)));
if (substr($cache_arr[0], -1) == '.') {
$doi = substr($cache_arr[0], 0, -1);
} else {
$doi = $cache_arr[0];
}
} else {
$cache_arr = explode(' ', trim(substr($v['refer_content'], strripos($v['refer_content'], 'doi:') + 4)));
if (substr($cache_arr[0], -1) == '.') {
$doi = substr($cache_arr[0], 0, -1);
} else {
$doi = $cache_arr[0];
}
}
$this->production_article_refer_obj->where('p_refer_id', $v['p_refer_id'])->update(['refer_doi' => $doi]);
}
return jsonSuccess([]);
}
public function testtest(){
$data = $this->request->post();
$rule = new Validate([
"id"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$d = $this->production_article_refer_obj->where("p_refer_id",$data['id'])->find();
$res = my_doiToFrag2($d);
return jsonSuccess($res);
}
public function doiTofrag($p_article_id)
{
$p_info = $this->production_article_obj->where('p_article_id', $p_article_id)->find();
$refers = $this->production_article_refer_obj->where('p_article_id', $p_info['p_article_id'])->where('state', 0)->select();
foreach ($refers as $v) {
if ($v['refer_doi'] == '') {
$this->production_article_refer_obj->where('p_refer_id', $v['p_refer_id'])->update(['refer_frag' => $v['refer_content']]);
} else {
Queue::push('app\api\job\ts@fire1', $v, 'ts');
}
}
return jsonSuccess([]);
}
public function mytestDoi(){
$data = $this->request->post();
$rule = new Validate([
"p_refer_id"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$info= $this->production_article_refer_obj->where("p_refer_id",$data['p_refer_id'])->find();
my_doiToFrag2($info);
}
public function mytest11()
{
$r = $this->production_article_refer_obj->where('p_refer_id', 8)->find();
my_doiToFrag2($r);
}
public function myreaddoc(){
Log::log("ceshi");
$file = "D://11/327ef248323aa75a3ba8347752b03764.docx";
$fileRoute['fileRoute'] = $file;
$url = "http://192.168.110.110:8081/typeset/readDocxNormal";
$res = object_to_array(json_decode(myPost1($url, $fileRoute)));
// $r = readDocx($file);
return jsonSuccess($res);
}
/**
* 验证参考文献是否全部通过
*/
public function checkRefer()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_id' => 'require'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$list = $this->production_article_refer_obj->where('p_article_id', $data['p_article_id'])->where('state', 0)->select();
if (!$list) {
return jsonError('references error');
}
$frag = 1;
foreach ($list as $v) {
if ($v['cs'] == 0) {
$frag = 0;
break;
}
}
if ($frag == 0) {
return jsonError('references check error');
} else {
return jsonSuccess([]);
}
}
public function getFragBF()
{
$data = $this->request->post();
// 验证规则
$rule = new Validate([
'p_article_id' => 'require|number'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$list = $this->production_article_refer_obj->where('p_article_id', $data['p_article_id'])->where('state', 0)->select();
$z = count($list);
$m = 0;
foreach ($list as $v) {
if ($v['refer_frag'] != ''||$v['author']!='') {
$m++;
}
}
if ($z == 0) {
return jsonError('system error!');
}
$f = intval($m * 100 / $z);
$re['bf'] = $f;
return jsonSuccess($re);
}
/**
* 删除作者
*/
public function delAuthor()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_author_id' => 'require'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$this->production_article_author_obj->where('p_article_author_id', $data['p_article_author_id'])->update(['state' => 1]);
return jsonSuccess([]);
}
/**
* 获取作者列表
*/
public function getAuthorlist()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_id' => 'require'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$list = $this->production_article_author_obj->where('p_article_id', $data['p_article_id'])->where('state', 0)->select();
foreach ($list as $k => $v) {
$list[$k]['organs'] = $this->production_article_author_to_organ_obj
->field("t_production_article_organ.*")
->join("t_production_article_organ", 't_production_article_organ.p_article_organ_id = t_production_article_author_to_organ.p_article_organ_id', 'left')
->where('t_production_article_author_to_organ.p_article_author_id', $v['p_article_author_id'])
->where('t_production_article_author_to_organ.state', 0)
->select();
}
$re['authors'] = $list;
return jsonSuccess($re);
}
/**
* 更改附加文件
*/
public function editArticleFile()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_id' => 'require',
'filetype' => 'require'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
if ($data['filetype'] == 'PDF') {
$updata['file_pdf'] = $data['fileURL'];
} elseif ($data['filetype'] == 'HTML') {
$updata['file_html'] = $data['fileURL'];
} elseif ($data['filetype'] == 'SUB') {
$updata['file_sub'] = $data['fileURL'];
} elseif ($data['filetype'] == 'SUB2') {
$updata['file_sub2'] = $data['fileURL'];
} elseif ($data['filetype'] == 'endNote') {
$updata['endnote'] = $data['fileURL'];
} elseif ($data['filetype'] == 'bibTex') {
$updata['bibtex'] = $data['fileURL'];
} elseif ($data['filetype'] == 'CDF') {
$updata['file_cdf'] = $data['fileURL'];
}elseif ($data['filetype'] == 'Original') {
$updata['file_original'] = $data['fileURL'];
}
$this->production_article_obj->where('p_article_id', $data['p_article_id'])->update($updata);
return jsonSuccess([]);
}
/**
* 上传文章图片文件
*/
public function up_articlepic_file()
{
$file = request()->file('articleicon');
if ($file) {
$info = $file->move(ROOT_PATH . 'public' . DS . 'articleicon');
if ($info) {
return json(['code' => 0, 'upurl' => str_replace("\\", "/", $info->getSaveName())]);
} else {
return json(['code' => 1, 'msg' => $file->getError()]);
}
}
}
/**
* 开始proof
*/
public function pushProof()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_id' => 'require'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$p_info = $this->production_article_obj->where('p_article_id', $data['p_article_id'])->find();
$article_info = $this->article_obj->where('article_id', $p_info['article_id'])->find();
$journal_info = $this->journal_obj->where('journal_id', $article_info['journal_id'])->find();
$user_info = $this->user_obj->where('user_id', $article_info['user_id'])->find();
$this->pdfAddProof($p_info['article_id']);
if ($p_info['file_pdf'] == '') {
return jsonError('To the editor: PROOF is the final form before the article goes online. The PROOF link step not be opened if you have not completed the previous steps.');
}
//发送邮件
$tt = "Dear Author,
";
$tt .= "Please confirm proof of your manuscript on the submission website within 48 hours. (https://submission.tmrjournals.com)
";
// $tt .= "Click here to confirm the proof.
";
$tt .= "Click here to view and confirm the proof.
";
$tt .= "If your response is not received, we will regard the author's consent to the version if the time exceeds.
";
$tt .= "If you have any questions, please feel free to contact us.
";
$tt .= "Note: Double-check the authors' information carefully to ensure they are correct.";
// $maidata['email'] = '751475802@qq.com';
$maidata['email'] = $user_info['email'];
$maidata['title'] = "PROOF|" . $journal_info['title'];
$maidata['content'] = $tt;
$maidata['tmail'] = $journal_info['email'];
$maidata['tpassword'] = $journal_info['epassword'];
if ($p_info['file_sub'] != '') {
$file = [];
$file[] = ROOT_PATH . 'public' . DS . 'proofPDF' . DS . $p_info['article_id'] . '.pdf';
if (substr($p_info['file_sub'], strripos($p_info['file_sub'], '.') + 1) == 'pdf') {
$file[] = ROOT_PATH . 'public' . DS . 'proofPDF' . DS . $p_info['article_id'] . 'SUB.pdf';
} else {
$file[] = ROOT_PATH . 'public' . DS . 'articleSUB' . DS . $p_info['file_sub'];
}
} else {
$file = ROOT_PATH . 'public' . DS . 'proofPDF' . DS . $p_info['article_id'] . '.pdf';
}
sendEmail($maidata['email'], $maidata['title'], $journal_info['title'], $maidata['content'], $maidata['tmail'], $maidata['tpassword'], $file);
//更改数据库
$updata['proof_state'] = 1;
$updata['proof_stime'] = time();
$updata['proof_etime'] = strtotime("+2 day");
$this->production_article_obj->where('p_article_id', $data['p_article_id'])->update($updata);
return jsonSuccess([]);
}
/**
* 自动执行
*/
public function proofState()
{
$this->production_article_obj->where('proof_state', 1)->where('proof_etime', '<', time())->update(['proof_state' => 2]);
}
/**
* 作者反馈proof
*/
public function editProof()
{
$data = $this->request->post();
$rule = new Validate([
'article_id' => 'require',
'code' => 'require'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$updata = [];
$updata['proof_rtime'] = time();
if ($data['code'] == 0) { //同意
$updata['proof_state'] = 2;
} else { //拒绝
if (trim($data['content']) == '') {
return jsonError('Content is required');
}
$updata['proof_state'] = 2;
$updata['proof_content'] = trim($data['content']);
}
$this->production_article_obj->where('article_id', $data['article_id'])->where('state', 0)->update($updata);
return jsonSuccess([]);
}
/**
* 同意proof通过邮件链接
*/
public function editProofFromEmail($articleId)
{
$this->production_article_obj->where('article_id', $articleId)->where('state', 0)->update(['proof_state' => 2, 'proof_rtime' => time()]);
echo 'Commit Succeeded';
}
public function myproofAdd(){
$article_id = $this->request->post("article_id");
self::pdfAddProof($article_id);
}
/**
* @title 文章文件上传
*
* @param name:name type:string require:1 desc:文件域名称(articleSUB/articleSUB2/bibTex/endNote/articleCDF/articleOriginal)
* @param name:type type:string require:1 desc:pathinfo(articleSUB/articleSUB2/bibTex/endNote/articleCDF/articleOriginal)
*
* @return upurl:图片地址
*/
public function up_article_file($type)
{
$file = request()->file($type);
if ($file) {
$info = $file->move(ROOT_PATH . 'public' . DS . $type);
if ($info) {
return json(['code' => 0, 'msg' => 'success', 'upurl' => str_replace("\\", "/", $info->getSaveName())]);
} else {
return json(['code' => 1, 'msg' => $file->getError()]);
}
}
}
private function authorFormate($p_article_id)
{
// $authors = $this->article_author_obj->where('article_id', $article_id)->where('state', 0)->select();
$p_info = $this->production_article_obj->where('p_article_id', $p_article_id)->find();
$article_info = $this->article_obj->where('article_id', $p_info['article_id'])->find();
$authors = $this->production_article_author_obj->where('p_article_id', $p_article_id)->where('state', 0)->select();
//组装地址数组
$address = [];
// foreach ($authors as $v) {
// $cac = $this->production_article_author_to_organ_obj
// ->field('t_production_article_organ.*')
// ->join('t_production_article_organ', 't_production_article_organ.p_article_organ_id = t_production_article_author_to_organ.p_article_organ_id', 'left')
// ->where('t_production_article_author_to_organ.p_article_author_id', $v['p_article_author_id'])
// ->where('t_production_article_author_to_organ.state', 0)
// ->select();
// foreach ($cac as $val) {
// if (!in_array($val['organ_name'], $address)) {
// $address[] = $val['organ_name'];
// }
// }
// }
$os = $this->production_article_author_to_organ_obj->where('p_article_id',$p_article_id)->where('state',0)->column('p_article_organ_id');
$ors = $this->production_article_organ_obj->where('p_article_organ_id','in',$os)->select();
foreach($ors as $v){
$address[] = $v['organ_name'];
}
$first_num = 0; //第一作者的总数
foreach ($authors as $v) {
if ($v['is_first'] == 1) {
$first_num++;
}
}
//构建数组字符串
$author = '';
foreach ($authors as $v) {
$cache_str = $article_info['journal_id'] == 21 ? trim($v['last_name']) . trim($v['first_name']) . "" : trim($v['first_name']) . ' ' . trim($v['last_name']) . '';
$cac = $this->production_article_author_to_organ_obj
->field('t_production_article_organ.*')
->join('t_production_article_organ', 't_production_article_organ.p_article_organ_id = t_production_article_author_to_organ.p_article_organ_id', 'left')
->where('t_production_article_author_to_organ.p_article_author_id', $v['p_article_author_id'])
->where('t_production_article_author_to_organ.state', 0)
->order('t_production_article_author_to_organ.p_article_organ_id')
->select();
foreach ($cac as $val) {
$cache_str .= (intval(search_array_val($address, $val['organ_name'])) + 1) . ", ";
}
$cache_str = trim($cache_str);
$cache_str = substr($cache_str, 0, -1);
if ($first_num > 1 && $v['is_first'] == 1) {
$cache_str .= '#';
}
if ($v['is_report'] == 1) {
$cache_str .= '*';
}
$cache_str .= '
';
$author .= $cache_str;
}
//组装address
$address_str = '';
$address1 = [];
foreach ($address as $k => $v) {
$address_str .= ($k + 1) . ' ' . $v . ' ';
$address1[] = [
"k"=>$k + 1,
"content"=>$v
];
}
$frag['author'] = $author;
$frag['address'] = $address_str;
$frag['addressList'] = $address;
$frag['addressList1'] = $address1;
return $frag;
}
/**
* 更改文章pdf文件
*/
public function updateArticlePDF()
{
$data = $this->request->post();
$rule = new Validate([
'p_article_id' => 'require',
'pdf' => 'require'
]);
if (!$rule->check($data)) {
return jsonError($rule->getError());
}
$update['file_pdf'] = $data['pdf'];
$this->production_article_obj->where('p_article_id', $data['p_article_id'])->update($update);
return jsonSuccess([]);
}
/**
* 上传pdf文件
*/
public function up_pdf_file()
{
$file = request()->file('pdf');
if ($file) {
$info = $file->move(ROOT_PATH . 'public' . DS . 'pdf');
if ($info) {
return json(['code' => 0, 'upurl' => str_replace("\\", "/", $info->getSaveName())]);
} else {
return json(['code' => 1, 'msg' => $file->getError()]);
}
}
}
/**上传最终版文章word文件
* @return \think\response\Json|void
*/
public function up_last_artFile(){
$file = request()->file('completedManuscirpt');
if ($file) {
$info = $file->move(ROOT_PATH . 'public' . DS . 'completedManuscirpt');
if ($info) {
return json(['code' => 0, 'upurl' => str_replace("\\", "/", $info->getSaveName())]);
} else {
return json(['code' => 1, 'msg' => $file->getError()]);
}
}
}
/**
* 上传pdf文件
*/
public function up_mainimg_file()
{
$file = request()->file('mainimg');
if ($file) {
$info = $file->move(ROOT_PATH . 'public' . DS . 'mainimg');
if ($info) {
return json(['code' => 0, 'upurl' => str_replace("\\", "/", $info->getSaveName())]);
} else {
return json(['code' => 1, 'msg' => $file->getError()]);
}
}
}
}