feat: 新增付款特批走合同合规开关(默认关闭,特批附件必传逻辑保留)
thirdParty.hcs.spec-pay.enabled=false(默认)时:付款申请审批通过后不再发起 C106-3/4、不挂起特批审核、金蝶推送门禁放行;提交时高风险/黑名单 C101-1 风险校验与特批附件必传逻辑保留。同步 doc/nacos 配置样例与本地 Nacos。
This commit is contained in:
+1
-1
@@ -114,7 +114,7 @@ public class PaymentApplicationController extends BladeController {
|
||||
}
|
||||
PaymentApplication payment = paymentApplicationService.getById(id);
|
||||
String specStatus = payment == null ? null : payment.getHcsSpecStatus();
|
||||
if (HcsSyncConstant.SPEC_STATUS_NEED.equals(specStatus)) {
|
||||
if (hcsImmediatePushSupport.isSpecPayEnabled() && HcsSyncConstant.SPEC_STATUS_NEED.equals(specStatus)) {
|
||||
return R.success("审批通过,付款特批待发起,可在详情页重推合规");
|
||||
}
|
||||
if (Arrays.asList(HcsSyncConstant.SPEC_STATUS_PUSHING, HcsSyncConstant.SPEC_STATUS_PROCESSING).contains(specStatus)) {
|
||||
|
||||
+5
-2
@@ -24,6 +24,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.springblade.core.tool.api.R;
|
||||
import org.springblade.transport.config.BfiProperties;
|
||||
import org.springblade.transport.constant.HcsSyncConstant;
|
||||
import org.springblade.hcs.config.HcsProperties;
|
||||
import org.springblade.transport.event.KingdeeBillApprovedEvent;
|
||||
import org.springblade.transport.pojo.entity.PaymentApplication;
|
||||
import org.springblade.transport.service.IFormalSettlementService;
|
||||
@@ -65,6 +66,7 @@ public class KingdeeApprovalSyncListener {
|
||||
private final IInvoiceApplicationService invoiceApplicationService;
|
||||
private final IInvoiceReceiptService invoiceReceiptService;
|
||||
private final BfiProperties bfiProperties;
|
||||
private final HcsProperties hcsProperties;
|
||||
|
||||
/** 当前审批请求线程的自动推送失败原因,供 Controller 取走提示前端(见类注释线程说明) */
|
||||
private static final ThreadLocal<String> SYNC_FAILURE = new ThreadLocal<>();
|
||||
@@ -183,9 +185,10 @@ public class KingdeeApprovalSyncListener {
|
||||
return;
|
||||
}
|
||||
// 付款特批未完成(高风险/黑名单/额度超额)时金蝶必然拒推:跳过而非置失败,
|
||||
// 特批通过后由 HcsPaymentSyncSupport 重新发布本事件自动补推
|
||||
// 特批通过后由 HcsPaymentSyncSupport 重新发布本事件自动补推;
|
||||
// 特批不走合同系统(spec-pay.enabled=false)时不跳过
|
||||
PaymentApplication payment = paymentApplicationService.getById(id);
|
||||
if (payment != null && payment.getHcsSpecStatus() != null
|
||||
if (hcsProperties.getSpecPay().isEnabled() && payment != null && payment.getHcsSpecStatus() != null
|
||||
&& List.of(HcsSyncConstant.SPEC_STATUS_NEED, HcsSyncConstant.SPEC_STATUS_PUSHING,
|
||||
HcsSyncConstant.SPEC_STATUS_PROCESSING).contains(payment.getHcsSpecStatus())) {
|
||||
log.info("付款申请[{}]审批通过自动同步金蝶跳过(付款特批未完成):hcsSpecStatus={}", id, payment.getHcsSpecStatus());
|
||||
|
||||
+5
-2
@@ -51,6 +51,7 @@ import org.springblade.thirdparty.bfi.util.BfiUtil;
|
||||
import org.springblade.transport.config.BfiProperties;
|
||||
import org.springblade.transport.constant.KingdeeAttachmentConstant;
|
||||
import org.springblade.transport.constant.HcsSyncConstant;
|
||||
import org.springblade.hcs.config.HcsProperties;
|
||||
import org.springblade.transport.constant.KingdeeBfiConstant;
|
||||
import org.springblade.transport.constant.KingdeeLockConstant;
|
||||
import org.springblade.transport.constant.TransportBusiConstant;
|
||||
@@ -187,6 +188,7 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl<PaymentApplic
|
||||
private final BladeRedis bladeRedis;
|
||||
private final ApplicationEventPublisher eventPublisher;
|
||||
private final HcsCreditCheckSupport hcsCreditCheckSupport;
|
||||
private final HcsProperties hcsProperties;
|
||||
private final IContractExeStageService contractExeStageService;
|
||||
|
||||
@Override
|
||||
@@ -718,8 +720,9 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl<PaymentApplic
|
||||
context.paymentNoCache().put(id, entity.getPaymentNo());
|
||||
if (!TransportBusiConstant.APPROVED.equals(entity.getApprovalStatus())) throw new ServiceException("仅审批通过的付款申请允许生成金蝶单据");
|
||||
// 高风险/黑名单客商付款特批门禁:待特批/特批审核中(挂起"特批审核")禁止推送金蝶,
|
||||
// 特批通过(合规 paymentLegal/result 回调恢复"审批通过")后放行
|
||||
if (entity.getHcsSpecStatus() != null && List.of(HcsSyncConstant.SPEC_STATUS_NEED, HcsSyncConstant.SPEC_STATUS_PUSHING,
|
||||
// 特批通过(合规 paymentLegal/result 回调恢复"审批通过")后放行;
|
||||
// 特批不走合同系统(spec-pay.enabled=false)时不拦截
|
||||
if (hcsProperties.getSpecPay().isEnabled() && entity.getHcsSpecStatus() != null && List.of(HcsSyncConstant.SPEC_STATUS_NEED, HcsSyncConstant.SPEC_STATUS_PUSHING,
|
||||
HcsSyncConstant.SPEC_STATUS_PROCESSING).contains(entity.getHcsSpecStatus())) {
|
||||
throw new ServiceException("收款方客商为高风险/黑名单,付款特批审核中(" + entity.getCurrentNode() + "),特批完成后方可推送金蝶");
|
||||
}
|
||||
|
||||
+7
@@ -171,6 +171,13 @@ public class HcsImmediatePushSupport {
|
||||
return hcsProperties.getPush().isImmediateEnabled();
|
||||
}
|
||||
|
||||
/**
|
||||
* 付款特批走合同合规开关(thirdParty.hcs.spec-pay.enabled),关闭时审批响应不再提示特批待发起/已发起
|
||||
*/
|
||||
public boolean isSpecPayEnabled() {
|
||||
return hcsProperties.getSpecPay().isEnabled();
|
||||
}
|
||||
|
||||
/**
|
||||
* 项目立项"通过"按钮路径:在审批事务提交返回后由 Controller 同步调用,失败原因留在当前线程供其取走
|
||||
*
|
||||
|
||||
+3
-2
@@ -86,8 +86,9 @@ public class HcsPaymentSyncSupport {
|
||||
public String pushPayment(PaymentApplication payment) {
|
||||
StringBuilder result = new StringBuilder();
|
||||
// ① 结算付款特批:提交时高风险/黑名单(须特批附件)或额度超额(hcs_spec_status=need)且未发起时发起 C106-3;
|
||||
// 发起后挂起等待特批结果,特批通过后不推履约数据(各业务环节推送),仅补推金蝶(驳回不产生履约数据)
|
||||
if (HcsSyncConstant.SPEC_STATUS_NEED.equals(payment.getHcsSpecStatus())) {
|
||||
// 发起后挂起等待特批结果,特批通过后不推履约数据(各业务环节推送),仅补推金蝶(驳回不产生履约数据);
|
||||
// spec-pay.enabled=false(特批不走合同系统)时跳过发起,need 仅作附件要求留痕
|
||||
if (HcsSyncConstant.SPEC_STATUS_NEED.equals(payment.getHcsSpecStatus()) && hcsProperties.getSpecPay().isEnabled()) {
|
||||
String specResult = hcsSpecPaySyncSupport.pushSpecPay(payment);
|
||||
// C106-4 更新路径不改状态,统一归一为特批审核中,避免下轮扫描重复发起
|
||||
if (HcsSyncConstant.SPEC_STATUS_NEED.equals(payment.getHcsSpecStatus())) {
|
||||
|
||||
+7
@@ -273,6 +273,13 @@ public class HcsProperties {
|
||||
|
||||
@Data
|
||||
public static class SpecPay {
|
||||
/**
|
||||
* 付款特批走合同合规开关(thirdParty.hcs.spec-pay.enabled,默认 false 不推送合同合规):
|
||||
* true 时审批通过后发起 C106-3/4、挂起"特批审核"、特批完成前拦截金蝶推送;
|
||||
* false 时不再发起 C106-3/4、不挂起、不拦截金蝶推送;
|
||||
* 提交时高风险/黑名单风险校验与「特批附件」必传逻辑保留(risk.check-on-payment)
|
||||
*/
|
||||
private boolean enabled = false;
|
||||
/**
|
||||
* 特批单据状态(fd_doc_status,示例 10,§9-U3 待联调)
|
||||
*/
|
||||
|
||||
@@ -324,6 +324,8 @@ thirdParty:
|
||||
require-contract-synced: ${HCS_CREDIT_REQUIRE_CONTRACT_SYNCED:true}
|
||||
# 结算付款特批(C106-3/4)
|
||||
spec-pay:
|
||||
# 付款特批走合同合规开关(false 时不再发起 C106-3/4、不挂起"特批审核"、不拦金蝶推送;提交时特批附件必传逻辑保留)
|
||||
enabled: ${HCS_SPEC_PAY_ENABLED:false}
|
||||
# 单据状态(示例 10)
|
||||
doc-status: ${HCS_SPEC_PAY_DOC_STATUS:10}
|
||||
# 付款用途/性质/类型字典值(§9-U3 待联调后配置)
|
||||
|
||||
@@ -270,6 +270,8 @@ thirdParty:
|
||||
require-contract-synced: ${HCS_CREDIT_REQUIRE_CONTRACT_SYNCED:true}
|
||||
# 结算付款特批(C106-3/4)
|
||||
spec-pay:
|
||||
# 付款特批走合同合规开关(false 时不再发起 C106-3/4、不挂起"特批审核"、不拦金蝶推送;提交时特批附件必传逻辑保留)
|
||||
enabled: ${HCS_SPEC_PAY_ENABLED:false}
|
||||
# 单据状态(示例 10)
|
||||
doc-status: ${HCS_SPEC_PAY_DOC_STATUS:10}
|
||||
# 付款用途/性质/类型字典值(§9-U3 待联调后配置)
|
||||
|
||||
Reference in New Issue
Block a user