Переглянути джерело

Merge branch 'master' of http://git.qiniu1314.com/Kirin/shenying

Kirin 1 рік тому
батько
коміт
be2cdb8ac7
1 змінених файлів з 47 додано та 11 видалено
  1. 47 11
      app/controller/api/v1/PublicController.php

+ 47 - 11
app/controller/api/v1/PublicController.php

@@ -46,6 +46,7 @@ use crmeb\services\CacheService;
 use crmeb\services\UploadService;
 use crmeb\basic\BaseController;
 use think\facade\Cache;
+use think\facade\Log;
 
 /**
  * 公共类
@@ -65,17 +66,52 @@ class PublicController extends BaseController
 
     public function test()
     {
-        $storeOrderServices = app()->make(StoreOrderServices::class);
-        $order_price = $storeOrderServices->search(['pid' => 0])
-            ->whereNotIn('type', [1, 2, 3, 5, 8])
-            ->where('paid', 1)
-            ->where('is_del', 0)
-            ->where('is_system_del', 0)
-            ->where('refund_status', 0)
-            ->whereIn('status', [2, 3])
-            ->field('sum(total_price-cost) as total_price_sum')->find();
-        var_dump(StoreOrder::getLastSql());
-        var_dump($order_price['total_price_sum']);
+        $this->dealOrderIntegral(StoreOrder::where('id', 723)->find());
+    }
+
+    public function dealOrderIntegral($order)
+    {
+        /** @var UserAwardIntegralServices $awardIntegralService */
+        $awardIntegralService = app()->make(UserAwardIntegralServices::class);
+        /** @var UserServices $userService */
+        $userService = app()->make(UserServices::class);
+        /** @var UserLevelServices $levelServices */
+        $levelServices = app()->make(UserLevelServices::class);
+        $integralJob = app()->make(IntegralJob::class);
+        $user = $userService->getUserInfo($order['uid']);
+        $integral_price = $awardIntegralService->getPrice($order['id']);
+        $total_price = $order['total_price'];
+        return $awardIntegralService->transaction(function () use ($integralJob, $levelServices, $awardIntegralService, $userService, $user, $integral_price, $total_price, $order) {
+            try {
+                $spread = $userService->getUserInfo($user['spread_uid']);
+                $rate = sys_config('static_integral_rate', 3);
+                $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->getPaySum($spread['uid']) >= 0 || $awardIntegralService->getHourExtractPaySum($spread['uid'], 24) > 0 || $spread['award_switch']) {
+                            $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);
+                        }
+                        $send = $give_action_integral;
+                    }
+                    $levelServices->detection((int)$spread['uid']);
+                    $pass[] = $spread['uid'];
+                    $spread = $userService->getUserInfo($spread['spread_uid']);
+                }
+                $integralJob->autoExtract($awardIntegralService->getPrice());
+                return true;
+            } catch (\Throwable $e) {
+                return false;
+            }
+        });
+
     }
 
     /**