销项发票提交

release
王琦 2 years ago
parent 85a3d65edb
commit 99074df80c
  1. 3
      dxhy-erp/src/main/java/com/dxhy/erp/entity/sdny/SdnyTDxRecordInvoiceDetailSales.java
  2. 56
      dxhy-erp/src/main/java/com/dxhy/erp/enums/TaxRateCodeEnum.java
  3. 88
      dxhy-erp/src/main/java/com/dxhy/erp/service/impl/ImageSubmitServiceImpl.java
  4. 9
      dxhy-erp/src/main/java/com/dxhy/erp/utils/Constant.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;
}

@ -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;
}
}

@ -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<String> 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<ZData> 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;
}
}

@ -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<String> ZERO_TAXRATE_VALUE = Arrays.asList("*","**","***","免税","不征税");
}

Loading…
Cancel
Save