Ver Fonte

Merge branch 'feature-V2.0' into 'PrivateReleaseOfXC'

Feature v2.0

See merge request crowd-2019/crowd-test-service-backend!194
郭超 há 4 anos atrás
pai
commit
e937f69d2d
78 ficheiros alterados com 1747 adições e 2164 exclusões
  1. 0 570
      core/src/main/java/com/mooctest/crowd/domain/controller/CrowdTestProjectController.java
  2. 0 0
      core/src/main/java/com/mooctest/crowd/domain/controller/TestUserController.java
  3. 3 3
      core/src/main/java/com/mooctest/crowd/domain/dao/CrowdTestProjectDao.java
  4. 2 0
      core/src/main/java/com/mooctest/crowd/domain/dao/EndPointDao.java
  5. 1 1
      core/src/main/java/com/mooctest/crowd/domain/dao/EvaluationAgencyDao.java
  6. 1 1
      core/src/main/java/com/mooctest/crowd/domain/dao/PersonalAuthenticationDao.java
  7. 5 1
      core/src/main/java/com/mooctest/crowd/domain/dao/RoleDao.java
  8. 2 0
      core/src/main/java/com/mooctest/crowd/domain/dao/TaskToUserDao.java
  9. 2 0
      core/src/main/java/com/mooctest/crowd/domain/dao/UserToRoleDao.java
  10. 8 3
      core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestProject.java
  11. 14 12
      core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestTask.java
  12. 2 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/EndPoint.java
  13. 7 114
      core/src/main/java/com/mooctest/crowd/domain/domainobject/User.java
  14. 28 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/UserToRole.java
  15. 1 1
      core/src/main/java/com/mooctest/crowd/domain/domainobject/enums/AuthType.java
  16. 1 1
      core/src/main/java/com/mooctest/crowd/domain/domainobject/enums/DistributeType.java
  17. 27 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/enums/JudgeType.java
  18. 2 2
      core/src/main/java/com/mooctest/crowd/domain/domainobject/enums/RoleType.java
  19. 0 35
      core/src/main/java/com/mooctest/crowd/domain/domainservice/RegisterDService.java
  20. 12 0
      core/src/main/java/com/mooctest/crowd/domain/exception/AuthorizedTimeOutException.java
  21. 6 0
      core/src/main/java/com/mooctest/crowd/domain/model/EndPointPO.java
  22. 0 1
      core/src/main/java/com/mooctest/crowd/domain/repository/ApplicationTypeRepo.java
  23. 1 0
      core/src/main/java/com/mooctest/crowd/domain/repository/CommonRepo.java
  24. 161 113
      core/src/main/java/com/mooctest/crowd/domain/repository/CrowdTestProjectRepo.java
  25. 22 3
      core/src/main/java/com/mooctest/crowd/domain/repository/EvaluationAgencyRepo.java
  26. 8 19
      core/src/main/java/com/mooctest/crowd/domain/repository/ICrowdTestProjectRepo.java
  27. 2 0
      core/src/main/java/com/mooctest/crowd/domain/repository/IEvaluationAgencyRepo.java
  28. 10 14
      core/src/main/java/com/mooctest/crowd/domain/repository/IUserRepo.java
  29. 462 441
      core/src/main/java/com/mooctest/crowd/domain/repository/UserRepo.java
  30. 12 0
      site/pom.xml
  31. 12 0
      site/src/main/java/com/mooctest/crowd/site/SiteApplication.java
  32. 40 0
      site/src/main/java/com/mooctest/crowd/site/annotation/ApiDoc.java
  33. 106 0
      site/src/main/java/com/mooctest/crowd/site/anticorruption/WebLogAspect.java
  34. 4 3
      site/src/main/java/com/mooctest/crowd/site/anticorruption/impl/UserAntiCorruptionImpl.java
  35. 5 0
      site/src/main/java/com/mooctest/crowd/site/command/CrowdTestProjectCommand.java
  36. 29 29
      site/src/main/java/com/mooctest/crowd/site/command/CrowdTestTaskCommand.java
  37. 91 0
      site/src/main/java/com/mooctest/crowd/site/configuration/DataCache.java
  38. 1 1
      site/src/main/java/com/mooctest/crowd/site/controller/AgencyController.java
  39. 2 2
      site/src/main/java/com/mooctest/crowd/site/controller/CrowdProjectController.java
  40. 2 1
      site/src/main/java/com/mooctest/crowd/site/controller/CrowdReportController.java
  41. 25 2
      site/src/main/java/com/mooctest/crowd/site/controller/CrowdTaskController.java
  42. 6 90
      site/src/main/java/com/mooctest/crowd/site/controller/UserController.java
  43. 2 1
      site/src/main/java/com/mooctest/crowd/site/controller/interceptor/SysAdminCheckInterceptor.java
  44. 3 0
      site/src/main/java/com/mooctest/crowd/site/data/TaskOperationControl.java
  45. 2 0
      site/src/main/java/com/mooctest/crowd/site/data/dto/MyCrowdDTO.java
  46. 2 0
      site/src/main/java/com/mooctest/crowd/site/data/dto/TaskDetailsDTO.java
  47. 0 27
      site/src/main/java/com/mooctest/crowd/site/data/enums/BooleanType.java
  48. 5 5
      site/src/main/java/com/mooctest/crowd/site/data/vo/AgencyVO.java
  49. 0 9
      site/src/main/java/com/mooctest/crowd/site/data/vo/BaseAuthVO.java
  50. 3 2
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdProjectVO.java
  51. 9 1
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTaskVO.java
  52. 2 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/EndPointVO.java
  53. 20 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/ExamVO.java
  54. 0 1
      site/src/main/java/com/mooctest/crowd/site/data/vo/PersonalAuthVO.java
  55. 0 3
      site/src/main/java/com/mooctest/crowd/site/data/vo/StatusVO.java
  56. 0 2
      site/src/main/java/com/mooctest/crowd/site/data/vo/UserVO.java
  57. 6 20
      site/src/main/java/com/mooctest/crowd/site/mediator/ViewMediator.java
  58. 6 1
      site/src/main/java/com/mooctest/crowd/site/mediator/impl/OperationMediatorImpl.java
  59. 123 250
      site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java
  60. 1 3
      site/src/main/java/com/mooctest/crowd/site/service/AgencyService.java
  61. 0 3
      site/src/main/java/com/mooctest/crowd/site/service/CommonService.java
  62. 1 8
      site/src/main/java/com/mooctest/crowd/site/service/CrowdProjectService.java
  63. 1 1
      site/src/main/java/com/mooctest/crowd/site/service/CrowdReportService.java
  64. 7 0
      site/src/main/java/com/mooctest/crowd/site/service/CrowdTaskService.java
  65. 0 0
      site/src/main/java/com/mooctest/crowd/site/service/UserService.java
  66. 22 77
      site/src/main/java/com/mooctest/crowd/site/service/impl/AgencyServiceImpl.java
  67. 1 1
      site/src/main/java/com/mooctest/crowd/site/service/impl/AuthCheckServiceImpl.java
  68. 19 12
      site/src/main/java/com/mooctest/crowd/site/service/impl/CommonServiceImpl.java
  69. 35 55
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdProjectServiceImpl.java
  70. 9 9
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdReportServiceImpl.java
  71. 180 40
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTaskServiceImpl.java
  72. 6 7
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTestSquareServiceImpl.java
  73. 3 2
      site/src/main/java/com/mooctest/crowd/site/service/impl/TechnicalArticlesServiceImpl.java
  74. 0 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/UserServiceImpl.java
  75. 1 1
      site/src/main/java/com/mooctest/crowd/site/util/GenerateFlowCodeUtil.java
  76. 41 160
      site/src/main/resources/application.yml
  77. 112 0
      site/src/main/resources/logback.xml
  78. BIN
      tool4deploy/site-0.0.1-SNAPSHOT.jar

+ 0 - 570
core/src/main/java/com/mooctest/crowd/domain/controller/CrowdTestProjectController.java

@@ -1,570 +0,0 @@
-package com.mooctest.crowd.domain.controller;
-
-import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
-import com.mooctest.crowd.domain.repository.UserRepo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author guochao
- * @date 2019-07-27 15:46
- */
-
-@RestController
-@RequestMapping("/project/")
-public class CrowdTestProjectController {
-
-
-
-//    @RequestMapping(value = "findById/{crowdTestProjectId}", method = RequestMethod.GET)
-//    public String getCrowdTestProjectById(@PathVariable("crowdTestProjectId") Long crowdTestProjectId){
-//        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByID(crowdTestProjectId);
-//        return crowdTestProject.toString();
-//    }
-//
-//    @RequestMapping(value = "findByProjectCode/{crowdTestProjectCode}", method = RequestMethod.GET)
-//    public String getCrowdTestProjectByProjectCode(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode){
-//        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
-//        return crowdTestProject.toString();
-//    }
-//
-//    @RequestMapping(value = "findByUserId/{userId}", method = RequestMethod.GET)
-//    public String getAllCrowdTestProjectByUserId(@PathVariable("userId") Long userId){
-//        List<CrowdTestProject> allCrowdTestProject = crowdTestProjectRepo.getCrowdListByUserId(userId);
-//        return allCrowdTestProject.toString();
-//    }
-//
-//    @RequestMapping(value = "findByRMId/{regionalManagerId}", method = RequestMethod.GET)
-//    public String getAllCrowdTestProjectByRMId(@PathVariable("regionalManagerId") Long regionalManagerId){
-//        List<CrowdTestProject> allCrowdTestProject = crowdTestProjectRepo.getCrowdListByRegionalManagerId(regionalManagerId);
-//        return allCrowdTestProject.toString();
-//    }
-//
-//    @RequestMapping(value = "findAll", method = RequestMethod.GET)
-//    public String getAllCrowdTestProject(){
-//        List<CrowdTestProject> allCrowdTestProject = crowdTestProjectRepo.getAllCrowdTestProject();
-//        return allCrowdTestProject.toString();
-//    }
-//
-//    /**
-//     * 删除项目(普通用户)
-//     * @param crowdTestProjectCode
-//     * @return
-//     */
-//    @RequestMapping(value = "deleteProject/{userId}/{crowdTestProjectCode}", method = RequestMethod.GET)
-//    public String deleteCrowdTestProjectByProjectCode(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode,@PathVariable("userId") Long userId) {
-//
-//        User user = userRepo.getByID(userId);
-//        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
-//        CrowdTestProject crowdTestProjectResult = crowdTestProject.removeCrowdTestProject(user);
-//        crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
-//        return "success";
-//    }
-//
-//    /**
-//     * 删除任务(区域管理员)
-//     * @param crowdTestProjectCode
-//     * @param crowdTestTaskCode
-//     * @return
-//     */
-//    @RequestMapping(value = "deleteTask/{userId}/{crowdTestProjectCode}/{crowdTestTaskCode}", method = RequestMethod.GET)
-//    public String deleteCrowdTestTask(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode,
-//                                      @PathVariable("crowdTestTaskCode") String crowdTestTaskCode,
-//                                      @PathVariable("userId") Long userId) {
-//        User user = userRepo.getByID(userId);
-//        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
-//        CrowdTestProject crowdTestProjectResult = crowdTestProject.removeCrowdTestTask(crowdTestTaskCode,user);
-//        crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
-//        return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
-//    }
-//
-//    /**
-//     * 删除任务报告(测评机构)
-//     * @param crowdTestProjectCode
-//     * @param crowdTestTaskCode
-//     * @param crowdTestReportCode
-//     * @return
-//     */
-//    @RequestMapping(value = "deleteReport/{userId}/{crowdTestProjectCode}/{crowdTestTaskCode}/{crowdTestReportCode}", method = RequestMethod.GET)
-//    public String deleteCrowdTestReport(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode,
-//                                        @PathVariable("crowdTestTaskCode") String crowdTestTaskCode,
-//                                        @PathVariable("crowdTestReportCode") String crowdTestReportCode,
-//                                        @PathVariable("userId") Long userId) {
-//        User user = userRepo.getByID(userId);
-//        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
-//        CrowdTestProject crowdTestProjectResult = crowdTestProject.removeCrowdTestReport(crowdTestTaskCode,crowdTestReportCode,user);
-//        crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
-//        return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
-//    }
-//
-//    /**
-//     * 删除项目报告(区域管理员)
-//     * @param crowdTestProjectCode
-//     * @return
-//     */
-//    @RequestMapping(value = "deleteProjectReport/{userId}/{crowdTestProjectCode}/{crowdTestProjectReportCode}", method = RequestMethod.GET)
-//    public String deleteCrowdTestReport(@PathVariable("userId") Long userId,
-//                                        @PathVariable("crowdTestProjectCode") String crowdTestProjectCode,
-//                                        @PathVariable("crowdTestProjectReportCode") String crowdTestProjectReportCode) {
-//        User user = userRepo.getByID(userId);
-//        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
-//        CrowdTestProject crowdTestProjectResult = crowdTestProject.removeCrowdTestProjectReport(crowdTestProjectReportCode,user);
-//        crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
-//        return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
-//    }
-//
-//
-//    @RequestMapping(value = "deleteListByProjectCode/{crowdTestProjectCode1}/{crowdTestProjectCode2}", method = RequestMethod.GET)
-//    public void deleteCrowdTestProjectByProjectCode(@PathVariable("crowdTestProjectCode1") String crowdTestProjectCode1,
-//                                                    @PathVariable("crowdTestProjectCode2") String crowdTestProjectCode2) {
-//        CrowdTestProject crowdTestProject1 = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode1);
-//        CrowdTestProject crowdTestProject2 = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode2);
-//        List<CrowdTestProject> crowdTestProjectList = new ArrayList<>();
-//        crowdTestProjectList.add(crowdTestProject1);
-//        crowdTestProjectList.add(crowdTestProject2);
-//        crowdTestProjectRepo.removeCrowdTestProjectList(crowdTestProjectList);
-//    }
-//
-//
-//    /**
-//     * 对项目聚合根的操作
-//     */
-//
-//    @RequestMapping(value = "modifyProject/{crowdTestProjectCode}/{linkMan}", method = RequestMethod.GET)
-//    public void modifyCrowdTestProject(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode,@PathVariable("linkMan") String linkMan){
-//        CrowdTestProject crowdTestProjectModify;
-//
-//        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
-//        Gson gson = new Gson();
-//        crowdTestProjectModify = gson.fromJson(gson.toJson(crowdTestProject), CrowdTestProject.class);
-//        crowdTestProjectModify.setLinkMan(linkMan);
-//        CrowdTestProject updateCrowdTestProject = crowdTestProject.updateCrowdTestProject(crowdTestProjectModify);
-//        crowdTestProjectRepo.saveCrowdTestProject(updateCrowdTestProject);
-//    }
-//
-//
-//    @RequestMapping(value = "modifyTask/{crowdTestProjectCode}/{crowdTestTaskCode}/{taskName}", method = RequestMethod.GET)
-//    public void modifyCrowdTestTask(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode, @PathVariable("crowdTestTaskCode") String crowdTestTaskCode,
-//                                      @PathVariable("taskName") String taskName){
-//        CrowdTestTask crowdTestTaskModify = new CrowdTestTask();
-//        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
-//        List<CrowdTestTask> crowdTestTaskList = crowdTestProject.getCrowdTestTaskList();
-//        for(CrowdTestTask crowdTestTaskSelect : crowdTestTaskList){
-//            if(crowdTestTaskCode.equals(crowdTestTaskSelect.getCode())){
-//                // 使用Gson序列化进行深拷贝
-//                Gson gson = new Gson();
-//                crowdTestTaskModify = gson.fromJson(gson.toJson(crowdTestTaskSelect), CrowdTestTask.class);
-//            }
-//        }
-//        crowdTestTaskModify.setName(taskName);
-//        CrowdTestProject updateCrowdTestProject = crowdTestProject.updateCrowdTestTask(crowdTestTaskCode, crowdTestTaskModify);
-//        crowdTestProjectRepo.saveCrowdTestProject(updateCrowdTestProject);
-//    }
-//
-////    @RequestMapping(value = "modifyReport/{crowdTestProjectCode}/{crowdTestTaskCode}/{crowdTestReportCode}/{reportName}", method = RequestMethod.GET)
-////    public void modifyCrowdTestReport(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode, @PathVariable("crowdTestTaskCode") String crowdTestTaskCode,
-////                                      @PathVariable("crowdTestReportCode") String crowdTestReportCode, @PathVariable("reportName") String reportName){
-////        CrowdTestReport crowdTestReportModify = new CrowdTestReport();
-////        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
-////        for(CrowdTestTask crowdTestTask : crowdTestProject.getCrowdTestTaskList()){
-////            if(crowdTestTaskCode.equals(crowdTestTask.getCode())){
-////                for(CrowdTestReport crowdTestReport : crowdTestTask.getCrowdTestReportList()){
-////                    if(crowdTestReportCode.equals(crowdTestReport.getCode())){
-////                        Gson gson = new Gson();
-////                        crowdTestReportModify = gson.fromJson(gson.toJson(crowdTestReport), CrowdTestReport.class);
-////                    }
-////                }
-////            }
-////        }
-////        crowdTestReportModify.setName(reportName);
-////        CrowdTestProject updateCrowdTestProject = crowdTestProject.updateCrowdTestReport(crowdTestTaskCode, crowdTestReportCode, crowdTestReportModify);
-////        crowdTestProjectRepo.saveCrowdTestProject(updateCrowdTestProject);
-////    }
-//
-//    /*普通用户DO*/
-//    /**
-//     * 新建项目(普通用户)
-//     * @param userId
-//     * @param projectName
-//     * @return
-//     */
-//    @RequestMapping(value = "createProject/{userId}/{projectName}", method = RequestMethod.GET)
-//    public String createCrowdTestProject(@PathVariable("userId") Long userId,@PathVariable("projectName") String projectName){
-//        //数据准备
-//        CrowdTestProject crowdTestProject = new CrowdTestProject();
-//        crowdTestProject.setCode("PRO"+System.currentTimeMillis());
-//        crowdTestProject.setName(projectName);
-//        crowdTestProject.setProjectDistributionTypeId(1L);
-//        crowdTestProject.setLinkMan("郭超");
-//        crowdTestProject.setApplicationType("IOS");
-//        crowdTestProject.setType("安卓测试");
-//        crowdTestProject.setDescription("测试内容");
-//        crowdTestProject.setLinkManMobile("13657094936");
-//        crowdTestProject.setQuotedPrice(200.00);
-//        crowdTestProject.setDeadTime(new Timestamp(getNextDay(new Date(System.currentTimeMillis()),1).getTime()));
-//
-//        User user = userRepo.getByID(userId);
-//        crowdTestProject.setUserId(user.getId());
-//        crowdTestProject.setDistributionProvince(user.getProvince());
-//        crowdTestProject.setDistributionCity(user.getCity());
-//
-//        CrowdTestProject crowdTestProjectResult = crowdTestProject.createCrowdTestProject(user);
-//        crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
-//        return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
-//    }
-//
-//    /**
-//     * 发布项目(普通用户)
-//     * @param userId
-//     * @param crowdTestProjectCode
-//     * @return
-//     */
-//    @RequestMapping(value = "releaseProject/{userId}/{crowdTestProjectCode}", method = RequestMethod.GET)
-//    public String releaseCrowdTestProject(@PathVariable("userId") Long userId,@PathVariable("crowdTestProjectCode") String crowdTestProjectCode){
-//        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
-//        User user = userRepo.getByID(userId);
-//        CrowdTestProject  crowdTestProjectResult = crowdTestProject.releaseCrowdTestProject(user);
-//        crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
-//        return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
-//    }
-//
-//
-//    /**
-//     * 对区域管理员的操作
-//     */
-//
-//
-//    /**
-//     * 接收项目(区域管理员)
-//     * @param userForRegionalManagerId
-//     * @param crowdTestProjectCode
-//     * @return
-//     */
-//    @RequestMapping(value = "receiveProject/{userForRegionalManagerId}/{crowdTestProjectCode}", method = RequestMethod.GET)
-//    public String receiveTaskByProjectCode(@PathVariable("userForRegionalManagerId") Long userForRegionalManagerId, @PathVariable("crowdTestProjectCode") String crowdTestProjectCode) {
-//        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
-//
-//        User userForRegionalManager = userRepo.getByID(userForRegionalManagerId);
-////        RegionalManager regionalManager = userForRegionalManager.getRegionalManager();
-////        CrowdTestProject crowdTestProjectResult = regionalManager.receiveProject(crowdTestProject);
-//
-//        CrowdTestProject crowdTestProjectResult = crowdTestProject.receiveProject(userForRegionalManager);
-//        crowdTestProjectResult.setRegionalManagerId(userForRegionalManagerId);
-//        crowdTestProjectRepo.saveCrowdTestProject(crowdTestProject);
-//        return crowdTestProjectResult.toString();
-//    }
-//
-//
-//    /**
-//     * 项目中新建任务(区域管理员拆分项目)
-//     * @param crowdTestProjectCode
-//     * @param taskName
-//     * @return
-//     */
-//    @RequestMapping(value = "createTask/{regionalManagerId}/{crowdTestProjectCode}/{taskName}", method = RequestMethod.GET)
-//    public String createCrowdTestTask(@PathVariable("regionalManagerId") Long regionalManagerId,@PathVariable("crowdTestProjectCode") String crowdTestProjectCode,@PathVariable("taskName") String taskName){
-//        //数据准备
-//        CrowdTestTask crowdTestTask = new CrowdTestTask();
-//        crowdTestTask.setCode(crowdTestProjectCode+"_TASK"+System.currentTimeMillis());
-//        crowdTestTask.setName(taskName);
-//        crowdTestTask.setCrowdTestProjectCode(crowdTestProjectCode);
-//        crowdTestTask.setType("接口测试");
-//        crowdTestTask.setDescription("测试任务");
-//        crowdTestTask.setDistributionType(0L);
-//        crowdTestTask.setQuotedPrice(200.00);
-//        crowdTestTask.setDeadTime(new Timestamp(getNextDay(new Date(System.currentTimeMillis()),1).getTime()));
-//        crowdTestTask.setCreateTime(new Timestamp(System.currentTimeMillis()));
-//
-//        //具体操作
-//        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
-//
-//        User userForRegionalManager = userRepo.getByID(regionalManagerId);
-////        RegionalManager regionalManager = userForRegionalManager.getRegionalManager();
-////        CrowdTestProject crowdTestProjectResult = regionalManager.createCrowdTestTask(crowdTestProject, crowdTestTask);
-//        CrowdTestProject crowdTestProjectResult = crowdTestProject.createCrowdTestTask(crowdTestTask, userForRegionalManager);
-//        crowdTestTask.setDistributionProvince(crowdTestProject.getDistributionProvince());
-//        crowdTestTask.setDistributionCity(crowdTestProject.getDistributionCity());
-//        crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
-//        return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
-//    }
-//
-//    /**
-//     * 发布任务(区域管理员)
-//     * @param crowdTestProjectCode
-//     * @return
-//     */
-//    @RequestMapping(value = "releaseTask/{regionalManagerId}/{crowdTestProjectCode}/{crowdTestTaskCode}", method = RequestMethod.GET)
-//    public String releaseCrowdTestTask(@PathVariable("regionalManagerId") Long regionalManagerId,@PathVariable("crowdTestProjectCode") String crowdTestProjectCode,
-//                                       @PathVariable("crowdTestTaskCode") String crowdTestTaskCode){
-//        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
-//        User user = userRepo.getByID(regionalManagerId);
-//        CrowdTestProject crowdTestProjectResult = crowdTestProject.releaseCrowdTestTask(crowdTestTaskCode, user);
-//        crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
-//        return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
-//    }
-//
-//    /**
-//     * 对测评机构的操作
-//     */
-//
-//    /**
-//     * 接收任务(测评机构)
-//     * @param userForEvaluationAgencyId
-//     * @param crowdTestProjectCode
-//     * @param crowdTestTaskCode
-//     * @return
-//     */
-//    @RequestMapping(value = "receiveTask/{userForEvaluationAgencyId}/{crowdTestProjectCode}/{crowdTestTaskCode}", method = RequestMethod.GET)
-//    public String receiveTaskByProjectCode(@PathVariable("userForEvaluationAgencyId") Long userForEvaluationAgencyId, @PathVariable("crowdTestProjectCode") String crowdTestProjectCode,
-//                                                    @PathVariable("crowdTestTaskCode") String crowdTestTaskCode) {
-//        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
-//
-//        User userForEvaluationAgency = userRepo.getByID(userForEvaluationAgencyId);
-////        CrowdTestProject crowdTestProjectResult = userForEvaluationAgency.receiveTask(crowdTestProject, crowdTestTaskCode);
-//
-//        CrowdTestProject crowdTestProjectResult = crowdTestProject.receiveTask(crowdTestTaskCode, userForEvaluationAgency);
-//
-//        crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
-//        return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
-//    }
-//
-//    /**
-//     * 项目的任务中新建报告(测评机构)
-//     * @param crowdTestProjectCode
-//     * @param reportName
-//     * @return
-//     */
-//    @RequestMapping(value = "createReport/{userForEvaluationAgencyId}/{crowdTestProjectCode}/{crowdTestTaskCode}/{reportName}", method = RequestMethod.GET)
-//    public String createCrowdTestReport(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode,@PathVariable("userForEvaluationAgencyId") Long userForEvaluationAgencyId,
-//                                        @PathVariable("reportName") String reportName, @PathVariable("crowdTestTaskCode") String crowdTestTaskCode){
-//
-//
-//        //report数据准备
-//        CrowdTestReport crowdTestReport = new CrowdTestReport();
-//        crowdTestReport.setCode(crowdTestTaskCode+"_REP"+System.currentTimeMillis());
-//        crowdTestReport.setName(reportName);
-//        crowdTestReport.setCreateTime(new Timestamp(System.currentTimeMillis()));
-//
-//        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
-//        User userForEvaluationAgency = userRepo.getByID(userForEvaluationAgencyId);
-////        CrowdTestProject crowdTestProjectResult = userForEvaluationAgency.createCrowdTestReport(crowdTestProject, crowdTestTaskCode, crowdTestReport);
-//        CrowdTestProject crowdTestProjectResult = crowdTestProject.createCrowdTestReport(crowdTestTaskCode, crowdTestReport, userForEvaluationAgency);
-//
-//        crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
-//        return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
-//    }
-//
-//    /**
-//     * 提交任务(测评机构)
-//     * @param crowdTestProjectCode
-//     * @param userForEvaluationAgencyId
-//     * @param crowdTestTaskCode
-//     * @return
-//     */
-//    @RequestMapping(value = "commitTask/{userForEvaluationAgencyId}/{crowdTestProjectCode}/{crowdTestTaskCode}", method = RequestMethod.GET)
-//    public String commitCrowdTestReport(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode,@PathVariable("userForEvaluationAgencyId") Long userForEvaluationAgencyId,
-//                                        @PathVariable("crowdTestTaskCode") String crowdTestTaskCode){
-//
-//        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
-//        User userForEvaluationAgency = userRepo.getByID(userForEvaluationAgencyId);
-////        CrowdTestProject crowdTestProjectResult = userForEvaluationAgency.commitCrowdTestTask(crowdTestProject, crowdTestTaskCode);
-//
-//        CrowdTestProject crowdTestProjectResult = crowdTestProject.commitCrowdTestTask(crowdTestTaskCode, userForEvaluationAgency);
-//
-//        crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
-//        return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
-//    }
-//
-//    /**
-//     * 区域管理员的操作
-//     */
-//
-//
-//    /**
-//     * 确认结束任务(区域管理员)
-//     * @param crowdTestProjectCode
-//     * @return
-//     */
-//    @RequestMapping(value = "finishTask/{regionalManagerId}/{crowdTestProjectCode}/{crowdTestTaskCode}", method = RequestMethod.GET)
-//    public String commitCrowdTestTask(@PathVariable("regionalManagerId") Long regionalManagerId,@PathVariable("crowdTestProjectCode") String crowdTestProjectCode,
-//                                      @PathVariable("crowdTestTaskCode") String crowdTestTaskCode){
-//        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
-//        User user = userRepo.getByID(regionalManagerId);
-//        CrowdTestProject crowdTestProjectResult = crowdTestProject.finishCrowdTestTask(crowdTestTaskCode,user);
-//        crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
-//        return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
-//    }
-//
-//    /**
-//     * 创建项目报告(区域管理员)
-//     * @param crowdTestProjectCode
-//     * @return
-//     */
-//    @RequestMapping(value = "createProjectReport/{regionalManagerId}/{crowdTestProjectCode}/{projectReportName}", method = RequestMethod.GET)
-//    public String createCrowdTestReport(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode,
-//                                        @PathVariable("regionalManagerId") Long regionalManagerId,
-//                                        @PathVariable("projectReportName") String projectReportName){
-//
-//        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
-//
-//        //report数据准备
-//        CrowdTestReport crowdTestReport = new CrowdTestReport();
-//        crowdTestReport.setCode(crowdTestProjectCode+"_REP"+System.currentTimeMillis());
-//        crowdTestReport.setName(projectReportName);
-//        crowdTestReport.setDependencyCode(crowdTestProjectCode);
-//        crowdTestReport.setCreateTime(new Timestamp(System.currentTimeMillis()));
-//
-//        User userForRegionalManager = userRepo.getByID(regionalManagerId);
-////        RegionalManager regionalManager = userForRegionalManager.getRegionalManager();
-////        CrowdTestProject crowdTestProjectResult = regionalManager.createCrowdTestProjectReport(crowdTestProject, crowdTestReport);
-//
-//        CrowdTestProject crowdTestProjectResult = crowdTestProject.createCrowdTestProjectReport(crowdTestReport, userForRegionalManager);
-//        crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
-//        return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
-//    }
-//
-//    /**
-//     * 提交项目(区域管理员)
-//     * @param crowdTestProjectCode
-//     * @return
-//     */
-//    @RequestMapping(value = "commitProject/{regionalManagerId}/{crowdTestProjectCode}", method = RequestMethod.GET)
-//    public String commitProject(@PathVariable("regionalManagerId") Long regionalManagerId,@PathVariable("crowdTestProjectCode") String crowdTestProjectCode){
-//        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
-//        User userForRegionalManager = userRepo.getByID(regionalManagerId);
-////        RegionalManager regionalManager = userForRegionalManager.getRegionalManager();
-////        CrowdTestProject crowdTestProjectResult = regionalManager.commitCrowdTestProject(crowdTestProject);
-//        CrowdTestProject crowdTestProjectResult = crowdTestProject.commitCrowdTestProject(userForRegionalManager);
-//        crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
-//        return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
-//    }
-//
-//    /**
-//     * 对普通用户的操作
-//     */
-//
-//    /**
-//     * 结束项目(普通用户)
-//     * @param crowdTestProjectCode
-//     * @return
-//     */
-//    @RequestMapping(value = "finishProject/{userId}/{crowdTestProjectCode}", method = RequestMethod.GET)
-//    public String finishProject(@PathVariable("userId") Long userId,@PathVariable("crowdTestProjectCode") String crowdTestProjectCode){
-//        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
-//        User user = userRepo.getByID(userId);
-////        CrowdTestProject crowdTestProjectResult = user.finishCrowdTestProject(crowdTestProject);
-//        CrowdTestProject crowdTestProjectResult = crowdTestProject.finishCrowdTestProject(user);
-//        crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
-//        return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
-//    }
-//
-//
-//    @RequestMapping(value = "getNum", method = RequestMethod.GET)
-//    public String getNum(){
-//        return "项目数:" + crowdTestProjectRepo.getAllProjectNum() + " 任务数:" + crowdTestProjectRepo.getAllTaskNum() + " 报告数:" + crowdTestProjectRepo.getAllReportNum() ;
-//    }
-//
-//    /**
-//     * 计算指定时间的后几天
-//     */
-//    private Date getNextDay(Date date, int day){
-//        //计算相关的时间间隔
-//        long addTime = 24*3600*1000;
-//        addTime *= day;
-//        //把时间间隔转换为毫秒数
-//        Date nextDate=new Date(date.getTime() + addTime);
-//        return nextDate;
-//    }
-//
-//    /**
-//     * 计算指定时间的前几天
-//     */
-//    private Date getBeforeDay(Date date, int day){
-//        //计算相关的时间间隔
-//        long subTime = 24*3600*1000;
-//        subTime *= day;
-//        //把时间间隔转换为毫秒数
-//        Date beforeDate=new Date(date.getTime() - subTime);
-//        return beforeDate;
-//    }
-//
-//    /**
-//     * 大陆手机号码11位数,匹配格式:前三位固定格式+后8位任意数
-//     * 此方法中前三位格式有:
-//     * 13+任意数
-//     * 15+除4的任意数
-//     * 18+除1和4的任意数
-//     * 17+除9的任意数
-//     * 147
-//     */
-//    private boolean isChinaPhoneLegal(String str) throws PatternSyntaxException {
-//        String regExp = "^((13[0-9])|(15[^4])|(18[0,2,3,5-9])|(17[0-8])|(147))\\d{8}$";
-//        Pattern p = Pattern.compile(regExp);
-//        Matcher m = p.matcher(str);
-//        return m.matches();
-//    }
-//
-//    /**
-//     * 香港手机号码8位数,5|6|8|9开头+7位任意数
-//     */
-//    private boolean isHKPhoneLegal(String str)throws PatternSyntaxException {
-//        String regExp = "^(5|6|8|9)\\d{7}$";
-//        Pattern p = Pattern.compile(regExp);
-//        Matcher m = p.matcher(str);
-//        return m.matches();
-//    }
-//
-//    /**
-//     * 座机号
-//     */
-//    private boolean isTel(String str)throws PatternSyntaxException {
-//        String regExp = "^0[1-9](\\d{1,2}\\-?)\\d{7,8}";
-//        Pattern p = Pattern.compile(regExp);
-//        Matcher m = p.matcher(str);
-//        return m.matches();
-//    }
-//
-//    /**
-//     * 判断手机号或者座机是正确
-//     * @param phone
-//     * @return
-//     */
-//    private boolean isRightPhone(String phone){
-//        if(phone.startsWith("0")){
-//            if(!isTel(phone)){
-//                return false;
-//            }
-//        }else{
-//            if(!(isChinaPhoneLegal(phone) || isHKPhoneLegal(phone))){
-//                return false;
-//            }
-//        }
-//        return true;
-//    }
-//
-//    /**
-//     * 匹配平台类型 0,1,2 任意  ^[0-2](([,][0-2])?([,][0-2])?)$
-//     */
-//    private boolean isApplicationType(String str)throws PatternSyntaxException {
-//        String regExp = "^[0-2](([,][0-2])?([,][0-2])?)$";
-//        Pattern p = Pattern.compile(regExp);
-//        Matcher m = p.matcher(str);
-//        return m.matches();
-//    }
-//
-//    /**
-//     * 匹配项目类型 0,1,2,3,4,5,6 任意  ^[0-6](([,][0-6])?([,][0-6])?([,][0-6])?([,][0-6])?([,][0-6])?([,][0-6])?)$
-//     */
-//    private boolean isType(String str)throws PatternSyntaxException {
-//        String regExp = "^[0-6](([,][0-6])?([,][0-6])?([,][0-6])?([,][0-6])?([,][0-6])?([,][0-6])?)$";
-//        Pattern p = Pattern.compile(regExp);
-//        Matcher m = p.matcher(str);
-//        return m.matches();
-//    }
-//
-//    @RequestMapping(value = "getAllNum", method = RequestMethod.GET)
-//    public String getAllUserNum(){
-//        return "用户数:" + userRepo.getAllUserNum() + " 测评机构数:" + userRepo.getAllAgencyNum() + " 测试资源数量:" + userRepo.getAllResourceNum() ;
-//    }
-}

Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
core/src/main/java/com/mooctest/crowd/domain/controller/TestUserController.java


+ 3 - 3
core/src/main/java/com/mooctest/crowd/domain/dao/CrowdTestProjectDao.java

@@ -35,15 +35,15 @@ public interface CrowdTestProjectDao extends CrudRepository<CrowdTestProjectPO,
     List<CrowdTestProjectPO> findAll();
 
     //广场查找项目
-    @Query(value = "SELECT * FROM crowd_test_project p WHERE CTP_STATUS = 1 and CTP_PDT_ID = 2 and CTP_NAME LIKE ?1 and CTP_IS_DELETED = 0 ORDER BY CTP_CREATE_TIME DESC", nativeQuery = true)
+    @Query(value = "SELECT * FROM crowd_test_project p WHERE CTP_STATUS = 1 and CTP_PDT_ID = 2 and CTP_PDT_ID != 0 and CTP_NAME LIKE ?1 and CTP_IS_DELETED = 0 ORDER BY CTP_CREATE_TIME DESC", nativeQuery = true)
     List<CrowdTestProjectPO> findWaitingAcceptByNameLike(String name);
 
     //这个指定了查询条数 适用于众测广场首页
-    @Query(value = "SELECT * FROM crowd_test_project p WHERE CTP_STATUS =1 and CTP_PDT_ID = 2 and CTP_IS_DELETED = 0 ORDER BY CTP_CREATE_TIME DESC LIMIT ?1", nativeQuery = true)
+    @Query(value = "SELECT * FROM crowd_test_project p WHERE CTP_STATUS =1 and CTP_PDT_ID = 2 and CTP_PDT_ID != 0 and CTP_IS_DELETED = 0 ORDER BY CTP_CREATE_TIME DESC LIMIT ?1", nativeQuery = true)
     List<CrowdTestProjectPO> findSquareIndexProject(int indexCount);
 
     //适用于众测广场 指定了查询热门项目卡片显示的数量
-    @Query(value = "SELECT * FROM crowd_test_project p WHERE CTP_STATUS !=4 and CTP_STATUS !=5 and CTP_IS_DELETED = 0 ORDER BY CTP_JOIN_COUNT DESC ,CTP_CREATE_TIME DESC LIMIT ?1 ", nativeQuery = true)
+    @Query(value = "SELECT * FROM crowd_test_project p WHERE CTP_STATUS !=4 and CTP_STATUS !=5 and CTP_PDT_ID != 0 and CTP_IS_DELETED = 0 ORDER BY CTP_JOIN_COUNT DESC ,CTP_CREATE_TIME DESC LIMIT ?1 ", nativeQuery = true)
     List<CrowdTestProjectPO> findHotProjectCardLimitCount(int projectCount);
 
     //更多热门项目

+ 2 - 0
core/src/main/java/com/mooctest/crowd/domain/dao/EndPointDao.java

@@ -17,6 +17,8 @@ import java.util.Optional;
 public interface EndPointDao extends PagingAndSortingRepository<EndPointPO, Long> ,CrudRepository<EndPointPO, Long>, JpaRepository<EndPointPO, Long> ,JpaSpecificationExecutor<EndPointPO>{
     Optional<EndPointPO> findByTaskCode(String code);
 
+    Optional<EndPointPO> findByExamId(String examId);
+
     @Modifying
     @Query(nativeQuery = true,value="delete from end_point where EP_T_CODE=?")
     void deleteEndPoint(@Param("taskCode") String code);

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

@@ -15,7 +15,7 @@ public interface EvaluationAgencyDao extends PagingAndSortingRepository<Evaluati
 
     EvaluationAgencyPO findByUserId(Long userId);
 
-    EvaluationAgencyPO findByUserIdAndIsDeleted(Long userId, int deletedStatus);
+    Optional<EvaluationAgencyPO> findByUserIdAndIsDeleted(Long userId, int deletedStatus);
 
     List<EvaluationAgencyPO> findByIsAuthentication(int isAuthentication);
 

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

@@ -17,7 +17,7 @@ public interface PersonalAuthenticationDao extends PagingAndSortingRepository<Pe
 
     PersonalAuthenticationPO findByUserId(Long userId);
 
-    PersonalAuthenticationPO findByUserIdAndIsDeleted(Long userId, int deletedStatus);
+    Optional<PersonalAuthenticationPO> findByUserIdAndIsDeleted(Long userId, int deletedStatus);
 
     List<PersonalAuthenticationPO> findByIsAuthentication(Integer isAuthentication);
 

+ 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();
 }

+ 2 - 0
core/src/main/java/com/mooctest/crowd/domain/dao/TaskToUserDao.java

@@ -21,6 +21,8 @@ public interface TaskToUserDao extends CrudRepository<TaskToUserPO,Long> {
 
     List<TaskToUserPO> findByTaskCode(String taskCode);
 
+    List<TaskToUserPO> findByTaskCodeAndIsAccepted(String taskCode, int isAccepted);
+
     List<TaskToUserPO> findByTaskCodeAndHasReport(String taskCode, int hasReport);
 
     TaskToUserPO save(TaskToUserPO taskToUserPO);

+ 2 - 0
core/src/main/java/com/mooctest/crowd/domain/dao/UserToRoleDao.java

@@ -13,6 +13,8 @@ public interface UserToRoleDao extends CrudRepository<UserToRolePO,Long> {
     @Override
     Optional<UserToRolePO> findById(Long id);
 
+    Optional<UserToRolePO> findByUserIdAndRoleId(Long userID, Long roleId);
+
     List<UserToRolePO> findByUserId(Long userId);
 
     List<UserToRolePO> findByRoleId(Long roleId);

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

@@ -31,7 +31,9 @@ public class CrowdTestProject {
     private String name;
     private String code;
     private Long userId;
+    private Long institution;
     private Long regionalManagerId;
+    private String regionalManagerName;
     private Long projectDistributionTypeId;
     private String fieldType;
     private String applicationType;
@@ -260,6 +262,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);
     }
 
@@ -317,7 +322,7 @@ public class CrowdTestProject {
      */
     public CrowdTestProject releaseCrowdTestProject(User user) {
         //判断用户是否认证
-        if (user.getPersonalAuthentication() == null && user.getEnterpriseAuthentication() == null && user.getRegionalManager() == null && user.getEvaluationAgency() == null) {
+        if (user.getPersonalAuthentication() == null && user.getRegionalManager() == null && user.getEvaluationAgency() == null) {
             throw new CrowdTestProjectException("当前用户未进行认证,无权限对项目操作");
         }
         //判断用户是否为项目发起者
@@ -687,13 +692,13 @@ public class CrowdTestProject {
      *
      * @return
      */
-    public CrowdTestProject finishCrowdTestProject(User user) {
+    public CrowdTestProject finishCrowdTestProject(Long userId) {
         //判断用户是否认证
 //        if(user.getPersonalAuthentication() == null && user.getEnterpriseAuthentication() == null && user.getRegionalManager() == null && user.getEvaluationAgency() == null){
 //            throw new CrowdTestProjectException("当前用户未进行认证,无权限对项目操作");
 //        }
         //判断是否为项目发起者
-        if (!this.getUserId().equals(user.getId())) {
+        if (!this.getUserId().equals(userId)) {
             throw new CrowdTestProjectException("当前用户没有权限结束项目!");
         }
 

+ 14 - 12
core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestTask.java

@@ -1,5 +1,6 @@
 package com.mooctest.crowd.domain.domainobject;
 
+import com.mooctest.crowd.domain.domainobject.enums.DistributeType;
 import com.mooctest.crowd.domain.exception.CrowdTestTaskException;
 import lombok.Data;
 
@@ -55,26 +56,21 @@ public class CrowdTestTask {
      *
      * @return
      */
-    public void receive(User user) {
+    public void receive(Long userId) {
         //任务当前状态
         if (this.getStatus() == CrowdTestTaskStatus.HAS_RECEIVED) {
-            if (this.getFullStatus() == CrowdTestTaskAcceptStatus.HAS_FULL)
+            if (this.getFullStatus() == CrowdTestTaskAcceptStatus.HAS_FULL) {
                 throw new CrowdTestTaskException("当前任务满员!:");
-        } else if (this.getStatus() != CrowdTestTaskStatus.HAS_RELEASED && this.getStatus() != CrowdTestTaskStatus.HAS_REJECTED)
+            }
+        } else if (this.getStatus() != CrowdTestTaskStatus.HAS_RELEASED && this.getStatus() != CrowdTestTaskStatus.HAS_REJECTED) {
             throw new CrowdTestTaskException("任务当前状态不能被接收,当前状态为:" + this.getStatus());
-        //定向发布类型
-//        if (this.getDistributionType() == 0) {
-//            if (!this.getEvaluationAgencyId().equals(user.getId()))
-//                throw new CrowdTestTaskException("当前用户没有权限接收此定向发布的任务!");
-//        }
-//        this.setEvaluationAgencyId(user.getId());
-
+        }
         // 判断人数是否满员
         if (this.getAcceptedCount() >= this.getParticipantCount()) {
             throw new CrowdTestTaskException("当前任务已经满员!");
         }
-        // 新增接收者信息
 
+        // 新增接收者信息
 //        TaskToUser taskToUser = null;
 //        if(this.getDistributionType().equals(DistributeType.DIRECT.getId())){
 //            // 定向发布类型
@@ -82,7 +78,12 @@ public class CrowdTestTask {
 //        }else if(this.getDistributionType().equals(DistributeType.SQUARE.getId())){
 //            // 广场发布类型
 //        }
+
+        //定向发布类型
         if (this.getDistributionType() == DistributeType.DIRECT.getId()) {
+            if (!this.getEvaluationAgencyId().equals(userId)) {
+                throw new CrowdTestTaskException("当前用户没有权限接收此定向发布的任务!");
+            }
             this.getAcceptedUserList().stream().map(taskToUser -> {
                 taskToUser.setIsAccepted(1);
                 taskToUser.setAcceptTime(new Timestamp(System.currentTimeMillis()));
@@ -90,9 +91,10 @@ public class CrowdTestTask {
             }).collect(Collectors.toList());
         } else {
             TaskToUser taskToUser = new TaskToUser();
-            taskToUser.setValue(this.code, user.getId(), this.quotedPrice, 0, this.getDistributionType(), 1, new Timestamp(System.currentTimeMillis()));
+            taskToUser.setValue(this.code, userId, this.quotedPrice, 0, this.getDistributionType(), 1, new Timestamp(System.currentTimeMillis()));
             this.getAcceptedUserList().add(taskToUser);
         }
+
         this.setAcceptedUserList(acceptedUserList);
         this.setAcceptedCount(this.acceptedCount + 1);
         if (this.getAcceptedCount() == this.getParticipantCount()) {

+ 2 - 0
core/src/main/java/com/mooctest/crowd/domain/domainobject/EndPoint.java

@@ -13,4 +13,6 @@ public class EndPoint {
     private String url;
     private String token;
     private int isShowed;
+    private int collaborativeType;
+    private String threePageUrl;
 }

+ 7 - 114
core/src/main/java/com/mooctest/crowd/domain/domainobject/User.java

@@ -4,6 +4,7 @@ import com.mooctest.crowd.domain.exception.BaseException;
 import com.mooctest.crowd.domain.exception.SystemAdministratorException;
 import com.mooctest.crowd.domain.model.UserPO;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 import org.springframework.beans.BeanUtils;
 
 import java.sql.Date;
@@ -15,7 +16,7 @@ import java.util.List;
  * @date 2019/7/6 18:17
  */
 @Data
-
+@NoArgsConstructor
 public class User {
     private Long id;
     private String name;
@@ -37,45 +38,13 @@ public class User {
     private List<Role> roleList;
     private List<String> personAbilities;
 
-
-
     private RegionalManager regionalManager;
     private EvaluationAgency evaluationAgency;
     private PersonalAuthentication personalAuthentication;
     private EnterpriseAuthentication enterpriseAuthentication;
     private SystemAdministratorToUser systemAdministratorToUser;
 
-
-    public User() {
-    }
-
-    @Override
-    public String toString() {
-        return "User{" +
-                "id=" + id +
-                ", name='" + name + '\'' +
-                ", userName='" + userName + '\'' +
-                ", password='" + password + '\'' +
-                ", gender='" + gender + '\'' +
-                ", mobile='" + mobile + '\'' +
-                ", email='" + email + '\'' +
-                ", province='" + province + '\'' +
-                ", city='" + city + '\'' +
-                ", photoUrl='" + photoUrl + '\'' +
-                ", isAvailable=" + isAvailable +
-                ", isDeleted=" + isDeleted +
-                ", createTime=" + createTime +
-                ", regionalManager=" + regionalManager +
-                ", evaluationAgency=" + evaluationAgency +
-                ", personalAuthentication=" + personalAuthentication +
-                ", enterpriseAuthentication=" + enterpriseAuthentication +
-                ", systemAdministratorToUser=" + systemAdministratorToUser +
-                ", roleList=" + roleList +
-                '}';
-    }
-
-
-    public   User(UserPO userPO){
+    public User(UserPO userPO){
         BeanUtils.copyProperties(userPO,this);
     }
 
@@ -87,7 +56,7 @@ public class User {
      * @return
      */
     public User applyAgencyAuthentication(EvaluationAgency evaluationAgency) {
-        if (this.getPersonalAuthentication()!=null || this.getEnterpriseAuthentication()!=null)
+        if (this.getPersonalAuthentication()!=null)
             throw new BaseException("已有认证信息,不可再次认证");
         this.setEvaluationAgency(evaluationAgency.applyAuthentication(this.id));
         return this;
@@ -132,7 +101,7 @@ public class User {
      * @return
      */
     public User updateAgencyAuthInfo(EvaluationAgency modifyAuth){
-        if (this.getEnterpriseAuthentication()!=null || this.getPersonalAuthentication()!=null)
+        if (this.getPersonalAuthentication()!=null)
             throw new BaseException("已有其他认证信息,不可对认证未企业用户");
         if (this.getEvaluationAgency().getIsAuthentication() == AuthenticationStatus.isAuthenticated){
             throw new BaseException("已通过认证,不可修改认证信息");
@@ -159,7 +128,7 @@ public class User {
      * @return
      */
     public User applyPersonalAuthentication(PersonalAuthentication personalAuth) {
-        if (this.getPersonalAuthentication()!=null || this.getEnterpriseAuthentication()!=null || this.getEvaluationAgency() != null)
+        if (this.getPersonalAuthentication()!=null || this.getEvaluationAgency() != null)
             throw new BaseException("已有认证信息,不可再次认证");
         this.setPersonalAuthentication(personalAuth.applyAuthentication(this.id));
         return this;
@@ -200,7 +169,7 @@ public class User {
     public User updatePersonalAuthInfo(PersonalAuthentication modifyAuth){
         if (this.getPersonalAuthentication() == null)
             throw new BaseException("当前用户未申请个人认证,无法修改");
-        if (this.getEvaluationAgency()!=null || this.getEnterpriseAuthentication()!=null)
+        if (this.getEvaluationAgency()!=null)
             throw new BaseException("已有其他认证信息,不可对个人认证进行操作");
         if (this.getPersonalAuthentication().getIsAuthentication() == AuthenticationStatus.isAuthenticated){
             throw new BaseException("已通过认证,不可修改认证信息");
@@ -218,82 +187,6 @@ public class User {
         return this;
     }
 
-    /**
-     * 企业认证——申请
-     * @return
-     */
-    public User applyEnterpriseAuthentication(EnterpriseAuthentication enterpriseAuth) {
-        if (this.getEvaluationAgency()!=null || this.getPersonalAuthentication()!=null || this.getEnterpriseAuthentication()!=null)
-            throw new BaseException("已有认证信息,不可再次认证");
-        this.setEnterpriseAuthentication(enterpriseAuth.applyAuthentication(this.id));
-        return this;
-    }
-
-    /**
-     * 企业认证——通过
-     * @return
-     */
-    public User passEnterpriseAuthApplication(User enterpriseUser) {
-        //判断是否为系统管理员
-        judgeIsSystemAdministrator();
-
-        EnterpriseAuthentication enterpriseAuth = enterpriseUser.getEnterpriseAuthentication();
-        if(enterpriseAuth.getIsAuthentication() == AuthenticationStatus.isNotAuthenticated){
-            throw new BaseException("当前是未通过认证状态,不可通过认证,需对认证信息进行修改后再提交认证申请");
-        }else if(enterpriseAuth.getIsAuthentication() == AuthenticationStatus.isAuthenticated){
-            throw new BaseException("当前已通过认证,不可再次进行认证");
-        }else{
-            enterpriseAuth.passAuthentication();
-            List<Role> roleList = this.getRoleList();
-            Role role = new Role();
-            role.setId(5L);
-            roleList.add(role);
-            enterpriseUser.setRoleList(roleList);
-            return enterpriseUser;
-        }
-    }
-
-    /**
-     * 企业认证——驳回,并说明驳回原因
-     * @param explain
-     * @return
-     */
-    public User enterpriseAuthReject(User enterpriseUser, String explain) {
-        //判断是否为系统管理员
-        judgeIsSystemAdministrator();
-
-        EnterpriseAuthentication enterpriseAuth = enterpriseUser.getEnterpriseAuthentication();
-        enterpriseAuth.rejectAuthentication(explain);
-        return enterpriseUser;
-    }
-
-    /**
-     * 企业认证——修改
-     * @param modifyAuth
-     * @return
-     */
-    public User updateEnterpriseAuthInfo(EnterpriseAuthentication modifyAuth){
-        if (this.getEnterpriseAuthentication() == null){
-            throw new BaseException("该用户未申请企业认证,无法修改");
-        }
-        if (this.getEvaluationAgency()!=null || this.getPersonalAuthentication()!=null)
-            throw new BaseException("已有其他认证信息,不可对认证未企业用户");
-        if (this.getEnterpriseAuthentication().getIsAuthentication() == AuthenticationStatus.isAuthenticated){
-            throw new BaseException("已通过认证,不可修改认证信息");
-        }
-        this.getEnterpriseAuthentication().updateAuthInfo(modifyAuth);
-        return this;
-    }
-
-    /**
-     * 企业认证——删除
-     * @return
-     */
-    public User deleteEnterpriseAuthInfo() {
-        this.getEnterpriseAuthentication().deleteAuth();
-        return this;
-    }
-
     //判断是否为系统管理员
     private void judgeIsSystemAdministrator(){
         if(this.getSystemAdministratorToUser() == null){

+ 28 - 0
core/src/main/java/com/mooctest/crowd/domain/domainobject/UserToRole.java

@@ -0,0 +1,28 @@
+package com.mooctest.crowd.domain.domainobject;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.sql.Timestamp;
+
+/**
+ * @author guochao
+ * @date 2019/7/6 17:54
+ */
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserToRole {
+    private Long id;
+    private Long roleId;
+    private Long userId;
+    private Timestamp createTime;
+
+    public UserToRole(Long roleId, Long userId, Timestamp createTime) {
+        this.roleId = roleId;
+        this.userId = userId;
+        this.createTime = createTime;
+    }
+}

+ 1 - 1
core/src/main/java/com/mooctest/crowd/domain/domainobject/AuthType.java → core/src/main/java/com/mooctest/crowd/domain/domainobject/enums/AuthType.java

@@ -1,4 +1,4 @@
-package com.mooctest.crowd.domain.domainobject;
+package com.mooctest.crowd.domain.domainobject.enums;
 
 import lombok.AllArgsConstructor;
 import lombok.NoArgsConstructor;

+ 1 - 1
core/src/main/java/com/mooctest/crowd/domain/domainobject/DistributeType.java → core/src/main/java/com/mooctest/crowd/domain/domainobject/enums/DistributeType.java

@@ -1,4 +1,4 @@
-package com.mooctest.crowd.domain.domainobject;
+package com.mooctest.crowd.domain.domainobject.enums;
 
 import lombok.AllArgsConstructor;
 import lombok.NoArgsConstructor;

+ 27 - 0
core/src/main/java/com/mooctest/crowd/domain/domainobject/enums/JudgeType.java

@@ -0,0 +1,27 @@
+package com.mooctest.crowd.domain.domainobject.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author guochao
+ * @date 2021-05-24 10:52
+ */
+@AllArgsConstructor
+@NoArgsConstructor
+public enum JudgeType {
+	YES(1, "yes"),
+	NO(0, "no");
+
+	private int id;
+	private String name;
+
+	public int getId() {
+		return id;
+	}
+
+	public String getName() {
+		return name;
+	}
+}
+

+ 2 - 2
site/src/main/java/com/mooctest/crowd/site/data/enums/RoleType.java → core/src/main/java/com/mooctest/crowd/domain/domainobject/enums/RoleType.java

@@ -1,4 +1,4 @@
-package com.mooctest.crowd.site.data.enums;
+package com.mooctest.crowd.domain.domainobject.enums;
 
 import lombok.AllArgsConstructor;
 import lombok.NoArgsConstructor;
@@ -15,7 +15,7 @@ public enum RoleType {
     GENERAL_USER(1L, "generalUser"),        // 注册后的普通用户
     AGENCY(2L, "evaluationAgency"),         // 注册为测评机构接包
     REGIONAL_MANAGER(3L, "RegionalManager"),
-    SYSTEM_ADMIN(4L, "RegionalManager"),
+    SYSTEM_ADMIN(4L, "SystemAdministrator"),
     ENTERPRISE_USER(5L, "enterpriseUser"),
     EVALUATION_USER(6L, "evaluationUser"),  // 注册为测评用户接包
     PARTY_USER(7L, "partyUser"),            // 注册为发包用户发包

+ 0 - 35
core/src/main/java/com/mooctest/crowd/domain/domainservice/RegisterDService.java

@@ -1,35 +0,0 @@
-package com.mooctest.crowd.domain.domainservice;
-
-import com.mooctest.crowd.domain.domainobject.Role;
-import com.mooctest.crowd.domain.domainobject.User;
-import com.mooctest.crowd.domain.factory.UserFactory;
-import com.mooctest.crowd.domain.util.EncryptionUtil;
-import org.springframework.stereotype.Service;
-
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @Author: xuexb
- * @Date: 2019.7.5 14:05
- */
-@Service
-public class RegisterDService {
-
-    public User register(String mobile, String password) {
-        User user = UserFactory.createUser();
-        user.setMobile(mobile);
-        user.setPassword(EncryptionUtil.encryptMD5(password));
-        user.setIsAvailable(1);
-        user.setIsDeleted(0);
-        user.setCreateTime(new Timestamp(System.currentTimeMillis()));
-        List<Role> roleList = new ArrayList<Role>();
-        Role role = new Role();
-        role.setName("generalUser");
-        roleList.add(role);
-        user.setRoleList(roleList);
-        return user;
-    }
-
-}

+ 12 - 0
core/src/main/java/com/mooctest/crowd/domain/exception/AuthorizedTimeOutException.java

@@ -0,0 +1,12 @@
+package com.mooctest.crowd.domain.exception;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-08-06 20:18
+ */
+public class AuthorizedTimeOutException extends BaseException {
+    public AuthorizedTimeOutException(String msg){
+        super(msg);
+    }
+}

+ 6 - 0
core/src/main/java/com/mooctest/crowd/domain/model/EndPointPO.java

@@ -36,6 +36,12 @@ public class EndPointPO {
     @Column(name = "EP_TOKEN")
     private String token;
 
+    @Column(name = "EP_COLLABORATIVE_TYPE")
+    private int collaborativeType;
+
+    @Column(name = "EP_THREE_PAGE_URL")
+    private String threePageUrl;
+
     @Column(name = "EP_IS_SHOWED")
     private int isShowed;
 }

+ 0 - 1
core/src/main/java/com/mooctest/crowd/domain/repository/ApplicationTypeRepo.java

@@ -1,7 +1,6 @@
 package com.mooctest.crowd.domain.repository;
 
 import com.mooctest.crowd.domain.dao.ApplicationTypeDao;
-import com.mooctest.crowd.domain.dao.CrowdTestProjectDao;
 import com.mooctest.crowd.domain.domainobject.ApplicationType;
 import com.mooctest.crowd.domain.model.ApplicationTypePO;
 import com.mooctest.crowd.domain.util.Converter;

+ 1 - 0
core/src/main/java/com/mooctest/crowd/domain/repository/CommonRepo.java

@@ -2,6 +2,7 @@ package com.mooctest.crowd.domain.repository;
 
 import com.mooctest.crowd.domain.dao.*;
 import com.mooctest.crowd.domain.domainobject.*;
+import com.mooctest.crowd.domain.domainobject.ApplicationType;
 import com.mooctest.crowd.domain.exception.ApplicationTypeNoExistException;
 import com.mooctest.crowd.domain.exception.BadRequestException;
 import com.mooctest.crowd.domain.exception.HttpBadRequestException;

+ 161 - 113
core/src/main/java/com/mooctest/crowd/domain/repository/CrowdTestProjectRepo.java

@@ -2,6 +2,7 @@ package com.mooctest.crowd.domain.repository;
 
 import com.mooctest.crowd.domain.dao.*;
 import com.mooctest.crowd.domain.domainobject.*;
+import com.mooctest.crowd.domain.domainobject.enums.JudgeType;
 import com.mooctest.crowd.domain.exception.CrowdTestProjectNotExistException;
 import com.mooctest.crowd.domain.exception.HttpBadRequestException;
 import com.mooctest.crowd.domain.model.*;
@@ -46,7 +47,7 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
     private TaskToUserDao taskToUserDao;
 
     @Autowired
-    private UserDao userDao;
+    private UserRepo userRepo;
 
     @Autowired
     private ApplicationTypeDao applicationTypeDao;
@@ -102,6 +103,10 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
 
     @Override
     public CrowdTestProject getByProjectCodeJustInfo(String crowdTestProjectCode) throws CrowdTestProjectNotExistException {
+        return this.getCrowdTestProjectInfo(crowdTestProjectCode);
+    }
+
+    private CrowdTestProject getCrowdTestProjectInfo(String crowdTestProjectCode) {
         CrowdTestProjectPO crowdTestProjectPO = crowdTestProjectDao.findByCodeAndIsDeleted(crowdTestProjectCode, DeletedStatus.isNotDeleted);
         if (crowdTestProjectPO == null) {
             throw new CrowdTestProjectNotExistException();
@@ -110,22 +115,34 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
     }
 
     @Override
+    public CrowdTestProject getByProjectCodeJustInfoAndProjectReport(String crowdTestProjectCode) throws CrowdTestProjectNotExistException {
+        CrowdTestProject project = this.getCrowdTestProjectInfo(crowdTestProjectCode);
+        //检索出项目报告
+        List<CrowdTestReportPO> crowdTestProjectReportPOList = crowdTestReportDao.findByDependencyCodeAndIsDeleted(crowdTestProjectCode, DeletedStatus.isNotDeleted);
+        if (crowdTestProjectReportPOList.size() != 0) {
+            CrowdTestReportPO crowdTestProjectReportPO = crowdTestProjectReportPOList.get(0);
+            CrowdTestReport crowdTestProjectReport = Converter.convert(CrowdTestReport.class, crowdTestProjectReportPO);
+            project.setCrowdTestReportForProject(crowdTestProjectReport);
+        }
+        return project;
+    }
+
+    @Override
     public CrowdTestProject getByProjectCode(String crowdTestProjectCode) throws CrowdTestProjectNotExistException {
-        return getCrowdTestProject(null, crowdTestProjectDao.findByCodeAndIsDeleted(crowdTestProjectCode, DeletedStatus.isNotDeleted));
+        return this.getCrowdTestProject(null, crowdTestProjectDao.findByCodeAndIsDeleted(crowdTestProjectCode, DeletedStatus.isNotDeleted));
     }
 
     @Override
     public CrowdTestProject getByProjectCodeAndTaskCode(String crowdTestProjectCode, String taskCode) throws CrowdTestProjectNotExistException {
-        return getCrowdTestProject(taskCode, crowdTestProjectDao.findByCodeAndIsDeleted(crowdTestProjectCode, DeletedStatus.isNotDeleted));
+        return this.getCrowdTestProject(taskCode, crowdTestProjectDao.findByCodeAndIsDeleted(crowdTestProjectCode, DeletedStatus.isNotDeleted));
     }
 
     @NotNull
-    public CrowdTestProject getCrowdTestProject(String taskCode, CrowdTestProjectPO byCodeAndIsDeleted) {
-        CrowdTestProjectPO crowdTestProjectPO = byCodeAndIsDeleted;
+    public CrowdTestProject getCrowdTestProject(String taskCode, CrowdTestProjectPO crowdTestProjectPO) {
         if (crowdTestProjectPO == null) {
             throw new CrowdTestProjectNotExistException();
         } else {
-            CrowdTestProject crowdTestProjectResult = getCrowdTestProjectAndTaskAndReportByCrowdTestProjectPO(crowdTestProjectPO, taskCode);
+            CrowdTestProject crowdTestProjectResult = this.getCrowdTestProjectAndTaskAndReportByCrowdTestProjectPO(crowdTestProjectPO, taskCode);
             return crowdTestProjectResult;
         }
     }
@@ -133,7 +150,7 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
     @Override
     public List<CrowdTestProject> getCrowdListByUserId(Long userId) {
         List<CrowdTestProjectPO> crowdTestProjectPOList = crowdTestProjectDao.findByUserIdAndIsDeleted(userId, DeletedStatus.isNotDeleted);
-        return getCrowdTestProjects(crowdTestProjectPOList);
+        return this.getCrowdTestProjects(crowdTestProjectPOList);
     }
 
     @Override
@@ -154,64 +171,47 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
         CrowdTestProjectPO crowdTestProjectPO = Converter.convert(CrowdTestProjectPO.class, crowdTestProject);
         crowdTestProjectDao.save(crowdTestProjectPO);
         List<CrowdTestTask> crowdTestTaskList = crowdTestProject.getCrowdTestTaskList();
-        if (crowdTestTaskList != null) {
-            for (CrowdTestTask crowdTestTask : crowdTestTaskList) {
-                CrowdTestTaskPO crowdTestTaskPO = Converter.convert(CrowdTestTaskPO.class, crowdTestTask);
-                List<TaskToUser> acceptedUserList = crowdTestTask.getAcceptedUserList();
-                for (TaskToUser taskToUser : acceptedUserList) {
-                    taskToUserDao.save(Converter.convert(TaskToUserPO.class, taskToUser));
-                    // 保存报告信息
-                    List<CrowdTestReport> crowdTestReportList = taskToUser.getCrowdTestReportList();
-                    for (CrowdTestReport crowdTestReport : crowdTestReportList) {
-                        CrowdTestReportPO crowdTestReportPO = Converter.convert(CrowdTestReportPO.class, crowdTestReport);
-                        crowdTestReportDao.save(crowdTestReportPO);
-                    }
-                }
-//                List<TaskToUserPO> taskToUserPOS = taskToUserDao.findByTaskCodeAndHasReport(crowdTestTask.getCode(), 1);
-//                Set<Long> collect = taskToUserPOS.stream().map(TaskToUserPO::getUserId).collect(Collectors.toSet());
-//                crowdTestTaskPO.setParticipantHasReportCount(collect.size());
-                crowdTestTaskDao.save(crowdTestTaskPO);
-
-                // 判断是否存在配置项
-                if(commonRepo.getTestTypeByAppCode(crowdTestTask.getType()).getType() == 1){
-                    // 保存配置项信息
-                    if(crowdTestTask.getEndPoint() != null){
-                        Optional<EndPointPO> endPointPO = endPointDao.findByTaskCode(crowdTestTask.getCode());
-                        EndPoint endPoint = crowdTestTask.getEndPoint();
-                        if(endPointPO.isPresent()){
-                            EndPointPO addEndPointPO = Converter.convert(EndPointPO.class, endPoint);
-                            addEndPointPO.setId(endPointPO.get().getId());
-                            addEndPointPO.setProjectCode(crowdTestProject.getCode());
-                            addEndPointPO.setTaskCode(crowdTestTask.getCode());
-                            if(endPoint.getToken() != null && endPoint.getToken() != ""){
-                                addEndPointPO.setToken(endPoint.getToken());
-                            }
-                            endPointDao.save(addEndPointPO);
-                        }else{
-                            EndPointPO addEndPointPO = new EndPointPO();
-                            if(endPoint.getExamId() != null){
-                                addEndPointPO.setExamId(endPoint.getExamId());
-                            }
-                            if(endPoint.getCaseId() != null){
-                                addEndPointPO.setCaseId(endPoint.getCaseId());
-                            }
-                            addEndPointPO.setProjectCode(crowdTestProject.getCode());
-                            addEndPointPO.setTaskCode(crowdTestTask.getCode());
-                            addEndPointPO.setServerCode(endPoint.getServerCode());
-                            addEndPointPO.setUrl(endPoint.getUrl());
-                            endPointDao.save(addEndPointPO);
-                        }
-                    }
-                }else{
-                    Optional<EndPointPO> endPointPO = endPointDao.findByTaskCode(crowdTestTask.getCode());
-                    if(endPointPO.isPresent()){
-                        endPointDao.deleteEndPoint(crowdTestTask.getCode());
-                    }
-                }
-
-            }
-        }
+        Optional.ofNullable(crowdTestTaskList).orElse(new ArrayList<>()).stream().forEach(crowdTestTask -> {
+            List<TaskToUser> acceptedUserList = crowdTestTask.getAcceptedUserList();
+            Optional.ofNullable(acceptedUserList).orElse(new ArrayList<>()).stream().forEach(taskToUser -> {
+                // 保存接包信息
+                taskToUserDao.save(Converter.convert(TaskToUserPO.class, taskToUser));
+                // 保存报告信息
+                List<CrowdTestReport> crowdTestReportList = taskToUser.getCrowdTestReportList();
+                Optional.ofNullable(crowdTestReportList).orElse(new ArrayList<>()).stream()
+                        .forEach(crowdTestReport -> crowdTestReportDao.save(Converter.convert(CrowdTestReportPO.class, crowdTestReport)));
+            });
+            // 保存任务基本信息
+            crowdTestTaskDao.save(Converter.convert(CrowdTestTaskPO.class, crowdTestTask));
+            // 保存任务配置信息
+            this.saveEndPoint(crowdTestProject, crowdTestTask);
+        });
         // 保存项目报告
+        this.saveProjectReport(crowdTestProject);
+    }
+
+    /**
+     * 保存项目基本信息和任务的信息(基本和配置)
+     * @param crowdTestProject
+     */
+    @Override
+    public void saveCrowdTestProjectAndTaskInfo(CrowdTestProject crowdTestProject) {
+        CrowdTestProjectPO crowdTestProjectPO = Converter.convert(CrowdTestProjectPO.class, crowdTestProject);
+        crowdTestProjectDao.save(crowdTestProjectPO);
+        List<CrowdTestTask> crowdTestTaskList = crowdTestProject.getCrowdTestTaskList();
+        Optional.ofNullable(crowdTestTaskList).orElse(new ArrayList<>()).stream().forEach(crowdTestTask -> {
+            // 保存任务基本信息
+            crowdTestTaskDao.save(Converter.convert(CrowdTestTaskPO.class, crowdTestTask));
+            // 保存任务配置信息
+            this.saveEndPoint(crowdTestProject, crowdTestTask);
+        });
+    }
+
+    /**
+     * 保存项目报告信息
+     * @param crowdTestProject
+     */
+    private void saveProjectReport(CrowdTestProject crowdTestProject) {
         if (crowdTestProject.getCrowdTestReportForProject() != null) {
             CrowdTestReport reportForProject = crowdTestProject.getCrowdTestReportForProject();
             CrowdTestReportPO crowdTestReportPO = Converter.convert(CrowdTestReportPO.class, reportForProject);
@@ -219,6 +219,73 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
         }
     }
 
+
+//        if (crowdTestTaskList != null) {
+//            for (CrowdTestTask crowdTestTask : crowdTestTaskList) {
+//                CrowdTestTaskPO crowdTestTaskPO = Converter.convert(CrowdTestTaskPO.class, crowdTestTask);
+//                List<TaskToUser> acceptedUserList = crowdTestTask.getAcceptedUserList();
+//                for (TaskToUser taskToUser : acceptedUserList) {
+//                    taskToUserDao.save(Converter.convert(TaskToUserPO.class, taskToUser));
+//                    // 保存报告信息
+//                    List<CrowdTestReport> crowdTestReportList = taskToUser.getCrowdTestReportList();
+//                    for (CrowdTestReport crowdTestReport : crowdTestReportList) {
+//                        CrowdTestReportPO crowdTestReportPO = Converter.convert(CrowdTestReportPO.class, crowdTestReport);
+//                        crowdTestReportDao.save(crowdTestReportPO);
+//                    }
+//                }
+//                crowdTestTaskDao.save(crowdTestTaskPO);
+//                this.saveEndPoint(crowdTestProject, crowdTestTask);
+//            }
+//        }
+
+    /**
+     * 保存任务的相关配置信息
+     * @param crowdTestProject
+     * @param crowdTestTask
+     */
+    private void saveEndPoint(CrowdTestProject crowdTestProject, CrowdTestTask crowdTestTask) {
+        // 判断是否存在配置项
+        if(commonRepo.getTestTypeByAppCode(crowdTestTask.getType()).getType() == JudgeType.YES.getId()){
+            // 保存配置项信息
+            if(crowdTestTask.getEndPoint() != null){
+                Optional<EndPointPO> endPointPO = endPointDao.findByTaskCode(crowdTestTask.getCode());
+                EndPoint endPoint = crowdTestTask.getEndPoint();
+                EndPointPO addEndPointPO = new EndPointPO();
+                if(endPointPO.isPresent()){
+                    addEndPointPO = Converter.convert(EndPointPO.class, endPoint);
+                    addEndPointPO.setId(endPointPO.get().getId());
+                }
+                addEndPointPO.setProjectCode(crowdTestProject.getCode());
+                addEndPointPO.setTaskCode(crowdTestTask.getCode());
+                addEndPointPO.setCollaborativeType(endPoint.getCollaborativeType());
+                if(endPoint.getServerCode() != null && endPoint.getServerCode() != ""){
+                    addEndPointPO.setServerCode(endPoint.getServerCode());
+                }
+                if(endPoint.getToken() != null && endPoint.getToken() != ""){
+                    addEndPointPO.setToken(endPoint.getToken());
+                }
+                if(endPoint.getUrl() != null && endPoint.getUrl() != ""){
+                    addEndPointPO.setUrl(endPoint.getUrl());
+                }
+                if(endPoint.getThreePageUrl() != null && endPoint.getThreePageUrl() != ""){
+                    addEndPointPO.setThreePageUrl(endPoint.getThreePageUrl());
+                }
+                if(endPoint.getExamId() != null && endPoint.getExamId() != ""){
+                    addEndPointPO.setExamId(endPoint.getExamId());
+                }
+                if(endPoint.getCaseId() != null && endPoint.getCaseId() != ""){
+                    addEndPointPO.setCaseId(endPoint.getCaseId());
+                }
+                endPointDao.save(addEndPointPO);
+            }
+        }else{
+            Optional<EndPointPO> endPointPO = endPointDao.findByTaskCode(crowdTestTask.getCode());
+            if(endPointPO.isPresent()){
+                endPointDao.deleteEndPoint(crowdTestTask.getCode());
+            }
+        }
+    }
+
     @Override
     public List<CrowdTestProject> getByProject() {
         List<CrowdTestProject> crowdTestProjectList=new ArrayList<>();
@@ -287,12 +354,6 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
         return crowdTestProjectDao.findHotProjectCardLimitCount(projectCount).stream().map(crowdTestProjectPO -> Converter.convert(CrowdTestProject.class, crowdTestProjectPO)).collect(Collectors.toList());
     }
 
-//    @Override
-//    public void removeCrowdTestProject(String crowdTestProjectCode){
-//        CrowdTestProject crowdTestProject = getByProjectCode(crowdTestProjectCode);
-//        crowdTestProjectDao.delete(Converter.convert(CrowdTestProjectPO.class, crowdTestProject));
-//    }
-
     public void removeCrowdTestProjectList(List<CrowdTestProject> crowdTestProjectList) {
         List<CrowdTestProjectPO> crowdTestProjectPOList = new ArrayList<>();
         for (CrowdTestProject crowdTestProject : crowdTestProjectList) {
@@ -334,33 +395,33 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
         List<CrowdTestTask> crowdTestTaskListResult = new ArrayList<>();
         for (CrowdTestTaskPO crowdTestTaskPO : crowdTestTaskPOList) {
             CrowdTestTask crowdTestTaskResult = Converter.convert(CrowdTestTask.class, crowdTestTaskPO);
-            // 判断否存在配置项
-            Optional<EndPointPO> endPointPO = endPointDao.findByTaskCode(crowdTestTaskResult.getCode());
-            if(endPointPO.isPresent()){
-                crowdTestTaskResult.setEndPoint(Converter.convert(EndPoint.class, endPointPO.get()));
-            }
-
-            // 检索任务中的所有已接收任务的人员信息
-            List<TaskToUserPO> taskToUserPOList = taskToUserDao.findByTaskCode(crowdTestTaskResult.getCode());
-            List<TaskToUser> taskToUserList = taskToUserPOList.stream().map(taskToUserPO -> {
-                TaskToUser taskToUser = Converter.convert(TaskToUser.class, taskToUserPO);
-                // 获取人员详细信息
-                Optional<UserPO> userPOOptional = userDao.findById(taskToUser.getUserId());
-                if (userPOOptional.isPresent()) {
-                    taskToUser.setUser(Converter.convert(User.class, userPOOptional.get()));
-                } else {
-                    throw new HttpBadRequestException("无此人员的信息");
+            // 如果是指定的任务,需要找出详细信息
+            if(taskCode != null){
+                // 判断否存在配置项
+                Optional<EndPointPO> endPointPO = endPointDao.findByTaskCode(crowdTestTaskResult.getCode());
+                if(endPointPO.isPresent()){
+                    crowdTestTaskResult.setEndPoint(Converter.convert(EndPoint.class, endPointPO.get()));
                 }
-                // 获取每个人员的报告信息
-                List<CrowdTestReport> crowdTestReportListResult = getReportByTaskCodeAndUserId(crowdTestTaskPO.getCode(), taskToUser.getUserId());
-                taskToUser.setCrowdTestReportList(crowdTestReportListResult);
-                return taskToUser;
-            }).collect(Collectors.toList());
-            crowdTestTaskResult.setAcceptedUserList(taskToUserList);
+
+                // 检索任务中的所有已接收任务的人员信息
+                List<TaskToUserPO> taskToUserPOList = taskToUserDao.findByTaskCode(crowdTestTaskResult.getCode());
+//                List<TaskToUserPO> taskToUserPOList = taskToUserDao.findByTaskCodeAndIsAccepted(crowdTestTaskResult.getCode(), JudgeType.YES.getId());
+                List<TaskToUser> taskToUserList = taskToUserPOList.stream().map(taskToUserPO -> {
+                    TaskToUser taskToUser = Converter.convert(TaskToUser.class, taskToUserPO);
+                    // 获取人员详细信息
+                    taskToUser.setUser(userRepo.getByIDJustInfo(taskToUser.getUserId()));
+                    // 获取每个人员的报告信息
+                    // 获取指定的报告信息
+                    List<CrowdTestReport> crowdTestReportListResult = this.getReportByTaskCodeAndUserId(crowdTestTaskPO.getCode(), taskToUser.getUserId());
+                    taskToUser.setCrowdTestReportList(crowdTestReportListResult);
+                    return taskToUser;
+                }).collect(Collectors.toList());
+                crowdTestTaskResult.setAcceptedUserList(taskToUserList);
 
 //            // 检索任务中的所有的报告
 //            List<CrowdTestReport> crowdTestReportListResult = getCrowdTestReportByCrowdTestTask(crowdTestTaskPO.getCode());
 //            crowdTestTaskResult.setCrowdTestReportList(crowdTestReportListResult);
+            }
             crowdTestTaskListResult.add(crowdTestTaskResult);
         }
         crowdTestProjectResult.setCrowdTestTaskList(crowdTestTaskListResult);
@@ -380,27 +441,6 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
         return taskPOS.stream().map(crowdTestTaskPO ->  Converter.convert(CrowdTestTask.class, crowdTestTaskPO)).collect(Collectors.toList());
     }
 
-    public CrowdTestTask getTaskDetail(CrowdTestTask crowdTestTask, Long userId){
-        // 检索任务中的所有已接收任务的人员信息
-        List<TaskToUserPO> taskToUserPOList = taskToUserDao.findByTaskCode(crowdTestTask.getCode()).stream().filter(taskToUserPO -> taskToUserPO.getUserId().equals(userId)).collect(Collectors.toList());
-        List<TaskToUser> taskToUserList = taskToUserPOList.stream().map(taskToUserPO -> {
-            TaskToUser taskToUser = Converter.convert(TaskToUser.class, taskToUserPO);
-            // 获取人员详细信息
-            Optional<UserPO> userPOOptional = userDao.findById(taskToUser.getUserId());
-            if (userPOOptional.isPresent()) {
-                taskToUser.setUser(Converter.convert(User.class, userPOOptional.get()));
-            } else {
-                throw new HttpBadRequestException("无此人员的信息");
-            }
-            // 获取每个人员的报告信息
-            List<CrowdTestReport> crowdTestReportListResult = getReportByTaskCodeAndUserId(crowdTestTask.getCode(), taskToUser.getUserId());
-            taskToUser.setCrowdTestReportList(crowdTestReportListResult);
-            return taskToUser;
-        }).collect(Collectors.toList());
-        crowdTestTask.setAcceptedUserList(taskToUserList);
-        return crowdTestTask;
-    }
-
     /**
      * 通过任务code和人员id获取报告列表
      *
@@ -463,4 +503,12 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
     public long getAllReportNum() {
         return crowdTestReportDao.count();
     }
+
+    public CrowdTestTask getTaskInfoByExamId(Long examId) {
+        Optional<EndPointPO> endPointPO = endPointDao.findByExamId(String.valueOf(examId));
+        if(endPointPO.isPresent()){
+             return Converter.convert(CrowdTestTask.class, crowdTestTaskDao.findByCodeAndIsDeleted(endPointPO.get().getTaskCode(), DeletedStatus.isNotDeleted));
+        }
+        return null;
+    }
 }

+ 22 - 3
core/src/main/java/com/mooctest/crowd/domain/repository/EvaluationAgencyRepo.java

@@ -5,10 +5,12 @@ import com.mooctest.crowd.domain.dao.AgencyResourceDao;
 import com.mooctest.crowd.domain.dao.EvaluationAgencyDao;
 import com.mooctest.crowd.domain.dao.PersonalAuthenticationDao;
 import com.mooctest.crowd.domain.domainobject.*;
+import com.mooctest.crowd.domain.domainobject.enums.AuthType;
 import com.mooctest.crowd.domain.exception.EvaluationAgencyResourceNotExist;
 import com.mooctest.crowd.domain.model.EvaluationAgencyAbilityPO;
 import com.mooctest.crowd.domain.model.EvaluationAgencyPO;
 import com.mooctest.crowd.domain.model.EvaluationAgencyResourcePO;
+import com.mooctest.crowd.domain.model.PersonalAuthenticationPO;
 import com.mooctest.crowd.domain.util.Converter;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -57,8 +59,25 @@ public class EvaluationAgencyRepo implements IEvaluationAgencyRepo {
 
     @Override
     public EvaluationAgency findAgencyByUserId(Long userId){
-        EvaluationAgencyPO evaluationAgencyPO = evaluationAgencyDao.findByUserIdAndIsDeleted(userId, DeletedStatus.isNotDeleted);
-        return Converter.convert(EvaluationAgency.class, evaluationAgencyPO);
+        Optional<EvaluationAgencyPO> evaluationAgencyPOOptional = evaluationAgencyDao.findByUserIdAndIsDeleted(userId, DeletedStatus.isNotDeleted);
+        if(evaluationAgencyPOOptional.isPresent()){
+            return Converter.convert(EvaluationAgency.class, evaluationAgencyPOOptional.get());
+        }
+        return null;
+    }
+
+    @Override
+    public String findAgencyNameByUserId(Long userId){
+        Optional<EvaluationAgencyPO> evaluationAgencyPOOptional = evaluationAgencyDao.findByUserIdAndIsDeleted(userId, DeletedStatus.isNotDeleted);
+        if(evaluationAgencyPOOptional.isPresent()){
+            return evaluationAgencyPOOptional.get().getEvaluationAgencyName();
+        }else{
+            Optional<PersonalAuthenticationPO> personalAuthPOOptional = personalAuthDao.findByUserIdAndIsDeleted(userId, DeletedStatus.isNotDeleted);
+            if(personalAuthPOOptional.isPresent()){
+                return personalAuthPOOptional.get().getRealName();
+            }
+        }
+        return null;
     }
 
     @Override
@@ -72,7 +91,7 @@ public class EvaluationAgencyRepo implements IEvaluationAgencyRepo {
     @Override
     public List<EvaluationAgency> findAllAuthenticatedReceivable() {
         List<EvaluationAgency> evaluationAgencyList = new ArrayList<>();
-        Iterable<EvaluationAgencyPO> agencyPOS = evaluationAgencyDao.findAllByIsAuthenticationAndTypeLikeAndIsDeleted(AuthenticationStatus.isAuthenticated, "%"+AuthType.RECEIVABLE.getId()+"%", DeletedStatus.isNotDeleted);
+        Iterable<EvaluationAgencyPO> agencyPOS = evaluationAgencyDao.findAllByIsAuthenticationAndTypeLikeAndIsDeleted(AuthenticationStatus.isAuthenticated, "%"+ AuthType.RECEIVABLE.getId()+"%", DeletedStatus.isNotDeleted);
         agencyPOS.forEach(agencyPO -> evaluationAgencyList.add(Converter.convert(EvaluationAgency.class, agencyPO)));
         return evaluationAgencyList;
     }

+ 8 - 19
core/src/main/java/com/mooctest/crowd/domain/repository/ICrowdTestProjectRepo.java

@@ -1,5 +1,7 @@
 package com.mooctest.crowd.domain.repository;
+
 import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
+import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
 import com.mooctest.crowd.domain.domainobject.EndPoint;
 import com.mooctest.crowd.domain.exception.CrowdTestProjectNotExistException;
 import org.springframework.data.domain.Page;
@@ -26,6 +28,8 @@ public interface ICrowdTestProjectRepo {
 
     CrowdTestProject getByProjectCodeJustInfo(String crowdTestProjectCode) throws CrowdTestProjectNotExistException;
 
+    CrowdTestProject getByProjectCodeJustInfoAndProjectReport(String crowdTestProjectCode) throws CrowdTestProjectNotExistException;
+
     CrowdTestProject getByProjectCodeAndTaskCode(String crowdTestProjectCode, String taskCode) throws CrowdTestProjectNotExistException;
 
     List<CrowdTestProject> getAllCrowdTestProject();
@@ -36,26 +40,9 @@ public interface ICrowdTestProjectRepo {
 
     void saveCrowdTestProject(CrowdTestProject crowdTestProject);
 
-    List<CrowdTestProject> getByProject();
-
-//    void removeCrowdTestProject(String crowdTestProjectCode) throws CrowdTestProjectNotExistException;
-
-//    CrowdTestProject saveCreateCrowdTestProject(CrowdTestProject crowdTestProject);
-//
-//    boolean saveCreateCrowdTestTask(String crowdTestProjectCode, CrowdTestTask crowdTestTask);
-//
-//    boolean saveCreateCrowdTestReport(String crowdTestProjectCode, String crowdTestTaskCode, CrowdTestReport crowdTestReport);
+    void saveCrowdTestProjectAndTaskInfo(CrowdTestProject crowdTestProject);
 
-
-//    void deleteByProjectId(Long projectId);
-
-//    List<CrowdTestProject> getByIDList(String[] ids);
-//
-//    boolean removeCrowdTestProject(CrowdTestProject crowdTestProject) throws CrowdTestProjectNotExistException;
-//
-//    CrowdTestProject updateCrowdTestProject(CrowdTestProject crowdTestProject) throws CrowdTestProjectNotExistException;
-//
-//    CrowdTestProject updateCrowdTestProjectStatus(Long id, String status) throws CrowdTestProjectNotExistException;
+    List<CrowdTestProject> getByProject();
 
     EndPoint getEndPoint(String taskCode);
 
@@ -65,5 +52,7 @@ public interface ICrowdTestProjectRepo {
 
     EndPoint updateEndPoint(String taskCode,EndPoint endPoint);
 
+    CrowdTestTask getTaskInfoByExamId(Long examId);
+
     List<CrowdTestProject> findHotProjectCardLimitCount(int projectCount);
 }

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

@@ -19,6 +19,8 @@ public interface IEvaluationAgencyRepo {
 
     EvaluationAgency findAgencyByUserId(Long userId);
 
+    String findAgencyNameByUserId(Long userId);
+
     List<EvaluationAgency> findAll();
 
     List<EvaluationAgency> findAllAuthenticatedReceivable();

+ 10 - 14
core/src/main/java/com/mooctest/crowd/domain/repository/IUserRepo.java

@@ -3,10 +3,8 @@ package com.mooctest.crowd.domain.repository;
 import com.mooctest.crowd.domain.domainobject.User;
 import com.mooctest.crowd.domain.domainobject.UserTaskCount;
 import com.mooctest.crowd.domain.exception.UserNotExistException;
-import com.mooctest.crowd.domain.model.UserPO;
 
 import javax.management.relation.RoleNotFoundException;
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -19,27 +17,25 @@ public interface IUserRepo {
 
     User getByID(Long id) throws UserNotExistException, RoleNotFoundException;
 
-    User getByUserIDJustAgencyInfo(Long userId) throws UserNotExistException, RoleNotFoundException;
-
     User getByIDJustInfo(Long userId) throws UserNotExistException, RoleNotFoundException;
 
-    List<User> getByIdList(List<Long> ids) throws RoleNotFoundException;
+    User getInfoAndRolesByID(Long userId) throws UserNotExistException;
 
-    List<User> getAllUser() throws RoleNotFoundException;
+    User getInfoAndRolesAndRegionalMangerByID(Long userId) throws UserNotExistException;
 
-    ArrayList<UserPO> getAllUserInfo() throws RoleNotFoundException;
+    User getInfoAndPersonalAuthByID(Long userId) throws UserNotExistException;
 
-    UserTaskCount getUserTaskCountByUserId(Long userId);
+    User getInfoAndEvaluationAgencyByID(Long userId) throws UserNotExistException;
 
-//    User getByEvaluationAgencyByUserId(Long userId) throws UserNotExistException, com.mooctest.crowd.domain.exception.RoleNotFoundException;
+    UserTaskCount getUserTaskCountByUserId(Long userId);
 
-    void removeUser(User user);
+    User saveUser(User user) throws RoleNotFoundException;
 
-    void removeUserList(List<User> userList);
+    User saveUserJustInfo(User user);
 
-    User saveUser(User user) throws RoleNotFoundException;
+    User saveEvaluationAgencyByUser(User user);
 
-    User saveUserAndRole(User user);
+    User savePersonalAuthByUser(User user);
 
-    List<User> getApplyEvaluationAgencyByIsAuthenticated();
+    List<Long> getUserIdListByRoleName(String roleName);
 }

+ 462 - 441
core/src/main/java/com/mooctest/crowd/domain/repository/UserRepo.java

@@ -1,12 +1,13 @@
 package com.mooctest.crowd.domain.repository;
 
-import com.google.common.collect.Lists;
 import com.mooctest.crowd.domain.dao.*;
 import com.mooctest.crowd.domain.domainobject.*;
+import com.mooctest.crowd.domain.domainobject.enums.RoleType;
 import com.mooctest.crowd.domain.exception.RoleNotFoundException;
 import com.mooctest.crowd.domain.exception.UserNotExistException;
 import com.mooctest.crowd.domain.model.*;
 import com.mooctest.crowd.domain.util.Converter;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -22,493 +23,513 @@ import java.util.stream.Collectors;
 
 @Component
 public class UserRepo implements IUserRepo {
-    @Autowired
-    private EvaluationAgencyDao agencyDao;
-    @Autowired
-    private TestTypeDao testTypeDao;
+	@Autowired
+	private TestTypeDao testTypeDao;
 
-    @Autowired
-    private UserDao userDao;
+	@Autowired
+	private UserDao userDao;
 
-    @Autowired
-    private RoleDao roleDao;
+	@Autowired
+	private RoleDao roleDao;
 
-    @Autowired
-    private PermissionDao permissionDao;
+	@Autowired
+	private PermissionDao permissionDao;
 
-    @Autowired
-    private UserToRoleDao userToRoleDao;
+	@Autowired
+	private UserToRoleDao userToRoleDao;
 
-    @Autowired
-    private UserTaskCountDao userTaskCountDao;
+	@Autowired
+	private UserTaskCountDao userTaskCountDao;
 
-    @Autowired
-    private RoleToPermissionDao roleToPermissionDao;
+	@Autowired
+	private RoleToPermissionDao roleToPermissionDao;
 
-    @Autowired
-    private EvaluationAgencyDao evaluationAgencyDao;
+	@Autowired
+	private EvaluationAgencyDao evaluationAgencyDao;
 
-    @Autowired
-    private RegionalManagerToRegionalDao regionalManagerToRegionalDao;
+	@Autowired
+	private RegionalManagerToRegionalDao regionalManagerToRegionalDao;
 
-    @Autowired
-    private AgencyResourceDao agencyResourceDao;
+	@Autowired
+	private AgencyResourceDao agencyResourceDao;
 
-    @Autowired
-    private AgencyAbilityDao agencyAbilityDao;
+	@Autowired
+	private AgencyAbilityDao agencyAbilityDao;
 
-    @Autowired
-    private EvaluationAgencyRepo resourceRepo;
+	@Autowired
+	private PersonalAuthenticationDao personalAuthenticationDao;
 
-    @Autowired
-    private PersonalAuthenticationDao personalAuthenticationDao;
+	@Autowired
+	private SystemAdministratorToUserDao systemAdministratorToUserDao;
 
-    @Autowired
-    private EnterpriseAuthenticationDao enterpriseAuthenticationDao;
+	private Timestamp currentTime = new Timestamp(System.currentTimeMillis());
 
-    @Autowired
-    private SystemAdministratorToUserDao systemAdministratorToUserDao;
+	@Override
+	public User getByID(Long userId) throws UserNotExistException, RoleNotFoundException {
+		Optional<UserPO> userPOOptional = userDao.findById(userId);
+		if (!userPOOptional.isPresent()) {
+			throw new UserNotExistException("用户不存在");
+		} else {
+			User user = getUserAndRoleAndPermissionByUserPO(userPOOptional.get());
+			return user;
+		}
+	}
 
-    private Timestamp currentTime = new Timestamp(System.currentTimeMillis());
+	@Override
+	public User getByIDJustInfo(Long userId) throws UserNotExistException, RoleNotFoundException {
+		Optional<UserPO> userPOOptional = userDao.findById(userId);
+		if (!userPOOptional.isPresent()) {
+			throw new UserNotExistException("用户不存在");
+		} else {
+			return Converter.convert(User.class, userPOOptional.get());
+		}
+	}
 
     @Override
-    public User getByID(Long userId) throws UserNotExistException, RoleNotFoundException {
+    public User getInfoAndRolesByID(Long userId) throws UserNotExistException {
         Optional<UserPO> userPOOptional = userDao.findById(userId);
         if (!userPOOptional.isPresent()) {
             throw new UserNotExistException("用户不存在");
         } else {
-            User user = getUserAndRoleAndPermissionByUserPO(userPOOptional.get());
-
+            User user = this.getUserInfoAndRoles(userPOOptional.get());
             return user;
         }
     }
 
-    @Override
-    public User getByUserIDJustAgencyInfo(Long userId) throws UserNotExistException, RoleNotFoundException {
-        Optional<UserPO> userPOOptional = userDao.findById(userId);
-        if (!userPOOptional.isPresent()) {
-            throw new UserNotExistException("用户不存在");
-        } else {
-            User user = getUserAndRoleAndPermissionByUserPO(userPOOptional.get());
-            return this.getEvaluationInfo(user);
-        }
-    }
+	@Override
+	public User getInfoAndRolesAndRegionalMangerByID(Long userId) throws UserNotExistException {
+		Optional<UserPO> userPOOptional = userDao.findById(userId);
+		if (!userPOOptional.isPresent()) {
+			throw new UserNotExistException("用户不存在");
+		} else {
+			User user = this.getUserInfoAndRolesAndRegionalManger(userPOOptional.get());
+			return user;
+		}
+	}
 
     @Override
-    public User getByIDJustInfo(Long userId) throws UserNotExistException, RoleNotFoundException {
+    public User getInfoAndPersonalAuthByID(Long userId) throws UserNotExistException {
         Optional<UserPO> userPOOptional = userDao.findById(userId);
-        if (!userPOOptional.isPresent()){
-            throw new UserNotExistException("用户不存在");
-        } else {
-            return Converter.convert(User.class, userPOOptional.get());
-        }
-    }
-
-    @Override
-    public User getByMobileNum(String mobileNum) throws UserNotExistException, RoleNotFoundException {
-        UserPO userPO = userDao.findByMobile(mobileNum);
-        if (userPO == null) {
+        if (!userPOOptional.isPresent()) {
             throw new UserNotExistException("用户不存在");
         } else {
-            User user = getUserAndRoleAndPermissionByUserPO(userPO);
+	        User user = Converter.convert(User.class, userPOOptional.get());
+	        this.getPersonalAuthInfo(user);
             return user;
         }
     }
 
-    @Override
-    public List<User> getByIdList(List<Long> ids) throws RoleNotFoundException {
-        Iterable<UserPO> allUserPOById = userDao.findAllById(ids);
-        ArrayList<UserPO> userPOArrayList = Lists.newArrayList(allUserPOById);
-        List<User> allUserResult = getUserAndRoleAndPermissionListByUserPOList(userPOArrayList);
-        return allUserResult;
-    }
-
-    /**
-     * 获取机构认证的申请
-     *
-     * @return
-     * @throws RoleNotFoundException
-     */
-    @Override
-    public List<User> getApplyEvaluationAgencyByIsAuthenticated() {
-        List<UserPO> userPOList = new ArrayList<>();
-        evaluationAgencyDao.findByIsAuthentication(AuthenticationStatus.isNotAuthenticated).forEach(evaluationAgencyPO -> {
-            userPOList.add(userDao.findById(evaluationAgencyPO.getUserId()).get());
-        });
-        List<User> allUserResult = getUserAndRoleAndPermissionListByUserPOList(userPOList);
-        return allUserResult;
-    }
-
-    @Override
-    public List<User> getAllUser() throws RoleNotFoundException {
-        Iterable<UserPO> allUserPO = userDao.findAll();
-        ArrayList<UserPO> userPOArrayList = Lists.newArrayList(allUserPO);
-        List<User> userListByIds = getUserAndRoleAndPermissionListByUserPOList(userPOArrayList);
-        return userListByIds;
-    }
-
-    @Override
-    public ArrayList<UserPO> getAllUserInfo() throws RoleNotFoundException {
-        Iterable<UserPO> allUserPO = userDao.findAll();
-        ArrayList<UserPO> userPOArrayList = Lists.newArrayList(allUserPO);
-        return userPOArrayList;
-    }
-
-    @Override
-    public UserTaskCount getUserTaskCountByUserId(Long userId) {
-        Optional<UserTaskCountPO> userTaskCountPO = userTaskCountDao.findByUserId(userId);
-        if (!userTaskCountPO.isPresent()) {
-            return null;
-        } else {
-            return Converter.convert(UserTaskCount.class, userTaskCountPO.get());
-        }
+	@Override
+	public User getInfoAndEvaluationAgencyByID(Long userId) throws UserNotExistException {
+		Optional<UserPO> userPOOptional = userDao.findById(userId);
+		if (!userPOOptional.isPresent()) {
+			throw new UserNotExistException("用户不存在");
+		} else {
+			User user = getInfoAndEvaluationAgency(userPOOptional.get());
+			return user;
+		}
+	}
+
+	private User getInfoAndEvaluationAgency(UserPO userPO) {
+		User user = Converter.convert(User.class, userPO);
+		this.getEvaluationAgency(user);
+		return user;
+	}
+
+	private User getInfoAndPersonalAuth(UserPO userPO) {
+		User user = Converter.convert(User.class, userPO);
+		this.getEvaluationAgency(user);
+		return user;
+	}
+
+	private User getUserInfoAndRolesAndRegionalManger(UserPO userPO) throws RoleNotFoundException {
+        User userResult = this.getUserInfoAndRoles(userPO);
+        this.getRegionalInfo(userResult);
+		return userResult;
+	}
+
+    @NotNull
+    private User getUserInfoAndRoles(UserPO userPO) {
+        User user = 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(user.getId());
+        List<Role> roleList = userToRolePOList.stream().map(userToRolePO -> roleMap.get(userToRolePO.getRoleId())).collect(Collectors.toList());
+	    user.setRoleList(roleList);
+        return user;
     }
 
-
-    //add
-//    @Override
-//    public User getByEvaluationAgencyByUserId(Long userId) throws UserNotExistException, RoleNotFoundException {
+	@Override
+	public User getByMobileNum(String mobileNum) throws UserNotExistException, RoleNotFoundException {
+		UserPO userPO = userDao.findByMobile(mobileNum);
+		if (userPO == null) {
+			throw new UserNotExistException("用户不存在");
+		} else {
+			User user = getUserAndRoleAndPermissionByUserPO(userPO);
+			return user;
+		}
+	}
+
+
+	@Override
+	public UserTaskCount getUserTaskCountByUserId(Long userId) {
+		Optional<UserTaskCountPO> userTaskCountPO = userTaskCountDao.findByUserId(userId);
+		if (!userTaskCountPO.isPresent()) {
+			return null;
+		} else {
+			return Converter.convert(UserTaskCount.class, userTaskCountPO.get());
+		}
+	}
+
+	/**
+	 * 注册用户时默认为普通用户,分配角色后存入数据库
+	 *
+	 * @param user
+	 * @return
+	 */
+//	@Override
+//	public User saveUserAndRole(User user) {
+//		UserPO userPO = userDao.save(Converter.convert(UserPO.class, user));
+//		User saveResultUser = Converter.convert(User.class, userPO);
+//		List<Role> roleList = user.getRoleList();
 //
-//        EvaluationAgencyPO evaluationAgencyPO = evaluationAgencyDao.findByUserId(userId);
-//        if(evaluationAgencyPO == null){
-//            throw new EvaluationAgencyNotExistException();
-//        }else{
-//            Optional<UserPO> userPOOptional = userDao.findById(userId);
-//            if (!userPOOptional.isPresent()) {
-//                throw new UserNotExistException();
-//            }else {
-//                UserPO userPO = userPOOptional.get();
-//                User user = getUserAndRoleAndPermissionByUserPO(userPO);
-//                user.setEvaluationAgency(evaluationAgencyResult);
-//                return user;
-//            }
-//        }
+//		// 存储从数据库中取出的User的Role数据
+//		List<Role> roleListResult = new ArrayList<>();
 //
-//    }
-
-    @Override
-    public void removeUser(User user) {
-        UserPO userPO = Converter.convert(UserPO.class, user);
-        userDao.delete(userPO);
-    }
-
-    @Override
-    public void removeUserList(List<User> userList) {
-        List<UserPO> userPOList = new ArrayList<>();
-        for (User user : userList) {
-            UserPO userPO = Converter.convert(UserPO.class, user);
-            userPOList.add(userPO);
-        }
-        userDao.deleteAll(userPOList);
-    }
-
-    /**
-     * 注册用户时默认为普通用户,分配角色后存入数据库
-     *
-     * @param user
-     * @return
-     */
-    @Override
-    public User saveUserAndRole(User user) {
-        UserPO userPO = userDao.save(Converter.convert(UserPO.class, user));
-        User saveResultUser = Converter.convert(User.class, userPO);
-        List<Role> roleList = user.getRoleList();
-
-        // 存储从数据库中取出的User的Role数据
-        List<Role> roleListResult = new ArrayList<>();
-
-        for (Role role : roleList) {
-            RolePO rolePO = roleDao.findByName(role.getName());
-            Role roleConvert = Converter.convert(Role.class, rolePO);
-
-            UserToRolePO userToRolePO = new UserToRolePO();
-            userToRolePO.setRoleId(roleConvert.getId());
-            userToRolePO.setUserId(saveResultUser.getId());
-            userToRolePO.setCreateTime(currentTime);
-            userToRoleDao.save(userToRolePO);
-
-            Role roleResult = getPermissionByRole(roleConvert);
-            roleListResult.add(roleResult);
-        }
-        saveResultUser.setRoleList(roleListResult);
-        return saveResultUser;
-    }
-
-    /**
-     * 保存用户相关的所有信息(包括测评机构信息、角色信息、权限信息)
-     *
-     * @param user
-     * @return
-     * @throws RoleNotFoundException
-     */
-    @Override
-    public User saveUser(User user) throws RoleNotFoundException {
-        User userAndRoleByUser = saveRoleAndPermissionAndEvaluationAgencyByUser(user);
-        return userAndRoleByUser;
-    }
-
+//		for (Role role : roleList) {
+//			RolePO rolePO = roleDao.findByName(role.getName());
+//			Role roleConvert = Converter.convert(Role.class, rolePO);
+//
+//			UserToRole userToRole = new UserToRole(roleConvert.getId(), saveResultUser.getId(), currentTime);
+//			userToRoleDao.save(Converter.convert(UserToRolePO.class, userToRole));
+//
+//			Role roleResult = getPermissionByRole(roleConvert);
+//			roleListResult.add(roleResult);
+////            roleListResult.add(roleConvert);
+//		}
+//		saveResultUser.setRoleList(roleListResult);
+//		return saveResultUser;
+//	}
+
+	/**
+	 * 保存用户相关的所有信息(包括测评机构信息、角色信息、权限信息)
+	 *
+	 * @param user
+	 * @return
+	 * @throws RoleNotFoundException
+	 */
+	@Override
+	public User saveUser(User user) throws RoleNotFoundException {
+		User userAndRoleByUser = saveRoleAndPermissionAndEvaluationAgencyByUser(user);
+		return userAndRoleByUser;
+	}
+
+	@Override
+	public User saveUserJustInfo(User user) {
+		UserPO userPO = userDao.save(Converter.convert(UserPO.class, user));
+		return Converter.convert(User.class, userPO);
+	}
+
+	/**
+	 * 保存机构认证信息
+	 * @param user
+	 * @return
+	 */
+	@Override
+	public User saveEvaluationAgencyByUser(User user) {
+		this.saveEvaluationAgencyInfo(user);
+		return user;
+	}
+
+	/**
+	 * 保存个人认证信息
+	 * @param user
+	 * @return
+	 */
+	@Override
+	public User savePersonalAuthByUser(User user) {
+		this.savePersonalAuth(user);
+		return user;
+	}
+
+
+	/**
+	 * 根据角色名称获取用户ID列表
+	 * @param roleName
+	 * @return
+	 */
+	@Override
+	public List<Long> getUserIdListByRoleName(String roleName){
+		RolePO rolePO = roleDao.findByName(roleName);
+		List<UserToRolePO> userToRolePOS = userToRoleDao.findByRoleId(rolePO.getId());
+		return userToRolePOS.stream().distinct().map(UserToRolePO::getUserId).collect(Collectors.toList());
+	}
+
+
+	/**
+	 * 保存用户信息(包括测评机构信息、角色信息、权限信息)
+	 *
+	 * @param user
+	 * @return
+	 * @throws RoleNotFoundException
+	 */
+	private User saveRoleAndPermissionAndEvaluationAgencyByUser(User user) throws RoleNotFoundException {
+		UserPO userPO = userDao.save(Converter.convert(UserPO.class, user));
+		user.setId(userPO.getId());
+
+		List<Long> roleIdList = userToRoleDao.findByUserId(user.getId()).stream().map(UserToRolePO::getRoleId).collect(Collectors.toList());
+
+		// 新注册用户默认给
+		if (roleIdList == null || roleIdList.size() == 0) {
+			UserToRole userToRole = new UserToRole(1L, user.getId(), new Timestamp(System.currentTimeMillis()));
+			userToRoleDao.save(Converter.convert(UserToRolePO.class, userToRole));
+		}else{
+			List<Role> roleList = user.getRoleList();
+			List<Role> roleListNeedAdd = Optional.ofNullable(roleList).orElse(new ArrayList<>()).stream()
+					.filter(role -> !roleIdList.contains(role.getId())).collect(Collectors.toList());
+			// 判断如果数据库中不存在对应的role就保存
+			Optional.ofNullable(roleListNeedAdd).orElse(new ArrayList<>()).forEach(role -> {
+				UserToRole userToRole = new UserToRole(role.getId(), user.getId(), new Timestamp(System.currentTimeMillis()));
+				userToRoleDao.save(Converter.convert(UserToRolePO.class, userToRole));
+			});
+		}
+
+		/*机构认证保存机构信息*/
+		this.saveEvaluationAgencyInfo(user);
+
+		/*实名认证保存个人信息*/
+		this.savePersonalAuth(user);
+		return user;
+	}
+
+	private void savePersonalAuth(User user) {
+		if (user.getPersonalAuthentication() != null) {
+			PersonalAuthenticationPO authenticationPO = Converter.convert(PersonalAuthenticationPO.class, user.getPersonalAuthentication());
+			personalAuthenticationDao.save(authenticationPO);
+		}
+	}
+
+	/**
+	 * 保存机构认证信息
+	 * @param user
+	 */
+	private void saveEvaluationAgencyInfo(User user) {
+		EvaluationAgency evaluationAgency = user.getEvaluationAgency();
+		if (evaluationAgency != null) {
+			EvaluationAgencyPO evaluationAgencyPO = Converter.convert(EvaluationAgencyPO.class, evaluationAgency);
+			evaluationAgencyPO.setUserId(user.getId());
+			evaluationAgencyPO = evaluationAgencyDao.save(evaluationAgencyPO);
+			// 资源能力信息
+			evaluationAgencyPO = evaluationAgencyDao.save(evaluationAgencyPO);
+//			List<EvaluationAgencyResource> resources = evaluationAgency.getEvaluationAgencyResourceList();
+//			List<EvaluationAgencyAbility> abilities = evaluationAgency.getEvaluationAgencyAbilityList();
+//			if (resources != null) {
+//				for (EvaluationAgencyResource resource : resources) {
+//					resource.setEvaluationAgencyId(evaluationAgencyPO.getId());
+//					resourceRepo.saveEvaluationAgencyResource(resource);
+//				}
+//			}
+//			if (abilities != null) {
+//				for (EvaluationAgencyAbility ability : abilities) {
+//					ability.setEvaluationAgencyId(evaluationAgencyPO.getId());
+//					resourceRepo.saveEvaluationAgencyAbility(ability);
+//				}
+//			}
+		}
+	}
+
+	/**
+	 * 通过角色获取角色和权限信息
+	 *
+	 * @param roleResult
+	 * @return
+	 */
+	private Role getPermissionByRole(Role roleResult) {
+		List<Permission> permissionResultList = new ArrayList<>();
+		List<RoleToPermissionPO> roleToPermissionPOList = roleToPermissionDao.findAllByRoleId(roleResult.getId());
+		List<Long> permissionIds = roleToPermissionPOList.stream().map(RoleToPermissionPO::getPermissionId).collect(Collectors.toList());
+
+		for (PermissionPO permissionPO : permissionDao.findAllById(permissionIds)) {
+			permissionResultList.add(Converter.convert(Permission.class, permissionPO));
+		}
+		roleResult.setPermissionList(permissionResultList);
+		return roleResult;
+	}
+
+	/**
+	 * 通过UsePOList获取用户-角色-权限信息
+	 *
+	 * @param userPOList
+	 * @return
+	 * @throws RoleNotFoundException
+	 */
+	private List<User> getUserAndRoleAndPermissionListByUserPOList(List<UserPO> userPOList) throws RoleNotFoundException {
+		List<User> userList = new ArrayList<>();
+		for (UserPO userPO : userPOList) {
+			User userAndRole = getUserAndRoleAndPermissionByUserPO(userPO);
+			userList.add(userAndRole);
+		}
+		return userList;
+	}
+
+	/**
+	 * 通过用户信息获取用户-角色-权限信息
+	 *
+	 * @param userPO
+	 * @return
+	 * @throws RoleNotFoundException
+	 */
+	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) {
+			Role role = roleMap.get(userToRolePO.getRoleId());
+			Role roleResult = getPermissionByRole(role);
+			roleResultList.add(roleResult);
+//            roleResultList.add(role);
+		}
+		userResult.setRoleList(roleResultList);
+
+		// 获取认证信息
+		userResult = this.getAuthentication(userResult);
+		return userResult;
+	}
 
     /**
-     * 保存用户信息(包括测评机构信息、角色信息、权限信息)
-     *
+     * 获取认证信息
      * @param user
      * @return
-     * @throws RoleNotFoundException
-     */
-    private User saveRoleAndPermissionAndEvaluationAgencyByUser(User user) throws RoleNotFoundException {
-        UserPO userPO = userDao.save(Converter.convert(UserPO.class, user));
-        List<Role> roleList = user.getRoleList();
-        Map<Long, String> collect = roleList.stream().collect(Collectors.toMap(Role::getId, Role::getName, (v1,v2) -> v2));
-
-        if (roleList == null || roleList.size() == 0) {
-            UserToRolePO u2r = new UserToRolePO();
-            u2r.setUserId(userPO.getId());
-            u2r.setRoleId(1L);
-            userToRoleDao.save(u2r);
-        }
-        List<UserToRolePO> userToRolePOList = userToRoleDao.findByUserId(userPO.getId());
-        if (roleList != null) {
-            for (Role role : roleList) {
-                if (userToRolePOList.stream().noneMatch(userToRolePO -> userToRolePO.getRoleId().equals(role.getId()))) {
-                    UserToRolePO userToRolePO = new UserToRolePO();
-                    userToRolePO.setRoleId(role.getId());
-                    userToRolePO.setUserId(userPO.getId());
-                    userToRoleDao.save(userToRolePO);
-                }
-            }
-        }
-
-        /*机构认证保存机构信息*/
-        EvaluationAgency evaluationAgency = user.getEvaluationAgency();
-        if (evaluationAgency != null) {
-            EvaluationAgencyPO evaluationAgencyPO = Converter.convert(EvaluationAgencyPO.class, evaluationAgency);
-            evaluationAgencyPO.setUserId(userPO.getId());
-            System.out.println(evaluationAgencyPO + "xxxxxxxxxxxxxxxxxxxxxxxx");
-            evaluationAgencyPO = evaluationAgencyDao.save(evaluationAgencyPO);
-            List<EvaluationAgencyResource> resources = evaluationAgency.getEvaluationAgencyResourceList();
-            List<EvaluationAgencyAbility> abilities = evaluationAgency.getEvaluationAgencyAbilityList();
-            if (resources != null) {
-                for (EvaluationAgencyResource resource : resources) {
-                    resource.setEvaluationAgencyId(evaluationAgencyPO.getId());
-                    resourceRepo.saveEvaluationAgencyResource(resource);
-                }
-            }
-            if (abilities != null) {
-                for (EvaluationAgencyAbility ability : abilities) {
-                    ability.setEvaluationAgencyId(evaluationAgencyPO.getId());
-                    resourceRepo.saveEvaluationAgencyAbility(ability);
-                }
-            }
-//            // save测评机构资源
-//            EvaluationAgencyResource evaluationAgencyResource = evaluationAgency.getEvaluationAgencyResource();
-//            if(evaluationAgencyResource != null){
-//                EvaluationAgencyResourcePO evaluationAgencyResourcePO = Converter.convert(EvaluationAgencyResourcePO.class, evaluationAgencyResource);
-//                evaluationAgencyResourcePO.setEvaluationAgencyId(evaluationAgencyPO.getId());
-//                evaluationAgencyResourceDao.save(evaluationAgencyResourcePO);
-//            }
-        }
-
-        /*实名认证保存个人信息*/
-        if (user.getPersonalAuthentication() != null) {
-            PersonalAuthenticationPO authenticationPO = Converter.convert(PersonalAuthenticationPO.class, user.getPersonalAuthentication());
-            personalAuthenticationDao.save(authenticationPO);
-        }
-
-        /*企业认证保存企业信息*/
-//        if (user.getEnterpriseAuthentication() != null) {
-////            if (user.getEnterpriseAuthentication().getType().contains("研发机构")) {
-////                System.out.println("认证消息为===========" + user.getPersonalAuthentication());
-////                EnterpriseAuthenticationPO authenticationPO = Converter.convert(EnterpriseAuthenticationPO.class, user.getEnterpriseAuthentication());
-////                System.out.println("认证消息为PO===========" + authenticationPO);
-////                enterpriseAuthenticationDao.save(authenticationPO);
-////            }
-////            else if (user.getEnterpriseAuthentication().getIsDaOrEa().equals("评测机构")) {
-//                EvaluationAgencyPO evaluationAgencyPO = new EvaluationAgencyPO();
-//                evaluationAgencyPO.setUserId(user.getId());
-//                evaluationAgencyPO.setAddress(user.getEnterpriseAuthentication().getAddress());
-//                evaluationAgencyPO.setEvaluationAgencyName(user.getEnterpriseAuthentication().getEnterpriseName());
-//                evaluationAgencyPO.setUpdateTime(new Timestamp(System.currentTimeMillis()));
-//                agencyDao.save(evaluationAgencyPO);
-////            }
-//        }
-
-        return getByID(userPO.getId());
-    }
-
-    /**
-     * 通过角色获取角色和权限信息
-     *
-     * @param roleResult
-     * @return
-     */
-    private Role getPermissionByRole(Role roleResult) {
-        List<Permission> permissionResultList = new ArrayList<>();
-        List<RoleToPermissionPO> roleToPermissionPOList = roleToPermissionDao.findAllByRoleId(roleResult.getId());
-        List<Long> permissionIds = roleToPermissionPOList.stream().map(RoleToPermissionPO::getPermissionId).collect(Collectors.toList());
-
-        for (PermissionPO permissionPO : permissionDao.findAllById(permissionIds)) {
-            permissionResultList.add(Converter.convert(Permission.class, permissionPO));
-        }
-        roleResult.setPermissionList(permissionResultList);
-        return roleResult;
-    }
-
-    /**
-     * 通过UsePOList获取用户-角色-权限信息
-     *
-     * @param userPOList
-     * @return
-     * @throws RoleNotFoundException
-     */
-    private List<User> getUserAndRoleAndPermissionListByUserPOList(List<UserPO> userPOList) throws RoleNotFoundException {
-        List<User> userList = new ArrayList<>();
-        for (UserPO userPO : userPOList) {
-            User userAndRole = getUserAndRoleAndPermissionByUserPO(userPO);
-            userList.add(userAndRole);
-        }
-        return userList;
-    }
-
-    /**
-     * 通过用户信息获取用户-角色-权限信息
-     *
-     * @param userPO
-     * @return
-     * @throws RoleNotFoundException
      */
-    private User getUserAndRoleAndPermissionByUserPO(UserPO userPO) throws RoleNotFoundException {
-        User userResult = Converter.convert(User.class, userPO);
-        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();
-            }
-        }
-        userResult.setRoleList(roleResultList);
-
-        /*获取机构认证的信息*/
-        userResult = getEvaluationInfo(userResult);
-
-        /*获取个人认证的信息*/
-        PersonalAuthenticationPO personalAuthenticationPO = personalAuthenticationDao.findByUserIdAndIsDeleted(userPO.getId(), DeletedStatus.isNotDeleted);
-        if (personalAuthenticationPO != null) {
-            userResult.setPersonalAuthentication(Converter.convert(PersonalAuthentication.class, personalAuthenticationPO));
-        }
+	@NotNull
+	private User getAuthentication(User user) {
+		/*获取机构认证的信息*/
+//		user = getEvaluationInfo(user);
 
         /*获取企业认证的信息*/
-        EnterpriseAuthenticationPO enterpriseAuthenticationPO = enterpriseAuthenticationDao.findByUserIdAndIsDeleted(userPO.getId(), DeletedStatus.isNotDeleted);
-        if (enterpriseAuthenticationPO != null) {
-            userResult.setEnterpriseAuthentication(Converter.convert(EnterpriseAuthentication.class, enterpriseAuthenticationPO));
-        }
+		this.getEvaluationAgency(user);
+
+		/*获取个人认证的信息*/
+		this.getPersonalAuthInfo(user);
+
+		// 获取个人能力
+        this.getPersonalAbility(user);
+
+		// 获取区域管理员信息
+		this.getRegionalInfo(user);
+
+		//获取系统管理员信息
+		SystemAdministratorToUserPO systemAdministratorToUserPO = systemAdministratorToUserDao.findByUserIdAndIsDeleted(user.getId(), DeletedStatus.isNotDeleted);
+		if (systemAdministratorToUserPO != null) {
+			user.setSystemAdministratorToUser(Converter.convert(SystemAdministratorToUser.class, systemAdministratorToUserPO));
+		}
+		return user;
+	}
+
+	/**
+	 * 获取个人认证的信息
+	 * @param user
+	 */
+	private void getPersonalAuthInfo(User user) {
+		Optional<PersonalAuthenticationPO> personalAuthenticationPOOptional = personalAuthenticationDao.findByUserIdAndIsDeleted(user.getId(), DeletedStatus.isNotDeleted);
+		if (personalAuthenticationPOOptional.isPresent()) {
+			user.setPersonalAuthentication(Converter.convert(PersonalAuthentication.class, personalAuthenticationPOOptional.get()));
+		}
+	}
+
+	private void getEvaluationAgency(User user) {
+		Optional<EvaluationAgencyPO> evaluationAgencyPOOptional = evaluationAgencyDao.findByUserIdAndIsDeleted(user.getId(), DeletedStatus.isNotDeleted);
+		if (evaluationAgencyPOOptional.isPresent()) {
+		    user.setEvaluationAgency(Converter.convert(EvaluationAgency.class, evaluationAgencyPOOptional.get()));
+		}
+	}
+
+	@NotNull
+    private void getPersonalAbility(User user) {
+        Map<String, String> typeMap = testTypeDao.findAll().stream().collect(Collectors.toMap(testTypePO -> testTypePO.getCode(), testTypePO -> testTypePO.getName()));
         //获取用户能力
-        String abilityName="";
-        List<String> codeList=new ArrayList<>();
-        List<String> abailities = new ArrayList<>();
-         if(userPO.getPersonalCompetence()!=null&&!userPO.getPersonalCompetence().trim().equals("")){
-             codeList= Arrays.asList(userPO.getPersonalCompetence().split(","));
-         }
-
-        if(abailities!=null&&!codeList.isEmpty()){
-
-            for (int i = 0; i < abailities.size(); i++) {
-                    abilityName = testTypeDao.findByCode(codeList.get(i)).get().getName();
-                    abailities.add(abilityName);
-                }
-
-            }
-
-        userResult.setPersonAbilities(abailities);
-
-        /*获取区域管理员信息*/
-        List<RegionalManagerToRegionalPO> regionalManagerToRegionalPOList = regionalManagerToRegionalDao.findByUserIdAndIsDeleted(userPO.getId(), DeletedStatus.isNotDeleted);
-        if (regionalManagerToRegionalPOList.size() > 0) {
-            List<RegionalManagerToRegional> regionalList = new ArrayList<>();
-            RegionalManager regionalManager = new RegionalManager();
-            regionalManager.setUserId(userPO.getId());
-            for (RegionalManagerToRegionalPO regionalManagerToRegionalPO : regionalManagerToRegionalPOList) {
-                if (regionalManagerToRegionalPO != null) {
-                    regionalManager.setId(regionalManagerToRegionalPO.getId());
-                    /*获取区域管理员管理的区域信息*/
-                    RegionalManagerToRegional regionalResult = Converter.convert(RegionalManagerToRegional.class, regionalManagerToRegionalPO);
-                    regionalList.add(regionalResult);
-                }
-
-            }
-            regionalManager.setRegionalList(regionalList);
-            userResult.setRegionalManager(regionalManager);
-        }
-
-        //获取系统管理员信息
-        SystemAdministratorToUserPO systemAdministratorToUserPO = systemAdministratorToUserDao.findByUserIdAndIsDeleted(userPO.getId(), DeletedStatus.isNotDeleted);
-        if (systemAdministratorToUserPO != null) {
-            userResult.setSystemAdministratorToUser(Converter.convert(SystemAdministratorToUser.class, systemAdministratorToUserPO));
-        }
-
-        return userResult;
-    }
-
-
-
-
-
-    private User getEvaluationInfo(User userResult) {
-        /*获取测评机构信息*/
-        EvaluationAgencyPO evaluationAgencyPO = evaluationAgencyDao.findByUserIdAndIsDeleted(userResult.getId(), DeletedStatus.isNotDeleted);
-        if (evaluationAgencyPO != null) {
-            EvaluationAgency evaluationAgencyResult = Converter.convert(EvaluationAgency.class, evaluationAgencyPO);
-
-            /*获取测评机构能力*/
-            List<EvaluationAgencyAbilityPO> evaluationAgencyAbilityPOList = agencyAbilityDao.findByEvaluationAgencyIdAndIsDeleted(evaluationAgencyResult.getId(), DeletedStatus.isNotDeleted);
-            List<EvaluationAgencyAbility> evaluationAgencyAbilityList = new ArrayList<>();
-            if (evaluationAgencyAbilityPOList.size() != 0) {
-                for (EvaluationAgencyAbilityPO evaluationAgencyAbilityPO : evaluationAgencyAbilityPOList) {
-                    EvaluationAgencyAbility evaluationAgencyAbility = Converter.convert(EvaluationAgencyAbility.class, evaluationAgencyAbilityPO);
-                    evaluationAgencyAbilityList.add(evaluationAgencyAbility);
-                }
-            }
-            evaluationAgencyResult.setEvaluationAgencyAbilityList(evaluationAgencyAbilityList);
-
-
-
-
-
-            /*获取测评机构资源*/
-            List<EvaluationAgencyResourcePO> evaluationAgencyResourcePOList = agencyResourceDao.findByEvaluationAgencyIdAndIsDeleted(evaluationAgencyResult.getId(), DeletedStatus.isNotDeleted);
-            List<EvaluationAgencyResource> evaluationAgencyResourceList = new ArrayList<>();
-            if (evaluationAgencyResourcePOList.size() != 0) {
-                for (EvaluationAgencyResourcePO evaluationAgencyResourcePO : evaluationAgencyResourcePOList) {
-                    EvaluationAgencyResource evaluationAgencyResource = Converter.convert(EvaluationAgencyResource.class, evaluationAgencyResourcePO);
-                    evaluationAgencyResourceList.add(evaluationAgencyResource);
-                }
-            }
-            evaluationAgencyResult.setEvaluationAgencyResourceList(evaluationAgencyResourceList);
-            userResult.setEvaluationAgency(evaluationAgencyResult);
+        List<String> codeList = new ArrayList<>();
+        if (user.getPersonalCompetence() != null && !user.getPersonalCompetence().trim().equals("")) {
+            codeList = Arrays.asList(user.getPersonalCompetence().split(","));
         }
-        return userResult;
+		user.setPersonAbilities(codeList.stream().map(typeCode -> typeMap.get(typeCode)).collect(Collectors.toList()));
     }
 
-    public Role getRole(String roleName) {
-        Role role = new Role();
-        BeanUtils.copyProperties(roleDao.findByName(roleName), role);
-        return role;
-    }
-
-    public long getAllUserNum() {
-        return userDao.count();
-    }
-
-    public long getAllAgencyNum() {
-        return evaluationAgencyDao.count();
-    }
-
-    public long getAllResourceNum() {
-        return agencyResourceDao.count();
-    }
+    private void getRegionalInfo(User user) {
+	    Optional<UserToRolePO> userToRolePOOptional = userToRoleDao.findByUserIdAndRoleId(user.getId(), RoleType.REGIONAL_MANAGER.getId());
+	    if(userToRolePOOptional.isPresent()){
+		   this.getRegionalInfos(user);
+	    }
+	}
+
+	private void getRegionalInfos(User user) {
+		/*获取区域管理员信息*/
+		List<RegionalManagerToRegionalPO> managerToRegionalPOList = regionalManagerToRegionalDao.findByUserIdAndIsDeleted(user.getId(), DeletedStatus.isNotDeleted);
+		if (managerToRegionalPOList.size() > 0) {
+			List<RegionalManagerToRegional> regionalList = new ArrayList<>();
+			RegionalManager regionalManager = new RegionalManager();
+			regionalManager.setUserId(user.getId());
+			for (RegionalManagerToRegionalPO regionalManagerToRegionalPO : managerToRegionalPOList) {
+				if (regionalManagerToRegionalPO != null) {
+					regionalManager.setId(regionalManagerToRegionalPO.getId());
+					/*获取区域管理员管理的区域信息*/
+					RegionalManagerToRegional regionalResult = Converter.convert(RegionalManagerToRegional.class, regionalManagerToRegionalPO);
+					regionalList.add(regionalResult);
+				}
+			}
+			regionalManager.setRegionalList(regionalList);
+			user.setRegionalManager(regionalManager);
+		}
+	}
+
+
+	private User getEvaluationInfo(User userResult) {
+		/*获取测评机构信息*/
+		Optional<EvaluationAgencyPO> evaluationAgencyPOOptional = evaluationAgencyDao.findByUserIdAndIsDeleted(userResult.getId(), DeletedStatus.isNotDeleted);
+		if (evaluationAgencyPOOptional.isPresent()) {
+			EvaluationAgency evaluationAgencyResult = Converter.convert(EvaluationAgency.class, evaluationAgencyPOOptional.get());
+
+			/*获取测评机构能力*/
+			List<EvaluationAgencyAbilityPO> evaluationAgencyAbilityPOList = agencyAbilityDao.findByEvaluationAgencyIdAndIsDeleted(evaluationAgencyResult.getId(), DeletedStatus.isNotDeleted);
+			List<EvaluationAgencyAbility> evaluationAgencyAbilityList = new ArrayList<>();
+			if (evaluationAgencyAbilityPOList.size() != 0) {
+				for (EvaluationAgencyAbilityPO evaluationAgencyAbilityPO : evaluationAgencyAbilityPOList) {
+					EvaluationAgencyAbility evaluationAgencyAbility = Converter.convert(EvaluationAgencyAbility.class, evaluationAgencyAbilityPO);
+					evaluationAgencyAbilityList.add(evaluationAgencyAbility);
+				}
+			}
+			evaluationAgencyResult.setEvaluationAgencyAbilityList(evaluationAgencyAbilityList);
+
+			/*获取测评机构资源*/
+			List<EvaluationAgencyResourcePO> evaluationAgencyResourcePOList = agencyResourceDao.findByEvaluationAgencyIdAndIsDeleted(evaluationAgencyResult.getId(), DeletedStatus.isNotDeleted);
+			List<EvaluationAgencyResource> evaluationAgencyResourceList = new ArrayList<>();
+			if (evaluationAgencyResourcePOList.size() != 0) {
+				for (EvaluationAgencyResourcePO evaluationAgencyResourcePO : evaluationAgencyResourcePOList) {
+					EvaluationAgencyResource evaluationAgencyResource = Converter.convert(EvaluationAgencyResource.class, evaluationAgencyResourcePO);
+					evaluationAgencyResourceList.add(evaluationAgencyResource);
+				}
+			}
+			evaluationAgencyResult.setEvaluationAgencyResourceList(evaluationAgencyResourceList);
+			userResult.setEvaluationAgency(evaluationAgencyResult);
+		}
+		return userResult;
+	}
+
+	public Role getRole(String roleName) {
+		Role role = new Role();
+		BeanUtils.copyProperties(roleDao.findByName(roleName), role);
+		return role;
+	}
+
+	public long getAllUserNum() {
+		return userDao.count();
+	}
+
+	public long getAllAgencyNum() {
+		return evaluationAgencyDao.count();
+	}
+
+	public long getAllResourceNum() {
+		return agencyResourceDao.count();
+	}
 }

+ 12 - 0
site/pom.xml

@@ -203,6 +203,18 @@
 			<artifactId>reflections</artifactId>
 			<version>0.9.11</version>
 		</dependency>
+
+		<!-- aop -->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-aop</artifactId>
+		</dependency>
+
+		<!-- log,logback -->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-logging</artifactId>
+		</dependency>
 	</dependencies>
 	<build>
 		<plugins>

+ 12 - 0
site/src/main/java/com/mooctest/crowd/site/SiteApplication.java

@@ -15,6 +15,18 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 public class SiteApplication {
 
 	public static void main(String[] args) {
+//		String relativelyPath = System.getProperty("user.dir");
+//		// 1. 创建生成文档的配置
+//		DocsConfig config= new DocsConfig();
+//		config.setProjectPath(relativelyPath); // 项目根目录
+//		config.setProjectName("信创社区"); // 项目名称
+//		config.setApiVersion("V1.0");      // 声明该API的版本
+//		config.setDocsPath(relativelyPath + "/site/src/main/resources/apidoc"); // 生成API 文档所在目录
+//		config.setAutoGenerate(Boolean.TRUE);  // 配置自动生成
+//		config.addPlugin(new MarkdownDocPlugin());// 使用 MD 插件,额外生成 MD 格式的接口文档
+//		// 2. 执行生成 HTML 接口文档
+//		Docs.buildHtmlDocs(config); // 执行生成文档
+
 		SpringApplication.run(SiteApplication.class, args);
 	}
 

+ 40 - 0
site/src/main/java/com/mooctest/crowd/site/annotation/ApiDoc.java

@@ -0,0 +1,40 @@
+package com.mooctest.crowd.site.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author guochao
+ * @date 2021-04-28 09:52
+ */
+@Retention(RetentionPolicy.SOURCE)
+@Target({ElementType.METHOD})
+public @interface ApiDoc {
+
+	/**
+	 * result class
+	 * @return
+	 */
+	Class<?> value() default Null.class;
+
+	/**
+	 * result class
+	 */
+	Class<?> result() default Null.class;
+
+	/**
+	 * request url
+	 */
+	String url() default "";
+
+	/**
+	 * request method
+	 */
+	String method() default "get";
+
+	final class Null{
+
+	}
+}

+ 106 - 0
site/src/main/java/com/mooctest/crowd/site/anticorruption/WebLogAspect.java

@@ -0,0 +1,106 @@
+package com.mooctest.crowd.site.anticorruption;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.AfterReturning;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Method;
+import java.util.UUID;
+
+/**
+ * Web层日志切面
+ */
+@Aspect
+@Order(5)
+@Component
+public class WebLogAspect {
+
+	private Logger logger = LoggerFactory.getLogger(getClass());
+
+	private String uuid;
+
+	ThreadLocal<Long> startTime = new ThreadLocal<>();
+
+	/**
+	 * A join point is in the web layer if the method is defined
+	 * in a type in the com.xyz.someapp.web package or any sub-package
+	 * under that.
+	 */
+	// Pointcut与 joinpoint 匹配的正则表达式。每次连接点与切入点匹配时, 都将执行与该切入点关联的指定建议。
+	@Pointcut("within(com.mooctest.crowd.site.controller..*)")
+	public void webLog(){}
+
+	@Before("webLog()")
+	// JoinPoint它是执行程序 (如方法执行、构造函数调用或字段分配) 期间的特定点
+	public void doBefore(JoinPoint joinPoint) {
+		this.startTime.set(System.currentTimeMillis());
+		this.uuid = UUID.randomUUID().toString();
+		/**
+		 * 获取 request 中包含的请求参数
+		 */
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+
+		/**
+		 * 获取切点请求参数(class,method)
+		 */
+		MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+		Method method = signature.getMethod();
+
+		StringBuilder params = new StringBuilder();
+		ObjectMapper mapper = new ObjectMapper();
+		if ("POST".equalsIgnoreCase(request.getMethod())) {
+			Object[] objects = joinPoint.getArgs();
+			for (Object arg : objects) {
+				// args还包含了一些其他的内容,比如ServletRequest\ServletResponse\MultipartFile等,而这些入参并不能进行序列化,所以JSON.toJSONString时报错;
+				if (arg instanceof ServletRequest || arg instanceof ServletResponse){
+					continue;
+				}
+				if (arg instanceof MultipartFile){
+					params.append("File ");
+				}
+				try {
+					params.append(mapper.writeValueAsString(arg));
+				} catch (Exception e) {
+
+				}
+			}
+			if(params == null || params.equals("")){
+				params.append(objects.toString());
+			}
+		}
+
+
+		if ("GET".equalsIgnoreCase(request.getMethod())) {
+			params.append(request.getQueryString());
+		}
+		/**
+		 * 入参日志
+		 */
+		logger.info("[AOP-LOG-START] {}\n\ttraceId: {}\n\trequestIP: {}\n\tcontentType:{}\n\trequestUrl: {}\n\t" +
+						"requestMethod: {}\n\trequestParams: {}\n\ttargetClassAndMethod: {}#{}", this.uuid,this.uuid,request.getRemoteAddr(),
+				request.getHeader("Content-Type"),request.getRequestURL(), request.getMethod(), params.toString(),
+				method.getDeclaringClass().getName(), method.getName());
+
+	}
+
+	@AfterReturning(returning = "ret", pointcut = "webLog()")
+	public void doAfterReturning(Object ret) throws Throwable {
+		// 处理完请求,返回内容
+		logger.info("[AOP-LOG-END] {}\n\t{}", this.uuid, ret);
+		logger.info("[SPEND TIME] {}\t{} ms", this.uuid, (System.currentTimeMillis() - this.startTime.get()));
+	}
+}

+ 4 - 3
site/src/main/java/com/mooctest/crowd/site/anticorruption/impl/UserAntiCorruptionImpl.java

@@ -9,6 +9,7 @@ import com.mooctest.crowd.domain.factory.UserFactory;
 import com.mooctest.crowd.domain.repository.UserRepo;
 import com.mooctest.crowd.site.anticorruption.UserAntiCorruption;
 import com.mooctest.crowd.site.anticorruption.impl.data.UserInfo;
+import com.mooctest.crowd.domain.domainobject.enums.RoleType;
 import com.mooctest.crowd.site.util.EncryptionUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -73,15 +74,15 @@ public class UserAntiCorruptionImpl implements UserAntiCorruption {
         log.info("userInfo: " + userInfo.toString());
         try{
             //将用户中心的用户中心的用户数据对本系统内同步,直同步用户邮箱、手机号、密码
-            User oldUser = userRepo.getByID(userId);
+            User oldUser = userRepo.getByIDJustInfo(userId);
             oldUser.setEmail(userInfo.getEmail());
             oldUser.setMobile(userInfo.getMobile());
             oldUser.setPassword(userInfo.getPassword());
-            userRepo.saveUser(oldUser);
+            userRepo.saveUserJustInfo(oldUser);
         }catch (UserNotExistException e){   //本站不存在该用户,是未同步信息的新用户,初始化角色
             User user = userInfo.toUser();
             List<Role> roles = new ArrayList<>();
-            roles.add(userRepo.getRole("generalUser"));
+            roles.add(userRepo.getRole(RoleType.GENERAL_USER.getName()));
             user.setRoleList(roles);
             userRepo.saveUser(user);
         }

+ 5 - 0
site/src/main/java/com/mooctest/crowd/site/command/CrowdTestProjectCommand.java

@@ -47,6 +47,10 @@ public class CrowdTestProjectCommand {
 
     private Long institution;
 
+    private Long regionalManagerId;
+
+    private String regionalManagerName;
+
     @NotNull(message = "项目联系人不可为空")
     private String contactName;
 
@@ -87,6 +91,7 @@ public class CrowdTestProjectCommand {
             crowdTestProject.setDistributionProvince(this.location.get("provinceCode"));
             crowdTestProject.setDistributionCity(this.location.get("cityCode"));
         }
+        crowdTestProject.setInstitution(this.getInstitution());
         crowdTestProject.setRegionalManagerId(this.getInstitution());
         crowdTestProject.setDeadTime(this.datetime);
         crowdTestProject.setQuotedPrice(this.budget);

+ 29 - 29
site/src/main/java/com/mooctest/crowd/site/command/CrowdTestTaskCommand.java

@@ -2,15 +2,11 @@ package com.mooctest.crowd.site.command;
 
 import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
 import com.mooctest.crowd.domain.domainobject.EndPoint;
-import com.mooctest.crowd.domain.exception.CrowdTestEndPointException;
 import lombok.Data;
 import org.springframework.beans.BeanUtils;
 
 import javax.validation.constraints.NotNull;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
 import java.sql.Timestamp;
-import java.util.Base64;
 import java.util.Map;
 
 /**
@@ -48,6 +44,10 @@ public class CrowdTestTaskCommand {
 
     private int participantCount;
 
+//    private int collaborativeType;
+//
+//    private String threePageUrl;
+
     private EndPoint endPoint;
 
     public boolean isLegal(){
@@ -75,31 +75,31 @@ public class CrowdTestTaskCommand {
         crowdTestTask.setFixedPrice(fixedPrice);
         crowdTestTask.setRequirementFile(requirementFile);
         crowdTestTask.setParticipantCount(participantCount);
-
-        if(endPoint.getServerCode() != null && endPoint.getServerCode() != ""){
-            String serverCode = endPoint.getServerCode();
-            try {
-                String decodeUrl;
-                decodeUrl = URLDecoder.decode(serverCode,"UTF-8");
-                byte[] decodedBytes = Base64.getDecoder().decode(decodeUrl);
-                String url = new String(decodedBytes);
-
-                if(url.contains("examId_")){
-                    endPoint.setExamId(url.split("examId_")[1].split("/")[0]);
-                    url = url.replaceFirst("examId_","");
-                }
-                if(url.contains("caseId_")){
-                    endPoint.setCaseId(url.split("caseId_")[1].split("/")[0]);
-                    url = url.replaceFirst("caseId_","");
-                }
-                endPoint.setUrl(url);
-                crowdTestTask.setEndPoint(endPoint);
-            }catch (IllegalArgumentException e){
-                throw new CrowdTestEndPointException();
-            }catch (UnsupportedEncodingException e){
-                e.printStackTrace();
-            }
-        }
+        crowdTestTask.setEndPoint(endPoint);
+//        if(endPoint.getServerCode() != null && endPoint.getServerCode() != ""){
+//            String serverCode = endPoint.getServerCode();
+//            try {
+//                String decodeUrl;
+//                decodeUrl = URLDecoder.decode(serverCode,"UTF-8");
+//                byte[] decodedBytes = Base64.getDecoder().decode(decodeUrl);
+//                String url = new String(decodedBytes);
+//
+//                if(url.contains("examId_")){
+//                    endPoint.setExamId(url.split("examId_")[1].split("/")[0]);
+//                    url = url.replaceFirst("examId_","");
+//                }
+//                if(url.contains("caseId_")){
+//                    endPoint.setCaseId(url.split("caseId_")[1].split("/")[0]);
+//                    url = url.replaceFirst("caseId_","");
+//                }
+//                endPoint.setUrl(url);
+//                crowdTestTask.setEndPoint(endPoint);
+//            }catch (IllegalArgumentException e){
+//                throw new CrowdTestEndPointException();
+//            }catch (UnsupportedEncodingException e){
+//                e.printStackTrace();
+//            }
+//        }
         return crowdTestTask;
     }
 

+ 91 - 0
site/src/main/java/com/mooctest/crowd/site/configuration/DataCache.java

@@ -0,0 +1,91 @@
+package com.mooctest.crowd.site.configuration;
+
+import com.mooctest.crowd.domain.repository.CommonRepo;
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author guochao
+ * @date 2021-04-08 20:11
+ */
+@Data
+@Component
+public class DataCache {
+    private Map<String, String> fieldMap;
+    private Map<String, String> applicationTypeMap;
+    private Map<String, String> testTypeMap;
+    private Map<String, List<String>> fieldToAppMap;
+    private Map<String, List<String>> appToTestTypeMap;
+    private Map<String, String> testTypeCodeToNameMap;
+
+    @Autowired
+    private CommonRepo commonRepo;
+    
+    @PostConstruct
+    public void init() {
+        // 系统启动时加载Map,每次运行初始化
+        // 获取领域、应用、测试类型code 和 name 的map
+        Map<String, String> fieldMapTemp = commonRepo.getFieldCodeNameMap();
+        Map<String, String> applicationTypeMapTemp = commonRepo.getApplicationCodeNameMap();
+        Map<String, String> testTypeMapTemp = commonRepo.getTypeCodeNameMap();
+        Map<String, List<String>> fieldToAppMapTemp = new HashMap();
+        Map<String, List<String>> appToTestTypeMapTemp = new HashMap();
+        Map<String, String> testTypeCodeToNameMapTemp = new HashMap();
+
+        // 获取所有领域类型信息
+        if(this.fieldMap != null) {
+            this.fieldMap.clear();
+        }
+        this.fieldMap = fieldMapTemp;
+
+        // 获取所有应用类型信息
+        if(applicationTypeMap != null) {
+            applicationTypeMap.clear();
+        }
+        applicationTypeMap = applicationTypeMapTemp;
+
+        // 获取所有测试类型信息
+        if(testTypeMap != null) {
+            testTypeMap.clear();
+        }
+        testTypeMap = testTypeMapTemp;
+
+//        if(testTypeCodeToNameMap != null) {
+//            testTypeCodeToNameMap.clear();
+//        }
+//        testTypeCodeToNameMap = testTypeCodeToNameMapTemp;
+//
+//        // 获取领域类型和应用类型的对应值
+//        if(fieldToAppMap != null) {
+//            fieldToAppMap.clear();
+//        }
+//        fieldToAppMap = fieldToAppMapTemp;
+//
+//        // 获取应用类型和测试类型的对应值
+//        if(appToTestTypeMap != null) {
+//            appToTestTypeMap.clear();
+//        }
+//        appToTestTypeMap = appToTestTypeMapTemp;
+    }
+
+    @PreDestroy
+    public void destroy() {
+        //系统运行结束
+    }
+
+    /**
+     * 每2小时执行一次缓存  秒 分 时 每月第几天 月 星期 年
+     */
+    @Scheduled(cron = " 0 */2 * * * *")
+    public void testOne() {
+        init();
+    }
+}

+ 1 - 1
site/src/main/java/com/mooctest/crowd/site/controller/AgencyController.java

@@ -128,7 +128,7 @@ public class AgencyController extends BaseSearchController {
     public AgencyVO updateAgencyResourceAndAbility(@PathVariable("userId") Long userId, @RequestBody @Validated AgencyResourceAbilityUpdateCommand command, BindingResult result) {
         if (result.hasErrors())
             throw new BaseException(result.getFieldError().getDefaultMessage());
-        return agencyService.upadteResourceAndAbility(userId, command);
+        return agencyService.updateResourceAndAbility(userId, command);
     }
 
     /**

+ 2 - 2
site/src/main/java/com/mooctest/crowd/site/controller/CrowdProjectController.java

@@ -164,9 +164,9 @@ public class CrowdProjectController{
 
     @LoginRequired
     @RequestMapping(value = "/api/project/{projectCode}/status/rejected", method = RequestMethod.PUT)
-    public void rejectProejct(@PathVariable("projectCode") String projectCode, HttpSession session){
+    public ProjectDetailsDTO rejectProejct(@PathVariable("projectCode") String projectCode, HttpSession session){
         Long userId = Long.parseLong((String)session.getAttribute("userId"));
-        projectService.rejectProject(projectCode, userId);
+        return projectService.rejectProject(projectCode, userId);
     }
 
     @LoginRequired

+ 2 - 1
site/src/main/java/com/mooctest/crowd/site/controller/CrowdReportController.java

@@ -99,9 +99,10 @@ public class CrowdReportController {
         log.info("更行项目报告,projectCode: " + projectCode);
         if (result.hasErrors())
             throw new BaseException(result.getFieldError().getDefaultMessage());
-        return reportService.updatePorjctReport(projectCode, reportCode, command);
+        return reportService.updateProjectReport(projectCode, reportCode, command);
     }
 
+    // 用户session接口
     public long getUserFromSession(HttpSession session) {
         long userId;
         try {

+ 25 - 2
site/src/main/java/com/mooctest/crowd/site/controller/CrowdTaskController.java

@@ -1,5 +1,6 @@
 package com.mooctest.crowd.site.controller;
 
+import com.mooctest.crowd.domain.exception.AuthorizedTimeOutException;
 import com.mooctest.crowd.domain.exception.BaseException;
 import com.mooctest.crowd.domain.exception.UnauthorizedException;
 import com.mooctest.crowd.site.annotation.LoginRequired;
@@ -11,6 +12,7 @@ import com.mooctest.crowd.site.data.dto.TaskSquareDTO;
 import com.mooctest.crowd.site.data.response.ResponseVO;
 import com.mooctest.crowd.site.data.response.ServerCode;
 import com.mooctest.crowd.site.data.tfidf.JabaResult;
+import com.mooctest.crowd.site.data.vo.ExamVO;
 import com.mooctest.crowd.site.service.CrowdTaskService;
 import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;
@@ -53,7 +55,16 @@ public class CrowdTaskController{
             throw new BaseException(result.getFieldError().getDefaultMessage());
         else if (!command.isLegal())
             throw new BaseException("信息不合法,项目可见性选择存在问题");
-        return taskService.createTask(projectCode, command, Long.parseLong((String)session.getAttribute("userId")));
+        if(session.getAttribute("userId") == null){
+            throw new AuthorizedTimeOutException("登录信息已失效,请重新登录");
+        }
+        return taskService.createTask(projectCode, command, Long.parseLong((String) session.getAttribute("userId")));
+    }
+
+    @RequestMapping(value = "/project/{projectCode}/task/{taskCode}/writerReportUrl", method = RequestMethod.GET)
+    public ResponseVO<String> getWriterReportUrl(@PathVariable("projectCode") String projectCode, @PathVariable("taskCode") String taskCode,  HttpSession session){
+        Long userId = Long.parseLong((String)session.getAttribute("userId"));
+        return new ResponseVO<>(ServerCode.SUCCESS, taskService.getWriteReportUrl(projectCode, taskCode, userId));
     }
 
     @RequestMapping(value = "/task/{taskCode}", method = RequestMethod.DELETE)
@@ -78,7 +89,9 @@ public class CrowdTaskController{
             throw new BaseException(result.getFieldError().getDefaultMessage());
         else if (!command.isLegal())
             throw new BaseException("信息不合法,项目可见性选择存在问题");
-        return taskService.updateTask(projectCode, taskCode, command, Long.parseLong((String)session.getAttribute("userId")));
+        // 判断空
+        long userId = Long.parseLong((String) session.getAttribute("userId"));
+        return taskService.updateTask(projectCode, taskCode, command, userId);
     }
 
     @LoginRequired
@@ -141,6 +154,11 @@ public class CrowdTaskController{
         return new ResponseVO<>(ServerCode.SUCCESS, taskService.getTaskWord(projectCode, taskCode));
     }
 
+    @RequestMapping(value = "/project/{projectCode}/task/{taskCode}/word/{taskDescription}", method = RequestMethod.GET)
+    public ResponseVO<List<JabaResult>> getTaskWord(@PathVariable("projectCode") String projectCode, @PathVariable("taskCode") String taskCode, @PathVariable("taskDescription") String taskDescription,HttpSession session){
+        return new ResponseVO<>(ServerCode.SUCCESS, taskService.getTaskWord(projectCode, taskCode, taskDescription));
+    }
+
     /**
      * 任务导出
      * @param projectCode
@@ -165,4 +183,9 @@ public class CrowdTaskController{
         Long userId = Long.parseLong((String)session.getAttribute("userId"));
         return new ResponseVO<>(ServerCode.SUCCESS, taskService.importTask(file, userId, 0));
     }
+
+    @RequestMapping(value = "/exam/{examId}/info", method = RequestMethod.GET)
+    public ExamVO getExamBaseInfo(@PathVariable("examId")Long examId){
+        return taskService.getExamInfo(examId);
+    }
 }

+ 6 - 90
site/src/main/java/com/mooctest/crowd/site/controller/UserController.java

@@ -2,7 +2,10 @@ package com.mooctest.crowd.site.controller;
 
 import com.mooctest.crowd.domain.IpAddress.AddressUtils;
 import com.mooctest.crowd.domain.IpAddress.Area;
-import com.mooctest.crowd.domain.exception.*;
+import com.mooctest.crowd.domain.exception.AccountNotExistException;
+import com.mooctest.crowd.domain.exception.BadRequestException;
+import com.mooctest.crowd.domain.exception.BaseException;
+import com.mooctest.crowd.domain.exception.PasswordErrorException;
 import com.mooctest.crowd.site.annotation.LoginRequired;
 import com.mooctest.crowd.site.annotation.SysAdminRequired;
 import com.mooctest.crowd.site.command.*;
@@ -10,11 +13,8 @@ import com.mooctest.crowd.site.data.dto.UserDTO;
 import com.mooctest.crowd.site.data.response.ResponseVO;
 import com.mooctest.crowd.site.data.response.ServerCode;
 import com.mooctest.crowd.site.data.vo.BaseAuthVO;
-import com.mooctest.crowd.site.data.vo.EnterpriseAuthVO;
 import com.mooctest.crowd.site.data.vo.PersonalAuthVO;
 import com.mooctest.crowd.site.data.vo.UserVO;
-import com.mooctest.crowd.site.service.EnterpriseAuthService;
-import com.mooctest.crowd.site.service.PersonalAuthService;
 import com.mooctest.crowd.site.service.UserService;
 import com.mooctest.crowd.site.util.DataUtils;
 import io.swagger.annotations.Api;
@@ -25,7 +25,6 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
-import java.io.UnsupportedEncodingException;
 import java.lang.reflect.InvocationTargetException;
 import java.util.List;
 
@@ -38,11 +37,6 @@ import java.util.List;
 @RestController
 @RequestMapping("/api")
 public class UserController extends BaseController{
-    @Autowired
-    private PersonalAuthService personalAuthService;
-    @Autowired
-    private EnterpriseAuthService enterpriseAuthService;
-
 
     @Autowired
     private UserService userService;
@@ -74,7 +68,6 @@ public class UserController extends BaseController{
         return userService.getUser(userId);
     }
 
-
     /**
      * 获取用户头像接口
      * @param userId
@@ -114,7 +107,7 @@ public class UserController extends BaseController{
      * 获取邮箱验证码
      */
     @RequestMapping(value = "/verify/email", method = RequestMethod.PUT)
-    public ResponseVO<Object> verifyMail(@RequestBody ModifyCommand modifyCommand, HttpServletRequest request) throws InvocationTargetException, IllegalAccessException {
+    public ResponseVO<Object> verifyEmail(@RequestBody ModifyCommand modifyCommand, HttpServletRequest request) throws InvocationTargetException, IllegalAccessException {
         return userService.verifyMail(modifyCommand, request);
     }
 
@@ -233,83 +226,6 @@ public class UserController extends BaseController{
         return userService.getPersonalAuthInfo(userId);
     }
 
-    /**
-     * 获取企业认证信息
-     *
-     * @param userId
-     * @return
-     */
-    @LoginRequired
-    @RequestMapping(value = "/user/{userId}/enterpriseAuth", method = RequestMethod.GET)
-    public EnterpriseAuthVO getEnterpriseAuthInfo(@PathVariable("userId") Long userId) {
-        return userService.getEnterpriseAuthInfo(userId);
-    }
-
-    /**
-     * 申请企业认证接口
-     *
-     * @param userId
-     * @param command
-     * @param result
-     * @param session
-     * @return
-     */
-    @LoginRequired
-    @PostMapping(value = "/user/{userId}/enterpriseAuth")
-    public EnterpriseAuthVO test(@PathVariable("userId") Long userId,
-                                 @Validated @RequestBody ApplyEnterpriseAuthCommand command,
-                                 BindingResult result, HttpSession session){
-//        if (!userId.equals(Long.parseLong((String) session.getAttribute("userId"))))
-//            throw new UnauthorizedException("没有权限对他人账号进行操作!");
-//        if (result.hasErrors())
-//            throw new BaseException(result.getFieldError().getDefaultMessage());
-        System.out.println(command);
-        return userService.applyEnterpriseAuth(userId, command);
-    }
-
-    /**
-     * 更新企业认证信息
-     *
-     * @param userId
-     * @param command
-     * @param result
-     * @return
-     */
-    @LoginRequired
-    @RequestMapping(value = "/user/{userId}/enterpriseAuth", method = RequestMethod.PUT)
-    public EnterpriseAuthVO updatePersonalAuthInfo(@PathVariable("userId") Long userId,
-                                                   @Validated @RequestBody ApplyEnterpriseAuthCommand command,
-                                                   BindingResult result) {
-        if (result.hasErrors())
-            throw new BaseException(result.getFieldError().getDefaultMessage());
-        return userService.updateEnterpriseAuthInfo(userId, command);
-    }
-
-    /**
-     * 企业认证:审核通过
-     *
-     * @param userId
-     * @return
-     */
-    @LoginRequired
-    @SysAdminRequired
-    @RequestMapping(value = "/user/{userId}/enterpriseAuth/status/accept", method = RequestMethod.PUT)
-    public EnterpriseAuthVO passEnterpriseAuth(@PathVariable("userId") Long userId) {
-        return userService.passEnterpriseAuth(userId);
-    }
-
-    /**
-     * 企业认证:审核未通过
-     *
-     * @param userId
-     * @return
-     */
-    @LoginRequired
-    @RequestMapping(value = "/user/{userId}/enterpriseAuth/status/reject", method = RequestMethod.PUT)
-    public EnterpriseAuthVO rejectEnterpriseAuth(@PathVariable("userId") Long userId, @RequestBody @Validated AuthRejectCommand command) {
-        return userService.rejectEnterpriseAuth(userId, command.getExplain());
-    }
-
     @LoginRequired
     @SysAdminRequired
     @RequestMapping(value = "/user/authentication/handling", method = RequestMethod.GET)
@@ -331,7 +247,7 @@ public class UserController extends BaseController{
      * @return
      */
     @RequestMapping(value = "index/address", method = RequestMethod.GET)
-    public Area getAddressByIp(HttpServletRequest request) throws UnsupportedEncodingException{
+    public Area getAddressByIp(HttpServletRequest request){
         String ip = DataUtils.getClientIp(request);
         LOG.info("ip地址是========" + ip);
         Area area = AddressUtils.getProvinceName(ip);

+ 2 - 1
site/src/main/java/com/mooctest/crowd/site/controller/interceptor/SysAdminCheckInterceptor.java

@@ -4,6 +4,7 @@ import com.mooctest.crowd.domain.domainobject.User;
 import com.mooctest.crowd.domain.exception.UnauthorizedException;
 import com.mooctest.crowd.domain.repository.UserRepo;
 import com.mooctest.crowd.site.annotation.SysAdminRequired;
+import com.mooctest.crowd.domain.domainobject.enums.RoleType;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -33,7 +34,7 @@ public class SysAdminCheckInterceptor extends HandlerInterceptorAdapter {
                 throw new UnauthorizedException("请登录后操作");
             Long userId = Long.parseLong((String)request.getSession().getAttribute("userId"));
             User user = userRepo.getByID(userId);
-            if (user.getRoleList().stream().anyMatch(role -> role.getName().equals("SystemAdministrator"))){
+            if (user.getRoleList().stream().anyMatch(role -> role.getName().equals(RoleType.SYSTEM_ADMIN.getName()))){
                 return true;
             } else {
                 log.warn("无权限的访问,userId: " + userId);

+ 3 - 0
site/src/main/java/com/mooctest/crowd/site/data/TaskOperationControl.java

@@ -23,6 +23,7 @@ public class TaskOperationControl {
     private boolean taskDemonstrate = false;
     private boolean taskRecommend = false;
     private boolean exportTask = false;
+    private boolean forkTask = false;
 
     public void hasAll(){
         this.receive = true;
@@ -34,6 +35,7 @@ public class TaskOperationControl {
         this.taskDemonstrate = true;
         this.taskRecommend = true;
         this.exportTask = true;
+        this.forkTask = true;
     }
 
     public void noAll(){
@@ -47,5 +49,6 @@ public class TaskOperationControl {
         this.taskDemonstrate = false;
         this.taskRecommend = false;
         this.exportTask = false;
+        this.forkTask = false;
     }
 }

+ 2 - 0
site/src/main/java/com/mooctest/crowd/site/data/dto/MyCrowdDTO.java

@@ -31,4 +31,6 @@ public class MyCrowdDTO implements Serializable {
     private Long unfinishedTaskCount;
     private Long finishedTaskCount;
     private boolean canImportTask;
+    private boolean isAgency;
+    private boolean isPart;
 }

+ 2 - 0
site/src/main/java/com/mooctest/crowd/site/data/dto/TaskDetailsDTO.java

@@ -5,6 +5,7 @@ import com.mooctest.crowd.site.data.vo.CrowdReportVO;
 import com.mooctest.crowd.site.data.vo.CrowdTaskVO;
 import com.mooctest.crowd.site.data.vo.TaskToUserVO;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.util.List;
 
@@ -13,6 +14,7 @@ import java.util.List;
  * @Date: 2019.7.15 20:17
  */
 @Data
+@NoArgsConstructor
 public class TaskDetailsDTO {
     private CrowdTaskVO crowdTaskVO;
     private List<TaskToUserVO> acceptedUserList;

+ 0 - 27
site/src/main/java/com/mooctest/crowd/site/data/enums/BooleanType.java

@@ -1,27 +0,0 @@
-package com.mooctest.crowd.site.data.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.NoArgsConstructor;
-
-/**
- * @author: Diors.Po
- * @Email: 171256175@qq.com
- * @date 2019-07-30 00:33
- */
-@AllArgsConstructor
-@NoArgsConstructor
-public enum BooleanType {
-    YES(1, "yes"),
-    NO(0, "no");
-
-    private int id;
-    private String name;
-
-    public int getId() {
-        return id;
-    }
-
-    public String getName() {
-        return name;
-    }
-}

+ 5 - 5
site/src/main/java/com/mooctest/crowd/site/data/vo/AgencyVO.java

@@ -31,11 +31,11 @@ public class AgencyVO {
     private Long taskCount;
     private int isDeleted;
     private String businessLicensePhoto;
-    private Timestamp updateTime;
-    private Timestamp expireTime;
-    private Timestamp createTime;
+    private Timestamp updateTime;// 更新时间
+    private Timestamp expireTime;// 过期时间
+    private Timestamp createTime;// 创建时间
     private StatusVO authStatus;
-    private Timestamp applyTime;
+    private Timestamp applyTime;// 申请时间
     private List<String> roleList;
     private String IdCardNum;
     private String legalPersonName;
@@ -43,7 +43,7 @@ public class AgencyVO {
     private String gender;
     private String idCardPositivePhoto;//身份证正面照
     private String idCardBackPhoto;//身份证反面照
-    private Date idCardDeadTime;
+    private Date idCardDeadTime;    // 身份证过期时间
 
 
     public AgencyVO(EvaluationAgency agency){

+ 0 - 9
site/src/main/java/com/mooctest/crowd/site/data/vo/BaseAuthVO.java

@@ -1,6 +1,5 @@
 package com.mooctest.crowd.site.data.vo;
 
-import com.mooctest.crowd.domain.domainobject.EnterpriseAuthentication;
 import com.mooctest.crowd.domain.domainobject.EvaluationAgency;
 import com.mooctest.crowd.domain.domainobject.PersonalAuthentication;
 import lombok.Data;
@@ -28,14 +27,6 @@ public class BaseAuthVO {
         this.authStatus = new StatusVO(personalAuthentication.getIsAuthentication());
     }
 
-    public BaseAuthVO(EnterpriseAuthentication enterpriseAuthentication){
-
-        this.applytime = enterpriseAuthentication.getApplyTime();
-        this.userId = enterpriseAuthentication.getUserId();
-        this.type = "enterprise";
-        this.authStatus = new StatusVO(enterpriseAuthentication.getIsAuthentication());
-    }
-
     public BaseAuthVO(EvaluationAgency agency){
         this.userName = agency.getEvaluationAgencyName();
         this.applytime = agency.getApplyTime();

+ 3 - 2
site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdProjectVO.java

@@ -41,7 +41,7 @@ public class CrowdProjectVO implements Serializable {
     private Long resource;
     private Long userId;
     private Map<String, String> location;
-    private String institution;
+    private Long institution;
 
     @JSONField(format = "yyyy-MM-dd HH:mm:ss")
     private Timestamp datetime;
@@ -54,6 +54,7 @@ public class CrowdProjectVO implements Serializable {
     private Integer status;
     private int joinCount;
     private Long regionManagerId;
+    private String regionManagerName;
     private StatusVO statusVO;
     private Boolean needHandle = false; //该项目需要处理
     @JSONField(format = "yyyy-MM-dd HH:mm:ss")
@@ -128,7 +129,7 @@ public class CrowdProjectVO implements Serializable {
             this.statusVO.setStyle("primary");
         }else if (this.status == CrowdTestProjectStatus.HAS_COMMITED){
             this.statusVO.setText("已提交");
-            this.statusVO.setStyle("primary");
+            this.statusVO.setStyle("danger");
         }else if (this.status == CrowdTestProjectStatus.HAS_FINISHED) {
             this.statusVO.setText("已完成");
             this.statusVO.setStyle("success");

+ 9 - 1
site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTaskVO.java

@@ -4,10 +4,12 @@ import com.alibaba.fastjson.annotation.JSONField;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTaskAcceptStatus;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTaskStatus;
+import com.mooctest.crowd.site.configuration.DataCache;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 
 import java.io.Serializable;
 import java.sql.Timestamp;
@@ -38,8 +40,9 @@ public class CrowdTaskVO implements Serializable{
     private String requirementFile;
     private Long resource;
     private Long agencyId;
+    private String agencyName;
     private Map<String, String> location;
-    private String institution;
+    private Long institution;
     private String serviceType;
     private int status;
     private Long distributionType;
@@ -59,6 +62,9 @@ public class CrowdTaskVO implements Serializable{
     private EndPointVO endPointVO;
     private String writeReportUrl;
     private String exportUrl;
+    private String acceptedPassword;
+    @Autowired
+    private DataCache dataCache;
 
     public CrowdTaskVO(CrowdTestTask task){
         BeanUtils.copyProperties(task, this);
@@ -79,9 +85,11 @@ public class CrowdTaskVO implements Serializable{
         status = task.getStatus();
         fullStatus = task.getFullStatus();
         agencyId = task.getEvaluationAgencyId();
+        institution = task.getEvaluationAgencyId();
         datetime = task.getDeadTime();
         participantCount = task.getParticipantCount();
         acceptedCount = task.getAcceptedCount();
+        acceptedPassword = this.projectId.substring(this.projectId.length() - 2) + this.code.substring(this.code.length() - 2);
         joinCount = task.getAcceptedCount();
         createTime = task.getCreateTime();
         participantHasCommittedCount = task.getParticipantHasCommittedCount();

+ 2 - 0
site/src/main/java/com/mooctest/crowd/site/data/vo/EndPointVO.java

@@ -14,6 +14,8 @@ import org.springframework.beans.BeanUtils;
 public class EndPointVO {
     private String serverCode;
     private String token;
+    private int collaborativeType;
+    private String threePageUrl;
 
     public EndPointVO(EndPoint endPoint){
         BeanUtils.copyProperties(endPoint, this);

+ 20 - 0
site/src/main/java/com/mooctest/crowd/site/data/vo/ExamVO.java

@@ -0,0 +1,20 @@
+package com.mooctest.crowd.site.data.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author guochao
+ * @date 2021-05-25 15:36
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ExamVO {
+	private Long id;
+	private String name;
+	private Long beginTime;
+	private Long endTime;
+	private String info;
+}

+ 0 - 1
site/src/main/java/com/mooctest/crowd/site/data/vo/PersonalAuthVO.java

@@ -43,6 +43,5 @@ public class PersonalAuthVO {
         }
         this.authStatus = new StatusVO();
         this.authStatus.initAuthStatus(this.isAuthentication);
-
     }
 }

+ 0 - 3
site/src/main/java/com/mooctest/crowd/site/data/vo/StatusVO.java

@@ -35,17 +35,14 @@ public class StatusVO {
 
     public void initUserAuthStatus(User user){
         if ((user.getPersonalAuthentication()!=null && user.getPersonalAuthentication().getIsAuthentication()==AuthenticationStatus.isAuthenticated)
-                || (user.getEnterpriseAuthentication()!=null && user.getEnterpriseAuthentication().getIsAuthentication() == AuthenticationStatus.isAuthenticated)
                 || (user.getEvaluationAgency()!=null && user.getEvaluationAgency().getIsAuthentication() == AuthenticationStatus.isAuthenticated)){
             this.setText("审核通过");
             this.setStyle("primary");
         } else if ((user.getPersonalAuthentication()!=null && user.getPersonalAuthentication().getIsAuthentication()==AuthenticationStatus.isAuthenIng)
-                || (user.getEnterpriseAuthentication()!=null && user.getEnterpriseAuthentication().getIsAuthentication() == AuthenticationStatus.isAuthenIng)
                 || (user.getEvaluationAgency()!=null && user.getEvaluationAgency().getIsAuthentication() == AuthenticationStatus.isAuthenIng)){
             this.setText("认证审核中");
             this.setStyle("warning");
         } else if ((user.getPersonalAuthentication()!=null && user.getPersonalAuthentication().getIsAuthentication()==AuthenticationStatus.isNotAuthenticated)
-                || (user.getEnterpriseAuthentication()!=null && user.getEnterpriseAuthentication().getIsAuthentication() == AuthenticationStatus.isNotAuthenticated)
                 || (user.getEvaluationAgency()!=null && user.getEvaluationAgency().getIsAuthentication() == AuthenticationStatus.isNotAuthenticated)) {
             this.setText("审核未通过");
             this.setStyle("danger");

+ 0 - 2
site/src/main/java/com/mooctest/crowd/site/data/vo/UserVO.java

@@ -47,8 +47,6 @@ public class UserVO implements Serializable {
         this.password = "********";
         if (user.getEvaluationAgency() != null) {
             this.authType = "agency";
-        } else if (user.getEnterpriseAuthentication() != null) {
-            this.authType = "enterprise";
         } else if (user.getPersonalAuthentication() != null) {
             this.authType = "personal";
         } else

+ 6 - 20
site/src/main/java/com/mooctest/crowd/site/mediator/ViewMediator.java

@@ -6,8 +6,6 @@ import com.mooctest.crowd.domain.domainobject.User;
 import com.mooctest.crowd.domain.exception.AccountNotExistException;
 import com.mooctest.crowd.domain.exception.BadRequestException;
 import com.mooctest.crowd.domain.exception.PasswordErrorException;
-import com.mooctest.crowd.site.command.ApplyEnterpriseAuthCommand;
-import com.mooctest.crowd.site.command.ApplyPersonalAuthCommand;
 import com.mooctest.crowd.site.command.LoginCommand;
 import com.mooctest.crowd.site.command.RegisterCommand;
 import com.mooctest.crowd.site.data.dto.*;
@@ -23,19 +21,11 @@ import java.util.Map;
  * @Date: 2019.7.16 20:25
  */
 public interface ViewMediator {
-    List<CrowdTestProjectVO> crowdTestProjects();
-
-    void saveEnterpriseRole(User user, ApplyEnterpriseAuthCommand applyEnterpriseAuthCommand);
-
-    void saveUserRole(User user, ApplyPersonalAuthCommand command);
 
     List<UserVO> renderMoreUser(Pageable pageable, String keyword);
 
-
     List<CrowdTaskVO> findMoreHotTasks();
 
-    List<CrowdTestProjectVO> findMoreHotProjects();
-
     EnterpriseAuthVO getEnterpriseAuthByUserId(Long userId);
 
     PersonalAuthVO getByUserId(Long userId);
@@ -50,10 +40,12 @@ public interface ViewMediator {
 
     IndexInfoDTO renderIndexInfos();
 
-    MyCrowdDTO renderMyCrowd(Long userId);
+    MyCrowdDTO renderMyCrowd(User user);
 
     UserDataDTO renderMyCrowdData(Long userId);
 
+    List<RegionalManagerVO> renderRegionManagerList();
+
     TaskSquareDTO renderTaskSquare();
 
     CrowdProjectVO changeFieldAndApplicationAndTestType(CrowdProjectVO projectVO, Map<String, String> applicationMap
@@ -62,15 +54,13 @@ public interface ViewMediator {
     CrowdTestProject changeFieldAndApplicationAndTestType(CrowdTestProject project, Map<String, String> applicationMap
             , Map<String, String> fieldMap, Map<String, String> testMap);
 
-    CrowdTestTask changeFieldAndApplicationAndTestTypeByTask(CrowdTestTask task, Map<String, String> applicationMap
-            , Map<String, String> fieldMap, Map<String, String> testMap);
-
     CrowdTestTask changeTypeByProjectAndTask(CrowdTestProject project, CrowdTestTask task, Map<String, String> applicationMap
             , Map<String, String> fieldMap, Map<String, String> testMap);
 
-    CrowdTestTask changeTypeByProjectAndTask(CrowdTestProject project, CrowdTestTask task);
+    CrowdTaskVO changeTypeByProjectAndTaskVO(CrowdTestProject project, CrowdTaskVO task, Map<String, String> applicationMap
+            , Map<String, String> fieldMap, Map<String, String> testMap);
 
-    ProjectDetailsDTO renderProjectDetails(CrowdTestProject project, User user);
+    ProjectDetailsDTO renderProjectDetails(CrowdTestProject project, Long userId);
 
     ReportDetailsDTO renderTaskReportDetails(String projectCode, String taskCode, String reportCode, Long userId);
 
@@ -82,8 +72,6 @@ public interface ViewMediator {
 
     UserDTO renderUser(User user);
 
-    List<RegionalManagerVO> renderRegionManagerList();
-
     List<EvaluationAgencyVO> renderAgencyList();
 
     List<TestUserOrAgencyVO> renderAgencyAndTestUserList();
@@ -140,8 +128,6 @@ public interface ViewMediator {
 
     BankCardDTO getBankType();
 
-    List<CrowdTestProjectVO> crowdTestProjectsWaitingAccept();
-
     List<UserTaskCountVO> getCount();
 
     void  jumpPublicTesting(String projectCode, String taskCode, Long userId);

+ 6 - 1
site/src/main/java/com/mooctest/crowd/site/mediator/impl/OperationMediatorImpl.java

@@ -1,6 +1,8 @@
 package com.mooctest.crowd.site.mediator.impl;
 
 import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
+import com.mooctest.crowd.domain.domainobject.CrowdTestProjectStatus;
+import com.mooctest.crowd.domain.domainobject.enums.DistributeType;
 import com.mooctest.crowd.domain.repository.CommonRepo;
 import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
 import com.mooctest.crowd.site.command.CrowdTestProjectCommand;
@@ -52,10 +54,13 @@ public class OperationMediatorImpl implements OperationMediator {
         CrowdTestProject updateProject = command.toCrowdProject();
         updateProject.setId(project.getId());
         updateProject.setCode(project.getCode());
-        updateProject.setStatus(project.getStatus());
+        updateProject.setStatus(CrowdTestProjectStatus.HAS_RELEASED);
         if(updateProject.getCreateTime() == null){
             updateProject.setCreateTime(new Timestamp(System.currentTimeMillis()));
         }
+        if(updateProject.getProjectDistributionTypeId() != DistributeType.DIRECT.getId()){
+            updateProject.setRegionalManagerId(null);
+        }
         themeSchedulerService.createNewThemeScheduler(updateProject);
         return updateProject;
     }

+ 123 - 250
site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java

@@ -4,24 +4,24 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.mooctest.crowd.domain.dao.*;
 import com.mooctest.crowd.domain.domainobject.*;
+import com.mooctest.crowd.domain.domainobject.ApplicationType;
+import com.mooctest.crowd.domain.domainobject.enums.DistributeType;
 import com.mooctest.crowd.domain.exception.*;
 import com.mooctest.crowd.domain.factory.CrowdTestProjectFactory;
 import com.mooctest.crowd.domain.model.*;
 import com.mooctest.crowd.domain.repository.*;
 import com.mooctest.crowd.domain.util.Converter;
-import com.mooctest.crowd.site.command.ApplyEnterpriseAuthCommand;
-import com.mooctest.crowd.site.command.ApplyPersonalAuthCommand;
 import com.mooctest.crowd.site.command.LoginCommand;
 import com.mooctest.crowd.site.command.RegisterCommand;
+import com.mooctest.crowd.site.configuration.DataCache;
 import com.mooctest.crowd.site.data.ProjectOperationControl;
 import com.mooctest.crowd.site.data.TaskOperationControl;
 import com.mooctest.crowd.site.data.dto.*;
-import com.mooctest.crowd.site.data.enums.RoleType;
+import com.mooctest.crowd.domain.domainobject.enums.RoleType;
 import com.mooctest.crowd.site.data.vo.*;
 import com.mooctest.crowd.site.mediator.ViewMediator;
 import com.mooctest.crowd.site.service.CrowdTaskService;
 import com.mooctest.crowd.site.service.ThemeStatusService;
-import com.mooctest.crowd.site.service.ThemeStatusTaskService;
 import com.mooctest.crowd.site.service.impl.AuthCheckServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.codehaus.jettison.json.JSONException;
@@ -45,9 +45,6 @@ import java.util.stream.Collectors;
 @Component("WebMediator")
 public class WebMediatorImpl implements ViewMediator {
     @Autowired
-    private TestTypeDao testTypeDao;
-
-    @Autowired
     private CrowdTaskService crowdTaskService;
 
     @Autowired
@@ -66,6 +63,9 @@ public class WebMediatorImpl implements ViewMediator {
     private CommonRepo commonRepo;
 
     @Autowired
+    private DataCache dataCache;
+
+    @Autowired
     private ToolRepo toolRepo;
 
     @Autowired
@@ -81,9 +81,6 @@ public class WebMediatorImpl implements ViewMediator {
     private CrowdTestReportDao crowdTestReportDao;
 
     @Autowired
-    private RegionalManagerToRegionalDao regionalManagerToRegionalDao;
-
-    @Autowired
     private EvaluationAgencyDao agencyDao;
 
     @Autowired
@@ -114,29 +111,17 @@ public class WebMediatorImpl implements ViewMediator {
     private BankLogoDao bankLogoDao;
 
     @Autowired
-    private ApplicationTypeDao applicationTypeDao;
-
-    @Autowired
     private ResourceDao resourceDao;
 
     @Autowired
     private ResourceTypeDao resourceTypeDao;
 
     @Autowired
-    private FieldDao fieldDao;
-
-    @Autowired
-    private UserToRoleDao userToRoleDao;
+    private RegionalManagerToRegionalDao regionalManagerToRegionalDao;
 
     @Autowired
     private ThemeStatusService themeStatusService;
 
-    @Autowired
-    private ThemeStatusTaskService themeStatusTaskService;
-
-    @Autowired
-    private EndPointDao endPointDao;
-
     @Value("${file.save.path}")
     private String fileSaveRootPath;
 
@@ -171,78 +156,6 @@ public class WebMediatorImpl implements ViewMediator {
     private String indexResourceCount;
 
     @Override
-    public List<CrowdTestProjectVO> crowdTestProjects() {
-        List<CrowdTestProjectVO> resultList = new ArrayList<>();
-        resultList.addAll(projectDao.findAll().stream().map(crowdTestProjectPO -> {
-            CrowdTestProject crowdTestProject = new CrowdTestProject();
-            BeanUtils.copyProperties(crowdTestProjectPO, crowdTestProject);
-            return new CrowdTestProjectVO(crowdTestProject);
-        }).collect(Collectors.toList()));
-        return resultList;
-    }
-
-    @Override
-    public void saveEnterpriseRole(User user, ApplyEnterpriseAuthCommand applyEnterpriseAuthCommand) {
-        //如果是研发机构那么能发包
-        if(applyEnterpriseAuthCommand.getRoleList().contains(0) && applyEnterpriseAuthCommand.getRoleList().contains(1)){
-            UserToRolePO u2r = new UserToRolePO();
-            u2r.setUserId(user.getId());
-            u2r.setRoleId(8L);
-            userToRoleDao.save(u2r);
-            UserToRolePO u2rl = new UserToRolePO();
-            u2rl.setUserId(user.getId());
-            u2rl.setRoleId(2L);
-            userToRoleDao.save(u2rl);
-
-        }
-        else if(applyEnterpriseAuthCommand.getRoleList().contains(1)){
-            UserToRolePO u2r = new UserToRolePO();
-            u2r.setUserId(user.getId());
-            u2r.setRoleId(2L);
-            userToRoleDao.save(u2r);
-        }
-        else if(applyEnterpriseAuthCommand.getRoleList().contains(0)){
-            UserToRolePO u2r = new UserToRolePO();
-            u2r.setUserId(user.getId());
-            u2r.setRoleId(8L);
-            userToRoleDao.save(u2r);
-        }
-    }
-
-    @Override
-    public void saveUserRole(User user, ApplyPersonalAuthCommand command) {
-        if (command.getRoleList().size() == 0 || command.getRoleList() == null) {
-            throw new BaseException("请选择成为发包或者接包用户");
-        }
-        UserPO userPO = userDao.save(Converter.convert(UserPO.class, user));
-        //如果两个都选择那么权限都给
-        if (command.getRoleList().contains(1) && command.getRoleList().contains(0)) {
-            UserToRolePO u2r = new UserToRolePO();
-            u2r.setUserId(userPO.getId());
-            u2r.setRoleId(RoleType.PARTY_USER.getId());
-            userToRoleDao.save(u2r);
-            UserToRolePO u2rl = new UserToRolePO();
-            u2rl.setUserId(userPO.getId());
-            u2rl.setRoleId(RoleType.EVALUATION_USER.getId());
-            userToRoleDao.save(u2rl);
-        }
-        //如果选择成为发包用户
-        else if (command.getRoleList().contains(0)) {
-            UserToRolePO u2r = new UserToRolePO();
-            u2r.setUserId(userPO.getId());
-            u2r.setRoleId(RoleType.PARTY_USER.getId());
-            userToRoleDao.save(u2r);
-        }
-        //如果选择成为接包用户
-        else if (command.getRoleList().contains(1)) {
-            UserToRolePO u2r = new UserToRolePO();
-            u2r.setUserId(userPO.getId());
-            u2r.setRoleId(RoleType.EVALUATION_USER.getId());
-            userToRoleDao.save(u2r);
-        }
-    }
-
-    @Override
     public List<UserVO> renderMoreUser(Pageable pageable,String keyword) {
         //获取众测人员排名
 //        String agencyName = agencyDao.findById(Long.parseLong(agencyId)).get().getEvaluationAgencyName();
@@ -281,19 +194,6 @@ public class WebMediatorImpl implements ViewMediator {
     }
 
     @Override
-    public List<CrowdTestProjectVO> findMoreHotProjects() {
-        List<CrowdTestProjectPO> list = projectDao.findMoreHotProjects();//已经根据创建时间排序好了。
-        //根据 参加人数倒序排序
-        List<CrowdTestProjectVO> hotMoreTestprojects = projectDao.findMoreHotProjects().stream().map(crowdTestProjectPO -> {
-            CrowdTestProject project = new CrowdTestProject();
-            BeanUtils.copyProperties(crowdTestProjectPO, project);
-            return new CrowdTestProjectVO(project);
-        }).collect(Collectors.toList());
-        return hotMoreTestprojects;
-    }
-
-
-    @Override
     public EnterpriseAuthVO getEnterpriseAuthByUserId(Long userId) {
         EnterpriseAuthentication enterpriseAuthentication = new EnterpriseAuthentication();
         EnterpriseAuthenticationPO enterpriseAuthenticationPO = enterpriseAuthenticationDao.findByUserId(userId);
@@ -492,15 +392,15 @@ public class WebMediatorImpl implements ViewMediator {
     }
 
     @Override
-    public MyCrowdDTO renderMyCrowd(Long userId) {
+    public MyCrowdDTO renderMyCrowd(User user) {
+        Long userId = user.getId();
         MyCrowdDTO myCrowdDTO = new MyCrowdDTO();
-        User user = userRepo.getByID(userId);
         //我的众测 - 项目相关信息
         
         // 获取领域、应用、测试类型code 和 name 的map
-        Map<String, String> fieldMap = commonRepo.getFieldCodeNameMap();
-        Map<String, String> applicationMap = commonRepo.getApplicationCodeNameMap();
-        Map<String, String> testMap = commonRepo.getTypeCodeNameMap();
+        Map<String, String> fieldMap = dataCache.getFieldMap();
+        Map<String, String> applicationMap = dataCache.getApplicationTypeMap();
+        Map<String, String> testMap = dataCache.getTestTypeMap();
 
         //获取我创建的项目列表
         List<CrowdProjectVO> myProjects = projectDao.findByUserIdAndIsDeleted(userId, DeletedStatus.isNotDeleted)
@@ -512,7 +412,7 @@ public class WebMediatorImpl implements ViewMediator {
                     if (project.getStatus() == CrowdTestProjectStatus.HAS_COMMITED)
                         projectVO.setNeedHandle(true);
                     // 领域类型、应用类型值的转换
-                    projectVO = changeFieldAndApplicationAndTestType(projectVO, applicationMap, fieldMap, testMap);
+                    projectVO = this.changeFieldAndApplicationAndTestType(projectVO, applicationMap, fieldMap, testMap);
 
                     // 判断项目是否截止
                     if (projectVO.getDatetime().getTime() <= System.currentTimeMillis() && project.getStatus() < CrowdTestProjectStatus.HAS_FINISHED) {
@@ -524,7 +424,7 @@ public class WebMediatorImpl implements ViewMediator {
         myCrowdDTO.setMyProjectCount((long) (myCrowdDTO.getMyProjects() == null ? 0 : myProjects.size()));
 
         //对于区域管理员crowdTestProjectPO -> crowdTestProjectPO.getStatus() > CrowdTestProjectStatus.HAS_RELEASED
-        if (user.getRoleList().stream().anyMatch(role -> role.getName().equals("RegionalManager"))) {
+        if (user.getRoleList().stream().anyMatch(role -> role.getName().equals(RoleType.REGIONAL_MANAGER.getName()))) {
             List<CrowdTestProjectPO> crowdTestProjectPOList = projectDao.findByRegionalManagerIdAndIsDeleted(userId, DeletedStatus.isNotDeleted)
                     .stream().map(crowdTestProjectPO -> {
                         // 判断项目是否截止
@@ -587,7 +487,7 @@ public class WebMediatorImpl implements ViewMediator {
 
         // 测评机构或者测试人员
         if (AuthCheckServiceImpl.isAgency(user)) {
-            List<TaskToUserPO> taskToUserPOS = taskToUserDao.findByUserId(user.getId());
+            List<TaskToUserPO> taskToUserPOS = taskToUserDao.findByUserId(userId);
             if (taskToUserPOS != null && taskToUserPOS.size() > 0) {
                 allTaskOfAgency = taskToUserPOS.stream().map(taskToUserPO -> {
                             CrowdTestTaskPO crowdTestTaskPO = taskDao.findByCodeAndIsDeleted(taskToUserPO.getTaskCode(), DeletedStatus.isNotDeleted);
@@ -610,7 +510,7 @@ public class WebMediatorImpl implements ViewMediator {
                         }).filter(Objects::nonNull).collect(Collectors.toList());
                 if(allTaskOfAgency != null && allTaskOfAgency.size() > 0){
                     unfinishedTasks = allTaskOfAgency.stream()
-                            .filter(crowdTestTask -> crowdTestTask.getStatus() >= CrowdTestTaskStatus.HAS_RELEASED && crowdTestTask.getStatus() < CrowdTestTaskStatus.HAS_FINISHED)
+                            .filter(crowdTestTask -> crowdTestTask.getStatus() >= CrowdTestTaskStatus.HAS_RELEASED && (crowdTestTask.getStatus() < CrowdTestTaskStatus.HAS_FINISHED || crowdTestTask.getStatus() == CrowdTestTaskStatus.HAS_TIME_OUT))
                             .sorted(Comparator.comparing(CrowdTestTask::getCreateTime).reversed())
                             .map(CrowdTaskVO::new).collect(Collectors.toList());
 
@@ -623,7 +523,7 @@ public class WebMediatorImpl implements ViewMediator {
         }
         myCrowdDTO.setFinishedTasks(finishedTasks);
         myCrowdDTO.setUnfinishedTasks(unfinishedTasks);
-        myCrowdDTO.setUnfinishedTaskNoticeCount((long) unfinishedTasks.size());
+        myCrowdDTO.setUnfinishedTaskNoticeCount(unfinishedTasks == null ? 0 : (long) unfinishedTasks.size());
         myCrowdDTO.setFinishedTaskCount((long) (myCrowdDTO.getFinishedTasks() == null ? 0 : myCrowdDTO.getFinishedTasks().size()));
         myCrowdDTO.setUnfinishedTaskCount((long) (myCrowdDTO.getUnfinishedTasks() == null ? 0 : myCrowdDTO.getUnfinishedTasks().size()));
         return myCrowdDTO;
@@ -719,55 +619,33 @@ public class WebMediatorImpl implements ViewMediator {
     }
 
     @Override
-    public CrowdTestTask changeFieldAndApplicationAndTestTypeByTask(CrowdTestTask task, Map<String, String> applicationMap
-            , Map<String, String> fieldMap, Map<String, String> testMap) {
-        // 领域类型值的转换
-        task.setFieldType(fieldMap.get(task.getFieldType()));
-        // 应用类型值的转换
-        task.setApplicationType(applicationMap.get(task.getApplicationType()));
-        // 测试类型值的转换
-        task.setType(testMap.get(task.getType()));
-        return task;
-    }
-
-    @Override
     public CrowdTestTask changeTypeByProjectAndTask(CrowdTestProject project, CrowdTestTask task, Map<String, String> applicationMap
             , Map<String, String> fieldMap, Map<String, String> testMap) {
-        // 获取项目的领域、应用类型赋值给任务
-        task.setFieldType(project.getFieldType());
-        task.setApplicationType(project.getApplicationType());
         // 领域类型值的转换
-        task.setFieldType(fieldMap.get(task.getFieldType()));
+        task.setFieldType(fieldMap.get(project.getFieldType()));
         // 应用类型值的转换
-        task.setApplicationType(applicationMap.get(task.getApplicationType()));
+        task.setApplicationType(applicationMap.get(project.getApplicationType()));
         // 测试类型值的转换
         task.setType(testMap.get(task.getType()));
         return task;
     }
 
     @Override
-    public CrowdTestTask changeTypeByProjectAndTask(CrowdTestProject project, CrowdTestTask task) {
-        // 获取领域、应用、测试类型code 和 name 的map
-        Map<String, String> fieldMap = commonRepo.getFieldCodeNameMap();
-        Map<String, String> applicationMap = commonRepo.getApplicationCodeNameMap();
-        Map<String, String> testMap = commonRepo.getTypeCodeNameMap();
-
+    public CrowdTaskVO changeTypeByProjectAndTaskVO(CrowdTestProject project, CrowdTaskVO task, Map<String, String> applicationMap
+            , Map<String, String> fieldMap, Map<String, String> testMap) {
         // 获取项目的领域、应用类型赋值给任务
-        task.setFieldType(project.getFieldType());
-        task.setApplicationType(project.getApplicationType());
         // 领域类型值的转换
-        task.setFieldType(fieldMap.get(task.getFieldType()));
+        task.setFieldType(fieldMap.get(project.getFieldType()));
         // 应用类型值的转换
-        task.setApplicationType(applicationMap.get(task.getApplicationType()));
+        task.setApplicationType(applicationMap.get(project.getApplicationType()));
         // 测试类型值的转换
-        task.setType(testMap.get(task.getType()));
+        task.setServiceType(testMap.get(task.getServiceType()));
         return task;
     }
 
-
     @Override
     public TaskSquareDTO renderTaskSquare() {
-        Map<String, String> testMap = commonRepo.getTypeCodeNameMap();
+        Map<String, String> testMap = dataCache.getTestTypeMap();
 
         List<CrowdTaskVO> taskVOList = taskDao.findAllByIsDeleted(0).stream().map(crowdTestTaskPO -> {
             CrowdTestTask task = CrowdTestProjectFactory.defaultTask();
@@ -785,12 +663,13 @@ public class WebMediatorImpl implements ViewMediator {
     }
 
     @Override
-    public ProjectDetailsDTO renderProjectDetails(CrowdTestProject project, User user) {
-
-        Map<String, String> fieldMap = commonRepo.getFieldCodeNameMap();
-        Map<String, String> applicationMap = commonRepo.getApplicationCodeNameMap();
-        Map<String, String> testMap = commonRepo.getTypeCodeNameMap();
+    public ProjectDetailsDTO renderProjectDetails(CrowdTestProject project, Long userId) {
+        // 获取领域、应用、测试类型code 和 name 的map
+        Map<String, String> fieldMap = dataCache.getFieldMap();
+        Map<String, String> applicationMap = dataCache.getApplicationTypeMap();
+        Map<String, String> testMap = dataCache.getTestTypeMap();
 
+        User user = userRepo.getInfoAndRolesAndRegionalMangerByID(userId);
         boolean saveFlag = false;
         // 判断项目是否截止
         if (project.getDeadTime().getTime() <= System.currentTimeMillis() && project.getStatus() < CrowdTestProjectStatus.HAS_FINISHED) {
@@ -808,12 +687,10 @@ public class WebMediatorImpl implements ViewMediator {
                 saveFlag = true;
             }
 
-            // 类型的转换
-            this.changeTypeByProjectAndTask(project, crowdTestTask, applicationMap, fieldMap, testMap);
             CrowdTaskVO crowdTaskVO = new CrowdTaskVO(crowdTestTask);
             if (crowdTestTask.getDistributionType() == 0) {
-                EvaluationAgencyPO agencyPO = agencyDao.findByUserId(crowdTestTask.getEvaluationAgencyId());
-                crowdTaskVO.setInstitution(agencyPO == null ? "该机构已注销" : agencyPO.getEvaluationAgencyName());
+                String agencyName = evaluationAgencyRepo.findAgencyNameByUserId(crowdTestTask.getEvaluationAgencyId());
+                crowdTaskVO.setAgencyName(agencyName == null ? "该机构已注销" : agencyName);
             }
             taskVOList.add(crowdTaskVO);
         }
@@ -826,7 +703,8 @@ public class WebMediatorImpl implements ViewMediator {
         CrowdProjectVO projectVO = new CrowdProjectVO(project);
         if (project.getStatus() > CrowdTestProjectStatus.HAS_RELEASED && project.getRegionalManagerId() != null) {
             Optional<UserPO> regionManager = userDao.findById(project.getRegionalManagerId());
-            projectVO.setInstitution(regionManager.isPresent() ? regionManager.get().getName() : "区域管理员已注销");
+            projectVO.setInstitution(regionManager.isPresent() ? regionManager.get().getId() : 0L);
+            projectVO.setRegionManagerName(regionManager.isPresent() ? regionManager.get().getName() : "区域管理员已注销");
         }
         List<PieChartDataVO> progress = new ArrayList<>();
         progress.add(new PieChartDataVO("已完成", crowdTestTaskList
@@ -834,31 +712,46 @@ public class WebMediatorImpl implements ViewMediator {
         progress.add(new PieChartDataVO("进行中", crowdTestTaskList
                 .stream().filter(task -> task.getStatus() > CrowdTestTaskStatus.HAS_CREATED && task.getStatus() < CrowdTestTaskStatus.HAS_FINISHED).count()));
 
+        if (saveFlag) {
+            // 项目或者任务中的状态需要变更
+            projectRepo.saveCrowdTestProject(project);
+        }else{
+            // 状态不需要变更则进行类型转换
+            for (CrowdTaskVO crowdTaskVO : taskVOList) {
+                // 类型的转换
+                this.changeTypeByProjectAndTaskVO(project, crowdTaskVO, applicationMap, fieldMap, testMap);
+            }
+
+        }
+        // 判断项目是否为定向发布,显示定向给的区域管理员信息
+        if(project.getProjectDistributionTypeId().equals(DistributeType.DIRECT.getId())){
+            projectVO.setInstitution(project.getRegionalManagerId());
+            projectVO.setRegionManagerName(userRepo.getByIDJustInfo(project.getRegionalManagerId()).getName());
+        }
+
         // 项目类型值的转换
         projectVO = changeFieldAndApplicationAndTestType(projectVO, applicationMap, fieldMap, testMap);
 
         projectDetailsDTO.setProjectDetails(projectVO);
         projectDetailsDTO.setTaskList(taskVOList);
         projectDetailsDTO.setReportList(reportVOList);
-        projectDetailsDTO.setProjectOperationControl(initProjectPermission(project, user));
+        projectDetailsDTO.setProjectOperationControl(this.initProjectPermission(project, user));
         projectDetailsDTO.setProgress(progress);
 
-        if (saveFlag) {
-            projectRepo.saveCrowdTestProject(project);
-        }
         return projectDetailsDTO;
     }
 
     @Override
     public ReportDetailsDTO renderTaskReportDetails(String projectCode, String taskCode, String reportCode, Long userId) {
-        Optional<CrowdTestTask> task = projectRepo.getByProjectCode(projectCode).getCrowdTestTaskList()
+        CrowdTestProject project = projectRepo.getByProjectCodeAndTaskCode(projectCode, taskCode);
+        Optional<CrowdTestTask> task = project.getCrowdTestTaskList()
                 .stream().filter(crowdTestTask -> crowdTestTask.getCode().equals(taskCode)).findFirst();
         if (!task.isPresent())
             throw new CrowdTestTaskNotExistException();
         log.info("renderTaskReportDetails userID: " + userId);
-        User user = userRepo.getByID(userId);
+        User user = userRepo.getInfoAndRolesByID(userId);
         ReportDetailsDTO reportDetailsDTO = new ReportDetailsDTO();
-        if (userId.equals(projectRepo.getByProjectCode(projectCode).getRegionalManagerId())) {
+        if (userId.equals(project.getRegionalManagerId())) {
             // 区域管理员
             reportDetailsDTO.setCrowdReportVO(new CrowdReportVO(Converter.convert(CrowdTestReport.class, crowdTestReportDao.findByCodeAndIsDeleted(reportCode, DeletedStatus.isNotDeleted))));
             if (task.get().getStatus() < CrowdTestTaskStatus.HAS_FINISHED)
@@ -883,7 +776,7 @@ public class WebMediatorImpl implements ViewMediator {
 
     @Override
     public ReportDetailsDTO renderProjectReportDetails(String projectCode, String reportCode, Long userId) {
-        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        CrowdTestProject project = projectRepo.getByProjectCodeJustInfoAndProjectReport(projectCode);
         CrowdTestReport report = project.getCrowdTestReportForProject();
         if (report == null)
             throw new CrowdTestReportNotExistException();
@@ -904,12 +797,13 @@ public class WebMediatorImpl implements ViewMediator {
 
     @Override
     public TaskDetailsDTO renderTaskDetails(String projectCode, String taskCode, Long userId) {
-//        Map<String, String> fieldMap = commonRepo.getFieldCodeNameMap();
-//        Map<String, String> applicationMap = commonRepo.getApplicationCodeNameMap();
-//        Map<String, String> testMap = commonRepo.getTypeCodeNameMap();
+        // 获取领域、应用、测试类型code 和 name 的map
+        Map<String, String> fieldMap = dataCache.getFieldMap();
+        Map<String, String> applicationMap = dataCache.getApplicationTypeMap();
+        Map<String, String> testMap = dataCache.getTestTypeMap();
 
         TaskDetailsDTO taskDetailsDTO = new TaskDetailsDTO();
-        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        CrowdTestProject project = projectRepo.getByProjectCodeAndTaskCode(projectCode, taskCode);
 
         boolean saveFlag = false;
         // 判断项目是否截止
@@ -923,7 +817,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);
@@ -934,22 +828,21 @@ public class WebMediatorImpl implements ViewMediator {
         crowdTestTask.setFieldType(project.getFieldType());
         crowdTestTask.setApplicationType(project.getApplicationType());
 
-//        this.changeTypeByProjectAndTask(project, crowdTestTask, applicationMap, fieldMap, testMap);
+        this.changeTypeByProjectAndTask(project, crowdTestTask, applicationMap, fieldMap, testMap);
         CrowdTaskVO taskVO = new CrowdTaskVO(crowdTestTask);
 
         log.info("renderTaskDetails userId:" + userId);
         if (userId == null) {
             taskDetailsDTO.setTaskOperationControl(this.initTaskPermission(project, crowdTestTask, null));
         } else {
-            User user = userRepo.getByID(userId);
+            User user = userRepo.getInfoAndRolesAndRegionalMangerByID(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 -> {
@@ -963,6 +856,11 @@ public class WebMediatorImpl implements ViewMediator {
                     }
                     return taskToUserVO;
                 }).collect(Collectors.toList());
+
+                // 判断是否为定向发布的任务,如果是则获取定向发布机构/人员的名称信息
+                if(crowdTestTask.getDistributionType().equals(DistributeType.DIRECT.getId())){
+                    taskVO.setAgencyName(evaluationAgencyRepo.findAgencyNameByUserId(crowdTestTask.getEvaluationAgencyId()));
+                }
             }
             // 测评机构视图
             else if (AuthCheckServiceImpl.isAgency(user)) {
@@ -991,12 +889,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());
             }
         }
 
@@ -1005,15 +901,15 @@ public class WebMediatorImpl implements ViewMediator {
         }
 
         taskDetailsDTO.setCrowdTaskVO(taskVO);
-//        EvaluationAgencyPO agencyPO = agencyDao.findByUserId(task.get().getEvaluationAgencyId());
-//        taskVO.setInstitution(agencyPO==null?"该机构已注销":agencyPO.getEvaluationAgencyName());
-
+        // 词云图
+//        List<JabaResult> wordCloudList = TFIDFAnalyzer.getInstance().extractTagsList(taskVO.getDescription(), 20);
+//        taskDetailsDTO.setWordCloudList(wordCloudList);
         return taskDetailsDTO;
     }
 
     @Override
     public CrowdTaskVO renderTaskDetailsByTourist(String projectCode, String taskCode) {
-        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        CrowdTestProject project = projectRepo.getByProjectCodeAndTaskCode(projectCode, taskCode);
         Optional<CrowdTestTask> task = project.getCrowdTestTaskList().stream().filter(crowdTestTask -> crowdTestTask.getCode().equals(taskCode)).findFirst();
         if (!task.isPresent())
             throw new CrowdTestTaskNotExistException();
@@ -1038,8 +934,6 @@ public class WebMediatorImpl implements ViewMediator {
             userDTO.setAgencyVO(new AgencyVO(user.getEvaluationAgency()));
         if (user.getPersonalAuthentication() != null)
             userDTO.setPersonalAuthVO(new PersonalAuthVO(user.getPersonalAuthentication()));
-        if (user.getEnterpriseAuthentication() != null)
-            userDTO.setEnterpriseAuthVO(new EnterpriseAuthVO(user.getEnterpriseAuthentication()));
         List<PermissionVO> permissionList = new ArrayList<>();
         user.getRoleList().forEach(role -> role.getPermissionList().forEach(permission -> permissionList.add(new PermissionVO(permission))));
         userDTO.setPermissions(permissionList);
@@ -1048,17 +942,11 @@ public class WebMediatorImpl implements ViewMediator {
 
     @Override
     public List<RegionalManagerVO> renderRegionManagerList() {
-        List<RegionalManagerVO> regionalManagerVOList = new ArrayList<>();
-        regionalManagerToRegionalDao.findAll().forEach(regionalManagerPO -> {
-            RegionalManagerVO regionalManagerVO = new RegionalManagerVO();
-            regionalManagerVO.setId(regionalManagerPO.getUserId());
-            regionalManagerVO.setName(userDao.findById(regionalManagerPO.getUserId()).get().getName());
-            regionalManagerVOList.add(regionalManagerVO);
-        });
-        List<RegionalManagerVO> results = regionalManagerVOList.stream().distinct().collect(Collectors.toList());
-        return results;
+        List<Long> userIdList = userRepo.getUserIdListByRoleName(RoleType.REGIONAL_MANAGER.getName());
+        return userIdList.stream().map(userId -> new RegionalManagerVO(userId, userRepo.getByIDJustInfo(userId).getName())).collect(Collectors.toList());
     }
 
+
     @Override
     public List<EvaluationAgencyVO> renderAgencyList() {
         List<EvaluationAgencyVO> agencyList = new ArrayList<>();
@@ -1082,24 +970,13 @@ public class WebMediatorImpl implements ViewMediator {
     @Override
     public List<BaseAuthVO> renderAuthingList() {
         List<BaseAuthVO> resultList = new ArrayList<>();
-        resultList.addAll(personalAuthenticationDao.findByIsAuthentication(AuthenticationStatus.isAuthenIng).stream().map(personalAuthenticationPO -> {
-            PersonalAuthentication personalAuthentication = new PersonalAuthentication();
-            BeanUtils.copyProperties(personalAuthenticationPO, personalAuthentication);
-            return new BaseAuthVO(personalAuthentication);
-        }).collect(Collectors.toList()));
+        resultList.addAll(personalAuthenticationDao.findByIsAuthentication(AuthenticationStatus.isAuthenIng).stream()
+                .map(personalAuthenticationPO -> new BaseAuthVO(Converter.convert(PersonalAuthentication.class, personalAuthenticationPO))).collect(Collectors.toList()));
 
-//        resultList.addAll(enterpriseAuthenticationDao.findByIsAuthentication(AuthenticationStatus.isAuthenIng).stream().map(enterpriseAuthenticationPO -> {
-//            EnterpriseAuthentication enterpriseAuthentication = new EnterpriseAuthentication();
-//            BeanUtils.copyProperties(enterpriseAuthenticationPO, enterpriseAuthentication);
-//            return new BaseAuthVO(enterpriseAuthentication);
-//        }).collect(Collectors.toList()));
+        resultList.addAll(agencyDao.findByIsAuthentication(AuthenticationStatus.isAuthenIng).stream()
+                .map(evaluationAgencyPO -> new BaseAuthVO(Converter.convert(EvaluationAgency.class, evaluationAgencyPO))).collect(Collectors.toList()));
 
-        resultList.addAll(agencyDao.findByIsAuthentication(AuthenticationStatus.isAuthenIng).stream().map(evaluationAgencyPO -> {
-            EvaluationAgency agency = new EvaluationAgency();
-            BeanUtils.copyProperties(evaluationAgencyPO, agency);
-            return new BaseAuthVO(agency);
-        }).collect(Collectors.toList()));
-        if(resultList.size() > 0 && resultList != null) {
+        if(resultList != null && resultList.size() > 0) {
             resultList.sort(Comparator.comparing(BaseAuthVO::getApplytime).reversed());
         }
         return resultList;
@@ -1134,7 +1011,7 @@ public class WebMediatorImpl implements ViewMediator {
 
     @Override
     public List<CrowdTestProjectVO> findByNameLike(String name) {
-        Map<String, String> applicationMap = commonRepo.getApplicationCodeNameMap();
+        Map<String, String> applicationMap = dataCache.getApplicationTypeMap();
         List<CrowdTestProjectVO> resultList = new ArrayList<>();
         resultList.addAll(projectRepo.findByNameLike("%" + name + "%").stream().map(crowdTestProject -> {
             // 项目测试类型转换
@@ -1152,7 +1029,7 @@ public class WebMediatorImpl implements ViewMediator {
      */
     @Override
     public List<CrowdTaskVO> findTaskByNameLike(String name) {
-        Map<String, String> testMap = commonRepo.getTypeCodeNameMap();
+        Map<String, String> testMap = dataCache.getTestTypeMap();
         return taskRepo.findByNameLikeAndIsDeleted("%" + name +"%", DeletedStatus.isNotDeleted).stream().map(crowdTestTask -> {
             //根据code值查询出来该任务的type
             crowdTestTask.setType(testMap.get(crowdTestTask.getType()));
@@ -1163,7 +1040,7 @@ public class WebMediatorImpl implements ViewMediator {
     @Override
     public List<CrowdTestProjectVO> AllByPage(){
         List<CrowdTestProjectVO> resultList = new ArrayList<>();
-        Map<String, String> applicationMap = commonRepo.getApplicationCodeNameMap();
+        Map<String, String> applicationMap = dataCache.getApplicationTypeMap();
         resultList.addAll(projectDao.findAll().stream().map(crowdTestProjectPO ->{
             CrowdTestProject crowdTestProject = new CrowdTestProject();
             BeanUtils.copyProperties(crowdTestProjectPO, crowdTestProject);
@@ -1188,24 +1065,6 @@ public class WebMediatorImpl implements ViewMediator {
     }
 
     @Override
-    public List<CrowdTestProjectVO> crowdTestProjectsWaitingAccept() {
-        return projectDao.findAll().stream().filter(crowdTestProjectPO -> crowdTestProjectPO.getStatus() == CrowdTestProjectStatus.HAS_RELEASED
-            && crowdTestProjectPO.getDeadTime().getTime() > System.currentTimeMillis()).map(crowdTestProjectPO -> {
-            CrowdTestProject crowdTestProject = new CrowdTestProject();
-            BeanUtils.copyProperties(crowdTestProjectPO, crowdTestProject);
-            // 应用类型值的转换
-            Optional<ApplicationTypePO> applicationTypePO = applicationTypeDao.findByCode(crowdTestProject.getApplicationType());
-            if (applicationTypePO.isPresent()) {
-                crowdTestProject.setApplicationType(applicationTypePO.get().getName());
-            } else {
-                throw new HttpBadRequestException("应用类型有误");
-            }
-            return new CrowdTestProjectVO(crowdTestProject);
-
-        }).collect(Collectors.toList());
-    }
-
-    @Override
     public List<UserTaskCountVO> getCount() {
         List<RankCountInfo> rankCountInfos = taskToUserDao.findTotalCountOfUser();
         for(int i=0;i<rankCountInfos.size();i++){
@@ -1237,7 +1096,7 @@ public class WebMediatorImpl implements ViewMediator {
     @Override
     public List<CrowdTaskVO> findIndexTaskLimitCount(int indexCount, String testTypeCode){
         List<CrowdTaskVO> resultList = new ArrayList<>();
-        Map<String, String> testMap = commonRepo.getTypeCodeNameMap();
+        Map<String, String> testMap = dataCache.getTestTypeMap();
 
         resultList.addAll(taskDao.findIndexTaskLimitCount(indexCount).stream().filter(crowdTestTaskPO -> crowdTestTaskPO.getDeadTime().getTime() > System.currentTimeMillis()).map(crowdTestTaskPO -> {
             CrowdTestTask crowdTestTask = new CrowdTestTask();
@@ -1250,7 +1109,7 @@ public class WebMediatorImpl implements ViewMediator {
 
     @Override
     public List<CrowdTaskVO> crowdTaskVOSByTestTypeCode(String testTypeCode) {
-        Map<String, String> testMap = commonRepo.getTypeCodeNameMap();
+        Map<String, String> testMap = dataCache.getTestTypeMap();
         return taskDao.findByType(testTypeCode).stream().map(crowdTestTaskPO -> {
             CrowdTestTask crowdTestTask = new CrowdTestTask();
             BeanUtils.copyProperties(crowdTestTaskPO, crowdTestTask);
@@ -1262,7 +1121,7 @@ public class WebMediatorImpl implements ViewMediator {
     // ???
     @Override
     public List<CrowdTaskVO> crowdTaskVosWaitingAccept() {
-        Map<String, String> testMap = commonRepo.getTypeCodeNameMap();
+        Map<String, String> testMap = dataCache.getTestTypeMap();
         List<CrowdTaskVO> taskVOList = taskDao.findCanAcceptTask().stream().filter(crowdTestTaskPO -> crowdTestTaskPO.getDeadTime().getTime() > System.currentTimeMillis()).map(crowdTestTaskPO -> {
             //根据code值查询出来该任务的type
             CrowdTestTask crowdTestTask = new CrowdTestTask();
@@ -1611,7 +1470,7 @@ public class WebMediatorImpl implements ViewMediator {
         }
 
         //需求提出者和系统管理员视角
-        if (project.getUserId().equals(user.getId()) || user.getRoleList().stream().anyMatch(role -> role.getName().equals("SystemAdministrator"))) {
+        if (project.getUserId().equals(user.getId()) || user.getRoleList().stream().anyMatch(role -> role.getName().equals(RoleType.SYSTEM_ADMIN.getName()))) {
             if (project.getStatus() < CrowdTestProjectStatus.HAS_RECEIVED) {
                 operationControl.setUpdate(true);
             } else if (project.getStatus() == CrowdTestProjectStatus.HAS_COMMITED) {
@@ -1619,7 +1478,7 @@ public class WebMediatorImpl implements ViewMediator {
             }
         }
         //区域管理员视角
-        if (user.getRoleList().stream().anyMatch(role -> role.getName().equals("RegionalManager"))) {
+        if (user.getRoleList().stream().anyMatch(role -> role.getName().equals(RoleType.REGIONAL_MANAGER.getName()))) {
             if ((project.getProjectDistributionTypeId() == 0 && project.getRegionalManagerId().equals(user.getId()))
                     || ((project.getProjectDistributionTypeId() > 0 && project.getStatus() >= CrowdTestProjectStatus.HAS_RECEIVED) && project.getRegionalManagerId().equals(user.getId()))) {
                 if (project.getStatus() == CrowdTestProjectStatus.HAS_RELEASED) {
@@ -1661,36 +1520,53 @@ 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();
 
-        if (user == null || task.getStatus() == CrowdTestTaskStatus.HAS_TIME_OUT) {
+        // 用户未登录,无其他操作权限
+        if (user == null) {
+            return taskOperationControl;
+        }
+
+        // 任务时间截止,对于区域管理员可以有导出和fork功能
+        if(task.getStatus() == CrowdTestTaskStatus.HAS_TIME_OUT){
+            if (user.getRoleList().stream().anyMatch(role -> role.getName().equals(RoleType.SYSTEM_ADMIN.getName()))
+                    || (user.getRegionalManager() != null && user.getId().equals(project.getRegionalManagerId()))) {
+                // 不管何时都可以导出任务
+                taskOperationControl.setExportTask(true);
+                taskOperationControl.setForkTask(true);
+            }
             return taskOperationControl;
         }
 
         // 任务已结束,如果存在配置项的任务展示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);
                 }
             }
         }else{
             //区域管理员或系统管理员视角
-            if (user.getRoleList().stream().anyMatch(role -> role.getName().equals("SystemAdministrator"))
+            if (user.getRoleList().stream().anyMatch(role -> role.getName().equals(RoleType.SYSTEM_ADMIN.getName()))
                     || (user.getRegionalManager() != null && user.getId().equals(project.getRegionalManagerId()))) {
                 // 不管何时都可以导出任务
                 taskOperationControl.setExportTask(true);
+                taskOperationControl.setForkTask(true);
                 // 刚发布时,可修改,可查看推荐,可跳转看报告链接是否正确
                 if (task.getStatus() < CrowdTestTaskStatus.HAS_RECEIVED) {
                     taskOperationControl.setUpdate(true);
                     taskOperationControl.setTaskRecommend(true);
                     // 具有配置项,需要在第三方进行填写报告
-                    if(endPointPOOptional.isPresent()){
+                    if(endPoint != null){
                         taskOperationControl.setWriteReport(true);
+                        if(endPoint.getToken() != null &&  !endPoint.getToken().equals("")){
+                            taskOperationControl.setTaskDemonstrate(true);
+                        }
                     }
                 }
-                // 任务已发布
+                // 任务已被接收
                 else{
                     taskOperationControl.setTaskRecommend(true);
                     // 已被接收,分两种:1、为平台填写报告,此时提交人数和接收人数一致,则可以确认结束任务;2、为众测任务,已提交了报告,可以确认结束任务
@@ -1704,11 +1580,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);
                         }
                     }
@@ -1751,7 +1627,7 @@ public class WebMediatorImpl implements ViewMediator {
                             }
 
                             // 具有配置项,需要在第三方进行填写报告
-                            if(endPointPOOptional.isPresent()){
+                            if(endPoint != null){
                                 taskOperationControl.noAll();
                                 taskOperationControl.setWriteReport(true);
                             }
@@ -1788,9 +1664,6 @@ public class WebMediatorImpl implements ViewMediator {
                 return taskOperationControl;
             }
         }
-
-
-
         System.out.println(taskOperationControl);
         return taskOperationControl;
     }

+ 1 - 3
site/src/main/java/com/mooctest/crowd/site/service/AgencyService.java

@@ -30,7 +30,7 @@ public interface AgencyService {
 
     AgencyVO updateAgencyInfo(Long userId, ApplyAgencyAuthCommand command);
 
-    AgencyVO upadteResourceAndAbility(Long userId, AgencyResourceAbilityUpdateCommand command);
+    AgencyVO updateResourceAndAbility(Long userId, AgencyResourceAbilityUpdateCommand command);
 
     List<EvaluationAgencyVO> getAgencyList();
 
@@ -40,7 +40,5 @@ public interface AgencyService {
 
     AgencyVO rejectAuth(Long userId, String explain);
 
-    AgencyVO getAgencyDetails(Long userId);
-
     AgencyDetailVO getAgencyInfoCommon(Long userId);
 }

+ 0 - 3
site/src/main/java/com/mooctest/crowd/site/service/CommonService.java

@@ -14,7 +14,6 @@ import java.util.Map;
 @Service
 public interface CommonService {
 
-
     List<UserVO> getMoreUser(Pageable pageable,String keyword);
 
     IndexDTO getIndexInfo();
@@ -29,8 +28,6 @@ public interface CommonService {
 
     IndexPageDTO getIndexPageInfo(Pageable pageable, Map<String, String> extraCondition, String keyword, int deletedStatus);
 
-    Page<CrowdProjectVO> getProjectInfo(Pageable pageable, String keyword, int deletedStatus);
-
     List<ApplicationTypeVO> getHotTesting(String keyword);
 
     Page<CompetitionVO> getCompetition(Pageable pageable,String keyword);

+ 1 - 8
site/src/main/java/com/mooctest/crowd/site/service/CrowdProjectService.java

@@ -8,7 +8,6 @@ import com.mooctest.crowd.site.data.vo.CrowdProjectVO;
 import com.mooctest.crowd.site.data.vo.CrowdTestProjectVO;
 import com.mooctest.crowd.site.data.vo.RegionalManagerVO;
 import com.mooctest.crowd.site.data.vo.SearchConditionVO;
-import org.springframework.data.domain.Pageable;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
@@ -28,12 +27,6 @@ public interface CrowdProjectService {
 
     List<CrowdTestProjectVO> findByNameLike(String name);
 
-    List<CrowdTestProjectVO> findSquareProjectByNameLike(String name);
-
-    List<CrowdTestProjectVO> findAll(Pageable pageable);
-
-    List<CrowdTestProjectVO> findAll();
-
     ProjectDetailsDTO getProjectDetails(String projectCode, Long userId);
 
     ProjectDetailsDTO createCrowdProject(CrowdTestProjectCommand command,long userId);
@@ -52,7 +45,7 @@ public interface CrowdProjectService {
 
     ProjectDetailsDTO receiveProject(String projectCode, Long userId);
 
-    void rejectProject(String projectCode, Long userId);
+    ProjectDetailsDTO rejectProject(String projectCode, Long userId);
 
     ProjectDetailsDTO commitProject(String projectCode, Long userId);
 

+ 1 - 1
site/src/main/java/com/mooctest/crowd/site/service/CrowdReportService.java

@@ -21,5 +21,5 @@ public interface CrowdReportService {
 
     ReportDetailsDTO createProjectReport(String projectCode, CrowdTestReportCommand command);
 
-    ReportDetailsDTO updatePorjctReport(String projectCode, String reportCode, CrowdTestReportCommand command);
+    ReportDetailsDTO updateProjectReport(String projectCode, String reportCode, CrowdTestReportCommand command);
 }

+ 7 - 0
site/src/main/java/com/mooctest/crowd/site/service/CrowdTaskService.java

@@ -6,6 +6,7 @@ import com.mooctest.crowd.site.data.dto.TaskDetailsDTO;
 import com.mooctest.crowd.site.data.dto.TaskSquareDTO;
 import com.mooctest.crowd.site.data.tfidf.JabaResult;
 import com.mooctest.crowd.site.data.vo.CrowdTaskVO;
+import com.mooctest.crowd.site.data.vo.ExamVO;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
@@ -33,6 +34,8 @@ public interface CrowdTaskService {
 
     TaskDetailsDTO createTask(String projectCode, CrowdTestTaskCommand command, Long userId);
 
+    String getWriteReportUrl(String projectCode, String taskCode, Long userId);
+
     TaskDetailsDTO updateTask(String projectCode, String taskCode, CrowdTestTaskCommand command, Long userId);
 
     TaskSquareDTO getAllTasks();
@@ -51,9 +54,13 @@ public interface CrowdTaskService {
 
     List<JabaResult> getTaskWord(String projectCode, String taskCode);
 
+    List<JabaResult> getTaskWord(String projectCode, String taskCode, String taskDescription);
+
     String exportTask(String projectCode, String taskCode, Long userId);
 
     ProjectDetailsDTO importTask(MultipartFile file, Long userId, int uploadType);
 
     List<CrowdTaskVO> findWaitingAcceptByNameLike(int showTaskCount, String keyword, String testTypeCode);
+
+    ExamVO getExamInfo(Long examId);
 }

Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
site/src/main/java/com/mooctest/crowd/site/service/UserService.java


+ 22 - 77
site/src/main/java/com/mooctest/crowd/site/service/impl/AgencyServiceImpl.java

@@ -3,7 +3,6 @@ package com.mooctest.crowd.site.service.impl;
 import com.mooctest.crowd.domain.dao.*;
 import com.mooctest.crowd.domain.domainobject.*;
 import com.mooctest.crowd.domain.exception.BaseException;
-import com.mooctest.crowd.domain.exception.EvaluationAgencyNotExistException;
 import com.mooctest.crowd.domain.exception.UserNotExistException;
 import com.mooctest.crowd.domain.model.UserTaskCountPO;
 import com.mooctest.crowd.domain.repository.EvaluationAgencyRepo;
@@ -14,7 +13,7 @@ import com.mooctest.crowd.site.command.AgencyResourceCommand;
 import com.mooctest.crowd.site.command.ApplyAgencyAuthCommand;
 import com.mooctest.crowd.site.command.GenerateAgencyCommand;
 import com.mooctest.crowd.site.data.dto.UserDTO;
-import com.mooctest.crowd.site.data.enums.RoleType;
+import com.mooctest.crowd.domain.domainobject.enums.RoleType;
 import com.mooctest.crowd.site.data.vo.*;
 import com.mooctest.crowd.site.mediator.ViewMediator;
 import com.mooctest.crowd.site.service.AgencyService;
@@ -71,46 +70,9 @@ public class AgencyServiceImpl implements AgencyService {
         if(taskCountByUserId != null){
             agencyVO.setTaskCount(taskCountByUserId.getCount());
         }
-
-//        List<String> agencyAbilities = new ArrayList<>();//机构能力list
-//        //根据compentence[]从test——type表利查询对应的能力名称
-//        EvaluationAgencyPO agencyPO = agencyDao.findByUserId(userId);
-//        if (agencyPO==null) {
-//            throw new HttpBadRequestException("机构不存在!");
-//        }
-//        EvaluationAgency evaluationAgency = new EvaluationAgency(agencyPO);
-//        Optional<UserPO> userPO = userDao.findById(userId);
-//        String userCompetence="";
-//        if(userPO.get().getPersonalCompetence()!=null) {
-//             userCompetence = userPO.get().getPersonalCompetence();
-//        }
-//        //将 userConpetence按逗号分搁
-//        List<String> compentenceList=new ArrayList<>();
-//        System.out.println(userCompetence+"sasssss");
-//        if (userCompetence!=null&&!userCompetence.trim().equals("")){
-//            compentenceList= Arrays.asList(userCompetence.split(",")); //JKCS,JRXCE,KKXCS,WDXCS
-//            for (int i = 0; i < compentenceList.size(); i++) {
-//                //查询对应code的测试类型的名称比如接口测试,兼用型测试等。
-//                Optional<TestTypePO> testTypePO = testTypeDao.findByCode(compentenceList.get(i));
-//                agencyAbilities.add(testTypePO.get().getName());
-//            }
-//        }
-//        EvaluationAgencyVO agencyVO = new EvaluationAgencyVO(evaluationAgency);
-//        agencyVO.setAuthStatus(evaluationAgency.getIsAuthentication());
-//        List<RankCountInfo> rankCountInfoList = taskToUserDao.findTotalCountOfUser();
-//        long ids[] = new long[rankCountInfoList.size()];
-//        for (int i = 0; i < ids.length; i++) {
-//            ids[i] = rankCountInfoList.get(i).getEntityId();
-//            if (ids[i] == agencyVO.getUserId()) {
-//                agencyVO.setTaskCount(rankCountInfoList.get(i).getCount());
-//            }
-//        }
-//        agencyVO.setAgencyAbilities(agencyAbilities);
         return agencyVO;
     }
 
-
-
     @Override
     public AgencyDetailVO getAgencyInfoCommon(Long userId){
         EvaluationAgency agency = evaluationAgencyRepo.findAgencyByUserId(userId);
@@ -164,10 +126,13 @@ public class AgencyServiceImpl implements AgencyService {
     @Override
     public UserDTO applyAgency(Long userId, ApplyAgencyAuthCommand command) {
         EvaluationAgency agency = command.toAgency();
-        User user = userRepo.getByID(userId);
+        User user = userRepo.getInfoAndEvaluationAgencyByID(userId);
         user.applyAgencyAuthentication(agency);
         user.setEvaluationAgency(agency);
-        return mediator.renderUser(userRepo.saveUser(user));
+        userRepo.saveEvaluationAgencyByUser(user);
+        UserDTO userDTO = new UserDTO();
+        userDTO.setAgencyVO(new AgencyVO(agency));
+        return userDTO;
     }
 
     @Override
@@ -184,16 +149,17 @@ public class AgencyServiceImpl implements AgencyService {
         User user = userAnti.register(command.getEvaluationAgencyName(), command.getEmail(), command.getMobile(), command.getMobile());
         EvaluationAgency agency = command.toAgency();
         List<Role> roles = new ArrayList<>();
-        roles.add(userRepo.getRole("evaluationAgency"));
-        roles.add(userRepo.getRole("generalUser"));
+        roles.add(userRepo.getRole(RoleType.AGENCY.getName()));
+        roles.add(userRepo.getRole(RoleType.GENERAL_USER.getName()));
         user.setRoleList(roles);
         agency.setUserId(user.getId());
         agency.setIsAuthentication(AuthenticationStatus.isAuthenticated);
         user.setEvaluationAgency(agency);
         user = userRepo.saveUser(user);
         UserDTO userDTO = new UserDTO();
-        userDTO.setUserVO(new UserVO(userRepo.getByID(user.getId())));
-        userDTO.setAgencyVO(new AgencyVO(userRepo.getByID(user.getId()).getEvaluationAgency()));
+        User userByID = userRepo.getByID(user.getId());
+        userDTO.setUserVO(new UserVO(userByID));
+        userDTO.setAgencyVO(new AgencyVO(userByID.getEvaluationAgency()));
         userDTO.getUserVO().setPassword(command.getMobile());
         userDTO.getUserVO().setEmail(command.getEmail());
         return userDTO;
@@ -201,25 +167,23 @@ public class AgencyServiceImpl implements AgencyService {
 
     @Override
     public UserDTO updateAgencyStatus(Long userId, Integer status) {
-        User user = userRepo.getByID(userId);
+        User user = userRepo.getInfoAndEvaluationAgencyByID(userId);
         if (user.getEvaluationAgency() == null)
             throw new BaseException("该用户未申请认证机构");
         user.getEvaluationAgency().setIsAuthentication(status);
-        return mediator.renderUser(userRepo.saveUser(user));
+        return mediator.renderUser(userRepo.saveEvaluationAgencyByUser(user));
     }
 
     @Override
     public AgencyVO updateAgencyInfo(Long userId, ApplyAgencyAuthCommand command) {
-        User user = userRepo.getByID(userId);
-//        evaluationAgencyRepo.moveEvaluationAgencyAbility(user.getEvaluationAgency().getEvaluationAgencyAbilityList());
-//        evaluationAgencyRepo.moveEvaluationAgencyResource(user.getEvaluationAgency().getEvaluationAgencyResourceList());
+        User user = userRepo.getInfoAndEvaluationAgencyByID(userId);
         user.getEvaluationAgency().updateAuthInfo(command.toAgency());
-        return new AgencyVO(userRepo.saveUser(user).getEvaluationAgency());
+        return new AgencyVO(userRepo.saveEvaluationAgencyByUser(user).getEvaluationAgency());
     }
 
     @Override
-    public AgencyVO upadteResourceAndAbility(Long userId, AgencyResourceAbilityUpdateCommand command) {
-        User user = userRepo.getByID(userId);
+    public AgencyVO updateResourceAndAbility(Long userId, AgencyResourceAbilityUpdateCommand command) {
+        User user = userRepo.getInfoAndEvaluationAgencyByID(userId);
         EvaluationAgency agency = user.getEvaluationAgency();
         evaluationAgencyRepo.moveEvaluationAgencyAbility(agency.getEvaluationAgencyAbilityList());
         evaluationAgencyRepo.moveEvaluationAgencyResource(agency.getEvaluationAgencyResourceList());
@@ -245,15 +209,11 @@ public class AgencyServiceImpl implements AgencyService {
         if (user.getEvaluationAgency() == null)
             throw new BaseException("该用户未申请机构认证!");
         user.getEvaluationAgency().passAuthentication();
-        if (user.getEvaluationAgency().getType().contains("0") && user.getEvaluationAgency().getType().contains("1")) {
+        //1是发包机构0是接包机构
+        if (user.getEvaluationAgency().getType().contains("1")) {
             user.getRoleList().add(userRepo.getRole(RoleType.PARTY_AGENCY.getName()));
-            user.getRoleList().add(userRepo.getRole(RoleType.AGENCY.getName()));
         }
-        //1是认证为研发机构0是认证为评测机构
-        else if (user.getEvaluationAgency().getType().contains("1")) {
-            user.getRoleList().add(userRepo.getRole(RoleType.PARTY_AGENCY.getName()));
-        } else if (user.getEvaluationAgency().getType().contains("0")) {
-            //给接包角色
+        if (user.getEvaluationAgency().getType().contains("0")) {
             user.getRoleList().add(userRepo.getRole(RoleType.AGENCY.getName()));
         }
         return new AgencyVO(userRepo.saveUser(user).getEvaluationAgency());
@@ -261,25 +221,10 @@ public class AgencyServiceImpl implements AgencyService {
 
     @Override
     public AgencyVO rejectAuth(Long userId, String explain) {
-        User user = userRepo.getByID(userId);
+        User user = userRepo.getInfoAndEvaluationAgencyByID(userId);
         if (user.getEvaluationAgency() == null)
             throw new BaseException("该用户未申请机构认证!");
         user.getEvaluationAgency().rejectAuthentication(explain);
-        return new AgencyVO(userRepo.saveUser(user).getEvaluationAgency());
-    }
-
-    @Override
-    public AgencyVO getAgencyDetails(Long userId) {
-        User user = userRepo.getByUserIDJustAgencyInfo(userId);
-        EvaluationAgency agency = user.getEvaluationAgency();
-        if (agency == null)
-            throw new EvaluationAgencyNotExistException("当前用户未申请机构认证");
-        AgencyVO agencyVO = new AgencyVO(user.getEvaluationAgency());
-        UserTaskCount userTaskCount = userRepo.getUserTaskCountByUserId(userId);
-        if (userTaskCount != null) {
-            agencyVO.setTaskCount(userTaskCount.getCount());
-        }
-        return agencyVO;
+        return new AgencyVO(userRepo.saveEvaluationAgencyByUser(user).getEvaluationAgency());
     }
-
 }

+ 1 - 1
site/src/main/java/com/mooctest/crowd/site/service/impl/AuthCheckServiceImpl.java

@@ -1,7 +1,7 @@
 package com.mooctest.crowd.site.service.impl;
 
 import com.mooctest.crowd.domain.domainobject.User;
-import com.mooctest.crowd.site.data.enums.RoleType;
+import com.mooctest.crowd.domain.domainobject.enums.RoleType;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 

+ 19 - 12
site/src/main/java/com/mooctest/crowd/site/service/impl/CommonServiceImpl.java

@@ -13,6 +13,7 @@ import com.mooctest.crowd.domain.repository.CommonRepo;
 import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
 import com.mooctest.crowd.domain.repository.EvaluationAgencyRepo;
 import com.mooctest.crowd.domain.repository.UserRepo;
+import com.mooctest.crowd.site.configuration.DataCache;
 import com.mooctest.crowd.site.constants.CommonConstant;
 import com.mooctest.crowd.site.data.ColumnFilter;
 import com.mooctest.crowd.site.data.dto.*;
@@ -67,12 +68,18 @@ public class CommonServiceImpl implements CommonService {
     @Autowired
     private WebMediatorImpl webMediator;
 
+    @Autowired
+    private DataCache dataCache;
+
     @Value("${feature.task.import}")
     private String featureTaskImport;
 
     @Value("${feature.task.recommend}")
     private String featureTaskRecommend;
 
+    @Value("${feature.task.acceptedPWD}")
+    private Boolean featureTaskAcceptedPWD;
+
     @Override
     public List<UserVO> getMoreUser(Pageable pageable,String keyword) {
         return  viewMediator.renderMoreUser(pageable,keyword);
@@ -85,7 +92,11 @@ public class CommonServiceImpl implements CommonService {
 
     @Override
     public MyCrowdDTO getPersonCrowd(Long userId) {
-        return viewMediator.renderMyCrowd(userId);
+        User user = userRepo.getInfoAndRolesByID(userId);
+        MyCrowdDTO myCrowdDTO = viewMediator.renderMyCrowd(user);
+        myCrowdDTO.setAgency(AuthCheckServiceImpl.canAcceptTask(user));
+        myCrowdDTO.setPart(AuthCheckServiceImpl.canCreateProject(user));
+        return myCrowdDTO;
     }
 
     @Override
@@ -130,11 +141,6 @@ public class CommonServiceImpl implements CommonService {
     }
 
     @Override
-    public Page<CrowdProjectVO> getProjectInfo(Pageable pageable, String keyword, int deletedStatus) {
-        return projectRepo.findAllByPage(pageable, keyword, deletedStatus).map(crowdTestProject -> new CrowdProjectVO(crowdTestProject));
-    }
-
-    @Override
     public List<ApplicationTypeVO> getHotTesting(String keyword) {
 
         Pageable pageable = PageRequest.of(0, CommonConstant.HOT_CROWD_ROWS_ON_PAGE);
@@ -156,7 +162,7 @@ public class CommonServiceImpl implements CommonService {
     @Override
     public List<CrowdProjectVO> getProjectList(Pageable pageable, String code,String keyword) {
 
-        Map<String, String> applicationMap = commonRepo.getApplicationCodeNameMap();
+        Map<String, String> applicationMap = dataCache.getApplicationTypeMap();
         List<CrowdProjectVO> crowdProjectVOS = commonRepo.getProjectList(pageable, code, keyword).stream().map(project -> {
             // 判断项目是否截止
             if (project.getDeadTime().getTime() <= System.currentTimeMillis() && project.getStatus() < CrowdTestProjectStatus.HAS_FINISHED) {
@@ -219,7 +225,7 @@ public class CommonServiceImpl implements CommonService {
 
     @Override
     public Boolean checkCreateProject(Long userId) {
-        User user = userRepo.getByID(userId);
+        User user = userRepo.getInfoAndRolesByID(userId);
         Boolean isPart = AuthCheckServiceImpl.canCreateProject(user);
         if(!isPart){
             throw new HaveNotPartAuthException();
@@ -229,7 +235,7 @@ public class CommonServiceImpl implements CommonService {
 
     @Override
     public Boolean checkAcceptTask(Long userId) {
-        User user = userRepo.getByID(userId);
+        User user = userRepo.getInfoAndRolesByID(userId);
         Boolean isAgency = AuthCheckServiceImpl.canAcceptTask(user);
         if(!isAgency){
             throw new HaveNotAgencyAuthException();
@@ -239,9 +245,9 @@ public class CommonServiceImpl implements CommonService {
 
     @Override
     public List<HashMap<String, Long>> getStatisticsCount() {
-        Map<String, String> applicationsMap = commonRepo.getApplicationCodeNameMap();
-        Map<String, String> typeMap = commonRepo.getTypeCodeNameMap();
-        Map<String, String> fieldsMap = commonRepo.getFieldCodeNameMap();
+        Map<String, String> applicationsMap = dataCache.getApplicationTypeMap();
+        Map<String, String> typeMap = dataCache.getTestTypeMap();
+        Map<String, String> fieldsMap = dataCache.getFieldMap();
 
         List<HashMap<String, Long>> statisticsList = new ArrayList<>();
         HashMap<String, Long> fieldMap = new HashMap<>();
@@ -330,6 +336,7 @@ public class CommonServiceImpl implements CommonService {
         Map<String, String> configurationMap = commonRepo.getConfigurationListMap();
         configurationMap.put("feature_task_import", "{\"feature_task_import\":" + featureTaskImport + "}");
         configurationMap.put("feature_task_recommend", "{\"feature_task_recommend\":" + featureTaskRecommend + "}");
+        configurationMap.put("feature_task_acceptedPWD", "{\"feature_task_acceptedPWD\":" + featureTaskAcceptedPWD + "}");
         return new ConfigurationVO(configurationMap);
     }
 

+ 35 - 55
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdProjectServiceImpl.java

@@ -1,8 +1,12 @@
 package com.mooctest.crowd.site.service.impl;
 
 import com.google.common.collect.Lists;
-import com.mooctest.crowd.domain.dao.*;
+import com.mooctest.crowd.domain.dao.ApplicationTypeDao;
+import com.mooctest.crowd.domain.dao.FieldDao;
+import com.mooctest.crowd.domain.dao.TestTypeDao;
+import com.mooctest.crowd.domain.dao.UserTaskCountDao;
 import com.mooctest.crowd.domain.domainobject.*;
+import com.mooctest.crowd.domain.domainobject.enums.DistributeType;
 import com.mooctest.crowd.domain.exception.BadRequestException;
 import com.mooctest.crowd.domain.exception.BaseException;
 import com.mooctest.crowd.domain.exception.Excel2ProjectException;
@@ -15,10 +19,11 @@ import com.mooctest.crowd.domain.repository.UserRepo;
 import com.mooctest.crowd.domain.util.Converter;
 import com.mooctest.crowd.site.command.CrowdTestProjectCommand;
 import com.mooctest.crowd.site.command.GenerateProjectCommand;
+import com.mooctest.crowd.site.configuration.DataCache;
 import com.mooctest.crowd.site.data.ColumnFilter;
 import com.mooctest.crowd.site.data.dto.ProjectDetailsDTO;
 import com.mooctest.crowd.site.data.enums.ProjectType;
-import com.mooctest.crowd.site.data.enums.RoleType;
+import com.mooctest.crowd.domain.domainobject.enums.RoleType;
 import com.mooctest.crowd.site.data.vo.CrowdProjectVO;
 import com.mooctest.crowd.site.data.vo.CrowdTestProjectVO;
 import com.mooctest.crowd.site.data.vo.RegionalManagerVO;
@@ -33,7 +38,6 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -56,11 +60,6 @@ import java.util.stream.Collectors;
 @Slf4j
 @Service
 public class CrowdProjectServiceImpl implements CrowdProjectService {
-    @Autowired
-    private CrowdTestProjectDao projectDao;
-
-    @Autowired
-    private UserToRoleDao userToRoleDao;
 
     @Autowired
     private ViewMediator viewMediator;
@@ -75,6 +74,9 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     private UserRepo userRepo;
 
     @Autowired
+    private DataCache dataCache;
+
+    @Autowired
     private OperationMediator operationMediator;
 
     @Autowired
@@ -99,7 +101,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
      */
     @Override
     public List<CrowdTestProjectVO> findIndexProjectLimitCount(int indexCount) {
-        Map<String, String> applicationMap = commonRepo.getApplicationCodeNameMap();
+        Map<String, String> applicationMap = dataCache.getApplicationTypeMap();
         List<CrowdTestProjectVO> resultList = new ArrayList<>();
         resultList.addAll(projectRepo.findSquareIndexProject(indexCount).stream().map(crowdTestProject -> {
             // 项目测试类型转换
@@ -128,13 +130,15 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
         }
         String keyword = searchConditionVO.getKeyword();
         // 获取领域、应用、测试类型code 和 name 的map
-        Map<String, String> fieldMap = commonRepo.getFieldCodeNameMap();
-        Map<String, String> applicationMap = commonRepo.getApplicationCodeNameMap();
-        Map<String, String> testMap = commonRepo.getTypeCodeNameMap();
-
-        List<CrowdProjectVO> crowdProjectVOS = projectRepo.findAllHotProject().stream().map(crowdTestProject -> {
+        Map<String, String> fieldMap = dataCache.getFieldMap();
+        Map<String, String> applicationMap = dataCache.getApplicationTypeMap();
+        Map<String, String> testMap = dataCache.getTestTypeMap();
+
+        // 过滤定向项目
+        List<CrowdProjectVO> crowdProjectVOS = projectRepo.findAllHotProject().stream()
+                .filter(crowdTestProject -> !crowdTestProject.getProjectDistributionTypeId().equals(DistributeType.DIRECT.getId()))
+                .map(crowdTestProject -> {
             // 领域、应用、测试类型值的转换
-//            crowdTestProject.setApplicationType(applicationMap.get(crowdTestProject.getApplicationType()));
             viewMediator.changeFieldAndApplicationAndTestType(crowdTestProject, applicationMap, fieldMap, testMap);
             // 判断项目是否截止
             if (crowdTestProject.getDeadTime().getTime() <= System.currentTimeMillis() && crowdTestProject.getStatus() < CrowdTestProjectStatus.HAS_FINISHED) {
@@ -157,14 +161,6 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     }
 
     @Override
-    public List<CrowdTestProjectVO> findSquareProjectByNameLike(String name) {
-        if (name == null || name.trim().equals("")) {
-            return viewMediator.AllByPage();
-        }
-        return viewMediator.findByNameLike(name);
-    }
-
-    @Override
     public List<CrowdTestProjectVO> findByNameLike(String name) {
         if (name == null || name.trim().equals("")) {
             return viewMediator.AllByPage();
@@ -173,37 +169,19 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
 
     }
 
-    /**
-     * 众测项目分页查询服务,过滤掉已完成的。
-     *
-     * @param pageable
-     * @return
-     */
-    @Override
-    public List<CrowdTestProjectVO> findAll(Pageable pageable) {
-
-        return viewMediator.crowdTestProjects();
-    }
-
-
-    @Override
-    public List<CrowdTestProjectVO> findAll() {
-        return viewMediator.crowdTestProjects();
-    }
-
-
     @Override
     public ProjectDetailsDTO getProjectDetails(String projectCode, Long userId) {
+        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
         if (userId == null)
-            return viewMediator.renderProjectDetails(projectRepo.getByProjectCode(projectCode), null);
-        return viewMediator.renderProjectDetails(projectRepo.getByProjectCode(projectCode), userRepo.getByID(userId));
+            return viewMediator.renderProjectDetails(project, null);
+        return viewMediator.renderProjectDetails(project, userId);
     }
 
     @Override
     public ProjectDetailsDTO createCrowdProject(CrowdTestProjectCommand command, long userId) {
         // 获取用户所有角色
 //        List<UserToRolePO> userToRole = userToRoleDao.findByUserId(userId);
-        User user = userRepo.getByID(userId);
+        User user = userRepo.getInfoAndRolesByID(userId);
         if (AuthCheckServiceImpl.canCreateProject(user)) {
             CrowdTestProject project = command.toCrowdProject();
             project.setStatus(CrowdTestProjectStatus.HAS_RELEASED);
@@ -225,7 +203,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
 
     @Override
     public ProjectDetailsDTO updateProject(String projectCode, CrowdTestProjectCommand crowdTestProjectCommand) {
-        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        CrowdTestProject project = projectRepo.getByProjectCodeJustInfo(projectCode);
         if (project.getStatus() == CrowdTestProjectStatus.HAS_FINISHED)
             throw new BaseException("结项项目禁止修改!");
         if (!project.getUserId().equals(crowdTestProjectCommand.getUserId()))
@@ -234,7 +212,8 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
         if (project.getCreateTime() == null) {
             project.setCreateTime(new Timestamp(System.currentTimeMillis()));
         }
-        projectRepo.saveCrowdTestProject(operationMediator.updateProject(project, crowdTestProjectCommand));
+        CrowdTestProject crowdTestProject = operationMediator.updateProject(project, crowdTestProjectCommand);
+        projectRepo.saveCrowdTestProject(crowdTestProject);
         return getProjectDetails(projectCode, crowdTestProjectCommand.getUserId());
     }
 
@@ -290,7 +269,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
 
     @Override
     public List<CrowdTestProject> generateProjectByExcel(Long userId, MultipartFile file) {
-        User user = userRepo.getByID(userId);
+        User user = userRepo.getInfoAndRolesByID(userId);
         List<CrowdTestProject> projects = transferExcel2Projects(file);
         projects.forEach(project -> {
             project.setCode(GenerateFlowCodeUtil.generateProjCode());
@@ -393,24 +372,25 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
 
     @Override
     public ProjectDetailsDTO receiveProject(String projectCode, Long userId) {
-        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
-        User user = userRepo.getByID(userId);
+        CrowdTestProject project = projectRepo.getByProjectCodeJustInfo(projectCode);
+        User user = userRepo.getInfoAndRolesAndRegionalMangerByID(userId);
         project.receiveProject(user);
         projectRepo.saveCrowdTestProject(project);
         return getProjectDetails(projectCode, userId);
     }
 
     @Override
-    public void rejectProject(String projectCode, Long userId) {
-        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+    public ProjectDetailsDTO rejectProject(String projectCode, Long userId) {
+        CrowdTestProject project = projectRepo.getByProjectCodeJustInfo(projectCode);
         project.reject(userId);
         projectRepo.saveCrowdTestProject(project);
+        return getProjectDetails(projectCode, userId);
     }
 
     @Override
     public ProjectDetailsDTO commitProject(String projectCode, Long userId) {
         CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
-        project.commitCrowdTestProject(userRepo.getByID(userId));
+        project.commitCrowdTestProject(userRepo.getInfoAndRolesAndRegionalMangerByID(userId));
         projectRepo.saveCrowdTestProject(project);
         return getProjectDetails(projectCode, userId);
     }
@@ -427,7 +407,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
                 if(taskToUser.getHasReport() == 0){
                     continue;
                 }
-                User user = userRepo.getByID(taskToUser.getUserId());
+                User user = userRepo.getInfoAndRolesByID(taskToUser.getUserId());
 
                 // 对用户判断认证类型 测评机构为2 测试人员为6
                 Optional<UserTaskCountPO> userTaskCountPOOptional = userTaskCountDao.findByUserId(user.getId());
@@ -447,7 +427,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
                     userTaskCountDao.save(userTaskCountPO);
                 }
             }
-            project.finishCrowdTestProject(userRepo.getByID(userId));
+            project.finishCrowdTestProject(userId);
             projectRepo.saveCrowdTestProject(project);
             return getProjectDetails(projectCode, userId);
         }

+ 9 - 9
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdReportServiceImpl.java

@@ -2,13 +2,13 @@ package com.mooctest.crowd.site.service.impl;
 
 import com.mooctest.crowd.domain.dao.EndPointDao;
 import com.mooctest.crowd.domain.domainobject.*;
+import com.mooctest.crowd.domain.domainobject.enums.JudgeType;
 import com.mooctest.crowd.domain.exception.BaseException;
 import com.mooctest.crowd.domain.exception.CrowdTestReportNotExistException;
 import com.mooctest.crowd.domain.exception.CrowdTestTaskNotExistException;
 import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
 import com.mooctest.crowd.site.command.CrowdTestReportCommand;
 import com.mooctest.crowd.site.data.dto.ReportDetailsDTO;
-import com.mooctest.crowd.site.data.enums.BooleanType;
 import com.mooctest.crowd.site.mediator.ViewMediator;
 import com.mooctest.crowd.site.service.CrowdReportService;
 import com.mooctest.crowd.site.util.GenerateFlowCodeUtil;
@@ -43,7 +43,7 @@ public class CrowdReportServiceImpl implements CrowdReportService {
 
     @Override
     public ReportDetailsDTO createTaskReport(String projectCode, String taskCode, CrowdTestReportCommand command, Long userId) {
-        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        CrowdTestProject project = projectRepo.getByProjectCodeAndTaskCode(projectCode, taskCode);
         Optional<CrowdTestTask> task = project.getCrowdTestTaskList()
                 .stream().filter(crowdTestTask -> crowdTestTask.getCode().equals(taskCode)).findFirst();
         if (!task.isPresent())
@@ -73,17 +73,17 @@ public class CrowdReportServiceImpl implements CrowdReportService {
         TaskToUser taskToUser = userOptional.get();
         List<CrowdTestReport> crowdTestReportList = taskToUser.getCrowdTestReportList();
         crowdTestReportList.add(report);
-        taskToUser.setHasReport(BooleanType.YES.getId());
+        taskToUser.setHasReport(JudgeType.YES.getId());
 //        taskToUser.setIsCommitted(BooleanType.YES.getId());
         taskToUser.setCommitReportTime(new Timestamp(System.currentTimeMillis()));
         projectRepo.saveCrowdTestProject(project);
-        return getTaskReport(projectCode, taskCode, reportCode, userId);
+        return this.getTaskReport(projectCode, taskCode, reportCode, userId);
     }
 
     @Override
     public ReportDetailsDTO updateTaskReport(String projectCode, String taskCode, String reportCode, CrowdTestReportCommand command, Long userId) {
 
-        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        CrowdTestProject project = projectRepo.getByProjectCodeAndTaskCode(projectCode, taskCode);
         Optional<CrowdTestTask> task = project.getCrowdTestTaskList()
                 .stream().filter(crowdTestTask -> crowdTestTask.getCode().equals(taskCode)).findFirst();
         if (!task.isPresent())
@@ -119,7 +119,7 @@ public class CrowdReportServiceImpl implements CrowdReportService {
 
     @Override
     public void deleteTaskReport(String projectCode, String taskCode, String reportCode) {
-        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        CrowdTestProject project = projectRepo.getByProjectCodeAndTaskCode(projectCode, taskCode);
         project.getTaskReport(taskCode, reportCode).setIsDeleted(1);
         projectRepo.saveCrowdTestProject(project);
     }
@@ -131,7 +131,7 @@ public class CrowdReportServiceImpl implements CrowdReportService {
 
     @Override
     public ReportDetailsDTO createProjectReport(String projectCode, CrowdTestReportCommand command) {
-        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        CrowdTestProject project = projectRepo.getByProjectCodeJustInfo(projectCode);
         if (project.getStatus() >= CrowdTestProjectStatus.HAS_COMMITED)
             throw new BaseException("当前阶段无法创建报告");
         CrowdTestReport report = command.toCrowdTestReport();
@@ -144,8 +144,8 @@ public class CrowdReportServiceImpl implements CrowdReportService {
     }
 
     @Override
-    public ReportDetailsDTO updatePorjctReport(String projectCode, String reportCode, CrowdTestReportCommand command) {
-        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+    public ReportDetailsDTO updateProjectReport(String projectCode, String reportCode, CrowdTestReportCommand command) {
+        CrowdTestProject project = projectRepo.getByProjectCodeJustInfoAndProjectReport(projectCode);
         if (project.getStatus() >= CrowdTestProjectStatus.HAS_COMMITED)
             throw new BaseException("当前阶段无法修改报告");
         CrowdTestReport report = project.getCrowdTestReportForProject();

+ 180 - 40
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTaskServiceImpl.java

@@ -5,15 +5,17 @@ import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.mooctest.crowd.domain.dao.*;
 import com.mooctest.crowd.domain.domainobject.*;
+import com.mooctest.crowd.domain.domainobject.enums.DistributeType;
+import com.mooctest.crowd.domain.domainobject.enums.RoleType;
 import com.mooctest.crowd.domain.exception.*;
 import com.mooctest.crowd.domain.model.ApplicationTypePO;
 import com.mooctest.crowd.domain.model.EndPointPO;
 import com.mooctest.crowd.domain.model.FieldPO;
-import com.mooctest.crowd.domain.repository.CommonRepo;
 import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
 import com.mooctest.crowd.domain.repository.CrowdTestTaskRepo;
 import com.mooctest.crowd.domain.repository.UserRepo;
 import com.mooctest.crowd.site.command.CrowdTestTaskCommand;
+import com.mooctest.crowd.site.configuration.DataCache;
 import com.mooctest.crowd.site.constants.UploadType;
 import com.mooctest.crowd.site.data.dto.ProjectDetailsDTO;
 import com.mooctest.crowd.site.data.dto.TaskDetailsDTO;
@@ -22,6 +24,7 @@ import com.mooctest.crowd.site.data.enums.ProjectType;
 import com.mooctest.crowd.site.data.tfidf.JabaResult;
 import com.mooctest.crowd.site.data.tfidf.TFIDFAnalyzer;
 import com.mooctest.crowd.site.data.vo.CrowdTaskVO;
+import com.mooctest.crowd.site.data.vo.ExamVO;
 import com.mooctest.crowd.site.mediator.ViewMediator;
 import com.mooctest.crowd.site.service.CrowdTaskService;
 import com.mooctest.crowd.site.service.UploadService;
@@ -33,11 +36,18 @@ import net.lingala.zip4j.util.Zip4jConstants;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.http.converter.StringHttpMessageConverter;
 import org.springframework.mock.web.MockMultipartFile;
 import org.springframework.stereotype.Service;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.*;
+import java.nio.charset.StandardCharsets;
 import java.sql.Timestamp;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -79,10 +89,13 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
     private ViewMediator viewMediator;
 
     @Autowired
-    private CommonRepo commonRepo;
+    private UploadService uploadService;
 
     @Autowired
-    private UploadService uploadService;
+    private RestTemplate restTemplate;
+
+    @Autowired
+    private DataCache dataCache;
 
     @Value("${file.save.path}")
     private String fileSaveRootPath;
@@ -99,6 +112,15 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
     @Value("${feature.client.oss}")
     private Boolean usingOss;
 
+    @Value("${baseUrl.service.review}")
+    private String reviewServiceBaseUrl;
+
+    @Value("${baseUrl.service.crowd}")
+    private String crowdServiceBaseUrl;
+
+    @Value("${baseUrl.service.crowdIndex}")
+    private String crowdServiceIndexBaseUrl;
+
     @Override
     public List<CrowdTaskVO> findMoreHotTasks() {
         return viewMediator.findMoreHotTasks();
@@ -107,9 +129,9 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
     @Override
     public List<CrowdTaskVO> findMoreHotTasksList(String keyword, int taskCount, String testTypeCode) {
         // 获取领域、应用、测试类型code 和 name 的map
-        Map<String, String> fieldMap = commonRepo.getFieldCodeNameMap();
-        Map<String, String> applicationMap = commonRepo.getApplicationCodeNameMap();
-        Map<String, String> testMap = commonRepo.getTypeCodeNameMap();
+        Map<String, String> fieldMap = dataCache.getFieldMap();
+        Map<String, String> applicationMap = dataCache.getApplicationTypeMap();
+        Map<String, String> testMap = dataCache.getTestTypeMap();
 
         // 热门任务指的是未被接收/进行中的项目
         List<CrowdTestProject> allHotProject = projectRepo.findAllHotProject();
@@ -141,11 +163,12 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
         if (!testTypeCode.equals("")){
             crowdTaskVOS = crowdTaskVOS.stream().filter(crowdTaskVO -> crowdTaskVO.getServiceType().equals(testMap.get(testTypeCode))).collect(Collectors.toList());
         }
-        // 对结果进行排序 接收任务、任务状态、任务创建时间
+        // 过滤定向任务,并对结果进行排序 接收任务、任务状态、任务创建时间
         List<CrowdTaskVO> taskVOS;
         taskVOS = crowdTaskVOS.stream().filter(crowdTaskVO -> crowdTaskVO.getStatus() != CrowdTestTaskStatus.HAS_TIME_OUT)
-                .sorted(Comparator.comparing(CrowdTaskVO::getAcceptedCount).reversed()
-                        .thenComparing(CrowdTaskVO::getStatus).thenComparing(CrowdTaskVO::getCreateTime)).collect(Collectors.toList());
+                .filter(crowdTaskVO -> !crowdTaskVO.getDistributionType().equals(DistributeType.DIRECT.getId()))
+                .sorted(Comparator.comparing(CrowdTaskVO::getAcceptedCount)
+                        .thenComparing(CrowdTaskVO::getStatus).thenComparing(CrowdTaskVO::getCreateTime).reversed()).collect(Collectors.toList());
 
         if(taskCount != 0){
             taskVOS = taskVOS.stream().limit(taskCount).collect(Collectors.toList());
@@ -159,6 +182,18 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
     }
 
     @Override
+    public ExamVO getExamInfo(Long examId) {
+        CrowdTestTask crowdTestTask = projectRepo.getTaskInfoByExamId(examId);
+        ExamVO result = new ExamVO();
+        result.setId(examId);
+        result.setName(crowdTestTask.getName());
+        result.setInfo(crowdTestTask.getDescription());
+        result.setBeginTime(crowdTestTask.getCreateTime().getTime());
+        result.setEndTime(crowdTestTask.getDeadTime().getTime());
+        return result;
+    }
+
+    @Override
     public void jumpPublicTesting(String projectCode, String taskCode, Long userId) {
         viewMediator.jumpPublicTesting(projectCode,taskCode,userId);
     }
@@ -201,49 +236,149 @@ 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);
+
+        // 配置endpoint
+        EndPoint endPoint = task.getEndPoint();
+        // 众测服务同步新建任务
+        if(command.getEndPoint().getThreePageUrl() != null && !command.getEndPoint().getThreePageUrl().equals("")){
+            String endPointData = this.createTaskToCrowdService(command.getName(), command.getDesc(), command.getEndPoint().getCollaborativeType(), command.getEndPoint().getThreePageUrl());
+            if(endPointData.equals("")){
+                throw new BaseException("创建失败,众测端调用出错");
+            }
+            Map<String, Object> dataMap = (Map<String, Object>) JSON.parse(endPointData);
+            endPoint.setToken(dataMap.get("taskDaPanUrl").toString());
+            endPoint.setExamId(dataMap.get("examId").toString());
+            endPoint.setCaseId(dataMap.get("caseId").toString());
+            // 获取填写报告的url
+            String reportUrl = this.getForEntityReportUrl(userId, task, endPoint);
+            endPoint.setUrl(reportUrl);
+        }
+        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);
     }
 
     @Override
     public TaskDetailsDTO updateTask(String projectCode, String taskCode, CrowdTestTaskCommand command, Long userId) {
-        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
-        Optional<CrowdTestTask> task = project.getCrowdTestTaskList().stream().filter(crowdTestTask -> crowdTestTask.getCode().equals(taskCode)).findFirst();
-        if (!task.isPresent())
-            throw new CrowdTestTaskNotExistException();
-        if (task.get().getStatus() == CrowdTestTaskStatus.HAS_FINISHED)
+        CrowdTestProject project = projectRepo.getByProjectCodeAndTaskCode(projectCode, taskCode);
+        CrowdTestTask task = this.getTaskByProjectAndTaskCode(project, taskCode);
+        if (task.getStatus() == CrowdTestTaskStatus.HAS_FINISHED)
             throw new BaseException("禁止修改已结束的任务!");
-//        command.setType(commonRepo.getTypeCodeByName(command.getType()));
         CrowdTestTask updateTask = command.toCrowdTask(projectCode);
         // 定向任务被拒绝,更新时需要删除任务中的taskToUser  acceptedUserList
-        if (task.get().getDistributionType().equals(DistributeType.DIRECT.getId())) {
-            crowdTestTaskRepo.deleteTaskToUser(task.get().getAcceptedUserList().get(0));
+        if (task.getDistributionType().equals(DistributeType.DIRECT.getId())) {
+            crowdTestTaskRepo.deleteTaskToUser(task.getAcceptedUserList().get(0));
         }
 
-        updateTask.setId(task.get().getId());
+        updateTask.setId(task.getId());
         updateTask.setCode(taskCode);
-        updateTask.setCreateTime(task.get().getCreateTime());
+        updateTask.setCreateTime(task.getCreateTime());
         updateTask.setStatus(CrowdTestTaskStatus.HAS_RELEASED);
         updateTask.update();
-        project.removeTask(task.get());
 
-//        // 重新生成任务导出链接
-//        String exportTaskUrl = this.exportTask(projectCode, updateTask.getCode(), userId);
-//        updateTask.setExportUrl(exportTaskUrl);
-
-        project.addTask(updateTask);
+        // 判断endpoint是否有修改
+        EndPoint endPoint = task.getEndPoint();
+        EndPoint commandEndPoint = command.getEndPoint();
+        if(endPoint != null){
+            if(!task.getName().equals(command.getName()) || endPoint.getCollaborativeType() != commandEndPoint.getCollaborativeType()
+                    || !endPoint.getThreePageUrl().equals(commandEndPoint.getThreePageUrl())){
+                // 更新不一样的值
+                endPoint.setCollaborativeType(commandEndPoint.getCollaborativeType());
+                endPoint.setThreePageUrl(commandEndPoint.getThreePageUrl());
+
+                // 任务名称、协作模式、三级菜单被修改,则在众测中新建任务
+                String endPointData = this.createTaskToCrowdService(command.getName(), command.getDesc(), commandEndPoint.getCollaborativeType(), commandEndPoint.getThreePageUrl());
+                if(endPointData.equals("")){
+                    throw new BaseException("创建失败,众测端调用出错");
+                }
+                Map<String, Object> dataMap = (Map<String, Object>) JSON.parse(endPointData);
+                endPoint.setToken(dataMap.get("taskDaPanUrl").toString());
+                endPoint.setExamId(dataMap.get("examId").toString());
+                endPoint.setCaseId(dataMap.get("caseId").toString());
+                // 获取填写报告的url
+                String reportUrl = this.getForEntityReportUrl(userId, task, endPoint);
+                endPoint.setUrl(reportUrl);
+            }
+        }
+        updateTask.setEndPoint(endPoint);
+        project.removeTask(task);
+        project.getCrowdTestTaskList().add(updateTask);
         projectRepo.saveCrowdTestProject(project);
         return getTaskDetails(projectCode, taskCode, userId);
     }
 
+    private String createTaskToCrowdService(String name, String desc, int collaborativeType, String threePageUrl) {
+        MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+        params.add("name", name);
+        params.add("description", desc);
+        params.add("collaborativeType", collaborativeType + "");
+        params.add("threePageUrl", threePageUrl);
+        params.add("fileName", threePageUrl.substring(threePageUrl.lastIndexOf("/")+1));
+        RestTemplate restTemplate = new RestTemplate();
+        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
+        ResponseEntity<String> responseEntity = restTemplate.postForEntity
+                (reviewServiceBaseUrl  + "/addCrowdTaskDefault", params, String.class);
+        if (responseEntity.getStatusCode().equals(HttpStatus.OK)){
+            String responseEntityBody = responseEntity.getBody();
+            Map<String, Object> resultMap = (Map<String, Object>) JSON.parse(responseEntityBody);
+            if((int)resultMap.get("status") == 200){
+                return resultMap.get("data").toString();
+            }
+        }
+        return "";
+    }
+
+    @Override
+    public String getWriteReportUrl(String projectCode, String taskCode, Long userId) {
+        CrowdTestProject project = projectRepo.getByProjectCodeAndTaskCode(projectCode, taskCode);
+        CrowdTestTask task = this.getTaskByProjectAndTaskCode(project, taskCode);
+        EndPoint endPoint = task.getEndPoint();
+        return this.getForEntityReportUrl(userId, task, endPoint);
+    }
+
+    @NotNull
+    private String getForEntityReportUrl(Long userId, CrowdTestTask task, EndPoint endPoint) {
+        int roleId = 0; // 默认为0学生 1为教师
+        User user = userRepo.getInfoAndRolesByID(userId);
+        if(user.getRoleList().stream().anyMatch(role -> role.getName().equals(RoleType.REGIONAL_MANAGER.getName())
+                || role.getName().equals(RoleType.SYSTEM_ADMIN.getName()))){
+            roleId = 1;
+        }
+        String url = crowdServiceBaseUrl  + "/Bug/api/analyze/detailToToken?examId=" + endPoint.getExamId() + "&caseId=" + endPoint.getCaseId() +
+                "&userId=" + String.valueOf(userId) + "&roleId=" + roleId + "&beginTime=" + String.valueOf(task.getCreateTime().getTime()) +
+                "&endTime=" + String.valueOf(task.getDeadTime().getTime());
+
+        log.info("调用众测服务接口,Get请求:" + url);
+        ResponseEntity<Map> responseEntity = restTemplate.getForEntity(url, Map.class);
+
+        if (responseEntity.getStatusCode().equals(HttpStatus.OK)){
+            Map resultMap = responseEntity.getBody();
+            if(resultMap.get("result").equals("success")){
+                String token = resultMap.get("token").toString();
+                String writeReportUrl = crowdServiceIndexBaseUrl + token;
+                log.info("调用众测服务接口成功,报告填写url为:" + url);
+                return writeReportUrl;
+            }else if (resultMap.get("result").equals("fail")){
+                log.info("调用众测服务接口成功,但是接口返回fail");
+                return "";
+            }
+        }
+        log.info("调用众测服务接口失败");
+        throw new BaseException("调用众测服务接口失败");
+    }
+
+    public CrowdTestTask getTaskByProjectAndTaskCode(CrowdTestProject project, String taskCode) {
+        Optional<CrowdTestTask> task = project.getCrowdTestTaskList().stream().filter(crowdTestTask -> crowdTestTask.getCode().equals(taskCode)).findFirst();
+        if (!task.isPresent()) {
+            throw new CrowdTestTaskNotExistException();
+        }
+        return task.get();
+    }
+
     @Override
     public TaskSquareDTO getAllTasks() {
         return viewMediator.renderTaskSquare();
@@ -251,7 +386,7 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
 
     @Override
     public TaskDetailsDTO acceptTask(String projectCode, String taskCode, Long userId) {
-        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        CrowdTestProject project = projectRepo.getByProjectCodeAndTaskCode(projectCode, taskCode);
         // 项目发起者
         if (project.getUserId().equals(userId)) {
             throw new BaseException("您是项目发起者,不可接收自己项目下的测试任务!");
@@ -263,13 +398,13 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
             isFirstAcceptPeople = true;
         }
 
-        task.receive(userRepo.getByID(userId));
+        task.receive(userId);
         project.setJoinCount(project.getJoinCount() + 1);
 
         // 判断是否为第三方任务,如果是则管理员自身也是一个参与者
         Optional<EndPointPO> endPointPOOptional = endPointDao.findByTaskCode(task.getCode());
         if(endPointPOOptional.isPresent() && isFirstAcceptPeople){
-            task.receive(userRepo.getByID(project.getRegionalManagerId()));
+            task.receive(project.getRegionalManagerId());
             project.setJoinCount(project.getJoinCount() + 1);
         }
 
@@ -279,7 +414,7 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
 
     @Override
     public void rejectDirectionalTask(String projectCode, String taskCode, Long userId) {
-        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        CrowdTestProject project = projectRepo.getByProjectCodeAndTaskCode(projectCode,taskCode);
         CrowdTestTask task = project.getTask(taskCode);
         task.reject(userId);
 //        project.setRestPrice(project.getRestPrice() + task.getQuotedPrice());
@@ -288,12 +423,12 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
 
     @Override
     public TaskDetailsDTO commitTask(String projectCode, String taskCode, Long userId) {
-        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        CrowdTestProject project = projectRepo.getByProjectCodeAndTaskCode(projectCode, taskCode);
         CrowdTestTask task = project.getTask(taskCode);
         if (userId.equals(project.getRegionalManagerId())) {
             // 区域管理员提交任务
             task.commitByRegionalManager();
-        } else if (AuthCheckServiceImpl.isAgency(userRepo.getByID(userId))) {
+        } else if (AuthCheckServiceImpl.isAgency(userRepo.getInfoAndRolesAndRegionalMangerByID(userId))) {
             // 测评机构提交任务
             task.commitByAgency(taskCode, userId);
         }
@@ -304,7 +439,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);
@@ -315,7 +450,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);
@@ -331,9 +466,14 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
     }
 
     @Override
+    public List<JabaResult> getTaskWord(String projectCode, String taskCode, String taskDescription) {
+        return TFIDFAnalyzer.getInstance().extractTagsList(taskDescription, 20);
+    }
+
+    @Override
     public String exportTask(String projectCode, String taskCode, Long userId) {
         // 获取项目和任务的详细信息,特定任务的信息
-        ProjectDetailsDTO projectDetailsDTO = viewMediator.renderProjectDetails(projectRepo.getByProjectCodeAndTaskCode(projectCode, taskCode), userRepo.getByID(userId));
+        ProjectDetailsDTO projectDetailsDTO = viewMediator.renderProjectDetails(projectRepo.getByProjectCodeAndTaskCode(projectCode, taskCode), userId);
 
         // 文件夹路径
         String fileDirectoryPath = fileSaveRootPath + UploadType.EXPORT_TASK_FILE;
@@ -445,7 +585,7 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
         crowdTestProject.setCrowdTestTaskList(crowdTestTaskList);
 
         projectRepo.saveCrowdTestProject(crowdTestProject);
-        return viewMediator.renderProjectDetails(projectRepo.getByProjectCode(crowdTestProject.getCode()), userRepo.getByID(userId));
+        return viewMediator.renderProjectDetails(projectRepo.getByProjectCodeAndTaskCode(crowdTestProject.getCode(), crowdTestTaskList.get(0).getCode()), userId);
     }
 
     /**

+ 6 - 7
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTestSquareServiceImpl.java

@@ -1,7 +1,7 @@
 package com.mooctest.crowd.site.service.impl;
 
-import com.mooctest.crowd.domain.repository.CommonRepo;
 import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
+import com.mooctest.crowd.site.configuration.DataCache;
 import com.mooctest.crowd.site.constants.CommonConstant;
 import com.mooctest.crowd.site.data.ColumnFilter;
 import com.mooctest.crowd.site.data.enums.ColumnFilterType;
@@ -42,10 +42,9 @@ public class CrowdTestSquareServiceImpl implements CrowdTestSquareService {
     @Autowired
     private CrowdTestProjectRepo projectRepo;
     @Autowired
-    private CommonRepo commonRepo;
-    @Autowired
     private ViewMediator viewMediator;
-
+    @Autowired
+    private DataCache dataCache;
 
     /**
      * 任务和项目的模糊查询
@@ -57,9 +56,9 @@ public class CrowdTestSquareServiceImpl implements CrowdTestSquareService {
         Pageable pageable = this.getPageable(searchConditionVO);
         String keyword = searchConditionVO.getKeyword();
         // 获取领域、应用、测试类型code 和 name 的map
-        Map<String, String> fieldMap = commonRepo.getFieldCodeNameMap();
-        Map<String, String> applicationMap = commonRepo.getApplicationCodeNameMap();
-        Map<String, String> testMap = commonRepo.getTypeCodeNameMap();
+        Map<String, String> fieldMap = dataCache.getFieldMap();
+        Map<String, String> applicationMap = dataCache.getApplicationTypeMap();
+        Map<String, String> testMap = dataCache.getTestTypeMap();
 
         if (searchConditionVO.getColumnFilters().get(0).getType().equals("project")) {
             List<CrowdTestProjectVO> projectVOS = projectRepo.findWaitingAcceptByNameLike("%"+keyword+"%").stream().map(crowdTestProject -> {

+ 3 - 2
site/src/main/java/com/mooctest/crowd/site/service/impl/TechnicalArticlesServiceImpl.java

@@ -3,6 +3,7 @@ package com.mooctest.crowd.site.service.impl;
 
 import com.mooctest.crowd.domain.domainobject.EndPoint;
 import com.mooctest.crowd.domain.repository.*;
+import com.mooctest.crowd.site.configuration.DataCache;
 import com.mooctest.crowd.site.data.dto.TechnicalArticlesDTO;
 import com.mooctest.crowd.site.data.vo.CrowdTaskVO;
 import com.mooctest.crowd.site.data.vo.PublicationsVO;
@@ -39,12 +40,12 @@ public class TechnicalArticlesServiceImpl implements TechnicalArticlesService{
     private ToolRepo toolRepo;
 
     @Autowired
-    private CommonRepo commonRepo;
+    private DataCache dataCache;
 
     @Override
     public TechnicalArticlesDTO getArticles(Pageable pageable,String keyword,Map<String, String> extraCondition) {
         TechnicalArticlesDTO  technicalArticlesDTO= new  TechnicalArticlesDTO();
-        Map<String, String> typeMap = commonRepo.getTypeCodeNameMap();
+        Map<String, String> typeMap = dataCache.getTestTypeMap();
         for(String key:extraCondition.keySet()) {
             String value = extraCondition.get(key);
             if(value.equals("0")){

Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
site/src/main/java/com/mooctest/crowd/site/service/impl/UserServiceImpl.java


+ 1 - 1
site/src/main/java/com/mooctest/crowd/site/util/GenerateFlowCodeUtil.java

@@ -33,7 +33,7 @@ public class GenerateFlowCodeUtil {
         }
         Date date = new Date();
         DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHH");
-        String code  = prefix + "-" + dateFormat.format(date)+getSequence(codeNum, 3);
+        String code  = prefix + "-" + dateFormat.format(date) + getSequence(codeNum, 3);
         return code;
     }
 

+ 41 - 160
site/src/main/resources/application.yml

@@ -93,48 +93,15 @@ feature:
   client:
     oss: true
   task:
-    import: true
-    recommend: false
+    import: true  #任务导入
+    recommend: false #任务推荐
+    acceptedPWD: false #使用密码接收任务
 
----
-spring:
-  profiles: dev-online
-  datasource:
-    url: jdbc:mysql://101.37.175.111:3306/crowd-test-service-online?useSSL=false&useUnicode=yes&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
-    username: mooctest
-    password: secr3t!
-  redis:
-    host: 59.42.10.53
-    port: 6379
-    password: '#2019@callforttest@!'
-    jedis:
-      pool:
-        max-active: 8
-        max-idle: 8
-        max-wait: -1
-        min-idle: 0
-    database: 6
-user:
+baseUrl:
   service:
-    baseUrl: http://59.42.10.53:8081
-
-#file:
-#  save:
-#    path: /var/www/
-
-file:
-  save:
-    path: /Users/guochao/Desktop/project/data/cofortest/
-
-#feature:
-#  client:
-#    oss: true
-feature:
-  client:
-    oss: false
-
-website:
-  domain: mooctest.net
+    review: http://127.0.0.1:9004
+    crowd: http://127.0.0.1:8090
+    crowdIndex: http://localhost:8000/edit?primaryColor=%231890ff&fixSiderbar=true&colorWeak=false&title=%E4%BC%97%E6%B5%8B%E6%9C%8D%E5%8A%A1%E7%B3%BB%E7%BB%9F&pwa=false&token=
 
 ---
 # 开发-私有版
@@ -165,6 +132,10 @@ user:
 feature:
   client:
     oss: true
+  task:
+    import: true  #任务导入
+    recommend: false #任务推荐
+    acceptedPWD: true #使用密码接收任务
 
 file:
   save:
@@ -176,7 +147,9 @@ file:
 
 website:
   domain: mooctest.net
+
 ---
+#私有云版本
 spring:
   profiles: private-cloud
   datasource:
@@ -225,55 +198,11 @@ website:
   domain: 127.0.0.1
 
 ---
+#开发线上版本
 spring:
-  profiles: private-cloud-localhost
-  datasource:
-    url: jdbc:mysql://127.0.0.1:3306/crowd-test-service?useSSL=false&useUnicode=yes&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
-    username: root
-    password: Customs2019
-  redis:
-    host: 127.0.0.1
-    port: 6379
-    password:
-    jedis:
-      pool:
-        max-active: 8
-        max-idle: 8
-        max-wait: -1
-        min-idle: 0
-    database: 0
-
-feature:
-  client:
-    oss: false
-
-file:
-  save:
-    path: /Users/guochao/Desktop/project/data/cofortest/
-
-user:
-  service:
-    baseUrl: http://127.0.0.1:8081
-#    baseUrl: http://59.42.10.53:8081
-
-website:
-  domain: 127.0.0.1
-
-private:
-  cloud:
-    # 导入私有云的项目code以此开头
-    master: MASTER
-    task:
-      type:
-        code: MzZC
-    publish:
-      project:
-        id: 4
----
-spring:
-  profiles: dev-localhost
+  profiles: dev-online
   datasource:
-    url: jdbc:mysql://101.37.175.111:3306/crowd-test-service?useSSL=false&useUnicode=yes&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://101.37.175.111:3306/crowd-test-service-online?useSSL=false&useUnicode=yes&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
     username: mooctest
     password: secr3t!
   redis:
@@ -287,63 +216,40 @@ spring:
         max-wait: -1
         min-idle: 0
     database: 6
-
-feature:
-  client:
-    oss: true
-
-file:
-  save:
-    path: http://mooctest-crowd-service.oss-cn-hangzhou.aliyuncs.com/
-
 user:
   service:
-#    baseUrl: http://127.0.0.1:8081
     baseUrl: http://59.42.10.53:8081
 
-website:
-  domain: mooctest.net
+#file:
+#  save:
+#    path: /var/www/
 
----
-spring:
-  profiles: pre
-  datasource:
-    url: jdbc:mysql://101.37.175.111:3306/crowd-test-service-pre?useSSL=false&useUnicode=yes&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
-    username: mooctest
-    password: secr3t!
-  redis:
-    host: 10.18.18.50
-    port: 6379
-    password: '#2019@callforttest@!'
-    jedis:
-      pool:
-        max-active: 8
-        max-idle: 8
-        max-wait: -1
-        min-idle: 0
-    database: 6
-user:
-  service:
-    baseUrl: http://10.18.18.50:8081
+file:
+  save:
+    path: /Users/guochao/Desktop/project/data/cofortest/
 
+#feature:
+#  client:
+#    oss: true
 feature:
   client:
-    oss: true
+    oss: false
 
 website:
   domain: mooctest.net
 
 ---
+#开发线上版本
 spring:
-  profiles: dev-online-localhost
+  profiles: dev-online
   datasource:
     url: jdbc:mysql://101.37.175.111:3306/crowd-test-service-online?useSSL=false&useUnicode=yes&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
     username: mooctest
     password: secr3t!
   redis:
-    host: 114.55.91.27
+    host: 59.42.10.53
     port: 6379
-    password: '#03#05@ise@mooctest'
+    password: '#2019@callforttest@!'
     jedis:
       pool:
         max-active: 8
@@ -353,53 +259,28 @@ spring:
     database: 6
 user:
   service:
-    baseUrl: http://127.0.0.1:8081
+    baseUrl: http://59.42.10.53:8081
+
+#file:
+#  save:
+#    path: /var/www/
 
 file:
   save:
-    path: /var/www/
+    path: /Users/guochao/Desktop/project/data/cofortest/
 
+#feature:
+#  client:
+#    oss: true
 feature:
   client:
-    oss: true
+    oss: false
 
 website:
   domain: mooctest.net
 
 ---
-spring:
-  profiles: pre-online
-  datasource:
-    url: jdbc:mysql://10.18.18.50:3306/crowd-test-service?useSSL=false&useUnicode=yes&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
-    username: root
-    password: callfortest_crowd
-  redis:
-    host: 10.18.18.50
-    port: 6379
-    password: '#2019@callforttest@!'
-    jedis:
-      pool:
-        max-active: 8
-        max-idle: 8
-        max-wait: -1
-        min-idle: 0
-    database: 0
-
-feature:
-  client:
-    oss: true
-
-file:
-  save:
-    path: /var/www/
-
-user:
-  service:
-    baseUrl: http://user.cofortest.com:8081
-website:
-  domain: cofortest.com
-
----
+#线上群智版本
 spring:
   profiles: online
   datasource:

+ 112 - 0
site/src/main/resources/logback.xml

@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
+    <!-- 属性定义 -->
+    <property name="LOG_HOME" value="../logs" />
+    <property name="maxHistory" value="90" />
+
+    <!-- ConsoleAppender 控制台输出日志 -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <!-- 对日志进行格式化 -->
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss:SSS} [%thread] %-5level %logger{50}\(%F %L\) -%msg%n </pattern>
+        </encoder>
+    </appender>
+
+    <!-- DEBUG日志 -->
+    <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender-->
+    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 过滤器,记录「所有」级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>DEBUG</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>ACCEPT</onMismatch>
+        </filter>
+        <!-- 滚动策略: 时间 和 大小 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_HOME}/debug/debugLog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
+            <maxFileSize>10MB</maxFileSize>
+            <maxHistory>${maxHistory}</maxHistory>
+            <totalSizeCap>20GB</totalSizeCap>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss:SSS} [%thread] %-5level %logger{50}\(%F %L\) -%msg%n </pattern>
+        </encoder>
+    </appender>
+
+    <!-- INFO级别日志 -->
+    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 过滤器,只记录「INFO」级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>INFO</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_HOME}/info/infoLog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
+            <maxFileSize>10MB</maxFileSize>
+            <maxHistory>${maxHistory}</maxHistory>
+            <totalSizeCap>20GB</totalSizeCap>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss:SSS} [%thread] %-5level %logger{50}\(%F %L\) -%msg%n </pattern>
+        </encoder>
+    </appender>
+
+    <!-- WARN级别日志 -->
+    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 过滤器,只记录「WARN」级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>WARN</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_HOME}/warn/warnLog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
+            <maxFileSize>10MB</maxFileSize>
+            <maxHistory>${maxHistory}</maxHistory>
+            <totalSizeCap>20GB</totalSizeCap>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss:SSS} [%thread] %-5level %logger{50}\(%F %L\) -%msg%n </pattern>
+        </encoder>
+    </appender>
+
+    <!-- ERROR级别日志 -->
+    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 过滤器,只记录「ERROR」级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_HOME}/error/errorLog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
+            <maxFileSize>10MB</maxFileSize>
+            <maxHistory>${maxHistory}</maxHistory>
+            <totalSizeCap>20GB</totalSizeCap>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss:SSS} [%thread] %-5level %logger{50}\(%F %L\) -%msg%n </pattern>
+        </encoder>
+    </appender>
+
+    <!-- eg: com.ljq.test 类的日志输出 info 及以上级别的日志 -->
+    <!--<logger name="com.ljq.test" level="info" />-->
+    <!-- eg: com.ljq.test1 类的日志不输出 -->
+    <!--<logger name="com.ljq.test1" additivity="false" />-->
+<!--    <logger name="org.apache.ibatis.io" level="info" />-->
+<!--    <logger name="org.mybatis.spring" level="info" />-->
+<!--    <logger name="org.springframework" level="info" />-->
+<!--    <logger name="io.lettuce" level="info"/>-->
+<!--    <logger name="io.netty" level="info" />-->
+
+    <!-- 根日志,所有日志appender都必须包含在root/logger中,否则不会起作用 -->
+    <root level="INFO">
+        <appender-ref ref="STDOUT" />
+        <appender-ref ref="DEBUG" />
+        <appender-ref ref="INFO" />
+        <appender-ref ref="WARN" />
+        <appender-ref ref="ERROR" />
+    </root>
+</configuration>

BIN
tool4deploy/site-0.0.1-SNAPSHOT.jar


Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff