Kirin 2 лет назад
Родитель
Сommit
9143421912

+ 7 - 2
app/admin/controller/store/StoreProduct.php

@@ -230,7 +230,7 @@ class StoreProduct extends AuthController
                 }
                 $productInfo['items'] = $result['attr'];
                 $productInfo['attrs'] = $result['value'];
-                $productInfo['attr'] = ['pic' => '', 'price' => 0, 'cost' => 0, 'ot_price' => 0, 'stock' => 0, 'bar_code' => '', 'weight' => 0, 'volume' => 0, 'brokerage' => 0, 'brokerage_two' => 0];
+                $productInfo['attr'] = ['pic' => '', 'price' => 0, 'cost' => 0, 'ot_price' => 0, 'stock' => 0, 'bar_code' => '', 'weight' => 0, 'volume' => 0, 'brokerage' => 0, 'brokerage_two' => 0, 'brokerage_suit' => 0];
             } else {
                 $result = StoreProductAttrValue::where('product_id', $id)->where('type', 0)->find();
                 if ($result) {
@@ -251,6 +251,7 @@ class StoreProduct extends AuthController
                     'volume' => $single['volume'] ?? 0,
                     'brokerage' => $single['brokerage'] ?? 0,
                     'brokerage_two' => $single['brokerage_two'] ?? 0,
+                    'brokerage_suit' => $single['brokerage_suit'] ?? 0,
                 ];
             }
             if ($productInfo['activity']) {
@@ -300,6 +301,7 @@ class StoreProduct extends AuthController
             ['is_hot', 0],
             ['is_benefit', 0],
             ['is_suit', 0],
+            ['is_bind', 0],
             ['is_award', 0],
             ['is_best', 0],
             ['is_new', 0],
@@ -662,7 +664,7 @@ class StoreProduct extends AuthController
             $suk = implode(',', $item['detail']);
             $types = 1;
             if ($id) {
-                $sukValue = StoreProductAttrValue::where('product_id', $id)->where('type', 0)->where('suk', $suk)->column('bar_code,cost,price,ot_price,stock,image as pic,weight,volume,brokerage,brokerage_two', 'suk');
+                $sukValue = StoreProductAttrValue::where('product_id', $id)->where('type', 0)->where('suk', $suk)->column('bar_code,cost,price,ot_price,stock,image as pic,weight,volume,brokerage,brokerage_two,brokerage_suit', 'suk');
                 if (!count($sukValue)) {
                     if ($type == 0) $types = 0; //编辑商品时,将没有规格的数据不生成默认值
                     $sukValue[$suk]['pic'] = '';
@@ -675,6 +677,7 @@ class StoreProduct extends AuthController
                     $sukValue[$suk]['volume'] = 0;
                     $sukValue[$suk]['brokerage'] = 0;
                     $sukValue[$suk]['brokerage_two'] = 0;
+                    $sukValue[$suk]['brokerage_suit'] = 0;
                 }
             } else {
                 $sukValue[$suk]['pic'] = '';
@@ -687,6 +690,7 @@ class StoreProduct extends AuthController
                 $sukValue[$suk]['volume'] = 0;
                 $sukValue[$suk]['brokerage'] = 0;
                 $sukValue[$suk]['brokerage_two'] = 0;
+                $sukValue[$suk]['brokerage_suit'] = 0;
             }
             if ($types) { //编辑商品时,将没有规格的数据不生成默认值
                 foreach (array_keys($detail) as $k => $title) {
@@ -709,6 +713,7 @@ class StoreProduct extends AuthController
                 $valueNew[$count]['volume'] = $sukValue[$suk]['volume'] ?? 0;
                 $valueNew[$count]['brokerage'] = $sukValue[$suk]['brokerage'] ?? 0;
                 $valueNew[$count]['brokerage_two'] = $sukValue[$suk]['brokerage_two'] ?? 0;
+                $valueNew[$count]['brokerage_suit'] = $sukValue[$suk]['brokerage_suit'] ?? 0;
                 $count++;
             }
         }

+ 1 - 0
app/admin/model/store/StoreProductAttr.php

@@ -114,6 +114,7 @@ class StoreProductAttr extends BaseModel
                 'volume' => $value['volume'] ?? 0,
                 'brokerage' => $value['brokerage'] ?? 0,
                 'brokerage_two' => $value['brokerage_two'] ?? 0,
+                'brokerage_suit' => $value['brokerage_suit'] ?? 0,
                 'type' => $type,
                 'quota' => $value['quota'] ?? 0,
                 'quota_show' => $value['quota'] ?? 0,

+ 33 - 3
app/admin/view/store/store_product/create.php

@@ -650,6 +650,8 @@
                                                            placeholder="请输入一级返佣" class="layui-input" v-model="brokerage.brokerage">
                                                     <input style="width: 20%;display: inline-block;" type="number" name="brokerage_two" lay-verify="title" autocomplete="off"
                                                            placeholder="请输入二级返佣" class="layui-input" v-model="brokerage.brokerage_two">
+                                                    <input style="width: 20%;display: inline-block;" type="number" name="brokerage_suit" lay-verify="title" autocomplete="off"
+                                                           placeholder="请输入套装推荐奖" class="layui-input" v-model="brokerage.brokerage_suit">
                                                     <button class="layui-btn layui-btn-sm" style="height: 38px;" type="button"
                                                             @click="addBrokerage">批量设置
                                                     </button>
@@ -676,6 +678,7 @@
                                                             <th>体积</th>
                                                             <th>一级返佣</th>
                                                             <th>二级返佣</th>
+                                                            <th>套装推荐</th>
                                                         </tr>
                                                         </thead>
                                                         <tr>
@@ -697,6 +700,8 @@
                                                                        class="layui-input"></td>
                                                             <td><input type="text" v-model="formData.attr.brokerage_two"
                                                                        class="layui-input"></td>
+                                                            <td><input type="text" v-model="formData.attr.brokerage_suit"
+                                                                       class="layui-input"></td>
                                                         </tr>
                                                     </table>
                                                 </div>
@@ -741,6 +746,10 @@
                                                                 <input type="number" v-model="item.brokerage_two"
                                                                        class="layui-input">
                                                             </td>
+                                                            <td>
+                                                                <input type="number" v-model="item.brokerage_suit"
+                                                                       class="layui-input">
+                                                            </td>
                                                         </tr>
                                                     </table>
                                                 </div>
@@ -853,6 +862,19 @@
                                             </div>
                                         </div>
                                     </div>
+                                    <div class="layui-col-xs12 layui-col-sm4 layui-col-md4">
+                                        <div class="grid-demo grid-demo-bg1">
+                                            <div class="layui-form-item">
+                                                <label class="layui-form-label">绑定商品</label>
+                                                <div class="layui-input-block">
+                                                    <input type="radio" name="is_bind" lay-filter="is_bind" value="1" title="开启"
+                                                           :checked="formData.is_bind == 1 ? true : false">
+                                                    <input type="radio" name="is_bind" lay-filter="is_bind" value="0" title="关闭"
+                                                           :checked="formData.is_bind == 0 ? true : false">
+                                                </div>
+                                            </div>
+                                        </div>
+                                    </div>
                                     <div class="layui-col-xs12 layui-col-sm4 layui-col-md4">
                                         <div class="grid-demo grid-demo-bg1">
                                             <div class="layui-form-item">
@@ -952,6 +974,7 @@
                     volume: 0,
                     brokerage: 0,
                     brokerage_two: 0,
+                    brokerage_suit: 0,
                 },
                 attrs: [],
                 description: '',
@@ -967,6 +990,7 @@
                 is_new: 0,
                 is_good: 0,
                 is_suit: 0,
+                is_bind: 0,
                 store_bag: 0,
                 is_sub:0,
                 is_consumer:consumer,
@@ -1002,11 +1026,12 @@
             brokerage:{
                 brokerage: '',
                 brokerage_two: '',
+                brokerage_suit: '',
             },
             activity:{'秒杀':'#1E9FFF','砍价':'#189688','拼团':'#FEB900'},
             attr: [],//临时属性
             newRule: false,//是否添加新规则
-            radioRule: ['is_sub','is_show','is_award', 'is_hot', 'is_benefit', 'is_new','is_good','store_bag','is_suit' ,'is_best', 'spec_type'],//radio 当选规则
+            radioRule: ['is_sub','is_show','is_award', 'is_hot', 'is_benefit', 'is_new','is_good','store_bag','is_suit' ,'is_bind' ,'is_best', 'spec_type'],//radio 当选规则
             rule: { //多图选择规则
                 slider_image: {
                     maxLength: 5
@@ -1026,9 +1051,11 @@
                 if (n == 1) {
                     this.formHeader.push({title:'一级返佣(元)'});
                     this.formHeader.push({title:'二级级返佣(元)'});
+                    this.formHeader.push({title: '套装推荐(元)'});
                 } else {
                     this.formHeader.pop();
                     this.formHeader.pop();
+                    this.formHeader.pop();
                 }
             },
             'formData.spec_type':function (n) {
@@ -1083,11 +1110,12 @@
                 });
             },
             addBrokerage:function(){
-                if (this.brokerage.brokerage >= 0 && this.brokerage.brokerage_two >= 0){
+                if (this.brokerage.brokerage >= 0 && this.brokerage.brokerage_two >= 0 && this.brokerage.brokerage_suit >= 0) {
                     var that = this;
-                    this.$set(this.formData,'attrs',this.formData.attrs.map(function (item) {
+                    this.$set(this.formData, 'attrs', this.formData.attrs.map(function (item) {
                         item.brokerage = that.brokerage.brokerage;
                         item.brokerage_two = that.brokerage.brokerage_two;
+                        item.brokerage_suit = that.brokerage.brokerage_suit;
                         return item;
                     }));
                 } else {
@@ -1478,6 +1506,7 @@
                     if (that.id && that.formData.is_sub == 1 && that.formData.spec_type == 1) {
                         that.formHeader.push({title:'一级返佣(元)'});
                         that.formHeader.push({title:'二级级返佣(元)'});
+                        that.formHeader.push({title: '套装推荐(元)'});
                     }
                 }).catch(function (res) {
                     return that.showMsg(res.msg);
@@ -1531,6 +1560,7 @@
                         weight:that.formData.attr.weight,
                         brokerage:that.formData.attr.brokerage,
                         brokerage_two:that.formData.attr.brokerage_two,
+                        brokerage_suit: that.formData.attr.brokerage_suit,
                     };
                     that.formData.attrs = [attr];
                 } else {

+ 1 - 0
app/api/controller/order/StoreOrderController.php

@@ -66,6 +66,7 @@ class StoreOrderController
             'integralRatio' => sys_config('integral_ratio'),
             'suit' => $cartGroup['suit'],
             'store_bag' => $cartGroup['store_bag'] ? 1 : 0,
+            'is_bind' => $cartGroup['is_bind'] ?? 0,
         ];
         $usableCoupons = StoreCouponUser::getUsableCouponList($uid, $cartGroup, $priceGroup['totalPrice']);
         $usableCoupon = isset($usableCoupons[0]) ? $usableCoupons[0] : null;

+ 4 - 2
app/models/store/StoreCart.php

@@ -178,7 +178,7 @@ class StoreCart extends BaseModel
 
     public static function getUserProductCartList($uid, $cartIds = '', $status = 0, $store_id = 0)
     {
-        $productInfoField = 'id,image,price,ot_price,vip_price,postage,give_integral,sales,stock,store_name,unit_name,is_show,is_del,is_postage,cost,is_sub,temp_id,is_consumer,is_suit,max_use_integral,store_id,store_bag';
+        $productInfoField = 'id,image,price,ot_price,vip_price,postage,give_integral,sales,stock,store_name,unit_name,is_show,is_del,is_postage,cost,is_sub,temp_id,is_consumer,is_suit,is_bind,max_use_integral,store_id,store_bag';
         $seckillInfoField = 'id,image,price,ot_price,postage,give_integral,sales,stock,title as store_name,unit_name,is_show,is_del,is_postage,cost,temp_id,weight,volume,start_time,stop_time,time_id';
         $bargainInfoField = 'id,image,min_price as price,price as ot_price,postage,give_integral,sales,stock,title as store_name,unit_name,status as is_show,is_del,is_postage,cost,temp_id,weight,volume';
         $combinationInfoField = 'id,image,price,postage,sales,stock,title as store_name,is_show,is_del,is_postage,cost,temp_id,weight,volume';
@@ -294,6 +294,7 @@ class StoreCart extends BaseModel
                 }
             }
         }
+        $is_bind = 0;
         foreach ($valid as $k => $cart) {
             if ($cart['trueStock'] < $cart['cart_num']) {
                 $cart['cart_num'] = $cart['trueStock'];
@@ -306,6 +307,7 @@ class StoreCart extends BaseModel
                 unset($valid[$k]['productInfo']['is_del'], $valid[$k]['productInfo']['is_del'], $valid[$k]['productInfo']['is_show']);
             }
             $suit += ($cart['productInfo']['is_suit'] ?? 0) * $cart['cart_num'];
+            $is_bind = $cart['productInfo']['is_bind'] ?? 0;
             $store_bag = $store_bag || ($cart['productInfo']['store_bag'] ?? 0);
         }
         foreach ($invalid as $k => $cart) {
@@ -315,7 +317,7 @@ class StoreCart extends BaseModel
             }
         }
 
-        return compact('valid', 'invalid', 'suit', 'store_bag');
+        return compact('valid', 'invalid', 'suit', 'store_bag', 'is_bind');
     }
 
     /**

+ 11 - 2
app/models/store/StoreOrder.php

@@ -483,6 +483,7 @@ class StoreOrder extends BaseModel
                 'is_consumer' => $is_consumer,
                 'reg_store_id' => $userInfo['reg_store_id'],
                 'suit' => $other['suit'] ?? 0,
+                'is_bind' => $other['is_bind'] ?? 0,
                 'store_bag' => $other['store_bag'] ?? 0,
             ];
             if ($shipping_type === 2) {
@@ -852,7 +853,7 @@ class StoreOrder extends BaseModel
         //支付成功后
         $res2 = true;
         $user = User::where('uid', $order['uid'])->find();
-        if ($order['suit'] > 0 && !$user['lock_spread'] && $user['spread_uid']) User::where('uid', $order['uid'])->update(['lock_spread' => 1]);
+        if (($order['suit'] > 0 || $order['is_bind'] > 0) && !$user['lock_spread'] && $user['spread_uid']) User::where('uid', $order['uid'])->update(['lock_spread' => 1]);
         $res2 = $res2 && self::addSuit($order);
         $res2 = $res2 && StoreOrder::sendSuit($order);
         $res2 = $res2 && StoreOrder::sendGroupAward($order);
@@ -2497,12 +2498,19 @@ class StoreOrder extends BaseModel
         }
         $cartInfo = StoreOrderCartInfo::whereIn('cart_id', $order['cart_id'])->column('cart_info');
         $suit = 0;
+        $suit_exit = 0;
+        $suit_award = 0;
         $suit_price = 0;
         $extra_price = 0;
         foreach ($cartInfo as $value) {
             $product = json_decode($value, true);
             if (isset($product['productInfo'])) {
                 $productInfo = $product['productInfo'];
+                if (($productInfo['attrInfo']['brokerage_suit'] ?? 0) > 0) {
+                    $suit_award += $product['productInfo']['attrInfo']['brokerage_suit'] * $product['cart_num'];
+                    $suit_price += ($productInfo['attrInfo']['price'] ?? $product['price']) * $product['cart_num'];
+                    if ($product['is_suit']) $suit_exit += $product['cart_num'] ?? 0;
+                }
                 if ($product['is_suit']) {
                     $suit += $product['cart_num'] ?? 0;
                     $suit_price += ($productInfo['attrInfo']['price'] ?? $product['price']) * $product['cart_num'];
@@ -2516,7 +2524,8 @@ class StoreOrder extends BaseModel
         $suit_recommend = sys_config('suit_recommend', 0, true);
         if ($spread && $suit_recommend) {
             //推荐奖
-            $brokeragePrice = bcmul($suit_recommend, $suit, 2);
+            $brokeragePrice = bcmul($suit_recommend, $suit - $suit_exit, 2);
+            $brokeragePrice = bcadd($suit_award, $brokeragePrice, 2);
             if ($brokeragePrice > 0) {
                 $mark = '用户' . $userInfo['nickname'] . '(' . $order['uid'] . ')' . '购买套装商品,获得推荐奖励' . $brokeragePrice;
                 $res = $res && UserBill::income('套装推荐奖', $spread['uid'], 'now_money', 'brokerage', $brokeragePrice, $order['id'], bcadd($spread['brokerage_price'], $brokeragePrice, 2), $mark);