fix: 作废认领不再生成本地KDCX冲单——金蝶单号/状态保留原值,接口改无返回

This commit is contained in:
刘泉佳
2026-09-29 11:15:57 +08:00
parent 175dd52d33
commit c8b2b701a3
5 changed files with 11 additions and 18 deletions
@@ -84,8 +84,9 @@ public class ReceiptClaimRecordController extends BladeController {
@PostMapping("/void")
@ApiOperationSupport(order = 4)
@Operation(summary = "作废认领记录并生成金蝶认领冲单")
public R<String> voidClaim(@RequestParam Long id) {
return R.data(receiptClaimRecordService.voidClaim(id));
public R<Void> voidClaim(@RequestParam Long id) {
receiptClaimRecordService.voidClaim(id);
return R.success("作废成功");
}
@PostMapping("/query-kingdee-result")
@@ -45,7 +45,7 @@ public interface IReceiptClaimRecordService extends BaseService<ReceiptClaim> {
void updateAttachments(ReceiptClaimAttachmentsRequest request);
String voidClaim(Long id);
void voidClaim(Long id);
/**
* A301-1 收款单查询回写认领结果:按来源单据编码匹配金蝶收款单,推进金蝶单据状态
@@ -184,7 +184,7 @@ public class ReceiptClaimRecordServiceImpl extends BaseServiceImpl<ReceiptClaimM
@Override
@Transactional(rollbackFor = Exception.class)
public String voidClaim(Long id) {
public void voidClaim(Long id) {
ReceiptClaim claim = baseMapper.selectOne(Wrappers.<ReceiptClaim>lambdaQuery()
.eq(ReceiptClaim::getId, id)
.eq(ReceiptClaim::getClaimerId, AuthUtil.getUserId())
@@ -252,10 +252,9 @@ public class ReceiptClaimRecordServiceImpl extends BaseServiceImpl<ReceiptClaimM
flow.setClaimStatus(amountClaimStatus(flowClaimedAfter, flow.getUnclaimedAmount()));
receiptFlowMapper.updateById(flow);
String kingdeeBillNo = buildKingdeeBillNo(claim.getId());
// 作废不生成金蝶认领冲单:金蝶单号/状态保留原值(未推送为空,已推送为真实收款单信息),
// 金蝶侧冲销/红冲由人工处置
claim.setClaimStatus(VOIDED);
claim.setKingdeeBillNo(kingdeeBillNo);
claim.setKingdeeBillStatus(APPROVED);
claim.setVoidedBy(AuthUtil.getUserId());
claim.setVoidedByName(Func.isEmpty(AuthUtil.getUserName()) ? claim.getClaimerName()
: AuthUtil.getUserName());
@@ -272,9 +271,8 @@ public class ReceiptClaimRecordServiceImpl extends BaseServiceImpl<ReceiptClaimM
operationRecord.setOperationAmount(money(claim.getClaimAmount()));
operationRecord.setOperatorName(Func.isEmpty(AuthUtil.getUserName()) ? "system"
: AuthUtil.getUserName());
operationRecord.setContent("生成金蝶认领冲单:" + kingdeeBillNo + ",状态:审核通过");
operationRecord.setContent("作废认领,回退认领金额 " + money(claim.getClaimAmount()));
recordMapper.insert(operationRecord);
return kingdeeBillNo;
}
/**
@@ -394,12 +392,6 @@ public class ReceiptClaimRecordServiceImpl extends BaseServiceImpl<ReceiptClaimM
return VOIDED.equals(claimStatus) ? VOIDED : CLAIMED;
}
private String buildKingdeeBillNo(Long claimId) {
String time = DateTimeFormatter.ofPattern("yyyyMMddHHmmss").format(LocalDateTime.now());
String suffix = String.valueOf(claimId);
return "KDCX" + time + suffix.substring(Math.max(0, suffix.length() - 6));
}
/**
* 累计认领金额 → 流水认领状态:对照公告未认领金额判定(与收款流水侧口径一致)
*/
@@ -172,7 +172,7 @@ claimed 累计有效认领 == unclaimed_amount(且 > 0) ← 「认领
`voidClaim()` 现有逻辑保留:
1. **累计认领不考虑作废**:作废行 `status=0`,分摊聚合天然排除——与「累计认领不考虑作废的」要求一致,无需改代码;作废后重算流水 `claimed_amount/claim_status`(口径按 §3.2)。
2. **作废永不触发推送**:未推送的认领作废 → 纯本地;已推送流水的认领作废 → 本地 KDCX 冲单号 + 金蝶人工处置(沿用旧文档原则 5)。作废后即使重认领使等式再次满足,`push_status=pushed` 的终态闸门也阻止二次推送。
2. **作废永不触发推送、不生成冲单**:未推送的认领作废 → 纯本地;已推送流水的认领作废 → 不生成本地冲单号,认领记录金蝶信息保留原值,金蝶侧冲销/红冲由人工处置(沿用旧文档原则 5)。作废后即使重认领使等式再次满足,`push_status=pushed` 的终态闸门也阻止二次推送。
### 4.7 重新同步(A301-2 sync 补一处)
@@ -247,7 +247,7 @@ claimed 累计有效认领 == unclaimed_amount(且 > 0) ← 「认领
| 推送报文 | `buildClaimPushDTO` | billid=流水.bill_id;**单条分录**:e_receivableamt=全部未推送金额(累计有效认领),seq/e_corebillno=第一张结算单id;awrp_src_code=分摊结算单号下划线拼接 |
| 手动接口 | `ReceiptFlowController.pushKingdee`(`POST /receipt-flow/push-kingdee`) | 成功返回金蝶收款单号,失败 R.fail(原因);按钮权限 `receipt_flow_push` |
| 回写 | `ReceiptClaimRecordServiceImpl.refreshKingdeeResult()` | 轮询对象改流水(push_status=pushed 且回写状态 pushed/approved),按流水 awrp_src_code 匹配,级联刷新认领主单冗余字段 |
| 作废 | `ReceiptClaimRecordServiceImpl.voidClaim()` | claim_status 重算口径改对照公告未认领金额(其余不变,作废不触发推送) |
| 作废 | `ReceiptClaimRecordServiceImpl.voidClaim()` | claim_status 重算口径改对照公告未认领金额;**不再生成本地 KDCX 冲单号**(金蝶单号/状态保留原值),作废不触发推送 |
| 同步 | `ReceiptFlowServiceImpl.sync()` + 共享 `queryClaimAnnounces` | unclaimed_amount 刷新后按新口径重算 claim_status;公告查询方法供 sync/手动推送/定时任务共用 |
| 常量 | `KingdeeBfiConstant` | 新增 RECEIPT_CLAIM_PUSH_NONE/PUSHED/FAILED、RECEIPT_CLAIM_BILL_NONE |
| 实体/VO | `KingdeeReceiptFlow`(推送域6字段)、`ReceiptClaim`(删 awrpSrcCode)、`ReceiptClaimMapper.xml`(删列)、`ReceiptFlowVO/Wrapper`(pushStatusName/kingdeeBillStatusName、剩余可认领改公告口径)、`ReceiptClaimPushResult`(新增 DTO) | — |
@@ -92,7 +92,7 @@
2. **作废永远不会触发推送**。
3. 按流水是否已推送区分:
- **未推送**:纯本地生效,无金蝶影响;补认领到认领完成后仍可正常推送;
- **已推送**:本地生成冲单号留痕,金蝶侧冲销/红冲由人工在金蝶处置,该流水不会被再次自动推送。
- **已推送**:不生成本地冲单,金蝶侧的冲销/红冲由人工在金蝶处置,该流水不会被再次自动推送。
---