Kirin 3 yıl önce
ebeveyn
işleme
1168020d05

+ 57 - 18
app/models/store/StoreOrder.php

@@ -2522,30 +2522,69 @@ class StoreOrder extends BaseModel
             $group_level = SystemGroupLevel::get($spread['group_level']);
             $award_level = SystemGroupLevel::get($spread['award_level']);
             if ($suit) {
-                if ($group_level) {
-                    if (!$award_level) {
-                        $award = SystemGroupLevel::min('suit_award');
-                        $brokeragePrice = bcmul($award, $suit, 2);
-                        if ($brokeragePrice > $send) {
-                            $real_send = bcsub($brokeragePrice, $send, 2);
+                $award_group = $group_level['suit_award'] ?? 0;
+                $award_award = $award_level['suit_award'] ?? 0;
+                $big = $award_group > $award_award ? $group_level['id'] : $award_level['id'];
+                $brokeragePrice_a = bcmul($award_award, $suit, 2);
+                $brokeragePrice_g = bcmul($award_group, $suit, 2);
+                $brokeragePrice_big = $brokeragePrice_a > $brokeragePrice_g ? $brokeragePrice_a : $brokeragePrice_g;
+                $brokeragePrice_small = $brokeragePrice_a > $brokeragePrice_g ? $brokeragePrice_g : $brokeragePrice_a;
+                if ($brokeragePrice_big == $brokeragePrice_small) {
+                    $brokeragePrice = $brokeragePrice_big;
+                    if ($brokeragePrice > $send) {
+                        $real_send = bcsub($brokeragePrice, $send, 2);
+                        if ($real_send > 0) {
                             $mark = '用户' . $userInfo['nickname'] . '(' . $order['uid'] . ')' . '购买套装商品,获得极差奖励' . $real_send;
-                            $res = $res && UserBill::income('套装极差奖', $spread['uid'], 'now_money', 'brokerage', $real_send, $order['id'], $spread['brokerage_price'], $mark, 0);
+                            $res = $res && UserBill::income('套装极差奖', $spread['uid'], 'now_money', 'brokerage', $real_send, $order['id'], bcadd($spread['brokerage_price'], $real_send, 2), $mark);
+                            $res = $res && User::where('uid', $spread['uid'])->inc('brokerage_price', $real_send)->update();
                             $send = $brokeragePrice;
                         }
-                    } else {
-                        $award = $group_level['suit_award'] > $award_level['suit_award'] ? $award_level['suit_award'] : $group_level['suit_award'];
-                        $brokeragePrice = bcmul($award, $suit, 2);
-                        if ($brokeragePrice > $send) {
-                            $real_send = bcsub($brokeragePrice, $send, 2);
-                            if ($real_send > 0) {
-                                $mark = '用户' . $userInfo['nickname'] . '(' . $order['uid'] . ')' . '购买套装商品,获得极差奖励' . $real_send;
-                                $res = $res && UserBill::income('套装极差奖', $spread['uid'], 'now_money', 'brokerage', $real_send, $order['id'], bcadd($spread['brokerage_price'], $real_send, 2), $mark);
-                                $res = $res && User::where('uid', $spread['uid'])->inc('brokerage_price', $real_send)->update();
-                                $send = $brokeragePrice;
-                            }
+                    }
+                } else {
+                    $brokeragePrice = $brokeragePrice_small;
+                    if ($brokeragePrice > $send) {
+                        $real_send = bcsub($brokeragePrice, $send, 2);
+                        if ($real_send > 0) {
+                            $mark = '用户' . $userInfo['nickname'] . '(' . $order['uid'] . ')' . '购买套装商品,获得极差奖励' . $real_send;
+                            $res = $res && UserBill::income('套装极差奖', $spread['uid'], 'now_money', 'brokerage', $real_send, $order['id'], bcadd($spread['brokerage_price'], $real_send, 2), $mark);
+                            $res = $res && User::where('uid', $spread['uid'])->inc('brokerage_price', $real_send)->update();
+                            $send = $brokeragePrice;
+                        }
+                    }
+                    $brokeragePrice = $brokeragePrice_big;
+                    if ($brokeragePrice > $send) {
+                        $real_send = bcsub($brokeragePrice, $send, 2);
+                        if ($real_send > 0) {
+                            $mark = '用户' . $userInfo['nickname'] . '(' . $order['uid'] . ')' . '购买套装商品,获得极差奖励' . $real_send;
+                            $res = $res && UserBill::income('套装极差奖', $spread['uid'], 'now_money', 'brokerage', $real_send, $order['id'], bcadd($spread['brokerage_price'], $real_send, 2), $mark, 0, $big);
+                            $send = $brokeragePrice;
                         }
                     }
                 }
+//                if ($group_level) {
+//                    if (!$award_level) {
+//                        $award = SystemGroupLevel::min('suit_award');
+//                        $brokeragePrice = bcmul($award, $suit, 2);
+//                        if ($brokeragePrice > $send) {
+//                            $real_send = bcsub($brokeragePrice, $send, 2);
+//                            $mark = '用户' . $userInfo['nickname'] . '(' . $order['uid'] . ')' . '购买套装商品,获得极差奖励' . $real_send;
+//                            $res = $res && UserBill::income('套装极差奖', $spread['uid'], 'now_money', 'brokerage', $real_send, $order['id'], $spread['brokerage_price'], $mark, 0);
+//                            $send = $brokeragePrice;
+//                        }
+//                    } else {
+//                        $award = $group_level['suit_award'] > $award_level['suit_award'] ? $award_level['suit_award'] : $group_level['suit_award'];
+//                        $brokeragePrice = bcmul($award, $suit, 2);
+//                        if ($brokeragePrice > $send) {
+//                            $real_send = bcsub($brokeragePrice, $send, 2);
+//                            if ($real_send > 0) {
+//                                $mark = '用户' . $userInfo['nickname'] . '(' . $order['uid'] . ')' . '购买套装商品,获得极差奖励' . $real_send;
+//                                $res = $res && UserBill::income('套装极差奖', $spread['uid'], 'now_money', 'brokerage', $real_send, $order['id'], bcadd($spread['brokerage_price'], $real_send, 2), $mark);
+//                                $res = $res && User::where('uid', $spread['uid'])->inc('brokerage_price', $real_send)->update();
+//                                $send = $brokeragePrice;
+//                            }
+//                        }
+//                    }
+//                }
             }
             if ($group_level) {
                 $brokeragePrice = bcmul(bcdiv($group_level['group_award'], 100, 4), bcsub($order['pay_price'], $suit_price, 2), 2);

+ 3 - 3
app/models/system/SystemAwardLevel.php

@@ -79,7 +79,7 @@ class SystemAwardLevel extends BaseModel
             foreach ($level as $v) {
                 if ($spread['recommend_suit_num'] >= $v['level_num']) {
                     User::where('uid', $spread['uid'])->update(['award_level' => $v['id']]);
-                    self::sendBackOrderBrokerage($spread['uid']);
+                    self::sendBackOrderBrokerage($spread['uid'], $spread['group_level'] > $v['id'] ? $v['id'] : $spread['group_level']);
                     break;
                 }
             }
@@ -89,9 +89,9 @@ class SystemAwardLevel extends BaseModel
     }
 
 
-    public static function sendBackOrderBrokerage($uid)
+    public static function sendBackOrderBrokerage($uid, $level)
     {
-        $list = UserBill::where(['type' => 'brokerage', 'category' => 'now_money', 'pm' => 1, 'status' => 0, 'uid' => $uid, 'title' => '套装极差奖'])->select();
+        $list = UserBill::where('award_level', '<=', $level)->where(['type' => 'brokerage', 'category' => 'now_money', 'pm' => 1, 'status' => 0, 'uid' => $uid, 'title' => '套装极差奖'])->select();
         if ($list) {
             self::beginTrans();
             try {

+ 1 - 0
app/models/system/SystemGroupLevel.php

@@ -83,6 +83,7 @@ class SystemGroupLevel extends BaseModel
             foreach ($level as $v) {
                 if ($spread['group_suit_num'] >= $v['level_num']) {
                     User::where('uid', $spread['uid'])->update(['group_level' => $v['id']]);
+                    SystemAwardLevel::sendBackOrderBrokerage($spread['uid'], $spread['award_level'] > $v['id'] ? $v['id'] : $spread['award_level']);
                     break;
                 }
             }

+ 2 - 2
app/models/user/UserBill.php

@@ -34,12 +34,12 @@ class UserBill extends BaseModel
 
     use ModelTrait;
 
-    public static function income($title, $uid, $category, $type, $number, $link_id = 0, $balance = 0, $mark = '', $status = 1)
+    public static function income($title, $uid, $category, $type, $number, $link_id = 0, $balance = 0, $mark = '', $status = 1, $award_level = 0)
     {
         $pm = 1;
         $add_time = date("Y-m-d H:i:s");
         $id = self::getkeytoid('bill_id');
-        return self::create(compact('title', 'uid', 'link_id', 'category', 'type', 'number', 'balance', 'mark', 'status', 'pm', 'add_time', 'id'));
+        return self::create(compact('title', 'uid', 'link_id', 'category', 'type', 'number', 'balance', 'mark', 'status', 'pm', 'add_time', 'id', 'award_level'));
     }
 
     public static function expend($title, $uid, $category, $type, $number, $link_id = 0, $balance = 0, $mark = '', $status = 1)