From 72e23ad0f0f42fcd29f8c89974e8d39d3ec02d47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B0=81=E7=BE=BD?= <2360164671@qq.com> Date: Mon, 11 Jul 2022 22:35:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BA=86=E6=8B=AF=E6=95=91?= =?UTF-8?q?=E5=86=85=E5=AD=98=E7=9A=84=E4=BA=8C=E5=88=86=E6=9F=A5=E6=89=BE?= =?UTF-8?q?(=E5=BE=85=E5=BC=BA=E5=8A=9B=E6=B5=8B=E8=AF=95);?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/TaskServiceImpl.java | 60 +++++++++++++++---- 1 file changed, 50 insertions(+), 10 deletions(-) diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/TaskServiceImpl.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/TaskServiceImpl.java index 53b3958..0f8ea27 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/TaskServiceImpl.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/TaskServiceImpl.java @@ -136,12 +136,12 @@ public class TaskServiceImpl extends ServiceImpl implements IT @NotNull private void addResultProjectProcess(List resList, String projectType) { Boolean typeExist = false; - for(StaffProcessDTO staffProcessDTO: resList) { - if(Objects.equals(staffProcessDTO.getTaskType(), projectType)) { + for (StaffProcessDTO staffProcessDTO : resList) { + if (Objects.equals(staffProcessDTO.getTaskType(), projectType)) { typeExist = true; } } - if(!typeExist) { + if (!typeExist) { StaffProcessDTO staffProcessDTO = new StaffProcessDTO(); staffProcessDTO.setTaskType(projectType); staffProcessDTO.setCompleteNum(0L); @@ -186,16 +186,56 @@ public class TaskServiceImpl extends ServiceImpl implements IT return getHolderLevel(staffId, staffGlobalLevel, taskId); } + private int lowerBound(List data, long x) { + int l = 0, r = data.size() - 1; + while (l < r) { + int mid = (l + r) / 2; + if (data.get(mid).getTaskFatherId() >= x) r = mid; + else l = mid + 1; + } + return l; + } + + private int upperBound(List data, long x) { + int l = 0, r = data.size() - 1; + while (l < r) { + int mid = (l + r) / 2; + if (data.get(mid).getTaskFatherId() <= x) l = mid + 1; + else r = mid; + } + return l - 1; + } + + @Override public List listMyTasks(String token, Integer projectId) throws BadRequestException { - if (projectGroupService.getProjectAccessLevel(token, projectId) == 0) { - throw new BadRequestException(IProjectGroupService.UNABLE_TO_ACCESS_PROJECT); - } Integer staffId = TokenUtils.getStaffId(token); - return baseMapper.selectList(Wrappers.lambdaQuery() - .eq(Task::getTaskHolderId, staffId) - .eq(Task::getTaskProjectId, projectId) - ); + List resList = baseMapper.selectList(Wrappers.lambdaQuery().select(Task::getTaskId, Task::getTaskFatherId, Task::getTaskHolderId) + .eq(Task::getTaskProjectId, projectId).orderByAsc(Task::getTaskFatherId)); + List results = new ArrayList<>(); + ArrayList vec = new ArrayList<>(); + ArrayList isTarget = new ArrayList<>(); + vec.add(0L); + isTarget.add(false); + int id = 0; + while (id != vec.size()) { + Long pos = vec.get(id); + Boolean flag = isTarget.get(id); + id++; + if (flag) { + results.add(pos); + continue; + } + int l = lowerBound(resList, pos); + int r = upperBound(resList, pos); + if (l > r) + continue; + for (int i = l; i <= r; i++) { + vec.add(resList.get(i).getTaskId()); + isTarget.add(resList.get(i).getTaskHolderId().equals(staffId)); + } + } + return baseMapper.selectList(Wrappers.lambdaQuery().in(Task::getTaskId, results)); } @Override