|
@@ -486,9 +486,15 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
List<Long> ids = vo2ChildrenList.stream().filter(l -> l.getStatus() != null && l.getStatus() != 1).map(ProjectCostBudgetVO2::getId).collect(Collectors.toList());
|
|
|
//清空除进行中之外的子计划的 员工任务信息表
|
|
|
employeeTaskInfoService.deleteByBudgetParentId(ids,vo2.getId());
|
|
|
+ BigDecimal allTotal = new BigDecimal(0);
|
|
|
+ Boolean isTaskType = false;
|
|
|
for (ProjectCostBudget budget : vo2ChildrenList) {
|
|
|
//如果计划正在进行中或者已经完成,则跳过
|
|
|
if (budget.getStatus() != null && budget.getStatus() != 1){
|
|
|
+ if (map2.get(budget.getPlanTaskType()).get(0).getDictValue() == 1) {
|
|
|
+ isTaskType = true;
|
|
|
+ }
|
|
|
+ allTotal = allTotal.add(budget.getPlanDays());
|
|
|
continue;
|
|
|
}
|
|
|
//如果保存太快,没有生成planDays,就查询
|
|
@@ -512,6 +518,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
|
|
|
//只计算固定计划的人工成本
|
|
|
if (map2.get(budget.getPlanTaskType()).get(0).getDictValue() == 1) {
|
|
|
+ isTaskType = true;
|
|
|
LocalDate startTime = budget.getPlanStartTime();
|
|
|
LocalDate endTime = budget.getPlanEndTime();
|
|
|
List<EmployeeTaskInfo> infoList = new ArrayList<>();
|
|
@@ -519,6 +526,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
BigDecimal postMoney = new BigDecimal(map.get(vo2.getPostType()).get(0).getDictValue());
|
|
|
//获取计划日期中的工作日
|
|
|
List<LocalDate> workDaysList = dateInfoMapper.getWorkDaysList(startTime, endTime);
|
|
|
+ allTotal = allTotal.add(new BigDecimal(workDaysList.size()));
|
|
|
for (LocalDate today : workDaysList) {
|
|
|
//保存预算到任务计划表
|
|
|
EmployeeTaskInfo employeeTaskInfo = new EmployeeTaskInfo();
|
|
@@ -569,6 +577,16 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ //修改所有父id下的其他平均工资
|
|
|
+ if (isTaskType){
|
|
|
+ BigDecimal otherCost = vo2.getBudgetCountMoney().subtract(vo2.getBudgetStaffCost());
|
|
|
+ BigDecimal other = new BigDecimal(0);
|
|
|
+ //查看成本测算中是否包含其他支出
|
|
|
+ if (otherCost.intValue() != 0 ){
|
|
|
+ other = otherCost.divide(allTotal,2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ }
|
|
|
+ employeeTaskInfoService.setAvgOtherCostByParentId(vo2.getId(),other);
|
|
|
+ }
|
|
|
childrenList.addAll(vo2ChildrenList);
|
|
|
}else {
|
|
|
//无子计划
|
|
@@ -585,7 +603,8 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
if (budget.getStatus() != null && budget.getStatus() != 1){
|
|
|
continue;
|
|
|
}
|
|
|
- employeeTaskInfoService.deleteByBudgetId(budget.getId());
|
|
|
+ employeeTaskInfoService.deleteByBudgetIdAndParentId(budget.getId());
|
|
|
+// employeeTaskInfoService.deleteByBudgetId(budget.getId());
|
|
|
//存在数据,则判断是否是固定计划
|
|
|
if (map2.get(budget.getPlanTaskType()).get(0).getDictValue() == 1) {
|
|
|
LocalDate startTime = budget.getPlanStartTime();
|
|
@@ -595,6 +614,12 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
BigDecimal postMoney = new BigDecimal(map.get(vo2.getPostType()).get(0).getDictValue());
|
|
|
//获取计划日期中的工作日
|
|
|
List<LocalDate> workDaysList = dateInfoMapper.getWorkDaysList(startTime, endTime);
|
|
|
+ BigDecimal otherCost = budget.getBudgetCountMoney().subtract(budget.getBudgetStaffCost());
|
|
|
+ BigDecimal other = new BigDecimal(0);
|
|
|
+ //查看成本测算中是否包含其他支出
|
|
|
+ if (otherCost.intValue() != 0 ){
|
|
|
+ other = otherCost.divide(new BigDecimal(workDaysList.size()),2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ }
|
|
|
for (LocalDate today : workDaysList) {
|
|
|
//保存预算到任务计划表
|
|
|
EmployeeTaskInfo employeeTaskInfo = new EmployeeTaskInfo();
|
|
@@ -611,6 +636,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
employeeTaskInfo.setWorkType(0);
|
|
|
employeeTaskInfo.setPostType(budget.getPostType());
|
|
|
employeeTaskInfo.setEmployeeSalary(postMoney);
|
|
|
+ employeeTaskInfo.setAvgOtherCost(other);
|
|
|
infoList.add(employeeTaskInfo);
|
|
|
}
|
|
|
employeeTaskInfoService.saveBatch(infoList);
|
|
@@ -1039,7 +1065,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
big = big.add(budget.getActualTotalMoney());
|
|
|
}else {
|
|
|
if (budget.getPracticalTaskDays().intValue() != 0) {
|
|
|
- BigDecimal decimal = new BigDecimal(workDays).divide(budget.getPracticalTaskDays()).multiply(budget.getActualTotalMoney()).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal decimal = new BigDecimal(workDays).divide(budget.getPracticalTaskDays(),2, BigDecimal.ROUND_HALF_UP).multiply(budget.getActualTotalMoney()).setScale(2, RoundingMode.HALF_UP);
|
|
|
big = big.add(decimal);
|
|
|
}
|
|
|
}
|
|
@@ -1050,7 +1076,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
Integer workDays = dateInfoMapper.getWorkDays(start, end);
|
|
|
//如果工作日大于等于实际完成工作日,则今年的支出就是0
|
|
|
if (workDays < budget.getPracticalTaskDays().intValue()){
|
|
|
- BigDecimal decimal = new BigDecimal(workDays).divide(budget.getPracticalTaskDays()).multiply(budget.getActualTotalMoney()).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal decimal = new BigDecimal(workDays).divide(budget.getPracticalTaskDays(),2, BigDecimal.ROUND_HALF_UP).multiply(budget.getActualTotalMoney()).setScale(2, RoundingMode.HALF_UP);
|
|
|
big = big.add(budget.getActualTotalMoney().subtract(decimal));
|
|
|
}
|
|
|
}
|