专刊相关功能优化,官网和投稿系统期刊id不一致
This commit is contained in:
2
.env
2
.env
@@ -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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
|
||||||
|
|||||||
@@ -1465,20 +1465,37 @@ class Special extends Controller
|
|||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 获取已开通的专刊列表(代理 journal getSpecials,state=2)
|
* 获取已开通的专刊列表(代理 journal getSpecials,state=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];
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user