|
|
@@ -187,6 +187,9 @@ class StoreOrderSuccessServices extends BaseServices
|
|
|
'number' => $brokerageAmount,
|
|
|
], bcadd((string)$balance, (string)$brokerageAmount, 2), $orderInfo['id'] ?? 0);
|
|
|
$userServices->bcInc($spread_uid, 'brokerage_price', $brokerageAmount, 'uid');
|
|
|
+
|
|
|
+ // 发放平级奖励
|
|
|
+ $this->issueSameLevelReward($spread_uid, $brokerageAmount);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -200,7 +203,7 @@ class StoreOrderSuccessServices extends BaseServices
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 发放核销订单线路奖励
|
|
|
+ * 发放核销订单线路奖励 定时任务
|
|
|
* 针对分销等级为4的用户,统计其直推下级团队中门店核销订单数量
|
|
|
* 当两条线都达到200单时,奖励verific_reward金额
|
|
|
* 当第三条线达到200单时,再奖励more_reward金额
|
|
|
@@ -329,11 +332,13 @@ class StoreOrderSuccessServices extends BaseServices
|
|
|
// 发放verific_reward(两条线达标奖励)
|
|
|
if ($needVerificReward && $verificReward > 0) {
|
|
|
$userBrokerageServices->income('line_two_reward', $spread_uid, [
|
|
|
- 'pay_price' => 0,
|
|
|
+// 'pay_price' => 0,
|
|
|
'number' => $verificReward,
|
|
|
], bcadd((string)$balance, (string)$verificReward, 2), 0);
|
|
|
$userServices->bcInc($spread_uid, 'brokerage_price', $verificReward, 'uid');
|
|
|
$balance = bcadd((string)$balance, (string)$verificReward, 2);
|
|
|
+ // 发放平级奖励
|
|
|
+ $this->issueSameLevelReward($spread_uid, $verificReward);
|
|
|
}
|
|
|
|
|
|
// 发放more_reward(第三条及以上线达标,可能多次)
|
|
|
@@ -341,11 +346,13 @@ class StoreOrderSuccessServices extends BaseServices
|
|
|
$needIssueMoreCount = $moreRewardCount - $issuedMoreCount;
|
|
|
for ($i = 0; $i < $needIssueMoreCount; $i++) {
|
|
|
$userBrokerageServices->income('line_more_reward', $spread_uid, [
|
|
|
- 'pay_price' => 0,
|
|
|
+// 'pay_price' => 0,
|
|
|
'number' => $moreReward,
|
|
|
], bcadd((string)$balance, (string)$moreReward, 2), 0);
|
|
|
$userServices->bcInc($spread_uid, 'brokerage_price', $moreReward, 'uid');
|
|
|
$balance = bcadd((string)$balance, (string)$moreReward, 2);
|
|
|
+ // 发放平级奖励
|
|
|
+ $this->issueSameLevelReward($spread_uid, $moreReward);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -390,5 +397,101 @@ class StoreOrderSuccessServices extends BaseServices
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 发放平级奖励
|
|
|
+ * 无限向上查找上级,如果上级的分销等级等于指定等级,发放平级奖励
|
|
|
+ * @param int $rewardUid 获得奖励的用户UID
|
|
|
+ * @param float $rewardAmount 奖励金额
|
|
|
+ * @param int $agentLevelId 分销等级ID
|
|
|
+ * @param float $sameLevelRatio 平级奖励比例
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
+ public function sameLevelReward($rewardUid, $rewardAmount, $agentLevelId, $sameLevelRatio){
|
|
|
+ try {
|
|
|
+ if ($rewardAmount <= 0 || $sameLevelRatio <= 0) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /** @var UserServices $userServices */
|
|
|
+ $userServices = app()->make(UserServices::class);
|
|
|
+ /** @var UserBrokerageServices $userBrokerageServices */
|
|
|
+ $userBrokerageServices = app()->make(UserBrokerageServices::class);
|
|
|
+
|
|
|
+ // 计算平级奖励金额:奖励金额 * 平级比例 / 100
|
|
|
+ $sameLevelAmount = bcmul((string)$rewardAmount, (string)($sameLevelRatio / 100), 2);
|
|
|
+ if ($sameLevelAmount <= 0) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 从奖励用户开始,无限向上查找上级
|
|
|
+ $currentUid = $rewardUid;
|
|
|
+ while ($currentUid > 0) {
|
|
|
+ // 查询当前用户的上级
|
|
|
+ $spreadUid = User::where('uid', $currentUid)->value('spread_uid');
|
|
|
+ if (!$spreadUid || $spreadUid <= 0) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询上级的分销等级
|
|
|
+ $spreadAgentLevelId = User::where('uid', $spreadUid)->value('agent_level');
|
|
|
+ if (!$spreadAgentLevelId) {
|
|
|
+ $currentUid = $spreadUid;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果上级的分销等级ID等于指定的等级ID,发放平级奖励
|
|
|
+ if ($spreadAgentLevelId == $agentLevelId) {
|
|
|
+ $balance = $userServices->value(['uid' => $spreadUid], 'brokerage_price');
|
|
|
+ $userBrokerageServices->income('get_same_level_reward', $spreadUid, [
|
|
|
+ 'pay_price' => 0,
|
|
|
+ 'number' => $sameLevelAmount,
|
|
|
+ ], bcadd((string)$balance, (string)$sameLevelAmount, 2), 0);
|
|
|
+ $userServices->bcInc($spreadUid, 'brokerage_price', $sameLevelAmount, 'uid');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 继续向上查找
|
|
|
+ $currentUid = $spreadUid;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ @file_put_contents("quanju.txt", json_encode($e->getMessage())."-sameLevelReward报错内容\r\n", 8);
|
|
|
+ @file_put_contents("quanju.txt", json_encode($e->getLine())."-sameLevelReward报错位置\r\n", 8);
|
|
|
+ @file_put_contents("quanju.txt", json_encode($e->getFile())."-sameLevelReward报错文件\r\n", 8);
|
|
|
+ throw $e;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发放平级奖励(内部调用方法)
|
|
|
+ * 查询所有设置平级奖的等级并发放奖励
|
|
|
+ * @param int $rewardUid 获得奖励的用户UID
|
|
|
+ * @param float $rewardAmount 奖励金额
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
+ private function issueSameLevelReward($rewardUid, $rewardAmount){
|
|
|
+ try {
|
|
|
+ // 查询所有设置了平级奖的分销等级(equal_award > 0)
|
|
|
+ $agentLevelsWithAward = \app\model\agent\AgentLevel::where('equal_award', '>', 0)
|
|
|
+ ->column('equal_award', 'id');
|
|
|
+
|
|
|
+ if (empty($agentLevelsWithAward)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 遍历所有设置了平级奖的等级,发放奖励
|
|
|
+ foreach ($agentLevelsWithAward as $agentLevelId => $equalAward) {
|
|
|
+ $this->sameLevelReward($rewardUid, $rewardAmount, $agentLevelId, $equalAward);
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ @file_put_contents("quanju.txt", json_encode($e->getMessage())."-issueSameLevelReward报错内容\r\n", 8);
|
|
|
+ @file_put_contents("quanju.txt", json_encode($e->getLine())."-issueSameLevelReward报错位置\r\n", 8);
|
|
|
+ @file_put_contents("quanju.txt", json_encode($e->getFile())."-issueSameLevelReward报错文件\r\n", 8);
|
|
|
+ throw $e;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
}
|