diff --git a/application/api/controller/Wechatprogram.php b/application/api/controller/Wechatprogram.php
new file mode 100644
index 0000000..8a87ef2
--- /dev/null
+++ b/application/api/controller/Wechatprogram.php
@@ -0,0 +1,553 @@
+request->post() : $aParam;
+
+ //获取微信登录code
+ $sLoginCode = empty($aParam['login_code']) ? '' : $aParam['login_code'];
+ if(empty($sLoginCode)){
+ return json_encode(['status' => 2,'msg' => 'Please enter the login code']);
+ }
+
+ //调用接口
+ //url拼接
+ $sCode2SessionUrl = $this->sCode2SessionUrl;
+ $sCode2SessionUrl .= '?appid='.$this->sAppID.'&secret='.$this->sAppSecret.'&js_code='.$sLoginCode.'&grant_type=GRANT_TYPE';
+ $aResult = json_decode(myGet($sCode2SessionUrl),true);
+ if(isset($aResult['errcode'])){
+ $sMsg = empty($aResult['errmsg']) ? 'Interface request error:'.$aResult['errcode'] : $aResult['errmsg'];
+ return json_encode(['status' => 3,'msg' => $sMsg]);
+ }
+
+ //获取微信登录openid
+ $sOpenId= empty($aResult['openid']) ? '' : trim($aResult['openid']);
+ if(empty($sOpenId)){
+ return json_encode(['status' => 4,'msg' => 'User login information not obtained']);
+ }
+
+ //根绝openid获取用户信息
+ $aData = [];
+ $aUser = json_decode($this->getUser(['openid' => $sOpenId,'is_select_role' => 2]),true);
+ $aUser = empty($aUser['data']) ? [] : $aUser['data'];
+ if(!empty($aUser)){
+ $aData['user'] = $aUser;
+ }
+ $aData['wechat'] = $aResult;
+ return json_encode(['status' => 1,'msg' => 'success','data' => $aData]);
+ }
+
+ /**
+ * 根据OPENID查询用户信息
+ */
+ public function getUser($aParam = []){
+ //获取参数
+ $aParam = empty($aParam) ? $this->request->post() : $aParam;
+
+ //获取用户ID
+ $iUserId= empty($aParam['user_id']) ? '' : $aParam['user_id'];
+
+ //获取微信登录openid
+ $sOpenId= empty($aParam['openid']) ? '' : $aParam['openid'];
+ if(empty($sOpenId) && empty($iUserId)){
+ return json_encode(['status' => 2,'msg' => 'Please enter the login openid']);
+ }
+
+ //查询用户是否存在
+ $aWhere = ['state' => 0];
+ if(!empty($iUserId)){
+ $aWhere['user_id'] = $iUserId;
+ }
+ if(!empty($sOpenId)){
+ $aWhere['openid'] = $sOpenId;
+ }
+ $aUser = Db::name('user')->field('user_id,account,openid,icon,email,type')->where($aWhere)->find();
+ if(empty($aUser)){
+ return json_encode(['status' => 2,'msg' => 'No user information found']);
+ }
+
+ //判断是否查询用户角色
+ $iIsSelectRole = empty($aParam['is_select_role']) ? 1 : $aParam['is_select_role'];
+ if($iIsSelectRole == 1){
+ $aUser['roles'] = $this->getUserRoles($aUser);
+ }
+ return json_encode(['status' => 1,'msg' => 'success','data' => $aUser]);
+ }
+
+ /**
+ * 用户名密码绑定openid
+ */
+ public function bindAccount($aParam = []){
+ //获取参数
+ $aParam = empty($aParam) ? $this->request->post() : $aParam;
+
+ //账号名
+ $sAccount= empty($aParam['account']) ? '' : trim($aParam['account']);
+ if(empty($sAccount)){
+ return json_encode(['status' => 2,'msg' => 'Please enter your account']);
+ }
+ //密码
+ $sPassword= empty($aParam['password']) ? '' : trim($aParam['password']);
+ if(empty($sPassword)){
+ return json_encode(['status' => 2,'msg' => 'Please enter the password']);
+ }
+ //openid
+ $sOpenId= empty($aParam['openid']) ? '' : trim($aParam['openid']);
+ // //unionid
+ // $sUnionId= empty($aParam['unionid']) ? '' : trim($aParam['unionid']);
+ if(empty($sOpenId)){// && empty($sUnionId)
+ return json_encode(['status' => 2,'msg' => 'Please enter the login openid/unionid']);
+ }
+
+ //查询用户是否存在
+ $aWhere = ['account|email' => $sAccount,'state' => 0];
+ $aUser = Db::name('user')->field('user_id,account,password,openid')->where($aWhere)->find();
+ if(empty($aUser)){
+ return json_encode(['status' => 3,'msg' => 'Login account does not exist, please confirm']);
+ }
+ //验证密码是否一致
+ $sPassword = md5($sPassword);
+ if($aUser['password'] != $sPassword){
+ return json_encode(['status' => 4,'msg' => 'Login password input error, please confirm']);
+ }
+ //验证是否绑定账号
+ if(!empty($aUser['openid'])){// || !empty($aUser['unionid'])
+ return json_encode(['status' => 5,'msg' => 'Login account already linked to WeChat account']);
+ }
+ //验证openid是否被绑定
+ $iUserId = empty($aUser['user_id']) ? 0 : $aUser['user_id'];
+ $aWhere = ['state' => 0,'user_id' => ['<>',$iUserId]];
+ // if(!empty($sUnionId)){
+ // $aWhere['unionid'] = $sUnionId;
+ // }
+ if(!empty($sOpenId)){
+ $aWhere['openid'] = $sOpenId;
+ }
+ $aUserOpenId = Db::name('user')->field('user_id')->where($aWhere)->find();
+ if(!empty($aUserOpenId)){
+ return json_encode(['status' => 6,'msg' => 'This WeChat account has been bound']);
+ }
+
+ //更新
+ $aUpdate = [];
+ // if(!empty($sUnionId)){
+ // $aUpdate['unionid'] = $sUnionId;
+ // }
+ if(!empty($sOpenId)){
+ $aUpdate['openid'] = $sOpenId;
+ }
+ if(empty($aUpdate)){
+ return json_encode(['status' => 7,'msg' => 'Update data to empty']);
+ }
+
+ //执行操作
+ $aWhere = ['user_id' => $iUserId,'state' => 0];
+ $result = Db::name('user')->where($aWhere)->limit(1)->update($aUpdate);
+ if($result === false){
+ return json_encode(['status' => 8,'msg' => "Binding failed"]);
+ }
+ // $aUser['unionid'] = empty($aUpdate['unionid']) ? $aUser['unionid'] : $aUpdate['unionid'];
+ $aUser['openid'] = empty($aUpdate['openid']) ? $aUser['openid'] : $aUpdate['openid'];
+ return json_encode(['status' => 1,'msg' => 'Binding successful','data' => $aUser]);
+ }
+
+ /**
+ * 用户名密码解绑openid
+ */
+ public function unbindAccount(){
+ //获取参数
+ $aParam = empty($aParam) ? $this->request->post() : $aParam;
+
+ //账号名
+ $sAccount= empty($aParam['account']) ? '' : trim($aParam['account']);
+ if(empty($sAccount)){
+ return json_encode(['status' => 2,'msg' => 'Please enter your account']);
+ }
+ //密码
+ $sPassword= empty($aParam['password']) ? '' : trim($aParam['password']);
+ if(empty($sPassword)){
+ return json_encode(['status' => 2,'msg' => 'Please enter the password']);
+ }
+ //openid
+ $sOpenId= empty($aParam['openid']) ? '' : trim($aParam['openid']);
+ //unionid
+ // $sUnionId= empty($aParam['unionid']) ? '' : trim($aParam['unionid']);
+ if(empty($sOpenId)){// && empty($sUnionId)
+ return json_encode(['status' => 2,'msg' => 'Please enter the login openid/unionid']);
+ }
+
+ //查询用户是否存在
+ $aWhere = ['account|email' => $sAccount,'state' => 0];
+ $aUser = Db::name('user')->field('user_id,account,password,openid')->where($aWhere)->find();
+ if(empty($aUser)){
+ return json_encode(['status' => 3,'msg' => 'Login account does not exist, please confirm']);
+ }
+ //验证密码是否一致
+ $sPassword = md5($sPassword);
+ if($aUser['password'] != $sPassword){
+ return json_encode(['status' => 4,'msg' => 'Login password input error, please confirm']);
+ }
+ //验证是否绑定账号
+ if(empty($aUser['openid'])){// && empty($aUser['unionid'])
+ return json_encode(['status' => 5,'msg' => 'This account is not bound to any mini program, there is no need to unbind it']);
+ }
+ //验证unionid是否相等
+ // if(!empty($sUnionId) && !empty($aUser['unionid']) & $sUnionId != $aUser['unionid']){
+ // return json_encode(['status' => 6,'msg' => 'Unbind account not bound']);
+ // }
+ //验证openid是否相等
+ if(!empty($sOpenId) && !empty($aUser['openid']) & $sOpenId != $aUser['openid']){
+ return json_encode(['status' => 7,'msg' => 'Unbind account not bound']);
+ }
+ $iUserId = empty($aUser['user_id']) ? 0 : $aUser['user_id'];
+
+ //执行操作
+ $aWhere = ['user_id' => $iUserId,'state' => 0];
+ $aUpdate = ['openid' => ''];//,'unionid' => ''
+ $result = Db::name('user')->where($aWhere)->limit(1)->update($aUpdate);
+ if($result === false){
+ return json_encode(['status' => 8,'msg' => "Unbinding failed"]);
+ }
+ $aUpdate['user_id'] = $iUserId;
+ return json_encode(['status' => 1,'msg' => 'Unbound successfully','data' => $aUpdate]);
+ }
+
+ /**
+ * 用户账号注册
+ */
+ public function registerAccount(){
+
+ //获取参数
+ $aParam = empty($aParam) ? $this->request->post() : $aParam;
+
+ //邮箱
+ $sEmail = empty($aParam['email']) ? '' : trim($aParam['email']);
+ if(empty($sEmail)){
+ return json_encode(['status' => 2,'msg' => 'Please enter your email']);
+ }
+ //密码
+ $sPassword= empty($aParam['password']) ? '' : trim($aParam['password']);
+ if(empty($sPassword)){
+ return json_encode(['status' => 2,'msg' => 'Please enter the password']);
+ }
+ //openid
+ $sOpenId= empty($aParam['openid']) ? '' : trim($aParam['openid']);
+ if(empty($sOpenId)){
+ return json_encode(['status' => 2,'msg' => 'Please enter the login openid/unionid']);
+ }
+
+ //查询用户是否存在
+ $aWhere = ['account|email' => $sEmail,'state' => 0];
+ $aUser = Db::name('user')->field('user_id')->where($aWhere)->find();
+ if(!empty($aUser)){
+ return json_encode(['status' => 3,'msg' => 'The registered account already exists, please confirm']);
+ }
+ //验证OPENID是否绑定
+ $aWhere = ['openid' => $sOpenId,'state' => 0];
+ $aUser = Db::name('user')->field('user_id')->where($aWhere)->find();
+ if(!empty($aUser)){
+ return json_encode(['status' => 3,'msg' => 'WeChat account has been bound']);
+ }
+
+ //数据插入
+ Db::startTrans();
+ //用户主表
+ $aInsert = ['account' => $sEmail,'email' => $sEmail,'password' => md5($sPassword),'ctime' => time(),'openid' => $sOpenId];
+ $iId = Db::name('user')->insertGetId($aInsert);
+ if(empty($iId)){
+ return json_encode(['status' => 4,'msg' => 'Registration failed']);
+ }
+ //用户附属表
+ $aReviewInsert = ['reviewer_id' => $iId,'test_from' => 'wechat_register'];
+ $iInfoId = Db::name('user_reviewer_info')->insertGetId($aReviewInsert);
+ if(empty($iInfoId)){
+ return json_encode(['status' => 5,'msg' => 'Registration failed']);
+ }
+ Db::commit();
+ $aInsert['user_id'] = $iId;
+ return json_encode(['status' => 1,'msg' => 'registered successfully','data' => $aInsert]);
+ }
+ /**
+ * 获取用户身份
+ */
+ private function getUserRoles($aUser = []){
+ if(empty($aUser)){
+ return [];
+ }
+
+ //获取账号名
+ $sAccount = empty($aUser['account']) ? '' : trim($aUser['account']);
+ if($aUser['type'] == 2) {
+ $aRoles = ['editor'];
+ if($sAccount=="liuna" || $sAccount=="zhuwenjing"){
+ array_push($aRoles, 'superadmin');
+ }
+ return $aRoles;
+ }
+
+ $aRoles = ['author'];
+ //查询是否是审稿人
+ $iUserId = empty($aUser['user_id']) ? 0 : $aUser['user_id'];
+ $aWhere = ['reviewer_id' => $iUserId,'state' => 0];
+ $aUserInfo = Db::name('reviewer_to_journal')->field('rtj_id')->where($aWhere)->find();
+ if(!empty($aUserInfo)) {
+ array_push($aRoles,'reviewer');
+ }
+
+ //青年编委
+ $aWhere = ['user_id' => $iUserId,'state' => 0];
+ $aUserInfo = Db::name('user_to_yboard')->field('user_id')->where($aWhere)->find();
+ if(!empty($aUserInfo)) {
+ array_push($aRoles,'yboard');
+ }
+ //主编与期刊
+ $aWhere = ['user_id' => $iUserId,'state' => 0];
+ $aUserInfo = Db::name('chief_to_journal')->field('user_id')->where($aWhere)->find();
+ if(!empty($aUserInfo)) {
+ array_push($aRoles,'chief');
+ }
+ //期刊主编类型
+ $aWhere = ['user_id' => $iUserId,'state' => 0];
+ $aUserInfo = Db::name('board_to_journal')->field('user_id,type')->where($aWhere)->find();
+ if(!empty($aUserInfo)) {
+ array_push($aRoles,'board');
+ $iType = isset($aUserInfo['type']) ? $aUserInfo['type'] : '-1';
+ if($iType == 0){
+ array_push($aRoles,'chief_editor');
+ }
+ if($iType == 1){
+ array_push($aRoles,'deputy_editor');
+ }
+ if($iType == 2){
+ array_push($aRoles,'editor_board');
+ }
+ }
+
+ //期刊主编类型
+ $aWhere = ['user_id' => $iUserId,'uts_state' => 0];
+ $aUserInfo = Db::name('user_to_special')->field('user_id')->where($aWhere)->find();
+ if (!empty($aUserInfo)) {
+ array_push($aRoles,'special');
+ }
+ return $aRoles;
+ }
+ /**
+ * 获取我的稿件
+ */
+ public function getManuscript($aParam = []){
+ //获取参数
+ $aParam = empty($aParam) ? $this->request->post() : $aParam;
+
+ //获取用户ID
+ $iUserId= empty($aParam['user_id']) ? '' : $aParam['user_id'];
+ //获取状态
+ $iState = isset($aParam['state']) ? $aParam['state'] : -2;
+ //获取微信登录openid
+ $sOpenId= empty($aParam['openid']) ? '' : $aParam['openid'];
+ if(empty($sOpenId) && empty($iUserId)){
+ return json_encode(['status' => 2,'msg' => 'Please enter your login account']);
+ }
+ //标题
+ $sTitle = empty($aParam['title']) ? '': $aParam['title'];
+ //获取用户信息
+ $aParam['is_select_role'] = 2;
+ $aUser = json_decode($this->getUser($aParam),true);
+ $aUser = empty($aUser['data']) ? [] : $aUser['data'];
+ if(empty($aUser)){
+ return json_encode(['status' => 3,'msg' => 'No user information found']);
+ }
+
+ //获取分页相关参数
+ $iSize = empty($aParam['size']) ? 15 : $aParam['size'];//每页显示条数
+ $iPage = empty($aParam['page']) ? 1 : $aParam['page'];// 当前页码
+
+ $iUserId = empty($aUser['user_id']) ? 0 : $aUser['user_id'];
+ //获取数量
+ $aWhere = ['user_id' => $iUserId,'accept_sn' => ['not like','Draft%']];
+ $aWhere['state'] = ['<>',-1];
+ if($iState != -2 && $iState != -1){
+ $aWhere['state'] = $iState;
+ }
+ if($iState == -2){
+ $aWhere['state'] = ['<>',-1];
+ }
+ if(!empty($sTitle)){
+ $aWhere['title'] =['like','%'.trim($sTitle).'%'];
+ }
+ $iCount = Db::name('article')->where($aWhere)->count();
+ if(empty($iCount)){
+ return json_encode(['status' => 1,'msg' => 'Article not found','data' => ['total' => 0,'lists' => []]]);
+ }
+
+ //判断页数是否超过最大分页限制
+ $iPageNum = ceil($iCount/$iSize);
+ if($iPage > $iPageNum){
+ return json_encode(['status' => 1,'msg' => 'The number of pages has exceeded the limit, maximum page number:'.$iPageNum,'data' => ['total' => $iCount,'lists' => []]]);
+ }
+
+ //查询详细数据
+ $sField = 'article_id,journal_id,accept_sn,title,type,abstrart,ctime,state';
+ $sOrder = 'article_id desc';
+ $aArticle = Db::name('article')
+ ->field($sField)
+ ->where($aWhere)
+ ->page($iPage, $iSize)
+ ->order($sOrder)
+ ->select();
+ if(empty($aArticle)){
+ return json_encode(['status' => 1,'msg' => 'Data is empty','data' => ['total' => 0,'lists' => []]]);
+ }
+ //获取期刊
+ $aJournalId = array_unique(array_column($aArticle, 'journal_id'));
+ $aWhere = ['journal_id' => ['in',$aJournalId],'state' => 0];
+ $aJournal = DB::name('journal')->where($aWhere)->column('journal_id,title');
+ //数据处理
+ foreach ($aArticle as $key => $value) {
+ $aArticle[$key]['type_name'] = translateType($value['type']);
+ $aArticle[$key]['journal_title'] = empty($aJournal[$value['journal_id']]) ? '' : $aJournal[$value['journal_id']];
+ $aArticle[$key]['ctime'] = empty($value['ctime']) ? '' : date('Y-m-d',$value['ctime']);
+ }
+ return json_encode(['status' => 1,'msg' => 'success','data' => ['total' => $iCount,'lists' => $aArticle]]);
+ }
+
+ /**
+ * 获取我的消息
+ */
+ public function getMessagesLists($aParam = []){
+ //获取参数
+ $aParam = empty($aParam) ? $this->request->post() : $aParam;
+
+ //获取用户ID
+ $iUserId= empty($aParam['user_id']) ? '' : $aParam['user_id'];
+ //获取微信登录openid
+ $sOpenId= empty($aParam['openid']) ? '' : $aParam['openid'];
+ if(empty($sOpenId) && empty($iUserId)){
+ return json_encode(['status' => 2,'msg' => 'Please enter your login account']);
+ }
+ //标题
+ $sTitle = empty($aParam['title']) ? '': $aParam['title'];
+
+ //状态
+ $iIsRead = empty($aParam['is_read']) ? -1 : $aParam['is_read'];
+
+ //获取用户信息
+ $aParam['is_select_role'] = 2;
+ $aUser = json_decode($this->getUser($aParam),true);
+ $aUser = empty($aUser['data']) ? [] : $aUser['data'];
+ if(empty($aUser)){
+ return json_encode(['status' => 3,'msg' => 'No user information found']);
+ }
+
+ //获取分页相关参数
+ $iSize = empty($aParam['size']) ? 15 : $aParam['size'];//每页显示条数
+ $iPage = empty($aParam['page']) ? 1 : $aParam['page'];// 当前页码
+
+ $iUserId = empty($aUser['user_id']) ? 0 : $aUser['user_id'];
+ //获取数量
+ $aWhere = ['user_id' => $iUserId];
+ if(!empty($sTitle)){
+ $aWhere['title'] =['like','%'.trim($sTitle).'%'];
+ }
+ if(in_array($iIsRead, [1,2])){
+ $aWhere['is_read'] = $iIsRead;
+ }
+ $iCount = Db::name('messages')->where($aWhere)->count();
+ if(empty($iCount)){
+ return json_encode(['status' => 1,'msg' => 'Message is empty','data' => ['total' => 0,'lists' => []]]);
+ }
+
+ //判断页数是否超过最大分页限制
+ $iPageNum = ceil($iCount/$iSize);
+ if($iPage > $iPageNum){
+ return json_encode(['status' => 1,'msg' => 'The number of pages has exceeded the limit, maximum page number:'.$iPageNum,'data' => ['total' => $iCount,'lists' => []]]);
+ }
+
+ //查询详细数据
+ $sField = 'message_id,article_id,type,title,content,is_read,create_time';
+ $sOrder = 'create_time desc';
+ $aMessages = Db::name('messages')
+ ->field($sField)
+ ->where($aWhere)
+ ->page($iPage, $iSize)
+ ->order($sOrder)
+ ->select();
+ if(empty($aMessages)){
+ return json_encode(['status' => 1,'msg' => 'Data is empty','data' => ['total' => 0,'lists' => []]]);
+ }
+ //获取期刊
+ $aJournalId = array_unique(array_column($aMessages, 'journal_id'));
+ $aWhere = ['journal_id' => ['in',$aJournalId],'state' => 0];
+ $aJournal = DB::name('journal')->where($aWhere)->column('journal_id,title');
+ //数据处理
+ foreach ($aMessages as $key => $value) {
+ $aMessages[$key]['create_time'] = empty($value['create_time']) ? '' : date('Y-m-d H:i:s',$value['create_time']);
+ }
+ return json_encode(['status' => 1,'msg' => 'success','data' => ['total' => $iCount,'lists' => $aMessages]]);
+ }
+ /**
+ * 更改消息状态
+ */
+ public function markRead($aParam = []){
+ //获取参数
+ $aParam = empty($aParam) ? $this->request->post() : $aParam;
+ //获取消息ID
+ $iMessageId= empty($aParam['message_id']) ? 0 : $aParam['message_id'];
+ if(empty($iMessageId)){
+ return json_encode(['status' => 2,'msg' => 'Please select a message']);
+ }
+ //获取用户ID
+ $iUserId= empty($aParam['user_id']) ? '' : $aParam['user_id'];
+ //获取微信登录openid
+ $sOpenId= empty($aParam['openid']) ? '' : $aParam['openid'];
+ if(empty($sOpenId) && empty($iUserId)){
+ return json_encode(['status' => 2,'msg' => 'Please enter your login account']);
+ }
+ //获取用户信息
+ $aParam['is_select_role'] = 2;
+ $aUser = json_decode($this->getUser($aParam),true);
+ $aUser = empty($aUser['data']) ? [] : $aUser['data'];
+ if(empty($aUser)){
+ return json_encode(['status' => 3,'msg' => 'No user information found']);
+ }
+
+
+ $iUserId = empty($aUser['user_id']) ? 0 : $aUser['user_id'];
+ //获取未读数据
+ $aWhere = ['user_id' => $iUserId,'is_read' => 2];
+ if($iMessageId != -1){
+ $aWhere['message_id'] = ['in',$iMessageId];
+ }
+ $aMessagesId = Db::name('messages')->where($aWhere)->column('message_id');
+ if(empty($aMessagesId)){
+ return json_encode(['status' => 4,'msg' => 'Message is empty']);
+ }
+ //更新为已读
+ $aWhere = ['is_read' => 2,'message_id' => ['in',$aMessagesId]];
+ $aUpdate = ['is_read' => 1,'update_time' => time(),'update_user_id' => $iUserId];
+ $result = Db::name('messages')->where($aWhere)->limit(count($aMessagesId))->update($aUpdate);
+ if($result === false){
+ return json_encode(['status' => 5,'msg' => 'Marking failed']);
+ }
+ return json_encode(['status' => 1,'msg' => 'Marking successful']);
+ }
+}
diff --git a/application/common/Messages.php b/application/common/Messages.php
new file mode 100644
index 0000000..dcf3802
--- /dev/null
+++ b/application/common/Messages.php
@@ -0,0 +1,184 @@
+ [
+ 'title' => 'Submission Received',
+ 'content' => 'Your manuscript(ID: {#accept_sn#}) has been successfully submitted.
+The editorial office is conducting an initial assessment. You will be notified once the review process begins.'
+ ],//'投稿成功',
+ 2 => [
+ 'title' => 'Manuscript Under Review',
+ 'content' => 'Your manuscript is now under review.
+Manuscript (ID: {#accept_sn#}) has been sent to peer reviewers for evaluation. You will be notified once a review decision becomes available.'
+ ],//'稿件进入审稿',
+ 3 => [
+ 'title' => 'Declined for Publication',
+ 'content' => 'Editorial decision issued.
+After evaluation, your manuscript(ID: {#accept_sn#}) has not been accepted for publication. Please refer to the decision letter for details and reviewer comments.'
+ ],//'退稿通知',
+ 4 => [
+ 'title' => 'Revision Requested',
+ 'content' => 'Revision requested.
+Editors/reviewers have requested revisions to your manuscript(ID: {#accept_sn#}). Please review the comments and submit your revised version within the required timeframe.'
+ ],//'退修通知',
+ 5 => [
+ 'title' => 'Accepted for Publication',
+ 'content' => 'Revision requested.
+Editors/reviewers have requested revisions to your manuscript(ID: {#accept_sn#}). Please review the comments and submit your revised version within the required timeframe.'
+ ],//'录用通知',
+ 6 => [
+ 'title' => 'APC Payment Required',
+ 'content' => 'APC payment required.
+Your manuscript(ID: {#accept_sn#}) has reached the payment stage. Please complete the Article Processing Charge (APC) to proceed with publication processing.'
+ ],//'缴费提醒',
+ 7 => [
+ 'title' => 'Proofreading Confirmation Required',
+ 'content' => 'Proofs ready for review.
+Your manuscript(ID: {#accept_sn#}) proof is available. Please check and confirm carefully within 48 hours.'
+ ],//'校对通知',
+ 8 => [
+ 'title' => 'Manuscript Published Online',
+ 'content' => 'Your article is now published online!
+The final version of your manuscript(ID: {#accept_sn#}) is available on the journal website. Thank you for publishing with us.'
+ ],//'发表通知',
+ 9 => [
+ 'title' => 'APC Update',
+ 'content' => 'APC update applied.
+The Article Processing Charge for your manuscript(ID: {#accept_sn#}) has been adjusted. Please check the updated payment details in your submission dashboard.'
+ ],//'稿费修改',
+ 10 => [
+ 'title' => 'Review Invitation(ID: {#accept_sn#})',
+ 'content' => 'Review invitation received.
+You are invited to review a manuscript (ID: {#accept_sn#}). Please accept or decline the invitation via your reviewer dashboard.'
+ ],//'审稿通知',
+ 11 => [
+ 'title' => 'Review Invitation Reminder',
+ 'content' => 'Reminder: Review invitation pending.
+You have a pending review invitation (ID: {#accept_sn#}). Kindly respond at your earliest convenience.'
+ ],//'审稿提醒',
+ 12 => [
+ 'title' => 'Review Report Reminder',
+ 'content' => 'Reminder: Review report due.
+Thank you for accepting the review (ID: {#accept_sn#}). Please submit your review report to help us proceed with the editorial decision.'
+ ],//'审稿报告提交',
+ 13 => [
+ 'title' => 'Re-review Invitation',
+ 'content' => 'Re-review request received.
+A revised version of manuscript (ID: {#accept_sn#}) is available for your follow-up assessment. Please access the reviewer dashboard to proceed.'
+ ],//'复审邀请',
+ 14 => [
+ 'title' => 'Re-review Reminder',
+ 'content' => 'Reminder: Re-review pending.
+Your follow-up review for manuscript (ID: {#accept_sn#}) is still pending. We would appreciate your evaluation at your earliest convenience.'
+ ],//'复审提醒',
+ 15 => [
+ 'title' => 'Review Closed',
+ 'content' => 'Review assignment closed.
+Your review for manuscript (ID: {#accept_sn#}) is no longer required. Thank you for your support and contribution to the journal.'
+ ],//审稿关闭提醒
+ ];
+
+ private $aField = ['article_id','user_id','type','title','content','is_read','create_time','update_user_id','update_time'];
+
+ /**
+ * 站内信息添加
+ */
+ public function add($aParam = []){
+
+ //获取参数
+ $aParam = empty($aParam) ? [] : $aParam;
+ //必填参数验证
+ $iType = empty($aParam['type']) ? 0 : $aParam['type'];
+ $iArticleId = empty($aParam['article_id']) ? 0 : $aParam['article_id'];
+ if(empty($iArticleId) || empty($iType) || empty($aParam['user_id'])){
+ return ['status' => 2, 'msg' => 'Parameter is empty article title/message type/user_id'];
+ }
+
+ if($iType == 2){//验证是否插入
+ $aMessages = $this->get($aParam);
+ if(!empty($aMessages['data'])){
+ return ['status' => 3, 'msg' => 'The review reminder has been sent'];
+ }
+ }
+ //根据类型获取消息内容
+ $aMessagesType = $this->aMessagesType;
+ $aMessagesTypeInfo = empty($aMessagesType[$iType]) ? [] : $aMessagesType[$iType];
+ if(empty($aMessagesTypeInfo)){
+ return ['status' => 4, 'msg' => 'Message content not found'];
+ }
+
+ //获取表字段 进行字段赋值
+ $aField = $this->aField;
+ $aInsert = [];
+ foreach ($aField as $key => $value) {
+ if(empty($aParam[$value])){
+ continue;
+ }
+ $aInsert[$value] = $aParam[$value];
+ }
+ //获取稿件号
+ $sAcceptSn = empty($aParam['accept_sn']) ? '' : $aParam['accept_sn'];
+ $aInsert['title'] = str_replace('{#accept_sn#}', $sAcceptSn, $aMessagesTypeInfo['title']);
+ $aInsert['content'] = str_replace('{#accept_sn#}', $sAcceptSn, $aMessagesTypeInfo['content']);
+ $aInsert['create_time'] = time();
+
+ //拒稿和退修 查询是否有同意审稿但未审稿的审稿人
+ if(in_array($iType, [3,4])){
+ $aWhere = ['article_id' => $iArticleId,'state' => 0];
+ $aReviewer = Db::name('article_reviewer')->where($aWhere)->column('reviewer_id');
+ $aBatchInsert = [];
+ if(!empty($aReviewer)){
+ $aMessagesTypeInfo = $aMessagesType[15];
+ $sTitle = str_replace('{#accept_sn#}', $sAcceptSn, $aMessagesTypeInfo['title']);
+ $sContent = str_replace('{#accept_sn#}', $sAcceptSn, $aMessagesTypeInfo['content']);
+ $aReviewer =array_unique($aReviewer);
+ foreach ($aReviewer as $key => $value) {
+ if(empty($value)){
+ continue;
+ }
+ $aBatchInsert[] = ['title' => $sTitle,'content' => $sContent,'type' => 15,'create_time' => time(),'article_id' => $iArticleId,'user_id' => $value];
+ }
+ }
+ $aBatchInsert[] = ['title' => $aInsert['title'],'content' => $aInsert['content'],'type' => $aInsert['type'],'create_time' => time(),'article_id' => $iArticleId,'user_id' => $aInsert['user_id']];
+
+ $result = Db::name('messages')->insertAll($aBatchInsert);
+ if(empty($result)){
+ return ['status' => 6, 'msg' => '数据插入失败'.Db::getLastSql()."\n数据内容:",'data' => $aParam];
+ }
+ }else{
+ $result = Db::name('messages')->insertGetId($aInsert);
+ if(empty($result)){
+ return ['status' => 5, 'msg' => '数据插入失败'.Db::getLastSql()."\n数据内容:",'data' => $aParam];
+ }
+ }
+
+ return ['status' => 1, 'msg' => '数据插入成功'];
+ }
+
+ /**
+ * 获取信息
+ */
+ public function get($aParam = []){
+ //获取参数
+ $aParam = empty($aParam) ? [] : $aParam;
+ //必填参数验证
+ if(empty($aParam['article_id']) || empty($aParam['type']) || empty($aParam['user_id'])){
+ return ['status' => 2, 'msg' => '非法操作'];
+ }
+ //获取表字段 进行字段赋值
+ $aField = $this->aField;
+ $aWhere = [];
+ foreach ($aField as $key => $value) {
+ if(empty($aParam[$value])){
+ continue;
+ }
+ $aWhere[$value] = $aParam[$value];
+ }
+ $aMessages = Db::name('messages')->where($aWhere)->find();
+ return ['status' => 1, 'msg' => '获取数据成功','data' => $aMessages];
+ }
+}