wesmiler 4 horas atrás
pai
commit
fdac1ba57a

+ 2 - 0
app/Services/Api/OrderService.php

@@ -617,6 +617,7 @@ class OrderService extends BaseService
             ->select(['goods_id', 'num', 'sku_id'])
             ->get();
         DB::beginTransaction();
+        // 商品库存
         if ($orderGoods) {
             foreach ($orderGoods as $goods) {
                 $goodsId = isset($goods['goods_id']) ? $goods['goods_id'] : 0;
@@ -637,6 +638,7 @@ class OrderService extends BaseService
         OrderGoodsModel::where(['order_no' => $orderNo, 'mark' => 0])->where('update_time', '<=', time() - 300)->delete();
         $this->model->where(['id' => $orderId])->update(['mark' => 0, 'update_time' => time()]);
         OrderGoodsModel::where(['order_no' => $orderNo])->update(['mark' => 0, 'update_time' => time()]);
+
         // 优惠券返还
         if($couponId){
             MemberCouponModel::where(['coupon_id'=>$couponId,'user_id'=>$userId])->update(['status'=>1,'remark'=>'取消订单返还','update_time'=>time()]);

+ 41 - 16
app/Services/Common/OrderService.php

@@ -12,6 +12,9 @@
 namespace App\Services\Common;
 
 use App\Models\ActionLogModel;
+use App\Models\GoodsModel;
+use App\Models\GoodsSkuModel;
+use App\Models\MemberCouponModel;
 use App\Models\OrderCommissionModel;
 use App\Models\OrderGoodsModel;
 use App\Models\OrderModel;
@@ -605,7 +608,7 @@ class OrderService extends BaseService
             return ['code' => 1, 'msg' => '参数错误'];
         }
 
-        $order = $this->model->find($id);
+        $order = $this->model->with(['orderGoods'])->find($id);
         if (!$order) {
             return ['code' => 1, 'msg' => '订单不存在'];
         }
@@ -614,21 +617,15 @@ class OrderService extends BaseService
             return ['code' => 1, 'msg' => '只有待付款订单可以取消'];
         }
 
-        $updateData = [
-            'mark' => 0, // 标记为删除
-            'update_time' => time()
-        ];
-
-        $result = $this->model->where('id', $id)->update($updateData);
-
-        if ($result) {
-            ActionLogModel::setTitle("取消订单");
-            ActionLogModel::record();
-            RedisService::keyDel("caches:orders:*");
-            return ['code' => 0, 'msg' => '订单已取消'];
+        // 订单商品处理
+        if(!\App\Services\Api\OrderService::make()->cancel($order->user_id, $id)){
+            return ['code' => 1, 'msg' => \App\Services\Api\OrderService::make()->getError()];
         }
 
-        return ['code' => 1, 'msg' => '操作失败'];
+        ActionLogModel::setTitle("取消订单");
+        ActionLogModel::record();
+        RedisService::keyDel("caches:orders:*");
+        return ['code' => 0, 'msg' => '订单已取消'];
     }
 
     /**
@@ -706,7 +703,7 @@ class OrderService extends BaseService
             return ['code' => 1, 'msg' => '参数错误'];
         }
 
-        $order = $this->model->find($id);
+        $order = $this->model->with(['orderGoods'])->find($id);
         if (!$order) {
             return ['code' => 1, 'msg' => '订单不存在'];
         }
@@ -721,8 +718,36 @@ class OrderService extends BaseService
             'update_time' => time()
         ];
 
-        $result = $this->model->where('id', $id)->update($updateData);
+        DB::beginTransaction();
+        try {
+            $result = $this->model->where('id', $id)->update($updateData);
+
+            // 商品库存返还
+            if ($order->order_goods) {
+                foreach ($order->order_goods as $goods) {
+                    $goodsId = isset($goods['goods_id']) ? $goods['goods_id'] : 0;
+                    $num = isset($goods['num']) ? $goods['num'] : 0;
+                    $skuId = isset($goods['sku_id']) ? $goods['sku_id'] : 0;
+                    if ($goodsId) {
+                        GoodsModel::where(['id' => $goodsId])->update(['stock' => DB::raw("stock + {$num}"), 'update_time' => time()]);
+                    }
+
+                    if ($skuId) {
+                        GoodsSkuModel::where(['id' => $skuId])->update(['stock' => DB::raw("stock + {$num}"), 'update_time' => time()]);
+                    }
+                }
+            }
+
+            // 优惠券返还
+            if($order->coupon_id>0){
+                MemberCouponModel::where(['coupon_id'=>$order->coupon_id,'user_id'=>$order->user_id])->update(['status'=>1,'remark'=>'订单退款返还','update_time'=>time()]);
+            }
+        } catch (\Exception $exception){
+            DB::rollBack();
+            return ['code' => 1, 'msg' => '操作失败:'.$exception->getMessage()];
+        }
 
+        DB::commit();
         if ($result) {
             ActionLogModel::setTitle("同意退款");
             ActionLogModel::record();