qianxb 2 лет назад
Родитель
Сommit
bac96c618a

+ 2 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractReturnedInfoMapper.java

@@ -32,4 +32,6 @@ public interface ContractReturnedInfoMapper extends BaseMapper<ContractReturnedI
     void deleteByContractId(@Param("contractId") Long contractId);
 
     List<ContractReturnedInfo> getAllMonthReturnedByYear(@Param("year") int y);
+
+    List<ContractReturnedInfo> getAllMonthReturnedByYear2(@Param("year") int y);
 }

+ 7 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractReturnedInfoMapper.xml

@@ -54,4 +54,11 @@
             and DATE_FORMAT(practical_returned_time ,'%Y') = #{year}
         </if>
     </select>
+
+    <select id="getAllMonthReturnedByYear2" resultType="org.springblade.control.entity.ContractReturnedInfo">
+        SELECT *
+        from c_contract_returned_info
+        WHERE  is_deleted = 0
+            and DATE_FORMAT(should_returned_time ,'%Y') = #{year}
+    </select>
 </mapper>

+ 4 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java

@@ -63,8 +63,12 @@ public interface ProjectCostBudgetMapper extends BaseMapper<ProjectCostBudget> {
     //获取一年人工支出
     BigDecimal getYearStaffDisburse(@Param("year") int year);
 
+    //获取一年的已经闭环的任务,按照任务真实开始结束时间
     List<ProjectCostBudget> getBudgetByYear(@Param("year") int y);
 
+    //获取一年的任务,不管是否闭环,按照任务计划开始结束时间
+    List<ProjectCostBudget> getBudgetByYear2(@Param("year") int y);
+
     List<ProjectCostBudgetVO2> getPlanByMonth(@Param("date") String date);
 
     List<ProjectCostBudget> getRiskPlan(@Param("projectId") Long projectId,@Param("costType") Integer costType);

+ 10 - 3
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml

@@ -35,7 +35,7 @@
             (select di.dict_name from c_dict_info di where di.code = 'cost_type' and di.dict_value = pcb.cost_type) as costTypeValue,
             (select cpp.name from c_project_process cpp where cpp.id = pcb.project_process) as projectProcessValue,
             (select di.dict_name from c_dict_info di where di.type = 5 and di.dict_value = pcb.budget_type and di.parent_id = 0 and di.is_deleted = 0) as budgetTypeValue,
-            (select di.dict_name from c_dict_info di where di.type = 5 and and di.is_deleted = 0 di.dict_value = pcb.task_detail and di.parent_id =
+            (select di.dict_name from c_dict_info di where di.type = 5 and di.is_deleted = 0 and di.dict_value = pcb.task_detail and di.parent_id =
                 (select di.id from c_dict_info di where di.type = 5 and di.dict_value = pcb.budget_type and di.parent_id = 0 and di.is_deleted = 0)) as taskDetailValue,
             (select di.dict_name from c_dict_info di where di.type = 3 and di.id = pcb.post_type) as postTypeValue
         from c_project_cost_budget pcb
@@ -189,10 +189,17 @@
                (select di.dict_name from c_dict_info di where di.type = 2 and di.id = pcb.plan_task_type) as planTaskTypeValue
         FROM c_project_cost_budget pcb WHERE pcb.project_id = #{id} AND pcb.parent_id > 0
     </select>
+
     <select id="getBudgetByYear" resultType="org.springblade.control.entity.ProjectCostBudget">
-        select *  from c_project_cost_budget
-        WHERE is_deleted = 0 and task_approve = 1 and DATE_FORMAT(practical_finish_time ,'%Y') = #{year} and DATE_FORMAT(real_plan_start_time ,'%Y') = #{year}
+        select *  from c_project_cost_budget pcb
+        WHERE pcb.is_deleted = 0  and task_approve = 1  and (select cdi.dict_value from c_dict_info cdi WHERE cdi.id = pcb.plan_task_type) = 1 and pcb.task_approve = 1 and (DATE_FORMAT(pcb.practical_finish_time ,'%Y') = #{year} or DATE_FORMAT(pcb.real_plan_start_time ,'%Y') = #{year})
+    </select>
+
+    <select id="getBudgetByYear2" resultType="org.springblade.control.entity.ProjectCostBudget">
+        select *  from c_project_cost_budget pcb
+        WHERE pcb.is_deleted = 0  and (select cdi.dict_value from c_dict_info cdi WHERE cdi.id = pcb.plan_task_type) = 1 and (DATE_FORMAT(pcb.plan_start_time ,'%Y') = #{year} or DATE_FORMAT(pcb.plan_end_time ,'%Y') = #{year})
     </select>
+
     <select id="getPlanByMonth" resultType="org.springblade.control.vo.ProjectCostBudgetVO2">
         select pcb.*,
                (pcb.plan_days * (select bu.one_money from blade_user bu WHERE bu.id = pcb.task_user)) as 'planCountMoney',

+ 3 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IContractReturnedInfoService.java

@@ -44,4 +44,7 @@ public interface IContractReturnedInfoService extends BaseService<ContractReturn
     //获取所有项目当年每月的,1返回应回款,2返回实际回款
     List<BigDecimal> getAllMonthReturnedByYear(int y,int type);
 
+    //获取所有项目当年每月的应回款
+    List<BigDecimal> getAllMonthReturnedByYear2(int y);
+
 }

+ 9 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java

@@ -127,10 +127,19 @@ public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget
 
     //根据年获取每月实际的人工支出
     List<BigDecimal> getAllMonthStaffCostByYear(int y);
+
+    //根据年获取每月预算人工支出,
+    List<BigDecimal> getAllMonthStaffCostByYear2(int y);
+
+    //根据年获取每月预算人工支出,包括其他支出
+    List<BigDecimal> getAllMonthStaffCostByYear3(int y);
+
     //根据年获取每月实际的维护支出
     List<BigDecimal> getAllMonthMaintainCostByYear(int y);
+
     //获取当年所有已经分配时间的固定计划
     List<ProjectCostBudget> getAllPlanByYear(int y);
+
     //获取当年所有已经完成的固定计划
     List<ProjectCostBudget> getAllFinishedPlanByYear(int y);
 }

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetDisburseServiceImpl.java

@@ -157,8 +157,8 @@ public class AnnualBudgetDisburseServiceImpl extends BaseServiceImpl<AnnualBudge
                             big = big.add(disburse.getDecember());
                             break;
                     }
-                    list.add(big);
                 }
+                list.add(big);
             }
             return list;
         }else {

+ 6 - 4
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java

@@ -1022,9 +1022,9 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
         }
 
         //获取所有项目当年每月的应回款
-        List<BigDecimal> returned1 = returnedInfoService.getAllMonthReturnedByYear(y,1);
-        //获取已经指定年分配月的成本测算
-        List<BigDecimal> budgets = budgetService.getAllMonthBudgetByYear(y);
+        List<BigDecimal> returned1 = returnedInfoService.getAllMonthReturnedByYear2(y);
+        //获取已经指定年分配月的计划成本
+        List<BigDecimal> budgets = budgetService.getAllMonthStaffCostByYear3(y);
         //获取所有项目当年每月的实际回款
         List<BigDecimal> returned2 = returnedInfoService.getAllMonthReturnedByYear(y,2);
         //获取每月实际的人工支出
@@ -1622,6 +1622,7 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
         }
         List<BigDecimal> costList = disburseService.budgetCostByYear(annualId);
         //一年的实际人工支出,按月返回指定年的
+        List<BigDecimal> staffCostList = budgetService.getAllMonthStaffCostByYear2(y);
         //管理成本预算支出  = 年度经营的非人工成本,按月返回指定年的
         List<BigDecimal> notCostList = disburseService.budgetNotCostByYear(annualId);
         //管理成本实际支出 = 指定年的每个月报销,按月返回
@@ -1638,7 +1639,8 @@ 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));
             //设置管理成本预算支出
             vo.setDisburse3(notCostList.get(i));
             b3 = b3.add(notCostList.get(i));

+ 29 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ContractReturnedInfoServiceImpl.java

@@ -163,4 +163,33 @@ public class ContractReturnedInfoServiceImpl extends BaseServiceImpl<ContractRet
         }
         return list;
     }
+
+    /**
+     * 获取所有项目当年每月的应回款
+     * @param y
+     * @return
+     */
+    @Override
+    public List<BigDecimal> getAllMonthReturnedByYear2(int y) {
+        //获取当年所有回款
+        List<ContractReturnedInfo> infos = baseMapper.getAllMonthReturnedByYear2(y);
+        List<BigDecimal> list = new ArrayList<>();
+        //计算每月回款
+        if (infos != null && infos.size() > 0){
+            for (int i = 0; i < 12; i++) {
+                BigDecimal big = new BigDecimal(0);
+                for (ContractReturnedInfo info : infos) {
+                    if (info.getShouldReturnedTime().getMonthValue() == (i+1)){
+                        big = big.add(info.getShouldReturnedMoney());
+                    }
+                }
+                list.add(big);
+            }
+        }else {
+            for (int i = 0; i < 12; i++) {
+                list.add(new BigDecimal(0));
+            }
+        }
+        return list;
+    }
 }

+ 92 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

@@ -2370,12 +2370,104 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         return list;
     }
 
+    /**
+     * 获取每月实际的人工支出+其他成本
+     * @param y
+     * @return
+     */
+    @Override
+    public List<BigDecimal> getAllMonthStaffCostByYear3(int y) {
+        //获取所有今年的固定计划,计划开始时间和结束时间是今年的
+        List<ProjectCostBudget> budgets = baseMapper.getBudgetByYear2(y);
+        List<BigDecimal> list = new ArrayList<>();
+        if (budgets != null && budgets.size() > 0){
+            for (int i = 0; i < 12; i++) {
+                BigDecimal big = new BigDecimal(0);
+                for (ProjectCostBudget budget : budgets) {
+                    //如果计划实际开始时间和实际结束时间中有当月
+                    if ((budget.getPlanStartTime().getMonthValue() == (i+1) && budget.getPlanStartTime().getYear() == y)
+                            || ((budget.getPlanEndTime().getMonthValue() == (i+1)) && budget.getPlanEndTime().getYear() == y)){
+                        //如果实际结束时间是当月
+                        if ((budget.getPlanEndTime().getMonthValue() == (i+1) && budget.getPlanEndTime().getYear() == y)) {
+                            if (budget.getPlanIsTwoMonth() == 0){
+                                //人工成本没跨月,证明开始时间和结束时间是同一个月,直接使用人工成本到当月
+                                big = big.add(budget.getPlanStaffCost());
+                            }else {
+                                big = big.add(budget.getPlanEndMoney());
+                            }
+                            ////如果实际开始时间是当月
+                        }else if ((budget.getPlanStartTime().getMonthValue() == (i+1)) && budget.getPlanStartTime().getYear() == y){
+                            if (budget.getPlanIsTwoMonth() == 0){
+                                //人工成本没跨月,证明开始时间和结束时间是同一个月,直接使用人工成本到当月
+                                big = big.add(budget.getPlanStaffCost());
+                            }else {
+                                big = big.add(budget.getPlanStartMoney());
+                            }
+                        }
+                    }
+                }
+                list.add(big);
+            }
+        }else {
+            for (int i = 0; i < 12; i++) {
+                list.add(new BigDecimal(0));
+            }
+        }
+        return list;
+    }
+
     /**
      * 获取每月实际的人工支出,
      * @param y
      * @return
      */
     @Override
+    public List<BigDecimal> getAllMonthStaffCostByYear2(int y) {
+        //获取所有今年的固定计划,计划开始时间和结束时间是今年的
+        List<ProjectCostBudget> budgets = baseMapper.getBudgetByYear2(y);
+        List<BigDecimal> list = new ArrayList<>();
+        if (budgets != null && budgets.size() > 0){
+            for (int i = 0; i < 12; i++) {
+                BigDecimal big = new BigDecimal(0);
+                for (ProjectCostBudget budget : budgets) {
+                    //如果计划实际开始时间和实际结束时间中有当月
+                    if ((budget.getPlanStartTime().getMonthValue() == (i+1) && budget.getPlanStartTime().getYear() == y)
+                            || ((budget.getPlanEndTime().getMonthValue() == (i+1)) && budget.getPlanEndTime().getYear() == y)){
+                        //如果实际结束时间是当月
+                        if ((budget.getPlanEndTime().getMonthValue() == (i+1) && budget.getPlanEndTime().getYear() == y)) {
+                            if (budget.getPlanIsTwoMonth() == 0){
+                                //人工成本没跨月,证明开始时间和结束时间是同一个月,直接使用人工成本到当月
+                                big = big.add(budget.getPlanStaffCost());
+                            }else {
+                                big = big.add(budget.getPlanEndMoney());
+                            }
+                            ////如果实际开始时间是当月
+                        }else if ((budget.getPlanStartTime().getMonthValue() == (i+1)) && budget.getPlanStartTime().getYear() == y){
+                            if (budget.getPlanIsTwoMonth() == 0){
+                                //人工成本没跨月,证明开始时间和结束时间是同一个月,直接使用人工成本到当月
+                                big = big.add(budget.getPlanStaffCost());
+                            }else {
+                                big = big.add(budget.getPlanStartMoney());
+                            }
+                        }
+                    }
+                }
+                list.add(big);
+            }
+        }else {
+            for (int i = 0; i < 12; i++) {
+                list.add(new BigDecimal(0));
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 获取每月预算的人工支出,
+     * @param y
+     * @return
+     */
+    @Override
     public List<BigDecimal> getAllMonthStaffCostByYear(int y) {
         //获取已经闭环的任务
         List<ProjectCostBudget> budgets = baseMapper.getBudgetByYear(y);