Browse Source

会员升级

Kirin 1 year ago
parent
commit
8dfee2f2ac

+ 40 - 3
app/jobs/integral/IntegralJob.php

@@ -70,8 +70,10 @@ class IntegralJob extends BaseJobs
                         $give_action_integral = bcdiv(bcmul($total_price, $award_ratio), 100, 2);
                         if ($give_action_integral > 0) {
                             $first = $awardIntegralService->getFirstStaticIntegral($spread['uid']);
-                            $mark = ',推荐用户' . $user['nickname'] . "({$user['uid']})" . '购买商品,获得加速积分';
-                            $awardIntegralService->incUpdateIntegral($first['id'], $integral_price, $give_action_integral, $mark);
+                            if ($first) {
+                                $mark = ',推荐用户' . $user['nickname'] . "({$user['uid']})" . '购买商品,获得加速积分';
+                                $awardIntegralService->incUpdateIntegral($first['id'], $integral_price, $give_action_integral, $mark);
+                            }
                         }
                     }
                 }
@@ -189,8 +191,20 @@ class IntegralJob extends BaseJobs
                 $sum = $info['extract_sum'];
             }
             $real_out = bcdiv(bcmul($sum, sys_config('extract_ratio', 0)), 100, 2);
+            $left = bcsub($info['num'], bcdiv(bcmul($info['num'], sys_config('extract_ratio', 0)), 100, 2), 5);
+            $to_top = bcdiv(bcmul($left, sys_config('extract_speed_ratio', 0)), 100, 5);
+            $extract_speed_num = sys_config('extract_speed_num', 0);
+            if ($extract_speed_num > 0) {
+                $to_top = bcdiv($to_top, $extract_speed_num, 5);
+            } else {
+                $to_top = 0;
+            }
+            $to_spread = 0;
+            if ($info['type'] == 0) {
+                $to_spread = bcdiv(bcmul($info['num'], sys_config('extract_spread_ratio', 0)), 100, 2);
+            }
+            $user = $userService->getUserInfo($info['uid']);
             if ($real_out > 0) {
-                $user = $userService->getUserInfo($info['uid']);
                 $mark = '用户积分出局,出局时价格' . $price;
                 $res = $res && $awardIntegralService->addLake(-$real_out, $info['id'], $mark);
 
@@ -218,6 +232,29 @@ class IntegralJob extends BaseJobs
                 $res = $res && $userService->bcInc($info['uid'], 'energy', $to_energy, 'uid');
                 $res = $res && $awardIntegralService->update($info['id'], ['handle' => 0, 'extract_sum_real' => $sum, 'status' => 1, 'extract_time' => time()]);
             }
+            if ($to_top > 0) {
+                $id = 0;
+                for ($i = 0; $i < $extract_speed_num; $i++) {
+                    $first = $awardIntegralService->getTopStaticIntegral($id);
+                    if ($first) {
+                        $mark = ',用户' . $user['nickname'] . "({$user['uid']})" . '积分出局,获得加速积分';
+                        $awardIntegralService->incUpdateIntegral($first['id'], 0, $to_top, $mark);
+                    } else {
+                        break;
+                    }
+                    $id = $first['id'];
+                }
+            }
+            if ($to_spread > 0) {
+                $spread = $userService->getUserInfo($user['spread_uid']);
+                if ($spread) {
+                    $first = $awardIntegralService->getFirstStaticIntegral($spread['uid']);
+                    if ($first) {
+                        $mark = ',推荐用户' . $user['nickname'] . "({$user['uid']})" . '消费分出局,获得加速积分';
+                        $awardIntegralService->incUpdateIntegral($first['id'], 0, $to_spread, $mark);
+                    }
+                }
+            }
         }
         if (count($infos) > 0) return $res && $this->autoExtract($awardIntegralService->getPrice());
         return $res;

+ 4 - 1
app/services/system/config/SystemConfigServices.php

@@ -1481,7 +1481,7 @@ WSS;
             'user_extract_wechat_status', 'user_extract_alipay_status', 'user_extract_bank',
             'pay_weixin_client_cert', 'pay_weixin_client_key', 'withdraw_fee', 'brokerage_level', 'brokerage_compute_type',
             'action_integral_rate', 'static_integral_rate', 'lake_ratio', 'static_integral_ratio', 'recommend_integral', 'recommend_speed_integral',
-            'extract_ratio', 'extract_brokerage_ratio'
+            'extract_ratio', 'extract_brokerage_ratio', 'extract_speed_ratio', 'extract_speed_num', 'extract_spread_ratio',
         ]);
 
         $build->rule([
@@ -1522,6 +1522,9 @@ WSS;
                 Build::inputNum('action_integral_rate', $data['action_integral_rate']['info'], $data['action_integral_rate']['value'])->min(0)->info($data['action_integral_rate']['desc']),
                 Build::inputNum('extract_ratio', $data['extract_ratio']['info'], $data['extract_ratio']['value'])->min(0)->info($data['extract_ratio']['desc']),
                 Build::inputNum('extract_brokerage_ratio', $data['extract_brokerage_ratio']['info'], $data['extract_brokerage_ratio']['value'])->min(0)->info($data['extract_brokerage_ratio']['desc']),
+                Build::inputNum('extract_speed_ratio', $data['extract_speed_ratio']['info'], $data['extract_speed_ratio']['value'])->min(0)->info($data['extract_speed_ratio']['desc']),
+                Build::inputNum('extract_speed_num', $data['extract_speed_num']['info'], $data['extract_speed_num']['value'])->min(0)->info($data['extract_speed_num']['desc']),
+                Build::inputNum('extract_spread_ratio', $data['extract_spread_ratio']['info'], $data['extract_spread_ratio']['value'])->min(0)->info($data['extract_spread_ratio']['desc']),
             ])->option('提现设置', [
                 Build::alert('微信提现到零钱为自动到账(需要开通微信:企业付款到零钱(商家转账到零钱),并确保配置微信支付证书正确,特别注意:需要配置场景、开启API发起转账),其他方式均需要手动转账', Alert::WARNING)->showIcon(true),
                 Build::radio('brokerage_type', $data['brokerage_type']['info'], $data['brokerage_type']['value'])->options($this->getOptions($data['brokerage_type']['parameter']))->control(1, [