Browse Source

优化查看任务详情的接口

郭超 4 năm trước cách đây
mục cha
commit
fa0f9e14b2

+ 5 - 1
core/src/main/java/com/mooctest/crowd/domain/dao/RoleDao.java

@@ -1,16 +1,20 @@
 package com.mooctest.crowd.domain.dao;
 
 import com.mooctest.crowd.domain.model.RolePO;
+import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.repository.CrudRepository;
 
 import javax.transaction.Transactional;
+import java.util.List;
 import java.util.Optional;
 
 @Transactional
-public interface RoleDao extends CrudRepository<RolePO, Long>{
+public interface RoleDao extends CrudRepository<RolePO, Long>, JpaRepository<RolePO, Long> {
 
     RolePO findByName(String name);
 
     Optional<RolePO> findById(Long id);
 
+    @Override
+    List<RolePO> findAll();
 }

+ 3 - 0
core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestProject.java

@@ -260,6 +260,9 @@ public class CrowdTestProject {
             throw new BaseException("任务截止时间不能小于当前时间");
         }
         this.setRestPrice(this.getRestPrice() - task.getQuotedPrice());
+        if(this.getCrowdTestTaskList() == null){
+            this.setCrowdTestTaskList(new ArrayList<>());
+        }
         this.getCrowdTestTaskList().add(task);
     }
 

+ 2 - 0
core/src/main/java/com/mooctest/crowd/domain/repository/IUserRepo.java

@@ -23,6 +23,8 @@ public interface IUserRepo {
 
     User getByIDJustInfo(Long userId) throws UserNotExistException, RoleNotFoundException;
 
+    User getInfoAndRolesByID(Long userId) throws UserNotExistException;
+
     List<User> getByIdList(List<Long> ids) throws RoleNotFoundException;
 
     List<User> getAllUser() throws RoleNotFoundException;

+ 28 - 9
core/src/main/java/com/mooctest/crowd/domain/repository/UserRepo.java

@@ -105,6 +105,27 @@ public class UserRepo implements IUserRepo {
     }
 
     @Override
+    public User getInfoAndRolesByID(Long userId) throws UserNotExistException {
+        Optional<UserPO> userPOOptional = userDao.findById(userId);
+        if (!userPOOptional.isPresent()){
+            throw new UserNotExistException("用户不存在");
+        } else {
+            User user = getUserAndRoleByUserPO(userPOOptional.get());
+            return user;
+        }
+    }
+
+    private User getUserAndRoleByUserPO(UserPO userPO) throws RoleNotFoundException {
+        User userResult = Converter.convert(User.class, userPO);
+        Map<Long, Role> roleMap = roleDao.findAll().stream().collect(Collectors.toMap(rolePO -> rolePO.getId(), rolePO -> Converter.convert(Role.class, rolePO)));
+        List<UserToRolePO> userToRolePOList = userToRoleDao.findByUserId(userResult.getId());
+        List<Role> roleList = userToRolePOList.stream().map(userToRolePO -> roleMap.get(userToRolePO.getRoleId())).collect(Collectors.toList());
+        userResult.setRoleList(roleList);
+        return userResult;
+    }
+
+
+    @Override
     public User getByMobileNum(String mobileNum) throws UserNotExistException, RoleNotFoundException {
         UserPO userPO = userDao.findByMobile(mobileNum);
         if (userPO == null) {
@@ -229,6 +250,7 @@ public class UserRepo implements IUserRepo {
 
             Role roleResult = getPermissionByRole(roleConvert);
             roleListResult.add(roleResult);
+//            roleListResult.add(roleConvert);
         }
         saveResultUser.setRoleList(roleListResult);
         return saveResultUser;
@@ -378,18 +400,15 @@ public class UserRepo implements IUserRepo {
      */
     private User getUserAndRoleAndPermissionByUserPO(UserPO userPO) throws RoleNotFoundException {
         User userResult = Converter.convert(User.class, userPO);
+        Map<Long, Role> roleMap = roleDao.findAll().stream().collect(Collectors.toMap(rolePO -> rolePO.getId(), rolePO -> Converter.convert(Role.class, rolePO)));
         List<UserToRolePO> userToRolePOList = userToRoleDao.findByUserId(userResult.getId());
         List<Role> roleResultList = new ArrayList<>();
         for (UserToRolePO userToRolePO : userToRolePOList) {
-            Optional<RolePO> rolePOOptional = roleDao.findById(userToRolePO.getRoleId());
-            if (rolePOOptional.isPresent()) {
-                RolePO rolePO = rolePOOptional.get();
-                // 权限
-                Role roleResult = getPermissionByRole(Converter.convert(Role.class, rolePO));
-                roleResultList.add(roleResult);
-            } else {
-                throw new RoleNotFoundException();
-            }
+            Role role = roleMap.get(userToRolePO.getRoleId());
+            Role roleResult = getPermissionByRole(role);
+            roleResultList.add(roleResult);
+
+//            roleResultList.add(role);
         }
         userResult.setRoleList(roleResultList);
 

+ 14 - 16
site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java

@@ -946,7 +946,7 @@ public class WebMediatorImpl implements ViewMediator {
             throw new CrowdTestTaskNotExistException();
 
         CrowdTestTask crowdTestTask = task.get();
-
+        EndPoint endPoint = crowdTestTask.getEndPoint();
         // 判断任务是否截止
         if (crowdTestTask.getDeadTime().getTime() <= System.currentTimeMillis() && crowdTestTask.getStatus() < CrowdTestTaskStatus.HAS_FINISHED) {
             crowdTestTask.setStatus(CrowdTestTaskStatus.HAS_TIME_OUT);
@@ -964,15 +964,14 @@ public class WebMediatorImpl implements ViewMediator {
         if (userId == null) {
             taskDetailsDTO.setTaskOperationControl(this.initTaskPermission(project, crowdTestTask, null));
         } else {
-            User user = userRepo.getByID(userId);
+            User user = userRepo.getInfoAndRolesByID(userId);
             taskDetailsDTO.setTaskOperationControl(this.initTaskPermission(project, crowdTestTask, user));
             // 区域管理员视图
             List<TaskToUserVO> taskToUserVOS = new ArrayList<>();
             if (userId.equals(project.getRegionalManagerId())) {
                 // 判断否存在配置项
-                Optional<EndPointPO> endPointPO = endPointDao.findByTaskCode(taskVO.getCode());
-                if(endPointPO.isPresent()){
-                    taskVO.setEndPointVO(new EndPointVO(Converter.convert(EndPoint.class, endPointPO.get())));
+                if(endPoint != null){
+                    taskVO.setEndPointVO(new EndPointVO(endPoint));
                 }
 
                 taskToUserVOS = crowdTestTask.getAcceptedUserList().stream().map(taskToUser -> {
@@ -1019,12 +1018,10 @@ public class WebMediatorImpl implements ViewMediator {
             }
             taskDetailsDTO.setAcceptedUserList(taskToUserVOS);
 
-            Optional<EndPointPO> endPointPOOptional = endPointDao.findByTaskCode(crowdTestTask.getCode());
             // 判断是否具有配置项,提供跳转url
-            if(endPointPOOptional.isPresent()){
+            if(endPoint != null){
                 // 获取测试类型对应的跳转url
-                String reportUrl = endPointPOOptional.get().getUrl().replace("userId", String.valueOf(userId));
-                taskVO.setWriteReportUrl(reportUrl);
+                taskVO.setWriteReportUrl(endPoint.getUrl());
             }
         }
 
@@ -1689,7 +1686,8 @@ public class WebMediatorImpl implements ViewMediator {
     }
 
     private TaskOperationControl initTaskPermission(CrowdTestProject project, CrowdTestTask task, User user) {
-        Optional<EndPointPO> endPointPOOptional = endPointDao.findByTaskCode(task.getCode());
+//        Optional<EndPointPO> endPointPOOptional = endPointDao.findByTaskCode(task.getCode());
+        EndPoint endPoint = task.getEndPoint();
         TaskOperationControl taskOperationControl = new TaskOperationControl();
 
         // 用户未登录,无其他操作权限
@@ -1710,8 +1708,8 @@ public class WebMediatorImpl implements ViewMediator {
 
         // 任务已结束,如果存在配置项的任务展示token则显示 任务面板按钮
         if(task.getStatus() == CrowdTestTaskStatus.HAS_FINISHED){
-            if(endPointPOOptional.isPresent()){
-                if(endPointPOOptional.get().getToken() != null &&  !endPointPOOptional.get().getToken().equals("")){
+            if(endPoint != null){
+                if(endPoint.getToken() != null &&  !endPoint.getToken().equals("")){
                     taskOperationControl.setTaskDemonstrate(true);
                 }
             }
@@ -1727,7 +1725,7 @@ public class WebMediatorImpl implements ViewMediator {
                     taskOperationControl.setUpdate(true);
                     taskOperationControl.setTaskRecommend(true);
                     // 具有配置项,需要在第三方进行填写报告
-                    if(endPointPOOptional.isPresent()){
+                    if(endPoint != null){
                         taskOperationControl.setWriteReport(true);
                     }
                 }
@@ -1745,11 +1743,11 @@ public class WebMediatorImpl implements ViewMediator {
                         taskOperationControl.setTaskRecommend(false);
                     }
                     // 具有配置项,需要在第三方进行填写报告;可以填写报告、上传报告、确认结束
-                    if(endPointPOOptional.isPresent()){
+                    if(endPoint != null){
                         taskOperationControl.setWriteReport(true);
                         taskOperationControl.setUploadReport(true);
                         taskOperationControl.setConfirmFinish(true);
-                        if(endPointPOOptional.get().getToken() != null &&  !endPointPOOptional.get().getToken().equals("")){
+                        if(endPoint.getToken() != null &&  !endPoint.getToken().equals("")){
                             taskOperationControl.setTaskDemonstrate(true);
                         }
                     }
@@ -1792,7 +1790,7 @@ public class WebMediatorImpl implements ViewMediator {
                             }
 
                             // 具有配置项,需要在第三方进行填写报告
-                            if(endPointPOOptional.isPresent()){
+                            if(endPoint != null){
                                 taskOperationControl.noAll();
                                 taskOperationControl.setWriteReport(true);
                             }

+ 4 - 8
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTaskServiceImpl.java

@@ -221,7 +221,7 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
     @Override
     public TaskDetailsDTO createTask(String projectCode, CrowdTestTaskCommand command, Long userId) {
         CrowdTestTask task = command.toCrowdTask(projectCode);
-        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        CrowdTestProject project = projectRepo.getByProjectCodeJustInfo(projectCode);
         String taskCode = GenerateFlowCodeUtil.generateFlowCode("TASK-" + ProjectType.getCode(command.getType()));
         task.create(taskCode);
 
@@ -246,10 +246,6 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
         task.setEndPoint(endPoint);
         project.addTask(task);
         projectRepo.saveCrowdTestProject(project);
-
-//        // 生成任务导出链接
-//        String exportTaskUrl = this.exportTask(projectCode, task.getCode(), userId);
-//        task.setExportUrl(exportTaskUrl);
         return getTaskDetails(projectCode, taskCode, userId);
     }
 
@@ -276,7 +272,7 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
 
     @Override
     public String getWriteReportUrl(String projectCode, String taskCode, Long userId) {
-        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        CrowdTestProject project = projectRepo.getByProjectCodeAndTaskCode(projectCode, taskCode);
         CrowdTestTask task = this.getTaskByProjectAndTaskCode(project, taskCode);
         EndPoint endPoint = task.getEndPoint();
         return this.getForEntityReportUrl(userId, task, endPoint);
@@ -403,7 +399,7 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
 
     @Override
     public TaskDetailsDTO confirmFinish(String projectCode, String taskCode, Long userId) {
-        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        CrowdTestProject project = projectRepo.getByProjectCodeAndTaskCode(projectCode, taskCode);
         if (!project.getRegionalManagerId().equals(userId))
             throw new UnauthorizedException("无权限对此任务进行此操作");
         CrowdTestTask task = project.getTask(taskCode);
@@ -414,7 +410,7 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
 
     @Override
     public TaskDetailsDTO addToken(String projectCode, String taskCode, Long userId, String token) {
-        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        CrowdTestProject project = projectRepo.getByProjectCodeAndTaskCode(projectCode, taskCode);
         if (!project.getRegionalManagerId().equals(userId))
             throw new UnauthorizedException("无权限对此任务进行此操作");
         CrowdTestTask task = project.getTask(taskCode);