Kirin 2 سال پیش
والد
کامیت
2ae2a19a77

+ 8 - 0
app/admin/controller/user/User.php

@@ -9,6 +9,8 @@ namespace app\admin\controller\user;
 
 use app\admin\controller\AuthController;
 use app\models\system\CardInfo;
+use app\models\system\SystemAwardLevel;
+use app\models\system\SystemGroupLevel;
 use app\models\user\UserBill;
 use crmeb\repositories\UserRepository;
 use crmeb\traits\CurdControllerTrait;
@@ -459,6 +461,8 @@ class User extends AuthController
         $f[] = Form::radio('is_promoter', '推广员', $user->getData('is_promoter'))->options([['value' => 1, 'label' => '开启'], ['value' => 0, 'label' => '关闭']]);
         $f[] = Form::select('spread_uid', '推荐人', (string)$user->getData('spread_uid'))->options(array_merge([['value' => 0, 'label' => '无']], UserModel::where('uid', '<>', $uid)->field('uid as value,nickname as label')->select()->toArray()))->filterable(true);
         $f[] = Form::radio('lock_spread', '推荐锁定', $user->getData('lock_spread'))->options([['value' => 1, 'label' => '锁定'], ['value' => 0, 'label' => '解锁']]);
+        $f[] = Form::select('group_level', '团队等级', $user->getData('group_level'))->options(array_merge([['value' => 0, 'label' => '无']], SystemGroupLevel::field('id as value,name as label')->select()->toArray()));
+        $f[] = Form::select('award_level', '级差等级', $user->getData('award_level'))->options(array_merge([['value' => 0, 'label' => '无']], SystemAwardLevel::field('id as value,name as label')->select()->toArray()));
 //        $f[] = Form::select('m_spread_uid', '异业推荐人', (string)$user->getData('m_spread_uid'))->options(array_merge([['value' => 0, 'label' => '无']], UserModel::where('uid', '<>', $uid)->field('uid as value,nickname as label')->select()->toArray()))->filterable(true);
         $f[] = Form::radio('status', '状态', $user->getData('status'))->options([['value' => 1, 'label' => '开启'], ['value' => 0, 'label' => '锁定']]);
         $form = Form::make_post_form('添加用户通知', $f, Url::buildUrl('update', array('uid' => $uid)), 5);
@@ -481,6 +485,8 @@ class User extends AuthController
             ['integration', 0],
             ['status', 0],
             ['spread_uid', 0],
+            ['group_level', 0],
+            ['award_level', 0],
 //            ['m_spread_uid', 0],
             ['lock_spread', 0],
         ]);
@@ -573,6 +579,8 @@ class User extends AuthController
         $edit['mark'] = $data['mark'];
         $edit['is_promoter'] = $data['is_promoter'];
         $edit['lock_spread'] = $data['lock_spread'];
+        if ($data['group_level'] > $user['group_level']) $edit['group_level'] = $data['group_level'];
+        if ($data['award_level'] > $user['award_level']) $edit['award_level'] = $data['award_level'];
         if ($edit) $res3 = UserModel::edit($edit, $uid);
         else $res3 = true;
         if ($res1 && $res2 && $res3 && $res_sp) $res = true;

+ 4 - 0
app/admin/controller/user/UserAwardLevel.php

@@ -34,6 +34,8 @@ class UserAwardLevel extends AuthController
         $field[] = Form::input('name', '等级名称', isset($vipinfo) ? $vipinfo->name : '')->col(Form::col(24));
         $field[] = Form::number('suit_award', "套装极差奖", isset($vipinfo) ? $vipinfo->suit_award : 0)->min(0)->col(8);
         $field[] = Form::number('level_num', "直推套装单数", isset($vipinfo) ? $vipinfo->level_num : 0)->min(0)->col(8);
+        $field[] = Form::number('company_award', "分公司奖", isset($vipinfo) ? $vipinfo->company_award : 0)->min(0)->col(8);
+        $field[] = Form::number('operate_award', "营运公司奖", isset($vipinfo) ? $vipinfo->operate_award : 0)->min(0)->col(8);
         $field[] = Form::radio('is_show', '是否显示', isset($vipinfo) ? $vipinfo->is_show : 0)->options([['label' => '显示', 'value' => 1], ['label' => '隐藏', 'value' => 0]])->col(8);
         $field[] = Form::radio('system_award', '参与加权分红', isset($vipinfo) ? $vipinfo->system_award : 0)->options([['label' => '是', 'value' => 1], ['label' => '否', 'value' => 0]])->col(8);
         $field[] = Form::textarea('explain', '等级说明', isset($vipinfo) ? $vipinfo->explain : '');
@@ -54,6 +56,8 @@ class UserAwardLevel extends AuthController
             ['name', ''],
             ['suit_award', 0],
             ['level_num', 0],
+            ['company_award', 0],
+            ['operate_award', 0],
             ['is_show', ''],
             ['explain', ''],
             ['system_award', 0],

+ 4 - 0
app/admin/controller/user/UserGroupLevel.php

@@ -36,6 +36,8 @@ class UserGroupLevel extends AuthController
         $field[] = Form::number('group_award', "普通商品极差奖(%)", isset($vipinfo) ? $vipinfo->group_award : 0)->min(0)->col(8);
         $field[] = Form::number('integral_group_award', "积分商品极差奖(%)", isset($vipinfo) ? $vipinfo->integral_group_award : 0)->min(0)->col(8);
         $field[] = Form::number('level_num', "伞下套装单数", isset($vipinfo) ? $vipinfo->level_num : 0)->min(0)->col(8);
+        $field[] = Form::number('company_award', "分公司奖", isset($vipinfo) ? $vipinfo->company_award : 0)->min(0)->col(8);
+        $field[] = Form::number('operate_award', "营运公司奖", isset($vipinfo) ? $vipinfo->operate_award : 0)->min(0)->col(8);
         $field[] = Form::radio('system_award', '参与加权分红', isset($vipinfo) ? $vipinfo->system_award : 0)->options([['label' => '是', 'value' => 1], ['label' => '否', 'value' => 0]])->col(8);
         $field[] = Form::radio('is_show', '是否显示', isset($vipinfo) ? $vipinfo->is_show : 0)->options([['label' => '显示', 'value' => 1], ['label' => '隐藏', 'value' => 0]])->col(8);
         $field[] = Form::textarea('explain', '等级说明', isset($vipinfo) ? $vipinfo->explain : '');
@@ -58,6 +60,8 @@ class UserGroupLevel extends AuthController
             ['group_award', 0],
             ['integral_group_award', 0],
             ['level_num', 0],
+            ['company_award', 0],
+            ['operate_award', 0],
             ['is_show', ''],
             ['system_award', 0],
             ['explain', ''],

+ 56 - 52
app/models/store/StoreOrder.php

@@ -2539,6 +2539,8 @@ class StoreOrder extends BaseModel
         $layer = 1;
         $layer_award = sys_data('suit_sub_award');
         $layer_award_real = [];
+        $company_award = false;
+        $operate_award = false;
         foreach ($layer_award as $v) {
             $layer_award_real[$v['layer']] = $v;
         }
@@ -2553,65 +2555,67 @@ class StoreOrder extends BaseModel
                 $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'], bcadd($balance, $real_send, 2), $mark);
-                            $res = $res && User::where('uid', $spread['uid'])->inc('brokerage_price', $real_send)->update();
-                            $balance = bcadd($balance, $real_send, 2);
-                            $send = $brokeragePrice;
+//                $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'], bcadd($balance, $real_send, 2), $mark);
+                        $res = $res && User::where('uid', $spread['uid'])->inc('brokerage_price', $real_send)->update();
+                        $balance = bcadd($balance, $real_send, 2);
+                        $send = $brokeragePrice;
+                    }
+                }
+                if ($group_level['company_award'] > 0 || $award_level['company_award'] > 0 && !$company_award) {
+                    $ratio = ($group_level['company_award'] > $award_level['company_award'] ? $group_level['company_award'] : $award_level['company_award']);
+                    $spread_up = User::where('uid', $spread['uid'])->find();
+                    $group_levels = SystemGroupLevel::where('company_award', '>', 0)->column('id');
+                    $award_levels = SystemAwardLevel::where('company_award', '>', 0)->column('id');
+                    while ($spread_up) {
+                        if (in_array($spread_up['group_level'], $group_levels) || in_array($spread_up['award_level'], $award_levels)) {
+                            $ratio -= 1;
+                            break;
                         }
+                        $spread_up = User::where('uid', $spread_up['uid'])->find();
                     }
-                } 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($balance, $real_send, 2), $mark);
-                            $res = $res && User::where('uid', $spread['uid'])->inc('brokerage_price', $real_send)->update();
-                            $balance = bcadd($balance, $real_send, 2);
-                            $send = $brokeragePrice;
+                    $c = [];
+                    $p = [$spread['uid']];
+                    while ($p) {
+                        $child = User::where('spread_uid', 'in', $p)->where(function ($query) use ($group_levels, $award_levels) {
+                            $query->where('group_level', 'in', $group_levels)->whereOr('award_level', 'in', $award_levels);
+                        })->column('uid');
+                        if (count($child)) {
+                            $c = array_merge($c, $child);
                         }
+                        $p = User::where('spread_uid', 'in', $p)->where('uid', 'not in', $child)->column('uid');
                     }
-                    $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($balance, $real_send, 2), $mark, 0, $big);
-                            $send = $brokeragePrice;
+                    $ratio += count(array_unique($c));
+                    if ($ratio > 0) {
+                        $op_award = bcmul($suit_price, bcdiv($ratio, 100, 4), 2);
+                        if ($op_award > 0) {
+                            $mark = '用户' . $userInfo['nickname'] . '(' . $order['uid'] . ')' . '购买套装商品,获得运营公司奖励' . $op_award;
+                            $res = $res && UserBill::income('运营公司奖', $spread['uid'], 'now_money', 'brokerage', $op_award, $order['id'], bcadd($balance, $op_award, 2), $mark);
+                            $res = $res && User::where('uid', $spread['uid'])->inc('brokerage_price', $op_award)->update();
+                            $balance = bcadd($balance, $op_award, 2);
                         }
                     }
+                    $company_award = true;
+                }
+                if ($group_level['operate_award'] > 0 || $award_level['operate_award'] > 0 && !$operate_award) {
+                    $ratio = ($group_level['operate_award'] > $award_level['operate_award'] ? $group_level['operate_award'] : $award_level['operate_award']);
+                    if ($ratio > 0) {
+                        $op_award = bcmul($suit_price, bcdiv($ratio, 100, 4), 2);
+                        if ($op_award > 0) {
+                            $mark = '用户' . $userInfo['nickname'] . '(' . $order['uid'] . ')' . '购买套装商品,获得运营公司奖励' . $op_award;
+                            $res = $res && UserBill::income('运营公司奖', $spread['uid'], 'now_money', 'brokerage', $op_award, $order['id'], bcadd($balance, $op_award, 2), $mark);
+                            $res = $res && User::where('uid', $spread['uid'])->inc('brokerage_price', $op_award)->update();
+                            $balance = bcadd($balance, $op_award, 2);
+                        }
+                    }
+                    $operate_award = true;
                 }
-//                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;
-//                            }
-//                        }
-//                    }
-//                }
             }
             $lay_award = $layer_award_real[$layer] ?? null;
             if ($lay_award) {