专刊相关功能优化,官网和投稿系统期刊id不一致

This commit is contained in:
wyn
2026-08-03 16:51:46 +08:00
parent be1c0f359a
commit 963721e00b
2 changed files with 89 additions and 3 deletions

2
.env
View File

@@ -66,6 +66,8 @@ static_root="/home/wwwroot/api.tmrjournals.com/public"
[journal] [journal]
;官网服务器地址 ;官网服务器地址
base_url = http://journalapi.tmrjournals.com/public/index.php base_url = http://journalapi.tmrjournals.com/public/index.php
;base_url =http://192.168.110.131/journal/public/index.php
journal_image_url = http://192.168.110.131/journal/public/
[gpt] [gpt]
api_key = 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 api_key = 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

View File

@@ -1465,20 +1465,37 @@ class Special extends Controller
} }
/** /**
* 获取已开通的专刊列表(代理 journal getSpecialsstate=2 * 获取已开通的专刊列表(代理 journal getSpecialsstate=2
* 入参为投稿系统 journal_id先按 ISSN 换官网 journal_id再调官网接口
*/ */
public function getSpecials() public function getSpecials()
{ {
$data = $this->request->post(); $data = $this->request->post();
$rule = new Validate([ $rule = new Validate([
'journal_id' => 'require', 'journal_id' => 'require|number',
]); ]);
if (!$rule->check($data)) { if (!$rule->check($data)) {
return jsonError($rule->getError()); return jsonError($rule->getError());
} }
$localJournalId = intval($data['journal_id']);
$journalInfo = $this->journal_obj->where('journal_id', $localJournalId)->find();
if (!$journalInfo) {
return jsonError('journal not found');
}
$issn = trim(isset($journalInfo['issn']) ? (string)$journalInfo['issn'] : '');
if ($issn === '') {
return jsonError('journal issn is empty');
}
$resolved = $this->resolveSiteJournalIdByIssn($issn);
if (!$resolved['ok']) {
return jsonError($resolved['msg']);
}
$siteJournalId = intval($resolved['journal_id']);
$base_url = Env::get('journal.base_url'); $base_url = Env::get('journal.base_url');
$res = object_to_array(json_decode(myPost($base_url . '/api/Special/getSpecials', [ $res = object_to_array(json_decode(myPost(rtrim($base_url, '/') . '/api/Special/getSpecials', [
'journal_id' => $data['journal_id'], 'journal_id' => $siteJournalId,
]))); ])));
if (!isset($res['code']) || intval($res['code']) !== 0) { if (!isset($res['code']) || intval($res['code']) !== 0) {
$msg = isset($res['msg']) ? $res['msg'] : 'get specials failed'; $msg = isset($res['msg']) ? $res['msg'] : 'get specials failed';
@@ -2146,4 +2163,71 @@ class Special extends Controller
]); ]);
} }
/**
* 根据 ISSN 获取官网期刊 ID代理 journal master/Special/getJournalIdByIssn
* 入参兼容 journal_issn / issn转发官网时使用字段名 issn
*/
public function getJournalIdByIssn()
{
$data = $this->request->post();
$issn = '';
if (isset($data['journal_issn'])) {
$issn = trim((string)$data['journal_issn']);
}
if ($issn === '' && isset($data['issn'])) {
$issn = trim((string)$data['issn']);
}
if ($issn === '') {
return jsonError('issn不能为空');
}
$resolved = $this->resolveSiteJournalIdByIssn($issn);
if (!$resolved['ok']) {
return jsonError($resolved['msg']);
}
return jsonSuccess([
'journal_issn' => $issn,
'journal_id' => intval($resolved['journal_id']),
]);
}
/**
* 按 ISSN 向官网解析 journal_id
* @return array{ok:bool,msg:string,journal_id:int}
*/
private function resolveSiteJournalIdByIssn($issn)
{
$issn = trim((string)$issn);
if ($issn === '') {
return ['ok' => false, 'msg' => 'issn不能为空', 'journal_id' => 0];
}
$base_url = Env::get('journal.base_url');
$raw = myPost(rtrim($base_url, '/') . '/master/Special/getJournalIdByIssn', [
'issn' => $issn,
]);
$res = object_to_array(json_decode($raw));
if (!isset($res['code']) || intval($res['code']) !== 0) {
$msg = isset($res['msg']) ? $res['msg'] : ('get journal id by issn failed: ' . (is_string($raw) ? $raw : 'remote empty'));
return ['ok' => false, 'msg' => $msg, 'journal_id' => 0];
}
$payload = isset($res['data']) ? $res['data'] : [];
$journalId = 0;
if (is_array($payload)) {
$journalId = intval(isset($payload['journal_id']) ? $payload['journal_id'] : 0);
} elseif (is_numeric($payload)) {
$journalId = intval($payload);
}
if ($journalId <= 0 && isset($res['journal_id'])) {
$journalId = intval($res['journal_id']);
}
if ($journalId <= 0) {
return ['ok' => false, 'msg' => 'journal id not found for issn', 'journal_id' => 0];
}
return ['ok' => true, 'msg' => '', 'journal_id' => $journalId];
}
} }