From 6e5b6958eae028d5ba5cbf4a75096b69efe16930 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B3=89=E4=BD=B3?= <1107186916@qq.com> Date: Thu, 29 Oct 2026 18:17:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=BC=80=E7=A5=A8=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E6=9F=A5=E7=9C=8B=E5=A2=9E=E5=8A=A0=E6=AF=8F=E5=BC=A0=E5=8F=91?= =?UTF-8?q?=E7=A5=A8=E9=87=91=E8=9D=B6=E5=BC=80=E7=A5=A8=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E4=B8=8E=E7=BB=93=E6=9E=9C=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pojo/vo/InvoiceApplicationSheetVO.java | 5 +++ .../impl/InvoiceApplicationServiceImpl.java | 40 +++++++++++++++++-- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/InvoiceApplicationSheetVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/InvoiceApplicationSheetVO.java index 0b0dd2f8..0b35cd16 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/InvoiceApplicationSheetVO.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/InvoiceApplicationSheetVO.java @@ -26,6 +26,7 @@ package org.springblade.transport.pojo.vo; import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import org.springblade.transport.pojo.entity.InvoiceApplicationLine; @@ -44,4 +45,8 @@ import java.util.List; public class InvoiceApplicationSheetVO extends InvoiceApplicationSheet { @Serial private static final long serialVersionUID = 1L; @TableField(exist = false) private List lines; + @Schema(description = "开票状态名称(按金蝶回写的发票结果实时推导:已开票/未开票)") + @TableField(exist = false) private String invoiceStatusName; + @Schema(description = "金蝶开票结果备注(本张发票经 A303-5 回写的发票号、开票日期、价税合计汇总)") + @TableField(exist = false) private String kingdeeResultRemark; } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/InvoiceApplicationServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/InvoiceApplicationServiceImpl.java index 4865f443..3048c8bf 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/InvoiceApplicationServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/InvoiceApplicationServiceImpl.java @@ -138,6 +138,9 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpl sheets = sheetMapper.selectList(Wrappers.lambdaQuery() .eq(InvoiceApplicationSheet::getInvoiceApplicationId, id).orderByAsc(InvoiceApplicationSheet::getSheetNo)); + List invoices = invoiceApplicationInvoiceMapper.selectList( + Wrappers.lambdaQuery() + .eq(InvoiceApplicationInvoice::getInvoiceApplicationId, id) + .orderByAsc(InvoiceApplicationInvoice::getCreateTime)); + vo.setInvoices(invoices); + // 每张发票的金蝶开票结果:按张次金蝶单号归集,查看页展示开票状态与结果备注 + Map> invoicesBySerialNo = invoices.stream() + .filter(invoice -> Func.isNotBlank(invoice.getSerialNo())) + .collect(Collectors.groupingBy(invoice -> Func.toStr(invoice.getSerialNo()).trim())); vo.setSheets(sheets.stream().map(sheet -> { InvoiceApplicationSheetVO sheetVO = Objects.requireNonNull(BeanUtil.copyProperties(sheet, InvoiceApplicationSheetVO.class)); sheetVO.setLines(lineMapper.selectList(Wrappers.lambdaQuery() .eq(InvoiceApplicationLine::getInvoiceSheetId, sheet.getId()).orderByAsc(InvoiceApplicationLine::getLineNo))); + List sheetInvoices = + invoicesBySerialNo.get(Func.toStr(sheet.getKingdeeBillNo()).trim()); + sheetVO.setInvoiceStatusName(Func.isEmpty(sheetInvoices) ? INVOICE_STATUS_UNINVOICED : INVOICE_STATUS_INVOICED); + sheetVO.setKingdeeResultRemark(Func.isEmpty(sheetInvoices) ? "" : kingdeeResultRemark(sheetInvoices)); return sheetVO; }).toList()); vo.setDetails(applicationDetailMapper.selectList(Wrappers.lambdaQuery() @@ -262,9 +278,6 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpllambdaQuery() .eq(InvoiceApplicationRecord::getInvoiceApplicationId, id) .orderByAsc(InvoiceApplicationRecord::getCreateTime))); - vo.setInvoices(invoiceApplicationInvoiceMapper.selectList(Wrappers.lambdaQuery() - .eq(InvoiceApplicationInvoice::getInvoiceApplicationId, id) - .orderByAsc(InvoiceApplicationInvoice::getCreateTime))); return vo; } @@ -1340,6 +1353,27 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpl left)); } + /** + * 汇总本张发票经 A303-5 回写的金蝶开票结果备注(发票号、开票日期、价税合计) + * + * @param sheetInvoices 本张发票的金蝶发票结果 + * @return 结果备注 + */ + private String kingdeeResultRemark(List sheetInvoices) { + return sheetInvoices.stream() + .map(invoice -> { + StringBuilder remark = new StringBuilder("发票号").append(Func.toStr(invoice.getInvoiceNo())); + if (invoice.getInvoiceDate() != null) { + remark.append(",开票日期").append(invoice.getInvoiceDate().toLocalDate()); + } + if (invoice.getInvoiceAmount() != null) { + remark.append(",价税合计").append(invoice.getInvoiceAmount()); + } + return remark.toString(); + }) + .collect(Collectors.joining(";")); + } + /** * 将 A303-5 返回的发票文件地址补齐到已落库记录(仅补空字段,不覆盖已有值) *