feat(hjf): 公排入队可配置,默认关闭时同步发放积分奖励
- 新增 hjf_queue_pool_enable(迁移 SQL),后台公排配置读写统一为该键 - Pay 监听:关闭公排时同步执行等级检查与 PointsRewardServices::reward,开启时仍派发 HjfOrderPayJob - PointsRewardServices: bcInc 增量传 string,避免 PHP 类型错误 - hjf:patch-rewards 补偿命令补充等级检查与正确的幂等条件 - uniapp vue.config.js 本地 API 代理调整(H5 开发) - docs/issues-0323-1 更新 Made-with: Cursor
This commit is contained in:
@@ -3,7 +3,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace app\command;
|
||||
|
||||
use app\services\agent\AgentLevelServices;
|
||||
use app\services\hjf\PointsRewardServices;
|
||||
use app\services\user\UserServices;
|
||||
use think\console\Command;
|
||||
use think\console\Input;
|
||||
use think\console\input\Option;
|
||||
@@ -57,21 +59,22 @@ class HjfPatchMissingRewards extends Command
|
||||
|
||||
/** @var PointsRewardServices $pointsService */
|
||||
$pointsService = app()->make(PointsRewardServices::class);
|
||||
/** @var AgentLevelServices $agentLevelServices */
|
||||
$agentLevelServices = app()->make(AgentLevelServices::class);
|
||||
/** @var UserServices $userServices */
|
||||
$userServices = app()->make(UserServices::class);
|
||||
|
||||
$patched = 0;
|
||||
$skipped = 0;
|
||||
|
||||
foreach ($orders as $order) {
|
||||
// 幂等检查:points_release_log 中是否已有 reward_direct/reward_umbrella 记录
|
||||
$hasRewardLog = Db::name('points_release_log')
|
||||
->where('order_id', $order['order_id'])
|
||||
->where('type', 'reward_direct')
|
||||
->whereIn('type', ['reward_direct', 'reward_umbrella'])
|
||||
->count();
|
||||
|
||||
$hasRewardBill = Db::name('user_bill')
|
||||
->where('link_id', $order['id'])
|
||||
->where('type', 'hjf_frozen_direct')
|
||||
->count();
|
||||
|
||||
if ($hasRewardLog > 0 || $hasRewardBill > 0) {
|
||||
if ($hasRewardLog > 0) {
|
||||
$skipped++;
|
||||
$output->writeln(sprintf(' [SKIP] 订单 #%d (%s) 已有积分奖励记录', $order['id'], $order['order_id']));
|
||||
continue;
|
||||
@@ -93,11 +96,23 @@ class HjfPatchMissingRewards extends Command
|
||||
}
|
||||
|
||||
try {
|
||||
$pointsService->reward((int)$order['uid'], (string)$order['order_id'], (int)$order['id']);
|
||||
$uid = (int)$order['uid'];
|
||||
// 先执行等级升级检查,确保积分奖励使用正确的 agent_level
|
||||
$userCacheInfo = $userServices->getUserCacheInfo($uid);
|
||||
$spreadUid = $userCacheInfo ? (int)($userCacheInfo['spread_uid'] ?? 0) : (int)$order['spread_uid'];
|
||||
$twoSpreadUid = 0;
|
||||
if ($spreadUid > 0 && $oneUserInfo = $userServices->getUserCacheInfo($spreadUid)) {
|
||||
$twoSpreadUid = $userServices->getSpreadUid($spreadUid, $oneUserInfo, false);
|
||||
}
|
||||
$uids = array_values(array_filter(array_unique([$uid, $spreadUid, $twoSpreadUid])));
|
||||
$agentLevelServices->checkUserLevelFinish($uid, $uids);
|
||||
|
||||
// 发放积分奖励(PointsRewardServices 内部已做幂等检查)
|
||||
$pointsService->reward($uid, (string)$order['order_id'], (int)$order['id']);
|
||||
$patched++;
|
||||
$output->writeln(sprintf(
|
||||
' [PATCHED] 订单 #%d (%s) 已补发积分奖励',
|
||||
$order['id'], $order['order_id']
|
||||
' [PATCHED] 订单 #%d (%s) uid=%d 等级检查+积分奖励已补发',
|
||||
$order['id'], $order['order_id'], $uid
|
||||
));
|
||||
} catch (\Throwable $e) {
|
||||
$output->writeln(sprintf(
|
||||
|
||||
Reference in New Issue
Block a user