admin_obj = Db::name('admin'); $this->journal_obj = Db::name('journal'); $this->article_obj = Db::name('article'); $this->article_author_obj = Db::name('article_author'); $this->article_ltai_obj = Db::name('article_ltai'); $this->journal_topic_obj = Db::name('journal_topic'); $this->journal_stage_obj = Db::name('journal_stage'); $this->journal_notices_obj = Db::name('journal_notices'); $this->journal_abs_obj = Db::name('journal_abstracting'); $this->journal_cfp_obj = Db::name('journal_cfp'); $this->journal_line_obj = Db::name('journal_line'); $this->article_to_topic_obj = Db::name('article_to_topic'); $this->article_to_line_obj = Db::name('article_to_line'); $this->journal_paper_obj = Db::name('journal_paper'); $this->journal_paper_art_obj = Db::name('journal_paper_art'); $this->subscribe_journal_obj = Db::name('subscribe_journal'); $this->subscribe_topic_obj = Db::name('subscribe_topic'); $this->super_danger_obj = Db::name('super_danger'); $this->board_obj = Db::name('board'); $this->board_group_obj = Db::name('board_group'); } /** * @title 获取期刊列表(出刊时间) * @description 获取期刊列表(出刊时间) * @author wangjinlei * @url /super/Publish/getMain * @method POST * * @return journals:期刊信息array# */ public function getMain(){ $journals = $this->journal_obj->where('journal_id','<>',17)->where('state',0)->select(); foreach ($journals as $k => $v){ $journals[$k]['mark'] = $this->calMark($v['journal_id']); $last_stage = $this->journal_stage_obj ->where('journal_id',$v['journal_id']) ->where('is_publish',1) ->where('state',0) ->order('journal_stage_id desc') ->limit(1) ->select(); $stage_now = $last_stage?$last_stage[0]:['issue_date'=>'2020-05-15']; $ctime = strtotime($stage_now['issue_date']); $cs = []; $cs['issn'] = $v['issn']; $cs['ctime'] = $ctime; $journals[$k]['last_time'] = $ctime; $cache_arts = $this->object_to_array(json_decode(myPost(self::JURL,$cs))); $count = is_array($cache_arts['data']['articles'])?count($cache_arts['data']['articles']):0; $journals[$k]['artCount'] = $count; } //按照危险值排序 for($i=0;$ijournal_obj->where('state',0)->select(); foreach ($journals as $k => $v){ $cah_res = $this->calMark($v['journal_id']); $insert['journal_id'] = $v['journal_id']; $insert['date'] = date('Ymd'); $insert['danger'] = $cah_res['mk']; $this->super_danger_obj->insert($insert); } } /** * @title 验证登录 * @description 验证登录 * @author wangjinlei * @url /super/Publish/check_login * @method POST * * @param name:account type:string require:1 desc:账户密码 * @param name:password type:string require:1 desc:密码 * */ public function check_login(){ $data = $this->request->post(); if($data['account'] == 'supervise'&&$data['password']=='wu751019'){ return jsonSuccess([]); } else { return jsonError('check error!'); } } /** * @title 获取合规检测 * @description 获取合规检测 * @author wangjinlei * @url /super/Publish/getTjJournal * @method POST * * @param name:start type:string require:1 desc:开始时间 * @param name:end type:string require:1 desc:结束时间 * * @return dates:数据@ * @dates LYL:录用率 * @dates CC:查重 * @dates WS:外审 * @dates SJ:时间 */ public function getTjJournal(){ $data = $this->request->post(); $pa['start'] = $data['start']; $pa['end'] = $data['end']; $res = myPost(self::TJ_URL,$pa); return $res; } /** * @title 获取查重文章 * @description 获取查重文章 * @author wangjinlei * @url /super/Publish/getCCArticle * @method POST * * @param name:issn type:int require:1 desc:期刊id * @param name:type type:string require:1 desc:重复类型 * @param name:start type:string require:1 desc:开始时间 * @param name:end type:string require:1 desc:结束时间 * */ public function getCCArticle(){ $data = $this->request->post(); $pa['issn'] = $data['issn']; $pa['type'] = $data['type']; $pa['start'] = $data['start']; $pa['end'] = $data['end']; $res = myPost(self::CCA_URL,$pa); return $res; } /** * @title 获取质量评估 * @description 获取质量评估 * @author wangjinlei * @url /super/Publish/getQuality * @method POST * * @param name:start type:string require:1 desc:开始时间 * @param name:end type:string require:1 desc:结束 * * @return YY:引用数 * @return TGL:投稿量 * @return FWL:发文量 * @return LX:文章类型 * @return GJH:国际化 * @return CK:创刊时间 * @return BW:编委 * @return DY:订阅 */ public function getQuality(){ $data = $this->request->post(); $journals = $this->journal_obj->where('state',0)->select(); $start = strtotime($data['start']); $end = strtotime($data['end'].' 23:59:59'); $pag['start'] = $start; $pag['end'] = $end; $res = $this->object_to_array(json_decode(myPost(self::AL_URL,$pag))); $r = $res['data']; $tg = []; foreach ($r as $val){ $tg[$val['issn']] = $val['SJ']; } foreach ($journals as $k => $v){ $journals[$k]['YY'] = $this->article_obj->where('journal_id',$v['journal_id'])->where('ctime','>',$start)->where('ctime','<=',$end)->where('state',0)->sum('cited'); $journals[$k]['TGL'] = isset($tg[$v['issn']])?$tg[$v['issn']]:[]; $journals[$k]['FWL'] = $this->getFWL($v['journal_id'],$start,$end); $journals[$k]['LX'] = $this->getLX($v['journal_id'],$start,$end); $journals[$k]['GJH'] = $this->getGJH($v['journal_id'],$start,$end); $journals[$k]['CK'] = $this->getCK($v['journal_id']); $journals[$k]['BW'] = $this->getBW($v['journal_id']); $journals[$k]['DY'] = $this->subscribe_journal_obj->where('journal_id',$v['journal_id'])->where('state',0)->count(); } return jsonSuccess($journals); } /** * 获取创刊时间 */ private function getCK($journal_id){ $stage = $this->journal_stage_obj->where('journal_id',$journal_id)->where('state',0)->order('journal_stage_id')->limit(1)->select(); return $stage?$stage[0]['issue_date']:''; } /** * 获取期刊的发文量 */ private function getFWL($journal_id){ $frag = []; $frag['all'] = 0; for($i=2016;$i<= intval(date('Y'));$i++){ $cstages = $this->journal_stage_obj ->where('journal_id',$journal_id) ->where('stage_year',$i) ->where('is_publish',1) ->where('state',0) ->column('journal_stage_id'); $frag[$i] = $this->article_obj->where('journal_stage_id','in',$cstages)->where('state',0)->count(); $frag['all'] += $frag[$i]; } return $frag; } private function getLX($journal_id,$start,$end){ $stages = $this->journal_stage_obj ->where('journal_id',$journal_id) ->where('is_publish',1) ->where('state',0) ->column('journal_stage_id'); $arts = $this->article_obj->where('journal_id',$journal_id)->where('ctime','>',$start)->where('ctime','<=',$end)->where('journal_stage_id','in',$stages)->where('state',0)->select(); $frag = []; foreach ($arts as $v){ if(isset($frag[$v['type']])){ $kk = $v['type']==''?'Other':$v['type']; $frag[$kk]++; }else{ $kk = $v['type']==''?'Other':$v['type']; $frag[$kk]=1; } } return $frag; } private function getGJH($journal_id,$start,$end){ $stages = $this->journal_stage_obj ->where('journal_id',$journal_id) ->where('is_publish',1) ->where('state',0) ->column('journal_stage_id'); $arts = $this->article_obj->where('journal_id',$journal_id)->where('journal_stage_id','in',$stages)->where('ctime','>',$start)->where('ctime','<=',$end)->where('state',0)->column('article_id'); $auts = $this->article_author_obj->where('article_id','in',$arts)->where('state',0)->select(); $frag = []; $frag['list'] = []; $frag['countrys'] = 0; foreach($auts as $v){ if(isset($frag['list'][$v['author_country']])){ $frag['list'][$v['author_country']]++; }else{ $frag['list'][$v['author_country']] = 1; $frag['countrys']++; } } return $frag; } /** * 获取编委信息 */ private function getBW($journal_id){ $list = $this->board_obj->where('journal_id',$journal_id)->where('state',0)->select(); $frag = []; foreach ($list as $v){ if(isset($frag[$v['country']])){ $frag[$v['country']]++; }else{ $frag[$v['country']] = 1; } } $re['count'] = count($list); $re['country'] = $frag; return $re; } /** * @title 获取历史危险值 * @description 获取历史危险值 * @author wangjinlei * @url /super/Publish/getDangerHistory * @method POST * * @return dates:日期数组# * @return journals:期刊信息array# */ public function getDangerHistory(){ $dates = []; for ($index = 8; $index > 0; $index--) { $dates[] = date("Ymd",strtotime("-$index week Sunday")); } $re['dates'] = $dates; $journals = $this->journal_obj->where('state',0)->select(); foreach ($journals as $k => $v){ $fr = []; $cache = $this->super_danger_obj ->where('journal_id',$v['journal_id']) ->where('state',0) ->order('super_danger_id desc') ->limit(8) ->column('danger'); for($in=0;$in<8-count($cache);$in++){ $fr[] = 0; } foreach ($cache as $val){ $fr[] = $val; } $journals[$k]['ma'] = $fr; } $re['journals'] = $journals; return jsonSuccess($re); } /** * 计算危险指数 */ private function calMark($journal_id){ $journal_info = $this->journal_obj->where('journal_id',$journal_id)->find(); $stages = $this->journal_stage_obj->where('journal_id',$journal_id)->where('is_publish',0)->where('state',0)->column('journal_stage_id'); $count = $this->article_obj->where('journal_stage_id','in',$stages) ->where('state',0) ->count(); $last_stage = $this->journal_stage_obj ->where('journal_id',$journal_id) ->where('is_publish',1) ->where('state',0) ->order('journal_stage_id desc') ->limit(1) ->select(); $stage_now = $last_stage?$last_stage[0]:['issue_date'=>'2020-05-15']; $cday = intval((time()-strtotime($stage_now['issue_date']))/(3600*24));//过去了多少天 $cycle = $journal_info['cycle']==0?2:$journal_info['cycle'];//出刊期限 $art_num = $journal_info['art_num']==0?5:$journal_info['art_num'];//期刊文章数量 $next_time = strtotime("+$cycle month",strtotime($stage_now['issue_date']));//下次出刊时间 $all_days = intval(($next_time-strtotime($stage_now['issue_date']))/(3600*24));//这两次出刊时间差,天数 $frag = []; $frag['count'] = $count; $frag['sy'] = intval(($next_time- time())/(3600*24));//$cycle*30 - $cday; $frag['ntime'] = $next_time;//strtotime($stage_now['issue_date'])+($cycle*30*3600*24); if(time()>$next_time){ $frag['mk'] = 100; return $frag; } $lart = intval($cday*$art_num/$all_days); if($count>=$lart){ $frag['mk'] = 0; }else{ $frag['mk'] = intval(($lart - $count)*100/$art_num); } return $frag; } public function object_to_array($obj){ $_arr=is_object($obj)?get_object_vars($obj):$obj; $arr = null; foreach($_arr as $key=>$val){ $val=(is_array($val))||is_object($val)?$this->object_to_array($val):$val; $arr[$key]=$val; } return $arr; } }