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,