From 08d9a87e296cececda33e31036b8980192771a85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B3=89=E4=BD=B3?= <1107186916@qq.com> Date: Fri, 2 Oct 2026 00:17:32 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20A303-1=20=E5=BC=80=E7=A5=A8=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E6=8E=A8=E9=80=81=E7=89=B9=E6=AE=8A=E7=A5=A8=E7=A7=8D?= =?UTF-8?q?=E6=98=A0=E5=B0=84=EF=BC=88=E8=BF=90=E8=B4=B9=E7=A5=A8=E9=80=81?= =?UTF-8?q?E04=E3=80=81=E5=85=B6=E4=BD=99=E9=80=8100=E9=9D=9E=E7=89=B9?= =?UTF-8?q?=E6=AE=8A=E7=A5=A8=E7=A7=8D=EF=BC=89=EF=BC=8Chsbz=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E6=8C=89=E4=B8=8D=E5=90=AB=E7=A8=8E=E5=8F=A3=E5=BE=84?= =?UTF-8?q?=E9=80=810=EF=BC=88=E9=87=91=E8=9D=B6=E8=81=94=E8=B0=83?= =?UTF-8?q?=E5=8F=8D=E9=A6=88=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constant/KingdeeBfiConstant.java | 10 ++++++ .../impl/InvoiceApplicationServiceImpl.java | 33 +++++++++++++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/constant/KingdeeBfiConstant.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/constant/KingdeeBfiConstant.java index b296c051..b4329814 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/constant/KingdeeBfiConstant.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/constant/KingdeeBfiConstant.java @@ -25,6 +25,7 @@ */ package org.springblade.transport.constant; +import java.util.List; import java.util.Map; /** @@ -149,6 +150,15 @@ public final class KingdeeBfiConstant { /** A303-1 发票种类:数电发票(增值税专用发票)。 */ public static final String BFI_INVOICE_TYPE_DIGITAL_SPECIAL = "08xdp"; + /** A303-1 特殊票种:货物运输(运费/货物运输类发票)。 */ + public static final String BFI_INVOICE_SPECIAL_TYPE_FREIGHT = "E04"; + + /** A303-1 特殊票种:非特殊票种(其余费用类发票,如其他、非货物运输的运输类)。 */ + public static final String BFI_INVOICE_SPECIAL_TYPE_NONE = "00"; + + /** A303-1 特殊票种货物运输判定关键字:命中商品名称或商品和服务分类简称即视为货物运输类。 */ + public static final List BFI_INVOICE_FREIGHT_KEYWORDS = List.of("货物运输", "运费"); + /** 金蝶同步状态:开票完成(A303-5 查到发票,终态,开票申请专用)。 */ public static final String KINGDEE_STATUS_INVOICED = "invoiced"; 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 27205394..5a182256 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 @@ -778,8 +778,10 @@ public class InvoiceApplicationServiceImpl extends BaseServiceImpl items) { + boolean allFreight = items.stream() + .allMatch(item -> this.isFreightGoods(item.getGoodsname(), item.getGoodssimplename())); + return allFreight ? KingdeeBfiConstant.BFI_INVOICE_SPECIAL_TYPE_FREIGHT : KingdeeBfiConstant.BFI_INVOICE_SPECIAL_TYPE_NONE; + } + + /** + * 商品行是否货物运输类:商品名称或商品和服务分类简称含关键字(运费/货物运输)即视为命中; + * 其他费用及非货物运输的运输类(如按简称“运输”维护的开票项目)不命中,随全张送非特殊票种 00 + * + * @param goodsname 商品名称(开票项目简称,如 运费) + * @param goodssimplename 商品和服务分类简称(开票项目分类名) + * @return true 表示货物运输类 + */ + private boolean isFreightGoods(String goodsname, String goodssimplename) { + String goodsText = Func.toStr(goodsname).trim() + Func.toStr(goodssimplename).trim(); + return KingdeeBfiConstant.BFI_INVOICE_FREIGHT_KEYWORDS.stream().anyMatch(goodsText::contains); + } + @Override public String syncKingdeeInvoiceResult() { return kingdeeSyncLockSupport.runSingleFlight(INVOICE_RESULT_SYNC_LOCK_PREFIX, invoiceResultLockLeaseSeconds,