This commit is contained in:
wyn
2026-08-03 11:08:03 +08:00
parent 05af67bc1a
commit fc655f7aaa
2 changed files with 243 additions and 23 deletions

View File

@@ -82,18 +82,46 @@ class Special extends Controller {
$special_insert['intro'] = $data['intro'];
$special_insert['keywords'] = $data['keywords'];
$special_insert['deadline'] = $data['deadline'];
if(isset($data['specialIcon']))$special_insert['icon'] = $data['specialIcon'];
// 记录是否有客座编辑(入库 + 流程控制)
$hasEditor = (isset($data['hasEditor']) && intval($data['hasEditor']) === 1) ? 1 : 0;
$special_insert['hasEditor'] = $hasEditor;
$special_insert['ctime'] = time();
$special_id = $this->journal_special_obj->insertGetId($special_insert);
//处理客座编辑
$editor_insert['journal_id'] = $data['journal_id'];
$editor_insert['email'] = $data['email'];
$editor_insert['first_name'] = $data['first_name'];
$editor_insert['last_name'] = $data['last_name'];
$editor_insert['address'] = $data['address'];
$editor_insert['interests'] = $data['interests'];
$editor_insert['website'] = $data['website'];
$editor_insert['orcid'] = $data['orcid'];
$editor_id = $this->journal_special_editor_obj->insertGetId($editor_insert);
if (!$special_id) {
Db::rollback();
return jsonError('system error');
}
// hasEditor 非 1只创建专刊不保存客座编辑信息
if (!$hasEditor) {
Db::commit();
return jsonSuccess(['journal_special_id' => intval($special_id), 'hasEditor' => 0]);
}
//处理客座编辑:同期刊下相同邮箱已存在则复用,否则新建
$email = trim($data['email']);
$existEditor = $this->journal_special_editor_obj
->where('journal_id', $data['journal_id'])
->where('email', $email)
->where('state', 0)
->find();
if ($existEditor) {
$editor_id = $existEditor['journal_special_editor_id'];
} else {
$editor_insert['journal_id'] = $data['journal_id'];
$editor_insert['email'] = $email;
$editor_insert['first_name'] = $data['first_name'];
$editor_insert['last_name'] = $data['last_name'];
$editor_insert['address'] = $data['address'];
$editor_insert['interests'] = $data['interests'];
$editor_insert['website'] = $data['website'];
$editor_insert['orcid'] = $data['orcid'];
if (isset($data['icon'])) {
$editor_insert['icon'] = $data['icon'];
}
$editor_id = $this->journal_special_editor_obj->insertGetId($editor_insert);
}
//处理客座编辑关系信息
$to_insert['journal_special_editor_id'] = $editor_id;
$to_insert['journal_special_id'] = $special_id;
@@ -101,13 +129,13 @@ class Special extends Controller {
$res = $this->journal_special_to_editor_obj->insert($to_insert);
if($special_id&&$editor_id&&$res){
Db::commit();
return jsonSuccess([]);
return jsonSuccess(['journal_special_id' => intval($special_id), 'hasEditor' => 1]);
}else{
Db::rollback();
return jsonError('system error');
}
}
/**
* @title 客座期刊特邀编辑(添加)
* @description 客座期刊特邀编辑(添加)
@@ -535,6 +563,59 @@ class Special extends Controller {
}
return $frag;
}
/**
* @title 通过期刊+标题+截止日期查询专刊ID
* @description 供外部系统在 addSpecial 成功但未返回ID时反查
* @url /api/Special/getSpecialIdByUnique
* @method POST
*
* @param name:journal_id type:int require:1 desc:期刊id
* @param name:title type:string require:1 desc:专刊标题
* @param name:deadline type:string require:1 desc:截止日期
*/
public function getSpecialIdByUnique() {
$data = $this->request->post();
$journalId = intval(isset($data['journal_id']) ? $data['journal_id'] : 0);
$title = trim(isset($data['title']) ? $data['title'] : '');
$deadline = trim(isset($data['deadline']) ? $data['deadline'] : '');
if ($journalId <= 0 || $title === '' || $deadline === '') {
return json(['code' => 1, 'msg' => 'journal_id/title/deadline required']);
}
// 优先精确匹配包含非1状态避免“刚创建未发布”查不到
$special = $this->journal_special_obj
->where('journal_id', $journalId)
->where('title', $title)
->where('deadline', $deadline)
->where('state', '<>', 1)
->order('journal_special_id desc')
->find();
if (!$special) {
// 次优:同标题最新一条(仍排除删除态)
$special = $this->journal_special_obj
->where('journal_id', $journalId)
->where('title', $title)
->where('state', '<>', 1)
->order('journal_special_id desc')
->find();
}
if (!$special) {
return json(['code' => 1, 'msg' => 'special not found']);
}
return json([
'code' => 0,
'msg' => 'success',
'data' => [
'journal_special_id' => intval($special['journal_special_id']),
'title' => isset($special['title']) ? $special['title'] : '',
'deadline' => isset($special['deadline']) ? $special['deadline'] : '',
'state' => intval(isset($special['state']) ? $special['state'] : 0),
],
]);
}
/**