Files
tougao/application/api/controller/Production.php
wangjinlei ec59e99a8b 1
2022-11-23 14:48:15 +08:00

1296 lines
50 KiB
PHP

<?php
namespace app\api\controller;
use think\Controller;
use think\Db;
use think\Queue;
use think\Validate;
/**
* @title 公共管理相关
* @description 公共管理相关
*/
class Production extends Controller
{
protected $article_obj = '';
protected $user_obj = '';
protected $user_act_obj = '';
protected $journal_obj = '';
protected $user_log_obj = '';
protected $user_reviewer_info_obj = '';
protected $reviewer_major_obj = '';
protected $reviewer_to_journal_obj = '';
protected $article_reviewer_question_obj = '';
protected $article_msg_obj = '';
protected $article_file_obj = '';
protected $article_reviewer_obj = '';
protected $article_author_obj = '';
protected $article_transfer_obj = '';
protected $chief_to_journal_obj = '';
protected $login_auto_obj = '';
protected $major_obj = "";
protected $major_to_journal_obj = '';
protected $reviewer_from_author_obj = '';
protected $article_dialog_obj = '';
protected $article_proposal_obj = '';
protected $user_black_obj = '';
protected $user_reviewer_recommend_obj = '';
protected $ts_obj = '';
protected $ts_refer_obj = '';
protected $ts_frag_obj = '';
protected $online_obj = '';
protected $production_article_obj = '';
protected $production_article_author_obj = '';
protected $production_article_organ_obj = '';
protected $production_article_refer_obj = '';
protected $production_article_author_to_organ_obj = '';
protected $production_article_frag_obj = '';
public function __construct(\think\Request $request = null)
{
parent::__construct($request);
$this->user_obj = Db::name('user');
$this->user_act_obj = Db::name('user_act');
$this->article_obj = Db::name('article');
$this->journal_obj = Db::name('journal');
$this->user_log_obj = Db::name('user_log');
$this->user_reviewer_info_obj = Db::name("user_reviewer_info");
$this->reviewer_major_obj = Db::name('reviewer_major');
$this->reviewer_to_journal_obj = Db::name('reviewer_to_journal');
$this->article_reviewer_question_obj = Db::name('article_reviewer_question');
$this->article_msg_obj = Db::name('article_msg');
$this->article_file_obj = Db::name('article_file');
$this->article_reviewer_obj = Db::name('article_reviewer');
$this->article_author_obj = Db::name('article_author');
$this->article_transfer_obj = Db::name('article_transfer');
$this->chief_to_journal_obj = Db::name('chief_to_journal');
$this->login_auto_obj = Db::name('login_auto');
$this->major_obj = Db::name("major");
$this->major_to_journal_obj = Db::name('major_to_journal');
$this->reviewer_from_author_obj = Db::name("reviewer_from_author");
$this->article_dialog_obj = Db::name('article_dialog');
$this->article_proposal_obj = Db::name('article_proposal');
$this->user_black_obj = Db::name('user_black');
$this->user_reviewer_recommend_obj = Db::name('user_reviewer_recommend');
$this->ts_obj = Db::name('ts');
$this->ts_refer_obj = Db::name('ts_refer');
$this->ts_frag_obj = Db::name('ts_frag');
$this->online_obj = Db::name('online');
$this->production_article_obj = Db::name('production_article');
$this->production_article_author_obj = Db::name('production_article_author');
$this->production_article_organ_obj = Db::name('production_article_organ');
$this->production_article_refer_obj = Db::name('production_article_refer');
$this->production_article_author_to_organ_obj = Db::name('production_article_author_to_organ');
$this->production_article_frag_obj = Db::name('production_article_frag');
}
/**
* 添加生产实例
*/
public function addProduction()
{
$data = $this->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 = "http://ts.tmrjournals.com/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'];
//整理信息
$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;
}
$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();
$this->production_article_obj->insert($insert);
return jsonSuccess([]);
}
/**
* 删除生产实例
*/
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 mytest(){
$p_info = $this->production_article_obj->where('p_article_id',10)->find();
dump(json_decode($p_info['main']));
}
/**
* 编辑生产实例
*/
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'
]);
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;
$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());
}
$list = $this->production_article_refer_obj->where('p_article_id',$data['p_article_id'])->where('state',0)->select();
$re['refers'] = $list;
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());
}
$update['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');
}
$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());
}
$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());
}
// $data['p_article_id'] = 7;
$p_info = $this->production_article_obj->where('p_article_id',$data['p_article_id'])->find();
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.');
}
$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();
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;
}
$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['title'] = $p_info['title'];
$pra['journal_stage_id'] = $p_info['journal_stage_id'];
$pra['issn'] = $journal_info['issn'];
$pra['type'] = $p_info['type'];
$pra['doi'] = $p_info['doi'];
$pra['tradition_tag'] = $p_info['tradition_tag'];
$pra['tradition'] = $p_info['tradition'];
$pra['abstract'] = $p_info['abstract'];
$pra['pub_date'] = $p_info['pub_date'];
$pra['abbr'] = $p_info['abbr'];
$pra['icon'] = $p_info['icon'];
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'];
}
$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){
$this->production_article_obj->where('p_article_id',$data['p_article_id'])->update(['state'=>2]);
return jsonSuccess([]);
}else{
return jsonError('system error:'.$res['msg']);
}
}
/**
* 排版主方法入口
*/
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)->select();
$refers = [];
foreach ($rs as $v) {
$refers[] = $v['refer_frag'];
}
$typesetInfo['refers'] = json_encode($refers);
$url = "http://ts.tmrjournals.com/api/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 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();
$updata['author_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();
$insert['p_article_id'] = $data['p_article_id'];
$insert['article_id'] = $p_info['article_id'];
$insert['author_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");
}
}
/**
* 更新引用条目
*/
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'])->where('state', 0)->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['ctime'] = time();
$this->production_article_refer_obj->insert($cache_insert);
}
$this->referToDoi($data['p_article_id']);
$this->doiTofrag($data['p_article_id']);
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 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 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'] != '') {
$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'];
}
$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,<br/><br/>";
$tt .= "Please confirm proof of your manuscript on the submission website within 48 hours. (https://submission.tmrjournals.com)<br/><br/>";
// $tt .= "<a href='https://submission.tmrjournals.com/api/Production/editProofFromEmail/articleId/".$p_info['article_id']."'>Click here to confirm the proof.</a><br/>";
$tt .= "<a href='https://submission.tmrjournals.com'>Click here to view and confirm the proof.</a><br/><br/>";
$tt .= "If your response is not received, we will regard the author's consent to the version if the time exceeds.<br/><br/>";
$tt .= "If you have any questions, please feel free to contact us.<br/>";
$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'];
$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(['msg'=>$this->production_article_obj->getLastSql()]);
}
/**
* 自动执行
*/
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{//拒绝
$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';
}
private function pdfAddProof($article_id)
{
$p_info = $this->production_article_obj->where('article_id',$article_id)->where('state',0)->find();
vendor('fpdf.fpdf');
vendor('fpdi/fpdi');
$pdf = new \FPDI();
$pageCount = $pdf->setSourceFile(ROOT_PATH . 'public' . DS.$p_info['file_pdf']);
// iterate through all pages
for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {
// import a page
$templateId = $pdf->importPage($pageNo);
// get the size of the imported page
$size = $pdf->getTemplateSize($templateId);
// create a page (landscape or portrait depending on the imported page size)
if ($size['w'] > $size['h']) $pdf->AddPage('L', array($size['w'], $size['h']));
else $pdf->AddPage('P', array($size['w'], $size['h']));
// use the imported page
// $pdf->useTemplate($templateId);
$pdf->image(ROOT_PATH . 'public' . DS.'pdf'.DS.'bg2.png',55, 25, 80);
$pdf->image(ROOT_PATH . 'public' . DS.'pdf'.DS.'bg2.png',55, 155, 80);
$pdf->useTemplate($templateId);
// $pdf->SetFont('Arial', 'B', '12');
// // sign with current date
// $pdf->SetXY(0, 0); // you should keep testing untill you find out correct x,y values
// $pdf->Write(7, date('Y-m-d'));
}
$pdf->Output(ROOT_PATH . 'public' . DS.'proofPDF'.DS.$article_id.'.pdf');
}
/**
* @title 文章文件上传
*
* @param name:name type:string require:1 desc:文件域名称(articleSUB/articleSUB2/bibTex/endNote/articleCDF)
* @param name:type type:string require:1 desc:pathinfo(articleSUB/articleSUB2/bibTex/endNote/articleCDF)
*
* @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();
$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'];
}
}
}
$first_num = 0;//第一作者的总数
foreach($authors as $v){
if($v['is_first']==1){
$first_num++;
}
}
//构建数组字符串
$author = '';
foreach ($authors as $v) {
$cache_str = trim($v['first_name']) . ' ' . trim($v['last_name']) . '<q>';
$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) {
$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 .= '</q>';
$author .= $cache_str;
}
//组装address
$address_str = '';
foreach ($address as $k => $v) {
$address_str .= ($k + 1) . ' ' . $v . ' ';
}
$frag['author'] = $author;
$frag['address'] = $address_str;
$frag['addressList'] = $address;
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()]);
}
}
}
}