Merge remote-tracking branch 'origin/master'

master
ArgonarioD 2022-12-27 13:18:57 +08:00
commit ee3e03941c
1 changed files with 25 additions and 11 deletions

View File

@ -71,6 +71,7 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements IT
} }
try { try {
List<Long> res = new ArrayList<>(); List<Long> res = new ArrayList<>();
// 添加根任务点Id获得子节点数目
res.add(taskId); res.add(taskId);
Task task = baseMapper.selectOne(Wrappers.<Task>lambdaQuery().eq(Task::getTaskId, taskId)); Task task = baseMapper.selectOne(Wrappers.<Task>lambdaQuery().eq(Task::getTaskId, taskId));
Task fatherTask = baseMapper.selectOne(Wrappers.<Task>lambdaQuery().eq(Task::getTaskId, task.getTaskFatherId())); Task fatherTask = baseMapper.selectOne(Wrappers.<Task>lambdaQuery().eq(Task::getTaskId, task.getTaskFatherId()));
@ -79,14 +80,18 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements IT
if (baseMapper.update(fatherTask, Wrappers.<Task>lambdaQuery().eq(Task::getTaskId, fatherTask.getTaskId())) != 1) { if (baseMapper.update(fatherTask, Wrappers.<Task>lambdaQuery().eq(Task::getTaskId, fatherTask.getTaskId())) != 1) {
throw new BadRequestException("删除失败"); throw new BadRequestException("删除失败");
} }
while (true) { // 每次按照广度优先搜索的方式,按照树形的任务结构向下层寻找
for(int depth = 1; depth <= 20; depth++) {
// 寻找下一层的所有任务
List<Task> list = baseMapper.selectList( List<Task> list = baseMapper.selectList(
Wrappers.<Task>lambdaQuery() Wrappers.<Task>lambdaQuery()
.in(Task::getTaskFatherId, res)); .in(Task::getTaskFatherId, res));
// 删除这一层的所有任务
baseMapper.update(null, Wrappers.<Task>lambdaUpdate().in(Task::getTaskId, res).set(Task::getChildrenCount, 0)); baseMapper.update(null, Wrappers.<Task>lambdaUpdate().in(Task::getTaskId, res).set(Task::getChildrenCount, 0));
baseMapper.delete(Wrappers.<Task>lambdaQuery().in(Task::getTaskId, res)); baseMapper.delete(Wrappers.<Task>lambdaQuery().in(Task::getTaskId, res));
// 该层为空
if (list == null || list.isEmpty()) break; if (list == null || list.isEmpty()) break;
// 获得下一层的任务id
res = list.stream().map(Task::getTaskId).collect(Collectors.toList()); res = list.stream().map(Task::getTaskId).collect(Collectors.toList());
} }
return true; return true;
@ -108,14 +113,17 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements IT
} }
try { try {
List<Long> res = new ArrayList<>(); List<Long> res = new ArrayList<>();
// 获得初始的任务Id
res.add(taskId); res.add(taskId);
while (true) { for(int depth = 1; depth <= 20; depth++) {
// 获得下一层所有任务
List<Task> list = baseMapper.selectList( List<Task> list = baseMapper.selectList(
Wrappers.<Task>lambdaQuery() Wrappers.<Task>lambdaQuery()
.in(Task::getTaskFatherId, res) .in(Task::getTaskFatherId, res)
.ne(Task::getTaskStatus, Task.STATUS_COMPLETED) .ne(Task::getTaskStatus, Task.STATUS_COMPLETED)
.ne(Task::getTaskStatus, Task.STATUS_CLOSED) .ne(Task::getTaskStatus, Task.STATUS_CLOSED)
); );
// 修改该层任务,为关闭状态
baseMapper.update( baseMapper.update(
null, null,
Wrappers.<Task>lambdaUpdate() Wrappers.<Task>lambdaUpdate()
@ -124,6 +132,7 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements IT
.set(Task::getTaskClosedTime, LocalDateTime.now()) .set(Task::getTaskClosedTime, LocalDateTime.now())
); );
if (list == null || list.isEmpty()) break; if (list == null || list.isEmpty()) break;
// 获得下一层的任务Id
res = list.stream().map(Task::getTaskId).collect(Collectors.toList()); res = list.stream().map(Task::getTaskId).collect(Collectors.toList());
} }
return true; return true;
@ -359,17 +368,22 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements IT
return task; return task;
} }
// 完成任务数目概况统计
@Override @Override
public Map<String, List<TaskTrendDTO>> getProjectTaskTrend(String token, Integer projectId) throws ForbiddenException { public Map<String, List<TaskTrendDTO>> getProjectTaskTrend(String token, Integer projectId) throws ForbiddenException {
if (projectGroupService.getProjectAccessLevel(token, projectId) == 0) { if (projectGroupService.getProjectAccessLevel(token, projectId) == 0) {
throw new ForbiddenException(ForbiddenException.UNABLE_TO_OPERATE); throw new ForbiddenException(ForbiddenException.UNABLE_TO_OPERATE);
} }
// 起止日期
LocalDate endDate = LocalDate.now(); LocalDate endDate = LocalDate.now();
LocalDate startDate = endDate.plusDays(-14); LocalDate startDate = endDate.plusDays(-14);
// 返回结果
Map<String, List<TaskTrendDTO>> res = new HashMap<>(); Map<String, List<TaskTrendDTO>> res = new HashMap<>();
// 获得开始时间之前的所有任务的数据
List<TaskTrendDTO> resList = getResultTaskStatus(projectId, startDate); List<TaskTrendDTO> resList = getResultTaskStatus(projectId, startDate);
// 分别获得该项目在起止时间之间所有未关闭的和关闭的任务任务
TaskTrendDTO lastTaskTrend = new TaskTrendDTO(); TaskTrendDTO lastTaskTrend = new TaskTrendDTO();
lastTaskTrend.setTaskDate(endDate.plusDays(1)); lastTaskTrend.setTaskDate(endDate.plusDays(1));
List<TaskTrendDTO> unclosedList = baseMapper.selectTaskUnclosedNum(projectId, startDate, endDate); List<TaskTrendDTO> unclosedList = baseMapper.selectTaskUnclosedNum(projectId, startDate, endDate);
@ -377,6 +391,7 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements IT
List<TaskTrendDTO> closedList = baseMapper.selectTaskClosedNum(projectId, startDate, endDate); List<TaskTrendDTO> closedList = baseMapper.selectTaskClosedNum(projectId, startDate, endDate);
closedList.add(lastTaskTrend); closedList.add(lastTaskTrend);
// 各个状态分别进行统计
for (TaskTrendDTO iterTask : resList) { for (TaskTrendDTO iterTask : resList) {
List<TaskTrendDTO> taskList = new ArrayList<>(); List<TaskTrendDTO> taskList = new ArrayList<>();
ListIterator<TaskTrendDTO> closedIter = closedList.listIterator(); ListIterator<TaskTrendDTO> closedIter = closedList.listIterator();
@ -384,9 +399,11 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements IT
TaskTrendDTO closedTaskTrend = null; TaskTrendDTO closedTaskTrend = null;
TaskTrendDTO unclosedTaskTrend = null; TaskTrendDTO unclosedTaskTrend = null;
// 关闭与未关闭的任务的中间累加对象
closedTaskTrend = closedIter.next(); closedTaskTrend = closedIter.next();
unclosedTaskTrend = unclosedIter.next(); unclosedTaskTrend = unclosedIter.next();
//按照时间顺序进行统计
Long lastNum = iterTask.getTaskNum(); Long lastNum = iterTask.getTaskNum();
LocalDate iterDate = startDate; LocalDate iterDate = startDate;
while (!iterDate.isAfter(endDate)) { while (!iterDate.isAfter(endDate)) {
@ -394,29 +411,26 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements IT
taskTrend.setTaskDate(iterDate); taskTrend.setTaskDate(iterDate);
taskTrend.setTaskStatus(iterTask.getTaskStatus()); taskTrend.setTaskStatus(iterTask.getTaskStatus());
taskTrend.setTaskNum(lastNum); taskTrend.setTaskNum(lastNum);
while (true) { // 将之前日期之前的所有统计数据叠加
if (iterDate.isBefore(unclosedTaskTrend.getTaskDate())) { while (iterDate.isBefore(unclosedTaskTrend.getTaskDate())) {
break;
}
taskTrend.changeForUnclosed(unclosedTaskTrend); taskTrend.changeForUnclosed(unclosedTaskTrend);
if (unclosedIter.hasNext()) { if (unclosedIter.hasNext()) {
unclosedTaskTrend = unclosedIter.next(); unclosedTaskTrend = unclosedIter.next();
} }
} }
while (true) { while (iterDate.isBefore(closedTaskTrend.getTaskDate())) {
if (iterDate.isBefore(closedTaskTrend.getTaskDate())) {
break;
}
taskTrend.changeForClosed(closedTaskTrend); taskTrend.changeForClosed(closedTaskTrend);
if (closedIter.hasNext()) { if (closedIter.hasNext()) {
closedTaskTrend = closedIter.next(); closedTaskTrend = closedIter.next();
} }
} }
// 将统计数据放入返回值时
taskList.add(taskTrend); taskList.add(taskTrend);
iterDate = iterDate.plusDays(1); iterDate = iterDate.plusDays(1);
lastNum = taskTrend.getTaskNum(); lastNum = taskTrend.getTaskNum();
// log.debug(taskTrend.toString()); // log.debug(taskTrend.toString());
} }
// 各个状态返回
res.put(iterTask.getTaskStatus(), taskList); res.put(iterTask.getTaskStatus(), taskList);
} }
return res; return res;