|
@@ -52,6 +52,8 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
|
|
|
private final WorkDateInfoMapper dateInfoMapper;
|
|
|
|
|
|
+ private final IEmployeeTaskInfoService employeeTaskInfoService;
|
|
|
+
|
|
|
/**
|
|
|
* 新增年度经营预算
|
|
|
* @param dto
|
|
@@ -420,7 +422,7 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
|
|
|
//统计今年的已盈利:已收入-支出 ,目前已支出只统计闭环的计划
|
|
|
//获取今年人工支出
|
|
|
- BigDecimal yearStaffDisburse = budgetService.getYearStaffDisburse(year);
|
|
|
+ BigDecimal yearStaffDisburse = employeeTaskInfoService.getAllEmployeeSalaryByYear(year);
|
|
|
//获取今年维护支出
|
|
|
BigDecimal cost = budgetService.getAllMaintainCost(LocalDate.now().getYear());
|
|
|
//获取今年报销支出
|
|
@@ -493,8 +495,9 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
//总实际收入:当年所有回款
|
|
|
BigDecimal yearReturned = returnedInfoService.getYearReturned(y);
|
|
|
map.put("yearReturned",yearReturned);
|
|
|
- //总实际支出:当年所有报销支出,和人工支出
|
|
|
- BigDecimal yearStaffDisburse = budgetService.getYearStaffDisburse(y);
|
|
|
+ //总实际支出=报销支出+人工支出+维护支出
|
|
|
+ //人工支出
|
|
|
+ BigDecimal yearStaffDisburse = employeeTaskInfoService.getAllEmployeeSalaryByYear(y);
|
|
|
//维护支出
|
|
|
BigDecimal cost;
|
|
|
if (y == 0){
|
|
@@ -557,9 +560,11 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
List<AnnualProjectCostVO> mapList = new ArrayList<>();
|
|
|
//按年查询所有支出,按照项目分组,然后再按照月份分组统计
|
|
|
//查询人工支出
|
|
|
- List<ProjectCostBudget> budgetByYear = budgetService.getBudgetByYear(y);
|
|
|
- Map<Long, List<ProjectCostBudget>> map = budgetByYear.parallelStream()
|
|
|
- .collect(Collectors.groupingBy(ProjectCostBudget::getProjectId));
|
|
|
+ Map<Long, Map<Integer, BigDecimal>> mapMap = employeeTaskInfoService.getAllEmployeeSalaryByYear2(y);
|
|
|
+ Boolean isCost = true;
|
|
|
+ if (mapMap == null || mapMap.size() <= 0){
|
|
|
+ isCost = false;
|
|
|
+ }
|
|
|
//维护支出
|
|
|
Map<Long, List<BigDecimal>> listMap = budgetService.getAllMaintainCost3(y);
|
|
|
Boolean isMaintain = true;
|
|
@@ -575,50 +580,13 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
for (ControlProjectInfo project : list) {
|
|
|
AnnualProjectCostVO vo = new AnnualProjectCostVO();
|
|
|
List<Integer> integerList = new ArrayList<>();
|
|
|
- List<ProjectCostBudget> budgets = map.get(project.getId());
|
|
|
for (int i = 1; i <= 12; i++) {
|
|
|
BigDecimal big = new BigDecimal(0);
|
|
|
- if (budgets != null && budgets.size() > 0) {
|
|
|
- for (ProjectCostBudget budget : budgets) {
|
|
|
- //计算人工支出
|
|
|
- if (budget.getRealPlanStartTime().getYear() != y || budget.getPracticalFinishTime().getYear() != y){
|
|
|
- if (budget.getIsTwoMonth() != 1){
|
|
|
- throw new ServiceException("计划年份异常2");
|
|
|
- }
|
|
|
- if (budget.getPracticalFinishTime().getYear() != y){
|
|
|
- //如果结束时间不是今年,则开始月大于等于当前月才计算
|
|
|
- if (budget.getRealPlanStartTime().getMonthValue() == i) {
|
|
|
- big = big.add(budget.getPracticalStartMoney());
|
|
|
- }
|
|
|
- }else {
|
|
|
- if (budget.getPracticalFinishTime().getMonthValue() == i) {
|
|
|
- big = big.add(budget.getPracticalEndMoney());
|
|
|
- }
|
|
|
- }
|
|
|
- }else {
|
|
|
- //开始和结束时间没有跨年,但是需要判断是否跨月,如果没有跨月,则判断是否是当前月完成
|
|
|
- if (budget.getIsTwoMonth() == 0) {
|
|
|
- if (budget.getPracticalFinishTime().getMonthValue() == i) {
|
|
|
- big = big.add(budget.getActualTotalMoney());
|
|
|
- }
|
|
|
- }else {
|
|
|
- //如果跨月则判断是否包含当前月
|
|
|
- LocalDate startTime = budget.getRealPlanStartTime();
|
|
|
- LocalDate endTime = budget.getPracticalFinishTime();
|
|
|
- if (startTime.getMonthValue() <= i && endTime.getMonthValue() >= i){
|
|
|
- if (startTime.getMonthValue() == i){
|
|
|
- //开始时间是当月,获取当月工作日,除以总工作日,乘以总工资
|
|
|
-
|
|
|
- }else if (endTime.getMonthValue() == i){
|
|
|
- //开始时间是当月,获取当月工作日,除以总工作日,乘以总工资
|
|
|
- }else {
|
|
|
- //判断此月之前的工作日,如果此工作日已经大于总工作日,那么此月不算支出
|
|
|
-
|
|
|
- //获取此月整月工作日,用总工作日,减去此月之前的工作日,如果此月工作日大于结果工作日,则使用结果工作日
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ //计算人工支出
|
|
|
+ if (isCost && mapMap.get(project.getId()) != null){
|
|
|
+ Map<Integer, BigDecimal> map = mapMap.get(project.getId());
|
|
|
+ if (map.get(i) != null) {
|
|
|
+ big = big.add(map.get(i));
|
|
|
}
|
|
|
}
|
|
|
//计算维护
|
|
@@ -781,9 +749,6 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
@Override
|
|
|
public List<ProjectIncomeCostRatioVO> portalProjectCostRatio(String date) {
|
|
|
int y = Integer.parseInt(date.substring(0,4));
|
|
|
-// if ("汇总所有".equals(date)){
|
|
|
-// date = "";
|
|
|
-// }
|
|
|
//获取项目列表
|
|
|
List<ControlProjectInfo> list = projectInfoService.listByYear(Integer.parseInt(date.substring(0,4)));
|
|
|
if (list == null || list.size() <= 0){
|
|
@@ -802,9 +767,9 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
isReimburse = false;
|
|
|
}
|
|
|
List<ProjectIncomeCostRatioVO> vos = new ArrayList<>();
|
|
|
- //按年获取闭环任务,根据项目分组
|
|
|
- List<ProjectCostBudget> costByMonth = budgetService.getBudgetByYear(y);
|
|
|
- if (costByMonth == null || costByMonth.size() <= 0){
|
|
|
+ //获取全年人工支出,如果为null,则直接返回
|
|
|
+ Map<Long, BigDecimal> costMap = employeeTaskInfoService.getAllEmployeeSalaryByYear3(y);
|
|
|
+ if (costMap == null || costMap.size() <= 0){
|
|
|
//没有闭环任务,为每个项目设置为0
|
|
|
for (ControlProjectInfo info : list) {
|
|
|
ProjectIncomeCostRatioVO vo = new ProjectIncomeCostRatioVO();
|
|
@@ -820,33 +785,14 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
}
|
|
|
return vos;
|
|
|
}
|
|
|
- Map<Long, List<ProjectCostBudget>> map = costByMonth.parallelStream()
|
|
|
- .collect(Collectors.groupingBy(ProjectCostBudget::getProjectId));
|
|
|
//为每个项目设置支出
|
|
|
for (ControlProjectInfo info : list) {
|
|
|
ProjectIncomeCostRatioVO vo = new ProjectIncomeCostRatioVO();
|
|
|
vo.setProjectName(info.getName());
|
|
|
BigDecimal big = new BigDecimal(0);
|
|
|
//获取人工支出
|
|
|
- List<ProjectCostBudget> budgets = map.get(info.getId());
|
|
|
- if (budgets != null && budgets.size() > 0){
|
|
|
- for (ProjectCostBudget budget : budgets) {
|
|
|
-// big = big.add(budget.getActualTotalMoney());
|
|
|
- if (budget.getRealPlanStartTime().getYear() != y || budget.getPracticalFinishTime().getYear() != y){
|
|
|
- if (budget.getIsTwoMonth() != 1){
|
|
|
- throw new ServiceException("计划年份异常3");
|
|
|
- }
|
|
|
- if (budget.getPracticalFinishTime().getYear() != y){
|
|
|
- //如果结束时间不是今年,则使用开始金额
|
|
|
- big = big.add(budget.getPracticalStartMoney());
|
|
|
- }else {
|
|
|
- big = big.add(budget.getPracticalEndMoney());
|
|
|
- }
|
|
|
- }else {
|
|
|
- big = big.add(budget.getActualTotalMoney());
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
+ if (costMap.get(info.getId()) != null){
|
|
|
+ big = big.add(costMap.get(info.getId()));
|
|
|
}
|
|
|
//维护支出
|
|
|
if (isMaintain){
|
|
@@ -927,16 +873,10 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
}else {
|
|
|
isPlan2 = false;
|
|
|
}
|
|
|
- //获取项目所有已经闭环的固定计划
|
|
|
- List<ProjectCostBudget> finishedTask = budgetService.getProjectAllFinishedTask(projectId, null);
|
|
|
- Map<Long, List<ProjectCostBudget>> collect = new HashMap<>();
|
|
|
- boolean isPlan = true ;
|
|
|
- if (finishedTask != null && finishedTask.size() > 0){
|
|
|
- collect = finishedTask.parallelStream()
|
|
|
- .collect(Collectors.groupingBy(ProjectCostBudget::getProjectProcess));
|
|
|
- }else {
|
|
|
- isPlan = false;
|
|
|
- }
|
|
|
+ //获取项目的所有支出,按环节分组
|
|
|
+ Map<Long, BigDecimal> budgetMap = employeeTaskInfoService.getAllBudgetSalaryByProject(projectId);
|
|
|
+ //获取项目的所有支出,按环节分组
|
|
|
+ Map<Long, BigDecimal> costMap = employeeTaskInfoService.getAllEmployeeSalaryByProject(projectId);
|
|
|
//项目每个进程的维护支出
|
|
|
Map<Long, BigDecimal> maintainMap = budgetService.getAllMaintainCost8(projectId);
|
|
|
Boolean isMaintain = true;
|
|
@@ -990,68 +930,24 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
vo.setProcessProgressBar(0);
|
|
|
}
|
|
|
//设置进程支出金额,统计人工支出,维护支出,报销支出
|
|
|
- if (!isPlan){
|
|
|
- //没有完成的任务就不用设置人工支出
|
|
|
- //报销支出
|
|
|
- if (isReimburse){
|
|
|
- if (reimburseMap.get(process.getId()) != null){
|
|
|
- vo.setProcessCostCount(reimburseMap.get(process.getId()));
|
|
|
- }
|
|
|
- }else {
|
|
|
- vo.setProcessCostCount(new BigDecimal(0));
|
|
|
- }
|
|
|
-
|
|
|
- //维护支出
|
|
|
- if (isMaintain && maintainMap.get(process.getId()) != null){
|
|
|
- if (vo.getProcessCostCount() == null) {
|
|
|
- vo.setProcessCostCount(maintainMap.get(process.getId()));
|
|
|
- }else {
|
|
|
- vo.setProcessCostCount(vo.getProcessCostCount().add(maintainMap.get(process.getId())));
|
|
|
- }
|
|
|
- }
|
|
|
- }else {
|
|
|
- //有完成的任务,设置人工支出
|
|
|
- List<ProjectCostBudget> budgets = collect.get(process.getId());
|
|
|
- if (budgets != null && budgets.size() > 0){
|
|
|
- //计算所有任务支出总和
|
|
|
- BigDecimal big = new BigDecimal(0);
|
|
|
- for (ProjectCostBudget budget : budgets) {
|
|
|
- big = big.add(budget.getActualTotalMoney());
|
|
|
- }
|
|
|
- //设置报销支出
|
|
|
- if (isReimburse){
|
|
|
- if (reimburseMap.get(process.getId()) != null){
|
|
|
- big = big.add(reimburseMap.get(process.getId()));
|
|
|
- }
|
|
|
- }
|
|
|
- //设置维护支出
|
|
|
- if (isMaintain && maintainMap.get(process.getId()) != null){
|
|
|
- big = big.add(maintainMap.get(process.getId()));
|
|
|
- }
|
|
|
- vo.setProcessCostCount(big);
|
|
|
- }else {
|
|
|
- //没有人工支出
|
|
|
- //设置报销支出
|
|
|
- if (isReimburse){
|
|
|
- if (reimburseMap.get(process.getId()) != null){
|
|
|
- vo.setProcessCostCount(reimburseMap.get(process.getId()));
|
|
|
- }
|
|
|
- }else {
|
|
|
- vo.setProcessCostCount(new BigDecimal(0));
|
|
|
- }
|
|
|
-
|
|
|
- //维护支出
|
|
|
- if (isMaintain && maintainMap.get(process.getId()) != null){
|
|
|
- if (vo.getProcessCostCount() == null) {
|
|
|
- vo.setProcessCostCount(maintainMap.get(process.getId()));
|
|
|
- }else {
|
|
|
- vo.setProcessCostCount(vo.getProcessCostCount().add(maintainMap.get(process.getId())));
|
|
|
- }
|
|
|
- }
|
|
|
+ //设置人工支出
|
|
|
+ BigDecimal big = new BigDecimal(0);
|
|
|
+ if (costMap != null && costMap.get(process.getId()) != null){
|
|
|
+ big = big.add(costMap.get(process.getId()));
|
|
|
+ }
|
|
|
+ //设置报销支出
|
|
|
+ if (isReimburse){
|
|
|
+ if (reimburseMap.get(process.getId()) != null){
|
|
|
+ big = big.add(reimburseMap.get(process.getId()));
|
|
|
}
|
|
|
}
|
|
|
+ //设置维护支出
|
|
|
+ if (isMaintain && maintainMap.get(process.getId()) != null){
|
|
|
+ big = big.add(maintainMap.get(process.getId()));
|
|
|
+ }
|
|
|
+ vo.setProcessCostCount(big);
|
|
|
//设置进程支出金额百分比,统计实际支出和预算的百分比
|
|
|
- if (isPlan2){
|
|
|
+ if (budgetMap != null){
|
|
|
List<ProjectCostBudget> budgets = collect2.get(process.getId());
|
|
|
if (budgets != null && budgets.size() > 0) {
|
|
|
BigDecimal allMoney = new BigDecimal(0);
|
|
@@ -1061,13 +957,9 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
budget.setBudgetCountMoney(new BigDecimal(0));
|
|
|
}
|
|
|
allMoney = allMoney.add(budget.getBudgetCountMoney());
|
|
|
-// //统计人工支出
|
|
|
-// if (budget.getTaskApprove() == 1) {
|
|
|
-// costMoney = costMoney.add(budget.getActualTotalMoney());
|
|
|
-// }
|
|
|
}
|
|
|
- //统计报销支出
|
|
|
- if (vo.getProcessCostCount() != null && allMoney.intValue() != 0){
|
|
|
+ //统计占比
|
|
|
+ if (vo.getProcessCostCount().intValue() != 0 && allMoney.intValue() != 0){
|
|
|
vo.setProcessCostProgressBar(vo.getProcessCostCount().divide(allMoney, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue());
|
|
|
}else {
|
|
|
vo.setProcessProgressBar(0);
|
|
@@ -1110,7 +1002,8 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
//获取所有项目当年每月的实际回款
|
|
|
List<BigDecimal> returned2 = returnedInfoService.getAllMonthReturnedByYear(y,2);
|
|
|
//获取每月实际的人工支出
|
|
|
- List<BigDecimal> staffCost = budgetService.getAllMonthStaffCostByYear(y);
|
|
|
+// List<BigDecimal> staffCost = budgetService.getAllMonthStaffCostByYear(y);
|
|
|
+ Map<Integer, BigDecimal> costMap = employeeTaskInfoService.getAllEmployeeSalaryByYear4(y);
|
|
|
//获取每月实际的维护支出
|
|
|
List<BigDecimal> maintainCost = budgetService.getAllMonthMaintainCostByYear(y);
|
|
|
//获取每月实际的报销支出
|
|
@@ -1156,8 +1049,12 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
vo1.setIncome3(returned2.get(i-1));
|
|
|
c5 = c5.add(returned2.get(i-1));
|
|
|
//实际每月支出
|
|
|
- vo1.setDisburse3(staffCost.get(i-1).add(maintainCost.get(i-1).add(reimburse.get(i-1))));
|
|
|
- c6 = c6.add(staffCost.get(i-1).add(maintainCost.get(i-1).add(reimburse.get(i-1))));
|
|
|
+ BigDecimal big = new BigDecimal(0);
|
|
|
+ if (costMap != null && costMap.get(i) != null){
|
|
|
+ big = costMap.get(i);
|
|
|
+ }
|
|
|
+ vo1.setDisburse3(big.add(maintainCost.get(i-1).add(reimburse.get(i-1))));
|
|
|
+ c6 = c6.add(big.add(maintainCost.get(i-1).add(reimburse.get(i-1))));
|
|
|
|
|
|
list.add(vo1);
|
|
|
}
|
|
@@ -1173,6 +1070,19 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 预算与实际统计-部门支出统计
|
|
|
+ */
|
|
|
+ public List<BudgetAndPracticalByDeptVO> budgetAndPracticalByDept2(String year) {
|
|
|
+ int y = Integer.parseInt(year.substring(0, 4));
|
|
|
+ //结果集
|
|
|
+ List<BudgetAndPracticalByDeptVO> list = new ArrayList<>();
|
|
|
+ List<String> months = Arrays.asList("一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月");
|
|
|
+ //
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 预算与实际统计-部门支出统计
|
|
|
*/
|
|
@@ -1980,7 +1890,7 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
vo.setPracticalInput(yearReturned);
|
|
|
//获取当年所有实际支出: 人工支出+维护支出+报销支出
|
|
|
//人工支出
|
|
|
- BigDecimal disburse = budgetService.getYearStaffDisburse(y);
|
|
|
+ BigDecimal disburse = employeeTaskInfoService.getAllEmployeeSalaryByYear(y);
|
|
|
//维护支出
|
|
|
BigDecimal maintainCost = budgetService.getAllMaintainCost(y);
|
|
|
//报销支出
|
|
@@ -2009,7 +1919,7 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
}
|
|
|
List<BigDecimal> costList = disburseService.budgetCostByYear(annualId);
|
|
|
//一年的实际人工支出,按月返回指定年的
|
|
|
- List<BigDecimal> staffCostList = budgetService.getAllMonthStaffCostByYear2(y);
|
|
|
+ Map<Integer, BigDecimal> costMap = employeeTaskInfoService.getAllBudgetSalaryByYear(y);
|
|
|
//管理成本预算支出 = 年度经营的非人工成本,按月返回指定年的
|
|
|
List<BigDecimal> notCostList = disburseService.budgetNotCostByYear(annualId);
|
|
|
//管理成本实际支出 = 指定年的每个月报销,按月返回
|
|
@@ -2026,8 +1936,12 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
vo.setDisburse1(costList.get(i));
|
|
|
b1 = b1.add(costList.get(i));
|
|
|
//设置人工成本实际支出
|
|
|
- vo.setDisburse2(staffCostList.get(i));
|
|
|
- b2 = b2.add(staffCostList.get(i));
|
|
|
+ BigDecimal big = new BigDecimal(0);
|
|
|
+ if (costMap != null && costMap.get(i+1) != null){
|
|
|
+ big = costMap.get(i+1);
|
|
|
+ }
|
|
|
+ vo.setDisburse2(big);
|
|
|
+ b2 = b2.add(big);
|
|
|
//设置管理成本预算支出
|
|
|
vo.setDisburse3(notCostList.get(i));
|
|
|
b3 = b3.add(notCostList.get(i));
|