Parcourir la source

谷元发票识别调整

lfx il y a 3 semaines
Parent
commit
223b5207c5
1 fichiers modifiés avec 46 ajouts et 21 suppressions
  1. 46 21
      src/main/java/com/malk/pro/guyuan/controller/NhIVController.java

+ 46 - 21
src/main/java/com/malk/pro/guyuan/controller/NhIVController.java

@@ -1,7 +1,9 @@
 package com.malk.pro.guyuan.controller;
 
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.malk.pro.guyuan.server.model.McInvoiceDto;
 import com.malk.pro.guyuan.server.model.McInvoiceKind;
 import com.malk.pro.guyuan.server.tencent.TXYConf;
@@ -188,7 +190,15 @@ public class NhIVController {
             String kind = UtilMap.getString(item, "TypeDescription");
             String invoiceName = UtilMap.getString(item, "SubTypeDescription");
             if (kind.equals("全电发票")) {
-                kind = invoiceName.contains("铁路电子客票")?"火车票": invoiceName.contains("专用发票") ? "全电专用发票" : "全电普通发票";
+                if(invoiceName.contains("铁路电子客票")){
+                    kind="火车票";
+                } else if(invoiceName.contains("机票行程单")){
+                    kind="机票行程单";
+                } else if (invoiceName.contains("专用发票")) {
+                    kind="全电专用发票";
+                }else {
+                    kind="全电普通发票";
+                }
             }
             if (kind.equals("增值税发票")) {
                 kind = invoiceName.contains("增值税专用发票") ? "增值税专用发票" : "增值税普通发票";
@@ -226,7 +236,9 @@ public class NhIVController {
                     .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"));
@@ -353,29 +365,42 @@ public class NhIVController {
                 McException.exceptionAccess(serial + "已存在, 请勿重复提交!");
             }
             // prd 仅仅识别 报销 用途的发票
-            if (dto.getType().equals("报销") && !dto.getKindName().contains("车票") && !dto.getKindName().contains("车发票") && !dto.getKindName().contains("定额发票") && !dto.getKindName().contains("通用机打发票")) {
-                String serialTips = serial + "有疑问";
-                try {
-                    // ppExt: 识别与验真后抬头对比 [全电票, 新版本识别接口, 返回名称为: 电子发票(普通发票) 不包含全电标识, 发类型为: 全电发票. 注意取值]
-                    Map rsp = txyInvoice.doVatInvoiceVerifyNew(dto.getKindName(), dto.getCode(), invoiceNo, dto.getDate(), String.valueOf(dto.getAmount()), dto.getCheckCode(), String.valueOf(dto.getExcludingTax()), serialTips);
-                    Map invoice = (Map) rsp.get("Invoice");
-                    McException.assertAccessException(!dto.getBuyerName().equals(guyuanNameRepalce(invoice.get("BuyerName").toString())), serialTips + ", 购买方名称不匹配!");
+            List<String> yzType=Arrays.asList("增值税普通发票",
+                    "增值税专用发票",
+                    "增值税电子专用发票",
+                    "增值税电子普通发票",
+                    "全电普通发票",
+                    "全电专用发票",
+                    "机票行程单");
+            // prd 仅仅识别 报销 用途的发票
+            if(!dto.getType().contains("报销")||!yzType.contains(dto.getKindName())){
+                return;
+            }
+            String serialTips = serial + "有疑问";
+            try {
+                // ppExt: 识别与验真后抬头对比 [全电票, 新版本识别接口, 返回名称为: 电子发票(普通发票) 不包含全电标识, 发类型为: 全电发票. 注意取值]
+                Map rsp = txyInvoice.doVatInvoiceVerifyNew(dto.getKindName(), dto.getCode(), invoiceNo, dto.getDate(), String.valueOf(dto.getAmount()), dto.getCheckCode(), String.valueOf(dto.getExcludingTax()), serialTips);
+                Map invoice = (Map) rsp.get("Invoice");
+                McException.assertAccessException(!dto.getBuyerName().equals(guyuanNameRepalce(invoice.get("BuyerName").toString())), serialTips + ", 购买方名称不匹配!");
+                if(!PublicUtil.isNull(invoice.get("BuyerTaxCode"))){
                     McException.assertAccessException(!dto.getBuyerTaxId().equals(invoice.get("BuyerTaxCode")), serialTips + ", 购买方税号不匹配!");
+                }
+                if(!dto.getKindName().equals("机票行程单")){
                     McException.assertAccessException(!dto.getSellerName().equals(guyuanNameRepalce(invoice.get("SellerName").toString())), serialTips + ", 销售方名称不匹配!");
                     McException.assertAccessException(!dto.getSellerTaxId().equals(invoice.get("SellerTaxCode")), serialTips + ", 销售方税号不匹配!");
-                } catch (TencentCloudSDKException e) {
-                    log.error(e.getMessage(), e);
-                    // prd: 上传发票为假发票时,提示:该发票有疑问,请联系财务人员
-                    String message = e.getMessage();
-                    // ppExt: 已经是新版本接口, 过滤提示 [官方答复: 提示不会检测您是否使用的是新版,所有的用户都会提示, 忽略即可]
-                    if (message.contains("温馨提示")) {
-                        message = message.split("温馨提示")[0];
-                    }
-                    if (message.contains("发票不存在")) {
-                        message = "有疑问,请联系财务人员";
-                    }
-                    McException.exceptionAccess(serial + message);
                 }
+            } catch (TencentCloudSDKException e) {
+                log.error(e.getMessage(), e);
+                // prd: 上传发票为假发票时,提示:该发票有疑问,请联系财务人员
+                String message = e.getMessage();
+                // ppExt: 已经是新版本接口, 过滤提示 [官方答复: 提示不会检测您是否使用的是新版,所有的用户都会提示, 忽略即可]
+                if (message.contains("温馨提示")) {
+                    message = message.split("温馨提示")[0];
+                }
+                if (message.contains("发票不存在")) {
+                    message = "有疑问,请联系财务人员";
+                }
+                McException.exceptionAccess(serial + message);
             }
         }));
         return McR.success();