WIN-2308041133\Administrator il y a 1 semaine
Parent
commit
f2df826d2e
1 fichiers modifiés avec 55 ajouts et 0 suppressions
  1. 55 0
      app/services/order/StoreOrderSuccessServices.php

+ 55 - 0
app/services/order/StoreOrderSuccessServices.php

@@ -14,11 +14,15 @@ namespace app\services\order;
 
 use app\adminapi\controller\v1\marketing\StoreCouponUser;
 use app\dao\order\StoreOrderDao;
+use app\model\user\User;
 use app\services\activity\coupon\StoreCouponIssueServices;
 use app\services\activity\lottery\LuckLotteryServices;
 use app\services\activity\combination\StorePinkServices;
 use app\services\BaseServices;
 use app\services\pay\PayServices;
+
+use app\services\user\UserBrokerageServices;
+use app\services\user\UserServices;
 use crmeb\exceptions\ApiException;
 
 /**
@@ -117,6 +121,10 @@ class StoreOrderSuccessServices extends BaseServices
                 }
             }
         }
+        $spread_id = User::where('uid',$orderInfo['uid'])->value('spread_id');
+        if ($spread_id>0){
+            self::spreadReward($spread_id,$orderInfo);
+        }
         return false !== $res;
     }
 
@@ -141,5 +149,52 @@ class StoreOrderSuccessServices extends BaseServices
         $issueService->setCoupon($coupon, $user);
         return true;
     }
+    public function spreadReward($spread_uid, $orderInfo){
+        try {
+            // 获取上级的分销等级
+            $agent_level = User::where('uid', $spread_uid)->value('agent_level');
+            if (!$agent_level) {
+                return false;
+            }
+
+            // 获取分销等级详细信息
+            $agentLevelInfo = \app\model\agent\AgentLevel::where('id', $agent_level)->find();
+            if (!$agentLevelInfo) {
+                return false;
+            }
+            $agentLevelInfo = $agentLevelInfo->toArray();
+
+            // 发放优惠券奖励
+            if ($agentLevelInfo['free_issue'] > 0) {
+                $this->grantUser($agentLevelInfo['free_issue'], $spread_uid);
+            }
+
+            // 发放佣金奖励
+            if ($agentLevelInfo['spread_brokerage'] > 0) {
+                // 计算佣金金额:订单价格 * spread_brokerage / 100
+                $brokerageAmount = bcmul((string)$orderInfo['total_price'], (string)($agentLevelInfo['spread_brokerage'] / 100), 2);
+                if ($brokerageAmount > 0) {
+                    /** @var UserServices $userServices */
+                    $userServices = app()->make(UserServices::class);
+                    /** @var UserBrokerageServices $userBrokerageServices */
+                    $userBrokerageServices = app()->make(UserBrokerageServices::class);
+                    $balance = $userServices->value(['uid' => $spread_uid], 'brokerage_price');
+                    $nickname = User::where('uid',$orderInfo['uid'])->value('nickname');
+                    $userBrokerageServices->income('get_brokerage', $spread_uid, [
+                        'nickname' => $nickname,
+                        'pay_price' => $orderInfo['total_price'],
+                        'number' => $brokerageAmount,
+                    ], bcadd((string)$balance, (string)$brokerageAmount, 2), $orderInfo['id'] ?? 0);
+                    $userServices->bcInc($spread_uid, 'brokerage_price', $brokerageAmount, 'uid');
+                }
+            }
 
+            return true;
+        } catch (\Exception $e) {
+            @file_put_contents("quanju.txt", json_encode($e->getMessage())."-spreadReward报错内容\r\n", 8);
+            @file_put_contents("quanju.txt", json_encode($e->getLine())."-spreadReward报错位置\r\n", 8);
+            @file_put_contents("quanju.txt", json_encode($e->getFile())."-spreadReward报错文件\r\n", 8);
+            throw $e;
+        }
+    }
 }