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