Jelajahi Sumber

修改订单

jun 1 hari lalu
induk
melakukan
533393d7e1
1 mengubah file dengan 56 tambahan dan 26 penghapusan
  1. 56 26
      app/Models/PromoProduct.php

+ 56 - 26
app/Models/PromoProduct.php

@@ -88,7 +88,7 @@ class PromoProduct extends Model
         // 循环处理
         foreach ($data as $value) {
             // 重组数据
-            $list[$value['product_id']]= $value;
+            $list[$value['product_id']][]= $value;
         }
         // 返回结果
         return                  $list;
@@ -126,49 +126,79 @@ class PromoProduct extends Model
         // 获取产品活动
         $promoList							= $this->getListByIds($productIds);
         $promoProductList   =   [];
-        foreach ($promoList as $promoInfo) {
-            $promoInfoCity      =   [];
-            if ($promoInfo['city_ids']){
-                $promoInfoCity      =   explode(',',$promoInfo['city_ids']);
-            }
-            $promoInfo['price_total']      =   $productPrice[$promoInfo['product_id']]['price_total'];
-            // 判断是不是可以参与
-            if (!$promoInfoCity || in_array($cityId, $promoInfoCity)) {
-                if ($promoInfo['tag_scope']) {
-                    // 解析数组
-                    $promoInfo['tag_scope'] = explode(',', $promoInfo['tag_scope']);
-                    // 标签范围限定时,默认不能参与
-                    $allowJoin = 0;
-                    // 判断标签是不是存在
-                    if ($tags) {
-                        foreach ($tags as $v) {
-                            // 标签范围内,允许参加
-                            if (in_array($v['name'], $promoInfo['tag_scope'])) $allowJoin = 1;
-                        }
-                        // 在范围
-                        if ($allowJoin) {
-                            $promoProductList[$promoInfo['id']][] = $promoInfo;
+        foreach ($promoList as $promoListItem) {
+            foreach ($promoListItem as $promoInfo){
+                $promoInfoCity      =   [];
+                if ($promoInfo['city_ids']){
+                    $promoInfoCity      =   explode(',',$promoInfo['city_ids']);
+                }
+                $promoInfo['price_total']      =   $productPrice[$promoInfo['product_id']]['price_total'];
+                // 判断是不是可以参与
+                if (!$promoInfoCity || in_array($cityId, $promoInfoCity)) {
+                    if ($promoInfo['tag_scope']) {
+                        // 解析数组
+                        $promoInfo['tag_scope'] = explode(',', $promoInfo['tag_scope']);
+                        // 标签范围限定时,默认不能参与
+                        $allowJoin = 0;
+                        // 判断标签是不是存在
+                        if ($tags) {
+                            foreach ($tags as $v) {
+                                // 标签范围内,允许参加
+                                if (in_array($v['name'], $promoInfo['tag_scope'])) $allowJoin = 1;
+                            }
+                            // 在范围
+                            if ($allowJoin) {
+                                $promoProductList[$promoInfo['id']][] = $promoInfo;
+                            }
                         }
+                    } else {
+                        $promoProductList[$promoInfo['id']][] = $promoInfo;
                     }
-                } else {
-                    $promoProductList[$promoInfo['id']][] = $promoInfo;
                 }
             }
         }
         if( !$promoProductList )			return ['is_used'=>0,'product_price'=>$productPrice,'rebate_product'=>[]];
         $reductionTotal =   0;
         $promoRebateIds =   [];
+        $productPromo   =   [];
+        foreach ($promoProductList as $key => $value){
+            $reduction  =   0;
+            $priceSum   =   array_sum(array_column($value,'price_total'));
+            if ($priceSum >= $value[0]['std_pay']) {
+                foreach ($value as $v){
+                    $productPromo[$v['product_id']][]  = [
+                        'promo_id'      => $key,
+                        'rebate'        => $v['rebate'],
+                    ];
+                }
+            }
+        }
+        if (!$productPromo)             return ['is_used'=>0,'product_price'=>$productPrice,'rebate_product'=>[]];
+        foreach ($productPromo as $key => $value){
+            $rebateValue        = 0;
+            $rebateKey          = 0;
+            foreach ($value as $v){
+                if($v['rebate']>$rebateValue){
+                    $rebateValue = $v['rebate'];
+                    $rebateKey   = $v['promo_id'];
+                    unset($promoProductList[$rebateKey]);
+                }else{
+                    unset($promoProductList[$v['promo_id']]);
+                }
+            }
+        }
         foreach ($promoProductList as $key => $value){
             $reduction  =   0;
             $priceSum   =   array_sum(array_column($value,'price_total'));
             if ($priceSum >= $value[0]['std_pay']) {
+
                 switch ($value[0]['rebate_type']){
                     case 1:
                         $reduction        =  $value[0]['rebate'];
                         $reductionTotal   +=  $value[0]['rebate'];
                         break;
                     case 2:
-                        $reduction   =  $priceSum - number_format($priceSum * $value[0]['rebate']/10,2);
+                        $reduction          =  $priceSum - number_format($priceSum * $value[0]['rebate']/10,2);
                         $reductionTotal    +=  $priceSum - number_format($priceSum * $value[0]['rebate']/10,2);
                         break;
                     case 3: