Merge remote-tracking branch 'remotes/origin/checkrefer'
This commit is contained in:
@@ -1308,4 +1308,231 @@ class References extends Base
|
||||
}
|
||||
return json_encode(['status' => 8,'msg' => 'fail']);
|
||||
}
|
||||
/**
|
||||
* 参考文献第一次校对
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function allReferenceCheckAI(){
|
||||
//获取参数
|
||||
$aParam = empty($aParam) ? $this->request->post() : $aParam;
|
||||
|
||||
//必填值验证
|
||||
$iPArticleId = empty($aParam['p_article_id']) ? '' : $aParam['p_article_id'];
|
||||
if(empty($iPArticleId)){
|
||||
return json_encode(array('status' => 2,'msg' => 'Please select an article' ));
|
||||
}
|
||||
//查询文章(p_article_id 与 article_id 都要带,下游服务方法两者都用)
|
||||
$aWhere = ['p_article_id' => $iPArticleId,'state' => ['in',[0,2]]];
|
||||
$aProductionArticle = Db::name('production_article')->field('p_article_id,article_id')->where($aWhere)->find();
|
||||
if(empty($aProductionArticle)){
|
||||
return json_encode(array('status' => 3,'msg' => 'No articles found' ));
|
||||
}
|
||||
if($this->checkReferStatus($iPArticleId)==0){
|
||||
return jsonError('请修正完文献内容再进行校对。');
|
||||
}
|
||||
//已存在校对记录则禁止重复执行第一次校对,提示走重置接口
|
||||
$iExisting = Db::name('article_reference_check_result')
|
||||
->where('p_article_id', $iPArticleId)
|
||||
->count();
|
||||
if(intval($iExisting) > 0){
|
||||
return jsonError('该文章已存在校对记录,请使用"重置校对"接口重新校对。');
|
||||
}
|
||||
try {
|
||||
$svc = new ReferenceCheckService();
|
||||
$result = $svc->enqueueByPArticle($aProductionArticle);
|
||||
return jsonSuccess($result);
|
||||
} catch (\Exception $e) {
|
||||
return jsonError($e->getMessage());
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 文献校对重置:删除该文章已有的全部校对明细,并重新入队整篇校对
|
||||
* POST/GET: article_id(必填)
|
||||
* @url /api/Article/referenceCheckReset
|
||||
*/
|
||||
public function referenceCheckResetAI()
|
||||
{
|
||||
//获取参数
|
||||
$aParam = empty($aParam) ? $this->request->post() : $aParam;
|
||||
|
||||
//必填值验证
|
||||
$iPArticleId = empty($aParam['p_article_id']) ? '' : $aParam['p_article_id'];
|
||||
if(empty($iPArticleId)){
|
||||
return json_encode(array('status' => 2,'msg' => 'Please select an article' ));
|
||||
}
|
||||
//查询文章(p_article_id 与 article_id 都要带,下游服务方法两者都用)
|
||||
$aWhere = ['p_article_id' => $iPArticleId,'state' => ['in',[0,2]]];
|
||||
$aProductionArticle = Db::name('production_article')->field('p_article_id,article_id')->where($aWhere)->find();
|
||||
if(empty($aProductionArticle)){
|
||||
return json_encode(array('status' => 3,'msg' => 'No articles found' ));
|
||||
}
|
||||
if($this->checkReferStatus($iPArticleId)==0){
|
||||
return jsonError('请修正完文献内容再进行校对。');
|
||||
}
|
||||
$iArticleId = empty($aProductionArticle['article_id']) ? 0 : $aProductionArticle['article_id'];
|
||||
if(empty($iArticleId)){
|
||||
return json_encode(array('status' => 4,'msg' => 'Unbound article' ));
|
||||
}
|
||||
try {
|
||||
$result = (new ReferenceCheckService())->resetAndRecheckByArticle($aProductionArticle);
|
||||
return jsonSuccess($result);
|
||||
} catch (\Exception $e) {
|
||||
return jsonError($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清空某篇文章下的全部参考文献校对记录(不重新入队)
|
||||
*
|
||||
* 与 referenceCheckResetAI 的区别:reset 是「清空 + 重新校对」,
|
||||
* 这里只做「清空」一步,校对状态回到未校对,等待用户手动再触发。
|
||||
*
|
||||
* POST/GET: p_article_id(必填)
|
||||
*/
|
||||
public function referenceCheckClearAI()
|
||||
{
|
||||
$aParam = $this->request->post();
|
||||
if (empty($aParam)) {
|
||||
$aParam = $this->request->param();
|
||||
}
|
||||
|
||||
$iPArticleId = empty($aParam['p_article_id']) ? 0 : intval($aParam['p_article_id']);
|
||||
if ($iPArticleId <= 0) {
|
||||
return json_encode(array('status' => 2, 'msg' => 'Please select an article'));
|
||||
}
|
||||
|
||||
// 校验文章存在(与其它校对接口口径一致:state in [0,2])
|
||||
$aProductionArticle = Db::name('production_article')
|
||||
->field('p_article_id,article_id')
|
||||
->where(['p_article_id' => $iPArticleId, 'state' => ['in', [0, 2]]])
|
||||
->find();
|
||||
if (empty($aProductionArticle)) {
|
||||
return json_encode(array('status' => 3, 'msg' => 'No articles found'));
|
||||
}
|
||||
|
||||
try {
|
||||
$deleted = (new ReferenceCheckService())->clearArticleChecksByPArticleId($iPArticleId);
|
||||
return jsonSuccess([
|
||||
'p_article_id' => $iPArticleId,
|
||||
'deleted' => intval($deleted),
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
return jsonError($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 按 p_article_id 查整篇引用校对进度(按 reference_no 分组聚合)
|
||||
*
|
||||
* POST/GET: p_article_id(必填)
|
||||
*
|
||||
* 返回 list 中每项含:reference_no、p_refer_id、status(数值)、
|
||||
* total、pending、done、failed、pass、is_pass、last_updated_at、records
|
||||
*
|
||||
* status 数值含义:
|
||||
* 0 = 待校验 1 = 校对中 2 = 校对完成 3 = 校对失败
|
||||
*/
|
||||
public function referenceCheckProgressAI()
|
||||
{
|
||||
$aParam = $this->request->post();
|
||||
if (empty($aParam)) {
|
||||
$aParam = $this->request->param();
|
||||
}
|
||||
|
||||
$iPArticleId = empty($aParam['p_article_id']) ? 0 : intval($aParam['p_article_id']);
|
||||
if ($iPArticleId <= 0) {
|
||||
return json_encode(array('status' => 2, 'msg' => 'Please select an article'));
|
||||
}
|
||||
try {
|
||||
$result = (new ReferenceCheckService())->getProgressByPArticleId($iPArticleId);
|
||||
return jsonSuccess($result);
|
||||
} catch (\Exception $e) {
|
||||
return jsonError($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 按 p_article_id 查整篇文章引用校对总状态(用于前端按钮分流)
|
||||
*
|
||||
* POST/GET: p_article_id(必填)
|
||||
*
|
||||
* 计数维度是「参考文献」(按 reference_no 分组),不是单条校对明细行。
|
||||
* 例:50 条参考文献、底层 111 条校对明细时,total = 50。
|
||||
*
|
||||
* 返回 status 数值含义(整篇):
|
||||
* 0 = 未校对(一条记录都没有)
|
||||
* 1 = 校对中(至少 1 条参考文献仍有未跑完的明细)
|
||||
* 2 = 校对完成(所有参考文献全部明细已结束)
|
||||
*
|
||||
* 返回字段:p_article_id、status、total、pending、done、failed、progress_percent
|
||||
* total —— 参考文献条数
|
||||
* pending —— 该条参考文献仍有未跑完明细的数量(含"部分跑完")
|
||||
* done —— 该条参考文献所有明细都 status=1 的数量
|
||||
* failed —— 该条参考文献全部跑完且至少 1 条 status=2 的数量
|
||||
* pending + done + failed = total;progress_percent = (done+failed)/total
|
||||
*
|
||||
* 分组明细请走 referenceCheckProgressAI。
|
||||
*/
|
||||
public function referenceCheckArticleStatusAI()
|
||||
{
|
||||
$aParam = $this->request->post();
|
||||
if (empty($aParam)) {
|
||||
$aParam = $this->request->param();
|
||||
}
|
||||
|
||||
$iPArticleId = empty($aParam['p_article_id']) ? 0 : intval($aParam['p_article_id']);
|
||||
if ($iPArticleId <= 0) {
|
||||
return json_encode(array('status' => 2, 'msg' => 'Please select an article'));
|
||||
}
|
||||
|
||||
try {
|
||||
$result = (new ReferenceCheckService())->getArticleProgressStatusByPArticleId($iPArticleId);
|
||||
return jsonSuccess($result);
|
||||
} catch (\Exception $e) {
|
||||
return jsonError($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 按 p_refer_id 查单条参考文献的校对明细
|
||||
*
|
||||
* POST/GET: p_refer_id(必填)
|
||||
*
|
||||
* 返回 list 中每项含:am_id、confidence、reason、is_match、is_pass
|
||||
* 同时附带上下文:p_refer_id、p_article_id、reference_no、total
|
||||
*/
|
||||
public function referenceCheckDetailsAI()
|
||||
{
|
||||
$aParam = $this->request->post();
|
||||
if (empty($aParam)) {
|
||||
$aParam = $this->request->param();
|
||||
}
|
||||
|
||||
$iPReferId = empty($aParam['p_refer_id']) ? 0 : intval($aParam['p_refer_id']);
|
||||
if ($iPReferId <= 0) {
|
||||
return json_encode(array('status' => 2, 'msg' => 'Please select a reference'));
|
||||
}
|
||||
|
||||
try {
|
||||
$result = (new ReferenceCheckService())->getCheckDetailsByPReferId($iPReferId);
|
||||
return jsonSuccess($result);
|
||||
} catch (\Exception $e) {
|
||||
return jsonError($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public function checkReferStatus($p_article_id){
|
||||
$list = $this->production_article_refer_obj->where('p_article_id', $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;
|
||||
}
|
||||
}
|
||||
return $frag;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user