diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java b/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java index 42cba771..76d917d2 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java @@ -55,23 +55,6 @@ public class SDNYMainProcessController extends AbstractController { @SysLog("发票查验") public ResponseEntity singleInvoiceCheck(@RequestBody Map pramsMap) { -// // 入参统一在入口处理 -// String userid = getLoginName(); -// pramsMap.put("userid", userid); -// String dbName = getUserInfo().getDbName(); -// pramsMap.put("dbName", dbName); -// pramsMap.put("saveHistory","Y"); -// -// pramsMap.put("company", getUserInfo().getCompany()); -// -// List gfshAll = UserInfoUtil.getGfshAll(getUserInfo().getOrg()); -// if (gfshAll.size() > 0) { -// pramsMap.put("taxNo", gfshAll.get(0)); -// -// } -// pramsMap.put("purchaserTaxNo", pramsMap.get("purchaserTaxNo")); - - InvoiceUtil iu = new InvoiceUtil(pramsMap.get("invoiceCode")); String fplxdm = iu.getFplxdm(); @@ -132,12 +115,17 @@ public class SDNYMainProcessController extends AbstractController { pramsMap.put("invoiceType",fplxdm); //查验发票数据 - checkInvoiceResult = snPushCheckRecordService.checkInvoice(pramsMap, getUserInfo()); + checkInvoiceResult = snPushCheckRecordService.singleCheckInvoice(pramsMap); + + if(!checkInvoiceResult.containsKey("code")){ + return ResponseEntity.ok(R.ok().put("data", checkInvoiceResult)); + } + }else{ //价税分离 // snPushCheckRecordService.valoremTaxCount(); } - return ResponseEntity.ok(R.ok().put("data", checkInvoiceResult)); + return ResponseEntity.ok(R.error().put("data", checkInvoiceResult)); } /** diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java index 0bc8dceb..6e5cffc2 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/SNPushCheckRecordService.java @@ -6,11 +6,14 @@ import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; import com.dxhy.common.constant.DbConstant; import com.dxhy.common.datasource.config.DynamicContextHolder; -import com.dxhy.common.enums.SNFplxEnum; -import com.dxhy.common.util.UserInfoUtil; +import com.dxhy.common.util.InvoiceUtil; import com.dxhy.common.vo.UserInfo; import com.dxhy.erp.dao.AreaDao; import com.dxhy.erp.dao.OrgUserInfoDao; +import com.dxhy.erp.entity.kfpt.ApiCheckInvoiceSingleRequest; +import com.dxhy.erp.entity.kfpt.ApiRequest; +import com.dxhy.erp.entity.kfpt.ApiResponse; +import com.dxhy.erp.entity.kfpt.TokenResponse; import com.dxhy.erp.entity.sdny.InvoiceDetail; import com.dxhy.erp.entity.sdny.InvoiceInfo; import com.dxhy.erp.entity.sdny.area.Area; @@ -25,6 +28,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.text.ParseException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -37,14 +41,32 @@ import java.util.Map; @SuppressWarnings("AlibabaUndefineMagicConstant") @Service @Slf4j -public class SNPushCheckRecordService extends AbstractServiceAdapter { +public class SNPushCheckRecordService extends AbstractServiceAdapter { @Value("${sdny.snYxUrl}") private String snYxUrl; + @Value("${params.api.invoiceCheckSingleUrl}") + private String invoiceCheckSingleUrl; + + @Value("${params.api.appKey}") + private String appKey; + + @Value("${params.api.appSecret}") + private String appSecret; + + @Value("${params.api.entCode}") + private String entCode; + @Resource private InvoiceQueryUtil invoiceQueryUtil; + @Resource + private ApiUtils apiUtils; + + @Resource + private IcpUtils icpUtils; + @Autowired private AreaDao areaDao; @@ -67,7 +89,7 @@ public class SNPushCheckRecordService extends AbstractServiceAdapter { public JSONObject checkInvoice(Map pramsMap, UserInfo userInfo) { // uuid = 发票代码+发票号码 - String uuid = (org.apache.commons.lang.StringUtils.isBlank(pramsMap.get("invoiceCode"))?"":pramsMap.get("invoiceCode")) + pramsMap.get("invoiceNo"); + String uuid = (org.apache.commons.lang.StringUtils.isBlank(pramsMap.get("invoiceCode")) ? "" : pramsMap.get("invoiceCode")) + pramsMap.get("invoiceNo"); DynamicContextHolder.push("business" + DbConstant.BUSINESS_READ); @@ -80,10 +102,9 @@ public class SNPushCheckRecordService extends AbstractServiceAdapter { gfsh = "91370000166120002R"; - JSONObject queryInvoiceResult = invoiceQueryUtil.queryInvoice(pramsMap.get("invoiceCode"), pramsMap.get("invoiceNumber"), pramsMap.get("billingDate"), pramsMap.get("totalAmount"), pramsMap.get("checkCode"), - gfsh,pramsMap.get("invoiceType")); + gfsh, pramsMap.get("invoiceType")); String resultCode = queryInvoiceResult.getString("resultCode"); DynamicContextHolder.push("business" + DbConstant.BUSINESS_WRITE); @@ -94,12 +115,138 @@ public class SNPushCheckRecordService extends AbstractServiceAdapter { } - return queryInvoiceResult; } + public JSONObject singleCheckInvoice(Map pramsMap) { + + //1.封装查验参数 + ApiRequest apiRequest = new ApiRequest(); + apiRequest.setEntCode(entCode); + + InvoiceUtil iu = new InvoiceUtil(pramsMap.get("invoiceCode")); + String fplxdm = iu.getFplxdm(); + + String snIinvoiceType = pramsMap.get("invoiceType"); + + ApiCheckInvoiceSingleRequest request = new ApiCheckInvoiceSingleRequest(); + request.setFphm(pramsMap.get("invoiceNumber")); + request.setFpdm(pramsMap.get("invoiceCode")); + request.setFpje(pramsMap.get("totalAmount")); + request.setKprq(pramsMap.get("billingDate")); + request.setJym(pramsMap.get("checkCode")); + request.setFpzl(fplxdm); + + String check = JSONObject.toJSONString(request); + //2.获取token + TokenResponse token = apiUtils.getToken(appKey, appSecret); + String access_token = token.getAccess_token(); + + //3.调用开放平台查验接口 + ApiResponse apiResponse = apiUtils.callApi(invoiceCheckSingleUrl, entCode, request, access_token, apiRequest.getDataExchangeId()); + + //4.封装返回参数 + JSONObject jsonObject = new JSONObject(); + if (StringUtils.isNoneBlank(apiResponse.getContent())) + jsonObject = convertToSnObject(apiResponse.getContent(), jsonObject, snIinvoiceType); + + + return jsonObject; + } + + private JSONObject convertToSnObject(String content, JSONObject jsonObject, String invoiceType) { + + HashMap contentMap = JSONObject.parseObject(Base64.decode(content).toString(), HashMap.class); + + if ("0000".equals(contentMap.get("code"))) { + + HashMap invoiceData = (HashMap) contentMap.get("data"); + + jsonObject.put("invoiceType", invoiceType); + jsonObject.put("administrativeDivisionNo", ""); + jsonObject.put("administrativeDivisionName", ""); + + jsonObject.put("invoiceCode", invoiceData.get("fpdm")); + jsonObject.put("invoiceNumber", invoiceData.get("fphm")); + jsonObject.put("billingDate", invoiceData.get("kprq")); + jsonObject.put("purchaserName", invoiceData.get("gmfmc")); + jsonObject.put("purchaserTaxNo", invoiceData.get("gmfsbh")); + jsonObject.put("purchaserBank", invoiceData.get("gmfyhzh")); + jsonObject.put("purchaserAddressPhone", invoiceData.get("gmfdzdh")); + jsonObject.put("salesName", invoiceData.get("xhfmc")); + jsonObject.put("salesTaxNo", invoiceData.get("xhfsbh")); + jsonObject.put("salesAddressPhone", invoiceData.get("xhfdzdh")); + jsonObject.put("salesBank", invoiceData.get("xhfyhzh")); + jsonObject.put("totalAmount", invoiceData.get("totalAmount")); + jsonObject.put("totalTax", invoiceData.get("fpse")); + jsonObject.put("amountTax", invoiceData.get("jshj")); + jsonObject.put("amountTaxCN", ""); + jsonObject.put("checkCode", invoiceData.get("jym")); + jsonObject.put("state", invoiceData.get("zfbz")); + jsonObject.put("carrierName", invoiceData.get("cyrmc")); + jsonObject.put("carrierTaxNo", invoiceData.get("cyrsbh")); + jsonObject.put("draweeName", invoiceData.get("spfmc")); + jsonObject.put("draweeTaxNo", invoiceData.get("spfsbh")); + jsonObject.put("cargoInformation", invoiceData.get("ysgwxx")); + jsonObject.put("transportRoute", invoiceData.get("qydjyddd")); + jsonObject.put("machineCode", invoiceData.get("skph")); + jsonObject.put("tonnage", invoiceData.get("ccdw")); + jsonObject.put("taxAuthorityNo", invoiceData.get("zgswjgdm")); + jsonObject.put("taxAuthorityName", invoiceData.get("zgswjgmc")); + jsonObject.put("remarks", invoiceData.get("bz")); + jsonObject.put("vehicleType", invoiceData.get("cllx")); + jsonObject.put("brandModel", invoiceData.get("cpxh")); + jsonObject.put("originPlace", invoiceData.get("cd")); + jsonObject.put("certificateNo", invoiceData.get("hgzs")); + jsonObject.put("inspectionListNo", invoiceData.get("sjdh")); + jsonObject.put("engineNo", invoiceData.get("fdjhm")); + jsonObject.put("vehicleNo", invoiceData.get("clsbh")); + jsonObject.put("importCertificateNo", invoiceData.get("jszmsh")); + jsonObject.put("paymentVoucherNo", invoiceData.get("wspzhm")); + jsonObject.put("passengersLimited", invoiceData.get("xcrs")); + jsonObject.put("tollSign", invoiceData.get("txfbz")); + jsonObject.put("zeroTaxRateSign", invoiceData.get("lslbs")); + jsonObject.put("source", ""); + jsonObject.put("idcardNo", invoiceData.get("sfzh")); + + List> returnDetailList = new ArrayList<>(); + String detailListStr = invoiceData.get("detailList"); + List> detailList = JSONObject.parseObject(detailListStr, List.class); + int i = 1; + for (Map detail : detailList) { + + Map snDetailMap = new HashMap(); + snDetailMap.put("rowNo", i + ""); + snDetailMap.put("commodityCode", detail.get("mxbh")); + snDetailMap.put("commodityName", detail.get("hwmc")); + snDetailMap.put("specificationModel", detail.get("ggxh")); + snDetailMap.put("unit", detail.get("jldw")); + snDetailMap.put("quantity", detail.get("spsl")); + snDetailMap.put("unitPrice", detail.get("hsdj")); + snDetailMap.put("amount", detail.get("je")); + snDetailMap.put("taxRate", detail.get("sl")); + snDetailMap.put("tax", detail.get("se")); + snDetailMap.put("currentDateEnd", detail.get("txrqz")); + snDetailMap.put("currentDateStart", detail.get("txrqq")); + snDetailMap.put("licensePlateNum", detail.get("cph")); + snDetailMap.put("type", detail.get("lx")); + + returnDetailList.add(snDetailMap); + i++; + } + + jsonObject.put("invoiceLineList", returnDetailList); + + } else { + jsonObject.put("code", contentMap.get("code")); + jsonObject.put("message", contentMap.get("message")); + } + + return jsonObject; + } + /** * 客票价税计算 @@ -338,7 +485,7 @@ public class SNPushCheckRecordService extends AbstractServiceAdapter { result = "出发或到达城市不符合标准"; } } - return result; + return result; } /** diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/CheckIpBlocAppidServiceImpl.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/CheckIpBlocAppidServiceImpl.java index 5d4bd1f3..fd122fa8 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/CheckIpBlocAppidServiceImpl.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/CheckIpBlocAppidServiceImpl.java @@ -14,7 +14,6 @@ import com.dxhy.erp.dao.SysDeptDao; import com.dxhy.erp.model.ReturnStateInfo; import com.dxhy.erp.model.auth.InterfaceCode; import com.dxhy.erp.service.CheckIpBlocAppidService; -import com.dxhy.erp.utils.IpUtil; import lombok.extern.slf4j.Slf4j; @@ -42,7 +41,7 @@ public class CheckIpBlocAppidServiceImpl implements CheckIpBlocAppidService { public String getIp(HttpServletRequest request) { String remoteAddr; String remoteAddr1 = request.getHeader("X-Real-IP"); - if (remoteAddr1 != null && !"".equals(remoteAddr1) && IpUtil.isboolIp(remoteAddr1)) { + if (remoteAddr1 != null && !"".equals(remoteAddr1)) { remoteAddr = remoteAddr1; } else { remoteAddr = request.getRemoteAddr(); diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/utils/ApiUtils.java b/dxhy-erp/src/main/java/com/dxhy/erp/utils/ApiUtils.java index af4bdae4..36e8e58e 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/utils/ApiUtils.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/utils/ApiUtils.java @@ -23,8 +23,6 @@ public class ApiUtils { @Value("${params.api.tokenUrl}") private String tokenUrl; - @Value("${params.api.loginUrl}") - private String loginUrl; @Value("${params.api.connTimeout}") private int connTimeout; @Value("${params.api.readTimeout}") diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/utils/IpUtil.java b/dxhy-erp/src/main/java/com/dxhy/erp/utils/IpUtil.java deleted file mode 100644 index 83236a83..00000000 --- a/dxhy-erp/src/main/java/com/dxhy/erp/utils/IpUtil.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.dxhy.erp.utils; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * @author dxhy - */ -public class IpUtil { - - /** * 判断是否为合法IP * @return the ip */ - public static boolean isboolIp(String ipAddress) { - String ip = "([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"; - Pattern pattern = Pattern.compile(ip); - Matcher matcher = pattern.matcher(ipAddress); - return matcher.matches(); - } -}