'DESC']; if($sort) $order = ['sort'=>$sort]; else if($orders == 'new') $order = ['create_time'=>'DESC'];// 最新 else if($orders == 'recommend') $order = ['sort'=>'DESC','create_time'=>'DESC'];// 推荐 else if($orders == 'hot') $order = ['read_num'=>'DESC','create_time'=>'DESC'];// 热门 else if($orders == 'fabulous') $order = ['dianzan_num'=>'ASC','create_time'=>'DESC'];// 点赞 // 列表获取 $field = [ 'article_id', 'article_title', 'category_id', 'status', 'sort', 'create_time', 'update_time', 'article_abstract', 'cover_img', 'is_show_release_time', 'is_show_read_num', 'is_show_dianzan_num', "(read_num + initial_read_num) as read_num", "(dianzan_num + initial_dianzan_num) as dianzan_num", ]; $result = $this ->field($field) ->where('site_id',$this->site_id) ->when($status >= 0,function($query) use ($status){ $query->where('status','=',$status); }) ->when(strlen($searchText) > 0,function($query) use ($searchText){ $query->where('article_title','like',"%{$searchText}%"); }) ->when($ids,function($query) use ($ids){ $query->where('article_id','in',explode(',',$ids)); }) ->when($cateIds,function($query) use ($cateIds){ $query->where('category_id','in',explode(',',$cateIds)); }) ->when($isRand,function($query){ $query->orderRaw('rand()'); },function($query) use ($order){ $query->order($order); }) ->paginate(['list_rows' => $pageSize,'page' => $page]); if($result) { $result = $result->toArray(); $categoryIds = array_column($result['data'],'category_id'); $cateList = (new ArticleCategory())->getListCateList($categoryIds); foreach($result['data'] as &$item){ $item['category_name'] = $cateList[$item['category_id']]; } } $list = [ 'count' => $result['total'], 'list' => $result['data'], 'page_count' => $result['last_page'], ]; return $this->success($list); } /** * Common: 编辑信息 * Author: wu-hui * Time: 2022/11/07 16:47 * @param $info * @return array */ public function editInfo($info){ // 添加文章的操作 $this->startTrans(); try{ // 判断是添加还是修改 if((int)$info[$this->pk] > 0) { self::update($info, [$this->pk => $info[$this->pk]]);// 修改内容 }else { $res = self::create($info); if($info['status'] == 1) $this->messageRecord($info,$res->article_id); } $this->commit(); //清除缓存 CaChe::del('article_list'); return $this->success(); }catch(\Exception $e){ $this->rollback(); return $this->error('',$e->getMessage()); } } /** * Common: 删除信息 * Author: wu-hui * Time: 2022/11/07 16:44 * @param $id * @return array */ public function delInfo($id){ //清除缓存 CaChe::del('article_list'); //编辑信息 return parent::delInfo($id); } /** * Common: 添加模板消息通知 * Author: wu-hui * Time: 2022/11/10 15:01 * @param $info * @param $articleId * @return int * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function messageRecord($info,$articleId){ // 获取所有存在openid 的用户 $list = Db::name('member') ->field('member_id,nickname,wx_openid') ->where('site_id','=',$info['site_id']) ->where('wx_openid','<>','') ->select(); $insert = []; foreach($list as $item){ $insert[] = [ 'member_id' => $item['member_id'], 'nickname' => $item['nickname'], 'wx_openid' => $item['wx_openid'], 'article_id' => $articleId, 'article_title' => $info['article_title'], 'create_time' => time(), ]; } Db::name('article_message')->insertAll($insert); // 开启计划任务 $cronWhere = [ 'event' => 'HandleArticleMessage', ]; $cronId = model('cron')->getValue($cronWhere,'id'); if($cronId <= 0) (new Cron())->addCron(2, 5, "处理文章通知消息", "HandleArticleMessage", time(),0); } /** * Common: 发送模板消息通知 * Author: wu-hui * Time: 2022/11/10 18:46 * @throws \think\db\exception\DbException */ public function sendMessage(){ Log::write("文章消息通知 - 开始"); // 基本信息 $messageTemplate = Model('message_template')->getValue([['keywords','=','ARTICLE_MESSAGE']],'wechat_json'); $data["site_id"] = (int)request()->siteid(); $data["message_info"] = Model('message')->getInfo([['keywords','=','ARTICLE_MESSAGE']]); $data["message_info"]['wechat_json'] = $messageTemplate; // 获取列表 $list = Db::name('article_message') ->order('id','ASC') ->limit(30) ->select(); if($list) $list = $list->toArray(); $successIds = []; foreach($list as $item){ $data["openid"] = $item['wx_openid']; $data["template_data"] = [ 'keyword1' => $item['article_title'], 'keyword2' => '成功发布', 'keyword3' => date('Y-m-d H:i:s',$item['create_time']), ]; $data["page"] = '#/pages_aijiu/article/detail?article_id='.$item['article_id']; $res = (new \addon\wechat\model\Message())->sendMessage($data); ///if($res['code'] === 0) $successIds[] = $item['id']; $successIds[] = $item['id'];// 由于积累问题 每次通知只会发布一次,无论成功失败 然后删除 } Log::debug("文章消息通知 - 删除",$successIds); if(count($successIds) > 0) Db::name('article_message')->where([['id','in',$successIds]])->delete(); Log::debug("文章消息通知 - 结束",$successIds); } }