Browse Source

费用率

v1.0
15989082884@163.com 2 years ago
parent
commit
ec3555e2f5
  1. 64
      src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsCostSubItem.java
  2. 59
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java

64
src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsCostSubItem.java

@ -98,4 +98,68 @@ public class TbsCostSubItem {
} }
@Data
public static class CostCenterTranStr{
public CostCenterTranStr(String chengBenZhongXin, String chengBenZhongXinId) {
this.chengBenZhongXin = chengBenZhongXin;
this.chengBenZhongXinId = chengBenZhongXinId;
}
private String chengBenZhongXin;
private String chengBenZhongXinId;
//区域预算,预算金额
private String areaBudget;
//目标销量,预估发货金额
private String targetSales;
//目标预算费率,预估费率。targetExpenseRate = areaBudget/targetSales
private String targetExpenseRate;
//目标销量(发货金额)
private String qtdTargetSales;
//目标预算(预算金额)
private String qtdTargetBudget;
//目标费用率(预算金额/预估发货金额)
private String qtdTargetExpenseRate;
//实际销量(发货金额)
private String qtdRealSales;
//实际费用(核销和释放金额)
private String qtdRealCost;
//实际费用率(核销和释放金额/发货金额)
private String qtdRealExpenseRate;
//目标销量
private String ytdTargetSales;
//目标预算
private String ytdTargetBudget;
//目标费用率
private String ytdTargetExpenseRate;
//实际销量
private String ytdRealSales;
//实际费用
private String ytdRealCost;
//实际费用率
private String ytdRealExpenseRate;
//目标销量
private String mtdTargetSales;
//目标预算
private String mtdTargetBudget;
//目标费用率
private String mtdTargetExpenseRate;
//实际销量
private String mtdRealSales;
//实际费用
private String mtdRealCost;
//实际费用率
private String mtdRealExpenseRate;
}
} }

59
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java

@ -264,11 +264,8 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
List<String> subjectNames = tbsActivitySubjects.stream().map(TbsActivitySubject::getSubjectName).distinct().collect(Collectors.toList()); List<String> subjectNames = tbsActivitySubjects.stream().map(TbsActivitySubject::getSubjectName).distinct().collect(Collectors.toList());
List<Object> subList = new ArrayList<>(); List<Object> subList = new ArrayList<>();
//创建子表数据 //创建子表数据
try {
this.buildSubList(result, tbsActivityCenters, subjectNames, subList); this.buildSubList(result, tbsActivityCenters, subjectNames, subList);
} catch (Exception e) {
e.printStackTrace();
}
//创建商品抬头列表 //创建商品抬头列表
List<TbsActivityGoods> tbsActivityGoods = tbsActivityGoodsService.listByCostApplyId(Long.parseLong(id)); List<TbsActivityGoods> tbsActivityGoods = tbsActivityGoodsService.listByCostApplyId(Long.parseLong(id));
Set<String> bands = new HashSet<>(); Set<String> bands = new HashSet<>();
@ -373,21 +370,21 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
private void buildMainData4ROI(TbsCostApply tbsCostApply, Map<String, Object> data) { private void buildMainData4ROI(TbsCostApply tbsCostApply, Map<String, Object> data) {
YtdQtdToOAVo ytdQtdToOAVo = birRoiRateService.buildYtdAndQtdData(tbsCostApply); YtdQtdToOAVo ytdQtdToOAVo = birRoiRateService.buildYtdAndQtdData(tbsCostApply);
data.put("ytdCusExpenseRate",ytdQtdToOAVo.getYtdCustomerPercent()==null? data.put("ytdCusExpenseRate",ytdQtdToOAVo.getYtdCustomerPercent()==null?
BigDecimal.ZERO:BigDecimal.valueOf(ytdQtdToOAVo.getYtdCustomerPercent()).setScale(2, RoundingMode.HALF_UP)); BigDecimal.ZERO:BigDecimal.valueOf(ytdQtdToOAVo.getYtdCustomerPercent()).setScale(2, RoundingMode.HALF_UP).toString());
data.put("ytdEmpExpenseRate",ytdQtdToOAVo.getYtdUserPercent()==null? data.put("ytdEmpExpenseRate",ytdQtdToOAVo.getYtdUserPercent()==null?
BigDecimal.ZERO:BigDecimal.valueOf(ytdQtdToOAVo.getYtdUserPercent()).setScale(2, RoundingMode.HALF_UP)); BigDecimal.ZERO:BigDecimal.valueOf(ytdQtdToOAVo.getYtdUserPercent()).setScale(2, RoundingMode.HALF_UP).toString());
data.put("ytdAdminiExpenseRate",ytdQtdToOAVo.getYtdRegionPercent()==null? data.put("ytdAdminiExpenseRate",ytdQtdToOAVo.getYtdRegionPercent()==null?
BigDecimal.ZERO:BigDecimal.valueOf(ytdQtdToOAVo.getYtdRegionPercent()).setScale(2, RoundingMode.HALF_UP)); BigDecimal.ZERO:BigDecimal.valueOf(ytdQtdToOAVo.getYtdRegionPercent()).setScale(2, RoundingMode.HALF_UP).toString());
data.put("ytdSalesExpenseRate",ytdQtdToOAVo.getYtdRegion2Percent()==null? data.put("ytdSalesExpenseRate",ytdQtdToOAVo.getYtdRegion2Percent()==null?
BigDecimal.ZERO:BigDecimal.valueOf(ytdQtdToOAVo.getYtdRegion2Percent()).setScale(2, RoundingMode.HALF_UP)); BigDecimal.ZERO:BigDecimal.valueOf(ytdQtdToOAVo.getYtdRegion2Percent()).setScale(2, RoundingMode.HALF_UP).toString());
data.put("cusExpenseRate",ytdQtdToOAVo.getQtdCustomerPercent()==null? data.put("cusExpenseRate",ytdQtdToOAVo.getQtdCustomerPercent()==null?
BigDecimal.ZERO:BigDecimal.valueOf(ytdQtdToOAVo.getQtdCustomerPercent()).setScale(2, RoundingMode.HALF_UP)); BigDecimal.ZERO:BigDecimal.valueOf(ytdQtdToOAVo.getQtdCustomerPercent()).setScale(2, RoundingMode.HALF_UP).toString());
data.put("empExpenseRate",ytdQtdToOAVo.getQtdUserPercent()==null? data.put("empExpenseRate",ytdQtdToOAVo.getQtdUserPercent()==null?
BigDecimal.ZERO:BigDecimal.valueOf(ytdQtdToOAVo.getQtdUserPercent()).setScale(2, RoundingMode.HALF_UP)); BigDecimal.ZERO:BigDecimal.valueOf(ytdQtdToOAVo.getQtdUserPercent()).setScale(2, RoundingMode.HALF_UP).toString());
data.put("salesExpenseRate",ytdQtdToOAVo.getQtdRegionPercent()==null? data.put("salesExpenseRate",ytdQtdToOAVo.getQtdRegionPercent()==null?
BigDecimal.ZERO:BigDecimal.valueOf(ytdQtdToOAVo.getQtdRegionPercent()).setScale(2, RoundingMode.HALF_UP)); BigDecimal.ZERO:BigDecimal.valueOf(ytdQtdToOAVo.getQtdRegionPercent()).setScale(2, RoundingMode.HALF_UP).toString());
data.put("adminiExpenseRate",ytdQtdToOAVo.getQtdRegion2Percent()==null? data.put("adminiExpenseRate",ytdQtdToOAVo.getQtdRegion2Percent()==null?
BigDecimal.ZERO:BigDecimal.valueOf(ytdQtdToOAVo.getQtdRegion2Percent()).setScale(2, RoundingMode.HALF_UP)); BigDecimal.ZERO:BigDecimal.valueOf(ytdQtdToOAVo.getQtdRegion2Percent()).setScale(2, RoundingMode.HALF_UP).toString());
//插入记录表前移除历史记录 //插入记录表前移除历史记录
// tbsCostPercentMapper.delByCostApplyId(tbsCostApply.getId()); // tbsCostPercentMapper.delByCostApplyId(tbsCostApply.getId());
@ -450,7 +447,7 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
String centerType = center.getCenterType(); String centerType = center.getCenterType();
String centerId = center.getCenterId(); String centerId = center.getCenterId();
String centerKey = centerType + "-" + centerId; String centerKey = centerType + "-" + centerId;
TbsCostSubItem.CostCenter costCenter = new TbsCostSubItem.CostCenter(center.getCenterName(),centerType+"-"+centerId); TbsCostSubItem.CostCenterTranStr costCenter = new TbsCostSubItem.CostCenterTranStr(center.getCenterName(),centerType+"-"+centerId);
/* --------------- 全年目标费用率YTD 目标预计发货,目标预算 --------------------------- */ /* --------------- 全年目标费用率YTD 目标预计发货,目标预算 --------------------------- */
//通过成本中心TYPE和ID取预算 //通过成本中心TYPE和ID取预算
LambdaQueryWrapper<TbsBudget> budgetLambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<TbsBudget> budgetLambdaQueryWrapper = new LambdaQueryWrapper<>();
@ -464,16 +461,19 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
//合计目标发货和金定额 //合计目标发货和金定额
BigDecimal targetBudgetAmout = scheduleItemBudgetList.stream().map(a->a.getBudgetAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); BigDecimal targetBudgetAmout = scheduleItemBudgetList.stream().map(a->a.getBudgetAmount()).reduce(BigDecimal.ZERO,BigDecimal::add);
BigDecimal targetDispatchAmout = scheduleItemBudgetList.stream().map(a->a.getPreDispatchAmount()==null?BigDecimal.ZERO:a.getPreDispatchAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); BigDecimal targetDispatchAmout = scheduleItemBudgetList.stream().map(a->a.getPreDispatchAmount()==null?BigDecimal.ZERO:a.getPreDispatchAmount()).reduce(BigDecimal.ZERO,BigDecimal::add);
costCenter.setTargetSales(targetDispatchAmout); costCenter.setTargetSales(targetDispatchAmout.toString());
costCenter.setAreaBudget(targetBudgetAmout); costCenter.setAreaBudget(targetBudgetAmout.toString());
BigDecimal targetExpenseRate = BigDecimal.ZERO; BigDecimal targetExpenseRate = BigDecimal.ZERO;
if(targetDispatchAmout.compareTo(BigDecimal.ZERO)!=0) { if(targetDispatchAmout.compareTo(BigDecimal.ZERO)!=0) {
targetExpenseRate = targetBudgetAmout.divide(targetDispatchAmout, 2, BigDecimal.ROUND_HALF_DOWN); targetExpenseRate = targetBudgetAmout.divide(targetDispatchAmout, 2, BigDecimal.ROUND_HALF_DOWN);
costCenter.setTargetExpenseRate(targetExpenseRate.toString());
costCenter.setYtdTargetExpenseRate(targetExpenseRate.toString());
} }
costCenter.setTargetExpenseRate(targetExpenseRate); // costCenter.setTargetExpenseRate(targetExpenseRate);
costCenter.setYtdTargetBudget(targetBudgetAmout); costCenter.setYtdTargetBudget(targetBudgetAmout.toString());
costCenter.setYtdTargetSales(targetDispatchAmout); costCenter.setYtdTargetSales(targetDispatchAmout.toString());
costCenter.setYtdTargetExpenseRate(targetExpenseRate); // costCenter.setYtdTargetExpenseRate(targetExpenseRate);
// costCenter.setQtdTargetBudget(BigDecimal.ZERO); // costCenter.setQtdTargetBudget(BigDecimal.ZERO);
// costCenter.setQtdTargetSales(BigDecimal.ZERO); // costCenter.setQtdTargetSales(BigDecimal.ZERO);
// costCenter.setQtdTargetExpenseRate(BigDecimal.ZERO); // costCenter.setQtdTargetExpenseRate(BigDecimal.ZERO);
@ -489,39 +489,42 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
/* --------------- 实际费用率YTD --------------------------------------------- */ /* --------------- 实际费用率YTD --------------------------------------------- */
BigDecimal ytdRealDipatch = dispatchSumVos.stream().map(a->a.getDispatchSumCost()).reduce(BigDecimal.ZERO,BigDecimal::add); BigDecimal ytdRealDipatch = dispatchSumVos.stream().map(a->a.getDispatchSumCost()).reduce(BigDecimal.ZERO,BigDecimal::add);
BigDecimal ytdRealCost = birCenterCost.stream().map(a->a.getSplitUsedAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); BigDecimal ytdRealCost = birCenterCost.stream().map(a->a.getSplitUsedAmount()).reduce(BigDecimal.ZERO,BigDecimal::add);
costCenter.setYtdRealCost(ytdRealCost); costCenter.setYtdRealCost(ytdRealCost.toString());
costCenter.setYtdRealSales(ytdRealDipatch); costCenter.setYtdRealSales(ytdRealDipatch.toString());
BigDecimal ytdRealExpenseRate = BigDecimal.ZERO; BigDecimal ytdRealExpenseRate = BigDecimal.ZERO;
if(ytdRealDipatch.compareTo(BigDecimal.ZERO)!=0) { if(ytdRealDipatch.compareTo(BigDecimal.ZERO)!=0) {
ytdRealExpenseRate = ytdRealCost.divide(ytdRealDipatch, 2, BigDecimal.ROUND_HALF_DOWN); ytdRealExpenseRate = ytdRealCost.divide(ytdRealDipatch, 2, BigDecimal.ROUND_HALF_DOWN);
costCenter.setYtdRealExpenseRate(ytdRealExpenseRate.toString());
} }
costCenter.setYtdRealExpenseRate(ytdRealExpenseRate); // costCenter.setYtdRealExpenseRate(ytdRealExpenseRate);
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
/* --------------- 实际费用率QTD --------------------------------------------- */ /* --------------- 实际费用率QTD --------------------------------------------- */
List<Integer> yearQuarter = QuarterUtil.getQuarterNumbers(year, month); List<Integer> yearQuarter = QuarterUtil.getQuarterNumbers(year, month);
BigDecimal qtdRealDipatch = dispatchSumVos.stream().filter(a->yearQuarter.contains(a.getYearMonth())).map(a->a.getDispatchSumCost()).reduce(BigDecimal.ZERO,BigDecimal::add); BigDecimal qtdRealDipatch = dispatchSumVos.stream().filter(a->yearQuarter.contains(a.getYearMonth())).map(a->a.getDispatchSumCost()).reduce(BigDecimal.ZERO,BigDecimal::add);
BigDecimal qtdRealCost = birCenterCost.stream().filter(a->yearQuarter.contains(a.getKeyNum())).map(a->a.getSplitUsedAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); BigDecimal qtdRealCost = birCenterCost.stream().filter(a->yearQuarter.contains(a.getKeyNum())).map(a->a.getSplitUsedAmount()).reduce(BigDecimal.ZERO,BigDecimal::add);
costCenter.setQtdRealCost(qtdRealCost); costCenter.setQtdRealCost(qtdRealCost.toString());
costCenter.setQtdRealSales(qtdRealDipatch); costCenter.setQtdRealSales(qtdRealDipatch.toString());
BigDecimal qtdRealExpenseRate = BigDecimal.ZERO; BigDecimal qtdRealExpenseRate = BigDecimal.ZERO;
if(qtdRealDipatch.compareTo(BigDecimal.ZERO)!=0) { if(qtdRealDipatch.compareTo(BigDecimal.ZERO)!=0) {
qtdRealExpenseRate = qtdRealCost.divide(qtdRealDipatch, 2, BigDecimal.ROUND_HALF_DOWN); qtdRealExpenseRate = qtdRealCost.divide(qtdRealDipatch, 2, BigDecimal.ROUND_HALF_DOWN);
costCenter.setQtdRealExpenseRate(qtdRealExpenseRate.toString());
} }
costCenter.setQtdRealExpenseRate(qtdRealExpenseRate); // costCenter.setQtdRealExpenseRate(qtdRealExpenseRate);
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
/* --------------- 实际费用率MTD --------------------------------------------- */ /* --------------- 实际费用率MTD --------------------------------------------- */
Integer yearMonth = year*100 + month; Integer yearMonth = year*100 + month;
BigDecimal mtdRealDipatch = dispatchSumVos.stream().filter(a->yearMonth.equals(a.getYearMonth())).map(a->a.getDispatchSumCost()).reduce(BigDecimal.ZERO,BigDecimal::add); BigDecimal mtdRealDipatch = dispatchSumVos.stream().filter(a->yearMonth.equals(a.getYearMonth())).map(a->a.getDispatchSumCost()).reduce(BigDecimal.ZERO,BigDecimal::add);
BigDecimal mtdRealCost = birCenterCost.stream().filter(a->yearMonth.equals(a.getKeyNum())).map(a->a.getSplitUsedAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); BigDecimal mtdRealCost = birCenterCost.stream().filter(a->yearMonth.equals(a.getKeyNum())).map(a->a.getSplitUsedAmount()).reduce(BigDecimal.ZERO,BigDecimal::add);
costCenter.setMtdRealCost(mtdRealCost); costCenter.setMtdRealCost(mtdRealCost.toString());
costCenter.setMtdRealSales(mtdRealDipatch); costCenter.setMtdRealSales(mtdRealDipatch.toString());
BigDecimal mtdRealExpenseRate = BigDecimal.ZERO; BigDecimal mtdRealExpenseRate = BigDecimal.ZERO;
if(mtdRealDipatch.compareTo(BigDecimal.ZERO)!=0) { if(mtdRealDipatch.compareTo(BigDecimal.ZERO)!=0) {
mtdRealExpenseRate = mtdRealCost.divide(mtdRealDipatch, 2, BigDecimal.ROUND_HALF_DOWN); mtdRealExpenseRate = mtdRealCost.divide(mtdRealDipatch, 2, BigDecimal.ROUND_HALF_DOWN);
costCenter.setMtdRealExpenseRate(mtdRealExpenseRate.toString());
} }
costCenter.setMtdRealExpenseRate(mtdRealExpenseRate); // costCenter.setMtdRealExpenseRate(mtdRealExpenseRate);
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */

Loading…
Cancel
Save