113 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | |
| 
 | |
| 
 | |
| namespace app\common\command;
 | |
| 
 | |
| 
 | |
| use app\common\enum\OrderEnum;
 | |
| use app\common\model\CouponList;
 | |
| use app\common\model\goods\Goods;
 | |
| use app\common\model\goods\GoodsItem;
 | |
| use app\common\model\order\Order;
 | |
| use app\common\server\ConfigServer;
 | |
| use think\console\Command;
 | |
| use think\console\Input;
 | |
| use think\console\Output;
 | |
| use think\facade\Db;
 | |
| use think\facade\Log;
 | |
| 
 | |
| class OrderClose extends Command
 | |
| {
 | |
|     protected function configure()
 | |
|     {
 | |
|         $this->setName('order_close')
 | |
|             ->setDescription('关闭订单');
 | |
|     }
 | |
| 
 | |
|     protected function execute(Input $input, Output $output)
 | |
|     {
 | |
|         try {
 | |
|             $time = time();
 | |
|             $order_cancel_time = ConfigServer::get('transaction', 'unpaid_order_cancel_time', 30) * 60;
 | |
| 
 | |
|             $model = new Order();
 | |
|             $order_list = $model->field(true)
 | |
|                 ->whereRaw("create_time+$order_cancel_time < $time")
 | |
|                 ->where([
 | |
|                     ['order_type', '<>', OrderEnum::TEAM_ORDER],
 | |
|                     ['order_status', '=', OrderEnum::ORDER_STATUS_NO_PAID],
 | |
|                     ['pay_status', '=', OrderEnum::PAY_STATUS_NO_PAID]
 | |
|                 ])->with(['orderGoods'])
 | |
|                 ->select()->toArray();
 | |
| 
 | |
|             $order_ids          = []; //更新的订单
 | |
|             $update_total_stock = []; //更新总库存
 | |
|             $update_stock       = []; //更新规格库存
 | |
|             $total_stock_num    = []; //总库存
 | |
|             $stock_num          = []; //规格库存
 | |
|             $update_coupon_ids  = []; //更新优惠券状态
 | |
|             foreach ($order_list as $order) {
 | |
|                 $order_ids[] = $order['id'];
 | |
|                 //返回优惠券
 | |
|                 if ($order['coupon_list_id']) {
 | |
|                     $update_coupon_ids[] = $order['coupon_list_id'];
 | |
|                 }
 | |
| 
 | |
|                 foreach ($order['orderGoods'] as $order_goods) {
 | |
|                     //更新商品总库存数据
 | |
|                     if (isset($update_total_stock[$order_goods['goods_id']])) {
 | |
|                         $total_stock_num[$order_goods['goods_id']] = $total_stock_num[$order_goods['goods_id']] + $order_goods['goods_num'];
 | |
|                         $update_total_stock[$order_goods['goods_id']]['stock'] = Db::raw('stock+' . $total_stock_num[$order_goods['goods_id']]);
 | |
|                     } else {
 | |
|                         $total_stock_num[$order_goods['goods_id']] = $order_goods['goods_num'];
 | |
|                         $update_total_stock[$order_goods['goods_id']] = [
 | |
|                             'id' => $order_goods['goods_id'],
 | |
|                             'stock' => Db::raw('stock+' . $total_stock_num[$order_goods['goods_id']])
 | |
|                         ];
 | |
|                     }
 | |
|                     //更新商品规格库存数据
 | |
|                     if (isset($update_stock[$order_goods['item_id']])) {
 | |
|                         $stock_num[$order_goods['item_id']] = $stock_num[$order_goods['item_id']] + $order_goods['goods_num'];
 | |
|                         $update_stock[$order_goods['item_id']]['stock'] = Db::raw('stock+' . $stock_num[$order_goods['item_id']]);
 | |
|                     } else {
 | |
|                         $stock_num[$order_goods['item_id']] = $order_goods['goods_num'];
 | |
|                         $update_stock[$order_goods['item_id']] = [
 | |
|                             'id' => $order_goods['item_id'],
 | |
|                             'stock' => Db::raw('stock+' . $stock_num[$order_goods['item_id']])
 | |
|                         ];
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             // 更新订单状态为关闭
 | |
|             if ($order_ids) {
 | |
|                 $update_data = [
 | |
|                     'order_status' => OrderEnum::ORDER_STATUS_DOWN,
 | |
|                     'update_time'  => $time,
 | |
|                 ];
 | |
| 
 | |
|                 $model->where(['id' => $order_ids])->update($update_data);
 | |
|             }
 | |
| 
 | |
| 
 | |
|             //批量更新库存
 | |
|             if($update_total_stock){
 | |
|                 (new Goods())->saveAll(array_values($update_total_stock));
 | |
|                 (new GoodsItem())->saveAll(array_values($update_stock));
 | |
|             }
 | |
| 
 | |
|             if($update_coupon_ids){
 | |
|                 $update_coupon = [
 | |
|                     'status'        => 0,
 | |
|                     'use_time'      => '',
 | |
|                     'order_id'      => '',
 | |
|                     'update_time'   => $time,
 | |
|                 ];
 | |
|                 (new CouponList())->where(['id'=>$update_coupon_ids])->update($update_coupon);
 | |
|             }
 | |
| 
 | |
|         } catch (\Exception $e) {
 | |
|             Log::write('自动关闭订单异常:'.$e->getMessage());
 | |
|         }
 | |
|     }
 | |
| } |