|
@@ -1410,6 +1410,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
* @param practicalFinishTime 实际完成时间
|
|
|
*/
|
|
|
@Override
|
|
|
+ @Transactional
|
|
|
public void taskFinishedStats(Long PlanId, LocalDate practicalFinishTime) {
|
|
|
System.out.println("计划实际结束时间"+practicalFinishTime);
|
|
|
System.out.println("今天"+ LocalDateTime.now());
|
|
@@ -1425,7 +1426,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
int taskType = dictInfo.getDictValue().intValue();
|
|
|
//计划为临时计划,则不计算金额直接闭环
|
|
|
if (taskType == 2){
|
|
|
- //为临时任务设置任务实际实际,方便统计
|
|
|
+ //为临时任务设置任务实际天数,方便统计
|
|
|
budget.setPracticalTaskDays(new BigDecimal(1 + budget.getPracticalFinishTime().until(budget.getRealPlanStartTime(), ChronoUnit.DAYS)));
|
|
|
this.updateById(budget);
|
|
|
}else {
|
|
@@ -1437,6 +1438,48 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
Double money = userInfo.getOneMoney();
|
|
|
//为固定计划,则获取最后一条任务日志
|
|
|
DepartmentPlanLog planLog = logMapper.getNewestPlanLog(PlanId);
|
|
|
+ //为员工任务信息表插入实际工作时间
|
|
|
+ String workDate = planLog.getWorkDate();
|
|
|
+ StringBuilder str = new StringBuilder();
|
|
|
+ List<LocalDate> workDaysList = new ArrayList<>();
|
|
|
+ //如果最后一条任务操作是暂停,则直接使用工作日集合
|
|
|
+ if (StringUtils.isNotBlank(workDate)){
|
|
|
+ String[] days = workDate.split(",");
|
|
|
+ if (days != null && days.length > 0){
|
|
|
+ for (String day : days) {
|
|
|
+ workDaysList.add(LocalDate.parse(day));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //如果最后一条任务操作是开启,则+最后开启时间与提交日期之间的工作日
|
|
|
+ if (planLog.getStatus() == 1){
|
|
|
+ List<LocalDate> list = dateInfoMapper.getWorkDaysList(planLog.getOpenPlanStartTime(), practicalFinishTime);
|
|
|
+ if (list != null && list.size() > 0){
|
|
|
+ workDaysList.addAll(list);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<EmployeeTaskInfo> infoList = new ArrayList<>();
|
|
|
+ for (LocalDate today : workDaysList) {
|
|
|
+ //保存实际执行任务时间-到任务计划表
|
|
|
+ EmployeeTaskInfo employeeTaskInfo = new EmployeeTaskInfo();
|
|
|
+ employeeTaskInfo.setBudgetId(budget.getId());
|
|
|
+ employeeTaskInfo.setProjectId(budget.getProjectId());
|
|
|
+ employeeTaskInfo.setBudgetParentId(budget.getParentId());
|
|
|
+ employeeTaskInfo.setUnitType(budget.getUnitType());
|
|
|
+ employeeTaskInfo.setDeptId(budget.getDeptId());
|
|
|
+ employeeTaskInfo.setCostType(budget.getCostType());
|
|
|
+ employeeTaskInfo.setTaskDetail(budget.getTaskDetail());
|
|
|
+ employeeTaskInfo.setProjectProcess(budget.getProjectProcess());
|
|
|
+ employeeTaskInfo.setBudgetType(budget.getBudgetType());
|
|
|
+ employeeTaskInfo.setOneDay(today);
|
|
|
+ employeeTaskInfo.setWorkType(1);
|
|
|
+ employeeTaskInfo.setPostType(budget.getPostType());
|
|
|
+ employeeTaskInfo.setEmployeeSalary(new BigDecimal(money));
|
|
|
+ infoList.add(employeeTaskInfo);
|
|
|
+ }
|
|
|
+ employeeTaskInfoService.saveBatch(infoList);
|
|
|
+
|
|
|
+
|
|
|
Integer realWorkDays = 0;
|
|
|
//日志类型为暂停,和status=3则 直接用实际工作时间
|
|
|
if (planLog.getStatus() == 0){
|
|
@@ -1480,12 +1523,67 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
}else {
|
|
|
budget.setIsTwoMonth(0);
|
|
|
}
|
|
|
- //如果跨月,则计算开始月人工成本和结束月人工成本
|
|
|
- //
|
|
|
+
|
|
|
baseMapper.updateByBudgetId(budget);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 任务转移审批通过时,计算上一个任务人工作量,并清空workDate
|
|
|
+ * @param PlanId
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void taskChangeStats(Long PlanId,Long taskUser) {
|
|
|
+ ProjectCostBudget budget = this.getById(PlanId);
|
|
|
+ //如果为临时任务,则直接跳过
|
|
|
+ DictInfo dictInfo = baseMapper.getTaskType(budget.getPlanTaskType());
|
|
|
+ int taskType = dictInfo.getDictValue().intValue();
|
|
|
+ //计划为固定计划时,则插入工作量,清空workDate
|
|
|
+ if (taskType == 1){
|
|
|
+ //获取任务人工资
|
|
|
+ User userInfo = baseMapper.getUserInfo(taskUser);
|
|
|
+ if (userInfo.getOneMoney() == null){
|
|
|
+ throw new ServiceException("没有为任务人设置工资");
|
|
|
+ }
|
|
|
+ Double money = userInfo.getOneMoney();
|
|
|
+ DepartmentPlanLog planLog = logMapper.getNewestPlanLog(PlanId);
|
|
|
+ //为员工任务信息表插入实际工作时间
|
|
|
+ String workDate = planLog.getWorkDate();
|
|
|
+ List<LocalDate> workDaysList = new ArrayList<>();
|
|
|
+ //直接使用工作日集合
|
|
|
+ if (StringUtils.isNotBlank(workDate)){
|
|
|
+ String[] days = workDate.split(",");
|
|
|
+ if (days != null && days.length > 0){
|
|
|
+ for (String day : days) {
|
|
|
+ workDaysList.add(LocalDate.parse(day));
|
|
|
+ }
|
|
|
+ List<EmployeeTaskInfo> infoList = new ArrayList<>();
|
|
|
+ for (LocalDate today : workDaysList) {
|
|
|
+ //保存预算到任务计划表
|
|
|
+ EmployeeTaskInfo employeeTaskInfo = new EmployeeTaskInfo();
|
|
|
+ employeeTaskInfo.setBudgetId(budget.getId());
|
|
|
+ employeeTaskInfo.setProjectId(budget.getProjectId());
|
|
|
+ employeeTaskInfo.setBudgetParentId(budget.getParentId());
|
|
|
+ employeeTaskInfo.setUnitType(budget.getUnitType());
|
|
|
+ employeeTaskInfo.setDeptId(budget.getDeptId());
|
|
|
+ employeeTaskInfo.setCostType(budget.getCostType());
|
|
|
+ employeeTaskInfo.setTaskDetail(budget.getTaskDetail());
|
|
|
+ employeeTaskInfo.setProjectProcess(budget.getProjectProcess());
|
|
|
+ employeeTaskInfo.setBudgetType(budget.getBudgetType());
|
|
|
+ employeeTaskInfo.setOneDay(today);
|
|
|
+ employeeTaskInfo.setWorkType(1);
|
|
|
+ employeeTaskInfo.setPostType(budget.getPostType());
|
|
|
+ employeeTaskInfo.setEmployeeSalary(new BigDecimal(money));
|
|
|
+ infoList.add(employeeTaskInfo);
|
|
|
+ }
|
|
|
+ employeeTaskInfoService.saveBatch(infoList);
|
|
|
+ planLog.setWorkDate("");
|
|
|
+ logMapper.updateById(planLog);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 根据年份获取所有项目的维护支出
|
|
|
* @return
|