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:
apple
2026-03-24 11:59:09 +08:00
parent 434aa8c69d
commit 76ccb24679
59 changed files with 2902 additions and 237 deletions

View File

@@ -106,6 +106,22 @@ class SystemTimer extends AuthController
return $this->success('添加定时器成功!');
}
/**
* 手动立即触发一个定时任务
* @param $id
* @return mixed
*/
public function run_now($id)
{
$timer = $this->services->getOneTimer($id);
$mark = $timer['mark'] ?? '';
if (!$mark) {
return $this->fail('定时任务标识不存在');
}
$this->services->runNow($mark);
return $this->success('任务已触发');
}
/**
* 更新定时任务
* @param $id

View File

@@ -421,7 +421,13 @@ class SystemConfig extends AuthController
$is_store_stock = isset($post['store_stock']) && $post['store_stock'] != sys_config('store_stock');
// radio 类型字段:若历史 bug 导致 value 为单元素数组,自动展开为标量
$radioScalarFields = ['brokerage_scope', 'brokerage_timing'];
foreach ($post as $k => $v) {
if (in_array($k, $radioScalarFields) && is_array($v) && count($v) === 1) {
$v = $v[0];
$post[$k] = $v;
}
$config_one = $this->services->getOne(['menu_name' => $k]);
if ($config_one) {
$config_one['value'] = $v;