大更新,1投稿系统参考文献的类型增加功能,,,2官网数据库功能
This commit is contained in:
@@ -7,6 +7,13 @@ use think\Db;
|
||||
use think\Queue;
|
||||
use sftp\Sftp;
|
||||
use think\Validate;
|
||||
use app\master\service\DbPushManager;
|
||||
use app\master\service\DbPushLogger;
|
||||
use app\master\service\XmlBuilder;
|
||||
use app\master\service\push\PorticoPusher;
|
||||
use app\master\service\push\ScopusPusher;
|
||||
use app\master\service\push\EbscoPusher;
|
||||
use app\master\service\push\CnkiPusher;
|
||||
|
||||
/**
|
||||
* @title 数据库接口
|
||||
@@ -774,66 +781,159 @@ class Datebase extends Controller
|
||||
public function dataPush()
|
||||
{
|
||||
$data = $this->request->post();
|
||||
$stage_info = $this->journal_stage_obj->where("journal_stage_id", $data["journal_stage_id"])->find();
|
||||
$this->createEmailFile($data["journal_stage_id"]);
|
||||
|
||||
$journal_info = $this->journal_obj->where("journal_id", $stage_info["journal_id"])->find();
|
||||
$zipfile = ROOT_PATH . "public/dataFile/" . $data["journal_stage_id"] . '/' . $data["journal_stage_id"] . '.zip';
|
||||
$tt = "Dear Database,<br><br>";
|
||||
$tt .= "Please find the PDF files in attachment of published issue (Vol. " . $stage_info['stage_vol'] . ", No." . $stage_info['stage_no'] . ") of " . $journal_info['title'] . ".<br><br>";
|
||||
$tt .= "Yours Sincerely<br>";
|
||||
$tt .= "Dan Chen<br>";
|
||||
$tt .= "Manager<br>";
|
||||
$tt .= "TMR Publishing Group | Editorial Office | New Zealand<br>";
|
||||
$tt .= "Telephone: +64 02108293806<br>";
|
||||
$tt .= "Email: publisher@tmrjournals.com<br>";
|
||||
$tt .= "Website:www.tmrjournals.com";
|
||||
|
||||
$elist = [];
|
||||
$elist[] = "jgatelicensing@informaticsglobal.com";
|
||||
// $elist[] = "3601240974@qq.com";
|
||||
if ($journal_info["journal_id"] == 1) {
|
||||
$elist[] = "958518573@qq.com";
|
||||
$elist[] = "swyy2@wanfangdata.com.cn";//万方数据库
|
||||
$rule = new Validate([
|
||||
"journal_stage_id" => "require"
|
||||
]);
|
||||
if (!$rule->check($data)) {
|
||||
return jsonError($rule->getError());
|
||||
}
|
||||
$elist[] = "3097953993@qq.com";
|
||||
// $elist[] = "849192806@qq.com"; //皮皮
|
||||
$elist[] = "751475802@qq.com"; //我
|
||||
// $elist[] = "ELD@dia.govt.nz";
|
||||
|
||||
foreach ($elist as $v) {
|
||||
$cdata['email'] = $v;
|
||||
$cdata['title'] = "Data submitted-TMR Publishing Group";
|
||||
$cdata["fromname"] = "Data submitted-TMR Publishing Group";
|
||||
$cdata["content"] = $tt;
|
||||
$cdata["temail"] = $journal_info['email'];
|
||||
$cdata["tpassword"] = $journal_info['epassword'];
|
||||
$cdata["fj"] = $zipfile;
|
||||
Queue::push('app\api\job\mail@puchAndFJ', $cdata, "mail");
|
||||
// sendEmail_data($v, "Data submitted-TMR Publishing Group", "Data submitted-TMR Publishing Group", $tt, $journal_info['email'], $journal_info['epassword'],$zipfile);
|
||||
}
|
||||
//发送sftp
|
||||
$this->bf_db_push($data["journal_stage_id"]);
|
||||
// 发送ftp
|
||||
// $this->createFtpFileInfo($data["journal_stage_id"]);//cnki数据库
|
||||
|
||||
if($journal_info['journal_id']==1||$journal_info['journal_id']==11){
|
||||
$this->scopusPushXML($data["journal_stage_id"]);//scopus数据库
|
||||
}
|
||||
// if(in_array($journal_info["journal_id"],[2,8,20,15,9,10,3,1])){//ep数据库
|
||||
// $this->pushXmlToEp($data["journal_stage_id"]);
|
||||
// }
|
||||
|
||||
//EBSCO上传XML新增期刊ID[14,11,4,18,8,1,2] chengxiaoling 20250402 start
|
||||
if(in_array($journal_info["journal_id"],[2,8,20,15,9,10,3,1,14,11,4,18,8])){//ep数据库2,8,20,15,9,10,3,1 //EBSCO上传XML
|
||||
$this->pushXmlToEp($data["journal_stage_id"]);
|
||||
}
|
||||
//EBSCO上传XML新增期刊ID[14,11,4,18,8,1,2] chengxiaoling 20250402 end
|
||||
return jsonSuccess([]);
|
||||
// 配置驱动 + 全程留痕 + 可异步的统一推送(渠道由 j_db_channel / 默认配置决定)
|
||||
$operator = session('admin.realname') ?: (session('admin.username') ?: '');
|
||||
$manager = new DbPushManager();
|
||||
$summary = $manager->run($data["journal_stage_id"], $operator);
|
||||
return jsonSuccess(['summary' => $summary]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @title 获取某期推送情况
|
||||
* @description 查看指定分期在各数据库的推送记录/状态
|
||||
* @url /master/Datebase/getPushStatus
|
||||
* @method POST
|
||||
*
|
||||
* @param name:journal_stage_id type:int require:1 desc:分期id
|
||||
* @return list:推送日志array#
|
||||
*/
|
||||
public function getPushStatus()
|
||||
{
|
||||
$data = $this->request->post();
|
||||
$rule = new Validate([
|
||||
"journal_stage_id" => "require"
|
||||
]);
|
||||
if (!$rule->check($data)) {
|
||||
return jsonError($rule->getError());
|
||||
}
|
||||
$logger = new DbPushLogger();
|
||||
$list = $logger->stageStatus($data['journal_stage_id']);
|
||||
$statusMap = [0 => '待推送/排队中', 1 => '成功', 2 => '失败'];
|
||||
foreach ($list as $k => $v) {
|
||||
$list[$k]['status_text'] = isset($statusMap[$v['status']]) ? $statusMap[$v['status']] : '未知';
|
||||
$list[$k]['ctime_text'] = $v['ctime'] ? date('Y-m-d H:i:s', $v['ctime']) : '';
|
||||
$list[$k]['utime_text'] = $v['utime'] ? date('Y-m-d H:i:s', $v['utime']) : '';
|
||||
}
|
||||
return jsonSuccess(['list' => $list]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 重推
|
||||
* @description 针对某条推送日志重新推送(用于失败补推)
|
||||
* @url /master/Datebase/retryPush
|
||||
* @method POST
|
||||
*
|
||||
* @param name:log_id type:int require:1 desc:推送日志id
|
||||
*/
|
||||
public function retryPush()
|
||||
{
|
||||
$data = $this->request->post();
|
||||
$rule = new Validate([
|
||||
"log_id" => "require"
|
||||
]);
|
||||
if (!$rule->check($data)) {
|
||||
return jsonError($rule->getError());
|
||||
}
|
||||
$manager = new DbPushManager();
|
||||
$res = $manager->retry($data['log_id']);
|
||||
if (empty($res['ok'])) {
|
||||
return jsonError(isset($res['msg']) ? $res['msg'] : '重推失败');
|
||||
}
|
||||
return jsonSuccess($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 获取推送渠道配置
|
||||
* @description 获取数据库推送渠道配置列表
|
||||
* @url /master/Datebase/getChannels
|
||||
* @method POST
|
||||
* @return list:渠道配置array#
|
||||
*/
|
||||
public function getChannels()
|
||||
{
|
||||
$list = Db::name('db_channel')->where('state', 0)->order('sort desc')->select();
|
||||
return jsonSuccess(['list' => $list]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 保存推送渠道配置
|
||||
* @description 新增或编辑数据库推送渠道(channel_id 存在则编辑)
|
||||
* @url /master/Datebase/saveChannel
|
||||
* @method POST
|
||||
*
|
||||
* @param name:channel_id type:int require:0 desc:渠道id(编辑时传)
|
||||
* @param name:channel_key type:string require:1 desc:渠道标识
|
||||
* @param name:name type:string require:1 desc:展示名
|
||||
* @param name:transport type:string require:1 desc:传输方式 sftp/ftp/email
|
||||
* @param name:pusher type:string require:0 desc:推送器标识(留空同channel_key)
|
||||
* @param name:journal_ids type:string require:0 desc:适用期刊id逗号分隔(留空=全部)
|
||||
* @param name:config type:string require:0 desc:JSON额外配置
|
||||
* @param name:is_enable type:int require:0 default:1 desc:是否启用
|
||||
* @param name:sort type:int require:0 default:0 desc:排序
|
||||
*/
|
||||
public function saveChannel()
|
||||
{
|
||||
$data = $this->request->post();
|
||||
$rule = new Validate([
|
||||
"channel_key" => "require",
|
||||
"name" => "require",
|
||||
"transport" => "require",
|
||||
]);
|
||||
if (!$rule->check($data)) {
|
||||
return jsonError($rule->getError());
|
||||
}
|
||||
if (!empty($data['config']) && json_decode($data['config'], true) === null && strtolower(trim($data['config'])) !== 'null') {
|
||||
return jsonError('config 必须为合法 JSON');
|
||||
}
|
||||
$save = [
|
||||
'channel_key' => $data['channel_key'],
|
||||
'name' => $data['name'],
|
||||
'transport' => $data['transport'],
|
||||
'pusher' => isset($data['pusher']) ? $data['pusher'] : '',
|
||||
'journal_ids' => isset($data['journal_ids']) ? $data['journal_ids'] : '',
|
||||
'config' => isset($data['config']) ? $data['config'] : '',
|
||||
'is_enable' => isset($data['is_enable']) ? intval($data['is_enable']) : 1,
|
||||
'sort' => isset($data['sort']) ? intval($data['sort']) : 0,
|
||||
'utime' => time(),
|
||||
];
|
||||
if (!empty($data['channel_id'])) {
|
||||
Db::name('db_channel')->where('channel_id', $data['channel_id'])->update($save);
|
||||
} else {
|
||||
$save['ctime'] = time();
|
||||
Db::name('db_channel')->insert($save);
|
||||
}
|
||||
return jsonSuccess([]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 删除推送渠道配置
|
||||
* @description 删除数据库推送渠道
|
||||
* @url /master/Datebase/delChannel
|
||||
* @method POST
|
||||
*
|
||||
* @param name:channel_id type:int require:1 desc:渠道id
|
||||
*/
|
||||
public function delChannel()
|
||||
{
|
||||
$data = $this->request->post();
|
||||
$rule = new Validate([
|
||||
"channel_id" => "require"
|
||||
]);
|
||||
if (!$rule->check($data)) {
|
||||
return jsonError($rule->getError());
|
||||
}
|
||||
Db::name('db_channel')->where('channel_id', $data['channel_id'])->update(['state' => 1, 'utime' => time()]);
|
||||
return jsonSuccess([]);
|
||||
}
|
||||
|
||||
public function scopusTest(){
|
||||
$data = $this->request->post();
|
||||
$rule = new Validate([
|
||||
|
||||
@@ -1708,11 +1708,20 @@ class Journal extends Controller
|
||||
public function addJournalAbs()
|
||||
{
|
||||
$data = $this->request->post();
|
||||
$rule = new Validate([
|
||||
'journal_id' => 'require',
|
||||
'title' => 'require',
|
||||
'url' => 'require',
|
||||
]);
|
||||
if (!$rule->check($data)) {
|
||||
return json(['code' => 1, 'msg' => $rule->getError()]);
|
||||
}
|
||||
$add_data['journal_id'] = $data['journal_id'];
|
||||
$add_data['title'] = $data['title'];
|
||||
$add_data['url'] = $data['url'];
|
||||
$add_data['sort'] = $data['sort'];
|
||||
$add_data['is_show'] = $data['is_show'];
|
||||
$add_data['sort'] = isset($data['sort']) ? intval($data['sort']) : 0;
|
||||
$add_data['is_show'] = isset($data['is_show']) ? intval($data['is_show']) : 1;
|
||||
$add_data['state'] = 0;
|
||||
$res = $this->journal_abs_obj->insert($add_data);
|
||||
if ($res) {
|
||||
return json(['code' => 0, 'msg' => 'success']);
|
||||
@@ -1754,7 +1763,46 @@ class Journal extends Controller
|
||||
public function editJournalAbs()
|
||||
{
|
||||
$data = $this->request->post();
|
||||
$this->journal_abs_obj->update($data);
|
||||
$rule = new Validate([
|
||||
'journal_abstracting_id' => 'require',
|
||||
]);
|
||||
if (!$rule->check($data)) {
|
||||
return json(['code' => 1, 'msg' => $rule->getError()]);
|
||||
}
|
||||
// 白名单,避免误更新未知字段(数据库开启了 fields_strict)
|
||||
$update = [];
|
||||
foreach (['journal_id', 'title', 'url', 'sort', 'is_show'] as $f) {
|
||||
if (isset($data[$f])) {
|
||||
$update[$f] = $data[$f];
|
||||
}
|
||||
}
|
||||
if (empty($update)) {
|
||||
return json(['code' => 1, 'msg' => 'nothing to update']);
|
||||
}
|
||||
$this->journal_abs_obj->where('journal_abstracting_id', $data['journal_abstracting_id'])->update($update);
|
||||
return json(['code' => 0, 'msg' => 'success']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 批量排序期刊外链
|
||||
* @description 拖拽排序后批量保存收录数据库外链顺序
|
||||
* @url /master/Journal/sortJournalAbs
|
||||
* @method POST
|
||||
*
|
||||
* @param name:ids type:string require:1 desc:journal_abstracting_id 顺序数组(从大到小排序权重递减)
|
||||
*/
|
||||
public function sortJournalAbs()
|
||||
{
|
||||
$data = $this->request->post();
|
||||
$ids = isset($data['ids']) ? $data['ids'] : [];
|
||||
if (!is_array($ids) || empty($ids)) {
|
||||
return json(['code' => 1, 'msg' => 'ids 不能为空']);
|
||||
}
|
||||
// 数组顺序即展示顺序:越靠前 sort 越大
|
||||
$total = count($ids);
|
||||
foreach ($ids as $index => $id) {
|
||||
$this->journal_abs_obj->where('journal_abstracting_id', $id)->update(['sort' => $total - $index]);
|
||||
}
|
||||
return json(['code' => 0, 'msg' => 'success']);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user