From cc86c76cc647308495b03e153493166e52437acf Mon Sep 17 00:00:00 2001 From: kk <1910333201@qq.com> Date: Sat, 28 Oct 2023 17:45:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=BA=E5=8A=A8=E8=BD=A6=E5=8A=A0=E5=AF=86?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../invoice/domain/dto/ExportVehicleDTO.java | 31 ++++ .../AisinoInvoiceRequestAdapterImpl.java | 2 +- ...noConsoleInvoiceApiZhongQiServiceImpl.java | 141 ++++++++++++------ 3 files changed, 124 insertions(+), 50 deletions(-) create mode 100644 jianshui-invoice/src/main/java/com/jianshui/invoice/domain/dto/ExportVehicleDTO.java diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/dto/ExportVehicleDTO.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/dto/ExportVehicleDTO.java new file mode 100644 index 0000000..ee015f2 --- /dev/null +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/dto/ExportVehicleDTO.java @@ -0,0 +1,31 @@ +package com.jianshui.invoice.domain.dto; + +import lombok.Data; + +/** + * @author kk + * @date 2023年10月28日 13:38 + * 机动车加密 + */ +@Data +public class ExportVehicleDTO { + + + // 保存路径 + private String SavePath; + + // 发票种类 + private String FPZL; + + // 开始日期 + private String KSRQ; + + // 结束日期 + private String JSRQ; + + // 每次请求的GUID + private String StrGuid; + + + +} diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/adapter/request/AisinoInvoiceRequestAdapterImpl.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/adapter/request/AisinoInvoiceRequestAdapterImpl.java index 544d46f..20b002a 100644 --- a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/adapter/request/AisinoInvoiceRequestAdapterImpl.java +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/adapter/request/AisinoInvoiceRequestAdapterImpl.java @@ -104,7 +104,7 @@ public class AisinoInvoiceRequestAdapterImpl implements IInvoiceRequestService { try { // TODO: 2023/9/20 - order = AisinoInvoiceDecryptUtil.decrypt(order, JKey); +// order = AisinoInvoiceDecryptUtil.decrypt(order, JKey); } catch (Exception e) { e.printStackTrace(); throw new JianshuiParamErrorException(ErrorCode.DECRYPT_ERROR, companyservice, "invoice"); diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/AisinoConsoleInvoiceApiZhongQiServiceImpl.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/AisinoConsoleInvoiceApiZhongQiServiceImpl.java index d1d7b9f..6b6b9dd 100644 --- a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/AisinoConsoleInvoiceApiZhongQiServiceImpl.java +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/AisinoConsoleInvoiceApiZhongQiServiceImpl.java @@ -4,10 +4,10 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.codec.Base64; import cn.hutool.core.convert.Convert; import cn.hutool.core.io.FileUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.RandomUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.core.util.XmlUtil; +import cn.hutool.core.net.URLDecoder; +import cn.hutool.core.util.*; +import cn.hutool.http.Header; +import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSON; import cn.hutool.json.JSONUtil; @@ -40,7 +40,17 @@ import com.jianshui.invoice.utils.BillInfoUtils; import com.jianshui.invoice.utils.aisino.console.AisinoConsoleUtil; import com.jianshui.system.domain.CompanyserviceProp; import com.jianshui.system.service.ICompanyservicePropService; +import io.lettuce.core.StrAlgoArgs; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.conn.ssl.TrustSelfSignedStrategy; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.ssl.SSLContexts; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; @@ -53,10 +63,14 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; import javax.servlet.http.HttpServletRequest; -import java.io.File; -import java.io.InputStream; +import java.io.*; import java.math.BigDecimal; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; import java.util.*; /** @@ -82,6 +96,10 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer @Autowired private InvoiceBackMapper invoiceBackMapper; + static final String PREFIX = "stream2file";//前缀字符串定义文件名;必须至少三个字符 + static final String SUFFIX = ".tmp";//后缀字符串定义文件的扩展名;如果为null,则将使用后缀".tmp" + + /** * 1.发票开具 SID = 1 @@ -910,7 +928,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer // 返回结果处理 if (!StringUtils.equals("0", retcode)) { - // TODO: 2023/10/28 返回结果待解析。 + // TODO: 2023/10/28 返回结果待解析。 /*if(sss.indexOf("") != -1 && sss.indexOf("") != -1){ System.out.println("存在"); String data = sss.substring(sss.indexOf("") + 6,sss.indexOf("")); @@ -928,12 +946,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer cn.hutool.json.JSONArray jsonArray = JSONUtil.parseArray(RedInvReqBill); List downloadJdcVOList = BeanUtil.copyToList(jsonArray,DownloadJdcVO.class); System.out.println(jsonArray); - - - } - - System.out.println(map); } }*/ @@ -1095,32 +1108,31 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer @Override public HXResponse exportVehicleInvoice(JSONObject decryptResult, Companyservice companyservice) { - // TODO: 2023/10/10 机动车 - /** - * { - * "SavePath":"C://", - * "FPZL":"", - * "KSRQ":"", - * "StrGuid":"" - * } - */ + ExportVehicleDTO exportVehicleDTO = BeanUtil.copyProperties(decryptResult,ExportVehicleDTO.class); + + if(BeanUtil.isEmpty(exportVehicleDTO)){ + return new HXResponse("9999","请求参数为空!"); + } + + // TODO: 2023/10/28 机动车处理 + exportVehicleDTO.setSavePath("C:\\test\\fileDownload\\"); // 发起请求 AjaxResult ajaxResult = null; - JSON json = JSONUtil.parse(decryptResult); + JSON json = JSONUtil.parse(exportVehicleDTO); try { ajaxResult = AisinoConsoleUtil.sendRequest(AisinoConsoleConstants.VEHIC, json, companyservice); } catch (Exception e) { - log.error("【销项发票】【总部控制台接口】【机动车加密】发票请求异常,请求报文{},销方信息{}", JSONUtil.parse(decryptResult).toString(), JSONObject.toJSONString(companyservice)); + log.error("【销项发票】【总部控制台接口】【机动车加密】机动车加密文件导出请求异常,请求报文{},销方信息{}", JSONUtil.parse(decryptResult).toString(), JSONObject.toJSONString(companyservice)); e.printStackTrace(); - throw new JianshuiServiceException("系统异常!"); + return new HXResponse("9999","系统异常!"); } - log.info("【销项发票】【总部控制台发票】发票开具请求拉取结果{}", ajaxResult.toString()); + log.info("【销项发票】【总部控制台发票】机动车加密文件导出结果{}", ajaxResult.toString()); //返回报文解析 if (ajaxResult.isError()) { - throw new JianshuiServiceException(ajaxResult.getMsg()); + return new HXResponse("9999",ajaxResult.getMsg()); } cn.hutool.json.JSONObject resultJSON = JSONUtil.parseObj(ajaxResult.get("data")); @@ -1129,20 +1141,12 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer if ("0".equals(retcode)) { - // TODO: 2023/10/25 机动车加密数据导出推送 - /** - * 推送逻辑: - * 调用加密接口,调用成功后推送,推送中间状态断了停止推送 - * 否则获取到推送结果之后停止推送 - * 需要个手动重推的操作。 - */ - ICompanyservicePropService companyserviceProp = SpringUtils.getBean(ICompanyservicePropService.class); CompanyserviceProp secretIdProp = companyserviceProp.selectPropByKey(companyservice.getCompanyid(), "aisino_nginx_url"); if (secretIdProp == null || StrUtil.isEmpty(secretIdProp.getValue())) { log.info("【销项发票】【总部控制台发票-机动车加密】推送nginx地址未配置!aisino_nginx_url"); - return new HXResponse("推送中间件地址未配置!"); + return new HXResponse("9999","推送中间件地址未配置!"); } String downloadUrl = secretIdProp.getValue(); @@ -1150,7 +1154,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer cn.hutool.json.JSONObject queryDto = JSONUtil.parseObj(json); if (queryDto == null) { log.info("【销项发票】【总部控制台发票-机动车加密】查询条件未获取到!"); - return new HXResponse("查询条件未获取到!"); + return new HXResponse("9999","查询条件未获取到!"); } String indexPage = null; @@ -1158,7 +1162,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer indexPage = HttpUtil.get(downloadUrl); } catch (Exception e) { log.info("【销项发票】【总部控制台发票-机动车加密】{}", e); - return new HXResponse("中间件读取失败!"); + return new HXResponse("9999","中间件读取失败!"); } String startDate = queryDto.get("KSRQ") != null ? queryDto.get("KSRQ").toString().replace("-", ".") : ""; @@ -1180,27 +1184,50 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer continue; } - File file = FileUtil.file(downloadUrl + href); - InputStream inputStream = FileUtil.getInputStream(file); +// String fileStream = null; + InputStream inputStream = null; + File file = null; + try { +// fileStream = HttpUtil.get(downloadUrl + href); + CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpGet httpGet = new HttpGet(downloadUrl + href); + CloseableHttpResponse response = httpClient.execute(httpGet); + inputStream = response.getEntity().getContent(); + file = stream2file(inputStream); + } catch (Exception e) { + log.info("读取到的机动车加密文件名为{},下载文件nginx接口失败", href); + return new HXResponse("9999", "导出失败,未获取到下载文件!"); + } +// InputStream is = new ByteArrayInputStream(fileStream.getBytes()); - // TODO: 2023/10/24 调用重汽的推送接口 + // 调用重汽的推送接口 HashMap paramMap = new HashMap<>(); - paramMap.put("File", file); + paramMap.put("file", file); // TODO: 2023/10/25 调整成可配置的简称 paramMap.put("qyjc", companyservice.getSellertax()); paramMap.put("zdr", companyservice.getCompanyid()); CompanyserviceProp pushUrl = companyserviceProp.selectPropByKey(companyservice.getCompanyid(), "aisino_upload_url"); if (pushUrl == null || StrUtil.isEmpty(pushUrl.getValue())) { - return new HXResponse("重汽推送机动车地址未设置!"); + return new HXResponse("9999","重汽推送机动车地址未设置!"); + } + String retCode = null; + String retMsg = null; + try { + log.info("【机动车加密接口推送】请求内容:{}",paramMap); +// String result = HttpUtil.post(pushUrl.getValue(), paramMap); + String result = HttpRequest.post(pushUrl.getValue()) + .form(paramMap)//表单内容 + .timeout(20000)//超时,毫秒 + .execute().body(); + cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(result); + + retCode = jsonObject.get("retCode") != null ? jsonObject.get("retCode").toString() : ""; + retMsg = jsonObject.get("retMsg") != null ? jsonObject.get("retMsg").toString() : ""; + } catch (Exception e) { + log.info("【机动车加密接口推送】超时,{}",e); + return new HXResponse("9999", "推送接口超时!"); } - String result = HttpUtil.post(pushUrl.getValue(), paramMap); - - cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(result); - - String retCode = jsonObject.get("retCode") != null ? jsonObject.get("retCode").toString() : ""; - String retMsg = jsonObject.get("retMsg") != null ? jsonObject.get("retMsg").toString() : ""; - // 重汽返回接口信息 return new HXResponse(retCode, retMsg); } else { @@ -1209,6 +1236,22 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer } + /** + * @author kk + * @date 17:42 + * @param: [in] + * @return: + * 机动车加密导出-文件转化本地 + */ + public static File stream2file (InputStream in) throws IOException { + final File tempFile = File.createTempFile(PREFIX, SUFFIX); + tempFile.deleteOnExit(); + try (FileOutputStream out = new FileOutputStream(tempFile)) { + IOUtils.copy(in, out); + } + return tempFile; + } + @Override public AjaxResult syncStockInfo(Companyservice companyservice) {