:refactor: HCS推送开关配置统一收敛至HcsProperties并支持Nacos动态刷新

This commit is contained in:
刘泉佳
2026-10-15 04:44:54 +08:00
parent 6fc2cca9ef
commit 4dfb8ebe9f
3 changed files with 44 additions and 44 deletions
@@ -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);
@@ -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);
}
/**
@@ -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