request->post() : $aParam; //必填值验证 $sFileUrl = empty($aParam['file_url']) ? '' : $aParam['file_url']; $sOriginalFileUrl = $sFileUrl; if(empty($sFileUrl)){ return json_encode(['status' => 2,'msg' => 'Please upload the submission file']); } // //文章类型 // $sType = empty($aParam['type']) ? '' : $aParam['type']; // if(empty($sType)){ // return json_encode(['status' => 2,'msg' => 'Please select the article type']); // } // //期刊ID // $iJournalId = empty($aParam['journal_id']) ? '' : $aParam['journal_id']; // if(empty($iJournalId)){ // return json_encode(['status' => 2,'msg' => 'Please select the journal to which you belong']); // } //用户ID $iUserId = empty($aParam['user_id']) ? '' : $aParam['user_id']; if(empty($iUserId)){ return json_encode(['status' => 2,'msg' => 'Please select author']); } //判断文件是否执行 $sFileUrl = rtrim(ROOT_PATH,'/').'/public/'.ltrim(ltrim($sFileUrl,'/'),'public'); if (!file_exists($sFileUrl)) { return json_encode(['status' => 3, 'msg' => 'The uploaded file does not exist']); } if (!is_readable($sFileUrl)) { return json_encode(['status' => 4, 'msg' => 'The uploaded file is unreadable']); } //文章ID $iArticleId = empty($aParam['article_id']) ? 0 : $aParam['article_id']; $aWhere = []; if(!empty($iArticleId)){//更新文章内容 $aWhere['article_id'] = $iArticleId; $aArticle = Db::name('article')->field('state,user_id,manuscirpt_url')->where($aWhere)->find(); if(empty($aArticle)){ return json_encode(['status' => 7,'msg' => 'The article does not exist']); } if($aArticle['state'] != -1 && $aArticle['state'] != 3){ return json_encode(['status' => 8,'msg' => 'Article cannot be edited']); } if($aArticle['user_id'] != $iUserId){ return json_encode(['status' => 9,'msg' => 'Not modified by the author themselves']); } if($aArticle['manuscirpt_url'] == trim($sOriginalFileUrl,'/')){ return json_encode(['status' => 9,'msg' => 'The content of the article has not changed']); } $aWhere['article_id'] = ['<>',$iArticleId]; } //获取数据 $aDealData = json_decode(ArticleParserService::uploadAndParse($sFileUrl),true); $iStatus = empty($aDealData['status']) ? 0 : $aDealData['status']; $sMsg = empty($aDealData['msg']) ? 'fail' : $aDealData['msg']; if($iStatus != 1){ return json_encode(['status' => 5, 'msg' => $sMsg]); } $aData = empty($aDealData['data']) ? '' : $aDealData['data']; if(empty($aData['title'])){ return json_encode(['status' => 6,'msg' => 'The article title is empty']); } //查询标题是否存在 $aWhere += ['title' => trim($aData['title']),'state' => ['<>',3]]; $aArticle = Db::name('article')->field('article_id')->where($aWhere)->find(); if(!empty($aArticle)){ return json_encode(['code' => 7, 'msg' => 'Warning: you are re-submitting the article!']); } //数据入库 $aData += $aParam; $result = $this->_addData($aData); return $result; } /** * 组装数据插入相关数据表 * @param array $aParam */ private function _addData($aParam = []){ if(empty($aParam)){ return json_encode(['status' => 2,'msg' => 'Data is empty']); } //获取文章ID $iUpdateArticleId = empty($aParam['article_id']) ? 0 : $aParam['article_id']; if(!empty($iUpdateArticleId)){ $aWhere = ['article_id' => $iUpdateArticleId]; $aArticle = Db::name('article')->field('title,keywords,abstrart,fund,journal_id')->where($aWhere)->find(); } //插入基础表 t_article $aInsert = []; //标题 // if(empty($aArticle['title'])){ $sTitile = empty($aParam['title']) ? '' : $aParam['title']; if(!empty($sTitile)){ $aInsert['title'] = is_string($sTitile) ? strip_tags($sTitile) : ''; } // } //关键词 // if(empty($aArticle['keywords'])){ $sKeyWords = empty($aParam['keywords']) ? '' : $aParam['keywords']; if(!empty($sKeyWords)){ $aInsert['keywords'] = is_array($sKeyWords) ? implode(',', $sKeyWords) : $sKeyWords; $aInsert['keywords'] = is_string($aInsert['keywords']) ? strip_tags($aInsert['keywords']) : ''; } // } //摘要 // if(empty($aArticle['abstrart'])){ $sAbstrart = empty($aParam['abstrart']) ? '' : $aParam['abstrart']; if(!empty($sAbstrart)){ $aInsert['abstrart'] = is_string($sAbstrart) ? strip_tags($sAbstrart) : ''; } // } //基金 // if(empty($aArticle['fund'])){ $sFund = empty($aParam['fund']) ? '' : $aParam['fund']; if(!empty($sFund)){ $aInsert['fund'] = is_string($sFund) ? strip_tags($sFund) : ''; } // } //期刊ID $iJournalId = empty($aParam['journal_id']) ? 0 : $aParam['journal_id']; if(!empty($iJournalId)){ $aInsert['journal_id'] = $iJournalId; //查询期刊信息 $aJournalWhere = ['journal_id' => $iJournalId,'state' => 0]; $aJournal = DB::name('journal')->field('editor_id')->where($aJournalWhere)->find(); $aInsert['editor_id'] = empty($aJournal['editor_id']) ? 0 : $aJournal['editor_id']; } //类型 $sType = empty($aParam['type']) ? '' : $aParam['type']; if(!empty($sType)){ $aInsert['type'] = $sType; } //上传文件地址 $sFileUrl = empty($aParam['file_url']) ? '' : $aParam['file_url']; if(!empty($sFileUrl)){ $aInsert['manuscirpt_url'] = trim(trim($sFileUrl,'/'),'public/'); } //用户ID $iUserId = empty($aParam['user_id']) ? 0 : $aParam['user_id']; if(!empty($iUserId)){ $aInsert['user_id'] = $iUserId; //查询用户信息 $aUser = Db::name('user')->field('account')->where(['user_id' => $iUserId,'state' => 0])->find(); } Db::startTrans(); //插入article if(empty($aArticle) && !empty($aInsert)){//新插入 $aInsert['ctime'] = time(); $aInsert['state'] = -1; $aInsert['is_use_ai'] = 3; $aInsert['is_figure_copyright'] = 3; // $aInsert['is_transfer'] = 3; $aInsert['is_become_reviewer'] = 3; $sType = empty($aParam['type']) ? 'D' : $aParam['type']; $aInsert['accept_sn'] = getArticleSN('Draft',$sType); $iArticleId = Db::name('article')->insertGetId($aInsert); if(empty($iArticleId)){ return json_encode(['status' => 3,'msg' => 'Article added successfully']); } } if(!empty($aArticle) && !empty($aInsert)){//更新 $aWhere = ['article_id' => $iUpdateArticleId,'state' => ['in',[-1,3]]]; $update_result = Db::name('article')->where($aWhere)->limit(1)->update($aInsert); if($update_result === false){ return json_encode(['status' => 3,'msg' => 'Article update failed']); } //更新作者为逻辑删除 $aWhere['state'] = 0; $update_author_result = DB::name('article_author')->where($aWhere)->update(['state' => 1]); if($update_author_result === false){ return json_encode(['status' => 4,'msg' => 'Article author update failed']); } } //作者单位 $iArticleId = empty($iArticleId) ? $iUpdateArticleId : $iArticleId; $aCompany = empty($aParam['company']) ? [] : $aParam['company']; if(!empty($aCompany)){ $aWhere = ['article_id' => $iArticleId,'state' => 0]; $aOrgan = Db::name('article_organ')->field('organ_id,organ_name,sort')->where($aWhere)->select(); $aOrganName = empty($aOrgan) ? [] : array_column($aOrgan, 'organ_name'); $iMaxSort = empty($aOrgan) ? 0 : max(array_column($aOrgan, 'sort')); //查询文章 $aCompanyInsert = $aSort = []; foreach ($aCompany as $key => $value) { if(empty($value)){ continue; } $sName = trim(trim(trim($value,'*'),'#')); if(in_array($sName, $aOrganName)){ continue; } if(empty($iMaxSort)){ $iSort = $key; $aSort[$key] = $key; }else{ $iMaxSort++; $iSort = $iMaxSort; $aSort[$key] = $iMaxSort; } $sName = is_string($sName) ? strip_tags($sName) : ''; if(empty($sName)){ continue; } $aCompanyInsert[] = ['article_id' => $iArticleId,'organ_name' =>$sName,'create_time' => time(),'sort' => $iSort]; } } if(!empty($aCompanyInsert)){ $company_result = Db::name('article_organ')->insertAll($aCompanyInsert); if(empty($company_result)){ return json_encode(['status' => 3,'msg' => 'Article institution insertion failed']); } $aWhere = ['article_id' => $iArticleId,'state' => 0]; $aCompanyData = Db::name('article_organ')->field('sort,organ_id,organ_name')->where($aWhere)->select(); $aCompanyData = empty($aCompanyData) ? [] : array_column($aCompanyData, null,'sort'); } //处理作者 $aAuthorData = $aAuthorOrgn = []; if(!empty($aParam['author'])){ $aAuthor = $aParam['author']; //通讯作者 $aCorresponding = empty($aParam['corresponding']) ? [] : array_column($aParam['corresponding'], null,'name'); //查询文章作者 $aWhere = ['article_id' => $iArticleId,'state' => 0]; $aAuthorList = Db::name('article_author')->field('art_aut_id,firstname')->where($aWhere)->select(); $aAuthorNameList = empty($aAuthorList) ? [] : array_column($aAuthorList, 'firstname'); foreach ($aAuthor as $key => $value) { if(empty($iArticleId)){ break; } //处理作者名字 $aName = empty($value['name']) ? [] : explode(' ', $value['name']); if(empty($aName)){ continue; } //名字拆分 $sLastName = array_pop($aName); $value['firstname'] = empty($aName) ? '' : trim(implode(' ', $aName)); $value['lastname'] = $sLastName; //处理作者机构单位关联 $aCountry = []; if(!empty($value['company_id'])){ foreach ($value['company_id'] as $k => $v) { $iNewSort = empty($aSort[$v]) ? $v : $aSort[$v]; $iOrgnId = empty($aCompanyData[$iNewSort]['organ_id']) ? 0 : $aCompanyData[$iNewSort]['organ_id']; if(empty($iOrgnId)){ continue; } //获取 $sOrganName = empty($aCompanyData[$iNewSort]['organ_name']) ? 0 : $aCompanyData[$iNewSort]['organ_name']; if(!empty($sOrganName)){ $sOrganName = str_replace([', ',','], ',', $sOrganName); $aOrganName = explode(',',$sOrganName); $aCountry[] = empty($aOrganName) ? '' : strtolower(end($aOrganName)); } $aAuthorOrgn[] = ['article_id' => $iArticleId,'organ_id' => $iOrgnId,'art_aut_id' => $value['firstname']]; } } //处理城市 $aCountry = empty($aCountry) ? [] : array_unique($aCountry); $value['country'] = ''; if(count($aCountry) == 1){ $value['country'] = empty($aCountry[0]) ? '' : ucfirst($aCountry[0]); } if(count($aCountry) > 1){ // 1. 找到目标值的键名 $key = array_search('china', $aCountry); // 2. 确认找到后删除(避免键名为 0 时被误判为 false) if ($key !== false) { unset($aCountry[$key]); } $aCountry = empty($aCountry) ? [] : array_values($aCountry); $value['country'] = empty($aCountry[0]) ? '' : ucfirst($aCountry[0]); } //已添加 if(!empty($value['firstname']) && in_array($value['firstname'], $aAuthorList)){ continue; } $value['email'] = empty($aCorresponding[$value['name']]['email']) ? '' : $aCorresponding[$value['name']]['email']; $value['article_id'] = $iArticleId; unset($value['name'],$value['company_id']); $aAuthorData[] = $value; } } if(!empty($aAuthorData)){ $author_result = DB::name('article_author')->insertAll($aAuthorData); if(empty($author_result)){ return json_encode(['status' => 3,'msg' => 'Adding article author failed']); } $aWhere = ['article_id' => $iArticleId,'state' => 0]; $aAuthorResult = DB::name('article_author')->where($aWhere)->select(); } //作者所属机构 $aAuthorOrgnInsert = []; if(!empty($aAuthorOrgn)){ //查询文章作者所属机构 $aWhere = ['article_id' => $iArticleId,'state' => 0]; $aAuthorOrganList = Db::name('article_author_organ')->field('art_aut_id,organ_id')->where($aWhere)->select(); $aAuthorOrganIdList = []; if(!empty($aAuthorOrganList)){ foreach ($aAuthorOrganList as $key => $value) { $aAuthorOrganIdList[$value['art_aut_id']][] = $value['organ_id']; } } $aAuthorName = empty($aAuthorResult) ? [] : array_column($aAuthorResult, 'art_aut_id','firstname'); foreach ($aAuthorOrgn as $key => $value) { if(empty($value['art_aut_id'])){ continue; } $iAuthorId = empty($aAuthorName[$value['art_aut_id']]) ? 0 : $aAuthorName[$value['art_aut_id']]; if(empty($iAuthorId)){ continue; } if(!empty($aAuthorOrganIdList[$iAuthorId]) && in_array($value['organ_id'], $aAuthorOrganIdList[$iAuthorId])){ continue; } $value['art_aut_id'] = $iAuthorId; $value['create_time'] = time(); $aAuthorOrgnInsert[] = $value; } } if(!empty($aAuthorOrgnInsert)){ $author_orgn_result = DB::name('article_author_organ')->insertAll($aAuthorOrgnInsert); if(empty($author_orgn_result)){ return json_encode(['status' => 3,'msg' => 'Adding article author orgn failed']); } } // //处理上传文件 // if(!empty($sFileUrl) && !empty($iUserId)){ // $aInsertFile['article_id'] = $iArticleId; // $aInsertFile['user_id'] = $iUserId; // $aInsertFile['username'] = empty($aUser['account']) ? '' : $aUser['account']; // $aInsertFile['file_url'] = trim($sFileUrl,'/'); // $aInsertFile['type_name'] = 'manuscirpt'; // $aInsertFile['ctime'] = time(); // $iFileId = Db::name('article_file')->insertGetId($aInsertFile); // } Db::commit(); $aInsert['article_id'] = $iArticleId; return json_encode(['status' => 1,'msg' => 'Successfully added article','article' => $aInsert]); } }