diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/controller/InterfaceController.java b/dxhy-erp/src/main/java/com/dxhy/erp/controller/InterfaceController.java index 7dd82fce..53f80c5b 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/controller/InterfaceController.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/controller/InterfaceController.java @@ -710,6 +710,14 @@ public class InterfaceController extends AbstractController { case "INVOICE.SALSESPUSH": returnResult = invoicePoolService.salsePush(globalInfo, requestParam, request, response, authorize); break; + // 获取单张发票 + case "INVOICE.SINGLEINVOICECHECK": + returnResult = gatherService.singleInvoiceChenck(globalInfo, requestParam, request, response, authorize); + break; + // 获取单张发票 + case "INVOICE.SYNCINVOICEINFO": + returnResult = gatherService.syncInvoiceInfo(globalInfo, requestParam, request, response, authorize); + break; // 接口编码不存在 default: returnResult = authStatusService.getInterfaceCodeError(globalInfo); 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 23942001..489bd19d 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 @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.dxhy.common.aspect.SysLog; import com.dxhy.common.constant.CommonConstants; +import com.dxhy.common.constant.ConfigurerInfo; import com.dxhy.common.constant.DbConstant; import com.dxhy.common.controller.AbstractController; import com.dxhy.common.datasource.config.DynamicContextHolder; @@ -22,6 +23,7 @@ import com.dxhy.erp.service.InvoiceQueryService; import com.dxhy.erp.service.SNPushCheckRecordService; import com.dxhy.erp.service.SignCheckRecordService; import com.dxhy.erp.service.SignSaveInvoiceInfoService; +import com.dxhy.erp.utils.HmacSHA1Util; import com.dxhy.erp.utils.ServiceResult; import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; @@ -73,7 +75,7 @@ public class SDNYMainProcessController extends AbstractController { @PostMapping("/sn/singleInvoiceCheck") @ResponseBody @SysLog("发票查验") - public ResponseEntity singleInvoiceCheck(@RequestBody Map pramsMap) { + public ResponseEntity> singleInvoiceCheck(@RequestBody Map pramsMap) { log.info("传入的参数为:{}",pramsMap); String userid = "101833"; String dbName = "business"; @@ -179,7 +181,7 @@ public class SDNYMainProcessController extends AbstractController { @PostMapping("/sn/syncInvoiceInfo") @ResponseBody @SysLog("同步发票信息") - public ResponseEntity syncInvoiceInfo(@RequestBody SNRequestObject snRequestObject) { + public ResponseEntity> syncInvoiceInfo(@RequestBody SNRequestObject snRequestObject) { log.info("影像系统同步数据:{}",JSONObject.toJSONString(snRequestObject)); @@ -274,6 +276,35 @@ public class SDNYMainProcessController extends AbstractController { return ResponseEntity.ok(R.error(CommonConstants.MSG_ERR_DEFAULT)); } + /** + * 查验发票 + */ + @PostMapping("/sn/signature") + @ResponseBody + @SysLog("获取接口签名值") + public String signature(@RequestBody Map paramMap) { + String ip = paramMap.get("ip"); + String apiCode = paramMap.get("apiCode"); + String secretId = paramMap.get("secretId"); + String secretKey = paramMap.get("secretKey"); + String content = paramMap.get("content"); + String dataExchangeId = paramMap.get("dataExchangeId"); + + TreeMap sortMap = new TreeMap<>(); + sortMap.put(ConfigurerInfo.SECRETID, secretId); + sortMap.put(ConfigurerInfo.DATA_EXCHANGE_ID, dataExchangeId); + sortMap.put(ConfigurerInfo.ENCRYPTCODE, "0"); + sortMap.put(ConfigurerInfo.ZIPCODE, "0"); + sortMap.put(ConfigurerInfo.CONTENT, content); + + String url = "POST"+ ip +"/invoice/jxpt/api/v5/"+ apiCode +"?"; + + String data = "POST"+ ip +"/invoice/jxpt/api/v5/"+ apiCode +"?SecretId="+ secretId + "&content="+ content +"&dataExchangeId="+ dataExchangeId +"&encryptCode=0&zipCode=0"; + + String signature = HmacSHA1Util.genSign(url, sortMap,secretKey); + return signature; + } + private InvoiceInfo convertToInvoiceInfo(SNInvoice snInvoice) { InvoiceInfo invoice = new InvoiceInfo(); invoice.setInvoiceTypeCode(snInvoice.getInvoiceType()); diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/entity/CheckReInfo.java b/dxhy-erp/src/main/java/com/dxhy/erp/entity/CheckReInfo.java new file mode 100644 index 00000000..ddb57a21 --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/entity/CheckReInfo.java @@ -0,0 +1,14 @@ +package com.dxhy.erp.entity; + +import lombok.Data; + +import java.util.Map; + +@Data +public class CheckReInfo { + + private String message; + private String code; + private Map data; + +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/GatherService.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/GatherService.java index 7d6767d9..99fa8917 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/service/GatherService.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/GatherService.java @@ -66,4 +66,32 @@ public interface GatherService extends MpBaseService { */ String getAuthResult(GlobalInfo globalInfo, Map map, HttpServletRequest request, HttpServletResponse response, Authorize authorize); + + + /** + * 待填 + * + * @param globalInfo + * @param map + * @param request + * @param response + * @param authorize + * @return + */ + String singleInvoiceChenck(GlobalInfo globalInfo, Map map, HttpServletRequest request, + HttpServletResponse response, Authorize authorize); + + + /** + * 待填 + * + * @param globalInfo + * @param map + * @param request + * @param response + * @param authorize + * @return + */ + String syncInvoiceInfo(GlobalInfo globalInfo, Map map, HttpServletRequest request, + HttpServletResponse response, Authorize authorize); } diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/GatherServiceImpl.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/GatherServiceImpl.java index 1fd402f3..3cc46bdf 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/GatherServiceImpl.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/GatherServiceImpl.java @@ -3,17 +3,20 @@ package com.dxhy.erp.service.impl; import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import com.dxhy.erp.controller.SDNYMainProcessController; +import com.dxhy.erp.entity.CheckReInfo; +import com.dxhy.erp.entity.sdny.SNRequestObject; +import com.dxhy.erp.entity.sdny.SNSAPObject; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import com.alibaba.fastjson.JSON; @@ -57,6 +60,9 @@ public class GatherServiceImpl extends MpBaseServiceImpl map, HttpServletRequest request, HttpServletResponse response, Authorize authorize) { @@ -729,6 +735,126 @@ public class GatherServiceImpl extends MpBaseServiceImpl map, HttpServletRequest request, + HttpServletResponse response, Authorize authorize) { + ReturnStateInfo run = new ReturnStateInfo(); + try { + if (run.getReturnCode() != null || run.getReturnMessage() != null) { + InterfaceCode interfaceCode = new InterfaceCode(); + interfaceCode.setGlobalInfo(globalInfo); + interfaceCode.setReturnStateInfo(run); + return JSON.toJSONString(interfaceCode); + } + String dbName = "business"; + DynamicContextHolder.push(dbName + DbConstant.BUSINESS_READ); + Map param = JSONObject.parseObject(map.get("data").getBytes(),Map.class); + ResponseEntity responseEntity = mainService.singleInvoiceCheck(param); + String body = responseEntity.getBody().toString(); + + body = body.replaceAll("=",":"); + +// Map resultMap = Arrays.asList(body.split("=")).stream() +// .map(elem -> elem.split(":")) +// .collect(Collectors.toMap(e -> e[0], e -> e[1])); + + String result = ""; + if (body != null) { + result = body; + } else { + ReturnStateInfo runInfo = new ReturnStateInfo(); + runInfo.setReturnCode(ReturnCodeEnum.FPBCZ.getFhzDm()); + runInfo.setReturnMessage(ReturnCodeEnum.FPBCZ.getFhzMc(ReturnCodeEnum.FPBCZ.getIndex())); + InterfaceCode interfaceCode = new InterfaceCode(); + interfaceCode.setGlobalInfo(globalInfo); + interfaceCode.setReturnStateInfo(runInfo); + return JSON.toJSONString(interfaceCode); + } + log.info("===========发票实体转换完成============" + globalInfo.getDataExchangeId()); + + run.setReturnCode(ReturnCodeEnum.CLCG.getFhzDm()); + run.setReturnMessage(ReturnCodeEnum.CLCG.getFhzMc(ReturnCodeEnum.CLCG.getIndex())); + InterfaceCode interfaceCode = new InterfaceCode(); + interfaceCode.setGlobalInfo(globalInfo); + interfaceCode.setReturnStateInfo(run); + interfaceCode.setData(Base64.encode(result)); + return JSON.toJSONString(interfaceCode); + + } catch (Exception e) { + e.printStackTrace(); + run.setReturnCode("2011"); + run.setReturnMessage("其他异常"); + String globalJson = null; + String runJson = null; + try { + runJson = JSON.toJSONString(run); + globalJson = JSON.toJSONString(globalInfo); + } catch (Exception ignored) { + } + response.setCharacterEncoding("UTF-8"); + response.setContentType("application/json; charset=utf-8"); + return "{\"globalInfo\":" + globalJson + ",\"returnStateInfo\":" + runJson + "}"; + } + } + + @Override + public String syncInvoiceInfo(GlobalInfo globalInfo, Map map, HttpServletRequest request, + HttpServletResponse response, Authorize authorize) { + ReturnStateInfo run = new ReturnStateInfo(); + try { + if (run.getReturnCode() != null || run.getReturnMessage() != null) { + InterfaceCode interfaceCode = new InterfaceCode(); + interfaceCode.setGlobalInfo(globalInfo); + interfaceCode.setReturnStateInfo(run); + return JSON.toJSONString(interfaceCode); + } + String dbName = "business"; + DynamicContextHolder.push(dbName + DbConstant.BUSINESS_READ); + String data = map.get("data"); + + SNRequestObject snRequestObject = JSONObject.parseObject(data.getBytes(), SNRequestObject.class); + ResponseEntity responseEntity = mainService.syncInvoiceInfo(snRequestObject); + String body = responseEntity.getBody().toString(); + body = body.replaceAll("=",":"); + String result = ""; + if (body != null) { + result = body; + } else { + ReturnStateInfo runInfo = new ReturnStateInfo(); + runInfo.setReturnCode(ReturnCodeEnum.FPBCZ.getFhzDm()); + runInfo.setReturnMessage(ReturnCodeEnum.FPBCZ.getFhzMc(ReturnCodeEnum.FPBCZ.getIndex())); + InterfaceCode interfaceCode = new InterfaceCode(); + interfaceCode.setGlobalInfo(globalInfo); + interfaceCode.setReturnStateInfo(runInfo); + return JSON.toJSONString(interfaceCode); + } + log.info("===========发票实体转换完成============" + globalInfo.getDataExchangeId()); + + run.setReturnCode(ReturnCodeEnum.CLCG.getFhzDm()); + run.setReturnMessage(ReturnCodeEnum.CLCG.getFhzMc(ReturnCodeEnum.CLCG.getIndex())); + InterfaceCode interfaceCode = new InterfaceCode(); + interfaceCode.setGlobalInfo(globalInfo); + interfaceCode.setReturnStateInfo(run); + interfaceCode.setData(Base64.encode(result)); + return JSON.toJSONString(interfaceCode); + + } catch (Exception e) { + e.printStackTrace(); + run.setReturnCode("2011"); + run.setReturnMessage("其他异常"); + String globalJson = null; + String runJson = null; + try { + runJson = JSON.toJSONString(run); + globalJson = JSON.toJSONString(globalInfo); + } catch (Exception ignored) { + } + response.setCharacterEncoding("UTF-8"); + response.setContentType("application/json; charset=utf-8"); + return "{\"globalInfo\":" + globalJson + ",\"returnStateInfo\":" + runJson + "}"; + } + } + public InvoiceDetailInfo getInvoiceDetailInfo(InvoiceDetailInfo detail) { InvoiceDetailInfo detailInfo = new InvoiceDetailInfo(); detailInfo.setDetailNo(detail.getDetailNo() + ""); diff --git a/dxhy-sign/src/main/java/com/dxhy/sign/util/HmacSHA1Util.java b/dxhy-sign/src/main/java/com/dxhy/sign/util/HmacSHA1Util.java index 3c3361d7..7e52eb76 100644 --- a/dxhy-sign/src/main/java/com/dxhy/sign/util/HmacSHA1Util.java +++ b/dxhy-sign/src/main/java/com/dxhy/sign/util/HmacSHA1Util.java @@ -66,4 +66,15 @@ public class HmacSHA1Util { return buffer.toString(); } + public static void main(String[] args) { + + String data = "POST10.51.112.141:18096/invoice/jxpt/api/v5/INVOICE.SINGLEINVOICECHECK?SecretId=c2FucWljZXNoaUFwcFNlY2lkUHJv&content=ewoJInB1cmNoYXNlclRheE5vIjoiIiwKCSJpbnZvaWNlQ29kZSI6IjAzNjAwMTkwMDEwNyIsCgkiaW52b2ljZU51bWJlciI6IjA4NTg1OTc4IiwKCSJiaWxsaW5nRGF0ZSI6IjIwMjAwOTI0IiwKCSJjaGVja0NvZGUiOiI4OTk0NDUiLAoJInRvdGFsQW1vdW50IjoiIiwKCSJpbnZvaWNlVHlwZSI6IjEwMTAzIgp9&dataExchangeId=1234567812345678123456781234567812300001&encryptCode=0&zipCode=0"; + String key = "c2FucWljZXNoaUFwcHNlY0tleVBybw"; + + String signature = HmacSHA1Util.hmacsha1(data, key); + + System.out.println("signature=" + signature); + + } + }