diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java b/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java index 7f6277c9..f5bf6160 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java @@ -1500,6 +1500,8 @@ public class SDNYMainProcessController extends AbstractController { info.setZDJZH(snInvoice.getCertificateNo()); info.setZGFMC(snInvoice.getPurchaserName()); info.setSORT(snInvoice.getSort()); + // 文件名 + info.setZWJMC(snInvoice.getFileName()); //机打代码 info.setZJDDM(snInvoice.getMachineCode()); if (snInvoice.getTotalAmount() != null) { diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/SAPInvoiceInfo.java b/dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/SAPInvoiceInfo.java index 409356e1..ad0f2f7f 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/SAPInvoiceInfo.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/SAPInvoiceInfo.java @@ -545,4 +545,10 @@ public class SAPInvoiceInfo { @JSONField(name = "ZTID") private String ZTID = ""; + /** + * 文件名称 + */ + @JSONField(name = "ZWJMC") + private String ZWJMC = ""; + } diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/SNInvoice.java b/dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/SNInvoice.java index bacc972e..045dc1c9 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/SNInvoice.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/SNInvoice.java @@ -334,6 +334,11 @@ public class SNInvoice { */ private String isDeductible; + /** + * 文件名 + */ + private String fileName; + /** * 明细列表 */ diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/SdnyTDxSaleRecordInvoice.java b/dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/SdnyTDxSaleRecordInvoice.java index 23f276d9..472f51a4 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/SdnyTDxSaleRecordInvoice.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/SdnyTDxSaleRecordInvoice.java @@ -858,4 +858,7 @@ public class SdnyTDxSaleRecordInvoice implements Serializable { private String sort; @TableField(exist = false) private String fileId; + + @TableField(exist = false) + private String fileName; } \ No newline at end of file diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/ZData.java b/dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/ZData.java index 0c575036..6711e17c 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/ZData.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/ZData.java @@ -340,6 +340,11 @@ public class ZData { * 国税局商品编码 发票信息空则不传 */ private String ZGSJBM=""; + + /** + * 文件名称 + */ + private String ZWJMC = ""; @JSONField(name = "ZBHSJE_Y") public String getZBHSJE_Y() { return ZBHSJE_Y; @@ -729,6 +734,8 @@ public class ZData { return RESERVE5; } - - + @JSONField(name = "ZWJMC") + public String getZWJMC() { + return ZWJMC; + } } diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/enums/TaxRateCodeEnum.java b/dxhy-erp/src/main/java/com/dxhy/erp/enums/TaxRateCodeEnum.java index f1030d92..f9f08aa8 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/enums/TaxRateCodeEnum.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/enums/TaxRateCodeEnum.java @@ -2,6 +2,8 @@ package com.dxhy.erp.enums; import com.dxhy.common.vo.Tax; +import java.math.BigDecimal; + /** * 税率 税码关系表 */ diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/ImageSubmitServiceImpl.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/ImageSubmitServiceImpl.java index c71e05a0..c3d4c475 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/ImageSubmitServiceImpl.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/ImageSubmitServiceImpl.java @@ -121,16 +121,24 @@ public class ImageSubmitServiceImpl implements ImageSubmitService { item.setImageId(params.getImageId()); item.setBzdh(params.getBillNum()); item.setBzr(params.getJbrUserName()); + item.setCompCode(params.getCompCode()); }); List salesInvoiceList = new ArrayList<>(); invoicesList.stream().forEach(invoice -> { - SdnyTDxSaleRecordInvoice saleRecordInvoice = sdnyTDxSaleRecordInvoiceDao.selectOne(new QueryWrapper().eq("uuid", invoice.getUuid())); + List saleRecordInvoices = sdnyTDxSaleRecordInvoiceDao.selectList(new QueryWrapper().eq("uuid", invoice.getUuid())); + SdnyTDxSaleRecordInvoice saleRecordInvoice = null; + if (saleRecordInvoices!=null && saleRecordInvoices.size()>0) { + saleRecordInvoice = saleRecordInvoices.get(0); + } List salesDetailList = new ArrayList<>(); detailiMap.get(invoice.getUuid()).stream().forEach(item -> { + log.info("进项表明细行:{}",JSONObject.toJSONString(item)); SdnyTDxRecordInvoiceDetailSales salesDetail = JsonUtils.getInstance().parseObject(JSONObject.toJSONString(item), SdnyTDxRecordInvoiceDetailSales.class); + log.info("销项表明细行:{}",JSONObject.toJSONString(salesDetail)); salesDetail.setId(null); + salesDetail.setTaxRate(item.getTaxRate()); salesDetailList.add(salesDetail); }); if (saleRecordInvoice == null) { @@ -138,18 +146,22 @@ public class ImageSubmitServiceImpl implements ImageSubmitService { saleRecordInvoice = JsonUtils.getInstance().parseObject(JSONObject.toJSONString(invoice), SdnyTDxSaleRecordInvoice.class); saleRecordInvoice.setId(null); sdnyTDxSaleRecordInvoiceDao.insert(saleRecordInvoice); - detailSalesDao.deleteByUUid(invoice.getUuid()); - detailSalesDao.batchInsert(salesDetailList); + } else { // 修改 saleRecordInvoice.setImageId(invoice.getImageId()); saleRecordInvoice.setBzdh(invoice.getBzdh()); saleRecordInvoice.setBzr(invoice.getBzr()); + saleRecordInvoice.setCompCode(invoice.getCompCode()); sdnyTDxSaleRecordInvoiceDao.updateById(saleRecordInvoice); } + detailSalesDao.deleteByUUid(invoice.getUuid()); + detailSalesDao.batchInsert(salesDetailList); + saleRecordInvoice.setDetailList(salesDetailList); saleRecordInvoice.setSort(paramsInvoiceMap.get(invoice.getUuid()).getSort()); saleRecordInvoice.setFileId(paramsInvoiceMap.get(invoice.getUuid()).getFileId()); + saleRecordInvoice.setFileName(paramsInvoiceMap.get(invoice.getUuid()).getFileName()); salesInvoiceList.add(saleRecordInvoice); }); @@ -183,6 +195,7 @@ public class ImageSubmitServiceImpl implements ImageSubmitService { * @return */ public R pushSap(List invoiceList, SNRequestObject params) { + log.info("销项发票推送SAP准备数据:{},影像参数:{}", invoiceList, params); String dt = DateUtil.now(); List zDataList = new ArrayList<>(); if (invoiceList != null) { @@ -192,6 +205,7 @@ public class ImageSubmitServiceImpl implements ImageSubmitService { if (StringUtils.isBlank(invoiceType)) { throw new RuntimeException("推送SAP失败,推导发票类型错误,发票代码:"+item.getInvoiceCode()+",发票代码:"+item.getInvoiceNo()); } + ZData zdata = new ZData(); zdata.setZFPDM(StringUtils.isBlank(item.getInvoiceCode())?"":item.getInvoiceCode()); zdata.setZFPHM(item.getInvoiceNo()); @@ -203,7 +217,7 @@ public class ImageSubmitServiceImpl implements ImageSubmitService { zdata.setZZSE_DIF("0"); zdata.setZHSJE_DIF("0"); zdata.setZZBZ(item.getRemark()); - zdata.setZFPZT("0"); + zdata.setZFPZT("0".equals(item.getInvoiceStatus())?"0":"1"); zdata.setZKPRQ(DateUtils.dateToStr(item.getInvoiceDate(),DateUtils.YYYYMMDD)); zdata.setMANDT(params.getClientNum()); zdata.setZGFMC(item.getGfName()); @@ -243,11 +257,15 @@ public class ImageSubmitServiceImpl implements ImageSubmitService { zdata.setFPYXBH(item.getFileId()); zdata.setIMG_ID(params.getImageId()); zdata.setSORT(String.valueOf(item.getSort())); + // 增加文件名 + zdata.setZWJMC(item.getFileName()); + // 处理明细行 List zDatas=new ArrayList<>(); for (SdnyTDxRecordInvoiceDetailSales detail : item.getDetailList()) { detail.setTaxRateOfSap(getTaxRate(detail.getTaxRate())); - detail.setTaxRate(detail.getTaxRateOfSap().multiply(new BigDecimal(100)).stripTrailingZeros().toPlainString()); + detail.setTaxRate(detail.getTaxRateOfSap().multiply(new BigDecimal(100)).setScale(4,BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString()); + log.info("明细行数据:{}",JSONObject.toJSONString(detail)); BigDecimal totalAmount = new BigDecimal(detail.getDetailAmount()).add(new BigDecimal(detail.getTaxAmount())); zDatas.add(ZData.builder() .ZBHSJE(detail.getDetailAmount()) @@ -312,14 +330,14 @@ public class ImageSubmitServiceImpl implements ImageSubmitService { * @param taxRate * @return 去掉%的小数 */ - public BigDecimal getTaxRate(String taxRate) { + public static BigDecimal getTaxRate(String taxRate) { if (StringUtils.isBlank(taxRate) || Constant.ZERO_TAXRATE_VALUE.contains(taxRate)) { taxRate = "0"; } else { taxRate = taxRate.replace("%", ""); // 判断是不是数字 不是数字的就给0 if (!isNumeric(taxRate)) { - taxRate = "0.00"; + taxRate = "0"; } else { // 不知道库里存的是13% 还是0.13 所以加一个判断 if (new BigDecimal(taxRate).compareTo(BigDecimal.ONE) >= 0) { @@ -334,17 +352,21 @@ public class ImageSubmitServiceImpl implements ImageSubmitService { } public static boolean isNumeric(String str){ - for (int i = str.length();--i>=0;){ - if (!Character.isDigit(str.charAt(i))){ - return false; - } + try { + Double.parseDouble(str); + return true; + } catch (NumberFormatException e) { + return false; } - return true; } public static void main(String[] args) { - BigDecimal a = new BigDecimal(13); - System.out.println(a.stripTrailingZeros().toPlainString()); + BigDecimal a = new BigDecimal(0.13); + String tax = a.multiply(new BigDecimal(100)).setScale(4,BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString(); + System.out.println(StringUtils.isNumeric("13.00")); + System.out.println(isNumeric("1e1")); + System.out.println(getTaxRate("13.00")); + System.out.println(TaxRateCodeEnum.getCode(tax)); } }