fix(fsgx): 修复5个未修复Bug — 积分解耦/定时任务/积分日志/团队统计/历史补偿

Bug3: 解耦积分奖励与佣金发放,报单订单只要推荐人存在即触发积分,
不再依赖 brokeragePrice > 0;grantFrozenPointsByBrokerage 移至
佣金判断之前独立执行。

Bug1: 定时任务手动触发返回真实结果 —— 补充 fsgx_release_frozen_points
到 taskName 映射;runNow() try/catch 后抛出异常;控制器捕获并返回
fail;修复 SystemTimer listener catch 块运算符优先级 bug。

Bug5: PointsReleaseServices 每日释放同步写入 eb_user_bill,使管理
后台积分日志页面可见;UserPointServices::pointRecord $status 数组
补充 hjf_frozen_direct/hjf_frozen_umbrella/frozen_points_release 等
fsgx 类型映射,防止未知类型报错。

Bug2: hjfMember.js getTeamData 改为 POST 与路由匹配;loadTeamData
字段映射 total/totalLevel/order_count → 界面展示字段。

Bug4: 新增 HjfPatchMissingRewards 命令(hjf:patch-rewards),支持
扫描全量/指定订单补发缺失积分奖励,支持 --dry-run 预览;注册命令
到 config/console.php。

Made-with: Cursor
This commit is contained in:
mac
2026-03-24 20:40:46 +08:00
parent a41e0ab0f7
commit 451918bc73
11 changed files with 180 additions and 23 deletions

View File

@@ -275,6 +275,12 @@ class StoreOrderTakeServices extends BaseServices
}
//订单中取出
$brokeragePrice = $orderInfo['one_brokerage'] ?? 0;
// fsgx: 积分奖励独立于佣金金额,只要是报单订单且推荐人存在就触发
if ($isQueueOrder && $one_spread_uid > 0) {
$this->grantFrozenPointsByBrokerage($one_spread_uid, $brokeragePrice, $orderInfo);
}
// 返佣金额小于等于0 直接返回不返佣金
if ($brokeragePrice <= 0) {
return true;
@@ -299,9 +305,6 @@ class StoreOrderTakeServices extends BaseServices
//给上级发送获得佣金的模板消息
$this->sendBackOrderBrokerage($orderInfo, $one_spread_uid, $brokeragePrice);
// fsgx: 若推荐人有分销等级(创客及以上),在佣金发放时同步发放积分到 frozen_points
$this->grantFrozenPointsByBrokerage($one_spread_uid, $brokeragePrice, $orderInfo);
// 一级返佣成功 跳转二级返佣
$res = $res1 && $res2 && $this->backOrderBrokerageTwo($orderInfo, $userInfo, $isSelfBrokerage, $frozen_time);
return $res;
@@ -309,21 +312,21 @@ class StoreOrderTakeServices extends BaseServices
/**
* fsgx: 佣金发放后,按照 eb_agent_level 配置的「直推/伞下奖励积分」发放 frozen_points
* fsgx: 按照 eb_agent_level 配置的「直推/伞下奖励积分」发放 frozen_points
*
* 积分奖励规则:
* - 直推上级:获得其等级 direct_reward_points 配置的积分
* - 更上级(伞下):按级差规则获得 umbrella_reward_points 积分
* - 具体计算由 PointsRewardServices::reward() 统一实现,同 HjfOrderPayJob 逻辑保持一致
* - 具体计算由 PointsRewardServices::reward() 统一实现
*
* @param int $spreadUid 直推上级uid仅用于前置校验
* @param string|float $brokeragePrice 本次佣金金额(前置校验用
* @param string|float $brokeragePrice 本次佣金金额(仅日志参考,不再作为前置条件
* @param array $orderInfo 订单信息(需含 uid、order_id
*/
protected function grantFrozenPointsByBrokerage(int $spreadUid, $brokeragePrice, array $orderInfo): void
{
try {
if ($spreadUid <= 0 || $brokeragePrice <= 0) return;
if ($spreadUid <= 0) return;
$buyerUid = (int)($orderInfo['uid'] ?? 0);
$orderId = (string)($orderInfo['order_id'] ?? '');
if ($buyerUid <= 0 || $orderId === '') return;