db()->field($field)->whereNull('expire_time')->select()->toArray(); // print_r($data);die; if ($data) { foreach ($data as $key => $value) { $value['param'] = json_decode($value['param'], true); if(!isset($value['param']['expireTime'] )){ continue; } // $timeout = $value['param']['expireTime']; $timeout = date('Y-m-d H:i:s', intval($value['param']['expireTime'] / 1000)); $where = array('order_id' => $value['order_id']); $data = array('expire_time' => $timeout); $orderService->db()->where($where)->update($data); // print_r($data);die; // array_push($redisData,$orders[$key]['account']); } } return 'ok'; } public function timeout_order() { #发送群聊消息 $url = 'send_group_msg'; # $param = array(); #TODO 从数据库中获取 $param['group_id'] = '885760890';#群组号 $needField = ['account']; $atqq = '389839316';#需要艾特的qq $time = '6'; #超时拦截时间 // $get_timeout_order = $this->transOrder($time); // $get_timeout_order = $this->transOrder(); if (!$get_timeout_order) { // Log::write('robot', 'qqbot', '无'); // Log::write($key, $name, $content) die; } $param['message'] = "[CQ:at,qq=" . $atqq . "] 以下为超过42小时订单 \r " . $get_timeout_order; $send = $this->send($url, $param); Log::write('robot', 'qqbot', $send); return $send; } /** *$params:发给的机器人字段数组格式;$type=true判断是否在缓存中,false不判断全部返回 * */ public function transOrder($time){ $this->redis(); $where=[['status','=',4],['cid','=','2'],['expire_time','<=',date('Y-m-d H:i:s',time()+$time*60*60)]]; $field = "order_id,account";//需要数据库返回的字段 $orders = $this->getNeedOrder($where, $field); $redisData=[]; if($orders){ foreach($orders as $key=>$value){ if(!$this->redis->get('rediskey-'.$orders[$key]['order_id'])){ array_push($redisData,$orders[$key]['account']); $this->redis->set('rediskey-'.$orders[$key]['order_id'],'1',30*60); } if(!$this->redis->get('rediskey-1H-'.$orders[$key]['order_id']) && $time == '1'){ array_push($redisData,$orders[$key]['account']); $this->redis->set('rediskey-1H-'.$orders[$key]['order_id'],'1',30*60); } if(!$this->redis->get('rediskey-TOP-'.$orders[$key]['order_id']) && $time == '0.5'){ array_push($redisData,$orders[$key]['order_id']); $this->redis->set('rediskey-TOP-'.$orders[$key]['order_id'],'1',30*60); } } } return $redisData ? implode("\n", $redisData) : ''; } protected function redis() { if (!$this->redis) { $this->redis = RedisService::getInstance(); } } /** * @return array|bool */ public function getNeedOrder($where,$field) { $orderService = OrderService::instance(); $data = $orderService->db()->field($field)->where($where)->select()->toArray(); return $data; } /** * */ public function send($url, $param) { $geturl = 'http://127.0.0.1:7374/' . $url; $header['Content-Type'] = 'application/x-www-form-urlencoded'; return $this->curl('post', $geturl, http_build_query($param), false, $header); } // public function timeout_order() // { // #发送群聊消息 // $url = 'send_group_msg'; // // # // $param = array(); // $param['group_id'] = '248553382';#群组号 // $needField = ['account']; // // $atqq = '389839316';#需要艾特的qq // $time = '6'; #超时拦截时间 // // $get_timeout_order = $this->transOrder($time); // // // if(!$get_timeout_order){ //// Log::write('robot', 'qqbot', '无'); //// Log::write($key, $name, $content) // die; // } // // // // $param['message'] = "[CQ:at,qq=".$atqq."] 以下为超过42小时订单 \r ".$get_timeout_order; // // // $send = $this->send($url, $param); // // // Log::write('robot', 'qqbot', $send); // // return $send; // // // } public function timeout_order1() { #发送群聊消息 $url = 'send_group_msg'; # $param = array(); $param['group_id'] = '248553382';#群组号 $needField = ['account']; $atqq = '389839316';#需要艾特的qq $time = '1'; #超时拦截时间 $atqq1 = '530979976';#需要艾特的qq1 $get_timeout_order = $this->transOrder($time); if(!$get_timeout_order){ // Log::write('robot', 'qqbot', '无'); // Log::write($key, $name, $content) die; } $param['message'] = "[CQ:at,qq=".$atqq."][CQ:at,qq=".$atqq1."] 以下为1小时内超时订单,请第一时间处理 \r ".$get_timeout_order; $send = $this->send($url, $param); Log::write('robot', 'qqbot', $send); return $send; } public function timeout_order2() { #发送群聊消息 $url = 'send_group_msg'; # $param = array(); $param['group_id'] = '248553382';#群组号 $needField = ['account']; $atqq = '389839316';#需要艾特的qq $time = '0.5'; #超时拦截时间 $atqq1 = '530979976';#需要艾特的qq1 $atqq2 = '1438565523';#技术核实 $get_timeout_order = $this->transOrder($time); // $get_timeout_order ='测试'; if(!$get_timeout_order){ // Log::write('robot', 'qqbot', '无'); // Log::write($key, $name, $content) die; } $param['message'] = "[CQ:at,qq=".$atqq."][CQ:at,qq=".$atqq1."][CQ:at,qq=".$atqq2."] 以下为半小时内超时订单,异常订单,请核实 \r ".$get_timeout_order; $send = $this->send($url, $param); Log::write('robot', 'qqbot', $send); return $send; } #回调消息处理 public function notify() { $input = input(); Log::write('robot', 'qqbot', $input); var_dump($input); die; if (isset($input['group_id']) && $input['group_id'] = '300904161' && isset($input['message']['0']['data']['qq']) && $input['message']['0']['qq'] = '3093978570') { $sju = $input['message']['1']['data']['text']; if (strlen($phone) != 11) { return false; } if (preg_match("/^1[3456789]{1}[0-9]{9}$/", $phone)) { return true; } else { return false; } $reply = array( 'reply' => '已经登记拦截' ); // print_r(json_encode($ksorderfk));exit; throw new HttpResponseException(json($reply)); } } #手机状态监控 public function phoneInfo() { #发送群聊消息 $url = 'get_device_battery'; # $param = array(); $send = $this->send($url, $param); $data = json_decode($send, true); if ($data['status'] == 'ok') { #更新电池状态 #TODO if ($data['data']['battery'] <= '20') { #判断如果电池电量小于20,则发送钉钉机器人提醒。 } } else { #状态不为ok,发送钉钉机器人预警,并且记录日志 } return 'ok'; } public function msg() { $input = input(); // throw new HttpResponseException(json($input)); // $msg = explode(' ',$input['content']); // var_dump($msg);die; // Log::write('robot', 'qqbot_gf', $input); $data = []; if(empty($input['group_openid'])){ $data['code'] = '-1'; $data['msg'] ='不存在群组'; throw new HttpResponseException(json($data)); } Log::write('robot', 'qqbot_gf', $input); // die; if($input['group_openid'] != '31E0BF28DE768188138E82A3C9CB8E86'){ #判断群组是否正确 $data['code'] = '-2'; $data['msg'] ='群组错误'; throw new HttpResponseException(json($data)); } $msg = explode(' ',$input['content']); Log::write('robot', 'qqbot_gf', $msg); if(empty($msg)){ $data['code'] = '-3'; $data['msg'] ='消息错误'; throw new HttpResponseException(json($data)); } if(isset($msg[0]) && $msg[0] == '/申请拦截' ){ if (preg_match("/^1[3456789]{1}[0-9]{9}$/", $msg[1])) { $where=[['account','=',$msg[1]],['status','=','4']]; $field = "order_id,cid,mid,status";//需要数据库返回的字段 $orderService = OrderService::instance(); $orders = $orderService->db()->field($field)->where($where)->select()->toArray(); $num = '0'; if (!$orders) { $where=['account'=> $msg[1]]; $orderdata = $orderService->db()->field($field)->where($where)->find(); if($orderdata){ if($orderdata['status'] == '2'){ $data['code'] = '1'; #待处理 $data['content'] =$msg[1] .'订单状态为充值成功'; }elseif($orderdata['status'] == '3'){ $data['code'] = '1'; #待处理 $data['content'] =$msg[1] .'订单状态为充值失败,已经退款'; }elseif($orderdata['status'] == '1' || $orderdata['status'] == '-5'){ $orderService2 = Order::instance(); $orderService2->setCallback(1, $orderdata['order_id'],'3'); $data['code'] = '1'; $data['content'] =$msg[1] .'拦截成功,已经自动操作退款'; } }else{ $data['code'] = '1'; $data['content'] =$msg[1] .'未找到需要拦截的订单,请检查手机号码,或者使用查单功能查询是否已处理'; } }else{ $url = 'send_group_msg'; $this->redis(); #发送给对应群聊客服进行拦截处理 $param = array(); foreach($orders as $key=>$value){ $num ++; $ljorder = Db::name('merchant_order_lj')->where('order_id','=', $value['order_id'])->find(); if(!$ljorder){ $ljdata = [ 'mid' => $value['mid'], 'cid' => $value['cid'], 'account' => $msg[1], 'status' => $value['status'], 'order_id' => $value['order_id'] ]; Db::name('merchant_order_lj')->insert($ljdata); } if(!$this->redis->get('rediskey-lj-'.$orders[$key]['order_id'])){ $this->redis->set('rediskey-lj-'.$orders[$key]['order_id'],'1',3*60); } if($value['cid']==6){ $url = 'https://d.reapi.bao111.com/gateway/api.bxtlanjie/order'; if(isset($value['order_id']) && $value['order_id']){ try { #推送到redis队列 $msg = http_post($url, $value); // var_dump($msg); // var_dump($msg); if($msg != 'ok'){ Log::write('gateway', 'failorder_d', $value); }else{ $send=['status'=>'ok'] ; } } catch (\Exception $e) { Log::write('errorTip', 'failorder_d', $e->getMessage()); } } }else{ $chanelGroup = $this->getChanelGroup($value['cid'],$value['mid']); $param['group_id'] = $chanelGroup['group_id'];#群组号 $param['message'] = $chanelGroup['atqq']." 以下为客户申请拦截订单,请及时处理 \r ".$msg[1]; $send = $this->send($url, $param); $send = json_decode($send,true); } // $send = json_decode($send,true); // var_dump($send); } if(isset($send['status']) && $send['status'] == 'ok'){ #记录redis $data['code'] = '1'; #待处理redis QQLJ_x123s5d45 #QQLJ_ $data['content'] =$msg[1] .'共找到'.$num.'个订单状态为处理中,已登记拦截处理并推送至拦截渠道'; }else{ #记录redis $data['code'] = '1'; $data['content'] =$msg[1] .'拦截机器人异常,请联系管理员解决,已登记拦截'; } } #up订单记录为拦截处理中 }else{ $data['code'] = '1'; $data['content'] ='手机号格式错误'; } }elseif(isset($msg[0]) && $msg[0] == '/查询' ){ if (preg_match("/^1[3456789]{1}[0-9]{9}$/", $msg[1])) { // $where=['account','=',$msg[1]]; $ljorder = Db::table('merchant_order_lj')->where('account','=', $msg[1])->findOrEmpty(); // $ljorder = Db::name('merchant_order_lj')->where($where)->find(); // var_dump($ljorder);die; if($ljorder) { if ($ljorder['status'] == '2') { $data['code'] = '1'; #待处理 $data['content'] = $msg[1] . '订单状态为拦截成功'; } elseif ($ljorder['status'] == '3') { $data['code'] = '1'; #待处理 $data['content'] = $msg[1] . '订单状态为拦截失败'; } else{ $data['code'] = '1'; #待处理 $data['content'] = $msg[1] . '订单状态为拦截中,请耐心等待系统拦截'; } }else{ $field = "order_id,cid,mid,status,create_at";//需要数据库返回的字段 $orderService = OrderService::instance(); $where=['account'=> $msg[1]]; $orderdata = $orderService->db()->field($field)->where($where)->find(); if($orderdata){ if($orderdata['status'] == '2'){ $data['code'] = '1'; #待处理 $data['content'] =$msg[1] .'订单状态为充值成功'; }elseif($orderdata['status'] == '3'){ $data['code'] = '1'; #待处理 $data['content'] =$msg[1] .'订单状态为充值失败,已经退款'; }else{ $data['code'] = '1'; #待处理 $data['content'] =$msg[1] .'订单状态为充值处理中,下单时间为'.$orderdata['create_at'].',请耐心等待充值'; } }else{ $data['code'] = '1'; #待处理 $data['content'] =$msg[1] .'手机号未找到对应订单,请核对后查询'; } } }else{ $data['code'] = '1'; $data['content'] ='手机号格式错误'; } } else{ $data['code'] = '-5'; $data['msg'] ='暂不处理'; } throw new HttpResponseException(json($data)); } public function getChanelGroup($cid,$mid) { #暂时写死 $groupInfo = []; if($mid == '2'){ switch ($cid){ case "9": case "10": case "11": case "12": case "2": $groupInfo['atqq'] = '[CQ:at,qq=1063177733][CQ:at,qq=1073227223]'; $groupInfo['group_id'] = '711315002'; break; case "8": $groupInfo['atqq'] = '[CQ:at,qq=2722241686][CQ:at,qq=3388495821]'; $groupInfo['group_id'] = '750803726'; break; case "4": $groupInfo['atqq'] = '[CQ:at,qq=3808468183]'; $groupInfo['group_id'] = '534804625'; break; } } return $groupInfo; } public function queryljstatus(){ } public function kamierror(){ $this->redis(); $kamiserver = Kami91OrderService::instance(); $where1 = [ 'status' => '3' , // 'cid' => '2' // 'product_key' => ['like','%cardbuy%'] ]; $where[] = [ 'product_key','like','%cardbuy%' ]; $ck[] = [ 'response','like','%限购%' ]; $field = "order_id,merchant_order_id,cid";//需要数据库返回的字段 $orderlist = OrderService::instance()->db()->field($field)->where($where1)->where($where)->where($ck)->order('id asc')->select()->toArray(); // var_dump($orderlist);die; $redisData=[]; if($orderlist){ foreach($orderlist as $key=>$value){ if(!$this->redis->get('rediskey-kami-'.$orderlist[$key]['order_id'])){ $qudao = ChannelService::instance()->getInfo($value['cid']); array_push($redisData,$orderlist[$key]['merchant_order_id']); $this->redis->set('rediskey-kami-'.$orderlist[$key]['order_id'],'1',60*60*24); } } } $msg = $redisData ? implode("\n", $redisData) : ''; // var_dump($msg);die; $url = 'send_group_msg'; # $param = array(); #TODO 从数据库中获取 $param['group_id'] = '770225115';#群组号 $atqq = '373103766';#需要艾特的qq $atqq1 = '785557837'; // // $get_timeout_order = $this->transOrder(); if (!$msg) { // Log::write('robot', 'qqbot', '无'); // Log::write($key, $name, $content) die; } $param['message'] = "[CQ:at,qq=" . $atqq . "][CQ:at,qq=" . $atqq1 . "] 众茂卡密出现限购,以下为失败订单,请及时下架 \r " . $msg; $send = $this->send($url, $param); Log::write('robot', 'qqbot', $send); return $send; } }