|
|
|
@ -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<RedInfoDTO> 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<Redinfo> result = new ArrayList<>(); |
|
|
|
|
// 解析json
|
|
|
|
|
ElephantDownloadRedinfoDTO downloadRedinfoDTO = content.toJavaObject(ElephantDownloadRedinfoDTO.class); |
|
|
|
|
List<HZSQDXZZXX> 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<Redinfo> 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<Redinfodetail> redinfodetailList = new ArrayList<>(); |
|
|
|
|
Map<String, DDMXXX> ddmxxxMap = HZSQDXZZXX.getDDMXXX().stream().collect(Collectors.toMap(DDMXXX::getXH, DDMXXX::getSelf)); |
|
|
|
|
RedInfoDTO tempDTO = new RedInfoDTO(); |
|
|
|
|
List<RedInfoDetailDTO> 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); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|