From 0b88d05e938cbcddb91427e0f26e3474027be0bd 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, 28 Sep 2026 16:04:43 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=94=B6=E6=AC=BE=E6=B5=81=E6=B0=B4?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=96=B9=E6=B3=95=E5=A2=9E=E5=8A=A0=E8=AF=A6?= =?UTF-8?q?=E7=BB=86=E6=97=A5=E5=BF=97=E5=92=8C=E6=B3=A8=E9=87=8A=E8=AF=B4?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/ReceiptFlowServiceImpl.java | 68 ++++++++++++------- 1 file changed, 45 insertions(+), 23 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ReceiptFlowServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ReceiptFlowServiceImpl.java index 8433fdc3..47db5858 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ReceiptFlowServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ReceiptFlowServiceImpl.java @@ -37,6 +37,14 @@ import org.springblade.core.tool.utils.Func; import org.springblade.system.cache.SysCache; import org.springblade.system.cache.UserCache; import org.springblade.system.pojo.entity.Dept; +import org.springblade.thirdparty.bfi.pojo.dto.BfiClaimAnnounceQueryDTO; +import org.springblade.thirdparty.bfi.pojo.dto.BfiClaimPushDTO; +import org.springblade.thirdparty.bfi.pojo.dto.BfiClaimPushEntryDTO; +import org.springblade.thirdparty.bfi.pojo.vo.BfiBillSaveResultItemVO; +import org.springblade.thirdparty.bfi.pojo.vo.BfiBillSaveResultVO; +import org.springblade.thirdparty.bfi.pojo.vo.BfiClaimAnnounceVO; +import org.springblade.thirdparty.bfi.service.IBfiService; +import org.springblade.thirdparty.bfi.util.BfiUtil; import org.springblade.transport.config.BfiProperties; import org.springblade.transport.constant.KingdeeBfiConstant; import org.springblade.transport.mapper.FormalSettlementMapper; @@ -51,18 +59,10 @@ import org.springblade.transport.pojo.entity.ReceiptClaim; import org.springblade.transport.pojo.entity.ReceiptClaimSettlement; import org.springblade.transport.pojo.entity.ReceiptFlowRecord; import org.springblade.transport.pojo.vo.ReceiptFlowVO; -import org.springblade.transport.service.IReceiptFlowService; import org.springblade.transport.service.IFormalSettlementService; +import org.springblade.transport.service.IReceiptFlowService; import org.springblade.transport.support.TransportBusinessSupport; import org.springblade.transport.wrapper.ReceiptFlowWrapper; -import org.springblade.thirdparty.bfi.pojo.dto.BfiClaimAnnounceQueryDTO; -import org.springblade.thirdparty.bfi.pojo.dto.BfiClaimPushDTO; -import org.springblade.thirdparty.bfi.pojo.dto.BfiClaimPushEntryDTO; -import org.springblade.thirdparty.bfi.pojo.vo.BfiBillSaveResultItemVO; -import org.springblade.thirdparty.bfi.pojo.vo.BfiBillSaveResultVO; -import org.springblade.thirdparty.bfi.pojo.vo.BfiClaimAnnounceVO; -import org.springblade.thirdparty.bfi.service.IBfiService; -import org.springblade.thirdparty.bfi.util.BfiUtil; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -72,12 +72,10 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; -import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; @@ -346,13 +344,18 @@ public class ReceiptFlowServiceImpl extends BaseServiceImpl validAnnounces = new LinkedHashMap<>(); + int skippedCount = 0; for (BfiClaimAnnounceVO announce : announces) { + // 明细流水号优先级:detailid > tradedetailno > bankdetailno String detailSerialNo = firstNonBlank(announce.getDetailid(), announce.getTradedetailno(), announce.getBankdetailno()); if (Func.isEmpty(detailSerialNo)) { log.warn("收款流水同步跳过:认领公告[{}]缺少明细流水号", announce.getBillno()); + skippedCount++; continue; } detailSerialNo = detailSerialNo.trim(); @@ -362,18 +365,22 @@ public class ReceiptFlowServiceImpl extends BaseServiceImpl existingEntities = baseMapper.selectList( Wrappers.lambdaQuery() .in(KingdeeReceiptFlow::getDetailSerialNo, validAnnounces.keySet()) @@ -381,33 +388,41 @@ public class ReceiptFlowServiceImpl extends BaseServiceImpl existingMap = existingEntities.stream() .collect(Collectors.toMap(KingdeeReceiptFlow::getDetailSerialNo, e -> e)); - + log.info("收款流水批量查询完成:已存在 {} 条,待新增 {} 条", + existingEntities.size(), validAnnounces.size() - existingEntities.size()); + // 第二遍:构建新增和更新列表 + log.info("收款流水同步开始构建新增/更新列表"); List toInsert = new ArrayList<>(); List toUpdate = new ArrayList<>(); int createdCount = 0; int updatedCount = 0; - + for (Map.Entry entry : validAnnounces.entrySet()) { String detailSerialNo = entry.getKey(); BfiClaimAnnounceVO announce = entry.getValue(); BigDecimal receiptAmount = money(announce.getReamount()); - + + // 判断是新增还是更新 KingdeeReceiptFlow existing = existingMap.get(detailSerialNo); boolean created = (existing == null); - + KingdeeReceiptFlow entity; if (created) { + // 新增:初始化本地认领金额和状态 entity = new KingdeeReceiptFlow(); entity.setClaimedAmount(BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP)); entity.setClaimStatus(UNCLAIMED); } else { + // 更新:保留本地已认领金额和状态 entity = existing; } - + + // 复制公告数据到实体(不覆盖本地认领字段) copyAnnounceRow(entity, announce, detailSerialNo, receiptAmount); + // 根据本地已认领金额重新计算认领状态 entity.setClaimStatus(amountClaimStatus(money(entity.getClaimedAmount()), receiptAmount)); - + if (created) { toInsert.add(entity); createdCount++; @@ -416,16 +431,22 @@ public class ReceiptFlowServiceImpl extends BaseServiceImpl