diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/constant/elephant/ElephantConstants.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/constant/elephant/ElephantConstants.java index 761dce9..1475989 100644 --- a/jianshui-invoice/src/main/java/com/jianshui/invoice/constant/elephant/ElephantConstants.java +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/constant/elephant/ElephantConstants.java @@ -99,4 +99,59 @@ public class ElephantConstants { */ public static String SIGN = "eseal/v1/sign"; + //纳税人识别号 + public static final String NSRSBH ="NSRSBH"; + + //UUID + public static final String UUID = "UUID"; + + //红字确认单编号 + public static final String HZQRDBH = "HZQRDBH"; + + //确认类型 + public static final String QRLX = "QRLX"; + + //Y + public static final String QRLX_Y = "Y"; + //N + public static final String QRLX_N = "N"; + //C + public static final String QRLX_C = "C"; + + + //用户名 + public static final String YHM = "YHM"; + + //二维码 + public static final String EWM = "EWM"; + + //用户角色类型 + public static final String YHJSLX = "YHJSLX"; + + //(销售方)名称 + public static final String XSFMC = "XSFMC"; + + //(销售方)统一社会信用代码/纳税人识别号/身份证件号码 + public static final String XSFNSRSBH = "XSFNSRSBH"; + + //(购买方)统一社会信用代码/纳税人识别号/身份证件号码 + public static final String GMFNSRSBH = "GMFNSRSBH"; + + //购买方名称 + public static final String GMFMC = "GMFMC"; + + //录入方身份 + public static final String LRFSF = "LRFSF"; + + //录入日期始 + public static final String LRRQQ = "LRRQQ"; + + //录入日期止 + public static final String LRRQZ = "LRRQZ"; + + //红字确认单编号 + public static final String HZFPXXQRDBH = "HZFPXXQRDBH"; + + public static final String STRING_0 = "0"; + } diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/ele/HZQRXXLIST.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/ele/HZQRXXLIST.java new file mode 100644 index 0000000..aa58b13 --- /dev/null +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/ele/HZQRXXLIST.java @@ -0,0 +1,13 @@ +package com.jianshui.invoice.domain.ele; + +import lombok.Data; + +import java.util.List; + +@Data +public class HZQRXXLIST { + private int PAGENUMBER; + private int PAGESIZE; + private int TOTAL; + private List LIST; +} diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/ele/HZXXDATA.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/ele/HZXXDATA.java new file mode 100644 index 0000000..49944c9 --- /dev/null +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/ele/HZXXDATA.java @@ -0,0 +1,32 @@ +package com.jianshui.invoice.domain.ele; + +import lombok.Data; + +@Data +public class HZXXDATA { + private String UUID; + private String HZFPXXQRDBH; + private String LRFSF; + private String XSFNSRSBH; + private String XSFMC; + private String GMFNSRSBH; + private String GMFMC; + private String LZFPDM; + private String LZFPHM; + private String SFZZFPBZ; + private String LZKPRQ; + private String LZHJJE; + private String LZHJSE; + private String LZFPPZDM; + private String LZFPTDYSLXDM; + private String HZCXJE; + private String HZCXSE; + private String HZQRDMXSL; + private String CHYYDM; + private String HZQRXXZTDM; + private String QRRQ; + private String YKJHZFPBZ; + private String HZFPHM; + private String HZKPRQ; + private String YXBZ; +} diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/ele/HZXXLIST.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/ele/HZXXLIST.java new file mode 100644 index 0000000..f113cf5 --- /dev/null +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/ele/HZXXLIST.java @@ -0,0 +1,8 @@ +package com.jianshui.invoice.domain.ele; + +import lombok.Data; + +@Data +public class HZXXLIST { + private HZQRXXLIST HZQRXXLIST; +} 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 c6b8f88..2834c8d 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 @@ -1,5 +1,6 @@ package com.jianshui.invoice.service.impl.api; +import ch.qos.logback.core.joran.spi.ElementPath; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.codec.Base64; import cn.hutool.core.date.DateUtil; @@ -7,6 +8,7 @@ import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONConfig; import cn.hutool.json.JSONUtil; +import com.alibaba.druid.support.json.JSONUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -29,6 +31,7 @@ import com.jianshui.common.utils.TimeUtil; import com.jianshui.common.utils.http.HttpHelper; import com.jianshui.common.utils.uuid.IdUtils; import com.jianshui.framework.manager.AsyncManager; +import com.jianshui.invoice.constant.elephant.ElephantConstants; import com.jianshui.invoice.constant.elephant.ElephantConstantsV6; import com.jianshui.invoice.domain.*; import com.jianshui.invoice.domain.dto.*; @@ -38,9 +41,7 @@ import com.jianshui.invoice.domain.dto.api.elephant.sd.GetRpaAuthStatusDTO; 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; -import com.jianshui.invoice.domain.ele.HZSQDMessage; +import com.jianshui.invoice.domain.ele.*; import com.jianshui.invoice.domain.vo.InvoiceAllQycodeResultElEVO; import com.jianshui.invoice.domain.vo.jcsk.*; import com.jianshui.invoice.mapper.BillInfoMapper; @@ -64,8 +65,10 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.ibatis.annotations.Lang; +import org.joda.time.format.DateTimeFormat; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -75,6 +78,8 @@ import java.math.BigDecimal; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -1999,26 +2004,23 @@ public class ElephantInvoiceApiV6ServiceImpl implements IInvoiceApiService { //获取税局用户名称 JSONObject param = new JSONObject(); - param.put("NSRSBH",companyservice.getSellertax()); + param.put(ElephantConstants.NSRSBH,companyservice.getSellertax()); HXResponse hxResponse = queryRpaTaxAccount(param, companyservice); if (!StringUtils.equals("000000",hxResponse.getCode())){ return hxResponse; } JSONObject resp = JSONObject.parseObject(JSON.toJSONString(hxResponse.getData())); - Map reqParam = new HashMap<>(); - reqParam.put("NSRSBH",companyservice.getSellertax()); - reqParam.put("YHM",resp.getString("YHM")); - reqParam.put("RZID",allApiLog.getResultMsg()); + param.put(ElephantConstants.YHM,resp.getString(ElephantConstants.YHM)); - HXResponse rpaAuthStatus = getRpaAuthStatus(new JSONObject(reqParam), companyservice); + HXResponse rpaAuthStatus = qrcode(param, companyservice); if (StringUtils.equals("000000",rpaAuthStatus.getCode())){ rpaAuthStatus.setCode("200"); rpaAuthStatus.setMessage("处理成功"); JSONObject data = JSONObject.parseObject(JSON.toJSONString(rpaAuthStatus.getData())); - String ewm = data.getString("EWM"); - rpaAuthStatus.setData(new HashMap<>().put("ewm",ewm)); + String ewm = data.getString(ElephantConstants.EWM); + rpaAuthStatus.setData(new HashMap<>().put(ElephantConstants.EWM.toLowerCase(),ewm)); } return rpaAuthStatus; @@ -2058,9 +2060,27 @@ public class ElephantInvoiceApiV6ServiceImpl implements IInvoiceApiService { }else if (WebServiceConstant.CXHZFPXXQRD.equals(finalServiceId)) { // 查询红字信息表 + JSONObject param = new JSONObject(); + param.put(ElephantConstants.YHJSLX,ElephantConstants.STRING_0); + param.put(ElephantConstants.XSFNSRSBH,companyservice.getSellertax()); + param.put(ElephantConstants.XSFMC,companyservice.getSellername()); + param.put(ElephantConstants.LRFSF,ElephantConstants.STRING_0); + //录入日期起始值 + HXResponse hxResponse = queryRedConfirmationList(param, companyservice); + + HZXXLIST hzxxlist = JSONObject.parseObject(JSONObject.toJSONString(hxResponse.getData()), HZXXLIST.class); + + return convertToJcData(hzxxlist); } else if (WebServiceConstant.SHHZFPXXQRD.equals(finalServiceId)) { // 审核红字信息表 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Redinfo::getFpqqlsh,requestId); + queryWrapper.orderByDesc(Redinfo::getId).last("limit 1"); + + Redinfo redinfo = redinfoMapper.selectOne(queryWrapper); + + return auditRedInfoResult(allApiLog.getResultMsg(),redinfo,companyservice); } else if (WebServiceConstant.FPEWMXZ.equals(finalServiceId)) { // 获取发票下载地址 @@ -2081,7 +2101,99 @@ public class ElephantInvoiceApiV6ServiceImpl implements IInvoiceApiService { } -// @Transactional(rollbackFor = Exception.class) + private HXResponse convertToJcData(HZXXLIST hzxxlist) { + HZQRXXLIST hzqrxxlist = hzxxlist.getHZQRXXLIST(); + List redinfos = new ArrayList<>(hzqrxxlist.getTOTAL()); + + List list = hzqrxxlist.getLIST(); + + for (HZXXDATA hzxxdata : list) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Redinfo::getRedInfoNo,hzxxdata.getHZFPXXQRDBH()); + queryWrapper.orderByDesc(Redinfo::getId).last("limit 1"); + //根据红字信息表编号查询红字信息 + Redinfo redinfo = redinfoMapper.selectOne(queryWrapper); + //不存在就创建对象 + if (ObjectUtils.isEmpty(redinfo)){ + redinfo = new Redinfo(); + } + redinfo.setRedInfoNo(hzxxdata.getHZFPXXQRDBH()); + redinfo.setSellerTaxnum(hzxxdata.getXSFNSRSBH()); + redinfo.setSellerName(hzxxdata.getXSFMC()); + redinfo.setBuyerName(hzxxdata.getGMFMC()); + redinfo.setBuyerTaxnum(hzxxdata.getGMFNSRSBH()); + redinfo.setOriginFpdm(hzxxdata.getLZFPDM()); + redinfo.setOriginFphm(hzxxdata.getLZFPHM()); + redinfo.setOriginKprq(hzxxdata.getLZKPRQ()); + redinfo.setReqnsrsbh(hzxxdata.getXSFNSRSBH()); + redinfos.add(redinfo); + //判断是否存在红字信息,存在执行更新 + if (ObjectUtils.isEmpty(redinfo.getId())){ + //处理发票表和红字信息表 + redInfoAndInvoiceUpdate(hzxxdata, redinfo); + } + } + + return new HXResponse("200","查询成功",redinfos); + } + + @Async + public void redInfoAndInvoiceUpdate(HZXXDATA hzxxdata, Redinfo redinfo) { + redinfoMapper.updateRedinfo(redinfo); + QueryWrapper invoiceQueryWrapper = new QueryWrapper<>(); + invoiceQueryWrapper.eq("fphm", redinfo.getOriginFphm()); + Invoice invoice = invoiceMapper.selectOne(invoiceQueryWrapper); + //更新蓝字发票状态为冲红 99 + invoice.setState(99); + invoiceMapper.updateInvoice(invoice); + invoice.setId(null); + invoice.setOriginFphm(invoice.getFphm()); + invoice.setFphm(hzxxdata.getHZFPHM()); + invoice.setBillInfoId(redinfo.getId()); + invoice.setSystemOrderno(redinfo.getSystemOrderno()); + invoice.setOutTradeOrderno(redinfo.getOutTradeOrderno()); + invoice.setFpqqlsh(redinfo.getFpqqlsh()); + invoice.setKprq(DateUtil.parse(hzxxdata.getHZKPRQ())); + invoice.setState(2); + invoiceMapper.insertInvoice(invoice); + } + + private HXResponse auditRedInfoResult(String uuid,Redinfo redinfo, Companyservice companyservice) { + if (ObjectUtils.isEmpty(companyservice)){ + log.info("请求日志为空或者企业服务为空"); + return new HXResponse("9998","请求日志为空或者企业服务为空"); + } + if (ObjectUtils.isEmpty(redinfo)){ + log.info("不存在该红字信息"); + return new HXResponse("9998","不存在该红字信息"); + } + + if (StringUtils.isBlank(uuid)){ + log.info("红字确认单UUID不能为空"); + return new HXResponse("9998","红字确认单UUID不能为空"); + } + + JSONObject param = new JSONObject(); + param.put(ElephantConstants.NSRSBH,companyservice.getSellertax()); + param.put(ElephantConstants.UUID,uuid); + param.put(ElephantConstants.HZQRDBH,redinfo.getRedInfoNo()); + param.put(ElephantConstants.QRLX,ElephantConstants.QRLX_Y); + + //调用大象接口获取确认日期 + + AjaxResult queryResult = null; + try { + queryResult = ElephantUtils.sendRequestWithoutTokenV6New(ElephantConstantsV6.QUERY_INVOICE_LOCALHOST, ElephantConstantsV6.QUERY_INVOICE_METHOD, JSONUtil.parse(param), companyservice); + } catch (UnsupportedEncodingException | InvalidKeyException | NoSuchAlgorithmException e) { + log.error("【销项发票】【大象接口】【发票开具】发票请求异常,请求报文{},销方信息{}", param.toJSONString(), JSONObject.toJSONString(companyservice)); + e.printStackTrace(); + throw new JianshuiServiceException("系统异常!"); + } + + return new HXResponse(String.valueOf(queryResult.getCode()),queryResult.getMsg(),queryResult.getData()); + } + + // @Transactional(rollbackFor = Exception.class) public HXResponse queryRedInfoByElepant(Redinfo redinfo, Companyservice companyservice,InvoiceAllApiLog apiLog) { //返回信息 @@ -2094,9 +2206,9 @@ public class ElephantInvoiceApiV6ServiceImpl implements IInvoiceApiService { //封装请求参数 JSONObject param = new JSONObject(); - param.put("NSRSBH",companyservice.getSellertax()); - param.put("UUID",apiLog.getResultMsg()); - param.put("XSFNSRSBH",companyservice.getSellertax()); + param.put(ElephantConstants.NSRSBH,companyservice.getSellertax()); + param.put(ElephantConstants.UUID,apiLog.getResultMsg()); + param.put(ElephantConstants.XSFNSRSBH,companyservice.getSellertax()); debugLog("红字信息表申请查询断点1",uuid,System.currentTimeMillis()); //调用大象接口查询红字信息表明细