-- 车辆和人员变更重新同步定时任务配置SQL
-- 在sys_job表中添加定时任务
-- 调用旧系统 admin_save_25.asp 接口更新调度单
-- 
-- 需要重新同步的变更类型：
--   1. 车辆变更：修改了分配的车辆
--   2. 执行人员变更：修改了执行人员（司机、医生、护士）
--   3. 地址变更：修改了转出医院地址或转入医院地址
--   4. 成交价变更：修改了转运费用（transfer_price）

-- 重新同步车辆和人员变更的任务到旧系统
INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark)
VALUES 
('同步服务调度到旧系统变更', 'DEFAULT', 'legacySystemSyncTask.resyncVehicleAndPersonnel', '0 0/5 * * * ?', '3', '1', '0', 'admin', sysdate(), 
'每5分钟自动重新同步车辆、人员、地址、成交价发生变更的任务到旧系统。当任务的车辆、人员、地址或费用被修改后，会标记need_resync=1，定时任务会将这些变更同步到旧系统调度单表。');

-- 说明：
-- job_name: 任务名称
-- job_group: 任务组名（DEFAULT为默认组）
-- invoke_target: 调用目标字符串（Bean名称.方法名）
--   - legacySystemSyncTask.resyncVehicleAndPersonnel() 重新同步车辆和人员变更
--
-- cron_expression: cron表达式
--   - '0 0/5 * * * ?' = 每5分钟执行一次（推荐）
--   - '0 0/10 * * * ?' = 每10分钟执行一次
--   - '0 0/3 * * * ?' = 每3分钟执行一次（仅在变更频繁时使用）
--
-- misfire_policy: 错过执行策略
--   - 1=立即执行
--   - 2=执行一次
--   - 3=放弃执行（推荐）
--
-- concurrent: 是否并发
--   - 0=允许并发
--   - 1=禁止并发（推荐，避免重复同步）
--
-- status: 状态
--   - 0=正常（启用）
--   - 1=暂停（停用）

-- 使用场景：
-- 1. 车辆信息变更：
--    - 任务分配的车辆被更换
--    - 车辆信息（车牌号等）被修改
--
-- 2. 人员信息变更：
--    - 执行人员（司机、医生、护士等）被重新分配
--    - 人员信息被修改
--
-- 3. 地址信息变更：
--    - 转出医院地址被修改
--    - 转入医院地址被修改
--
-- 4. 成交价变更：
--    - 转运费用（transfer_price）被修改
--
-- 3. 同步流程：
--    - 在修改车辆、人员、地址或成交价时，设置 need_resync = 1
--    - 定时任务查询 need_resync = 1 且 dispatch_sync_status = 2 的任务
--    - 调用旧系统 admin_save_25.asp 接口重新同步调度单信息（而非 admin_save_24.gds）
--    - 同步成功后设置 need_resync = 0
--
-- 4. 性能优化：
--    - 每批次限制100条记录
--    - 每条记录间隔1秒
--    - 禁止并发执行
--    - 只同步未完成和未取消的任务

-- 监控查询示例：

-- 查看需要重新同步的任务数量：
-- SELECT COUNT(*) FROM sys_task_emergency
-- WHERE need_resync = 1
--   AND dispatch_sync_status = 2
--   AND legacy_dispatch_ord_id IS NOT NULL;

-- 查看重新同步状态统计：
-- SELECT 
--     need_resync,
--     CASE need_resync
--         WHEN 0 THEN '无需重新同步'
--         WHEN 1 THEN '需要重新同步'
--     END AS resync_status,
--     COUNT(*) AS count
-- FROM sys_task_emergency
-- WHERE dispatch_sync_status = 2
-- GROUP BY need_resync;

-- 查看今日重新同步失败的记录：
-- SELECT te.*, t.task_code, t.task_status
-- FROM sys_task_emergency te
-- JOIN sys_task t ON te.task_id = t.task_id
-- WHERE te.need_resync = 1
--   AND te.dispatch_sync_status = 2
--   AND DATE(te.dispatch_sync_time) = CURDATE()
--   AND te.dispatch_sync_error_msg IS NOT NULL;
