| 
									
										
										
										
											2022-05-25 19:35:57 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | declare (strict_types = 1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace app\subscribe; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use app\model\Order AS OrderModel; | 
					
						
							|  |  |  | use app\model\OrderSku; | 
					
						
							|  |  |  | use app\repository\OrderRepository; | 
					
						
							|  |  |  | use think\facade\Log; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Order | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     public function onOrderCheck() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         Log::info('触发订单检测事件:自动收货、自动过期'); | 
					
						
							|  |  |  |         $day = 3;//自动收货时间 发货后N天
 | 
					
						
							| 
									
										
										
										
											2022-06-01 16:18:39 +08:00
										 |  |  |         // $expiredList = OrderRepository::getInstance()->expiredList();
 | 
					
						
							| 
									
										
										
										
											2022-05-25 19:35:57 +08:00
										 |  |  |         $needAcceptList = OrderRepository::getInstance()->autoReceiptList($day); | 
					
						
							|  |  |  |         //        var_dump($expiredList->isEmpty());
 | 
					
						
							|  |  |  |         //        var_dump($needAcceptList->isEmpty());
 | 
					
						
							|  |  |  |         //        exit;
 | 
					
						
							| 
									
										
										
										
											2022-06-01 16:18:39 +08:00
										 |  |  |         /* | 
					
						
							| 
									
										
										
										
											2022-05-25 19:35:57 +08:00
										 |  |  |         if (!$expiredList->isEmpty()) { | 
					
						
							|  |  |  |             OrderModel::whereIn('id', $expiredList->column('id'))->save([ | 
					
						
							|  |  |  |                 'status' => OrderModel::STATUS_EXPIRED, | 
					
						
							|  |  |  |             ]); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-06-01 16:18:39 +08:00
										 |  |  |         */ | 
					
						
							| 
									
										
										
										
											2022-05-25 19:35:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (!$needAcceptList->isEmpty()) { | 
					
						
							|  |  |  |             //            OrderModel::whereIn('id', $needAcceptList->column('id'))->save([
 | 
					
						
							|  |  |  |             //                'status' => OrderModel::STATUS_COMPLETED,
 | 
					
						
							|  |  |  |             ////                'completed_at' => date('Y-m-d H:i:s'),
 | 
					
						
							|  |  |  |             //                'accepted_at' => date('Y-m-d H:i:s'),
 | 
					
						
							|  |  |  |             //            ]);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             // TODO 循环处理  后面再改成批量操作
 | 
					
						
							|  |  |  |             foreach ($needAcceptList as $order) { | 
					
						
							|  |  |  |                 OrderRepository::getInstance()->orderAccepted($order['id']); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function onOrderSpuCheck(string $orderCoding = '') | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         Log::info('触发订单商品核验事件'); | 
					
						
							|  |  |  |         // 订单商品核验后[线上|线下核验]  1、是否所有商品均核验且没有实体商品 是则订单完成
 | 
					
						
							|  |  |  |         Log::info('订单号 '.$orderCoding); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!$order = OrderModel::where('coding', $orderCoding)->find()) { | 
					
						
							|  |  |  |             Log::error('订单号不存在 '.$orderCoding); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $orderSkuList = OrderSku::where('coding', $orderCoding)->select(); | 
					
						
							|  |  |  |             $orderSkuCount = $orderSkuList->count(); | 
					
						
							|  |  |  |             $virtualCount = $orderSkuList->where('is_virtual', OrderModel::COMMON_ON) | 
					
						
							|  |  |  |                 ->where('is_check', OrderModel::COMMON_ON) | 
					
						
							|  |  |  |                 ->count(); | 
					
						
							|  |  |  |             Log::info('订单商品数量 '.$orderSkuCount); | 
					
						
							|  |  |  |             Log::info('已核验商品数量 '.$virtualCount); | 
					
						
							|  |  |  |             // 所有产品都是虚拟商品 且 都核验完成则订单设为已完成
 | 
					
						
							|  |  |  |             if ($virtualCount == $orderSkuCount) { | 
					
						
							|  |  |  |                 Log::info('订单设为已完成'); | 
					
						
							| 
									
										
										
										
											2022-06-14 11:24:29 +08:00
										 |  |  |                 if ($order['status'] != OrderModel::STATUS_ARRIVED) { | 
					
						
							| 
									
										
										
										
											2022-05-25 19:35:57 +08:00
										 |  |  |                     $order->save([ | 
					
						
							| 
									
										
										
										
											2022-06-14 11:24:29 +08:00
										 |  |  |                         'status' => OrderModel::STATUS_ARRIVED, | 
					
						
							| 
									
										
										
										
											2022-05-25 19:35:57 +08:00
										 |  |  |                         'accepted_at' => date('Y-m-d H:i:s'), | 
					
						
							|  |  |  |                     ]); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function onCheckShoppingCart(int $accountId = 0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         Log::info('触发时间:检测并清理无效购物车数据 清理用户ID='.$accountId. 'ID=0表示清理所有人'); | 
					
						
							|  |  |  |         OrderRepository::getInstance()->checkShoppingCart($accountId); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |