Browse Source

产品限额

Gorden 4 months ago
parent
commit
b7086b45d3

+ 6 - 0
app/admin/controller/order/ServicesController.php

@@ -226,6 +226,9 @@ class ServicesController extends Curd
         if (!empty($params['dept_premises_id'])) {
             $premises = SysDept::where('dept_name', $params['dept_premises_id'])->first();
         }
+        if (!OrderService::checkGoodsLimit($params['goodsContentList'],$params['join_order_member_id'])){
+            return json_fail('超出产品限额');
+        }
 
         $params['goods_classify'] = $goodsClassifys[0];
         Db::beginTransaction();
@@ -605,6 +608,9 @@ class ServicesController extends Curd
         if (!empty($params['dept_premises_id'])) {
             $premises = SysDept::where('dept_name', $params['dept_premises_id'])->first();
         }
+        if (!OrderService::checkGoodsLimit($params['goodsContentList'],$params['join_order_member_id'])){
+            return json_fail('超出产品限额');
+        }
 
         Db::beginTransaction();
         try {

+ 6 - 0
app/admin/service/goods/GoodsService.php

@@ -1930,6 +1930,9 @@ class GoodsService
                     $attributeJson = json_decode($model->goods_attribute_json, true);
                 }
                 $attributeJson['max-limit'] = $params['max_limit'];
+                if ($attributeJson['max-limit'] == 0 || $attributeJson['max-limit'] == ''){
+                    unset($attributeJson['max-limit']);
+                }
             }
             if (isset($params['teachers'])) {
                 if (!empty($model->goods_attribute_json) && !is_array($model->goods_attribute_json)) {
@@ -2516,6 +2519,9 @@ class GoodsService
                     $data['goods_attribute_json'] = [];
                 }
                 $data['goods_attribute_json']['max-limit'] = $params['max_limit'];
+                if ($data['goods_attribute_json']['max-limit'] == 0 || $data['goods_attribute_json']['max-limit'] == ''){
+                    unset($data['goods_attribute_json']['max-limit']);
+                }
                 $data['goods_attribute_json'] = json_encode($data['goods_attribute_json']);
             }
             if (isset($params['teachers'])) {

+ 34 - 0
app/admin/service/order/OrderService.php

@@ -4,6 +4,7 @@ namespace app\admin\service\order;
 
 use app\model\CouponDetail;
 use app\model\CouponGoods;
+use app\model\Goods;
 use app\model\GoodsRunning;
 use app\model\GoodsSku;
 use app\model\Member;
@@ -992,6 +993,39 @@ class OrderService
         }
     }
 
+    /**
+     * 检查产品限额
+     */
+    public static function checkGoodsLimit($goods,$memberId)
+    {
+        foreach($goods as $good){
+            $goodsLimit = 'no';
+            $goodsModel = Goods::where('goods_id',$good['goods_id'])->select('goods_attribute_json')->first();
+            if (!empty($goodsModel) && !empty($goodsModel->goods_attribute_json)){
+                $goodsAttributeJson = json_decode($goodsModel->goods_attribute_json,true);
+                if (!empty($goodsAttributeJson['max-limit'])){
+                    $goodsLimit = $goodsAttributeJson['max-limit'];
+                    if ($goodsLimit != 0 && $goodsLimit != '' && $good['nbr'] > $goodsLimit){
+                        return false;
+                    }
+                }
+            }
+            
+            $sheetNbr = 0;
+            if ($goodsLimit != 'no'){
+                $sheetNbr = OrderSheet::where('join_sheet_member_id',$memberId)
+                    ->where('join_sheet_goods_id',$good['goods_id'])
+                    ->where('order_sheet_status','<>','CANCEL')
+                    ->sum('order_sheet_num');
+                if ($goodsLimit != 0 && $goodsLimit != '' && $good['nbr'] + $sheetNbr > $goodsLimit){
+                    return false;
+                }
+            }
+        }
+
+        return true;
+    } 
+
 
     public static $couponClassify = [
         'wipe' => '抹零',