diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/hcs/HcsImmediatePushSupport.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/hcs/HcsImmediatePushSupport.java index bf3980ce..12f754c1 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/hcs/HcsImmediatePushSupport.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/hcs/HcsImmediatePushSupport.java @@ -29,12 +29,12 @@ import jakarta.annotation.PreDestroy; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.redis.cache.BladeRedis; +import org.springblade.hcs.config.HcsProperties; import org.springblade.transport.constant.HcsSyncConstant; import org.springblade.transport.mapper.ContractManageMapper; import org.springblade.transport.mapper.ProjectApplyMapper; import org.springblade.transport.pojo.entity.ContractManage; import org.springblade.transport.pojo.entity.ProjectApply; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.transaction.support.TransactionSynchronization; import org.springframework.transaction.support.TransactionSynchronizationManager; @@ -77,18 +77,13 @@ public class HcsImmediatePushSupport { */ private static final AtomicInteger THREAD_COUNTER = new AtomicInteger(1); + private final HcsProperties hcsProperties; private final HcsProjectSyncSupport hcsProjectSyncSupport; private final HcsContractSyncSupport hcsContractSyncSupport; private final ProjectApplyMapper projectApplyMapper; private final ContractManageMapper contractManageMapper; private final BladeRedis bladeRedis; - /** - * 即时推送总开关(thirdParty.hcs.push.immediate-enabled,默认关闭灰度打开;关闭时完全回落扫描链路) - */ - @Value("${thirdParty.hcs.push.immediate-enabled:false}") - private boolean immediateEnabled; - /** * 推送线程池:2 线程 daemon,即时推送与定时扫描互不影响 */ @@ -120,7 +115,7 @@ public class HcsImmediatePushSupport { * 开关校验后注册提交时机:有活动事务注册 afterCommit 回调(回滚不推送),无事务(MK 回调单条更新自动提交)直接异步 */ private void submitAfterCommit(String bizType, Long id, Runnable pushAction) { - if (!immediateEnabled) { + if (!hcsProperties.getPush().isImmediateEnabled()) { return; } Runnable pushTask = () -> this.pushWithLock(bizType, id, pushAction); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/task/HcsPushTask.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/task/HcsPushTask.java index 8f239069..874fc41f 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/task/HcsPushTask.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/task/HcsPushTask.java @@ -48,7 +48,6 @@ import org.springblade.transport.support.hcs.HcsInvoiceRegSyncSupport; import org.springblade.transport.support.hcs.HcsPaymentSyncSupport; import org.springblade.transport.support.hcs.HcsProjectSyncSupport; import org.springblade.transport.support.hcs.HcsReceiptBillSyncSupport; -import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -111,42 +110,12 @@ public class HcsPushTask { private final HcsReceiptBillSyncSupport hcsReceiptBillSyncSupport; private final BladeRedis bladeRedis; - /** - * 项目立项(C102)推送开关,默认关闭(Nacos thirdParty.hcs.push.project.sync-enabled,灰度打开) - */ - @Value("${thirdParty.hcs.push.project.sync-enabled:false}") - private boolean projectSyncEnabled; - - /** - * 合同(C103)推送开关,默认关闭(Nacos thirdParty.hcs.push.contract.sync-enabled,灰度打开) - */ - @Value("${thirdParty.hcs.push.contract.sync-enabled:false}") - private boolean contractSyncEnabled; - - /** - * 付款链(C106 特批 / C108 履约记录)推送开关,默认关闭(Nacos thirdParty.hcs.push.payment.sync-enabled,灰度打开) - */ - @Value("${thirdParty.hcs.push.payment.sync-enabled:false}") - private boolean paymentSyncEnabled; - - /** - * 开票登记(C111)推送开关,默认关闭(Nacos thirdParty.hcs.push.invoice-application.sync-enabled,灰度打开) - */ - @Value("${thirdParty.hcs.push.invoice-application.sync-enabled:false}") - private boolean invoiceApplicationSyncEnabled; - - /** - * 收票单(C109)推送开关,默认关闭(Nacos thirdParty.hcs.push.invoice-receipt.sync-enabled,灰度打开) - */ - @Value("${thirdParty.hcs.push.invoice-receipt.sync-enabled:false}") - private boolean invoiceReceiptSyncEnabled; - /** * 项目立项(C102)定时推送:扫描审批通过且待同步/待补偿的项目,独立开关与 cron 调度 */ @Scheduled(cron = "${thirdParty.hcs.push.project.cron:0 */5 * * * ?}") public void pushHcsProject() { - this.runOnce("项目立项", HcsSyncConstant.BIZ_TYPE_PROJECT, projectSyncEnabled, this::pushUnsyncedProjects); + this.runOnce("项目立项", HcsSyncConstant.BIZ_TYPE_PROJECT, hcsProperties.getPush().getProject().isSyncEnabled(), this::pushUnsyncedProjects); } /** @@ -155,7 +124,7 @@ public class HcsPushTask { */ @Scheduled(cron = "${thirdParty.hcs.push.contract.cron:0 1/5 * * * ?}") public void pushHcsContract() { - this.runOnce("合同", HcsSyncConstant.BIZ_TYPE_CONTRACT, contractSyncEnabled, this::syncHcsContracts); + this.runOnce("合同", HcsSyncConstant.BIZ_TYPE_CONTRACT, hcsProperties.getPush().getContract().isSyncEnabled(), this::syncHcsContracts); } /** @@ -171,7 +140,7 @@ public class HcsPushTask { */ @Scheduled(cron = "${thirdParty.hcs.push.payment.cron:0 2/5 * * * ?}") public void pushHcsPayment() { - this.runOnce("付款链", HcsSyncConstant.BIZ_TYPE_PAYMENT, paymentSyncEnabled, this::pushUnsyncedPayments); + this.runOnce("付款链", HcsSyncConstant.BIZ_TYPE_PAYMENT, hcsProperties.getPush().getPayment().isSyncEnabled(), this::pushUnsyncedPayments); } /** @@ -179,7 +148,7 @@ public class HcsPushTask { */ @Scheduled(cron = "${thirdParty.hcs.push.invoice-application.cron:0 3/5 * * * ?}") public void pushHcsInvoiceApplication() { - this.runOnce("开票登记", HcsSyncConstant.BIZ_TYPE_INVOICE_APPLICATION, invoiceApplicationSyncEnabled, this::pushUnsyncedInvoiceApplications); + this.runOnce("开票登记", HcsSyncConstant.BIZ_TYPE_INVOICE_APPLICATION, hcsProperties.getPush().getInvoiceApplication().isSyncEnabled(), this::pushUnsyncedInvoiceApplications); } /** @@ -187,7 +156,7 @@ public class HcsPushTask { */ @Scheduled(cron = "${thirdParty.hcs.push.invoice-receipt.cron:0 4/5 * * * ?}") public void pushHcsInvoiceReceipt() { - this.runOnce("收票单", HcsSyncConstant.BIZ_TYPE_INVOICE_RECEIPT, invoiceReceiptSyncEnabled, this::pushUnsyncedInvoiceReceipts); + this.runOnce("收票单", HcsSyncConstant.BIZ_TYPE_INVOICE_RECEIPT, hcsProperties.getPush().getInvoiceReceipt().isSyncEnabled(), this::pushUnsyncedInvoiceReceipts); } /** diff --git a/blade-third-party-api/blade-hcs-api/src/main/java/org/springblade/hcs/config/HcsProperties.java b/blade-third-party-api/blade-hcs-api/src/main/java/org/springblade/hcs/config/HcsProperties.java index 301a44a5..5e0ca285 100644 --- a/blade-third-party-api/blade-hcs-api/src/main/java/org/springblade/hcs/config/HcsProperties.java +++ b/blade-third-party-api/blade-hcs-api/src/main/java/org/springblade/hcs/config/HcsProperties.java @@ -152,6 +152,10 @@ public class HcsProperties { @Data public static class Push { + /** + * 审批通过即时推送总开关(thirdParty.hcs.push.immediate-enabled,默认关闭灰度打开;关闭时完全回落扫描链路) + */ + private boolean immediateEnabled = false; /** * 每类单据单轮扫描批量(全局) */ @@ -160,6 +164,38 @@ public class HcsProperties { * 推送失败自动重试上限,超限仅人工重推(全局) */ private int maxRetry = 5; + /** + * 项目立项(C102)推送开关(thirdParty.hcs.push.project.sync-enabled,默认关闭,灰度打开) + */ + private Task project = new Task(); + /** + * 合同(C103)推送开关(thirdParty.hcs.push.contract.sync-enabled,默认关闭,灰度打开) + */ + private Task contract = new Task(); + /** + * 付款链(C106 特批 / C108 履约记录)推送开关(thirdParty.hcs.push.payment.sync-enabled,默认关闭,灰度打开) + */ + private Task payment = new Task(); + /** + * 开票登记(C111)推送开关(thirdParty.hcs.push.invoice-application.sync-enabled,默认关闭,灰度打开) + */ + private Task invoiceApplication = new Task(); + /** + * 收票单(C109)推送开关(thirdParty.hcs.push.invoice-receipt.sync-enabled,默认关闭,灰度打开) + */ + private Task invoiceReceipt = new Task(); + } + + /** + * 单类单据推送任务配置(thirdParty.hcs.push.{bizType}.sync-enabled; + * cron 有代码默认值错峰每 5 分钟,保持 @Scheduled 占位符形式,未纳入本类) + */ + @Data + public static class Task { + /** + * 推送开关,默认关闭(灰度打开) + */ + private boolean syncEnabled = false; } @Data