diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsCostFeeServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsCostFeeServiceImpl.java index 603585d32..fd32e4fd6 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsCostFeeServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsCostFeeServiceImpl.java @@ -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); // 计算分摊费用