From 8b057ebddedda48efd6fd3e1978e27eeef264bc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B3=89=E4=BD=B3?= <1107186916@qq.com> Date: Mon, 2 Nov 2026 19:35:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BB=98=E6=AC=BE=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E5=8D=95=E5=88=97=E8=A1=A8=E5=A2=9E=E5=8A=A0=E5=B7=B2=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E5=BA=94=E4=BB=98=E8=81=9A=E5=90=88=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pojo/vo/PaymentApplicationVO.java | 2 + .../impl/PaymentApplicationServiceImpl.java | 50 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/PaymentApplicationVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/PaymentApplicationVO.java index 8c079128..3e7f0690 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/PaymentApplicationVO.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/PaymentApplicationVO.java @@ -50,6 +50,8 @@ public class PaymentApplicationVO extends PaymentApplication implements KingdeeU @TableField(exist = false) private String kingdeeLockStatus; @TableField(exist = false) private String kingdeeLockFailReason; @TableField(exist = false) private Integer kingdeeTryCount; + /** 已指定应付聚合态(assigned全部已指定/failed存在指定失败/unspecified存在未指定),空展示- */ + @TableField(exist = false) private String kingdeeAssignStatus; /** 金蝶解锁终态标识(unlocked 锁记录回填):解锁时间非空即代表该单曾被金蝶解锁/删单,供页面展示明显标识 */ @TableField(exist = false) private LocalDateTime kingdeeUnlockTime; /** 金蝶侧解锁操作人(回调报文 operator) */ diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PaymentApplicationServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PaymentApplicationServiceImpl.java index b80607b9..91c5bb33 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PaymentApplicationServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PaymentApplicationServiceImpl.java @@ -64,6 +64,8 @@ import org.springblade.transport.mapper.FormalSettlementDetailMapper; import org.springblade.transport.mapper.FormalSettlementMapper; import org.springblade.transport.mapper.FormalSettlementPaymentMapper; import org.springblade.transport.mapper.FormalSettlementSourceMapper; +import org.springblade.transport.mapper.InvoiceReceiptMapper; +import org.springblade.transport.mapper.InvoiceReceiptSettlementMapper; import org.springblade.transport.mapper.PaymentApplicationInvoiceMapper; import org.springblade.transport.mapper.PaymentApplicationMapper; import org.springblade.transport.mapper.PaymentApplicationRecordMapper; @@ -85,6 +87,8 @@ import org.springblade.transport.pojo.entity.CustomerReceiptAccount; import org.springblade.transport.pojo.entity.FormalSettlement; import org.springblade.transport.pojo.entity.FormalSettlementDetail; import org.springblade.transport.pojo.entity.FormalSettlementPayment; +import org.springblade.transport.pojo.entity.InvoiceReceipt; +import org.springblade.transport.pojo.entity.InvoiceReceiptSettlement; import org.springblade.transport.pojo.entity.FormalSettlementSource; import org.springblade.transport.pojo.entity.HcsContractExeStage; import org.springblade.transport.pojo.entity.KingdeeBillLock; @@ -170,6 +174,8 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl rows) { + Set settlementIds = rows.stream() + .map(PaymentApplicationVO::getSettlementId).filter(Objects::nonNull).collect(Collectors.toSet()); + if (settlementIds.isEmpty()) { + return; + } + List relations = invoiceReceiptRelationMapper.selectList( + Wrappers.lambdaQuery() + .in(InvoiceReceiptSettlement::getFormalSettlementId, settlementIds)); + Map> receiptIdsBySettlement = relations.stream() + .filter(relation -> relation.getFormalSettlementId() != null && relation.getInvoiceReceiptId() != null) + .collect(Collectors.groupingBy(InvoiceReceiptSettlement::getFormalSettlementId, + Collectors.mapping(InvoiceReceiptSettlement::getInvoiceReceiptId, Collectors.toList()))); + List receiptIds = receiptIdsBySettlement.values().stream() + .flatMap(List::stream).distinct().toList(); + Map receiptById = receiptIds.isEmpty() ? Map.of() + : invoiceReceiptMapper.selectBatchIds(receiptIds).stream() + .filter(receipt -> !TransportBusiConstant.VOIDED.equals(receipt.getApprovalStatus()) + && !Objects.equals(receipt.getIsDeleted(), 1)) + .collect(Collectors.toMap(InvoiceReceipt::getId, receipt -> receipt, (left, right) -> left)); + for (PaymentApplicationVO vo : rows) { + List statuses = receiptIdsBySettlement.getOrDefault(vo.getSettlementId(), List.of()).stream() + .map(receiptById::get).filter(Objects::nonNull) + .map(receipt -> Func.toStrWithEmpty(receipt.getKingdeePushStatus(), + KingdeeBfiConstant.RECEIVED_PUSH_UNSYNCED)) + .toList(); + if (statuses.isEmpty()) { + continue; + } + String status = statuses.contains(KingdeeBfiConstant.RECEIVED_PUSH_FAILED) ? "failed" + : statuses.stream().allMatch(KingdeeBfiConstant.RECEIVED_PUSH_ASSIGNED::equals) + ? "assigned" : "unspecified"; + vo.setKingdeeAssignStatus(status); + } + } + /** * 填充金蝶锁状态标识(locked-锁定中/failed-锁定失败;unlocked 终态不返回): * 锁表按本页源单一次批量查询,避免 N+1;locked 时前端可禁用编辑/作废,