-- 支付信息和附加费用同步定时任务配置SQL
-- 在sys_job表中添加定时任务

-- 1. 支付信息同步（新系统 -> 旧系统）
INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark)
VALUES 
('支付信息同步到旧系统', 'DEFAULT', 'legacySystemSyncTask.syncPaymentToLegacy', '0 0/10 * * * ?', '3', '1', '0', 'admin', sysdate(), 
'每10分钟自动同步新系统未同步的支付成功记录到旧系统PaidMoney表。同步条件：pay_status=PAID且sync_status=0或3。');

-- 2. 支付信息反向同步（旧系统 -> 新系统）
INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark)
VALUES 
('支付信息从旧系统同步', 'DEFAULT', 'legacySystemSyncTask.syncPaymentFromLegacy', '0 0/15 * * * ?', '3', '1', '0', 'admin', sysdate(), 
'每15分钟自动同步旧系统PaidMoney表最近7天的支付记录到新系统。只同步在新系统中存在对应转运任务（ServiceOrdID和DispatchOrdID匹配）的记录。');

-- 3. 附加费用同步（新系统 -> 旧系统）
INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark)
VALUES 
('附加费用同步到旧系统', 'DEFAULT', 'legacySystemSyncTask.syncAdditionalFeeToLegacy', '0 0/10 * * * ?', '3', '1', '0', 'admin', sysdate(), 
'每10分钟自动同步新系统未同步的附加费用记录到旧系统PaidMoney_Add表。同步条件：sync_status=0或3。');

-- 4. 附加费用反向同步（旧系统 -> 新系统）
INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark)
VALUES 
('附加费用从旧系统同步', 'DEFAULT', 'legacySystemSyncTask.syncAdditionalFeeFromLegacy', '0 0/15 * * * ?', '3', '1', '0', 'admin', sysdate(), 
'每15分钟自动同步旧系统PaidMoney_Add表最近24小时的附加费用记录到新系统。只同步在新系统中存在对应转运任务（ServiceOrdID和DispatchOrdID匹配）的记录。');

-- 说明：
-- job_name: 任务名称
-- job_group: 任务组名（DEFAULT为默认组）
-- invoke_target: 调用目标字符串（Bean名称.方法名）
--   支付同步方法：
--   - legacySystemSyncTask.syncPaymentToLegacy() 新系统 -> 旧系统
--   - legacySystemSyncTask.syncPaymentFromLegacy() 旧系统 -> 新系统
--   附加费用同步方法：
--   - legacySystemSyncTask.syncAdditionalFeeToLegacy() 新系统 -> 旧系统
--   - legacySystemSyncTask.syncAdditionalFeeFromLegacy() 旧系统 -> 新系统
-- 
-- cron_expression: cron表达式
--   - '0 0/10 * * * ?' = 每10分钟执行一次（推荐用于新系统到旧系统的同步）
--   - '0 0/15 * * * ?' = 每15分钟执行一次（推荐用于旧系统到新系统的同步）
--   - '0 0/5 * * * ?' = 每5分钟执行一次（仅在同步要求高时使用）
--   - '0 0/30 * * * ?' = 每30分钟执行一次
-- 
-- misfire_policy: 错过执行策略
--   - 1=立即执行
--   - 2=执行一次
--   - 3=放弃执行（推荐）
-- 
-- concurrent: 是否并发
--   - 0=允许并发
--   - 1=禁止并发（推荐，避免重复同步和数据冲突）
-- 
-- status: 状态
--   - 0=正常（启用）
--   - 1=暂停（停用）

-- 使用建议：
-- 1. 新系统到旧系统同步（10分钟）：
--    - 用户操作后需快速同步到旧系统供其他业务使用
--    - 未同步记录会自动重试
-- 
-- 2. 旧系统到新系统同步（15分钟）：
--    - 仅同步存在对应转运任务的记录（验证ServiceOrdID和DispatchOrdID）
--    - 支付记录查询最近7天
--    - 附加费用查询最近24小时
--    - 避免同步无效的孤立数据
-- 
-- 3. 性能优化：
--    - 每批次限制100条记录
--    - 每条记录间隔1秒
--    - 禁止并发执行
-- 
-- 4. 监控建议：
--    - 定期检查sync_status=3的失败记录
--    - 查看定时任务执行日志
--    - 监控同步耗时和成功率

-- 监控查询示例：

-- 查看支付记录同步状态：
-- SELECT 
--     sync_status,
--     CASE sync_status
--         WHEN 0 THEN '未同步'
--         WHEN 1 THEN '同步中'
--         WHEN 2 THEN '同步成功'
--         WHEN 3 THEN '同步失败'
--     END AS status_name,
--     COUNT(*) AS count
-- FROM sys_task_payment
-- WHERE pay_status = 'PAID'
-- GROUP BY sync_status;

-- 查看附加费用同步状态：
-- SELECT 
--     sync_status,
--     CASE sync_status
--         WHEN 0 THEN '未同步'
--         WHEN 1 THEN '同步中'
--         WHEN 2 THEN '同步成功'
--         WHEN 3 THEN '同步失败'
--     END AS status_name,
--     COUNT(*) AS count
-- FROM sys_task_additional_fee
-- GROUP BY sync_status;

-- 查看今日同步失败的记录：
-- SELECT * FROM sys_task_payment 
-- WHERE sync_status = 3 AND DATE(sync_time) = CURDATE();

-- SELECT * FROM sys_task_additional_fee 
-- WHERE sync_status = 3 AND DATE(sync_time) = CURDATE();
