Parcourir la source

谷元发票识别调整

lfx il y a 4 mois
Parent
commit
1b036f7922

+ 44 - 8
src/main/java/com/malk/pro/guyuan/controller/IVController.java

@@ -173,24 +173,58 @@ public class IVController {
             image = pdfUrlConvertBase64(image);
         }
         List<Map> invoices = (List<Map>) txyInvoice.doRecognizeGeneralInvoice(image).get("MixedInvoiceItems");
+        List<String> nos=new ArrayList<>();
         List<McInvoiceDto> result = invoices.stream().map(item -> {
             Map prop = UtilMap.getMap(UtilMap.getMap(item, "SingleInvoiceInfos"), UtilMap.getString(item, "SubType"));
+            String no=UtilMap.getString(prop, "Number");
+            if(nos.contains(no)){
+                return null;
+            }
+            nos.add(no);
+            String kind = UtilMap.getString(item, "TypeDescription");
+            String invoiceName = UtilMap.getString(item, "SubTypeDescription");
+            if (kind.equals("全电发票")) {
+                if(invoiceName.contains("铁路电子客票")){
+                    kind="火车票";
+                } else if(invoiceName.contains("机票行程单")){
+                    kind="机票行程单";
+                } else if (invoiceName.contains("专用发票")) {
+                    kind="全电专用发票";
+                }else {
+                    kind="全电普通发票";
+                }
+            }
+            if (kind.equals("增值税发票")) {
+                if(invoiceName.contains("区块链电子发票")){
+                    kind="区块链电子发票";
+                } else if(invoiceName.contains("增值税专用发票")){
+                    kind="增值税专用发票";
+                } else if(invoiceName.contains("增值税普通发票")){
+                    kind="增值税普通发票";
+                } else if (invoiceName.contains("增值税电子专用发票")) {
+                    kind="增值税电子专用发票";
+                } else if (invoiceName.contains("增值税电子普通发票")) {
+                    kind="增值税电子普通发票";
+                }else {
+                    kind="增值税普通发票";
+                }
+            }
             // ppExt: 通用字段定义
             McInvoiceDto invoiceDto = McInvoiceDto.builder()
                     .name(UtilMap.getString(item, "SubTypeDescription"))
-                    .kindName(UtilMap.getString(item, "TypeDescription"))
+                    .kindName(kind)
                     .kind(UtilMap.getInt(item, "Type"))
                     .code(UtilMap.getString(prop, "Code"))
                     .serial(UtilMap.getString(prop, "Number"))
                     .date(UtilString.replaceDateZH_cn(UtilMap.getString(prop, "Date")))
                     .checkCode(UtilMap.getString(prop, "CheckCode"))
-                    // ppExt: 多明细行时, 优先取值合计 [全电票返回了subTotal字段, 但值为空]
-                    .amount(UtilNumber.setBigDecimal(UtilMap.getString_first(prop, "SubTotal", "Total")))
-                    .tax(UtilNumber.setBigDecimal(UtilMap.getString_first(prop, "SubTax", "Tax")))
+                    // ppExt: 多明细行时, 优先取值合计 [全电票返回了subTotal字段, 但值为空] // 2025.5.12 去除小计金额,并去除发票编号重复数据
+                    .amount(UtilNumber.setBigDecimal(UtilMap.getString_first(prop,  "Total", "Fare"))) // "SubTotal",
+                    .tax(UtilNumber.setBigDecimal(UtilMap.getString_first(prop,  "Tax"))) // "SubTax",
                     .excludingTax(UtilNumber.setBigDecimal(UtilMap.getString(prop, "PretaxAmount")))
-                    .buyerName(guyuanNameRepalce(UtilMap.getString(prop, "Buyer")))
+                    .buyerName(StringUtils.isBlank(guyuanNameRepalce(UtilMap.getString(prop, "Buyer")))?"上海能辉科技股份有限公司":guyuanNameRepalce(UtilMap.getString(prop, "Buyer")))
                     // ppExt: 中央非税未返回税号官方说明: 非税发票理论是没有税号的,图片中属于信用代码
-                    .buyerTaxId(UtilMap.getString(prop, "BuyerTaxID"))
+                    .buyerTaxId(StringUtils.isBlank(UtilMap.getString(prop, "BuyerTaxID"))?"": UtilMap.getString(prop, "BuyerTaxID"))
                     .sellerName(guyuanNameRepalce(UtilMap.getString_first(prop, "Seller", "Issuer")))                            // 行程单: 填开单位
                     .sellerTaxId(UtilMap.getString_first(prop, "SellerTaxID", "AgentCode"))                       // 行程单: 销售单位代号
                     .passengerName(UtilMap.getString_first(prop, "Name", "UserName"))                             // 火车票, 行程单
@@ -205,7 +239,9 @@ public class IVController {
                     .constructionCosts(UtilNumber.setBigDecimal((UtilMap.getString(prop, "AirDevelopmentFund"))))   // 行程单: 民航发展基金
                     .build();
             // ppExt: 机票行程单, 行程与座位信息在明细内
-            if ("机票行程单".equals(item.get("TypeDescription"))) {
+            if ("机票行程单".equals(kind)) {
+                invoiceDto.setSellerName(UtilMap.getString_first(prop, "Issuer"));
+                invoiceDto.setSellerTaxId(UtilMap.getString_first(prop, "Seller"));
                 Map flight = (Map) UtilMap.getList(prop, "FlightItems").get(0);
                 invoiceDto.setDepartureTime(UtilString.replaceDateZH_cn(UtilMap.getString(item, "DateGetOn")) + " " + UtilMap.getString(prop, "TimeGetOn"));
                 invoiceDto.setDeparturePort(UtilMap.getString(flight, "StationGetOn"));
@@ -217,7 +253,7 @@ public class IVController {
                 invoiceDto.setDepartureTime(UtilMap.getString(prop, "TimeGetOn") + " ~ " + UtilMap.getString(prop, "TimeGetOff"));
             }
             return invoiceDto;
-        }).collect(Collectors.toList());
+        }).filter(item -> item!=null).collect(Collectors.toList());
         return McR.success(McInvoiceDto.formatResponse(result));
     }
 

Fichier diff supprimé car celui-ci est trop grand
+ 80 - 0
src/main/java/com/malk/pro/guyuan/server/tencent/TXYConfNh.java