|
|
@@ -29,7 +29,6 @@ import org.springblade.los.basic.business.entity.BusinessType;
|
|
|
import org.springblade.los.basic.business.service.IBusinessTypeService;
|
|
|
import org.springblade.los.billno.entity.BusinessBillNo;
|
|
|
import org.springblade.los.billno.service.IBusinessBillNoService;
|
|
|
-import org.springblade.los.business.sea.entity.Bills;
|
|
|
import org.springblade.los.check.dto.LosAuditProecessDTO;
|
|
|
import org.springblade.los.check.entity.LosAuditPathsActs;
|
|
|
import org.springblade.los.check.entity.LosAuditPathsLevels;
|
|
|
@@ -37,8 +36,6 @@ import org.springblade.los.check.service.IAuditPathsActsService;
|
|
|
import org.springblade.los.check.service.IAuditPathsLevelsService;
|
|
|
import org.springblade.los.check.service.IAuditProecessService;
|
|
|
import org.springblade.los.excel.RouteCostProfitExcel;
|
|
|
-import org.springblade.los.finance.fee.entity.FeeCenter;
|
|
|
-import org.springblade.los.finance.fee.entity.FinAccBills;
|
|
|
import org.springblade.los.logistics.route.entity.RouteCost;
|
|
|
import org.springblade.los.logistics.route.entity.RouteCostFee;
|
|
|
import org.springblade.los.logistics.route.entity.RouteCostItem;
|
|
|
@@ -48,7 +45,6 @@ import org.springblade.los.logistics.route.service.IRouteCostItemService;
|
|
|
import org.springblade.los.logistics.route.service.IRouteCostService;
|
|
|
import org.springblade.los.logistics.route.vo.RouteCostVO;
|
|
|
import org.springblade.system.entity.Dept;
|
|
|
-import org.springblade.system.feign.ISysClient;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
|
|
@@ -72,8 +68,6 @@ import java.util.stream.Collectors;
|
|
|
public class RouteCostServiceImpl extends ServiceImpl<RouteCostMapper, RouteCost> implements IRouteCostService {
|
|
|
|
|
|
|
|
|
- private final ISysClient sysClient;
|
|
|
-
|
|
|
private final IDeptUtils deptUtils;
|
|
|
|
|
|
private final IRouteCostFeeService routeCostFeeService;
|
|
|
@@ -169,42 +163,12 @@ public class RouteCostServiceImpl extends ServiceImpl<RouteCostMapper, RouteCost
|
|
|
int days = routeCost.getNavigateDay() + routeCost.getExistStationDay();
|
|
|
List<RouteCostFee> costFeeList = routeCost.getCostFeeList();
|
|
|
for (RouteCostItem routeCostItem : routeCost.getCostItemList()) {
|
|
|
- if (!costFeeList.isEmpty()) {
|
|
|
- //POL杂费成本
|
|
|
- BigDecimal polAmount = costFeeList.stream().filter(e -> e.getBoxType().equals(routeCostItem.getBoxType())
|
|
|
- && "POL".equals(e.getBusType())).map(RouteCostFee::getCostPrice).filter(Objects::nonNull)
|
|
|
- .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- if (new BigDecimal("0.00").compareTo(polAmount) != 0) {
|
|
|
- routeCostItem.setPolCost(polAmount.divide(routeCostItem.getExrate(), 4, RoundingMode.HALF_UP));
|
|
|
- } else {
|
|
|
- routeCostItem.setPolCost(new BigDecimal("0.00"));
|
|
|
- }
|
|
|
- //POD杂费成本
|
|
|
- BigDecimal podAmount = costFeeList.stream().filter(e -> e.getBoxType().equals(routeCostItem.getBoxType())
|
|
|
- && "POD".equals(e.getBusType())).map(RouteCostFee::getCostPrice).filter(Objects::nonNull)
|
|
|
- .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- if (new BigDecimal("0.00").compareTo(podAmount) != 0) {
|
|
|
- routeCostItem.setPodCost(podAmount.divide(routeCostItem.getExrate(), 4, RoundingMode.HALF_UP));
|
|
|
- } else {
|
|
|
- routeCostItem.setPodCost(new BigDecimal("0.00"));
|
|
|
- }
|
|
|
- //POT杂费成本
|
|
|
- BigDecimal potAmount = costFeeList.stream().filter(e -> e.getBoxType().equals(routeCostItem.getBoxType())
|
|
|
- && "POT".equals(e.getBusType())).map(RouteCostFee::getCostPrice).filter(Objects::nonNull)
|
|
|
- .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- if (new BigDecimal("0.00").compareTo(potAmount) != 0) {
|
|
|
- routeCostItem.setPotCost(potAmount.divide(routeCostItem.getExrate(), 4, RoundingMode.HALF_UP));
|
|
|
- } else {
|
|
|
- routeCostItem.setPotCost(new BigDecimal("0.00"));
|
|
|
- }
|
|
|
- } else {
|
|
|
- //POL杂费成本
|
|
|
- routeCostItem.setPolCost(new BigDecimal("0.00"));
|
|
|
- //POD杂费成本
|
|
|
- routeCostItem.setPodCost(new BigDecimal("0.00"));
|
|
|
- //POT杂费成本
|
|
|
- routeCostItem.setPotCost(new BigDecimal("0.00"));
|
|
|
- }
|
|
|
+ //POL杂费成本
|
|
|
+ routeCostItem.setPolCost(computationalCost(costFeeList, "POL", routeCostItem.getBoxType(), routeCostItem.getExrate()));
|
|
|
+ //POD杂费成本
|
|
|
+ routeCostItem.setPodCost(computationalCost(costFeeList, "POD", routeCostItem.getBoxType(), routeCostItem.getExrate()));
|
|
|
+ //POT杂费成本
|
|
|
+ routeCostItem.setPotCost(computationalCost(costFeeList, "POT", routeCostItem.getBoxType(), routeCostItem.getExrate()));
|
|
|
//用箱成本
|
|
|
if (0 != days && ObjectUtils.isNotNull(routeCostItem.getBoxCost()) &&
|
|
|
routeCostItem.getBoxCost().compareTo(new BigDecimal("0.00")) != 0) {
|
|
|
@@ -230,6 +194,12 @@ public class RouteCostServiceImpl extends ServiceImpl<RouteCostMapper, RouteCost
|
|
|
}
|
|
|
}
|
|
|
routeCostItemService.saveOrUpdateBatch(routeCost.getCostItemList());
|
|
|
+ routeCost.setProfit20(totalProfit(routeCost.getCostItemList(), "20"));
|
|
|
+ routeCost.setProfit40(totalProfit(routeCost.getCostItemList(), "40"));
|
|
|
+ routeCost.setProfitHc(totalProfit(routeCost.getCostItemList(), "40HC"));
|
|
|
+ routeCost.setOtherProfit(totalProfit(routeCost.getCostItemList(), "other"));
|
|
|
+ routeCost.setTotalProfit(routeCost.getProfit20().add(routeCost.getProfit40()).add(routeCost.getProfitHc()).add(routeCost.getOtherProfit()));
|
|
|
+ this.saveOrUpdate(routeCost);
|
|
|
}
|
|
|
return R.data(routeCost);
|
|
|
}
|
|
|
@@ -282,7 +252,7 @@ public class RouteCostServiceImpl extends ServiceImpl<RouteCostMapper, RouteCost
|
|
|
item.setUpdateUserName(null);
|
|
|
}
|
|
|
detail.setCostItemList(costItemList.isEmpty() ? new ArrayList<>() : costItemList);
|
|
|
- return null;
|
|
|
+ return detail;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -396,7 +366,7 @@ public class RouteCostServiceImpl extends ServiceImpl<RouteCostMapper, RouteCost
|
|
|
throw new SecurityException("操作失败,请联系管理员");
|
|
|
}
|
|
|
}
|
|
|
- declare.setStatus("请核中");
|
|
|
+ declare.setStatus("审核提交");
|
|
|
baseMapper.updateById(declare);
|
|
|
return declare;
|
|
|
}
|
|
|
@@ -451,12 +421,273 @@ public class RouteCostServiceImpl extends ServiceImpl<RouteCostMapper, RouteCost
|
|
|
|
|
|
@Override
|
|
|
public IPage<RouteCostProfitExcel> listRouteCostProfit(IPage<RouteCostProfitExcel> page, RouteCostProfitExcel routeCost) {
|
|
|
+ routeCost.setTenantId(AuthUtil.getTenantId());
|
|
|
return page.setRecords(baseMapper.listRouteCostProfit(page, routeCost));
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public List<RouteCostProfitExcel> routeCostProfitListAll(RouteCostProfitExcel routeCost) {
|
|
|
+ routeCost.setTenantId(AuthUtil.getTenantId());
|
|
|
return baseMapper.routeCostProfitListAll(routeCost);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R submitFeeList(List<RouteCostFee> routeCostFeeList) {
|
|
|
+ if (!routeCostFeeList.isEmpty()) {
|
|
|
+ RouteCost routeCost = baseMapper.selectById(routeCostFeeList.get(0).getPid());
|
|
|
+ List<RouteCostItem> routeCostItemList = routeCostItemService.list(new LambdaQueryWrapper<RouteCostItem>()
|
|
|
+ .eq(RouteCostItem::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(RouteCostItem::getIsDeleted, 0)
|
|
|
+ .eq(RouteCostItem::getPid, routeCostFeeList.get(0).getPid()));
|
|
|
+ for (RouteCostFee routeCostFee : routeCostFeeList) {
|
|
|
+ if (routeCostFee.getId() == null) {
|
|
|
+ routeCostFee.setPid(routeCost.getId());
|
|
|
+ routeCostFee.setCreateTime(new Date());
|
|
|
+ routeCostFee.setCreateUser(AuthUtil.getUserId());
|
|
|
+ routeCostFee.setCreateUserName(AuthUtil.getUserName());
|
|
|
+ } else {
|
|
|
+ routeCostFee.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ routeCostFee.setUpdateTime(new Date());
|
|
|
+ routeCostFee.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ routeCostFeeService.saveOrUpdateBatch(routeCostFeeList);
|
|
|
+ if (ObjectUtils.isNotNull(routeCostItemList)) {
|
|
|
+ int days = routeCost.getNavigateDay() + routeCost.getExistStationDay();
|
|
|
+ for (RouteCostItem routeCostItem : routeCostItemList) {
|
|
|
+ //POL杂费成本
|
|
|
+ routeCostItem.setPolCost(computationalCost(routeCostFeeList, "POL", routeCostItem.getBoxType(), routeCostItem.getExrate()));
|
|
|
+ //POD杂费成本
|
|
|
+ routeCostItem.setPodCost(computationalCost(routeCostFeeList, "POD", routeCostItem.getBoxType(), routeCostItem.getExrate()));
|
|
|
+ //POT杂费成本
|
|
|
+ routeCostItem.setPotCost(computationalCost(routeCostFeeList, "POT", routeCostItem.getBoxType(), routeCostItem.getExrate()));
|
|
|
+ //用箱成本
|
|
|
+ if (0 != days && ObjectUtils.isNotNull(routeCostItem.getBoxCost()) &&
|
|
|
+ routeCostItem.getBoxCost().compareTo(new BigDecimal("0.00")) != 0) {
|
|
|
+ BigDecimal boxCost = new BigDecimal(days).multiply(routeCostItem.getBoxCost());
|
|
|
+ routeCostItem.setUseBoxCost(boxCost.divide(routeCostItem.getExrate(), 4, RoundingMode.HALF_UP));
|
|
|
+ } else {
|
|
|
+ routeCostItem.setUseBoxCost(new BigDecimal("0.00"));
|
|
|
+ }
|
|
|
+ // 成本价 = 海运费+用箱成本+pol杂费+pod成本
|
|
|
+ routeCostItem.setCostPrice(routeCostItem.getOceanFreight().add(routeCostItem.getPodCost()).add(routeCostItem.getPolCost())
|
|
|
+ .add(routeCostItem.getUseBoxCost()));
|
|
|
+ //合计利润
|
|
|
+ routeCostItem.setTotalProfit(routeCostItem.getSalesPrice().subtract(routeCostItem.getCostPrice()));
|
|
|
+ if (routeCostItem.getId() == null) {
|
|
|
+ routeCostItem.setPid(routeCost.getId());
|
|
|
+ routeCostItem.setCreateTime(new Date());
|
|
|
+ routeCostItem.setCreateUser(AuthUtil.getUserId());
|
|
|
+ routeCostItem.setCreateUserName(AuthUtil.getUserName());
|
|
|
+ } else {
|
|
|
+ routeCostItem.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ routeCostItem.setUpdateTime(new Date());
|
|
|
+ routeCostItem.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ routeCostItemService.updateBatchById(routeCostItemList);
|
|
|
+ routeCost.setProfit20(totalProfit(routeCostItemList, "20"));
|
|
|
+ routeCost.setProfit40(totalProfit(routeCostItemList, "40"));
|
|
|
+ routeCost.setProfitHc(totalProfit(routeCostItemList, "40HC"));
|
|
|
+ routeCost.setOtherProfit(totalProfit(routeCostItemList, "other"));
|
|
|
+ routeCost.setTotalProfit(routeCost.getProfit20().add(routeCost.getProfit40()).add(routeCost.getProfitHc()).add(routeCost.getOtherProfit()));
|
|
|
+ baseMapper.updateById(routeCost);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return R.data(routeCostFeeList);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R removeFeeList(List<Long> longList) {
|
|
|
+ if (!longList.isEmpty()) {
|
|
|
+ RouteCostFee routeCostFee = routeCostFeeService.getById(longList.get(0));
|
|
|
+ List<RouteCostFee> routeCostFeeList = routeCostFeeService.list(new LambdaQueryWrapper<RouteCostFee>()
|
|
|
+ .eq(RouteCostFee::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(RouteCostFee::getIsDeleted, 0)
|
|
|
+ .eq(RouteCostFee::getPid, routeCostFee.getPid()));
|
|
|
+ List<RouteCostFee> routeCostFeeListNew = routeCostFeeList.stream().filter(e -> !longList.contains(e.getId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ RouteCost routeCost = baseMapper.selectById(routeCostFee.getPid());
|
|
|
+ List<RouteCostItem> routeCostItemList = routeCostItemService.list(new LambdaQueryWrapper<RouteCostItem>()
|
|
|
+ .eq(RouteCostItem::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(RouteCostItem::getIsDeleted, 0)
|
|
|
+ .eq(RouteCostItem::getPid, routeCostFee.getPid()));
|
|
|
+ if (ObjectUtils.isNotNull(routeCostItemList)) {
|
|
|
+ int days = routeCost.getNavigateDay() + routeCost.getExistStationDay();
|
|
|
+ for (RouteCostItem routeCostItem : routeCostItemList) {
|
|
|
+ //POL杂费成本
|
|
|
+ routeCostItem.setPolCost(computationalCost(routeCostFeeList, "POL", routeCostItem.getBoxType(), routeCostItem.getExrate()));
|
|
|
+ //POD杂费成本
|
|
|
+ routeCostItem.setPodCost(computationalCost(routeCostFeeList, "POD", routeCostItem.getBoxType(), routeCostItem.getExrate()));
|
|
|
+ //POT杂费成本
|
|
|
+ routeCostItem.setPotCost(computationalCost(routeCostFeeList, "POT", routeCostItem.getBoxType(), routeCostItem.getExrate()));
|
|
|
+
|
|
|
+ //用箱成本
|
|
|
+ if (0 != days && ObjectUtils.isNotNull(routeCostItem.getBoxCost()) &&
|
|
|
+ routeCostItem.getBoxCost().compareTo(new BigDecimal("0.00")) != 0) {
|
|
|
+ BigDecimal boxCost = new BigDecimal(days).multiply(routeCostItem.getBoxCost());
|
|
|
+ routeCostItem.setUseBoxCost(boxCost.divide(routeCostItem.getExrate(), 4, RoundingMode.HALF_UP));
|
|
|
+ } else {
|
|
|
+ routeCostItem.setUseBoxCost(new BigDecimal("0.00"));
|
|
|
+ }
|
|
|
+ // 成本价 = 海运费+用箱成本+pol杂费+pod成本
|
|
|
+ routeCostItem.setCostPrice(routeCostItem.getOceanFreight().add(routeCostItem.getPodCost()).add(routeCostItem.getPolCost())
|
|
|
+ .add(routeCostItem.getUseBoxCost()));
|
|
|
+ //合计利润
|
|
|
+ routeCostItem.setTotalProfit(routeCostItem.getSalesPrice().subtract(routeCostItem.getCostPrice()));
|
|
|
+ if (routeCostItem.getId() == null) {
|
|
|
+ routeCostItem.setPid(routeCost.getId());
|
|
|
+ routeCostItem.setCreateTime(new Date());
|
|
|
+ routeCostItem.setCreateUser(AuthUtil.getUserId());
|
|
|
+ routeCostItem.setCreateUserName(AuthUtil.getUserName());
|
|
|
+ } else {
|
|
|
+ routeCostItem.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ routeCostItem.setUpdateTime(new Date());
|
|
|
+ routeCostItem.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ routeCostItemService.updateBatchById(routeCostItemList);
|
|
|
+ routeCost.setProfit20(totalProfit(routeCostItemList, "20"));
|
|
|
+ routeCost.setProfit40(totalProfit(routeCostItemList, "40"));
|
|
|
+ routeCost.setProfitHc(totalProfit(routeCostItemList, "40HC"));
|
|
|
+ routeCost.setOtherProfit(totalProfit(routeCostItemList, "other"));
|
|
|
+ routeCost.setTotalProfit(routeCost.getProfit20().add(routeCost.getProfit40()).add(routeCost.getProfitHc()).add(routeCost.getOtherProfit()));
|
|
|
+ baseMapper.updateById(routeCost);
|
|
|
+ }
|
|
|
+ this.removeByIds(longList);
|
|
|
+ }
|
|
|
+ return R.success("操作成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R submitItemList(List<RouteCostItem> routeCostItemList) {
|
|
|
+ if (!routeCostItemList.isEmpty()) {
|
|
|
+ RouteCost routeCost = baseMapper.selectById(routeCostItemList.get(0).getPid());
|
|
|
+ List<RouteCostFee> routeCostFeeList = routeCostFeeService.list(new LambdaQueryWrapper<RouteCostFee>()
|
|
|
+ .eq(RouteCostFee::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(RouteCostFee::getIsDeleted, 0)
|
|
|
+ .eq(RouteCostFee::getPid, routeCostItemList.get(0).getPid()));
|
|
|
+ int days = routeCost.getNavigateDay() + routeCost.getExistStationDay();
|
|
|
+ for (RouteCostItem routeCostItem : routeCostItemList) {
|
|
|
+ //POL杂费成本
|
|
|
+ routeCostItem.setPolCost(computationalCost(routeCostFeeList, "POL", routeCostItem.getBoxType(), routeCostItem.getExrate()));
|
|
|
+ //POD杂费成本
|
|
|
+ routeCostItem.setPodCost(computationalCost(routeCostFeeList, "POD", routeCostItem.getBoxType(), routeCostItem.getExrate()));
|
|
|
+ //POT杂费成本
|
|
|
+ routeCostItem.setPotCost(computationalCost(routeCostFeeList, "POT", routeCostItem.getBoxType(), routeCostItem.getExrate()));
|
|
|
+ //用箱成本
|
|
|
+ if (0 != days && ObjectUtils.isNotNull(routeCostItem.getBoxCost()) &&
|
|
|
+ routeCostItem.getBoxCost().compareTo(new BigDecimal("0.00")) != 0) {
|
|
|
+ BigDecimal boxCost = new BigDecimal(days).multiply(routeCostItem.getBoxCost());
|
|
|
+ routeCostItem.setUseBoxCost(boxCost.divide(routeCostItem.getExrate(), 4, RoundingMode.HALF_UP));
|
|
|
+ } else {
|
|
|
+ routeCostItem.setUseBoxCost(new BigDecimal("0.00"));
|
|
|
+ }
|
|
|
+ // 成本价 = 海运费+用箱成本+pol杂费+pod成本
|
|
|
+ routeCostItem.setCostPrice(routeCostItem.getOceanFreight().add(routeCostItem.getPodCost()).add(routeCostItem.getPolCost())
|
|
|
+ .add(routeCostItem.getUseBoxCost()));
|
|
|
+ //合计利润
|
|
|
+ routeCostItem.setTotalProfit(routeCostItem.getSalesPrice().subtract(routeCostItem.getCostPrice()));
|
|
|
+ if (routeCostItem.getId() == null) {
|
|
|
+ routeCostItem.setPid(routeCost.getId());
|
|
|
+ routeCostItem.setCreateTime(new Date());
|
|
|
+ routeCostItem.setCreateUser(AuthUtil.getUserId());
|
|
|
+ routeCostItem.setCreateUserName(AuthUtil.getUserName());
|
|
|
+ } else {
|
|
|
+ routeCostItem.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ routeCostItem.setUpdateTime(new Date());
|
|
|
+ routeCostItem.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ routeCostItemService.saveOrUpdateBatch(routeCostItemList);
|
|
|
+ routeCost.setProfit20(totalProfit(routeCostItemList, "20"));
|
|
|
+ routeCost.setProfit40(totalProfit(routeCostItemList, "40"));
|
|
|
+ routeCost.setProfitHc(totalProfit(routeCostItemList, "40HC"));
|
|
|
+ routeCost.setOtherProfit(totalProfit(routeCostItemList, "other"));
|
|
|
+ routeCost.setTotalProfit(routeCost.getProfit20().add(routeCost.getProfit40()).add(routeCost.getProfitHc()).add(routeCost.getOtherProfit()));
|
|
|
+ baseMapper.updateById(routeCost);
|
|
|
+ }
|
|
|
+ return R.data(routeCostItemList);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R removeItemList(List<Long> longList) {
|
|
|
+ if (!longList.isEmpty()) {
|
|
|
+ RouteCostItem routeCostItem = routeCostItemService.getById(longList.get(0));
|
|
|
+ List<RouteCostItem> routeCostItemList = routeCostItemService.list(new LambdaQueryWrapper<RouteCostItem>()
|
|
|
+ .eq(RouteCostItem::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(RouteCostItem::getIsDeleted, 0)
|
|
|
+ .eq(RouteCostItem::getPid, routeCostItem.getPid()));
|
|
|
+ List<RouteCostItem> routeCostItems = routeCostItemList.stream().filter(e -> !longList.contains(e.getId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ RouteCost routeCost = baseMapper.selectById(routeCostItem.getPid());
|
|
|
+ if (ObjectUtils.isNotNull(routeCostItems)) {
|
|
|
+ routeCost.setProfit20(totalProfit(routeCostItemList, "20"));
|
|
|
+ routeCost.setProfit40(totalProfit(routeCostItemList, "40"));
|
|
|
+ routeCost.setProfitHc(totalProfit(routeCostItemList, "40HC"));
|
|
|
+ routeCost.setOtherProfit(totalProfit(routeCostItemList, "other"));
|
|
|
+ routeCost.setTotalProfit(routeCost.getProfit20().add(routeCost.getProfit40()).add(routeCost.getProfitHc()).add(routeCost.getOtherProfit()));
|
|
|
+ baseMapper.updateById(routeCost);
|
|
|
+ }
|
|
|
+ routeCostItemService.removeByIds(longList);
|
|
|
+ }
|
|
|
+ return R.success("操作成功");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 合计费用
|
|
|
+ *
|
|
|
+ * @param routeCostFeeList 费用明细
|
|
|
+ * @param type 费用类型
|
|
|
+ * @param boxType 箱型
|
|
|
+ * @param exrate 汇率
|
|
|
+ */
|
|
|
+ public BigDecimal computationalCost(List<RouteCostFee> routeCostFeeList, String type, String boxType, BigDecimal exrate) {
|
|
|
+ BigDecimal amount = new BigDecimal("0.00");
|
|
|
+ if (!routeCostFeeList.isEmpty()) {
|
|
|
+ amount = routeCostFeeList.stream().filter(e -> e.getBoxType().equals(boxType)
|
|
|
+ && type.equals(e.getBusType())).reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getExrate().multiply(y.getCostPrice())), BigDecimal::add);
|
|
|
+ if (new BigDecimal("0.00").compareTo(amount) != 0) {
|
|
|
+ amount = amount.divide(exrate, 4, RoundingMode.HALF_UP);
|
|
|
+ } else {
|
|
|
+ amount = new BigDecimal("0.00");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return amount;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 合计利润
|
|
|
+ *
|
|
|
+ * @param routeCostItemList 箱明细
|
|
|
+ * @param type 箱尺寸
|
|
|
+ */
|
|
|
+ public BigDecimal totalProfit(List<RouteCostItem> routeCostItemList, String type) {
|
|
|
+ BigDecimal profit;
|
|
|
+ if (!routeCostItemList.isEmpty()) {
|
|
|
+ if ("20".equals(type)) {
|
|
|
+ profit = routeCostItemList.stream().filter(e -> e.getBoxType().contains("20"))
|
|
|
+ .map(RouteCostItem::getTotalProfit).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ } else if ("40".equals(type)) {
|
|
|
+ profit = routeCostItemList.stream().filter(e -> e.getBoxType().contains("40") &&
|
|
|
+ !e.getBoxType().equals("40HC")).map(RouteCostItem::getTotalProfit).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ } else if ("40HC".equals(type)) {
|
|
|
+ profit = routeCostItemList.stream().filter(e -> e.getBoxType().contains("40HC"))
|
|
|
+ .map(RouteCostItem::getTotalProfit).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ } else {
|
|
|
+ profit = routeCostItemList.stream().filter(e -> !e.getBoxType().equals("40HC") &&
|
|
|
+ !e.getBoxType().contains("20") && !e.getBoxType().contains("40"))
|
|
|
+ .map(RouteCostItem::getTotalProfit).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ profit = new BigDecimal("0.00");
|
|
|
+ }
|
|
|
+ return profit;
|
|
|
+ }
|
|
|
+
|
|
|
}
|