This commit is contained in:
linfso 2025-02-25 07:17:00 +08:00
parent 8c00beae3f
commit 1482183526

View File

@ -15,6 +15,7 @@ import java.util.Date;
import java.util.List;
import cn.hutool.core.collection.CollectionUtil;
import com.xdadan.erp.common.utils.DateUtils;
import com.xdadan.erp.emis.domain.*;
import com.xdadan.erp.emis.domain.enumtype.EmisBizErrorType;
import com.xdadan.erp.emis.domain.exception.EmisBizError;
@ -56,6 +57,9 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService
@Autowired
protected EmisWaybillMapper emisWaybillMapper;
@Autowired
private EmisExchangeRateMapper emisExchangeRateMapper;
/**
* 查询TMS运输成本账单
* @param id TMS运输成本账单主键
@ -120,19 +124,53 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService
// 总票数
emisTmsCostFee.setSendPieceSum(emisTmsCostFee.getBillRelList().size());
emisTmsCostFeeMapper.insertEmisTmsCostFee(emisTmsCostFee);
BigDecimal totalCostCnyFee=BigDecimal.ZERO;
BigDecimal totalCostUsdFee=BigDecimal.ZERO;
// 插入关联费用,只保存费用大于0的费用
for (EmisTmsCostFeeFeeitem feeItem:emisTmsCostFee.getFeeItemList()) {
if(
(feeItem.getFee()!=null && feeItem.getFee().compareTo(BigDecimal.ZERO)>0)
|| (feeItem.getPrice()!=null && feeItem.getPrice().compareTo(BigDecimal.ZERO)>0)
) {
// 币种进行换算
if(!"CNY".equals(feeItem.getCurrency())){
Date calcDate = new Date();
if(calcDate==null){
calcDate= new Date();
}
EmisExchangeRate exchangeRate= emisExchangeRateMapper.getValidExchangeRate(feeItem.getCurrency(), "CNY", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,calcDate));
if(exchangeRate!=null){
BigDecimal cnyRealFee = feeItem.getFee().multiply( BigDecimal.valueOf( Double.valueOf(exchangeRate.getRate()) ) );
String feeItemRemark = "汇率:"+exchangeRate.getRate()+","+ cnyRealFee.stripTrailingZeros().toPlainString();
feeItem.setRemark(feeItemRemark);
feeItem.setCnyFee(cnyRealFee);
}else{
BigDecimal cnyRealFee = feeItem.getFee();
String feeItemRemark = "汇率:0.0,"+ cnyRealFee.stripTrailingZeros().toPlainString();
feeItem.setRemark(feeItemRemark);
feeItem.setCnyFee(cnyRealFee);
}
totalCostUsdFee=totalCostUsdFee.add(feeItem.getFee());
}else{
feeItem.setCnyFee(feeItem.getFee());
totalCostCnyFee=totalCostCnyFee.add(feeItem.getFee());
}
feeItem.setId(null);
feeItem.setCostNo(costNo);
emisTmsCostFeeFeeitemMapper.insertEmisTmsCostFeeFeeitem(feeItem);
}
}
//
emisTmsCostFeeMapper.insertEmisTmsCostFee(emisTmsCostFee);
// 计算分摊费用
// reCalcSplitCostFee(costNo);
@ -232,7 +270,7 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService
else if ("3".equals(oldCostFee.getSplitType())) {
splitRate = BigDecimal.valueOf(1.0D / (double) sendPieceSum);
}
splitCostFee = feeItem.getFee().multiply(splitRate);
splitCostFee = feeItem.getCnyFee().multiply(splitRate);
splitItem.setCostFee(splitCostFee);
splitItem.setBillWeight(billCodeItem.getWaybillDetail().getBillWeight());
@ -359,6 +397,10 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService
// 删除旧的费用
emisTmsCostFeeFeeitemMapper.deleteEmisTmsCostFeeFeeitemByCostNo(emisTmsCostFee.getCostNo());
BigDecimal totalCostCnyFee=BigDecimal.ZERO;
BigDecimal totalCostUsdFee=BigDecimal.ZERO;
// 插入关联费用
for (EmisTmsCostFeeFeeitem feeItem:emisTmsCostFee.getFeeItemList()
) {
@ -366,6 +408,35 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService
(feeItem.getFee()!=null && feeItem.getFee().compareTo(BigDecimal.ZERO)>0)
|| (feeItem.getPrice()!=null && feeItem.getPrice().compareTo(BigDecimal.ZERO)>0)
) {
// 币种进行换算
if(!"CNY".equals(feeItem.getCurrency())){
Date calcDate = new Date();
if(calcDate==null){
calcDate= new Date();
}
EmisExchangeRate exchangeRate= emisExchangeRateMapper.getValidExchangeRate(feeItem.getCurrency(), "CNY", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,calcDate));
if(exchangeRate!=null){
BigDecimal cnyRealFee = feeItem.getFee().multiply( BigDecimal.valueOf( Double.valueOf(exchangeRate.getRate()) ) );
String feeItemRemark = "汇率:"+exchangeRate.getRate()+","+ cnyRealFee.stripTrailingZeros().toPlainString();
feeItem.setRemark(feeItemRemark);
feeItem.setCnyFee(cnyRealFee);
}else{
BigDecimal cnyRealFee = feeItem.getFee();
String feeItemRemark = "汇率:0.0,"+ cnyRealFee.stripTrailingZeros().toPlainString();
feeItem.setRemark(feeItemRemark);
feeItem.setCnyFee(cnyRealFee);
}
totalCostUsdFee=totalCostUsdFee.add(feeItem.getFee());
}else{
feeItem.setCnyFee(feeItem.getFee());
totalCostCnyFee=totalCostCnyFee.add(feeItem.getFee());
}
feeItem.setId(null);
feeItem.setCostNo(costNo);
emisTmsCostFeeFeeitemMapper.insertEmisTmsCostFeeFeeitem(feeItem);
@ -374,6 +445,8 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService
// 设置为未计算
emisTmsCostFee.setBlHasCalc("0");
emisTmsCostFee.setCostFee(totalCostCnyFee);
emisTmsCostFee.setUsdCostFee(totalCostUsdFee);
emisTmsCostFeeMapper.updateEmisTmsCostFee(emisTmsCostFee);
// 计算分摊费用