红字确认单确认

beta-prop-all^2
kk 2 years ago
parent 9718646a67
commit ab7ab68d3b
  1. 26
      jianshui-invoice/src/main/java/com/jianshui/invoice/domain/dto/api/elephant/sd/RedDownload.java
  2. 230
      jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/ElephantInvoiceApiV6ServiceImpl.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;
}

@ -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);
}
/**