浏览代码

会员升级

Kirin 2 年之前
父节点
当前提交
072cf3999d

+ 1 - 1
app/controller/api/v1/PublicController.php

@@ -50,7 +50,7 @@ class PublicController extends BaseController
 
     public function test()
     {
-        var_dump(sys_config('lake_ratio', 0));
+        var_dump(app()->make(UserAwardIntegralServices::class)->getIntegralsOverExtract(0));
     }
 
     /**

+ 71 - 13
app/jobs/integral/IntegralJob.php

@@ -58,11 +58,11 @@ class IntegralJob extends BaseJobs
                     if ($awardIntegralService->getPaySum($spread['uid']) >= 1000 || $awardIntegralService->getHourExtractPaySum($spread['uid'], 24) >= 1000) {
                         $award_ratio = sys_config('recommend_integral', 0);
                         $give_action_integral = bcdiv(bcmul($award_price, $award_ratio), 100, 2);
-//                        if ($give_action_integral > 0) {
-                        $extract_sum = bcmul($give_action_integral, $rate, 2);
-                        $mark = '推荐用户' . $user['nickname'] . "({$user['uid']})" . '购买商品,获得推荐积分';
-                        $awardIntegralService->incIntegral($spread['uid'], $integral_price, $give_action_integral, $total_price, 1, $extract_sum, $order['id'], $mark);
-//                        }
+                        if ($give_action_integral > 0) {
+                            $extract_sum = bcmul($give_action_integral, $rate, 2);
+                            $mark = '推荐用户' . $user['nickname'] . "({$user['uid']})" . '购买商品,获得推荐积分';
+                            $awardIntegralService->incIntegral($spread['uid'], $integral_price, $give_action_integral, $total_price, 1, $extract_sum, $order['id'], $mark);
+                        }
                     }
                 }
                 $levelServices->detection((int)$user['uid']);
@@ -73,14 +73,14 @@ class IntegralJob extends BaseJobs
                     $level = $levelServices->getUserLevel($spread['uid']);
                     $ratio = $level['levelInfo']['group_award'] ?? 0;
                     $give_action_integral = bcdiv(bcmul($award_price, $ratio), 100, 2);
-//                    if ($give_action_integral > $send) {
-                    $real_send = bcsub($give_action_integral, $send, 2);
-                    if ($real_send < 0) $real_send = 0;
-                    $extract_sum = bcmul($real_send, $rate, 2);
-                    $mark = '团队用户' . $user['nickname'] . "({$user['uid']})" . '购买商品,获得团队级差积分';
-                    $awardIntegralService->incIntegral($spread['uid'], $integral_price, $real_send, $total_price, 1, $extract_sum, $order['id'], $mark);
-                    if ($real_send > 0) $send = $give_action_integral;
-//                    }
+                    if ($give_action_integral > $send) {
+                        $real_send = bcsub($give_action_integral, $send, 2);
+                        if ($real_send < 0) $real_send = 0;
+                        $extract_sum = bcmul($real_send, $rate, 2);
+                        $mark = '团队用户' . $user['nickname'] . "({$user['uid']})" . '购买商品,获得团队级差积分';
+                        $awardIntegralService->incIntegral($spread['uid'], $integral_price, $real_send, $total_price, 1, $extract_sum, $order['id'], $mark);
+                        if ($real_send > 0) $send = $give_action_integral;
+                    }
                     $levelServices->detection((int)$spread['uid']);
                     $pass[] = $spread['uid'];
                     $spread = $userService->getUserInfo($spread['spread_uid']);
@@ -152,6 +152,64 @@ class IntegralJob extends BaseJobs
         });
     }
 
+
+    public function autoExtract($price)
+    {
+        /** @var UserAwardIntegralServices $awardIntegralService */
+        $awardIntegralService = app()->make(UserAwardIntegralServices::class);
+        /** @var UserBrokerageServices $brokerageService */
+        $brokerageService = app()->make(UserBrokerageServices::class);
+        /** @var UserBillServices $billService */
+        $billService = app()->make(UserBillServices::class);
+        /** @var UserServices $userService */
+        $userService = app()->make(UserServices::class);
+        $info = $awardIntegralService->getIntegralsOverExtract($price);
+        return $awardIntegralService->transaction(function () use ($info, $awardIntegralService, $brokerageService, $billService, $userService) {
+            if ($info['status'] != 0) {
+                $awardIntegralService->update($info['id'], ['handle' => 0]);
+                return true;
+            }
+            $price = $awardIntegralService->getPrice();
+            $sum = bcmul($price, $info['num'], 2);
+            if ($sum > $info['extract_sum']) {
+                $sum = $info['extract_sum'];
+            }
+            $res = true;
+            $real_out = bcdiv(bcmul($sum, sys_config('extract_ratio', 0)), 100, 2);
+            if ($real_out > 0) {
+                $user = $userService->getUserInfo($info['uid']);
+                $mark = '用户积分出局,出局时价格' . $price;
+                $res = $res && $awardIntegralService->addLake(-$real_out, $info['id'], $mark);
+
+                $to_brokerage = bcdiv(bcmul($real_out, sys_config('extract_brokerage_ratio', 0)), 100, 2);
+                $balance = bcadd($user['brokerage_price'], $to_brokerage, 2);
+                $res = $res && $brokerageService->income('extract_integral', $info['uid'], [
+                        'type' => $info['type'] ? '动态积分' : '静态积分',
+                        'price' => round($price, 2),
+                        'integral_num' => $info['num'],
+                        'number' => floatval($to_brokerage),
+                        'frozen_time' => 0
+                    ], $balance, $info['id']);
+                // 添加用户佣金
+                $res = $res && $userService->bcInc($info['uid'], 'brokerage_price', $to_brokerage, 'uid');
+
+                $to_energy = bcsub($real_out, $to_brokerage, 2);
+                $balance = bcadd($user['energy'], $to_energy, 2);
+                $res = $res && $billService->income('extract_integral', $info['uid'], [
+                        'type' => $info['type'] ? '动态积分' : '静态积分',
+                        'price' => round($price, 2),
+                        'integral_num' => $info['num'],
+                        'number' => floatval($to_energy),
+                    ], $balance, $info['id']);
+                // 添加用户佣金
+                $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()]);
+            }
+            return $res;
+        });
+    }
+
     /**
      * 减积分
      * @param int $uid 用户

+ 11 - 0
app/model/user/UserIntegral.php

@@ -128,4 +128,15 @@ class UserIntegral extends BaseModel
     {
         $query->where('link_id', $value);
     }
+
+
+    /**
+     * 订单号
+     * @param Model $query
+     * @param $value
+     */
+    public function searchExtractPriceAttr($query, $value)
+    {
+        $query->where('(num *'.$value.')>=extract_sum');
+    }
 }

+ 17 - 0
app/services/user/UserAwardIntegralServices.php

@@ -82,6 +82,23 @@ class UserAwardIntegralServices extends BaseServices
     }
 
 
+    /**
+     * 获取单条数据
+     * @param string|float $price
+     * @param string $field
+     * @return array
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public function getIntegralsOverExtract($price, string $field = '*')
+    {
+        if (!$price) $price = $this->getPrice();
+        return $this->dao->getList(['extract_price' => $price], $field);
+
+    }
+
+
     /**
      * 获取单条数据
      * @return float