简税升级

beta-enc
dongxiaoke 2 years ago
parent a49f02b161
commit 3b3b15f1d9
  1. 37
      jianshui-admin/src/main/java/com/jianshui/api/config/WebserviceResponseHandler.java
  2. 15
      jianshui-admin/src/main/java/com/jianshui/api/controller/webservice/income/v1/impl/InvoiceCheckWebServiceImpl.java
  3. 16
      jianshui-income/src/main/java/com/jianshui/income/domain/vo/render/GetInvoiceSphVO.java
  4. 125
      jianshui-income/src/main/java/com/jianshui/income/domain/vo/render/GetInvoiceVO.java
  5. 19
      jianshui-income/src/main/java/com/jianshui/income/service/impl/EleCheckInvoiceImpl.java

@ -1,10 +1,7 @@
package com.jianshui.api.config;
import cn.hutool.core.util.XmlUtil;
import org.w3c.dom.CDATASection;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.*;
import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilderFactory;
@ -38,9 +35,11 @@ public class WebserviceResponseHandler implements SOAPHandler<SOAPMessageContext
SOAPBody body = message.getSOAPBody();
Node returnNode = body.getFirstChild().getFirstChild();
Node dataNode = returnNode.getFirstChild();
CDATASection cdata = dataNode.getOwnerDocument().createCDATASection(XmlUtil.toStr(dataNode,"GBK",false,false));
returnNode.removeChild(dataNode);
returnNode.appendChild(cdata);
// 修改CDATA标签位置
addCDataToLeafNodes(dataNode);
// CDATASection cdata = dataNode.getOwnerDocument().createCDATASection(XmlUtil.toStr(dataNode,"GBK",false,false));
// returnNode.removeChild(dataNode);
// returnNode.appendChild(cdata);
// body.getFirstChild().removeChild(body.getFirstChild().getFirstChild());
// CDATASection cdata = Data.getOwnerDocument().createCDATASection(XmlUtil.toStr(fp, "GBK", false, true));
// body.setTextContent(XmlUtil.toStr(body.getFirstChild()));
@ -54,6 +53,30 @@ public class WebserviceResponseHandler implements SOAPHandler<SOAPMessageContext
return true;
}
/**
* @Author: kk
* @Description: CDATA类
* @DateTime: 2023/6/5 19:12
* @Params:
* @Return
*/
public static void addCDataToLeafNodes(Node node) {
NodeList childNodes = node.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++) {
Node childNode = childNodes.item(i);
if (childNode.getNodeType() == Node.ELEMENT_NODE) {
addCDataToLeafNodes(childNode);
}
else if (childNode.getNodeType() == Node.TEXT_NODE) {
CDATASection cdata = childNode.getOwnerDocument().createCDATASection(childNode.getNodeValue());
node.removeChild(childNode);
node.appendChild(cdata);
}
}
}
@Override
public boolean handleFault(SOAPMessageContext context) {
return false;

@ -2,6 +2,7 @@ package com.jianshui.api.controller.webservice.income.v1.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.XmlUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
@ -288,7 +289,7 @@ public class InvoiceCheckWebServiceImpl {
// " }");
// AjaxResult invoiceResult = AjaxResult.success(data);
if (invoiceResult.isError()) {
return buildResult(result, "1", invoiceResult.getMsg(), null);
return buildResult(result, StrUtil.padPre(String.valueOf(invoiceResult.getCode()), 3, '0') , invoiceResult.getMsg(), null);
}
if (invoiceResult.isSuccess()) {
@ -306,6 +307,13 @@ public class InvoiceCheckWebServiceImpl {
invoiceCheck = EleCheckInvoiceImpl.handelCheckResult(invoiceCheck, resultContent);
GetInvoiceVO getInvoiceVO = new GetInvoiceVO();
BeanUtils.copyProperties(invoiceCheck, getInvoiceVO);
BeanUtils.copyProperties(invoiceCheck.getInvoiceCheckCar(),getInvoiceVO);
BeanUtils.copyProperties(invoiceCheck.getInvoiceCheckUsedCar(),getInvoiceVO);
BeanUtils.copyProperties(invoiceCheck.getInvoiceCheckToll(),getInvoiceVO);
BeanUtils.copyProperties(invoiceCheck.getInvoiceCheckFreight(),getInvoiceVO);
String zfbz = getInvoiceVO.getZfbz();
if (StringUtils.equals(zfbz, "Y")) {
getInvoiceVO.setZfbz("Y");
@ -337,13 +345,16 @@ public class InvoiceCheckWebServiceImpl {
Element getInvoiceDoc = json2Element(result, "Fp", getInvoiceVOJson);
for (GetInvoiceSphVO getInvoiceSphVO : getInvoiceSphVOList) {
// JSONObject getInvoiceSphVOJson = (JSONObject) JSONObject.toJSON(getInvoiceSphVO);
// 航信明细行从1开始
getInvoiceSphVO.setId(getInvoiceSphVO.getId() + 1);
// 防止转义
String getInvoiceSphVOJsonStr = JSON.toJSONString(getInvoiceSphVO, SerializerFeature.WriteSlashAsSpecial);
getInvoiceSphVOJsonStr.replace("免税","0.0%").replace("***","0.00");
getInvoiceSphVOJsonStr = getInvoiceSphVOJsonStr.replace("免税","0.0%").replace("***","0.00");
JSONObject getInvoiceSphVOJson = JSONObject.parseObject(getInvoiceSphVOJsonStr);
Element sphElement = json2Element(result, "Sph", getInvoiceSphVOJson);
getInvoiceDoc.appendChild(sphElement);
}
return buildResult(result, "1", "查验成功", getInvoiceDoc);
}

@ -13,7 +13,7 @@ public class GetInvoiceSphVO {
@JSONField(name = "Xh")
private int id;
// invoice_check表的id
private int invoice_check_id;
// private int invoice_check_id;
// 明细编号
private String mxbh;
// 货物名称
@ -31,7 +31,7 @@ public class GetInvoiceSphVO {
@JSONField(name = "Se")
private String se;
// 含税单价
private String hsdj;
// private String hsdj;
// 含税金额
@JSONField(name = "Je")
private String hsje;
@ -45,18 +45,18 @@ public class GetInvoiceSphVO {
@JSONField(name = "Jldw")
private String jldw;
// 费用项目 货运发票返回信息
private String fyxm;
// private String fyxm;
// 车牌号 通行费发票返回信息
private String cph;
// private String cph;
// 类型 通行费发票返回信息
private String lx;
// private String lx;
// 通行日期起 通行费发票返回信息
private String txrqq;
// private String txrqq;
// 通行日起止 通行费发票返回信息
private String txrqz;
// private String txrqz;
//商品编码
@JSONField(name = "Taxcode")
private String spbm;
private String ssflbm;
//税收分类简码名称
private String spbmjc;
}

@ -1,6 +1,7 @@
package com.jianshui.income.domain.vo.render;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jianshui.income.domain.entity.InvoiceCheckDetail;
import lombok.Data;
@ -15,8 +16,8 @@ import java.util.List;
**/
@Data
public class GetInvoiceVO {
@JSONField(name = "id")
private int id;
// @JSONField(name = "id")
// private int id;
// 查验人的companyid
@JSONField(name = "company_id")
private String company_id;
@ -25,11 +26,11 @@ public class GetInvoiceVO {
@JSONField(name = "pch")
private String pch;
// 查验结果
@JSONField(name = "cyjg")
private String cyjg;
// @JSONField(name = "cyjg")
// private String cyjg;
// 查验结果信息 查询结果的信息
@JSONField(name = "cyjgxx")
private String cyjgxx;
// @JSONField(name = "cyjgxx")
// private String cyjgxx;
// 发票种类
@JSONField(name = "Fplx") // 单独处理
private String fpzl;
@ -40,26 +41,26 @@ public class GetInvoiceVO {
@JSONField(name = "Fphm")
private String fphm;
// 查验次数
@JSONField(name = "cycs")
private String cycs;
// @JSONField(name = "cycs")
// private String cycs;
// 销售方名称
@JSONField(name = "Xfmc")
private String xhfmc;
private String xfmc;
// 销售方识别号
@JSONField(name = "Xfsh")
private String xhfsbh;
private String xfsbh;
// 销售方地址电
@JSONField(name = "Xfdzdh")
private String xhfdzdh;
// @JSONField(name = "Xfdzdh")
private String xfdzdh;
// 销售方地址 2022.09.16 浪潮要求新增需求
@JSONField(name = "Xfyhzh")
private String xhfdz;
private String xfdz;
// 销售方电话 2022.09.16 浪潮要求新增需求
@JSONField(name = "xhfdh")
private String xhfdh;
private String xfdh;
// 销售方开户行
@JSONField(name = "xhfyhzh")
private String xhfyhzh;
@JSONField(name = "Xfdzdh")
private String xfyhzh;
// 购买方识别号
@JSONField(name = "Gfsh")
private String gmfsbh;
@ -74,6 +75,7 @@ public class GetInvoiceVO {
private String gmfyhzh;
// 开票日期 格式 YYYYMMDD
@JSONField(name = "Kprq")
@JsonFormat(pattern = "yyyy-MM-dd")
private String kprq;
// 发票金额 发票种类为 01,02,03,14 时不可为空,填写发票不含税金额
@JSONField(name = "Je")
@ -91,14 +93,14 @@ public class GetInvoiceVO {
@JSONField(name = "Jqbm")
private String jqbh;
// 开票人
@JSONField(name = "kpr")
private String kpr;
// @JSONField(name = "kpr")
// private String kpr;
// 收款人
@JSONField(name = "skr")
private String skr;
// @JSONField(name = "skr")
// private String skr;
// 复核人
@JSONField(name = "fhr")
private String fhr;
// @JSONField(name = "fhr")
// private String fhr;
// 校验码
@JSONField(name = "JYM")
private String jym;
@ -108,8 +110,8 @@ public class GetInvoiceVO {
@JSONField(name = "HCBZ")
private String hcbz;
// 作废标志 Y:已作废 H:已冲红 N:未作废
@JSONField(name = "status")
private String status;
// @JSONField(name = "status")
// private String status;
// 创建时间
@JSONField(name = "created_at")
private Date created_at;
@ -164,4 +166,79 @@ public class GetInvoiceVO {
@JSONField(name = "Sph")
private List<GetInvoiceSphVO> Sph;
@JSONField(name = "mfdwgr")
private String mfdwgr;
@JSONField(name = "djzh")
private String djzh;
@JSONField(name = "cyjg")
private String cyjg;
@JSONField(name = "smfdwgr")
private String smfdwgr;
@JSONField(name = "cpxh")
private String cpxh;
@JSONField(name = "escsc")
private String escsc;
@JSONField(name = "cycs")
private String cycs;
@JSONField(name = "mfdwgrdz")
private String mfdwgrdz;
@JSONField(name = "clsbh")
private String clsbh;
@JSONField(name = "smfdh")
private String smfdh;
@JSONField(name = "escscdz")
private String escscdz;
@JSONField(name = "smfdwgrzz")
private String smfdwgrzz;
@JSONField(name = "smfdwdmsfzh")
private String smfdwdmsfzh;
@JSONField(name = "escscdh")
private String escscdh;
@JSONField(name = "cpzh")
private String cpzh;
@JSONField(name = "escsckhyhzh")
private String escsckhyhzh;
@JSONField(name = "cjhj")
private String cjhj;
@JSONField(name = "xdpbz")
private String xdpbz;
@JSONField(name = "cllx")
private String cllx;
@JSONField(name = "qdbz")
private String qdbz;
@JSONField(name = "cpybz")
private String cpybz;
@JSONField(name = "zrdcgsmc")
private String zrdcgsmc;
@JSONField(name = "escscsbh")
private String escscsbh;
@JSONField(name = "mfdwdmsfzh")
private String mfdwdmsfzh;
@JSONField(name = "mfdh")
private String mfdh;
}

@ -1,5 +1,6 @@
package com.jianshui.income.service.impl;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.jianshui.common.core.domain.AjaxResult;
@ -117,12 +118,21 @@ public class EleCheckInvoiceImpl implements ICheckInvoice {
// 如果需要扣费
robUserMoney += 1;
}
String errorMsg = resultJson.getString("message");
JSONObject result = new JSONObject();
result.put("robUserMoney", robUserMoney);
return new AjaxResult(Integer.parseInt(checkResult), errorMsg, result);
}
invoiceCheck = this.handelCheckResult(invoiceCheck, resultContent); // 批量处理一把
// TODO: 2023/6/5 确定一下哪些需要扣钱
List<String> cyjgList = Arrays.asList("9999", "0002", "0005", "1004", "1005", "1006", "1007", "1008", "1009","1010", "1011", "1012", "1013", "1014", "1015", "1020", "1021");
if (cyjgList.contains(invoiceCheck.getCyjg())) {
log.info("单个发票校验错误结果:companyId=" + companyId + ",errorCode=" + invoiceCheck.getCyjg() + ",returnMessage=" + invoiceCheck.getCyjgxx());
return new AjaxResult(5,invoiceCheck.getCyjgxx());
}
// note-gong 2021/6/17 9:20 查询下数据库中是否存在相同发票;存在就判断下状态是否一致,不一致扣款;不存在就直接扣款
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
@ -166,6 +176,15 @@ public class EleCheckInvoiceImpl implements ICheckInvoice {
result.put("resultContent", resultContent);
// 开始批量更新数据库 老田加的队列。这里没有。他写的队列也不对,上面已经插入过了这里还插入。SB
// RedisQueueUtil.build().setData(invoiceCheck).onQueue("income_result_save_consumer").retry(0).dispatch();
// TODO: 2023/6/5 测试关闭
// :校验是否查询本企业发票
/*String xhfsbh = invoiceCheck.getXhfsbh() != null ? invoiceCheck.getXhfsbh() : "";
if(StrUtil.isEmpty(xhfsbh) || !companyservice.getSellertax().equals(xhfsbh)){
log.info("单个发票校验非本企业发票:companyId=" + companyId + ",errorCode=" + invoiceCheck.getCyjg() + ",returnMessage=" + invoiceCheck.getCyjgxx());
return new AjaxResult(34,"授权企业与所查询发票的购方不一致,请进行核实");
}*/
// 更新成功处理返回数据
return AjaxResult.success(result);
}

Loading…
Cancel
Save