diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/businessdatasyn/config/SyncProperties.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/businessdatasyn/config/SyncProperties.java index 113b04bf..46cd6f82 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/businessdatasyn/config/SyncProperties.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/businessdatasyn/config/SyncProperties.java @@ -29,6 +29,13 @@ public class SyncProperties { */ private int maxRetry = 5; + /** + * 是否允许同步删除动作(全局总闸,默认 false) + *
false 时所有表的 DELETE_V1 / DELETE_V2 动作均降级为 SKIP, + * 防止某侧库被误清空/回档时级联删除对侧数据
+ */ + private boolean deleteSyncEnabled = false; + /** * 日志保留天数(默认 30) */ diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/businessdatasyn/resolver/RowMergeResolver.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/businessdatasyn/resolver/RowMergeResolver.java index f031da3b..671aa7b6 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/businessdatasyn/resolver/RowMergeResolver.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/businessdatasyn/resolver/RowMergeResolver.java @@ -1,7 +1,9 @@ package com.zdxt.enforcementcode.businessdatasyn.resolver; +import com.zdxt.enforcementcode.businessdatasyn.config.SyncProperties; import com.zdxt.enforcementcode.businessdatasyn.config.SyncTableConfig; import com.zdxt.enforcementcode.businessdatasyn.domain.dto.*; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -13,8 +15,19 @@ import org.springframework.stereotype.Component; */ @Slf4j @Component +@RequiredArgsConstructor public class RowMergeResolver { + private final SyncProperties syncProperties; + + /** + * 删除同步是否允许(全局总闸 + 表级 deleteMode) + */ + private boolean deleteAllowed(SyncTableConfig config) { + return syncProperties.isDeleteSyncEnabled() + && !"none".equalsIgnoreCase(config.getDeleteMode()); + } + /** * 解析同步决策 * @@ -45,6 +58,14 @@ public class RowMergeResolver { if (v2Exists) { if (ownerSide == OwnerSide.V1) { // 场景 7:归属方(V1)删除 → 删除对侧(V2) + if (!deleteAllowed(config)) { + log.info("[BizSync] 归属方V1已删除但删除同步被禁用,跳过: {}", config.getConfigKey()); + return SyncDecision.builder() + .action(SyncActionEnum.SKIP) + .ownerSide(ownerSide) + .reason("归属方V1已删除,但删除同步被禁用,跳过") + .build(); + } return SyncDecision.builder() .action(SyncActionEnum.DELETE_V2) .ownerSide(ownerSide) @@ -70,6 +91,14 @@ public class RowMergeResolver { if (v1Exists) { if (ownerSide == OwnerSide.V2) { // 场景 8:归属方(V2)删除 → 删除对侧(V1) + if (!deleteAllowed(config)) { + log.info("[BizSync] 归属方V2已删除但删除同步被禁用,跳过: {}", config.getConfigKey()); + return SyncDecision.builder() + .action(SyncActionEnum.SKIP) + .ownerSide(ownerSide) + .reason("归属方V2已删除,但删除同步被禁用,跳过") + .build(); + } return SyncDecision.builder() .action(SyncActionEnum.DELETE_V1) .ownerSide(ownerSide) diff --git a/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev-cust-zrb.yml b/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev-cust-zrb.yml index 3d19b0b7..7b0ea24f 100644 --- a/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev-cust-zrb.yml +++ b/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev-cust-zrb.yml @@ -32,16 +32,6 @@ spring: username: root password: root ---- # 业务数据双向同步配置 -business-data-sync: - # 是否启用同步功能 - enabled: true - # 单次扫描批量大小(默认) - scan-batch-size: 1000 - # 单行失败最大重试次数(默认) - max-retry: 5 - # 日志保留天数 - log-retention-days: 30 --- # redis 单机配置(单机与集群只能开启一个另一个需要注释掉) spring.data: diff --git a/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev.yml b/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev.yml index 2338a530..89d3cc07 100644 --- a/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev.yml +++ b/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev.yml @@ -350,3 +350,16 @@ xss: excludeUrls: - /web/enforcementcode/educationServices/add - /web/enforcementcode/educationServices/edit + +--- # 业务数据双向同步配置 +business-data-sync: + # 是否启用同步功能 + enabled: true + # 是否允许同步删除动作(总闸,false时所有表的删除动作降级为SKIP,防止误清库级联删除) + delete-sync-enabled: false + # 单次扫描批量大小(默认) + scan-batch-size: 1000 + # 单行失败最大重试次数(默认) + max-retry: 5 + # 日志保留天数 + log-retention-days: 30 diff --git a/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-prod.yml b/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-prod.yml index 51bcb971..8a3b558d 100644 --- a/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-prod.yml +++ b/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-prod.yml @@ -346,3 +346,16 @@ sms: #市监代理页面 sjView: http://10.132.108.3/sjWeb + +--- # 业务数据双向同步配置 +business-data-sync: + # 是否启用同步功能 + enabled: true + # 是否允许同步删除动作(总闸,false时所有表的删除动作降级为SKIP,防止误清库级联删除) + delete-sync-enabled: false + # 单次扫描批量大小(默认) + scan-batch-size: 1000 + # 单行失败最大重试次数(默认) + max-retry: 5 + # 日志保留天数 + log-retention-days: 30