From 99074df80cfd8857e17d2dc14f320571deb625ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=90=A6?= Date: Tue, 12 Sep 2023 15:18:28 +0800 Subject: [PATCH] =?UTF-8?q?=E9=94=80=E9=A1=B9=E5=8F=91=E7=A5=A8=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sdny/SdnyTDxRecordInvoiceDetailSales.java | 3 + .../com/dxhy/erp/enums/TaxRateCodeEnum.java | 56 ++++++++++++ .../service/impl/ImageSubmitServiceImpl.java | 88 +++++++++++++++++-- .../java/com/dxhy/erp/utils/Constant.java | 9 ++ 4 files changed, 151 insertions(+), 5 deletions(-) create mode 100644 dxhy-erp/src/main/java/com/dxhy/erp/enums/TaxRateCodeEnum.java diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/SdnyTDxRecordInvoiceDetailSales.java b/dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/SdnyTDxRecordInvoiceDetailSales.java index 05f2e9b3..da2c6a48 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/SdnyTDxRecordInvoiceDetailSales.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/SdnyTDxRecordInvoiceDetailSales.java @@ -1,6 +1,7 @@ package com.dxhy.erp.entity.sdny; import java.io.Serializable; +import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -136,5 +137,7 @@ public class SdnyTDxRecordInvoiceDetailSales implements Serializable { */ private String taxCode; + private BigDecimal taxRateOfSap; + private static final long serialVersionUID = 1L; } \ No newline at end of file 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 new file mode 100644 index 00000000..6f589164 --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/enums/TaxRateCodeEnum.java @@ -0,0 +1,56 @@ +package com.dxhy.erp.enums; + +import com.dxhy.common.vo.Tax; + +/** + * 税率 税码关系表 + */ +public enum TaxRateCodeEnum { + X0("0%","X0"), + X1("16%","X1"), + X2("13%","X2"), + X3("10%","X3"), + X4("9%","X4"), + X5("6%","X5"), + X6("5%","X6"), + X7("3%","X7"), + X8("2%","X8"), + X9("1%","X9"), + + ; + + + private String taxRate; + + private String code; + + public static String getCode(String taxRate) { + for (TaxRateCodeEnum codeEnum : TaxRateCodeEnum.values()) { + if (codeEnum.getTaxRate().equals(taxRate)) { + return codeEnum.getCode(); + } + } + return X0.getCode(); + } + + TaxRateCodeEnum(String taxRate, String code) { + this.taxRate = taxRate; + this.code = code; + } + + public String getTaxRate() { + return taxRate; + } + + public void setTaxRate(String taxRate) { + this.taxRate = taxRate; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} 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 a015b02a..65e9a498 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 @@ -11,21 +11,26 @@ import com.dxhy.common.utils.DateUtils; import com.dxhy.common.utils.R; import com.dxhy.erp.dao.*; import com.dxhy.erp.entity.sdny.*; +import com.dxhy.erp.enums.TaxRateCodeEnum; import com.dxhy.erp.service.ImageSubmitService; +import com.dxhy.erp.service.SNPushCheckRecordService; import com.dxhy.erp.service.SdnyTDxRecordInvoiceDetailSalesService; import com.dxhy.erp.utils.Constant; import com.dxhy.erp.utils.JsonUtils; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @Service @Transactional(rollbackFor = Exception.class) +@Slf4j public class ImageSubmitServiceImpl implements ImageSubmitService { @Autowired @@ -44,6 +49,9 @@ public class ImageSubmitServiceImpl implements ImageSubmitService { @Autowired private SdnyTDxRecordInvoiceDetailSalesService sdnyTDxRecordInvoiceDetailSalesService; + @Autowired + private SNPushCheckRecordService snPushCheckRecordService; + @Override public R salesInvoiceSubmit(SNRequestObject params) { List uuidList = new ArrayList<>(); @@ -130,7 +138,7 @@ public class ImageSubmitServiceImpl implements ImageSubmitService { salesInvoiceList.add(saleRecordInvoice); }); - return R.success(); + return pushSap(salesInvoiceList, params); } @Override @@ -204,11 +212,47 @@ public class ImageSubmitServiceImpl implements ImageSubmitService { zdata.setFPYXBH(params.getImageId()); zdata.setIMG_ID(params.getImageId()); zdata.setSORT(String.valueOf(item.getSort())); - - BigDecimal taxRate = BigDecimal.ZERO; + // 处理明细行 + List zDatas=new ArrayList<>(); for (SdnyTDxRecordInvoiceDetailSales detail : item.getDetailList()) { - + detail.setTaxRateOfSap(getTaxRate(detail.getTaxRate())); + detail.setTaxRate(detail.getTaxRateOfSap().multiply(new BigDecimal(100)).toPlainString()+"%"); + BigDecimal totalAmount = new BigDecimal(detail.getDetailAmount()).add(new BigDecimal(detail.getTaxAmount())); + zDatas.add(ZData.builder() + .ZBHSJE(detail.getDetailAmount()) + .ZBHSJE_DIF("0") + .ZBHSJE_Y(detail.getDetailAmount()) + .ZFPDM(item.getInvoiceCode()) + .ZFPHM(item.getInvoiceNo()) + .ZFPHH(detail.getDetailNo()) + .ZGGXH(Optional.ofNullable(detail.getModel()).orElse("").replaceAll("\\.{3}|/|<|>", "")) //去掉包含...和/、<、>的特殊字符 + .ZHSJE(totalAmount.toPlainString()) + .ZHSJE_Y(totalAmount.toPlainString()) + .ZZSE_Y(detail.getTaxAmount()) + .ZSLDW(detail.getUnit()) + .ZTAX(detail.getTaxRate()) + .ZZDJ(detail.getUnitPrice()) + .ZZDJFP(detail.getUnitPrice()) + .ZZSL(detail.getNum()) + .MANDT(params.getClientNum()) + .INVOICEDATE(zdata.getZKPRQ()) + .INVOICETYPE(invoiceType) + .ZHWMC(detail.getGoodsName()) + .ZTID(zdata.getZTID()) + .ZSM(TaxRateCodeEnum.getCode(detail.getTaxRate())) + .build()); } + String taxRate = ""; + if (item.getDetailList().size() > 0) { + taxRate = item.getDetailList().stream().max(Comparator.comparing(SdnyTDxRecordInvoiceDetailSales::getTaxRateOfSap)).get().getTaxRate(); + } + zdata.setIT_ITEM(zDatas); + + //税率 + zdata.setZTAX(taxRate); + //税码 + zdata.setZSM(TaxRateCodeEnum.getCode(taxRate)); + zDataList.add(zdata); }); S4Request request = S4Request.builder() .SYSID("FPXT") @@ -216,7 +260,13 @@ public class ImageSubmitServiceImpl implements ImageSubmitService { .BSKEY(params.getBillNum()) .ZORG(params.getCompCode()) .ZFILED4(params.getImageId()) + .ZDATA(JSONObject.toJSONString(zDataList)) .ZFILED5(params.getClientNum()).build(); + JSONObject param = new JSONObject(); + param.put("IS_INPUT", request); + //推送到SAP + log.info("推送山能数据:{}", JSONObject.toJSONString(param)); + String result = snPushCheckRecordService.pushCheckResultToSAP(param.toJSONString()); return R.success(); } @@ -224,9 +274,37 @@ public class ImageSubmitServiceImpl implements ImageSubmitService { /** * 处理税率 * @param taxRate - * @return + * @return 去掉%的小数 */ public 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"; + } else { + // 不知道库里存的是13% 还是0.13 所以加一个判断 + if (new BigDecimal(taxRate).compareTo(BigDecimal.ONE) >= 0) { + // 存的是整数 13/1/1.5等 + taxRate = new BigDecimal(taxRate).divide(new BigDecimal(100),2,BigDecimal.ROUND_HALF_UP).toPlainString(); + } else { + // 存的是小数 0.13 0.015等就不处理了 直接返回 + } + } + } + return new BigDecimal(taxRate); + } + + public static boolean isNumeric(String str){ + for (int i = str.length();--i>=0;){ + if (!Character.isDigit(str.charAt(i))){ + return false; + } + } + return true; } + } diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/utils/Constant.java b/dxhy-erp/src/main/java/com/dxhy/erp/utils/Constant.java index 723b646c..0c1db6ab 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/utils/Constant.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/utils/Constant.java @@ -1,5 +1,8 @@ package com.dxhy.erp.utils; +import java.util.Arrays; +import java.util.List; + /** * 常量定义类 * @@ -306,4 +309,10 @@ public class Constant { * 发票类型代码-海关缴款书 */ public static final String TYPE_CODE_17 = "17"; + + /** + * 可转为零税率的字符 + */ + public static final List ZERO_TAXRATE_VALUE = Arrays.asList("*","**","***","免税","不征税"); + }