fix: 修复无交易记录自动结算并增加分时电量观测对比

复用 settleOrder 主路径纠正状态/锁/实时数据取值等问题,补充 mock 单测与 sys_job SQL;交易记录到达时按实时曲线估算尖峰平谷仅打日志对比,不参与结算。
This commit is contained in:
jsowell
2026-08-12 16:17:31 +08:00
parent 896908d692
commit 40c34fa49c
16 changed files with 1278 additions and 620 deletions

View File

@@ -0,0 +1,60 @@
-- ============================================================
-- 无交易记录自动结算 - 定时任务初始化
-- 表sys_job若依 Quartz
-- 调用目标jsowellTask.autoSettleOrdersWithoutTransactionRecord()
--
-- 说明:
-- 1) 默认 status=1暂停灰度验证后再改为 0正常
-- 2) concurrent=1禁止并发
-- 3) 可重复执行:已存在同名调用目标则跳过插入
-- 4) 纯 SQL 插入后,若应用已在运行,建议:
-- - 重启应用,或
-- - 到「定时任务」页面对该任务执行一次「修改保存/恢复」以同步到调度器
-- 5) 业务总开关仍由 auto-settle.enabled 控制,任务跑起来但 enabled=false 只会打“功能未启用”日志
-- ============================================================
-- 可选:执行前先查是否已存在
-- SELECT job_id, job_name, invoke_target, cron_expression, concurrent, status
-- FROM sys_job
-- WHERE invoke_target = 'jsowellTask.autoSettleOrdersWithoutTransactionRecord()';
INSERT INTO sys_job (
job_name,
job_group,
invoke_target,
cron_expression,
misfire_policy,
concurrent,
status,
create_by,
create_time,
remark
)
SELECT
'无交易记录自动结算',
'DEFAULT',
'jsowellTask.autoSettleOrdersWithoutTransactionRecord()',
'0 0/10 * * * ?', -- 每 10 分钟
'3', -- 错过不立即补跑(等下一周期)
'1', -- 禁止并发
'1', -- 暂停(灰度验证后再启用)
'admin',
NOW(),
'扫描停止超阈值且无交易记录的待结算订单按最后实时数据自动结算。业务开关auto-settle.enabled建议先灰度站点。'
FROM DUAL
WHERE NOT EXISTS (
SELECT 1
FROM sys_job
WHERE invoke_target = 'jsowellTask.autoSettleOrdersWithoutTransactionRecord()'
);
-- 启用任务(灰度/配置验证通过后执行)
-- UPDATE sys_job
-- SET status = '0',
-- update_by = 'admin',
-- update_time = NOW()
-- WHERE invoke_target = 'jsowellTask.autoSettleOrdersWithoutTransactionRecord()';
-- 回滚/删除(如需)
-- DELETE FROM sys_job
-- WHERE invoke_target = 'jsowellTask.autoSettleOrdersWithoutTransactionRecord()';