feat(fsgx): 完善报单佣金与积分奖励落库链路

放宽报单/人人分销场景下的推广员校验,确保订单返现佣金可落库;并将直推/伞下积分奖励补充写入 user_bill 明细,支持后台页面可见与审计追踪,同时更新对应 PRD 和问题记录。

Made-with: Cursor
This commit is contained in:
apple
2026-03-24 20:10:42 +08:00
parent c2420e7393
commit a41e0ab0f7
6 changed files with 76 additions and 17 deletions

View File

@@ -243,6 +243,7 @@ class StoreOrderTakeServices extends BaseServices
// 营销产品不返佣金但报单商品is_queue_goods=1无论 type 均需参与返佣
$isQueueOrder = !empty($orderInfo['is_queue_goods']);
$relaxBrokeragePromoter = $isQueueOrder || (int)sys_config('store_brokerage_statu', 1) === 2;
if (!$isQueueOrder && (!isset($orderInfo['type']) || in_array($orderInfo['type'], [4, 5, 7, 8]))) {
return true;
}
@@ -266,10 +267,10 @@ class StoreOrderTakeServices extends BaseServices
$broken_time = intval(sys_config('extract_time'));
$frozen_time = time() + $broken_time * 86400;
//检测是否是分销员
//检测是否是分销员(报单/人人分销时不强制要求 is_promoter否则周期返现与积分奖励无法落库
/** @var UserServices $userServices */
$userServices = app()->make(UserServices::class);
if (!$userServices->checkUserPromoter($one_spread_uid)) {//一级不是分销员 直接二级返佣
if (!$relaxBrokeragePromoter && !$userServices->checkUserPromoter($one_spread_uid)) {//一级不是分销员 直接二级返佣
return $this->backOrderBrokerageTwo($orderInfo, $userInfo, $isSelfBrokerage, $frozen_time);
}
//订单中取出
@@ -327,9 +328,11 @@ class StoreOrderTakeServices extends BaseServices
$orderId = (string)($orderInfo['order_id'] ?? '');
if ($buyerUid <= 0 || $orderId === '') return;
$orderDbId = (int)($orderInfo['id'] ?? 0);
/** @var PointsRewardServices $pointsServices */
$pointsServices = app()->make(PointsRewardServices::class);
$pointsServices->reward($buyerUid, $orderId);
$pointsServices->reward($buyerUid, $orderId, $orderDbId);
} catch (\Throwable $e) {
Log::error('fsgx grantFrozenPointsByBrokerage error: ' . $e->getMessage());
}
@@ -367,8 +370,9 @@ class StoreOrderTakeServices extends BaseServices
$spread_two_uid = $isSelfbrokerage ? $userInfoTwo['uid'] : $userInfoTwo['spread_uid'];
}
$spread_two_uid = (int)$spread_two_uid;
// 获取后台分销类型 1 指定分销 2 人人分销
if (!$userServices->checkUserPromoter($spread_two_uid)) {
$isQueueOrder = !empty($orderInfo['is_queue_goods']);
$relaxBrokeragePromoter = $isQueueOrder || (int)sys_config('store_brokerage_statu', 1) === 2;
if (!$relaxBrokeragePromoter && !$userServices->checkUserPromoter($spread_two_uid)) {
return true;
}
//订单中取出