Browse Source

会员升级

Kirin 1 năm trước cách đây
mục cha
commit
658661b4fa
1 tập tin đã thay đổi với 94 bổ sung10 xóa
  1. 94 10
      app/controller/api/v1/PublicController.php

+ 94 - 10
app/controller/api/v1/PublicController.php

@@ -12,6 +12,7 @@ namespace app\controller\api\v1;
 
 
 use app\jobs\integral\IntegralJob;
+use app\model\order\StoreOrder;
 use app\model\user\UserIntegral;
 use app\services\activity\combination\StorePinkServices;
 use app\services\diy\DiyServices;
@@ -61,17 +62,100 @@ class PublicController extends BaseController
     public function test()
     {
         $list = UserIntegral::where('add_time', 'between', [1705766400, 1705852800])->where('extract_sun_real', null)->where('type', 0)
-            ->whereNotLike('mark', '%加速%')->select();
+            ->group('link_id')->field('link_id,count(id)')->select();
         var_dump($list);
-        $list2 = UserIntegral::where('add_time', 'between', [1705766400, 1705852800])->where('extract_sun_real', null)->where('type', 0)
-            ->whereLike('mark', '%加速%')->select();
-        var_dump($list2);
-        $list3 = UserIntegral::where('add_time', 'between', [1705766400, 1705852800])->where('extract_sun_real', null)->where('type', 1)
-            ->whereLike('mark', '%推荐%')->select();
-        var_dump($list3);
-        $list4 = UserIntegral::where('add_time', 'between', [1705766400, 1705852800])->where('extract_sun_real', null)->where('type', 1)
-            ->whereLike('mark', '%级差%')->select();
-        var_dump($list4);
+
+        $this->dealOrderIntegral(StoreOrder::get(383));
+
+    }
+
+    public function dealOrderIntegral($order, $price)
+    {
+        /** @var UserAwardIntegralServices $awardIntegralService */
+        $awardIntegralService = app()->make(UserAwardIntegralServices::class);
+        /** @var UserServices $userService */
+        $userService = app()->make(UserServices::class);
+        /** @var UserLevelServices $levelServices */
+        $levelServices = app()->make(UserLevelServices::class);
+        $user = $userService->getUserInfo($order['uid']);
+        $integral_price = $price;
+        $total_price = $order['total_price'];
+        return $awardIntegralService->transaction(function () use ($award_price, $levelServices, $awardIntegralService, $userService, $user, $integral_price, $total_price, $order) {
+            try {
+                //添加静态积分
+                $static_integral_ratio = sys_config('static_integral_ratio', 0);
+                $give_static_integral = bcdiv(bcmul($total_price, $static_integral_ratio), 100, 2);
+//                if ($give_static_integral > 0) {
+                $rate = sys_config('static_integral_rate', 3);
+                $extract_sum = bcmul($total_price, $rate, 2);
+                $mark = '购买商品,获得消费分';
+
+                var_dump($order['id']);
+                var_dump($give_static_integral);
+                var_dump($extract_sum);
+                var_dump($mark);
+//                $awardIntegralService->incIntegral($order['uid'], $integral_price, $give_static_integral, $total_price, 0, $extract_sum, $order['id'], $mark);
+//                }
+                //TODO 加动态积分
+                //推荐奖
+                $rate = sys_config('action_integral_rate', 3);
+                $spread = $userService->getUserInfo($user['spread_uid']);
+                if ($spread) {
+                    if ($awardIntegralService->getPaySum($spread['uid']) >= 1000) {
+                        $award_ratio = sys_config('recommend_integral', 0);
+                        $give_action_integral = bcdiv(bcmul($total_price, $award_ratio), 100, 2);
+                        if ($give_action_integral > 0) {
+                            $extract_sum = bcmul($give_action_integral, $rate, 2);
+                            $mark = '推荐用户' . $user['nickname'] . "({$user['uid']})" . '购买商品,获得推荐积分';
+                            var_dump($give_action_integral);
+                            var_dump($extract_sum);
+                            var_dump($mark);
+//                            $awardIntegralService->incIntegral($spread['uid'], $integral_price, $give_action_integral, $total_price, 1, $extract_sum, $order['id'], $mark);
+                        }
+                    }
+                    if ($awardIntegralService->getPaySum($spread['uid']) > 0) {
+                        $award_ratio = sys_config('recommend_speed_integral', 0);
+                        $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);
+                            var_dump($give_action_integral);
+                            var_dump($extract_sum);
+                            var_dump($mark);
+                        }
+                    }
+                }
+//                $levelServices->detection((int)$user['uid']);
+                $pass = [$user['uid']];
+                $send = 0;
+                while ($spread && !in_array($spread['uid'], $pass)) {
+                    //先发奖,再结算等级
+                    $level = $levelServices->getUserLevel($spread['uid']);
+                    $ratio = $level['levelInfo']['group_award'] ?? 0;
+                    $give_action_integral = bcdiv(bcmul($total_price, $ratio), 100, 2);
+                    if ($give_action_integral > $send) {
+                        $real_send = bcsub($give_action_integral, $send, 2);
+//                        if ($awardIntegralService->getHourExtractPaySum($spread['uid'], 24) > 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);
+//                        }
+                        var_dump($give_action_integral);
+                        var_dump($extract_sum);
+                        var_dump($mark);
+                        $send = $give_action_integral;
+                    }
+                    $levelServices->detection((int)$spread['uid']);
+                    $pass[] = $spread['uid'];
+                    $spread = $userService->getUserInfo($spread['spread_uid']);
+                }
+//                $this->autoExtract($awardIntegralService->getPrice());
+                return false;
+            } catch (\Throwable $e) {
+                return false;
+            }
+        });
 
     }