Przeglądaj źródła

项目计划预算的维护费计算

qianxb 2 lat temu
rodzic
commit
21ef4842f5

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

@@ -43,4 +43,6 @@ public interface ContractInfoMapper extends BaseMapper<ControlContractInfo> {
     void realDeleteById(@Param("id") Long id);
 
     List<ControlContractInfo> getContractByYear(@Param("year") int year, @Param("ids") Collection<?> coll);
+
+    ControlContractInfo getContractByProjectId(@Param("projectId") Long projectId);
 }

+ 5 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractInfoMapper.xml

@@ -58,4 +58,9 @@
             #{id}
         </foreach>
     </select>
+    <select id="getContractByProjectId" resultType="org.springblade.control.entity.ControlContractInfo">
+        SELECT * FROM c_control_contract_info
+        WHERE project_id = #{projectId}
+
+    </select>
 </mapper>

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

@@ -41,4 +41,6 @@ public interface EmployeeTaskInfoMapper extends BaseMapper<EmployeeTaskInfo> {
     List<EmployeeTaskInfo> getAllBudgetSalaryByYear(@Param("year") int y);
 
     void setAvgOtherCostByParentId(@Param("id") Long id,@Param("avg") BigDecimal avg);
+
+    void deleteMaintainByBudgetId(@Param("id") Long id);
 }

+ 5 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EmployeeTaskInfoMapper.xml

@@ -22,7 +22,11 @@
     </delete>
     <delete id="deleteByBudgetIdAndParentId">
         delete from c_employee_task_info
-        where (budget_id = #{id} or budget_parent_id = #{id}) and work_type = 0
+        where (budget_id = #{id} or budget_parent_id = #{id})
+    </delete>
+    <delete id="deleteMaintainByBudgetId">
+        delete from c_employee_task_info
+        where budget_id = #{id} and work_type = 2
     </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}

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

@@ -49,4 +49,7 @@ public interface IContractInfoService extends BaseService<ControlContractInfo> {
     //根据年份获取合同
     List<ControlContractInfo> getContractByYear(int year, Collection<?> coll);
 
+    //根据项目iD获取合同
+    ControlContractInfo getContractByProjectId(Long projectId);
+
 }

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

@@ -36,6 +36,9 @@ public interface IEmployeeTaskInfoService extends BaseService<EmployeeTaskInfo>
     //根据父预算id修改所有日期的,其他平均预算
     void setAvgOtherCostByParentId(Long id,BigDecimal avg);
 
+    //根据预算id,删除维护支出
+    void deleteMaintainByBudgetId(Long id);
+
 
     /**
      *  实际支出相关接口

+ 10 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ContractInfoServiceImpl.java

@@ -209,4 +209,14 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
     public List<ControlContractInfo> getContractByYear(int year, Collection<?> coll) {
         return baseMapper.getContractByYear(year,coll);
     }
+
+    /**
+     * 根据项目id获取合同
+     * @param projectId
+     * @return
+     */
+    @Override
+    public ControlContractInfo getContractByProjectId(Long projectId) {
+        return baseMapper.getContractByProjectId(projectId);
+    }
 }

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

@@ -79,6 +79,15 @@ public class EmployeeTaskInfoServiceImpl extends BaseServiceImpl<EmployeeTaskInf
         baseMapper.setAvgOtherCostByParentId(id,avg);
     }
 
+    /**
+     * 根据预算id,删除维护支出
+     * @param id
+     */
+    @Override
+    public void deleteMaintainByBudgetId(Long id) {
+        baseMapper.deleteMaintainByBudgetId(id);
+    }
+
     /**
      * 根据年查询当年所有的人工支出
      * @param y

+ 91 - 6
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

@@ -488,11 +488,15 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                 employeeTaskInfoService.deleteByBudgetParentId(ids,vo2.getId());
                 BigDecimal allTotal = new BigDecimal(0);
                 Boolean isTaskType = false;
+                //判断进行中的任务是否包含临时任务
+                Boolean isStarting = false;
                 for (ProjectCostBudget budget : vo2ChildrenList) {
                     //如果计划正在进行中或者已经完成,则跳过
                     if (budget.getStatus() != null && budget.getStatus() != 1){
                         if (map2.get(budget.getPlanTaskType()).get(0).getDictValue() == 1) {
                             isTaskType = true;
+                        }else {
+                            isStarting = true;
                         }
                         allTotal = allTotal.add(budget.getPlanDays());
                         continue;
@@ -516,7 +520,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                         budget.setId(SnowFlakeUtil.getId());
                     }
 
-                    //只计算固定计划的人工成本
+                    //固定任务,则统计人工成本,反则维护任务,统计维护成本
                     if (map2.get(budget.getPlanTaskType()).get(0).getDictValue() == 1) {
                         isTaskType = true;
                         LocalDate startTime = budget.getPlanStartTime();
@@ -565,20 +569,18 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                                 budget.setPlanEndMoney(new BigDecimal(0));
                             }else {
                                 //如果这个月工作天数小于总计划,则总计划相减
-//                                startTotalDays = startTotalDays.add(new BigDecimal(days));
-//                                endTotalDays = endTotalDays.add(budget.getPlanDays().subtract(new BigDecimal(days)));
                                 budget.setPlanStartMonthDays(new BigDecimal(days));
                                 budget.setPlanEndMonthDays(budget.getPlanDays().subtract(new BigDecimal(days)));
                                 budget.setPlanStartMoney(new BigDecimal(days).multiply(postMoney));
                                 budget.setPlanEndMoney(budget.getPlanStaffCost().subtract(budget.getPlanStartMoney()));
                             }
-                        }else {
-//                            startTotalDays = startTotalDays.add(budget.getPlanDays());
                         }
                     }
                 }
                 //修改所有父id下的其他平均工资
                 if (isTaskType){
+                    //清空维护成本
+                    employeeTaskInfoService.deleteMaintainByBudgetId(vo2.getId());
                     BigDecimal otherCost = vo2.getBudgetCountMoney().subtract(vo2.getBudgetStaffCost());
                     BigDecimal other = new BigDecimal(0);
                     //查看成本测算中是否包含其他支出
@@ -586,6 +588,51 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                         other = otherCost.divide(allTotal,2, BigDecimal.ROUND_HALF_UP);
                     }
                     employeeTaskInfoService.setAvgOtherCostByParentId(vo2.getId(),other);
+                }else {
+                    //维护任务统计维护成本
+                    //如果有进行中的临时任务,就不新增不删除
+                    if (isStarting){
+
+                    }else {
+                        //清空维护成本
+                        employeeTaskInfoService.deleteMaintainByBudgetId(vo2.getId());
+                        //获取项目合同,如果项目没有合同则提示
+                        ControlContractInfo contractInfo = contractService.getContractByProjectId(vo2.getProjectId());
+                        if (contractInfo == null){
+                            throw new ServiceException("当前项目没有合同,不能保存临时任务");
+                        }
+                        LocalDate startTime = contractInfo.getStartTime();
+                        LocalDate endTime = contractInfo.getEndTime();
+                        //获取开始时间到结束时间的天数
+                        long days = endTime.toEpochDay() - startTime.toEpochDay() + 1;
+                        //获得每天维护费
+                        BigDecimal decimal = new BigDecimal(0);
+                        if (vo2.getBudgetCountMoney().intValue() != 0 && days != 0){
+                            decimal = vo2.getBudgetCountMoney().divide(new BigDecimal(days), 2, BigDecimal.ROUND_HALF_UP);
+                        }
+                        endTime = endTime.plusDays(1);
+                        List<EmployeeTaskInfo> infoList = new ArrayList<>();
+                        //循环存入每一天
+                        while (startTime.isBefore(endTime)){
+                            //保存预算到任务计划表
+                            EmployeeTaskInfo employeeTaskInfo = new EmployeeTaskInfo();
+                            employeeTaskInfo.setBudgetId(vo2.getId());
+                            employeeTaskInfo.setProjectId(vo2.getProjectId());
+                            employeeTaskInfo.setUnitType(vo2.getUnitType());
+                            employeeTaskInfo.setDeptId(vo2.getDeptId());
+                            employeeTaskInfo.setCostType(vo2.getCostType());
+                            employeeTaskInfo.setTaskDetail(vo2.getTaskDetail());
+                            employeeTaskInfo.setProjectProcess(vo2.getProjectProcess());
+                            employeeTaskInfo.setBudgetType(vo2.getBudgetType());
+                            employeeTaskInfo.setOneDay(startTime);
+                            employeeTaskInfo.setWorkType(2);
+                            employeeTaskInfo.setPostType(vo2.getPostType());
+                            employeeTaskInfo.setEmployeeSalary(decimal);
+                            infoList.add(employeeTaskInfo);
+                            startTime = startTime.plusDays(1);
+                        }
+                        employeeTaskInfoService.saveBatch(infoList);
+                    }
                 }
                 childrenList.addAll(vo2ChildrenList);
             }else {
@@ -604,7 +651,6 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                         continue;
                     }
                     employeeTaskInfoService.deleteByBudgetIdAndParentId(budget.getId());
-//                    employeeTaskInfoService.deleteByBudgetId(budget.getId());
                     //存在数据,则判断是否是固定计划
                     if (map2.get(budget.getPlanTaskType()).get(0).getDictValue() == 1) {
                         LocalDate startTime = budget.getPlanStartTime();
@@ -662,6 +708,45 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                                 budget.setPlanEndMoney(budget.getPlanStaffCost().subtract(budget.getPlanStartMoney()));
                             }
                         }
+                    }else {
+                        //维护任务统计维护成本
+                        //获取项目合同,如果项目没有合同则提示
+                        ControlContractInfo contractInfo = contractService.getContractByProjectId(vo2.getProjectId());
+                        if (contractInfo == null){
+                            throw new ServiceException("当前项目没有合同,不能保存临时任务");
+                        }
+                        LocalDate startTime = contractInfo.getStartTime();
+                        LocalDate endTime = contractInfo.getEndTime();
+                        //获取开始时间到结束时间的天数
+                        long days = endTime.toEpochDay() - startTime.toEpochDay() + 1;
+                        //获得每天维护费
+                        BigDecimal decimal = new BigDecimal(0);
+                        if (vo2.getBudgetCountMoney().intValue() != 0 && days != 0){
+                            decimal = vo2.getBudgetCountMoney().divide(new BigDecimal(days), 2, BigDecimal.ROUND_HALF_UP);
+                        }
+                        endTime = endTime.plusDays(1);
+                        List<EmployeeTaskInfo> infoList = new ArrayList<>();
+                        //循环存入每一天
+                        while (startTime.isBefore(endTime)){
+                            //保存预算到任务计划表
+                            EmployeeTaskInfo employeeTaskInfo = new EmployeeTaskInfo();
+                            employeeTaskInfo.setBudgetId(vo2.getId());
+                            employeeTaskInfo.setProjectId(vo2.getProjectId());
+                            employeeTaskInfo.setUnitType(vo2.getUnitType());
+                            employeeTaskInfo.setDeptId(vo2.getDeptId());
+                            employeeTaskInfo.setCostType(vo2.getCostType());
+                            employeeTaskInfo.setTaskDetail(vo2.getTaskDetail());
+                            employeeTaskInfo.setProjectProcess(vo2.getProjectProcess());
+                            employeeTaskInfo.setBudgetType(vo2.getBudgetType());
+                            employeeTaskInfo.setOneDay(startTime);
+                            employeeTaskInfo.setWorkType(2);
+                            employeeTaskInfo.setPostType(vo2.getPostType());
+                            employeeTaskInfo.setEmployeeSalary(decimal);
+                            infoList.add(employeeTaskInfo);
+                            startTime = startTime.plusDays(1);
+                        }
+                        employeeTaskInfoService.saveBatch(infoList);
+
                     }
 
                 }