diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/dto/api/elephant/sd/RedDownload.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/dto/api/elephant/sd/RedDownload.java new file mode 100644 index 0000000..12022d1 --- /dev/null +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/dto/api/elephant/sd/RedDownload.java @@ -0,0 +1,26 @@ +package com.jianshui.invoice.domain.dto.api.elephant.sd; + +import lombok.Data; + + +/** + * 红字确认单确认 + */ +@Data +public class RedDownload { + + // 纳税人识别号 + private String NSRSBH; + + // 红字确认单UUID + private String UUID; + + // 红字确认单编号 + private String HZQRDBH; + + // 确认类型 + private String QRLX; + + + +} diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/ElephantInvoiceApiV6ServiceImpl.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/ElephantInvoiceApiV6ServiceImpl.java index bc432f4..cbf64d5 100644 --- a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/ElephantInvoiceApiV6ServiceImpl.java +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/ElephantInvoiceApiV6ServiceImpl.java @@ -31,6 +31,7 @@ import com.jianshui.invoice.domain.dto.adapter.response.RedInfoDetailDTO; import com.jianshui.invoice.domain.dto.api.*; import com.jianshui.invoice.domain.dto.api.elephant.*; import com.jianshui.invoice.domain.dto.api.elephant.sd.HZQRDMXLIST; +import com.jianshui.invoice.domain.dto.api.elephant.sd.RedDownload; import com.jianshui.invoice.domain.dto.api.elephant.sd.RedUpload; import com.jianshui.invoice.domain.ele.EleNewMessage; import com.jianshui.invoice.domain.ele.EleOuterMessage; @@ -1200,225 +1201,26 @@ public class ElephantInvoiceApiV6ServiceImpl implements IInvoiceApiService { return response; } - JSONObject queryJson = new JSONObject(); String taxno = redInfoResult.getReqnsrsbh() == null ? companyservice.getSellertax() : redInfoResult.getReqnsrsbh(); - queryJson.put("SQBXZQQPCH", redInfoResult.getSystemOrderno()); // 申请表审核结果下载请求批次号", - queryJson.put("NSRSBH", taxno); // 申请方纳税人识别号", - String fplxdm = ElephantUtils.transElephantType(redInfoResult.getInvoiceType(), 1); - queryJson.put("FPLXDM", fplxdm); // 发票类型代码", - // 查询一个月之前的 - // Date tkrqq = DateUtil.offsetDay(new Date(), -5); - // queryJson.put("TKRQQ", DateUtil.format(tkrqq,"yyyyMMdd")); // 填开日期起,可空", - // queryJson.put("TKRQZ", DateUtil.format(new Date(),"yyyyMMdd")); // 填开日期止,可空", - queryJson.put("TKRQQ", downloadRedInfoDTO.getBillTimeBegin()); // 填开日期起,可空", - queryJson.put("TKRQZ", downloadRedInfoDTO.getBillTimeEnd()); // 填开日期止,可空", - queryJson.put("GMFSBH", redInfoResult.getBuyerTaxnum()); // 购买方税号,可空", - queryJson.put("XHFSBH", redInfoResult.getSellerTaxnum()); // 销货方税号,可空", - - queryJson.put("XXBBH", redinfo.getRedInfoNo()); // 信息表编号,可空", - // if (StringUtils.isNotEmpty(redInfoResult.getRedInfoNo())) { - // queryJson.put("XXBBH", redInfoResult.getRedInfoNo()); // 信息表编号,可空", - // } - queryJson.put("XXBFW", 0); // 信息表下载范围:0 全部;1 本企业申请;2 其它企业申请", - - //kk TODO : 2023/9/6 V6新加字段 - - int page = 1; - queryJson.put("GS", 10); // 个数" - List resultDTO = new ArrayList<>(); + RedDownload redDownload = new RedDownload(); + redDownload.setNSRSBH(taxno); + // UUID=申请单号 + redDownload.setUUID(downloadRedInfoDTO.getBillNo()); + // 信息表编号 + redDownload.setHZQRDBH(redinfo.getRedInfoNo()); + // 确认类型 + redDownload.setQRLX(downloadRedInfoDTO.getBillInfoNo()); - for (; page < 11; page++) { - queryJson.put("YS", page); // 页数", - - // AjaxResult queryResult = ElephantUtils.sendRequest(ElephantConstantsV6.DEPRECATE_INVOICE, JSONUtil.parse(queryJson)); - AjaxResult queryResult = null; - try { -// System.out.println(JSONUtil.parse(queryJson)); - queryResult = ElephantUtils.sendRequestWithoutToken(ElephantConstantsV6.REDINFO_DOWNLOAD_LOCALHOST, ElephantConstantsV6.REDINFO_DOWNLOAD_METHOD, JSONUtil.parse(queryJson), companyservice); - } catch (UnsupportedEncodingException | InvalidKeyException | NoSuchAlgorithmException e) { - log.error("【销项发票】【大象接口】【红字信息表下载】发票请求异常,请求报文{},销方信息{}", JSONUtil.parse(queryJson).toString(), JSONObject.toJSONString(companyservice)); - break; - // e.printStackTrace(); - // throw new JianshuiServiceException("系统异常!"); - } - log.info("【销项发票】【大象发票】发票红字信息表下载请求结果{}", queryResult.toString()); - - // 判断外层报文是否成功 - if (queryResult.isError()) { - // 不是第一页之后的9999都给扔出去 - if (page > 1) { - break; - } - throw new JianshuiServiceException(queryResult.getMsg()); - } - - // 处理返回报文 - JSONObject content = queryResult.getJsonData(); - String ztdm = content.getString("ZTDM"); - if (!StringUtils.equalsAny(ztdm, "060000", "0000")) { - return new HXResponse(content.getString("ZTXX")); - } - - List result = new ArrayList<>(); - // 解析json - ElephantDownloadRedinfoDTO downloadRedinfoDTO = content.toJavaObject(ElephantDownloadRedinfoDTO.class); - List hzsqdxzzxxes = downloadRedinfoDTO.getHZSQDXZZXX(); // 获取返回结果 - for (int i = 0; i < hzsqdxzzxxes.size(); i++) { - HZSQDXZZXX HZSQDXZZXX = hzsqdxzzxxes.get(i); - HZSQDXZTXX HZSQDXZTXX = HZSQDXZZXX.getHZSQDXZTXX(); // 头信息 - // Redinfo queryRedinfo = new Redinfo(); - // queryRedinfo.setRedInfoNo(downloadRedInfoDTO.getBillInfoNo()); - // queryRedinfo.setCompanyId(companyservice.getCompanyid()); - QueryWrapper tempQueryWrapper = new QueryWrapper<>(); - // tempQueryWrapper.eq("out_trade_orderno", HZSQDXZTXX.getSQDH()); - tempQueryWrapper.eq("origin_fpdm", HZSQDXZTXX.getYFPDM()); - tempQueryWrapper.eq("origin_fphm", HZSQDXZTXX.getYFPHM()); - tempQueryWrapper.last(" limit 1 "); - Redinfo tempRedInfoResult = redinfoMapper.selectOne(tempQueryWrapper); - if (tempRedInfoResult == null) { - // HXResponse response = new HXResponse("9999", "未查到指定红字信息"); - // return response; - continue; - } - tempRedInfoResult.setCompanyId(companyservice.getCompanyid()); - tempRedInfoResult.setSystemOrderno(tempRedInfoResult.getSystemOrderno() == null ? IdUtils.randomSystemOrderno() : tempRedInfoResult.getSystemOrderno()); - // tempRedInfoResult.setOutTradeOrderno(tempRedInfoResult.getOutTradeOrderno() == null ? downloadRedInfoDTO.getBillInfoNo() : tempRedInfoResult.getOutTradeOrderno()); - // tempRedInfoResult.setOutTradeOrderno(HZSQDXZTXX.getSQDH()); // 2022年7月和中举聊的需求,outTradeOrderNo作为用户的申请单号,fpqqlsh作为系统的申请单号,做一个映射 - tempRedInfoResult.setFpqqlsh(HZSQDXZTXX.getSQDH()); - tempRedInfoResult.setBillInfoId(tempRedInfoResult.getBillInfoId()); - tempRedInfoResult.setRedInfoNo(HZSQDXZTXX.getXXBBH()); - // HZSQDXZTXX.getZTDM(),TZD0000 - if (StringUtils.equalsAnyIgnoreCase(HZSQDXZTXX.getZTDM(), "TZD0000", "TZD1000")) { - tempRedInfoResult.setRedInfoStatus("1"); - } else { - tempRedInfoResult.setRedInfoStatus("2"); - } - tempRedInfoResult.setRedInfoMessage(tempRedInfoResult.getRedInfoMessage() == null ? HZSQDXZTXX.getZTXX() : tempRedInfoResult.getRedInfoMessage()); - tempRedInfoResult.setRedInfoType(HZSQDXZTXX.getXXBLX()); - tempRedInfoResult.setOriginFpdm(HZSQDXZTXX.getYFPDM()); - tempRedInfoResult.setRedInfoSpecFlag(HZSQDXZTXX.getXXBTSBS()); - tempRedInfoResult.setOriginFphm(HZSQDXZTXX.getYFPHM()); - tempRedInfoResult.setTaxType(HZSQDXZTXX.getYYSBZ()); - tempRedInfoResult.setOriginKprq(tempRedInfoResult.getOriginKprq()); - tempRedInfoResult.setMultTaxRate(tempRedInfoResult.getMultTaxRate()); - tempRedInfoResult.setBillInputTime(HZSQDXZTXX.getTKSJ()); - tempRedInfoResult.setBuyerName(HZSQDXZTXX.getGMFMC()); - tempRedInfoResult.setBuyerTaxnum(HZSQDXZTXX.getGMFSBH()); - tempRedInfoResult.setSellerName(HZSQDXZTXX.getXHFMC()); - tempRedInfoResult.setSellerTaxnum(HZSQDXZTXX.getXHFSBH()); - tempRedInfoResult.setTaxfreeamt(new BigDecimal(HZSQDXZTXX.getHJJE())); - tempRedInfoResult.setTax(new BigDecimal(HZSQDXZTXX.getHJSE())); - tempRedInfoResult.setTaxamt(tempRedInfoResult.getTaxamt() == null ? tempRedInfoResult.getTaxfreeamt().add(tempRedInfoResult.getTax()) : tempRedInfoResult.getTaxamt()); - tempRedInfoResult.setApplyRemark(HZSQDXZTXX.getSQSM()); - tempRedInfoResult.setPdfUrl(tempRedInfoResult.getPdfUrl()); - tempRedInfoResult.setBmbbh(HZSQDXZTXX.getBMBBBH()); - tempRedInfoResult.setBusinessTaxCode(HZSQDXZTXX.getYYSBZ()); - tempRedInfoResult.setApplyTime(tempRedInfoResult.getApplyTime()); - String fplxdmTemp = HZSQDXZTXX.getFPLXDM(); - // 0.增值税专票 2 增值税普通纸质发票 51 增值税普通电子发票 - if (StringUtils.equals(HZSQDXZTXX.getFPLXDM(), "0")) { - fplxdmTemp = "004"; - } - if (StringUtils.equals(HZSQDXZTXX.getFPLXDM(), "2")) { - fplxdmTemp = "007"; - } - if (StringUtils.equals(HZSQDXZTXX.getFPLXDM(), "51")) { - fplxdmTemp = "026"; - } - tempRedInfoResult.setInvoiceType(ElephantUtils.transElephantType(fplxdmTemp, 2)); - tempRedInfoResult.setFjh(tempRedInfoResult.getFjh()); - tempRedInfoResult.setTerminalNumber(tempRedInfoResult.getTerminalNumber()); - tempRedInfoResult.setJspbh(tempRedInfoResult.getJspbh()); - tempRedInfoResult.setSsyf(tempRedInfoResult.getSsyf()); - tempRedInfoResult.setTaxrate(tempRedInfoResult.getTaxrate()); - tempRedInfoResult.setSqxz(tempRedInfoResult.getSqxz()); - tempRedInfoResult.setJbr(tempRedInfoResult.getJbr()); - tempRedInfoResult.setReqnsrsbh(tempRedInfoResult.getReqnsrsbh()); - tempRedInfoResult.setProductOilFlag(tempRedInfoResult.getRedInfoSpecFlag()); - tempRedInfoResult.setServiceSupplierKey(downloadRedInfoDTO.getServiceKey()); - // 处理红字信息表详情 - // 偷个懒,少写个mapper - Redinfo myRedinfo = redinfoMapper.selectRedinfoById(tempRedInfoResult.getId()); - List redinfodetailList = new ArrayList<>(); - Map ddmxxxMap = HZSQDXZZXX.getDDMXXX().stream().collect(Collectors.toMap(DDMXXX::getXH, DDMXXX::getSelf)); - RedInfoDTO tempDTO = new RedInfoDTO(); - List tempDetailDTO = new ArrayList<>(); - for (int j = 0; j < ddmxxxMap.size(); j++) { - Redinfodetail tempRedinfodetail = new Redinfodetail(); - DDMXXX ddmxxx = ddmxxxMap.get(Integer.toString(j + 1)); - tempRedinfodetail.setId(null); - tempRedinfodetail.setRedinfoId(myRedinfo.getId()); - tempRedinfodetail.setIndex(Integer.parseInt(ddmxxx.getXH())); - // tempRedinfodetail.setBillno(tempRedInfoResult.getRedInfoNo()); - tempRedinfodetail.setBillno(tempRedInfoResult.getOutTradeOrderno()); - tempRedinfodetail.setGoodName(ddmxxx.getXMMC()); - tempRedinfodetail.setUnit(ddmxxx.getDW()); - tempRedinfodetail.setSpec(ddmxxx.getGGXH()); - tempRedinfodetail.setTaxrate(new BigDecimal(ddmxxx.getSL())); - tempRedinfodetail.setZzstsgl(ddmxxx.getZZSTSGL()); - tempRedinfodetail.setFphxz(0); - if (!StringUtils.isEmpty(ddmxxx.getFPHXZ())) { - tempRedinfodetail.setFphxz(Integer.parseInt(ddmxxx.getFPHXZ())); - } - if (StringUtils.isNotEmpty(ddmxxx.getKCE())) { - tempRedinfodetail.setKce(new BigDecimal(ddmxxx.getKCE())); - } - String hsbz = ddmxxx.getHSBZ(); - if (StringUtils.equals(hsbz, "0")) { - tempRedinfodetail.setTaxfreeamt(new BigDecimal(ddmxxx.getJE())); - tempRedinfodetail.setTax(new BigDecimal(ddmxxx.getSE())); - tempRedinfodetail.setTaxamt(tempRedinfodetail.getTaxfreeamt().add(tempRedinfodetail.getTax())); - if (ddmxxx.getDJ() != null) { - tempRedinfodetail.setPrice(new BigDecimal(ddmxxx.getDJ())); - } - } else { - tempRedinfodetail.setTaxamt(new BigDecimal(ddmxxx.getJE())); - tempRedinfodetail.setTax(new BigDecimal(ddmxxx.getSE())); - tempRedinfodetail.setTaxfreeamt(tempRedinfodetail.getTaxamt().add(tempRedinfodetail.getTax())); - if (ddmxxx.getDJ() != null) { - // 如果是含税的单价 则不含税单价为 含税单价 / (1 + 税率) - BigDecimal priceWithoutTax = (new BigDecimal(ddmxxx.getDJ())).divide((new BigDecimal(1)).add(tempRedinfodetail.getTaxrate())); - tempRedinfodetail.setPrice(priceWithoutTax); - // new BigDecimal(ddmxxx.getDJ()) - } - } - tempRedinfodetail.setLslbs(ddmxxx.getLSLBS()); - tempRedinfodetail.setSpbm(ddmxxx.getSPBM()); - tempRedinfodetail.setYhzcbs(Integer.parseInt(ddmxxx.getYHZCBS())); - if (ddmxxx.getSL() != null) { - tempRedinfodetail.setNum(new BigDecimal(ddmxxx.getSL())); - } - redinfodetailList.add(tempRedinfodetail); - RedInfoDetailDTO myTempDetailDTO = new RedInfoDetailDTO(); - BeanUtils.copyProperties(tempRedinfodetail, myTempDetailDTO); - tempDetailDTO.add(myTempDetailDTO); - } - redinfoMapper.deleteRedinfodetailByRedinfoId(tempRedInfoResult.getId()); - redinfoMapper.batchRedinfodetail(redinfodetailList); - - redinfoMapper.updateRedinfo(tempRedInfoResult); - tempRedInfoResult.setRedinfodetailList(redinfodetailList); - result.add(tempRedInfoResult); - BeanUtils.copyProperties(tempRedInfoResult, tempDTO); - tempDTO.setMyRedinfodetailList(tempDetailDTO); - // 判断一下是否是需要的dto - if (StringUtils.isNotEmpty(downloadRedInfoDTO.getBillNo())) { - // if (!StringUtils.equals(tempDTO.getOutTradeOrderno(), downloadRedInfoDTO.getBillNo())) { - if (!((StringUtils.equals(tempDTO.getOriginFpdm(), redInfoResult.getOriginFpdm())) && (StringUtils.equals(tempDTO.getOriginFphm(), redInfoResult.getOriginFphm())))) { // 狗比大象,他的申请单号是他们返回的,诺诺是我们上传的,我们只能用他们返回的申请单号 - continue; - } else { - page = 1000; - resultDTO.add(tempDTO); - } - } else { - // 只有当billNo为空的时候,才返回列表,否则就是精确查询 - resultDTO.add(tempDTO); - } - } + DxhyInterfaceResponse dxhyInterfaceResponse = null; + try { + dxhyInterfaceResponse = ElephantUtils.sendRequestWithoutTokenV6(ElephantConstantsV6.REDINFO_DOWNLOAD_LOCALHOST, ElephantConstantsV6.REDINFO_DOWNLOAD_METHOD, JSONUtil.parse(redDownload), companyservice); + } catch (UnsupportedEncodingException | InvalidKeyException | NoSuchAlgorithmException e) { + log.error("【销项发票】【大象接口】【红字信息表下载】发票请求异常,请求报文{},销方信息{}", null, JSONObject.toJSONString(companyservice)); } + log.info("【销项发票】【大象发票】发票红字信息表下载请求结果{}", dxhyInterfaceResponse.toString()); - return new HXResponse("0000", "查询成功", JSONObject.toJSON(resultDTO)); + return parseResult(dxhyInterfaceResponse); } /**