fix: 修复收票单推送金蝶防重键不匹配导致指定应付和幂等预检失败
A303-2保存收票单时awrp_src_code使用receipt.getId(),但A302-6指定应付 和A801-3幂等预检误用receipt.getInvoiceNo(),导致: 1. A302-6指定应付传入发票号而非收票登记ID,金蝶报收票单不存在 2. A801-3预检用发票号匹配金蝶awrp_src_code(收票登记ID),永远匹配不到 已存在的收票单,重推时重复调A303-2被金蝶拒绝(已审核不允许修改) 修复:统一使用receipt.getId()作为收票单防重键 - assignApBill入参改为receipt.getId()(含补偿方法) - queryKingdeeReceivedInvoiceRows传入receipt.getId() - kingdeeRows.get()的key改为receipt.getId() - 更正assignApBill方法注释
This commit is contained in:
+6
-6
@@ -664,7 +664,7 @@ public class InvoiceReceiptServiceImpl extends BaseServiceImpl<InvoiceReceiptMap
|
||||
if (!failures.isEmpty()) {
|
||||
summary = summary + ",失败 " + failures.size() + " 笔:" + String.join(";", failures);
|
||||
}
|
||||
log.info("{}", summary);
|
||||
log.info("推送金蝶收票单返回信息{}", summary);
|
||||
return summary;
|
||||
}
|
||||
|
||||
@@ -695,7 +695,7 @@ public class InvoiceReceiptServiceImpl extends BaseServiceImpl<InvoiceReceiptMap
|
||||
+ "未生成财务应付单");
|
||||
}
|
||||
String billNo;
|
||||
BfiReceivedInvoiceVO kingdeeRow = kingdeeRows.get(receipt.getInvoiceNo());
|
||||
BfiReceivedInvoiceVO kingdeeRow = kingdeeRows.get(String.valueOf(receipt.getId()));
|
||||
if (kingdeeRow != null) {
|
||||
if (kingdeeReceivedInvoiceSyncSupport.isAbnormalInvoiceStatus(kingdeeRow.getInvoicestatus())) {
|
||||
String abnormalReason = truncatePushMsg("金蝶侧收票单发票状态异常("
|
||||
@@ -736,7 +736,7 @@ public class InvoiceReceiptServiceImpl extends BaseServiceImpl<InvoiceReceiptMap
|
||||
applyReceivedInvoicePushResult(receipt, billNo, KingdeeBfiConstant.RECEIVED_PUSH_PUSHED, null, false);
|
||||
try {
|
||||
log.info("收票登记[{}]开始 A302-6 指定应付:应付单防重键={}", receipt.getInvoiceNo(), apBillSrcCode);
|
||||
kingdeeReceivedInvoiceSyncSupport.assignApBill(receipt.getInvoiceNo(), apBillSrcCode);
|
||||
kingdeeReceivedInvoiceSyncSupport.assignApBill(String.valueOf(receipt.getId()), apBillSrcCode);
|
||||
} catch (RuntimeException assignException) {
|
||||
log.warn("收票登记[{}]A302-6 指定应付失败:{}", receipt.getInvoiceNo(), assignException.getMessage());
|
||||
applyReceivedInvoicePushResult(receipt, billNo, KingdeeBfiConstant.RECEIVED_PUSH_FAILED,
|
||||
@@ -798,8 +798,8 @@ public class InvoiceReceiptServiceImpl extends BaseServiceImpl<InvoiceReceiptMap
|
||||
if (plan.blockedReason() != null) {
|
||||
continue;
|
||||
}
|
||||
invoiceNosByBuyer.computeIfAbsent(Func.toStrWithEmpty(plan.mirror().getReceiverName(), ""),
|
||||
key -> new LinkedHashSet<>()).add(plan.receipt().getInvoiceNo());
|
||||
invoiceNosByBuyer.computeIfAbsent(Func.toStrWithEmpty(plan.mirror().getReceiverName(), ""),
|
||||
key -> new LinkedHashSet<>()).add(String.valueOf(plan.receipt().getId()));
|
||||
}
|
||||
Map<String, BfiReceivedInvoiceVO> rows = new LinkedHashMap<>();
|
||||
LocalDateTime windowEnd = LocalDateTime.now();
|
||||
@@ -956,7 +956,7 @@ public class InvoiceReceiptServiceImpl extends BaseServiceImpl<InvoiceReceiptMap
|
||||
throw new ServiceException("收票单指定应付补偿失败:分摊关系不满足一票一应付");
|
||||
}
|
||||
try {
|
||||
kingdeeReceivedInvoiceSyncSupport.assignApBill(receipt.getInvoiceNo(), apBillSrcCode);
|
||||
kingdeeReceivedInvoiceSyncSupport.assignApBill(String.valueOf(receipt.getId()), apBillSrcCode);
|
||||
} catch (RuntimeException assignException) {
|
||||
applyReceivedInvoicePushResult(receipt, row.getBillno(), KingdeeBfiConstant.RECEIVED_PUSH_FAILED,
|
||||
truncatePushMsg("收票单指定应付补偿失败:" + assignException.getMessage()), true);
|
||||
|
||||
+3
-3
@@ -263,11 +263,11 @@ public class KingdeeReceivedInvoiceSyncSupport {
|
||||
// ==================== A302-6 收票指定应付 ====================
|
||||
|
||||
/**
|
||||
* 收票单指定财务应付单(A302-6,一票一应付):按「收票单防重键(发票号码)↔ 财务应付单防重键
|
||||
* 收票单指定财务应付单(A302-6,一票一应付):按「收票单防重键(收票登记ID)↔ 财务应付单防重键
|
||||
* (正式结算单号_结算明细单据号拼接)」建立绑定;金蝶侧解除指定(unassign)不自动执行,人工处理后重推
|
||||
*
|
||||
* @param invoiceSrcCode 收票单防重键(发票号码,即 A303-2 的 awrp_src_code)
|
||||
* @param apBillSrcCode 财务应付单防重键
|
||||
* @param invoiceSrcCode 收票单防重键(收票登记ID,即 A303-2 的 awrp_src_code = receipt.getId())
|
||||
* @param apBillSrcCode 财务应付单防重键(即 A102-2 的 awrp_src_code = 正式结算单号_结算明细单据号拼接)
|
||||
*/
|
||||
public void assignApBill(String invoiceSrcCode, String apBillSrcCode) {
|
||||
BfiInvoiceAssignItemDTO item = new BfiInvoiceAssignItemDTO();
|
||||
|
||||
Reference in New Issue
Block a user