Browse Source

门户所有接口统计

qianxb 2 years ago
parent
commit
e7b20343cc

+ 8 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EmployeeTaskInfoMapper.java

@@ -27,4 +27,12 @@ public interface EmployeeTaskInfoMapper extends BaseMapper<EmployeeTaskInfo> {
     void deleteByBudgetParentId(@Param("ids") List<Long> ids,@Param("parentId") Long parentId);
 
     void deleteByBudgetIdAndParentId(@Param("id") Long id);
+
+    BigDecimal getAllEmployeeSalaryByYear(@Param("year") int y);
+
+    List<EmployeeTaskInfo> getAllEmployeeSalaryByYear2(@Param("year") int y);
+
+    List<EmployeeTaskInfo> getAllEmployeeSalaryByProject(@Param("projectId") Long projectId);
+
+    List<EmployeeTaskInfo> getAllBudgetSalaryByProject(@Param("projectId") Long projectId);
 }

+ 12 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EmployeeTaskInfoMapper.xml

@@ -21,4 +21,16 @@
         delete from c_employee_task_info
         where (budget_id = #{id} or budget_parent_id = #{id}) and work_type = 0
     </delete>
+    <select id="getAllEmployeeSalaryByYear" resultType="java.math.BigDecimal">
+        select SUM(employee_salary) from c_employee_task_info WHERE work_type = 1 and DATE_FORMAT(one_day, '%Y') = #{year}
+    </select>
+    <select id="getAllEmployeeSalaryByYear2" resultType="org.springblade.control.entity.EmployeeTaskInfo">
+        select * from c_employee_task_info WHERE work_type = 1 and DATE_FORMAT(one_day, '%Y') = #{year}
+    </select>
+    <select id="getAllEmployeeSalaryByProject" resultType="org.springblade.control.entity.EmployeeTaskInfo">
+        select * from c_employee_task_info WHERE work_type = 1 and project_id = #{projectId}
+    </select>
+    <select id="getAllBudgetSalaryByProject" resultType="org.springblade.control.entity.EmployeeTaskInfo">
+        select * from c_employee_task_info WHERE work_type = 0 and project_id = #{projectId}
+    </select>
 </mapper>

+ 23 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IEmployeeTaskInfoService.java

@@ -31,4 +31,27 @@ public interface IEmployeeTaskInfoService extends BaseService<EmployeeTaskInfo>
 
     //根据父预算id删除工作信息,并且排除到正在进行中的计划
     void deleteByBudgetParentId(List<Long> ids,Long parentId);
+
+
+    /**
+     *  实际支出相关接口
+     */
+    //根据年查询当年所有的人工支出
+    BigDecimal getAllEmployeeSalaryByYear(int y);
+
+    //根据年查询当年所有的人工支出,并按照项目分组,组里的数据是每个月的支出,如果该项目没有支出将不会插入
+    Map<Long,Map<Integer, BigDecimal>> getAllEmployeeSalaryByYear2(int y);
+
+    //根据年查询当年所有的人工支出,并按照项目分组,组里的数据是项目年支出,如果该项目没有支出将不会插入
+    Map<Long,BigDecimal> getAllEmployeeSalaryByYear3(int y);
+
+    //获取项目的所有支出,按环节分组,如果该环节没有支出,将不会插入
+    Map<Long,BigDecimal> getAllEmployeeSalaryByProject(Long projectId);
+
+
+    /**
+     *  预算支出相关接口
+     */
+    //根据项目id,获取项目所有的预算支出,按照环节分组,如果该环节没有支出,将不会插入
+    Map<Long,BigDecimal> getAllBudgetSalaryByProject(Long projectId);
 }

+ 42 - 150
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java

@@ -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);

+ 97 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EmployeeTaskInfoServiceImpl.java

@@ -68,4 +68,101 @@ public class EmployeeTaskInfoServiceImpl extends BaseServiceImpl<EmployeeTaskInf
     public void deleteByBudgetParentId(List<Long> ids, Long parentId) {
         baseMapper.deleteByBudgetParentId(ids,parentId);
     }
+
+    /**
+     * 根据年查询当年所有的人工支出
+     * @param y
+     * @return
+     */
+    @Override
+    public BigDecimal getAllEmployeeSalaryByYear(int y) {
+        BigDecimal decimal = baseMapper.getAllEmployeeSalaryByYear(y);
+        if (decimal == null){
+            return new BigDecimal(0);
+        }
+        return decimal;
+    }
+
+    /**
+     * 根据年查询当年所有的人工支出,并按照项目分组,组里的数据是每个月的支出,如果该项目没有支出将不会插入
+     * @param y
+     * @return
+     */
+    @Override
+    public Map<Long, Map<Integer, BigDecimal>> getAllEmployeeSalaryByYear2(int y) {
+        List<EmployeeTaskInfo> list = baseMapper.getAllEmployeeSalaryByYear2(y);
+        if (list != null && list.size() > 0){
+            Map<Long, Map<Integer, BigDecimal>> map = new HashMap<>();
+            Map<Long, List<EmployeeTaskInfo>> listMap = list.parallelStream()
+                    .collect(Collectors.groupingBy(EmployeeTaskInfo::getProjectId));
+            for (Long aLong : listMap.keySet()) {
+                //该项目所有支出
+                List<EmployeeTaskInfo> infoList = listMap.get(aLong);
+                //按月份分组
+                Map<Integer, BigDecimal> monthMap = infoList.stream().collect(
+                        Collectors.groupingBy(
+                                o -> o.getOneDay().getMonthValue(),
+                                Collectors.mapping(EmployeeTaskInfo::getEmployeeSalary, Collectors.reducing(BigDecimal.ZERO, BigDecimal::add))
+                        ));
+                map.put(aLong,monthMap);
+            }
+            return map;
+        }
+        return null;
+    }
+
+    /**
+     * 根据年查询当年所有的人工支出,并按照项目分组,组里的数据是项目年支出,如果该项目没有支出将不会插入
+     * @param y
+     * @return
+     */
+    @Override
+    public Map<Long, BigDecimal> getAllEmployeeSalaryByYear3(int y) {
+        List<EmployeeTaskInfo> list = baseMapper.getAllEmployeeSalaryByYear2(y);
+        if (list != null && list.size() > 0){
+            //按项目分组
+            Map<Long, BigDecimal> monthMap = list.stream().collect(
+                    Collectors.groupingBy(
+                            o -> o.getProjectId(),
+                            Collectors.mapping(EmployeeTaskInfo::getEmployeeSalary, Collectors.reducing(BigDecimal.ZERO, BigDecimal::add))
+                    ));
+            return monthMap;
+        }
+        return null;
+    }
+
+    /**
+     * 获取项目的所有支出,按环节分组
+     * @param projectId
+     * @return
+     */
+    @Override
+    public Map<Long, BigDecimal> getAllEmployeeSalaryByProject(Long projectId) {
+        List<EmployeeTaskInfo> list = baseMapper.getAllEmployeeSalaryByProject(projectId);
+        if (list != null && list.size() > 0){
+            //按项目分组
+            Map<Long, BigDecimal> monthMap = list.stream().collect(
+                    Collectors.groupingBy(
+                            o -> o.getProjectProcess(),
+                            Collectors.mapping(EmployeeTaskInfo::getEmployeeSalary, Collectors.reducing(BigDecimal.ZERO, BigDecimal::add))
+                    ));
+            return monthMap;
+        }
+        return null;
+    }
+
+    @Override
+    public Map<Long, BigDecimal> getAllBudgetSalaryByProject(Long projectId) {
+        List<EmployeeTaskInfo> list = baseMapper.getAllBudgetSalaryByProject(projectId);
+        if (list != null && list.size() > 0){
+            //按项目分组
+            Map<Long, BigDecimal> monthMap = list.stream().collect(
+                    Collectors.groupingBy(
+                            o -> o.getProjectProcess(),
+                            Collectors.mapping(EmployeeTaskInfo::getEmployeeSalary, Collectors.reducing(BigDecimal.ZERO, BigDecimal::add))
+                    ));
+            return monthMap;
+        }
+        return null;
+    }
 }