diff --git a/bms-back/bms-system/src/main/java/com/bms/price/migration/mapper/UuidToNewSyncMapper.java b/bms-back/bms-system/src/main/java/com/bms/price/migration/mapper/UuidToNewSyncMapper.java index a86494a3..b4685735 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/migration/mapper/UuidToNewSyncMapper.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/migration/mapper/UuidToNewSyncMapper.java @@ -8,7 +8,7 @@ import com.bms.price.migration.domain.UuidToNewIdHolder; import com.bms.price.migration.domain.UuidToNewProgressVo; /** - * UUID -> bigint 阴影同步 Mapper(订单+income *_new + 关联表 order_id) + * UUID -> bigint 阴影同步 Mapper(订单+income *_new + order_id / income_fee_id) */ public interface UuidToNewSyncMapper { @@ -39,6 +39,9 @@ public interface UuidToNewSyncMapper int insertIncomeFeeNew(UuidToNewIdHolder holder); + /** 回写 ar_bill_detail_fee.income_fee_id(= prc_income_bill_fee_new.fee_id) */ + int updateArDetailFeeIncomeFeeId(@Param("oldFeeId") String oldFeeId, @Param("newFeeId") Long newFeeId); + /** 回写现网关联表 order_id(= prc_order_bill_new.bill_id) */ int updatePayBillOrderId(@Param("oldBillId") String oldBillId, @Param("newBillId") Long newBillId); diff --git a/bms-back/bms-system/src/main/java/com/bms/price/migration/service/impl/UuidToNewSyncServiceImpl.java b/bms-back/bms-system/src/main/java/com/bms/price/migration/service/impl/UuidToNewSyncServiceImpl.java index 6ec92d74..bdb91ceb 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/migration/service/impl/UuidToNewSyncServiceImpl.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/migration/service/impl/UuidToNewSyncServiceImpl.java @@ -351,10 +351,13 @@ public class UuidToNewSyncServiceImpl implements IUuidToNewSyncService h.setNewBillId(newBillId); h.setNewIncomeId(newIncomeId); syncMapper.insertIncomeFeeNew(h); - if (h.getNewId() == null) + Long newFeeId = h.getNewId(); + if (newFeeId == null) { throw new IllegalStateException("insert income_fee_new no id for " + row.getFeeId()); } + // 回写现网 AR 费用行:旧 UUID 列不动,income_fee_id=新 fee_id + syncMapper.updateArDetailFeeIncomeFeeId(row.getFeeId(), newFeeId); } } diff --git a/bms-back/bms-system/src/main/resources/mapper/price/UuidToNewSyncMapper.xml b/bms-back/bms-system/src/main/resources/mapper/price/UuidToNewSyncMapper.xml index a1d9a8f0..e3511635 100644 --- a/bms-back/bms-system/src/main/resources/mapper/price/UuidToNewSyncMapper.xml +++ b/bms-back/bms-system/src/main/resources/mapper/price/UuidToNewSyncMapper.xml @@ -234,6 +234,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where f.fee_id = #{oldId} + + update ar_bill_detail_fee + set income_fee_id = #{newFeeId} + where prc_income_bill_fee_id = #{oldFeeId} + + diff --git a/bms-back/sql/uuid_to_bi_shadow/20261114_uuid_to_bi_shadow_dev.md b/bms-back/sql/uuid_to_bi_shadow/20261114_uuid_to_bi_shadow_dev.md index 25288f40..ad2ec12d 100644 --- a/bms-back/sql/uuid_to_bi_shadow/20261114_uuid_to_bi_shadow_dev.md +++ b/bms-back/sql/uuid_to_bi_shadow/20261114_uuid_to_bi_shadow_dev.md @@ -45,7 +45,7 @@ | `prc_income_bill` | `prc_income_bill_new` | `income_bill_id` -> bigint AI;`bill_id`=新订单 | | `prc_income_bill_fee` | `prc_income_bill_fee_new` | `fee_id` -> bigint AI;`income_bill_id`=新主表 | -### 3.2 现网表增加 `order_id`(income 现网表不加,甠 *_new) +### 3.2 现网表补列(income 现网表不加 order_id,甠 *_new) | 表 | 用哪列定位旧订单 | 新列 | |---|---|---| @@ -55,10 +55,11 @@ | `pay_bill_line` | `order_bill_id` varchar36 | `order_id` bigint | | `prc_billing_task` | `bill_id` varchar36 | `order_id` bigint | | `ar_bill_generate_task` | `last_source_bill_id` varchar36 | `order_id` bigint | +| `ar_bill_detail_fee` | `prc_income_bill_fee_id` varchar36 | `income_fee_id` bigint(= `prc_income_bill_fee_new.fee_id`) | 说明: -- `ar_bill_detail_fee` **不直接**挂订单,本期**不加** `order_id`(可经 `detail` 关联)。 +- `ar_bill_detail_fee` **不加** `order_id`(可经 `detail.order_id`);改加 `income_fee_id` 映射新费用 ID。 - `order_id` 允许 NULL;未同步订单为 NULL。 - 建议索引:`KEY idx__order_id (order_id)`。 @@ -100,9 +101,9 @@ 3) UPDATE mig_bi_order_done -> SUCCESS + new_bill_id 4) INSERT prc_order_bill_ext_new (bill_id = new_bill_id) 5) INSERT prc_income_bill_new / prc_income_bill_fee_new(income/fee UUID -> bigint) -6) UPDATE 关联表 order_id = new_bill_id - WHERE 旧 UUID 列 = old_bill_id -7) return SUCCESS +6) UPDATE ar_bill_detail_fee.income_fee_id = 新 fee_id +7) UPDATE 关联表 order_id = new_bill_id +8) return SUCCESS ``` 不再:拷贝 pay/AR/billing 到 `*_new`。 @@ -116,7 +117,7 @@ flowchart TD C -->|是| D[空转睡眠] C -->|否| E[逐单事务] E --> F[INSERT order/ext/income *_new] - F --> G[UPDATE 各表 order_id] + F --> G[UPDATE income_fee_id / order_id] G --> H[mig_bi_order_done SUCCESS] H --> I[下一单/下一批] D --> A diff --git a/bms-back/sql/uuid_to_bi_shadow/20261115_add_ar_detail_fee_income_fee_id.sql b/bms-back/sql/uuid_to_bi_shadow/20261115_add_ar_detail_fee_income_fee_id.sql new file mode 100644 index 00000000..e5ad5a39 --- /dev/null +++ b/bms-back/sql/uuid_to_bi_shadow/20261115_add_ar_detail_fee_income_fee_id.sql @@ -0,0 +1,26 @@ +-- 方案文档:20261114_uuid_to_bi_shadow_dev.md +-- 适用:已执行过 20261115_uuid_order_id_scheme.sql、仅缺 income_fee_id 时 +-- 可重入(列已存在则跳过) + +SET NAMES utf8mb4; + +DROP PROCEDURE IF EXISTS `mig_add_income_fee_id_col`; +DELIMITER $$ +CREATE PROCEDURE `mig_add_income_fee_id_col`() +BEGIN + DECLARE cnt INT DEFAULT 0; + SELECT COUNT(*) INTO cnt + FROM information_schema.columns + WHERE table_schema = DATABASE() + AND table_name = 'ar_bill_detail_fee' + AND column_name = 'income_fee_id'; + IF cnt = 0 THEN + ALTER TABLE `ar_bill_detail_fee` + ADD COLUMN `income_fee_id` bigint DEFAULT NULL COMMENT '对应 prc_income_bill_fee_new.fee_id' AFTER `prc_income_bill_fee_id`, + ADD KEY `idx_ar_detail_fee_income_fee_id` (`income_fee_id`); + END IF; +END$$ +DELIMITER ; + +CALL mig_add_income_fee_id_col(); +DROP PROCEDURE IF EXISTS `mig_add_income_fee_id_col`; diff --git a/bms-back/sql/uuid_to_bi_shadow/20261115_uuid_order_id_scheme.sql b/bms-back/sql/uuid_to_bi_shadow/20261115_uuid_order_id_scheme.sql index 014be380..0728f722 100644 --- a/bms-back/sql/uuid_to_bi_shadow/20261115_uuid_order_id_scheme.sql +++ b/bms-back/sql/uuid_to_bi_shadow/20261115_uuid_order_id_scheme.sql @@ -1,5 +1,5 @@ -- 方案文档:20261114_uuid_to_bi_shadow_dev.md --- order_id 方案:删除多余 *_new(保留订单/收入);关联表增加 order_id(对应 prc_order_bill_new.bill_id) +-- order_id 方案:删除多余 *_new(保留订单/收入);关联表增加 order_id; ar_bill_detail_fee 增加 income_fee_id -- 可重入(列已存在则跳过) -- 注意:会改生产/测试库现网表结构(仅增列,不改旧 UUID 列) @@ -100,6 +100,28 @@ CALL mig_add_order_id_col('ar_bill_generate_task', 'last_source_bill_id', '对 DROP PROCEDURE IF EXISTS `mig_add_order_id_col`; +-- ========== 3. ar_bill_detail_fee 增加 income_fee_id(= prc_income_bill_fee_new.fee_id) ========== +DROP PROCEDURE IF EXISTS `mig_add_income_fee_id_col`; +DELIMITER $$ +CREATE PROCEDURE `mig_add_income_fee_id_col`() +BEGIN + DECLARE cnt INT DEFAULT 0; + SELECT COUNT(*) INTO cnt + FROM information_schema.columns + WHERE table_schema = DATABASE() + AND table_name = 'ar_bill_detail_fee' + AND column_name = 'income_fee_id'; + IF cnt = 0 THEN + ALTER TABLE `ar_bill_detail_fee` + ADD COLUMN `income_fee_id` bigint DEFAULT NULL COMMENT '对应 prc_income_bill_fee_new.fee_id' AFTER `prc_income_bill_fee_id`, + ADD KEY `idx_ar_detail_fee_income_fee_id` (`income_fee_id`); + END IF; +END$$ +DELIMITER ; + +CALL mig_add_income_fee_id_col(); +DROP PROCEDURE IF EXISTS `mig_add_income_fee_id_col`; + -- 说明:同步一单成功后更新(旧 UUID 列不动): -- UPDATE prc_pay_bill SET order_id=#{new} WHERE bill_id=#{oldUuid}; -- UPDATE prc_pay_bill_fee SET order_id=#{new} WHERE bill_id=#{oldUuid}; @@ -107,3 +129,4 @@ DROP PROCEDURE IF EXISTS `mig_add_order_id_col`; -- UPDATE pay_bill_line SET order_id=#{new} WHERE order_bill_id=#{oldUuid}; -- UPDATE prc_billing_task SET order_id=#{new} WHERE bill_id=#{oldUuid}; -- UPDATE ar_bill_generate_task SET order_id=#{new} WHERE last_source_bill_id=#{oldUuid}; +-- UPDATE ar_bill_detail_fee SET income_fee_id=#{newFeeId} WHERE prc_income_bill_fee_id=#{oldFeeUuid};