|
@@ -2,9 +2,11 @@ package com.sckw.report.service;
|
|
|
|
|
|
|
|
import com.sckw.core.common.enums.NumberConstant;
|
|
import com.sckw.core.common.enums.NumberConstant;
|
|
|
import com.sckw.core.common.enums.enums.DictTypeEnum;
|
|
import com.sckw.core.common.enums.enums.DictTypeEnum;
|
|
|
|
|
+import com.sckw.core.model.constant.Global;
|
|
|
import com.sckw.core.model.enums.CarWaybillEnum;
|
|
import com.sckw.core.model.enums.CarWaybillEnum;
|
|
|
import com.sckw.core.model.enums.CarWaybillQueryEnum;
|
|
import com.sckw.core.model.enums.CarWaybillQueryEnum;
|
|
|
import com.sckw.core.model.enums.LogisticsOrderEnum;
|
|
import com.sckw.core.model.enums.LogisticsOrderEnum;
|
|
|
|
|
+import com.sckw.core.model.enums.TaxRateTypeEnum;
|
|
|
import com.sckw.core.model.page.PageResult;
|
|
import com.sckw.core.model.page.PageResult;
|
|
|
import com.sckw.core.utils.BeanUtils;
|
|
import com.sckw.core.utils.BeanUtils;
|
|
|
import com.sckw.core.utils.CollectionUtils;
|
|
import com.sckw.core.utils.CollectionUtils;
|
|
@@ -550,28 +552,13 @@ public class KwTransportService {
|
|
|
BigDecimal.valueOf(0) : waybillOrder.getDeficitAmount();
|
|
BigDecimal.valueOf(0) : waybillOrder.getDeficitAmount();
|
|
|
vo.setDeficitAmount(String.valueOf(deficitAmount));
|
|
vo.setDeficitAmount(String.valueOf(deficitAmount));
|
|
|
// 存在装卸货差时 计算扣亏量
|
|
// 存在装卸货差时 计算扣亏量
|
|
|
- BigDecimal lossAmount = BigDecimal.valueOf(0);
|
|
|
|
|
- BigDecimal loss = waybillOrder.getLoss() == null ? new BigDecimal("0.00") : waybillOrder.getLoss();
|
|
|
|
|
- if (deficitAmount.compareTo(new BigDecimal("0.00")) > 0 && loss.compareTo(new BigDecimal("0.00")) > 0) {
|
|
|
|
|
- String lossUnit = waybillOrder.getLossUnit();
|
|
|
|
|
- Map<String, SysDictResDto> LossUnitType = remoteSystemService.queryDictMapByType(DictTypeEnum.TAX_RATE_TYPE.getType());
|
|
|
|
|
- SysDictResDto sysDictRes = LossUnitType.get(lossUnit);
|
|
|
|
|
- if (sysDictRes != null) {
|
|
|
|
|
- if (sysDictRes.getLabel().equals("%")) {
|
|
|
|
|
- // 百分比
|
|
|
|
|
- lossAmount = loss.multiply(waybillOrder.getLoadAmount()).divide(BigDecimal.valueOf(100));
|
|
|
|
|
- } else {
|
|
|
|
|
- // 千分比
|
|
|
|
|
- lossAmount = loss.multiply(waybillOrder.getLoadAmount()).divide(BigDecimal.valueOf(1000));
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- lossAmount = deficitAmount.subtract(lossAmount);
|
|
|
|
|
- if (lossAmount.compareTo(new BigDecimal("0.00")) < 0) {
|
|
|
|
|
- lossAmount = new BigDecimal("0.00");
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ BigDecimal deficitLossAmount = deficitLossAmount(
|
|
|
|
|
+ waybillOrder.getLoadAmount(),
|
|
|
|
|
+ waybillOrder.getDeficitAmount(),
|
|
|
|
|
+ waybillOrder.getLoss(),
|
|
|
|
|
+ waybillOrder.getLossUnit());
|
|
|
// 实际扣亏量
|
|
// 实际扣亏量
|
|
|
- vo.setDeficitRealAmount(lossAmount.setScale(2, RoundingMode.HALF_UP).toString());
|
|
|
|
|
|
|
+ vo.setDeficitRealAmount(deficitLossAmount.setScale(2, RoundingMode.HALF_UP).toString());
|
|
|
vo.setGoodsPriceUnit(waybillOrder.getGoodsPriceUnit() == null ?
|
|
vo.setGoodsPriceUnit(waybillOrder.getGoodsPriceUnit() == null ?
|
|
|
null : String.valueOf(waybillOrder.getGoodsPriceUnit()));
|
|
null : String.valueOf(waybillOrder.getGoodsPriceUnit()));
|
|
|
returnList.add(vo);
|
|
returnList.add(vo);
|
|
@@ -782,4 +769,45 @@ public class KwTransportService {
|
|
|
});
|
|
});
|
|
|
return list;
|
|
return list;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * @param loadAmount 装货量
|
|
|
|
|
+ * @param deficitAmount 亏吨量
|
|
|
|
|
+ * @param loss 合理损耗
|
|
|
|
|
+ * @desc 计算扣亏量
|
|
|
|
|
+ * @author zk
|
|
|
|
|
+ * @date 2023/7/27
|
|
|
|
|
+ **/
|
|
|
|
|
+ public BigDecimal deficitLossAmount(BigDecimal loadAmount, BigDecimal deficitAmount, BigDecimal loss, String lossUnit) {
|
|
|
|
|
+ if (loadAmount == null || deficitAmount == null) {
|
|
|
|
|
+ return new BigDecimal(Global.AMOUNT);
|
|
|
|
|
+ }
|
|
|
|
|
+ //亏吨<=0
|
|
|
|
|
+ if (deficitAmount.compareTo(new BigDecimal(Global.AMOUNT)) <= 0) {
|
|
|
|
|
+ return new BigDecimal(Global.AMOUNT);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isBlank(lossUnit)) {
|
|
|
|
|
+ lossUnit = String.valueOf(NumberConstant.ZERO);
|
|
|
|
|
+ }
|
|
|
|
|
+ //承运订单亏吨扣款=(承运订单亏吨量 -(承运订单装货量 * 承运订单合理损耗))* 扣亏货值
|
|
|
|
|
+ loss = loss == null ? new BigDecimal(Global.AMOUNT) : loss;
|
|
|
|
|
+ if (loss.doubleValue() > 0 && StringUtils.isNotBlank(lossUnit)) {
|
|
|
|
|
+ if (lossUnit.equals(String.valueOf(TaxRateTypeEnum.PERCENT.getCode()))) {
|
|
|
|
|
+ loss = loss.divide(new BigDecimal(TaxRateTypeEnum.PERCENT.getValue()));
|
|
|
|
|
+ }
|
|
|
|
|
+ if (lossUnit.equals(String.valueOf(TaxRateTypeEnum.MILLIMETER.getCode()))) {
|
|
|
|
|
+ loss = loss.divide(new BigDecimal(TaxRateTypeEnum.MILLIMETER.getValue()));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //扣亏量=亏吨量【合理损耗占比为空或为0】
|
|
|
|
|
+ if (loss.doubleValue() == Global.NUMERICAL_ZERO) {
|
|
|
|
|
+ return deficitAmount;
|
|
|
|
|
+ }
|
|
|
|
|
+ //扣亏量=亏吨量-合理损耗值【要求大于0,如果小于0则扣亏货量取0】
|
|
|
|
|
+ BigDecimal deficitLossAmount = deficitAmount.subtract(loadAmount.multiply(loss).setScale(2, RoundingMode.HALF_UP));
|
|
|
|
|
+ if (deficitLossAmount.doubleValue() <= 0) {
|
|
|
|
|
+ return new BigDecimal(Global.AMOUNT);
|
|
|
|
|
+ }
|
|
|
|
|
+ return deficitLossAmount;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|