feat(fsgx): HJF queue merge, brokerage timing, cycle commission, points release
- Add HJF jobs, services, DAOs, models, admin/API controllers, release command - Respect brokerage_timing (on_pay vs confirm); dispatch HjfOrderPayJob for queue goods - Queue-only cycle commission and position index fix in StoreOrderCreateServices - UserBill income types: frozen_points_brokerage, frozen_points_release - Timer: fsgx_release_frozen_points -> PointsReleaseServices - Agent tasks: no_assess filtering for direct/umbrella counts - Migrations: queue_pool, points_release_log, fsgx_v1 checklist updates - Admin/uniapp: crontab preset, membership level, user list, finance routes, docs Made-with: Cursor
This commit is contained in:
@@ -954,7 +954,11 @@ class StoreOrderCreateServices extends BaseServices
|
||||
} else {
|
||||
$is_brokerage = $productInfo['is_brokerage'] ?? 0;
|
||||
}
|
||||
if ($is_brokerage == 0) {
|
||||
// fsgx: is_queue_goods=1 的报单商品,即使 is_brokerage=0 也参与周期佣金计算
|
||||
$isQueueGoodsProduct = (int)($productInfo['is_queue_goods'] ?? 0);
|
||||
$brokerageScopeCheck = sys_config('brokerage_scope', 'all');
|
||||
$queueGoodsBypassBrokerage = ($brokerageScopeCheck === 'queue_only' && $isQueueGoodsProduct === 1);
|
||||
if ($is_brokerage == 0 && !$queueGoodsBypassBrokerage) {
|
||||
continue;
|
||||
}
|
||||
//指定返佣金额
|
||||
@@ -999,7 +1003,7 @@ class StoreOrderCreateServices extends BaseServices
|
||||
|
||||
if ($useCycleBrokerage && $spread_uid > 0) {
|
||||
// 统计推荐人下级已完成的有效报单商品订单数,取模得到当前位次
|
||||
// is_queue_goods 冗余存储在订单表(eb_store_order),由创建订单时写入
|
||||
// 注意:compute() 在 paid=1 之后执行,当前订单已被计入,需 -1 得到"之前完成单数"
|
||||
/** @var \app\dao\order\StoreOrderDao $orderDao */
|
||||
$orderDao = app()->make(\app\dao\order\StoreOrderDao::class);
|
||||
$completedCount = $orderDao->count([
|
||||
@@ -1008,7 +1012,7 @@ class StoreOrderCreateServices extends BaseServices
|
||||
'paid' => 1,
|
||||
'is_del' => 0,
|
||||
]);
|
||||
$position = $completedCount % $cycleCount;
|
||||
$position = max(0, $completedCount - 1) % $cycleCount;
|
||||
$cycleRatePercent = isset($cycleRates[$position]) ? (int)$cycleRates[$position] : (int)($cycleRates[0] ?? 0);
|
||||
if ($cycleRatePercent > 0) {
|
||||
$brokerageRatio = bcdiv((string)$cycleRatePercent, 100, 4);
|
||||
|
||||
Reference in New Issue
Block a user