实现新系统 sys_task_additional_fee 表与旧系统 PaidMoney_Add 表之间的附加费用双向同步,确保两个系统的附加费用数据保持一致。
sys_task_additional_feepid: 旧系统附加费用记录ID(PaidMoney_Add.id)sync_status: 同步状态(0未同步,1同步中,2同步成功,3同步失败)sync_time: 同步时间PaidMoney_Addid: 主键ToServiceOrdID: 服务单IDToDispatchOrdID: 调度单IDAddMoneyType: 附加费用类型AddMoney: 附加费用金额AddMoneyExplain: 附加费用说明AddMoneyTime: 附加费用时间AddMoneyOAID: 添加用户的OAID通过 SysTaskEmergency 表获取任务与旧系统订单的映射关系:
- legacy_service_ord_id → ToServiceOrdID
- legacy_dispatch_ord_id → ToDispatchOrdID
AdditionalFeeSyncService.syncAdditionalFeeToLegacy(feeId)ToServiceOrdID 和 ToDispatchOrdIDPaidMoneyAdd 对象并插入旧系统pid、sync_status、sync_time| 新系统字典值 | 旧系统AddMoneyType | 说明 |
|---|---|---|
| 1 | 1 | 等待费 |
| 2 | 2 | 担架 |
| 3 | 3 | 居家ICU |
| 4 | 4 | 医疗设备 |
PaidMoneyAdd.ToServiceOrdID = emergency.legacyServiceOrdId
PaidMoneyAdd.ToDispatchOrdID = emergency.legacyDispatchOrdId
PaidMoneyAdd.AddMoneyType = Integer.parseInt(fee.feeType)
PaidMoneyAdd.AddMoney = fee.totalAmount
PaidMoneyAdd.AddMoneyExplain = fee.feeName + (备注)
PaidMoneyAdd.AddMoneyTime = fee.createdTime
PaidMoneyAdd.AddMoneyOAID = user.oaUserId
AdditionalFeeSyncService.syncAdditionalFeeFromLegacy(paidMoneyAddId)PaidMoney_Add 记录pid 字段)ToServiceOrdID 查询新系统任务ToDispatchOrdID 是否匹配SysTaskAdditionalFee 对象并插入新系统pid、sync_status=2、sync_time| 旧系统AddMoneyType | 新系统字典值 | 说明 |
|---|---|---|
| 1 | 1 | 等待费 |
| 2 | 2 | 担架 |
| 3 | 3 | 居家ICU |
| 4 | 4 | 医疗设备 |
SysTaskAdditionalFee.taskId = emergency.taskId
SysTaskAdditionalFee.feeType = String.valueOf(paidMoneyAdd.addMoneyType)
SysTaskAdditionalFee.feeName = getFeeTypeName(feeType)
SysTaskAdditionalFee.unitAmount = paidMoneyAdd.addMoney
SysTaskAdditionalFee.quantity = 1
SysTaskAdditionalFee.totalAmount = paidMoneyAdd.addMoney
SysTaskAdditionalFee.remark = paidMoneyAdd.addMoneyExplain
SysTaskAdditionalFee.pid = paidMoneyAddId
SysTaskAdditionalFee.syncStatus = 2
SysTaskAdditionalFee.syncTime = now()
PaidMoneyAdd.java - 旧系统附加费用记录实体PaidMoneyAddMapper.java - 旧系统附加费用记录Mapper接口PaidMoneyAddMapper.xml - 旧系统附加费用记录SQL映射IAdditionalFeeSyncService.java - 附加费用同步服务接口AdditionalFeeSyncServiceImpl.java - 附加费用同步服务实现additional_fee_sync_update.sql - 数据表更新脚本SysTaskAdditionalFee.java - 新增 pid、syncStatus、syncTime 字段SysTaskAdditionalFeeMapper.java - 新增 selectByPid、updateSyncInfo、selectUnsyncedFees 方法SysTaskAdditionalFeeMapper.xml - 更新映射和新增查询方法SysTaskPaymentServiceImpl.java - 添加附加费用后触发同步LegacySystemSyncTask.java - 新增附加费用同步定时任务方法使用 @DataSource 注解切换数据源:
// 访问新系统数据库(默认)
public void processNewSystem() {
// 默认使用主数据源
}
// 访问旧系统数据库
@DataSource(DataSourceType.SQLSERVER)
public void processLegacySystem() {
// 使用SQL Server数据源
}
新附加费用记录 → 0(未同步) → 1(同步中) → 2(同步成功) 或 3(同步失败)
↓
可重试
sync_status=3@Autowired
private IAdditionalFeeSyncService additionalFeeSyncService;
// 同步单条附加费用到旧系统
boolean success = additionalFeeSyncService.syncAdditionalFeeToLegacy(feeId);
// 从旧系统同步附加费用
boolean success = additionalFeeSyncService.syncAdditionalFeeFromLegacy(paidMoneyAddId);
// 批量同步
int count = additionalFeeSyncService.batchSyncAdditionalFeeToLegacy();
int count = additionalFeeSyncService.batchSyncAdditionalFeeFromLegacy(24); // 同步24小时内的记录
任务名称: 附加费用同步
任务组名: DEFAULT
调用目标: legacySystemSyncTask.syncAdditionalFeeToLegacy()
cron表达式: 0 0/10 * * * ? (每10分钟执行一次)
任务名称: 附加费用反向同步
任务组名: DEFAULT
调用目标: legacySystemSyncTask.syncAdditionalFeeFromLegacy()
cron表达式: 0 0/15 * * * ? (每15分钟执行一次)
执行 SQL 脚本:sql source sql/additional_fee_sync_update.sql
sys_task_additional_fee 表的 sync_status 字段PaidMoney_Add 表是否有对应记录sys_task_additional_fee 表是否有对应记录-- 查看新系统附加费用及同步状态
SELECT id, task_id, fee_type, fee_name, total_amount, sync_status, pid
FROM sys_task_additional_fee
WHERE task_id = ?;
-- 查看旧系统附加费用(在SQL Server中执行)
SELECT id, ToServiceOrdID, ToDispatchOrdID, AddMoneyType, AddMoney, AddMoneyExplain
FROM PaidMoney_Add
WHERE ToServiceOrdID = ? AND ToDispatchOrdID = ?;
-- 查看未同步的附加费用
SELECT *
FROM sys_task_additional_fee
WHERE (sync_status = 0 OR sync_status = 3 OR sync_status IS NULL);