model = new OrderModel; $this->applet_id = $applet_id; } /** * 监听事件 */ public function listen() { //判断是否获取到”task_space_order“ if (!Cache::get('event_space_order')) { $config = Setting::getItem('trade',$this->applet_id); // 未支付订单自动关闭 $this->close($config['order']['close_time']); // 待配送订单自动配送完成(扫码) $this->table($config['order']['delivery_time']); // 待配送订单自动配送完成(排号) $this->row($config['order']['delivery_time']); // 待配送订单自动配送完成(外卖) $this->waimai($config['order']['delivery_time']); // 待配送订单自动配送完成(外带) $this->ziqu($config['order']['delivery_time']); //配送完成订单用户自动确认收货 $this->receive($config['order']['receive_time']); //收货订单自动评价 $this->cmt($config['order']['cmt_time']); // 退款订单自动退款 $this->refund($config['order']['refund_time']); Cache::set('event_space_order', time(), $config['order']['time']*60);//有效期N分钟 } return true; } /** * 未支付订单自动关闭 */ private function close($close_time) { // 取消n小时以前的的未付款订单 if ($close_time < 1) { return false; } // 截止时间 $deadlineTime = time() - ((int)$close_time * 60); //分钟 // 条件 $filter = [ 'pay_status' => 10, 'order_status' => 10, 'applet_id' => $this->applet_id ]; // 查询截止时间未支付的订单 $orderIds = $this->model->where($filter)->where('create_time','<',$deadlineTime)->column('order_id'); // 直接更新 if (!empty($orderIds)) { for($n=0;$n 0){ $table = TableModel::get($order['table_id']); $table->status = 10; $table->save(); } $order->save(['order_status' => 20]); } } return true; } /** * 已接订单自动完成配送(堂食扫码) */ private function table($delivery_time) { // 订单配送n小时后自动完成配送 if ($delivery_time < 1) { return false; } // 截止时间 $deadlineTime = time() - ((int)$delivery_time * 60); //堂食扫码 $filter = [ 'order_mode' => 10, 'shop_status' => 20, //商家已接单 'delivery_status' => 10, 'order_status' => 10, 'applet_id' => $this->applet_id ]; // 查询截止时间未完成配送的订单 $orderIds = $this->model->where($filter)->where('table_id','>',0)->where('pay_status','>',10)->where('shop_time','<',$deadlineTime)->column('order_id'); // 直接更新 if (!empty($orderIds)) { return $this->model->where('order_id','in',$orderIds)->save([ 'delivery_status' => 30, 'delivery_time' => time() ]); } return true; } /** * 已接订单自动完成配送(堂食排号) */ private function row($delivery_time) { // 订单配送n小时后自动完成配送 if ($delivery_time < 1) { return false; } // 截止时间 $deadlineTime = time() - ((int)$delivery_time * 60); //条件 $filter = [ 'order_mode' => 10, 'shop_status' => 20, 'delivery_status' => 10, 'order_status' => 10, 'applet_id' => $this->applet_id ]; // 查询截止时间未完成配送的订单 $orderIds = $this->model->where($filter)->where('table_id',0)->where('pay_status','>',10)->where('shop_time','<',$deadlineTime)->column('order_id'); // 直接更新 if (!empty($orderIds)) { //循环发送取餐提醒订阅消息 for($n=0;$nmodel->sendMessage('take',$orderIds[$n]); } return $this->model->where('order_id','in',$orderIds)->save([ 'delivery_status' => 30, 'delivery_time' => time() ]); } return true; } /** * 待配送订单自动配送完成(外卖) */ private function waimai($delivery_time) { // 订单配送n小时后自动完成配送 if ($delivery_time < 1) { return false; } // 截止时间 $deadlineTime = time() - ((int)$delivery_time * 60); //条件 $filter = [ 'order_mode' => 20, 'shop_status' => 30, 'delivery_status' => 20, 'order_status' => 10, 'applet_id' => $this->applet_id ]; // 查询截止时间未完成配送的订单 $orderIds = $this->model->where($filter)->where('pay_status','>',10)->where('delivery_time','<',$deadlineTime)->column('order_id'); // 直接更新 if (!empty($orderIds)) { //循环发送配送完成提醒订阅消息 for($n=0;$nmodel->sendMessage('delivery',$orderIds[$n]); } $deliveryModel = new OrderDeliveryModel; $deliveryModel->where('order_id','in',$orderIds)->save([ 'delivery_status' => 50, 'delivery_time' => time() ]); return $this->model->where('order_id','in',$orderIds)->save([ 'delivery_status' => 30, 'delivery_time' => time() ]); } return true; } /** * 已接订单自动完成配送(自取) */ private function ziqu($delivery_time) { // 订单配送n小时后自动完成配送 if ($delivery_time < 1) { return false; } // 截止时间 $deadlineTime = time() - ((int)$delivery_time * 60); //条件 $filter = [ 'order_mode' => 30, 'shop_status' => 20, 'delivery_status' => 10, 'order_status' => 10, 'applet_id' => $this->applet_id ]; // 查询截止时间未完成配送的订单 $orderIds = $this->model->where($filter)->where('pay_status','>',10)->where('arrive_time','<',$deadlineTime)->column('order_id'); // 直接更新 if (!empty($orderIds)) { //循环发送取餐提醒订阅消息 for($n=0;$nmodel->sendMessage('take',$orderIds[$n]); } return $this->model->where('order_id','in',$orderIds)->save([ 'delivery_status' => 30, 'delivery_time' => time() ]); } return true; } /** * 已配送订单自动确认收货 */ private function receive($receive_time) { if ($receive_time < 1) { return false; } // 截止时间 $deadlineTime = time() - ((int)$receive_time * 60); //分钟 //条件 $filter = [ 'pay_status' => 20, //非后付费有效 'delivery_status' => 30, 'receipt_status' => 10, 'order_status' => 10, 'applet_id' => $this->applet_id ]; // 查询截止时间未支付的订单 $orderIds = $this->model->where($filter)->where('delivery_time','<',$deadlineTime)->column('order_id'); // 直接更新 if (!empty($orderIds)) { //更新餐桌状态 for($n=0;$n0){ $table = TableModel::get($order['table_id']); $table->status = 10; $table->save(); } //账单分账 $wxpay = new WxPay(SettingModel::getItem('wxpay',$order['applet_id'])); $wxpay->divide($order,$order['applet_id']);//进行分账 } $this->model->where('order_id','in',$orderIds)->save([ 'receipt_status' => 20, 'receipt_time' => time(), 'order_status' => 30 ]); } return true; } /** * 已收货订单自动评价 */ private function cmt($cmt_time) { if ($cmt_time < 1) { return false; } // 截止时间 $deadlineTime = time() - ((int)$cmt_time * 60); //分钟 //条件 $filter = [ 'is_cmt' => 0, 'receipt_status' => 20, 'order_status' => 30, 'applet_id' => $this->applet_id ]; // 查询截止时间未支付的订单 $orderIds = $this->model->where($filter)->where('receipt_time','<',$deadlineTime)->column('order_id'); // 直接更新 if (!empty($orderIds)) { //更新餐桌状态 for($n=0;$ncomment()->save([ 'serve' => 5, 'speed' => 5, 'flavor' => 5, 'ambient' => 5, 'user_id' => $order['user_id'], 'shop_id' => $order['shop_id'], 'applet_id' => $order['applet_id'] ]); $order->save(['is_cmt' => 1]); } } return true; } /** * 退款订单自动完成退款 */ private function refund($refund_time) { if ($refund_time < 1) { return false; } // 截止时间 $deadlineTime = time() - ((int)$refund_time * 60); //分钟 //条件 $filter = [ 'pay_status' => 20, 'receipt_status' => 10, 'refund_status' => 10, 'order_status' => 40, 'applet_id' => $this->applet_id ]; // 查询截止时间未支付的订单 $orderIds = $this->model->where($filter)->where('refund_time','<',$deadlineTime)->column('order_id'); // 直接更新 if (!empty($orderIds)) { for($n=0;$nrefund(1);//同意退款 } } return true; } }