|
|
@@ -124,6 +124,7 @@ class StoreOrderSuccessServices extends BaseServices
|
|
|
$spread_id = User::where('uid',$orderInfo['uid'])->value('spread_uid');
|
|
|
if ($spread_id>0){
|
|
|
self::spreadReward($spread_id,$orderInfo);
|
|
|
+ self::issueServiceFee($orderInfo['uid'],$orderInfo['order_type']);
|
|
|
}
|
|
|
return false !== $res;
|
|
|
}
|
|
|
@@ -202,6 +203,81 @@ class StoreOrderSuccessServices extends BaseServices
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 发放礼包/复购服务费
|
|
|
+ * 下级用户购买礼包或复购商品后,向上查找分销等级为V2或大于V2的用户,发放服务费
|
|
|
+ * @param int $uid 购买用户的UID
|
|
|
+ * @param int $orderType 订单类型:1=礼包商品,2=复购商品
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
+ public function issueServiceFee($uid, $orderType){
|
|
|
+ try {
|
|
|
+ // 根据订单类型获取服务费金额
|
|
|
+ $serviceAmount = $orderType === 1
|
|
|
+ ? floatval(sys_config('service_gift', 0))
|
|
|
+ : floatval(sys_config('service_repeat', 0));
|
|
|
+
|
|
|
+ if ($serviceAmount <= 0) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取分销等级表中grade >= 2的等级ID(V2及以上)
|
|
|
+ $qualifiedLevels = \app\model\agent\AgentLevel::where('grade', '>=', 2)
|
|
|
+ ->where('is_del', 0)
|
|
|
+ ->where('status', 1)
|
|
|
+ ->column('id');
|
|
|
+
|
|
|
+ if (empty($qualifiedLevels)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 从购买用户开始,向上查找第一个V2或以上等级的用户
|
|
|
+ $currentUid = $uid;
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 检查上级的分销等级是否在V2及以上
|
|
|
+ if (in_array($spreadAgentLevelId, $qualifiedLevels)) {
|
|
|
+ // 找到了,发放服务费
|
|
|
+ /** @var UserServices $userServices */
|
|
|
+ $userServices = app()->make(UserServices::class);
|
|
|
+ /** @var UserBrokerageServices $userBrokerageServices */
|
|
|
+ $userBrokerageServices = app()->make(UserBrokerageServices::class);
|
|
|
+
|
|
|
+ $incomeType = $orderType === 1 ? 'service_gift' : 'service_repeat';
|
|
|
+ $balance = $userServices->value(['uid' => $spreadUid], 'brokerage_price');
|
|
|
+
|
|
|
+ $userBrokerageServices->income($incomeType, $spreadUid, [
|
|
|
+ 'number' => $serviceAmount,
|
|
|
+ ], bcadd((string)$balance, (string)$serviceAmount, 2), 0);
|
|
|
+ $userServices->bcInc($spreadUid, 'brokerage_price', $serviceAmount, 'uid');
|
|
|
+
|
|
|
+ // 找到后停止查找
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ $currentUid = $spreadUid;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ @file_put_contents("quanju.txt", json_encode($e->getMessage())."-issueServiceFee报错内容\r\n", 8);
|
|
|
+ @file_put_contents("quanju.txt", json_encode($e->getLine())."-issueServiceFee报错位置\r\n", 8);
|
|
|
+ @file_put_contents("quanju.txt", json_encode($e->getFile())."-issueServiceFee报错文件\r\n", 8);
|
|
|
+ throw $e;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 发放核销订单线路奖励 定时任务
|
|
|
* 针对分销等级为4的用户,统计其直推下级团队中门店核销订单数量
|