123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453 |
- <?php
- namespace App\JsonRpc;
- use App\Model\OldModel\Article as OldArticle;
- use App\Model\OldModel\ArticleData as OldArticleData;
- use App\Model\OldModel\Category;
- use App\Model\Article;
- use App\Model\Web;
- use App\Model\Rule;
- use App\Model\ArticleData;
- use Hyperf\DbConnection\Db;
- use Hyperf\RpcServer\Annotation\RpcService;
- use App\Tools\Result;
- use function Hyperf\Support\retry;
- #[RpcService(name: "CollectorService", protocol: "jsonrpc-http", server: "jsonrpc-http")]
- class CollectorService implements CollectorServiceInterface
- {
- /**
- * 添加网站
- * @param array $data
- * @return array|mixed
- */
- public function addWeb(array $data): array
- {
- $where = [
- 'name' => $data['name']
- ];
- $isweb = Web::where($where)->first();
- if(empty($isweb)){
- date_default_timezone_set('Asia/Shanghai');
- $time = time();
- $catetime = date('Y-m-d H:i:s', $time);
- $data['created_at'] = $catetime;
- $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->toArray())){
- return Result::error('请输入正确的网站id!');
-
- }else{
- $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->toArray())){
- return Result::error('请输入正确的网站id!');
-
- }else{
- $id = Web::where('id',$data['id'])->delete();
- if(empty($id)){
- return Result::error('无法删除!');
- }
- }
- return Result::success($id);
- }
- /**
- * 添加规则任务
- * @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())){
- date_default_timezone_set('Asia/Shanghai');
- $time = time();
- $catetime = date('Y-m-d H:i:s', $time);
- $data['created_at'] = $catetime;
- $id = Rule::insertGetId($data);
- $result = ['data' => $id];
- }else{
- return Result::error('此任务已存在!');
- }
- }
-
- return Result::success($result['data']);
- }
- /**
- * 获取并搜索规则任务
- * @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{
- if(isset($data['keyWord'])){
- $where = [
- ['name','like','%'.$data['keyWord'].'%'],
- ['web_id','=', $data['web_id']]
- ];
- $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('未查找到相关网站!');
- }
- }else{
- $rep = Rule::withCount(relations:'arts')->where('web_id',$data['web_id'])->limit($data['pageSize'])->orderBy("created_at","desc")->offset(($data['page']-1)*$data['pageSize'])->get();
- $count = Rule::where('web_id',$data['web_id'])->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{
- $delrule = Rule::where($where)->delete();
- if(empty($delrule)){
- return Result::error('此规则任务删除失败!');
- }
- }
- return Result::success($delrule);
- }
- /**
- * 开始采集
- * @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
- {
- $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();
- Db::beginTransaction();
- try{
- $arts_data = ArticleData::whereIn('article_id',$arts_id)->select('content')->orderBy('article_id')->get()->toArray();
- $oldart = OldArticle::insert($arts);
- $oldart_data = OldArticleData::insert($arts_data);
- Db::commit();
- } catch(\Throwable $ex){
- Db::rollBack();
- var_dump($ex->getMessage());
- return Result::error($ex->getMessage(),0);
- }
- // var_dump($article_data);
- $data = [
- 'rep' => $oldart,
- 'content' => $oldart_data
- ];
- return Result::success($data);
- }
- }
|