123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375 |
- <?php
- namespace app\api\controller;
- use app\common\model\ActivityApply;
- use app\common\model\ActivityApplyItem;
- use app\common\model\ActivityPrice;
- use app\common\model\ArticleItem;
- use app\common\model\DatumUrl;
- use app\common\model\GoodsOrder;
- use app\common\model\GoodsOrderItem;
- use app\common\model\LabelMessage;
- use app\common\model\StoreGoodsItem;
- use app\common\model\TopSearch;
- use app\common\model\User;
- use app\common\model\UserFacility;
- use app\common\model\UserMessage;
- use app\common\model\UserSearch;
- use app\common\model\VideoUrl;
- use app\common\service\UserSynth;
- use think\Db;
- /**
- * @title 定时任务
- * Class Task
- * @controller Task
- * @group base
- */
- class Task extends Base
- {
- /**
- * @title 标签推送[根据标签id]
- * @desc 标签推送
- * @author qc
- * @url /api/Task/taskUserMessage
- */
- public function taskUserMessage(){
- $list = UserMessage::field('id,user_id,content')->where('jg_type',1)->where('jg_status',0)->limit(0,50)->order('id')->select();
- foreach ($list as $v) {
- UserMessage::where(['id'=>$v['id']])->update(['jg_status'=>1]);
- UserMessage::Jpush($v['user_id'],$v['content']);
- }
- }
- /**
- * @title 标签推送[根据标签id]
- * @desc 标签推送
- * @author qc
- * @url /api/Task/taskLabelMessage
- */
- //按照标签推送
- public function taskLabelMessage()
- {
- $list = LabelMessage::where('jg_status',0)->where('is_deleted',0)->select()->toArray();
- foreach ($list as $v) {
- LabelMessage::where(['id'=>$v['id']])->update(['jg_status'=>1]);
- // 全部推送
- if(!$v['label']) {
- $user_arr = User::where('status',1)->where('is_deleted',0)->column('id');
- foreach ($user_arr as $user_id) {
- if($v['type'] == 2){
- $res = UserMessage::Jpush($user_id,$v['content']);
- }else if($v['type'] == 3) {
- if(in_array($v['module'],['video','article','datum'])) {
- $res = UserMessage::Jpush($user_id,$v['content'],$v['module'],'',$v['first_id'],$v['second_id']);
- }else{
- $res = UserMessage::Jpush($user_id,$v['content'],$v['module'],'',$v['first_id']);
- }
- }
- }
- }else{
- // 搜索内容推送
- $label_arr = explode(',',$v['label']);
- $where_str = '';
- $search_arr=[];
- foreach ($label_arr as $t){
- $search_arr[] = " title like '".'%'.$t."%'" .' ';
- }
- if(!empty($search_arr)) $where_str = implode(' OR ',$search_arr);
- $user_arr = UserSearch::where($where_str)->column('user_id');
- foreach (array_unique($user_arr) as $user_id) {
- if($v['type'] == 2){
- $res = UserMessage::Jpush($user_id,$v['content']);
- }else if($v['type'] == 3) {
- if(in_array($v['module'],['video','article','datum'])) {
- $res = UserMessage::Jpush($user_id,$v['content'],$v['module'],'',$v['first_id'],$v['second_id']);
- }else{
- $res = UserMessage::Jpush($user_id,$v['content'],$v['module'],'',$v['first_id']);
- }
- }
- }
- }
- }
- }
- /**
- * @title 半年清理一次设备号
- * @desc
- * @author qc
- * @url /api/Task/removeFacility
- */
- public function removeFacility(){
- UserFacility::where(['set_time','< time',date('Y-m-d H:i:s',strtotime('-180 days'))])->update(['facility'=>'','set_time'=>date('Y-m-d H:i:s')]);
- }
- /**
- * @title 定时取消活动订单
- * @desc
- * @author qc
- * @url /api/Task/cancelApplyOrder
- */
- public function cancelApplyOrder()
- {
- $list = ActivityApply::with(['itemList'])
- ->where([['create_at','< time',date('Y-m-d H:i:s',strtotime('-5 minutes'))],['pay_type','<>',9],['pay_state','=',0],['cancel_state','=',0]])
- ->select()->toArray();
- foreach ($list as $v) {
- Db::startTrans();
- try {
- ActivityApply::where('id',$v['id'])->update(['cancel_state'=>1]);
- $act_title = \app\common\model\Activity::where('id',$v['act_id'])->value('title');
- $info_url = 'https://'.$_SERVER['HTTP_HOST'].'/dist/#/activity_order_info?id='.$v['id'];
- $message = '您报名的《'.$act_title."》活动订单,由于超时未支付,已为您取消";//,点击<a href=\"$info_url\">查看详情</a>";
- UserMessage::sendUserMessage($v['user_id'],'apply',4,0,0,$v['id'],$message,$v['id']);
- foreach ($v['item_list'] as $it) {
- ActivityPrice::where('id',$it['price_id'])->setInc('stock',$it['num']);
- }
- Db::commit();
- }catch (\Exception $e) {
- Db::rollback();
- }
- }
- }
- /**
- * @title 定时取消商城订单
- * @desc
- * @author qc
- * @url /api/Task/cancelGoodsOrder
- */
- public function cancelGoodsOrder()
- {
- $list = GoodsOrder::with(['orderItem'])
- ->where([['create_at','< time',date('Y-m-d H:i:s',strtotime('-1 day'))],['status','=',0],['pay_state','=',0],['cancel_state','=',0]])
- ->select()->toArray();
- // return json($list);
- $num = 0;
- foreach ($list as $v) {
- $order_id = $v['id'];
- Db::startTrans();
- try {
- $detail = $v;
- if($detail['status'] != 0) $this->exception('订单状态有误');
- // 取消订单状态
- GoodsOrder::update(['status'=>9,'cancel_state'=>1],['id'=>$order_id]);
- // 订单处理
- foreach ($detail['order_item'] as $item_info) {
- // 更改订单详情状态
- GoodsOrderItem::update(['status'=>9],['id'=>$item_info['id']]);
- StoreGoodsItem::stockChange($item_info['spec_id'],$item_info['goods_id'],$item_info['num']);
- }
- Db::commit();
- }catch (\Exception $e){
- $this->ret_msg = $e->getMessage();
- $this->is_commit = false;
- Db::rollback();
- }
- $num++;
- }
- $this->success('取消'.$num.'条订单');
- }
- /**
- * @title 定时自动收货
- * @desc
- * @author qc
- * @url /api/Task/confirmGoodsOrder
- */
- public function confirmGoodsOrder(){
- //express_send_at 发货时间
- $list = GoodsOrder::where([['pay_state','=',1],['status','=',2],['express_send_at','< time',date('Y-m-d H:i:s',strtotime('-2 days'))]])
- ->select()->toArray();
- foreach ($list as $detail) {
- Db::startTrans();
- try {
- $order_id = $detail['id'];
- // $detail = GoodsOrder::where('id',$order_id)->find()->toArray();
- if($detail['status'] == 0) $this->error('订单未支付');
- if($detail['status'] == 1) $this->error('订单未发货');
- if($detail['status'] == 3) $this->error('订单已收货');
- GoodsOrder::update(['status'=>3,'express_state'=>2],['id'=>$order_id]);
- GoodsOrderItem::update(['status'=>3,'express_state'=>2],['order_id'=>$order_id]);
- UserMessage::create(['user_id'=>$detail['user_id'],'type_id'=>3,'relation_id'=>$order_id,'content'=>'订单收货成功']);
- Db::commit();
- }catch (\Exception $e) {
- Db::rollback();
- }
- }
- $this->success('执行成功');
- }
- /**
- * @title 活动报名定时提醒
- * @desc
- * @author qc
- * @url /api/Task/activityReminder
- */
- public function activityReminder()
- {
- $where = [];
- $where[] = ['task_send','=',0];
- $where[] = ['start_time','> time',date('Y-m-d H:i:s',strtotime('-24 hours'))];
- $where[] = ['status','=',1];
- $where[] = ['is_deleted','=',0];
- $list = \app\common\model\Activity::where($where)->select()->toArray();
- foreach ($list as $act_info)
- {
- \app\common\model\Activity::where(['id'=>$act_info['id']])->update(['task_send'=>1]);
- $ticket_list = ActivityApplyItem::where(['act_id'=>$act_info['id'],'sh_status'=>1,'is_hx'=>0])->select();
- foreach ($ticket_list as $v) {
- // 短信通知
- if($v['phone_pre'] == '86' && $v['phone']) UserSynth::phoneMessageSend($v['phone'],0,['ActivityName'=>$act_info['title'], 'time'=>$act_info['start_time'], 'adress'=>$act_info['address']]);
- }
- }
- }
- /**
- * @title 热搜定时
- * @desc
- * @author qc
- * @url /api/Task/topSearchTask
- */
- public function topSearchTask()
- {
- $where[] = ['hot_time','< time',date('Y-m-d H:i:s',strtotime('-7 days'))];
- // 视频
- $list = VideoUrl::where($where)->column('id');
- array_walk($list,function ($v){
- VideoUrl::where('id',$v)->update(['hot_time'=>date('Y-m-d H:i:s'),'hot_num'=>0]);
- TopSearch::saveData($v,'video');
- });
- // 图文
- $list = ArticleItem::where($where)->column('id');
- array_walk($list,function ($v){
- ArticleItem::where('id',$v)->update(['hot_time'=>date('Y-m-d H:i:s'),'hot_num'=>0]);
- TopSearch::saveData($v,'article');
- });
- // 资料
- $list = DatumUrl::where($where)->column('id');
- array_walk($list,function ($v){
- DatumUrl::where('id',$v)->update(['hot_time'=>date('Y-m-d H:i:s'),'hot_num'=>0]);
- TopSearch::saveData($v,'datum');
- });
- // 活动
- $list = \app\common\model\Activity::where($where)->column('id');
- array_walk($list,function ($v){
- \app\common\model\Activity::where('id',$v)->update(['hot_time'=>date('Y-m-d H:i:s'),'hot_num'=>0]);
- TopSearch::saveData($v,'activity');
- });
- // 需求
- $list = \app\common\model\PlatformDemand::where($where)->column('id');
- array_walk($list,function ($v){
- \app\common\model\PlatformDemand::where('id',$v)->update(['hot_time'=>date('Y-m-d H:i:s'),'hot_num'=>0]);
- TopSearch::saveData($v,'demand');
- });
- // 新闻
- $list = \app\common\model\Press::where($where)->column('id');
- array_walk($list,function ($v){
- \app\common\model\Press::where('id',$v)->update(['hot_time'=>date('Y-m-d H:i:s'),'hot_num'=>0]);
- TopSearch::saveData($v,'press');
- });
- // 问答
- $list = \app\common\model\UserForum::where($where)->column('id');
- array_walk($list,function ($v){
- \app\common\model\UserForum::where('id',$v)->update(['hot_time'=>date('Y-m-d H:i:s'),'hot_num'=>0]);
- TopSearch::saveData($v,'forum');
- });
- // 招聘
- $list = \app\common\model\Recruit::where($where)->column('id');
- array_walk($list,function ($v){
- \app\common\model\Recruit::where('id',$v)->update(['hot_time'=>date('Y-m-d H:i:s'),'hot_num'=>0]);
- TopSearch::saveData($v,'recruit');
- });
- // 供应商
- $list = \app\common\model\SupplierGoods::where($where)->column('id');
- array_walk($list,function ($v){
- \app\common\model\SupplierGoods::where('id',$v)->update(['hot_time'=>date('Y-m-d H:i:s'),'hot_num'=>0]);
- TopSearch::saveData($v,'supplier_goods');
- });
- // 商品
- $list = \app\common\model\StoreGoods::where($where)->column('id');
- array_walk($list,function ($v){
- \app\common\model\StoreGoods::where('id',$v)->update(['hot_time'=>date('Y-m-d H:i:s'),'hot_num'=>0]);
- TopSearch::saveData($v,'goods');
- });
- $this->success('执行成功');
- }
- /**
- * @title 热搜定时1
- * @desc
- * @author qc
- * @url /api/Task/emptyTopSearchTask
- */
- public function emptyTopSearchTask()
- {
- //热搜规则
- //根据后台输入的热搜阅读量排序
- //每10分钟前端更新一次
- //后台热搜阅读量每天晚上的23:59点,清楚7天前的那一天所有新增的内容的热搜阅读量
- //如:
- //2023年11月5日,新增了2篇文章,1个视频(不关心是几点新增的)
- //2023年11月12日,晚上23:59,将新增的2篇文章跟1个视频的热搜阅读清0
- //热搜阅读量可以手动更改,每次有用户点击时,热搜阅读量也增加1
- //top_search hot_num
- $start_time = date('Y-m-d 00:00:00',strtotime('-7 days'));
- $end_time = date('Y-m-d 23:59:59',strtotime('-7 days'));
- // return $start_time.'---'.$end_time;
- $where[] = ['create_at','> time',$start_time];
- $where[] = ['create_at','< time',$end_time];
- $list = TopSearch::where($where)->column('id');
- return json($list);
- TopSearch::where($where)->update(['hot_num'=>0]);
- // foreach ($list as $k => $v){
- // TopSearch::where('id',$v)->update(['hot_num'=>0]);
- // }
- $this->success('执行成功');
- }
- /**
- * @title 定时取消商城订单
- * @desc
- * @author qc
- * @url /api/Task/cancelStoreGoods
- */
- public function cancelStoreGoods()
- {
- $list = GoodsOrder::with(['orderItem','orderRefund'])
- ->where([['pay_state','=',0],['status','=',0],['create_at','< time',date('Y-m-d H:i:s',strtotime('-1 days'))]])
- ->select()->toArray();
- foreach ($list as $detail) {
- // 取消订单状态
- GoodsOrder::update(['status'=>9,'cancel_state'=>1],['id'=>$detail['id']]);
- // 订单处理
- foreach ($detail['order_item'] as $item_info) {
- // 更改订单详情状态
- GoodsOrderItem::update(['status'=>9],['id'=>$item_info['id']]);
- StoreGoodsItem::stockChange($item_info['spec_id'],$item_info['goods_id'],$item_info['num']);
- }
- }
- $this->success('执行成功');
- }
- }
|