|
@@ -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();
|