$data['name'] ]; $isweb = Web::where($where)->first(); if(empty($isweb)){ date_default_timezone_set('Asia/Shanghai'); $web = Web::insert($data); }else{ return Result::error('此网站已存在,不可重复添加!'); } if(empty($web)){ return Result::error('添加失败'); } return Result::success('添加成功'); } /** * 获取并搜索网站 * @param array $data * @return array|mixed */ public function getWeb(array $data): array { if(isset($data['keyWord'])){ $where = [ ['name','like','%'.$data['keyWord'].'%'] ]; $rep = Web::where($where)->limit($data['pageSize'])->orderBy("created_at","desc")->offset(($data['page']-1)*$data['pageSize'])->get(); $count = Web::where($where)->count(); if($count==0){ return Result::error('未查找到相关网站!'); } }else{ $rep = Web::limit($data['pageSize'])->orderBy("created_at","desc")->offset(($data['page']-1)*$data['pageSize'])->get(); $count = Web::count(); } $data = [ 'rep' => $rep->toArray(), 'count' => $count ]; if(empty($rep)){ return Result::error('您还未添加网站,请先去添加!'); } return Result::success($data); } /** * 修改网站 * @param array $data * @return array|mixed */ public function upWeb(array $data): array { $web = Web::where('id',$data['id'])->first(); if(empty($web)){ return Result::error('请输入正确的网站id!'); }else{ date_default_timezone_set('Asia/Shanghai'); $id = Web::where('id',$data['id'])->update($data); if(empty($id)){ return Result::error('无法修改!'); } } return Result::success($id); } /** * 删除网站 * @param array $data * @return array|mixed */ public function delWeb(array $data): array { $web = Web::where('id',$data['id'])->first(); if(empty($web)){ return Result::error('请输入正确的网站id!'); }else{ $where = [ ['web_id','=',$data['id']] ]; //判断此网站下是否规则任务 $rule = Rule::where($where)->get(); if(empty($rule)){ //若没有直接删除网站 $result['web'] = Web::where('id',$data['id'])->delete(); }else{ //若有,判断规则任务是否有已执行的 $rule = Rule::where($where)->where('status',2)->get(); // return Result::success($rule); if(!empty($rule->toArray())){ //若有已执行的任务规则,不可删除网站 return Result::error('该网站已有成功执行的任务规则,不可删除!'); }else{ try { Db::beginTransaction(); //若无已执行的任务规则,删除网站及相应的未执行的规则任务 $result['web'] = Web::where('id',$data['id'])->delete(); $result['rule'] = Rule::where($where)->delete(); Db::commit(); } catch(\Throwable $ex){ Db::rollBack(); var_dump($ex->getMessage()); return Result::error("删除失败",0); } } } } return Result::success($result); } /** * 添加规则任务 * @param array $data * @return array|mixed */ public function addRule(array $data): array { $web = Web::where('id',$data['web_id'])->get(); if(empty($web->toArray())){ return Result::error('请输入正确的网站id!'); }else{ $rulename = Rule::where('name',$data['name'])->get(); //查找是否存在规则名称重复的 if(empty($rulename->toArray())){ //(若是多类型参数一起传过来则根据类型,只获取对应类型需要的参数) switch($data['type']){ case 1: $rule = [ 'name' => $data['name'], 'web_id' => $data['web_id'], 'first_url' => $data['first_url'], 'second_start' => $data['second_start'], 'second_num' => $data['second_num'], 'second_end' => $data['second_end'], 'end_pagenum' => $data['end_pagenum'], 'start' => $data['start'], 'title' => $data['title'], 'content' => $data['content'] ]; // var_dump("============1============"); break; case 2: $rule = [ 'name' => $data['name'], 'web_id' => $data['web_id'], 'first_url' => $data['first_url'], 'parameter' => $data['second_start'], 'start' => $data['second_num'], 'title' => $data['second_end'], 'content' => $data['start'] ]; // var_dump("============2============"); break; default: $rule = [ 'name' => $data['name'], 'web_id' => $data['web_id'], 'diy_rule' => $data['diy_rule'] ]; // var_dump("============3============"); break; } if(isset($data['source']) && $data['type'] != 3){ $rule ['source'] = $data['source']; } if(isset($data['writer_class']) && $data['type'] != 3){ $rule ['writer_class'] = $data['writer_class']; } if(isset($data['writer']) && $data['type'] != 3){ $rule ['writer'] = $data['writer']; } date_default_timezone_set('Asia/Shanghai'); //若不存在,根据网站类型添加到不行类型的规则表中 $result = Rule::insertGetId($rule); }else{ return Result::error('此任务已存在!'); } } return Result::success($result); } /** * 获取并搜索规则任务 * @param array $data * @return array|mixed */ public function getRule(array $data): array { $web = Web::where('id',$data['web_id'])->get(); if(empty($web->toArray())){ return Result::error('请输入正确的网站id!'); }else{ $where = [ ['web_id','=', $data['web_id']] ]; if(isset($data['keyWord'])){ //若存在搜索词,则存到条件数组$where中 $where = [ ['name','like','%'.$data['keyWord'].'%'] ]; } $rep = Rule::withCount(relations:'arts')->where($where)->limit($data['pageSize'])->orderBy("created_at","desc")->offset(($data['page']-1)*$data['pageSize'])->get(); $count = Rule::where($where)->count(); if($count==0){ return Result::error('暂无相关规则任务!'); } } $data = [ 'rep' => $rep->toArray(), 'count' => $count ]; return Result::success($data); } /** * 获取某个任务规则 * @param array $data * @return array|mixed */ public function getOneRule(array $data): array { $result = Rule::where('id',$data['id'])->first(); if(empty($result)){ return Result::error('请输入正确的规则任务id!'); }else{ return Result::success($result); } } /** * 修改规则任务 * @param array $data * @return array|mixed */ public function upRule(array $data): array { $rule = Rule::where('id',$data['id'])->first(); if(empty($rule)){ return Result::error('请输入正确的规则任务id!'); }else{ $rulename = Rule::where('name',$data['name'])->first(); if(empty($rulename)){ $result = Rule::where('id',$data['id'])->update($data); }else{ return Result::error('此任务名称已存在!'); } } return Result::success($result); } /** * 删除规则任务 * @param array $data * @return array */ public function delRule(array $data): array { $where = ['id' => $data['rule_id']]; $rule = Rule::where($where)->first(); if(empty($rule)){ return Result::error('请输入正确的规则任务id!'); }else{ //查找是否存在已导入的文章 $art_num = Article::where('rule_id',$data['rule'])->where('state',1)->count(); if($art_num==0){ //查找是否存在已采集但是未导入的文章 $colart_num = Article::where('rule_id',$data['rule'])->where('state',0)->count(); if($colart_num==0){ $result['rule'] = Rule::where($where)->delete(); }else{ try { Db::beginTransaction(); //若有已采集但未导入的文章,删除规则任务及相应的未导入的文章 $result['rule'] = Rule::where($where)->delete(); $result['art'] = Article::where('rule_id',$data['id'])->delete(); Db::commit(); } catch(\Throwable $ex){ Db::rollBack(); var_dump($ex->getMessage()); return Result::error("删除失败",0); } } }else{ return Result::error('此规则任务下的文章已导入,不可删除!'); } } return Result::success($result); } /** * 开始采集 * @param array $data * @return array */ public function sendCrawler(array $data): array { $result = Article::get(); $b = OldArticle::get(); $a = [ 'old'=>$b, 'new'=>$result ]; return Result::success($a); } /** * 获取并搜索资讯 * @param array $data * @return array */ public function getInfo(array $data): array { $where = [ ['rule_id','=',$data['rule_id']] ]; //若存在条件参数都存到where数组 if(isset($data['title'])){ $where[] = ['title','like','%'.$data['title'].'%']; } if(isset($data['source'])){ $art_source = Article::where($where)->get(); if(!empty($art_source->toArray())){ $where[] = ['source','=',$data['source']]; } } if(isset($data['state'])){ $where[] = ['state','=',$data['state']]; } //跨库查询栏目导航及采集的新闻 $info = Article::query() ->where($where) ->with(['category' => function ($query) { $query->select('name'); }]) ->orderBy("article.id","desc") ->limit($data['pageSize']) ->offset(($data['page']-1)*$data['pageSize'])->get(); $count = Article::where($where)->count(); if($count == 0){ return Result::error('暂无资讯'); } $data = [ 'rep' => $info->toArray(), 'count' => $count ]; return Result::success($data); } /** * 获取某个资讯 * @param array $data * @return array */ public function getOneInfo(array $data): array { $where = ['id' => $data['art_id']]; $inf = Article::where($where)->first(); $info = Article::where($where) ->leftJoin('article_data','article_id','id') ->select('article.*','article_data.content') ->first(); if($inf['catid']!=null){ $category = Category::where(['id'=>$info['catid']])->select('name')->first(); $info['category'] = $category['name']; } if(empty($info)){ return Result::error('请输入正确的资讯id!'); } return Result::success($info); } /** * 修改资讯 * @param array $data * @return array */ public function upInfo(array $data): array { $id = $data['art_id']; $content = $data['content']; unset($data['art_id']); //去掉此元素 unset($data['content']); //去掉此元素 $info = Article::where('id',$id)->first(); if($info['state']==1){ return Result::error('此文章已导入 ,不可编辑!'); }else{ Db::beginTransaction(); try{ $info = Article::where('id',$id)->update($data); $art_data = ArticleData::where('article_id',$id)->update(['content'=>$content]); Db::commit(); } catch(\Throwable $ex){ Db::rollBack(); var_dump($ex->getMessage()); return Result::error("修改失败",0); } $data = [ 'info' => $info, 'art_data' => $art_data ]; return Result::success($data); } } /** * 删除资讯 * @param array $data * @return array */ public function delInfo(array $data): array { $id = $data['art_id']; $info = Article::where('id',$id)->first(); if($info['state']==1){ return Result::error('此文章已导入,不可删除!'); }else{ Db::beginTransaction(); try{ $delinfo = Article::where('id',$id)->delete(); $deldata = ArticleData::where('article_id',$id)->delete(); Db::commit(); } catch(\Throwable $ex){ Db::rollBack(); var_dump($ex->getMessage()); return Result::error("删除失败",0); } } $data = [ 'delinfo' => $delinfo, 'deldata' => $deldata ]; return Result::success($data); } /** * 关联导航池 * @param array $data * @return array */ public function addCatid(array $data): array { $id = $data['rule_id']; //查找此规则任务下的文章是否都已经导入 $info = Article::where('rule_id',$id)->where('state',0)->select('id')->get(); if(empty($info->toArray())){ return Result::error('所有文章都已导入,不可修改关联的导航池!'); }else{ //查找此规则任务下的文章是否已经有导入的文章 $article = Article::where('rule_id',$id)->where('state',1)->select('id')->get(); if(!empty($article->toArray())){ //若有已导入的文章则直接复制之前已导入的导航池 $catid = Article::whereIn('id',$article)->select('catid')->first(); //若未导入的文章已经复制之前的导航,则无需修改 $art_catid = Article::whereIn('id',$info)->whereNull('catid')->count(); if($art_catid>0){ $result = Article::whereIn('id',$info)->update(['catid'=>$catid['catid']]); }else{ $result = ['已全部关联导航,无需导入!']; } }else{ //若不存在已导入的文章则判断是否存在导航id if(isset($data['catid'])){ //若存在直接使用此导航id $result = Article::whereIn('id',$info)->update(['catid'=>$data['catid']]); }else{ //若不存在则返回所有导航栏目 $result = Category::select('id','name')->get(); } } } return Result::success($result); } /** * 导入文章 * @param array $data * @return array */ public function addArt(array $data): array { // var_dump("======@@@===="); $where = [ 'rule_id' => $data['rule_id'], 'state' => 0 ]; //获取某个规则任务下的已采集未导入的文章及文章详情 $arts_id = Article::where($where)->wherenotNull('catid')->orderBy('id')->select('id')->get(); $arts = Article::where($where)->wherenotNull('catid')->select('title','catid','level','introduce','keyword','author','copyfrom','fromurl','hits','islink','imgurl','admin_user_id','is_original')->orderBy('id')->get()->toArray(); $arts_data = ArticleData::whereIn('article_id',$arts_id)->select('content')->orderBy('article_id')->get()->toArray(); // var_dump($article_data); $data = [ 'articles' => $arts, 'art_content' => $arts_data ]; Db::beginTransaction(); try{ $oldart = OldArticle::insert($arts); $oldart_data = OldArticleData::insert($arts_data); $upstate_art = Article::where($where)->wherenotNull('catid')->update(['state' => 1]); Db::commit(); } catch(\Throwable $ex){ Db::rollBack(); var_dump($ex->getMessage()); return Result::error($ex->getMessage(),0); } return Result::success($data); } }