Ver Fonte

Merge branch 'Dev' into 'Test'

Dev

See merge request crowd-2019/crowd-test-service-backend!83
郭超 há 5 anos atrás
pai
commit
129c3315a0
50 ficheiros alterados com 757 adições e 177 exclusões
  1. 5 1
      core/pom.xml
  2. 6 0
      core/src/main/java/com/mooctest/crowd/domain/dao/CrowdTestProjectDao.java
  3. 6 1
      core/src/main/java/com/mooctest/crowd/domain/dao/CrowdTestTaskDao.java
  4. 17 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestProject.java
  5. 1 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestReport.java
  6. 10 2
      core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestTask.java
  7. 18 37
      core/src/main/java/com/mooctest/crowd/domain/domainobject/EvaluationAgency.java
  8. 10 0
      core/src/main/java/com/mooctest/crowd/domain/repository/CommonRepo.java
  9. 21 0
      core/src/main/java/com/mooctest/crowd/domain/repository/CrowdTestProjectRepo.java
  10. 4 0
      core/src/main/java/com/mooctest/crowd/domain/repository/IUserRepo.java
  11. 7 0
      core/src/main/java/com/mooctest/crowd/domain/repository/UserRepo.java
  12. 2 0
      site/src/main/java/com/mooctest/crowd/site/constants/CommonConstant.java
  13. 8 11
      site/src/main/java/com/mooctest/crowd/site/controller/AgencyController.java
  14. 0 0
      site/src/main/java/com/mooctest/crowd/site/controller/CommonController.java
  15. 4 0
      site/src/main/java/com/mooctest/crowd/site/controller/CrowdProjectController.java
  16. 1 1
      site/src/main/java/com/mooctest/crowd/site/controller/CrowdTaskController.java
  17. 0 1
      site/src/main/java/com/mooctest/crowd/site/controller/PersonalDataController.java
  18. 6 2
      site/src/main/java/com/mooctest/crowd/site/controller/UserController.java
  19. 16 0
      site/src/main/java/com/mooctest/crowd/site/data/dto/DataDTO.java
  20. 2 2
      site/src/main/java/com/mooctest/crowd/site/data/dto/IndexDTO.java
  21. 2 2
      site/src/main/java/com/mooctest/crowd/site/data/dto/IndexInfoDTO.java
  22. 20 0
      site/src/main/java/com/mooctest/crowd/site/data/dto/UserDataDTO.java
  23. 1 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/AgencyVO.java
  24. 26 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdProjectDataVO.java
  25. 3 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdReportVO.java
  26. 22 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTaskDataVO.java
  27. 0 2
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTestProjectVO.java
  28. 2 4
      site/src/main/java/com/mooctest/crowd/site/data/vo/EvaluationAgencyVO.java
  29. 6 10
      site/src/main/java/com/mooctest/crowd/site/data/vo/ResidentAgencyVO.java
  30. 7 14
      site/src/main/java/com/mooctest/crowd/site/mediator/ViewMediator.java
  31. 6 0
      site/src/main/java/com/mooctest/crowd/site/mediator/impl/OperationMediatorImpl.java
  32. 97 40
      site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java
  33. 4 4
      site/src/main/java/com/mooctest/crowd/site/service/AgencyService.java
  34. 6 4
      site/src/main/java/com/mooctest/crowd/site/service/CommonService.java
  35. 8 0
      site/src/main/java/com/mooctest/crowd/site/service/ThemeSchedulerService.java
  36. 8 0
      site/src/main/java/com/mooctest/crowd/site/service/ThemeSchedulerTaskService.java
  37. 7 0
      site/src/main/java/com/mooctest/crowd/site/service/ThemeStatusService.java
  38. 7 0
      site/src/main/java/com/mooctest/crowd/site/service/ThemeStatusTaskService.java
  39. 0 0
      site/src/main/java/com/mooctest/crowd/site/service/UserService.java
  40. 47 31
      site/src/main/java/com/mooctest/crowd/site/service/impl/AgencyServiceImpl.java
  41. 29 6
      site/src/main/java/com/mooctest/crowd/site/service/impl/CommonServiceImpl.java
  42. 4 1
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdProjectServiceImpl.java
  43. 5 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTaskServiceImpl.java
  44. 1 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/ResidentServiceImpl.java
  45. 115 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/ThemeSchedulerServiceImpl.java
  46. 119 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/ThemeSchedulerTaskServiceImpl.java
  47. 30 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/ThemeStatusServiceImpl.java
  48. 30 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/ThemeStatusTaskServiceImpl.java
  49. 0 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/UserServiceImpl.java
  50. 1 1
      site/src/main/resources/application.yml

+ 5 - 1
core/pom.xml

@@ -148,7 +148,11 @@
         <artifactId>fastjson</artifactId>
         <version>1.2.58</version>
     </dependency>
-
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.58</version>
+        </dependency>
 
 
     </dependencies>

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

@@ -8,9 +8,11 @@ import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.data.repository.query.Param;
 
 import javax.transaction.Transactional;
 import java.util.List;
@@ -69,4 +71,8 @@ public interface CrowdTestProjectDao extends CrudRepository<CrowdTestProjectPO,
     @Override
     <S extends CrowdTestProjectPO> S save(S s);
 
+
+    @Modifying
+    @Query(nativeQuery = true,value="update crowd_test_project set CTP_STATUS= ?1 where CTP_CODE=?2")
+    void updateStatusById(@Param("status") int status, @Param("code") String code);
 }

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

@@ -5,9 +5,12 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.data.repository.query.Param;
+
 import javax.transaction.Transactional;
 import java.util.List;
 
@@ -65,5 +68,7 @@ public interface CrowdTestTaskDao extends CrudRepository<CrowdTestTaskPO, Long>,
     @Override
     <S extends CrowdTestTaskPO> S save(S s);
 
-
+    @Modifying
+    @Query(nativeQuery = true,value="update crowd_test_task set CTT_STATUS= ?1 where CTT_CODE=?2")
+    void updateStatusById(@Param("status") int status, @Param("code") String code);
 }

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

@@ -2,7 +2,10 @@ package com.mooctest.crowd.domain.domainobject;
 
 import com.google.gson.Gson;
 import com.mooctest.crowd.domain.exception.*;
+import com.mooctest.crowd.domain.model.CrowdTestProjectPO;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.sql.Timestamp;
 import java.util.ArrayList;
@@ -14,7 +17,16 @@ import java.util.Optional;
  * @date 2019/7/6 18:27
  */
 @Data
+@NoArgsConstructor
+@AllArgsConstructor
 public class CrowdTestProject {
+    public static final int HAS_REJECTED = -1; //项目被拒
+    public static final int HAS_CREATED = 0;  //创建项目
+    public static final int HAS_RELEASED = 1; //发布项目
+    public static final int HAS_RECEIVED = 2; //接收项目
+    public static final int HAS_COMMITED = 3; //提交项目
+    public static final int HAS_FINISHED = 4; //结束项目
+    public static final int HAS_TIME_OUT = 5; //时间截止
     private Long id;
     private String name;
     private String code;
@@ -51,6 +63,11 @@ public class CrowdTestProject {
 //        return crowdTestProject;
 //    }
 
+    public CrowdTestProject(CrowdTestProjectPO crowdTestProjectPO){
+        this.code = crowdTestProjectPO.getCode();
+        this.name = crowdTestProjectPO.getName();
+    }
+
     /**
      * 更新项目信息
      *

+ 1 - 0
core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestReport.java

@@ -25,6 +25,7 @@ public class CrowdTestReport {
     private String conclusion;
     private int isDeleted;
     private Timestamp createTime;
+    private boolean Updated;//是否能被修改
 
     @Override
     public String toString() {

+ 10 - 2
core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestTask.java

@@ -16,6 +16,13 @@ import java.util.stream.Collectors;
  */
 @Data
 public class CrowdTestTask {
+    public static final int HAS_REJECTED = -1;  //定向发布被拒
+    public static final int HAS_CREATED = 0;    //创建任务
+    public static final int HAS_RELEASED = 1;   //发布任务
+    public static final int HAS_RECEIVED = 2;   //接受任务
+    public static final int HAS_COMMITED = 3;   //区域管理员提交任务
+    public static final int HAS_FINISHED = 4;   //结束任务
+    public static final int HAS_TIME_OUT = 5; //时间截止
     private Long id;
     private String name;
     private String code;
@@ -82,7 +89,7 @@ public class CrowdTestTask {
      * 接收任务(测评机构)
      * @return
      */
-    public void receive(User user) {
+    public void receive(User user){
         //判断是否为测评机构
         EvaluationAgency evaluationAgency = user.getEvaluationAgency();
         if(evaluationAgency == null){
@@ -92,7 +99,7 @@ public class CrowdTestTask {
         if(this.getStatus() == CrowdTestTaskStatus.HAS_RECEIVED){
             if(this.getFullStatus() == CrowdTestTaskAcceptStatus.HAS_FULL)
                 throw new CrowdTestTaskException("当前任务满员!:");
-        }else if (this.getStatus()!=CrowdTestTaskStatus.HAS_RELEASED)
+        }else if(this.getStatus()!=CrowdTestTaskStatus.HAS_RELEASED&&this.getStatus()!=CrowdTestTaskStatus.HAS_REJECTED)
             throw new CrowdTestTaskException("任务当前状态不能被接收,当前状态为:"+this.getStatus());
         //定向发布类型
 //        if (this.getDistributionType() == 0) {
@@ -143,6 +150,7 @@ public class CrowdTestTask {
         this.setStatus(CrowdTestTaskStatus.HAS_REJECTED);
     }
 
+
     public void removeCrowdTestTask() {
         this.isDeleted = DeletedStatus.isDeleted;
     }

+ 18 - 37
core/src/main/java/com/mooctest/crowd/domain/domainobject/EvaluationAgency.java

@@ -2,7 +2,9 @@ package com.mooctest.crowd.domain.domainobject;
 
 import com.mooctest.crowd.domain.exception.BaseException;
 import com.mooctest.crowd.domain.model.EvaluationAgencyPO;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 import org.springframework.beans.BeanUtils;
 
 import java.sql.Timestamp;
@@ -13,6 +15,8 @@ import java.util.List;
  * @date 2019/7/12 1:32
  */
 @Data
+@AllArgsConstructor
+@NoArgsConstructor
 public class EvaluationAgency {
     private Long id;
     private Long userId;
@@ -30,45 +34,22 @@ public class EvaluationAgency {
     private Timestamp checkTime;
     private Timestamp applyTime;
 
-    @Override
-    public String toString() {
-        return "EvaluationAgency{" +
-                "id=" + id +
-                ", userId=" + userId +
-                ", evaluationAgencyName='" + evaluationAgencyName + '\'' +
-                ", bankAccount='" + bankAccount + '\'' +
-                ", address='" + address + '\'' +
-                ", evaluationAgencyAbilityList=" + evaluationAgencyAbilityList +
-                ", evaluationAgencyResourceList=" + evaluationAgencyResourceList +
-                ", agencyPhoto='" + agencyPhoto + '\'' +
-                ", isAuthentication=" + isAuthentication +
-                ", explain='" + explain + '\'' +
-                ", isDeleted=" + isDeleted +
-                ", updateTime=" + updateTime +
-                ", expireTime=" + expireTime +
-                ", applyTime=" + applyTime +
-                ", checkTime=" + checkTime +
-                '}';
+//    public EvaluationAgency(EvaluationAgencyPO evaluationAgencyPO) {
+//        BeanUtils.copyProperties(evaluationAgencyPO, this,"evaluationAgencyResourceList", "evaluationAgencyAbilityList");
+//    }
+
+    public EvaluationAgency(EvaluationAgencyPO evaluationAgencyPO){
+        id = evaluationAgencyPO.getId();
+        agencyPhoto = evaluationAgencyPO.getAgencyPhoto();
+        evaluationAgencyName = evaluationAgencyPO.getEvaluationAgencyName();
+        userId = evaluationAgencyPO.getUserId();
+        address = evaluationAgencyPO.getAddress();
+        updateTime=evaluationAgencyPO.getUpdateTime();
+        expireTime=evaluationAgencyPO.getExpireTime();
+        checkTime=evaluationAgencyPO.getCheckTime();
+        applyTime=evaluationAgencyPO.getApplyTime();
     }
 
-    public EvaluationAgency() {
-
-    }
-
-
-    public EvaluationAgency(EvaluationAgencyPO evaluationAgencyPO) {
-        BeanUtils.copyProperties(evaluationAgencyPO, this);
-
-
-    }
-
-
-    public EvaluationAgency EvaluationAgency(EvaluationAgencyPO evaluationAgencyPO) {
-        BeanUtils.copyProperties(evaluationAgencyPO, this);
-        return this;
-    }
-
-
     public EvaluationAgency applyAuthentication(Long userId) {
         this.setUserId(userId);
         this.setIsAuthentication(AuthenticationStatus.isAuthenIng);

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

@@ -3,6 +3,7 @@ package com.mooctest.crowd.domain.repository;
 import com.mooctest.crowd.domain.dao.*;
 import com.mooctest.crowd.domain.domainobject.*;
 import com.mooctest.crowd.domain.exception.ApplicationTypeNoExistException;
+import com.mooctest.crowd.domain.exception.BadRequestException;
 import com.mooctest.crowd.domain.exception.FieldNoExistException;
 import com.mooctest.crowd.domain.exception.TestTypeNoExistException;
 import com.mooctest.crowd.domain.model.*;
@@ -182,6 +183,15 @@ public class CommonRepo {
         return expertDao.findAll(where, pageable).map(expertPO -> Converter.convert(Expert.class, expertPO));
     }
 
+    public Expert findExpertById(Long id){
+        Optional<ExpertPO> expertPOOptional = expertDao.findById(id);
+        if(!expertPOOptional.isPresent()){
+            throw new BadRequestException("专家信息不存在!");
+        }else{
+            return Converter.convert(Expert.class, expertPOOptional.get());
+        }
+    }
+
     private Specification<ExpertPO> getExpert(String keyword) {
         return new Specification<ExpertPO>() {
             @Override

+ 21 - 0
core/src/main/java/com/mooctest/crowd/domain/repository/CrowdTestProjectRepo.java

@@ -296,6 +296,27 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
         return crowdTestProjectResult;
     }
 
+    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获取报告列表
      *

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

@@ -2,8 +2,10 @@ package com.mooctest.crowd.domain.repository;
 
 import com.mooctest.crowd.domain.domainobject.User;
 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;
 
 /**
@@ -20,6 +22,8 @@ public interface IUserRepo {
 
     List<User> getAllUser() throws RoleNotFoundException;
 
+    ArrayList<UserPO> getAllUserInfo() throws RoleNotFoundException;
+
 //    User getByEvaluationAgencyByUserId(Long userId) throws UserNotExistException, com.mooctest.crowd.domain.exception.RoleNotFoundException;
 
     void removeUser(User user);

+ 7 - 0
core/src/main/java/com/mooctest/crowd/domain/repository/UserRepo.java

@@ -119,6 +119,13 @@ public class UserRepo implements IUserRepo {
         return userListByIds;
     }
 
+    @Override
+    public ArrayList<UserPO> getAllUserInfo() throws RoleNotFoundException {
+        Iterable<UserPO> allUserPO = userDao.findAll();
+        ArrayList<UserPO> userPOArrayList = Lists.newArrayList(allUserPO);
+        return userPOArrayList;
+    }
+
 
     //add
 //    @Override

+ 2 - 0
site/src/main/java/com/mooctest/crowd/site/constants/CommonConstant.java

@@ -14,5 +14,7 @@ public class CommonConstant {
 
     public static final Integer TECHNOLOGY_ROWS_ON_PAGE = 5;
 
+    public static final Integer TEST = 3;
+
     public static final Integer DEFAULT_RECOURSE_ROWS_ON_PAGE = 7;
 }

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

@@ -1,6 +1,5 @@
 package com.mooctest.crowd.site.controller;
 
-import com.alibaba.druid.sql.visitor.functions.Bin;
 import com.mooctest.crowd.domain.exception.BaseException;
 import com.mooctest.crowd.site.annotation.LoginRequired;
 import com.mooctest.crowd.site.annotation.SysAdminRequired;
@@ -12,12 +11,11 @@ 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.AgencyVO;
-import com.mooctest.crowd.site.data.vo.EvolutionAgencyVO;
+import com.mooctest.crowd.site.data.vo.EvaluationAgencyVO;
 import com.mooctest.crowd.site.data.vo.SearchConditionVO;
 import com.mooctest.crowd.site.service.AgencyService;
 import com.mooctest.crowd.site.service.ResidentAgencyService;
 import com.mooctest.crowd.site.util.DataUtils;
-import lombok.extern.java.Log;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -25,8 +23,6 @@ import org.springframework.validation.BindingResult;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.HttpSession;
-import javax.validation.constraints.Pattern;
 import java.util.List;
 
 /**
@@ -145,21 +141,22 @@ public class AgencyController extends BaseSearchController {
     }
 
     @RequestMapping(value = "/agency/list", method = RequestMethod.GET)
-    public List<EvolutionAgencyVO> getAgencyList() {
+    public List<EvaluationAgencyVO> getAgencyList() {
         return agencyService.getAgencyList();
     }
 
 
-    @RequestMapping(value = "/agency/list/more", method = RequestMethod.GET)
+    @RequestMapping(value = "/agency/list/more", method = RequestMethod.POST)
     public ResponseVO getMoreAgencyList(@RequestBody SearchConditionVO searchConditionVO) {
         Pageable pageable = this.getPageable(searchConditionVO);
-        List<EvolutionAgencyVO> list = agencyService.findMoreAgencyVO();
-        Page<EvolutionAgencyVO> page = DataUtils.listToPage(list, pageable);
+        String keyword = searchConditionVO.getKeyword();
+        List<EvaluationAgencyVO> list = agencyService.findMoreAgencyVO(keyword);
+        Page<EvaluationAgencyVO> page = DataUtils.listToPage(list, pageable);
         return new ResponseVO(ServerCode.SUCCESS, page);
     }
 
 
-    @RequestMapping(value = "resident/agency/more", method = RequestMethod.GET)
+    @RequestMapping(value = "resident/agency/more", method = RequestMethod.POST)
     public ResponseVO getMoreResidentList(@RequestBody SearchConditionVO searchConditionVO) {
         Pageable pageable = this.getPageable(searchConditionVO);
         return new ResponseVO(ServerCode.SUCCESS, residentAgencyService.findAll(pageable));
@@ -168,7 +165,7 @@ public class AgencyController extends BaseSearchController {
     @RequestMapping(value = "agency/{agencyId}", method = RequestMethod.GET)
     public ResponseVO getAgencyDetails(@PathVariable("agencyId") long agencyId) {
 
-        EvolutionAgencyVO agencyVO = agencyService.getDetailById(agencyId);
+        EvaluationAgencyVO agencyVO = agencyService.getDetailById(agencyId);
         return new ResponseVO(ServerCode.SUCCESS, agencyVO);
     }
 

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


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

@@ -198,6 +198,10 @@ public class CrowdProjectController {
         return projectService.modifyAllData();
     }
 
+    /**
+     * 获取平台总体数据
+     * @return
+     */
     @RequestMapping(value = "/api/allproject", method = RequestMethod.GET)
     public  List<CrowdTestProject>  getByProject(){
         return projectService.getByProject();

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

@@ -23,7 +23,7 @@ import javax.servlet.http.HttpSession;
 @Slf4j
 @RestController
 @RequestMapping("/api")
-public class CrowdTaskController {
+public class CrowdTaskController{
 
     @Autowired
     private CrowdTaskService taskService;

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

@@ -11,7 +11,6 @@ import org.codehaus.jettison.json.JSONException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-
 @RestController
 @RequestMapping("/api/personal")
 public class PersonalDataController {

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

@@ -12,6 +12,7 @@ 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;
@@ -26,7 +27,6 @@ import javax.servlet.http.HttpSession;
 import java.io.UnsupportedEncodingException;
 import java.lang.reflect.InvocationTargetException;
 import java.util.List;
-import java.util.Map;
 
 /**
  * @author: Diors.Po
@@ -79,6 +79,11 @@ public class UserController extends BaseController {
         return userService.loginByMobileAndPwd(loginCommand);
     }
 
+    @RequestMapping(value = "/user/detail/{userId}", method = RequestMethod.GET)
+    public ResponseVO<UserVO> getUserDetail(@PathVariable Long userId) {
+        return new ResponseVO<>(ServerCode.SUCCESS, userService.getUserDetail(userId));
+    }
+
     /**
      * 修改密码
      */
@@ -308,7 +313,6 @@ public class UserController extends BaseController {
      */
     @RequestMapping(value = "index/address",method = RequestMethod.GET)
     public Area getAddressByIp(HttpServletRequest request) throws UnsupportedEncodingException {
-
          String ip=DataUtils.getClientIp(request);
          LOG.info("ip地址是========"+ip);
           Area   area= AddressUtils.getProvinceName(ip);

+ 16 - 0
site/src/main/java/com/mooctest/crowd/site/data/dto/DataDTO.java

@@ -0,0 +1,16 @@
+package com.mooctest.crowd.site.data.dto;
+
+import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author: xuexb
+ * @Date: 2019.7.15 20:15
+ */
+@Data
+public class DataDTO {
+    private List<CrowdTestProject> projectList;
+    private List<UserDataDTO> userDataList;
+}

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

@@ -1,6 +1,6 @@
 package com.mooctest.crowd.site.data.dto;
 
-import com.mooctest.crowd.site.data.vo.EvolutionAgencyVO;
+import com.mooctest.crowd.site.data.vo.EvaluationAgencyVO;
 import com.mooctest.crowd.site.data.vo.CrowdTaskVO;
 import com.mooctest.crowd.site.data.vo.PieChartDataVO;
 import com.mooctest.crowd.site.data.vo.UserVO;
@@ -16,7 +16,7 @@ import java.util.List;
 public class IndexDTO{
     private List<String> imgList;
     private List<CrowdTaskVO> hotTaskList;
-    private List<EvolutionAgencyVO> agencyRank;
+    private List<EvaluationAgencyVO> agencyRank;
     private List<UserVO> userRank;
     private List<PieChartDataVO> systemStatistics;
 }

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

@@ -15,11 +15,11 @@ public class IndexInfoDTO implements Serializable {
     private List<TestTypeVO> testTypeList;
     private List<ApplicationTypeVO> applicationTypeList;
     private List<ApplicationTypeVO> applicationTypeRank;
-    private List<EvolutionAgencyVO> agencyRank;
+    private List<EvaluationAgencyVO> agencyRank;
     private List<UserVO> userRank;
     private List<FieldVO> fieldList;
     private List<CompetitionVO> competitionList;
     private List<ResourceVO> resourceList;
-    private List<EvolutionAgencyVO> residentAgencyList;
+    private List<EvaluationAgencyVO> residentAgencyList;
     private List<PartnerVO> partnerList;
 }

+ 20 - 0
site/src/main/java/com/mooctest/crowd/site/data/dto/UserDataDTO.java

@@ -0,0 +1,20 @@
+package com.mooctest.crowd.site.data.dto;
+
+import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
+import com.mooctest.crowd.site.data.vo.CrowdProjectDataVO;
+import com.mooctest.crowd.site.data.vo.UserVO;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author: xuexb
+ * @Date: 2019.7.15 20:15
+ */
+@Data
+public class UserDataDTO {
+    private UserVO userVO;
+    private List<CrowdTestTask> unfinishedTasks;
+    private List<CrowdTestTask> finishedTasks;
+    private List<CrowdProjectDataVO> myProjects;
+}

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

@@ -27,6 +27,7 @@ public class AgencyVO {
     private String agencyPhoto;
     private Integer isAuthentication;
     private String explain;
+    private Long taskCount;
     private int isDeleted;
     private Timestamp updateTime;
     private Timestamp expireTime;

+ 26 - 0
site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdProjectDataVO.java

@@ -0,0 +1,26 @@
+package com.mooctest.crowd.site.data.vo;
+
+
+import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @Author: xuexb
+ * @Date: 2019.7.15 20:41
+ */
+@Data
+@NoArgsConstructor
+public class CrowdProjectDataVO implements Serializable {
+
+    private String code;
+    private String name;
+
+    public CrowdProjectDataVO(CrowdTestProject crowdTestProject){
+        this.code = crowdTestProject.getCode();
+        this.name = crowdTestProject.getName();
+    }
+
+}

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

@@ -21,6 +21,9 @@ public class CrowdReportVO {
     private String file;
     private String conclusion;
     private String target;
+    private  boolean Updated;//是否可以修改
+
+
 
     public CrowdReportVO(CrowdTestReport report){
         BeanUtils.copyProperties(report, this);

+ 22 - 0
site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTaskDataVO.java

@@ -0,0 +1,22 @@
+package com.mooctest.crowd.site.data.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author: xuexb
+ * @Date: 2019.7.15 20:36
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class CrowdTaskDataVO implements Serializable{
+    private String code;
+    private String title;
+    private List<TaskToUserVO> taskToUserVOS = new ArrayList<>();
+}

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

@@ -48,8 +48,6 @@ public class CrowdTestProjectVO   {
     private String time_interval;
 
 
-
-
     public CrowdTestProjectVO(CrowdTestProject crowdTestProject) {
         id = crowdTestProject.getId();
         code = crowdTestProject.getCode();

+ 2 - 4
site/src/main/java/com/mooctest/crowd/site/data/vo/EvolutionAgencyVO.java → site/src/main/java/com/mooctest/crowd/site/data/vo/EvaluationAgencyVO.java

@@ -15,7 +15,7 @@ import java.sql.Timestamp;
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
-public class EvolutionAgencyVO implements Serializable {
+public class EvaluationAgencyVO implements Serializable {
 
     private Long id;
     private Long userId;
@@ -29,9 +29,7 @@ public class EvolutionAgencyVO implements Serializable {
     private Timestamp checkTime;
     private Timestamp applyTime;
 
-
-
-    public EvolutionAgencyVO(EvaluationAgency evaluationAgency){
+    public EvaluationAgencyVO(EvaluationAgency evaluationAgency){
         id = evaluationAgency.getId();
         agencyPhoto = evaluationAgency.getAgencyPhoto();
         evaluationAgencyName = evaluationAgency.getEvaluationAgencyName();

+ 6 - 10
site/src/main/java/com/mooctest/crowd/site/data/vo/ResidentAgencyVO.java

@@ -1,33 +1,29 @@
 package com.mooctest.crowd.site.data.vo;
 
 import com.mooctest.crowd.domain.domainobject.ResidentAgency;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 /**
  * @author guochao
  * @date 2019/7/6 17:54
  */
 @Data
+@NoArgsConstructor
+@AllArgsConstructor
 public class ResidentAgencyVO {
     private Long id;
     private Long agencyId;
     private Long userId;
-    private long   taskCount;
+    private long taskCount;
     private String address;
+    private String agencyPhoto;
     private  String name;//机构名称
 
-
-
-
     public ResidentAgencyVO(ResidentAgency residentAgency){
         id = residentAgency.getId();
         agencyId = residentAgency.getAgencyId();
         userId = residentAgency.getUserId();
-
-    }
-
-
-    public  ResidentAgencyVO(){
-
     }
 }

+ 7 - 14
site/src/main/java/com/mooctest/crowd/site/mediator/ViewMediator.java

@@ -5,22 +5,14 @@ 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.domain.model.EvaluationAgencyPO;
-import com.mooctest.crowd.domain.model.PersonalAuthenticationPO;
-import com.mooctest.crowd.site.data.vo.*;
-import org.codehaus.jettison.json.JSONException;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
 import com.mooctest.crowd.site.command.LoginCommand;
 import com.mooctest.crowd.site.command.RegisterCommand;
 import com.mooctest.crowd.site.data.dto.*;
-import com.mooctest.crowd.site.data.vo.BaseAuthVO;
-import com.mooctest.crowd.site.data.vo.EvolutionAgencyVO;
-import com.mooctest.crowd.site.data.vo.RegionalManagerVO;
-
+import com.mooctest.crowd.site.data.vo.*;
+import org.codehaus.jettison.json.JSONException;
+import org.springframework.data.domain.Pageable;
 
 import java.util.List;
-import java.util.Optional;
 
 /**
  * @Author: xuexb
@@ -48,6 +40,8 @@ public interface ViewMediator {
 
     MyCrowdDTO renderMyCrowd(Long userId);
 
+    UserDataDTO renderMyCrowdData(Long userId);
+
     TaskSquareDTO renderTaskSquare();
 
     ProjectDetailsDTO renderProjectDetails(CrowdTestProject project, User user);
@@ -62,7 +56,7 @@ public interface ViewMediator {
 
     List<RegionalManagerVO> renderRegionManagerList();
 
-    List<EvolutionAgencyVO> renderAgencyList();
+    List<EvaluationAgencyVO> renderAgencyList();
 
     List<BaseAuthVO> renderAuthingList();
 
@@ -74,8 +68,6 @@ public interface ViewMediator {
     //任务模糊查询
     List<CrowdTaskVO>  findTaskByNameLike(String name);
 
-
-
     List<CrowdTestProjectVO>   crowdTestProjects();
 
     List<CrowdTaskVO>    crowdTaskVos();
@@ -105,4 +97,5 @@ public interface ViewMediator {
     ResourceVO getResourceDetailed(String code);
 
     List<ResourceVO>  getSearchResource(String name);
+
 }

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

@@ -6,6 +6,7 @@ import com.mooctest.crowd.site.command.CrowdTestProjectCommand;
 import com.mooctest.crowd.site.data.dto.ProjectDetailsDTO;
 import com.mooctest.crowd.site.data.vo.CrowdProjectVO;
 import com.mooctest.crowd.site.mediator.OperationMediator;
+import com.mooctest.crowd.site.service.ThemeSchedulerService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -22,6 +23,9 @@ public class OperationMediatorImpl implements OperationMediator {
     @Autowired
     private CrowdTestProjectRepo projectRepo;
 
+    @Autowired
+    private ThemeSchedulerService themeSchedulerService;
+
     @Override
     public ProjectDetailsDTO createCrowdProject(CrowdTestProjectCommand command) {
         CrowdTestProject project = command.toCrowdProject();
@@ -33,6 +37,7 @@ public class OperationMediatorImpl implements OperationMediator {
 
     @Override
     public CrowdTestProject updateProject(CrowdTestProject project, CrowdTestProjectCommand crowdTestProjectCommand) {
+        themeSchedulerService.cancelThemeScheduler(project);
         CrowdTestProject updateProject = crowdTestProjectCommand.toCrowdProject();
         updateProject.setId(project.getId());
         updateProject.setCode(project.getCode());
@@ -40,6 +45,7 @@ public class OperationMediatorImpl implements OperationMediator {
         if(updateProject.getCreateTime() == null){
             updateProject.setCreateTime(new Timestamp(System.currentTimeMillis()));
         }
+        themeSchedulerService.createNewThemeScheduler(updateProject);
         return updateProject;
     }
 }

+ 97 - 40
site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java

@@ -100,7 +100,7 @@ public class WebMediatorImpl implements ViewMediator {
     private ApplicationTypeDao applicationTypeDao;
 
     @Autowired
-    private  ResourceDao resourceDao;
+    private ResourceDao resourceDao;
 
     @Autowired
     private ResourceTypeDao resourceTypeDao;
@@ -113,26 +113,24 @@ public class WebMediatorImpl implements ViewMediator {
 
     @Override
     public List<UserVO> renderMoreUser(Pageable pageable) {
-        List<UserVO> userVOS=new ArrayList<>();
-        List<RankCountInfo> rankCountInfos=taskToUserDao.findTotalCountOfUser();
-        long []ids=new long[rankCountInfos.size()];
-        for(int i=0;i<rankCountInfos.size();i++){
-            if(userDao.findById(rankCountInfos.get(i).getEntityId()).isPresent()){
-                ids[i]=rankCountInfos.get(i).getEntityId();
-                Optional<UserPO> userPO=userDao.findById(ids[i]);
-                User  user=new User(userPO.get());
-                UserVO userVO=new UserVO(user);
-                userVO.setTaskCount(rankCountInfos.get(i).getCount());
-                userVOS.add(userVO);
+        //获取众测人员排名
+        String agencyName = agencyDao.findById(Long.parseLong(agencyId)).get().getEvaluationAgencyName();
+        List<UserVO> userVOS = taskToUserDao.findTotalCountOfUser().stream().map(rankInfo -> {
+            EvaluationAgencyPO agency = agencyDao.findByUserId(rankInfo.getEntityId());
+            if (agency != null && agency.getEvaluationAgencyName().equals(agencyName)) {
+                User user = userRepo.getByID(agency.getUserId());
+                UserVO userVO = new UserVO(user);
+                userVO.setTaskCount(rankInfo.getCount());
+                return userVO;
             }
-
-        }
+            return null;
+        }).filter(Objects::nonNull).collect(Collectors.toList());
         return userVOS;
     }
 
     @Override
     public List<CrowdTaskVO> findMoreHotTasks() {
-        List<CrowdTestTaskPO> list=taskDao.findMoreHotTasks();//已经根据创建时间排序好了。
+        List<CrowdTestTaskPO> list = taskDao.findMoreHotTasks();//已经根据创建时间排序好了。
         List<CrowdTaskVO> hotMoreTestprojects = taskDao.findMoreHotTasks().stream().map(crowdTestTaskPO -> {
             CrowdTestTask task = new CrowdTestTask();
             BeanUtils.copyProperties(crowdTestTaskPO, task);
@@ -143,8 +141,8 @@ public class WebMediatorImpl implements ViewMediator {
 
     @Override
     public List<CrowdTestProjectVO> findMoreHotProjects() {
-       List<CrowdTestProjectPO> list=projectDao.findMoreHotProjects();//已经根据创建时间排序好了。
-       //根据 参加人数倒序排序
+        List<CrowdTestProjectPO> list = projectDao.findMoreHotProjects();//已经根据创建时间排序好了。
+        //根据 参加人数倒序排序
         List<CrowdTestProjectVO> hotMoreTestprojects = projectDao.findMoreHotProjects().stream().map(crowdTestProjectPO -> {
             CrowdTestProject project = new CrowdTestProject();
             BeanUtils.copyProperties(crowdTestProjectPO, project);
@@ -214,10 +212,10 @@ public class WebMediatorImpl implements ViewMediator {
 
         //获取机构排名
         String agencyName = agencyDao.findById(Long.parseLong(agencyId)).get().getEvaluationAgencyName();
-        List<EvolutionAgencyVO> agencyRank = taskToUserDao.findTotalCountOfUser().stream().map(rankInfo -> {
+        List<EvaluationAgencyVO> agencyRank = taskToUserDao.findTotalCountOfUser().stream().map(rankInfo -> {
             EvaluationAgencyPO agency = agencyDao.findByUserId(rankInfo.getEntityId());
             if (agency != null && !agency.getEvaluationAgencyName().equals(agencyName)) {
-                EvolutionAgencyVO agencyVO = new EvolutionAgencyVO();
+                EvaluationAgencyVO agencyVO = new EvaluationAgencyVO();
                 agencyVO.setEvaluationAgencyName(agency.getEvaluationAgencyName());
                 agencyVO.setAgencyPhoto(agency.getAgencyPhoto());
                 agencyVO.setTaskCount(rankInfo.getCount());
@@ -227,7 +225,7 @@ public class WebMediatorImpl implements ViewMediator {
             }
             return null;
         }).filter(Objects::nonNull).collect(Collectors.toList());
-        List<EvolutionAgencyVO> agencyRanks = new ArrayList<>();
+        List<EvaluationAgencyVO> agencyRanks = new ArrayList<>();
         if (agencyRank.size() > top) {
             for (int i = 0; i < top; i++) {
                 agencyRanks.add(agencyRank.get(i));
@@ -315,10 +313,10 @@ public class WebMediatorImpl implements ViewMediator {
 
         // 获取合作机构
         List<ResidentAgency> allResidentAgency = commonRepo.getAllResidentAgency();
-        List<EvolutionAgencyVO> agencyVOS = allResidentAgency.stream().map(residentAgency -> {
+        List<EvaluationAgencyVO> agencyVOS = allResidentAgency.stream().map(residentAgency -> {
             EvaluationAgency agency = evaluationAgencyRepo.findAgencyById(residentAgency.getAgencyId());
-            EvolutionAgencyVO evolutionAgencyVO = new EvolutionAgencyVO(agency);
-            return evolutionAgencyVO;
+            EvaluationAgencyVO evalutionAgencyVO = new EvaluationAgencyVO(agency);
+            return evalutionAgencyVO;
         }).collect(Collectors.toList());
 
         indexInfoDTO.setApplicationTypeRank(applicationTypeRanks);
@@ -336,7 +334,6 @@ public class WebMediatorImpl implements ViewMediator {
 
     @Override
     public IndexDTO renderIndex() {
-
         Pageable pageable = PageRequest.of(0, 10);
         //获取用户排名
         List<UserVO> userRanks = projectDao.findTotalPriceOfUser(pageable).stream().map(rankInfo -> {
@@ -351,10 +348,10 @@ public class WebMediatorImpl implements ViewMediator {
             return null;
         }).filter(Objects::nonNull).collect(Collectors.toList());
         //获取机构排名
-        List<EvolutionAgencyVO> agencyRanks = taskToUserDao.findTotalPriceOfAgency(pageable).stream().map(rankInfo -> {
+        List<EvaluationAgencyVO> agencyRanks = taskToUserDao.findTotalPriceOfAgency(pageable).stream().map(rankInfo -> {
             EvaluationAgencyPO agency = agencyDao.findByUserId(rankInfo.getEntityId());
             if (agency != null) {
-                EvolutionAgencyVO agencyVO = new EvolutionAgencyVO();
+                EvaluationAgencyVO agencyVO = new EvaluationAgencyVO();
                 agencyVO.setEvaluationAgencyName(agency.getEvaluationAgencyName());
                 agencyVO.setAgencyPhoto(agency.getAgencyPhoto());
                 agencyVO.setAllTaskPrice(rankInfo.getTotalPrice());
@@ -495,6 +492,57 @@ public class WebMediatorImpl implements ViewMediator {
         return myCrowdDTO;
     }
 
+    @Override
+    public UserDataDTO renderMyCrowdData(Long userId) {
+        UserDataDTO userDataDTO = new UserDataDTO();
+        User user = userRepo.getByID(userId);
+        //我的众测 - 项目相关信息
+        //获取我创建的项目列表
+        List<CrowdProjectDataVO> myProjects = projectDao.findByUserIdAndIsDeleted(userId, DeletedStatus.isNotDeleted).stream().map(CrowdTestProject::new).collect(Collectors.toList())
+                .stream().map(CrowdProjectDataVO::new).collect(Collectors.toList());
+        UserVO userVO = new UserVO(user);
+        userDataDTO.setMyProjects(myProjects);
+        userDataDTO.setUserVO(userVO);
+        if (user.getRoleList().stream().noneMatch(role -> role.getName().equals("evaluationAgency")))
+            return userDataDTO;
+        List<CrowdTestTask> allTaskOfAgency = null;
+        List<CrowdTestTask> unfinishedTasks = null;
+        List<CrowdTestTask> finishedTasks = null;
+        if (user.getRoleList().stream().anyMatch(role -> role.getName().equals("evaluationAgency"))) {
+            List<TaskToUserPO> taskToUserPOS = taskToUserDao.findByUserId(user.getId());
+            if (taskToUserPOS != null && taskToUserPOS.size() > 0) {
+                allTaskOfAgency = taskToUserPOS.stream().sorted(Comparator.comparing(TaskToUserPO::getAcceptTime))
+                        .map(taskToUserPO -> {
+                            CrowdTestTaskPO crowdTestTaskPO = taskDao.findByCodeAndIsDeleted(taskToUserPO.getTaskCode(), DeletedStatus.isNotDeleted);
+                            if (crowdTestTaskPO != null) {
+                                CrowdTestTask task = new CrowdTestTask();
+                                BeanUtils.copyProperties(crowdTestTaskPO, task);
+
+                                // 测试类型的转换
+                                Optional<TestTypePO> testTypePO = testTypeDao.findByCode(task.getType());
+                                if (!testTypePO.isPresent()) {
+                                    throw new HttpBadRequestException("请选择测试类型");
+                                }
+                                task.setType(testTypePO.get().getName());
+                                CrowdTestTask taskDetail = projectRepo.getTaskDetail(task, user.getId());
+                                return taskDetail;
+                            }
+                            return null;
+                        }).collect(Collectors.toList());
+                unfinishedTasks = allTaskOfAgency.stream()
+                        .filter(crowdTestTask -> crowdTestTask.getStatus() >= CrowdTestTaskStatus.HAS_RELEASED && crowdTestTask.getStatus() < CrowdTestTaskStatus.HAS_FINISHED)
+                        .collect(Collectors.toList());
+
+                finishedTasks = allTaskOfAgency.stream()
+                        .filter(crowdTestTask -> crowdTestTask.getStatus() == CrowdTestTaskStatus.HAS_FINISHED)
+                        .collect(Collectors.toList());
+            }
+        }
+        userDataDTO.setFinishedTasks(finishedTasks);
+        userDataDTO.setUnfinishedTasks(unfinishedTasks);
+        return userDataDTO;
+    }
+
     private CrowdProjectVO changeApplicationType(CrowdProjectVO projectVO) {
         // 应用类型值的转换
         Optional<ApplicationTypePO> applicationTypePO = applicationTypeDao.findByCode(projectVO.getPlatform());
@@ -580,9 +628,9 @@ public class WebMediatorImpl implements ViewMediator {
 
         // 领域类型值的转换
         Optional<FieldPO> fieldPO = fieldDao.findByCode(projectVO.getField());
-        if(fieldPO.isPresent()){
+        if (fieldPO.isPresent()) {
             projectVO.setField(fieldPO.get().getName());
-        }else{
+        } else {
             throw new HttpBadRequestException("请选择领域类型");
         }
 
@@ -642,15 +690,24 @@ public class WebMediatorImpl implements ViewMediator {
     }
 
     @Override
-    public ReportDetailsDTO renderProjectReportDetails(String projectCode, String reportCode, Long userId) {
+    public ReportDetailsDTO renderProjectReportDetails(String projectCode, String reportCode, Long userId){
         CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
         CrowdTestReport report = project.getCrowdTestReportForProject();
         if (report == null)
             throw new CrowdTestReportNotExistException();
         ReportDetailsDTO reportDetailsDTO = new ReportDetailsDTO();
+        /*
+         如果该项目是已经完成的那么报告是不能修改的这边我在Vo上面加了一个属性Updated
+         */
+        if (project.getStatus() == CrowdTestProjectStatus.HAS_FINISHED){
+            report.setUpdated(false);
+        }
         reportDetailsDTO.setCrowdReportVO(new CrowdReportVO(report));
-        if (project.getStatus() < CrowdTestProjectStatus.HAS_FINISHED && project.getRegionalManagerId().equals(userId))
+
+        if (project.getStatus() < CrowdTestProjectStatus.HAS_FINISHED && project.getRegionalManagerId().equals(userId)) {
             reportDetailsDTO.setOperational(true);
+
+        }
         return reportDetailsDTO;
     }
 
@@ -775,11 +832,11 @@ public class WebMediatorImpl implements ViewMediator {
     }
 
     @Override
-    public List<EvolutionAgencyVO> renderAgencyList() {
-        List<EvolutionAgencyVO> agencyList = new ArrayList<>();
+    public List<EvaluationAgencyVO> renderAgencyList() {
+        List<EvaluationAgencyVO> agencyList = new ArrayList<>();
         EvaluationAgency agencyTemplate = evaluationAgencyRepo.findAgencyById(Long.parseLong(agencyId));
         agencyDao.findAll().forEach(evaluationAgencyPO -> {
-            EvolutionAgencyVO agencyVO = new EvolutionAgencyVO();
+            EvaluationAgencyVO agencyVO = new EvaluationAgencyVO();
             agencyVO.setId(evaluationAgencyPO.getUserId());
             agencyVO.setEvaluationAgencyName(evaluationAgencyPO.getEvaluationAgencyName());
             agencyList.add(agencyVO);
@@ -910,7 +967,7 @@ public class WebMediatorImpl implements ViewMediator {
     @Override
     public UserDTO updateInformation(long userId, UserVO userVO) {
         Optional<UserPO> userPO = userDao.findById(userId);
-        if(userVO.getUnit()==null||userVO.getUnit().length()<=0){
+        if (userVO.getUnit() == null || userVO.getUnit().length() <= 0) {
             throw new HttpBadRequestException("请输入企业简称");
         }
         userPO.get().setUnit(userVO.getUnit());
@@ -1004,7 +1061,7 @@ public class WebMediatorImpl implements ViewMediator {
         String result = restTemplate.getForObject(url, String.class);
         JSONObject json = new JSONObject(result);
         String validated = String.valueOf(json.get("validated"));
-        if("false".equals(validated)){
+        if ("false".equals(validated)) {
             throw new HttpBadRequestException("请输入正确的卡号");
         }
         String bank = String.valueOf(json.get("bank"));
@@ -1054,13 +1111,13 @@ public class WebMediatorImpl implements ViewMediator {
             resourceVO.setRemarks(resourcePO.getRemarks());
             resourceVOList.add(resourceVO);
         });
-        List<ResourceVO> results=resourceVOList.stream().sorted(Comparator.comparing(ResourceVO::getStartTime).reversed()).collect(Collectors.toList());
+        List<ResourceVO> results = resourceVOList.stream().sorted(Comparator.comparing(ResourceVO::getStartTime).reversed()).collect(Collectors.toList());
         return results;
     }
 
     @Override
     public ResourceVO getResourceDetailed(String code) {
-        Optional<ResourcePO> resourcePO=resourceDao.findByCode(code);
+        Optional<ResourcePO> resourcePO = resourceDao.findByCode(code);
         ResourceVO resourceVO = new ResourceVO();
         resourceVO.setCode(resourcePO.get().getCode());
         resourceVO.setName(resourcePO.get().getName());
@@ -1102,7 +1159,7 @@ public class WebMediatorImpl implements ViewMediator {
             resourceVO.setRemarks(resourcePO.getRemarks());
             resourceVOList.add(resourceVO);
         });
-        List<ResourceVO> results=resourceVOList.stream().sorted(Comparator.comparing(ResourceVO::getStartTime).reversed()).collect(Collectors.toList());
+        List<ResourceVO> results = resourceVOList.stream().sorted(Comparator.comparing(ResourceVO::getStartTime).reversed()).collect(Collectors.toList());
         return results;
     }
 
@@ -1110,7 +1167,7 @@ public class WebMediatorImpl implements ViewMediator {
         ProjectOperationControl operationControl = new ProjectOperationControl();
         if (user == null)
             return operationControl;
-        if(project.getStatus() == CrowdTestProjectStatus.HAS_TIME_OUT){
+        if (project.getStatus() == CrowdTestProjectStatus.HAS_TIME_OUT) {
             return operationControl;
         }
 
@@ -1168,7 +1225,7 @@ public class WebMediatorImpl implements ViewMediator {
         TaskOperationControl taskOperationControl = new TaskOperationControl();
         if (user == null)
             return taskOperationControl;
-        if(task.getStatus() == CrowdTestTaskStatus.HAS_TIME_OUT){
+        if (task.getStatus() == CrowdTestTaskStatus.HAS_TIME_OUT) {
             return taskOperationControl;
         }
 

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

@@ -5,7 +5,7 @@ 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.vo.AgencyVO;
-import com.mooctest.crowd.site.data.vo.EvolutionAgencyVO;
+import com.mooctest.crowd.site.data.vo.EvaluationAgencyVO;
 
 import java.util.List;
 
@@ -16,9 +16,9 @@ import java.util.List;
  */
 public interface AgencyService {
 
-    EvolutionAgencyVO   getDetailById(long agencyId);
+    EvaluationAgencyVO   getDetailById(long agencyId);
 
-    List<EvolutionAgencyVO> findMoreAgencyVO();
+    List<EvaluationAgencyVO> findMoreAgencyVO(String keyword);
 
     UserDTO applyAgency(Long userId, ApplyAgencyAuthCommand command);
 
@@ -30,7 +30,7 @@ public interface AgencyService {
 
     AgencyVO upadteResourceAndAbility(Long userId, AgencyResourceAbilityUpdateCommand command);
 
-    List<EvolutionAgencyVO> getAgencyList();
+    List<EvaluationAgencyVO> getAgencyList();
 
     AgencyVO passAuth(Long userId);
 

+ 6 - 4
site/src/main/java/com/mooctest/crowd/site/service/CommonService.java

@@ -1,9 +1,6 @@
 package com.mooctest.crowd.site.service;
 
-import com.mooctest.crowd.site.data.dto.IndexDTO;
-import com.mooctest.crowd.site.data.dto.IndexInfoDTO;
-import com.mooctest.crowd.site.data.dto.IndexPageDTO;
-import com.mooctest.crowd.site.data.dto.MyCrowdDTO;
+import com.mooctest.crowd.site.data.dto.*;
 import com.mooctest.crowd.site.data.response.ResponseVO;
 import com.mooctest.crowd.site.data.vo.*;
 import org.springframework.data.domain.Page;
@@ -23,6 +20,8 @@ public interface CommonService {
 
     MyCrowdDTO getPersonCrowd(Long userId);
 
+    UserDataDTO getPersonCrowdData(Long userId);
+
     IndexInfoDTO getIndexInfos(Long userId);
 
     IndexPageDTO getIndexPageInfo(Pageable pageable, Map<String, String> extraCondition, String keyword, int deletedStatus);
@@ -43,4 +42,7 @@ public interface CommonService {
 
     ResponseVO findByNameLike(SearchConditionVO searchConditionVO);
 
+    ExpertVO getExpert(Long id);
+
+    DataDTO getAllData();
 }

+ 8 - 0
site/src/main/java/com/mooctest/crowd/site/service/ThemeSchedulerService.java

@@ -0,0 +1,8 @@
+package com.mooctest.crowd.site.service;
+import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
+
+
+public interface ThemeSchedulerService {
+    boolean createNewThemeScheduler(CrowdTestProject crowdTestProject);
+    boolean cancelThemeScheduler(CrowdTestProject crowdTestProject);
+}

+ 8 - 0
site/src/main/java/com/mooctest/crowd/site/service/ThemeSchedulerTaskService.java

@@ -0,0 +1,8 @@
+package com.mooctest.crowd.site.service;
+
+import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
+
+public interface ThemeSchedulerTaskService {
+    boolean createNewThemeScheduler(CrowdTestTask crowdTestProject);
+    boolean cancelThemeScheduler(CrowdTestTask crowdTestProject);
+}

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

@@ -0,0 +1,7 @@
+package com.mooctest.crowd.site.service;
+import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
+
+
+public interface ThemeStatusService {
+    Integer updateStatus(CrowdTestProject crowdTestProject);
+}

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

@@ -0,0 +1,7 @@
+package com.mooctest.crowd.site.service;
+import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
+
+
+public interface ThemeStatusTaskService {
+    Integer updateStatus(CrowdTestTask crowdTestProject);
+}

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


+ 47 - 31
site/src/main/java/com/mooctest/crowd/site/service/impl/AgencyServiceImpl.java

@@ -6,28 +6,27 @@ import com.mooctest.crowd.domain.dao.UserDao;
 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.HttpBadRequestException;
 import com.mooctest.crowd.domain.exception.UserNotExistException;
-
 import com.mooctest.crowd.domain.model.EvaluationAgencyPO;
 import com.mooctest.crowd.domain.model.RankCountInfo;
-import com.mooctest.crowd.domain.model.RankInfo;
 import com.mooctest.crowd.domain.model.UserPO;
 import com.mooctest.crowd.domain.repository.EvaluationAgencyRepo;
 import com.mooctest.crowd.domain.repository.UserRepo;
 import com.mooctest.crowd.site.anticorruption.UserAntiCorruption;
-import com.mooctest.crowd.site.command.*;
+import com.mooctest.crowd.site.command.AgencyResourceAbilityUpdateCommand;
+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.vo.AgencyVO;
-import com.mooctest.crowd.site.data.vo.EvolutionAgencyVO;
+import com.mooctest.crowd.site.data.vo.EvaluationAgencyVO;
 import com.mooctest.crowd.site.data.vo.UserVO;
 import com.mooctest.crowd.site.mediator.ViewMediator;
 import com.mooctest.crowd.site.service.AgencyService;
 import lombok.extern.slf4j.Slf4j;
-
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Pageable;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -63,47 +62,54 @@ public class AgencyServiceImpl implements AgencyService {
     @Autowired
     private EvaluationAgencyDao agencyDao;
 
+    @Value("${agency}")
+    private String agencyId;
+
     @Override
-    public EvolutionAgencyVO getDetailById(long agencyId) {
+    public EvaluationAgencyVO getDetailById(long agencyId) {
         /*
         先根据机构id查询出机构信息,再从task-to-user表里面找到这个机构的接的任务的数量。
          */
-        EvaluationAgencyPO agencyPO = agencyDao.findByUserId(agencyId);
-        log.info("机构popopopo===========" + agencyPO);
-        EvolutionAgencyVO agencyVO = new EvolutionAgencyVO();
+        Optional<EvaluationAgencyPO> agencyPO = agencyDao.findById(agencyId);
+        if(!agencyPO.isPresent()){
+            throw new HttpBadRequestException("机构不存在!");
+        }
+        EvaluationAgency evaluationAgency = new EvaluationAgency(agencyPO.get());
+        EvaluationAgencyVO agencyVO = new EvaluationAgencyVO(evaluationAgency);
         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] == agencyId) {
+            if (ids[i] == agencyVO.getUserId()) {
                 agencyVO.setTaskCount(rankCountInfoList.get(i).getCount());
             }
         }
-        BeanUtils.copyProperties(agencyPO, agencyVO);
-
         return agencyVO;
     }
 
     @Override
-    public List<EvolutionAgencyVO> findMoreAgencyVO() {
-        List<EvolutionAgencyVO> list = new ArrayList<EvolutionAgencyVO>();//机构列表
+    public List<EvaluationAgencyVO> findMoreAgencyVO(String keyword) {
+        List<EvaluationAgencyVO> list = new ArrayList<EvaluationAgencyVO>();//机构列表
         List<RankCountInfo> rankInfos = taskToUserDao.findTotalCountOfUser();//用户接包信息
-        long[] ids = new long[rankInfos.size()];//用户id数组ru
+        String agencyName = agencyDao.findById(Long.parseLong(agencyId)).get().getEvaluationAgencyName();
         for (int i = 0; i < rankInfos.size(); i++) {
-            ids[i] = rankInfos.get(i).getEntityId();
-            Optional<UserPO> user = userDao.findById(ids[i]);
-            EvaluationAgencyPO evaluationAgencyPO = agencyDao.findByUserId(ids[i]);
-            ids[i] = rankInfos.get(i).getEntityId();
-            //
-            if (evaluationAgencyPO != null) {
+            Optional<UserPO> user = userDao.findById(rankInfos.get(i).getEntityId());
+            EvaluationAgencyPO evaluationAgencyPO = agencyDao.findByUserId(rankInfos.get(i).getEntityId());
+            if (evaluationAgencyPO != null && !evaluationAgencyPO.getEvaluationAgencyName().equals(agencyName)) {
+                if(keyword != null && keyword != ""){
+                    if(!evaluationAgencyPO.getEvaluationAgencyName().contains(keyword)){
+                        continue;
+                    }
+                }
                 EvaluationAgency evaluationAgency = new EvaluationAgency(evaluationAgencyPO);
-                EvolutionAgencyVO evolutionAgencyVO = new EvolutionAgencyVO(evaluationAgency);
-                evolutionAgencyVO.setTaskCount(rankInfos.get(i).getCount());
-                evolutionAgencyVO.setAddress(user.get().getProvince() + user.get().getCity());
-                list.add(evolutionAgencyVO);
+                EvaluationAgencyVO evalutionAgencyVO = new EvaluationAgencyVO(evaluationAgency);
+                evalutionAgencyVO.setTaskCount(rankInfos.get(i).getCount());
+                evalutionAgencyVO.setAddress(evaluationAgency.getAddress());
+//                evalutionAgencyVO.setAddress((user.get().getProvince() + user.get().getCity()).replaceAll("null", ""));
+                list.add(evalutionAgencyVO);
             }
         }
-        return list.stream().sorted(Comparator.comparing(EvolutionAgencyVO::getTaskCount).reversed()).collect(Collectors.toList());
+        return list.stream().sorted(Comparator.comparing(EvaluationAgencyVO::getTaskCount).reversed()).collect(Collectors.toList());
     }
 
 
@@ -175,7 +181,7 @@ public class AgencyServiceImpl implements AgencyService {
     }
 
     @Override
-    public List<EvolutionAgencyVO> getAgencyList() {
+    public List<EvaluationAgencyVO> getAgencyList() {
         return mediator.renderAgencyList();
     }
 
@@ -204,7 +210,17 @@ public class AgencyServiceImpl implements AgencyService {
         EvaluationAgency agency = user.getEvaluationAgency();
         if (agency == null)
             throw new EvaluationAgencyNotExistException("当前用户未申请机构认证");
-        return new AgencyVO(user.getEvaluationAgency());
+        AgencyVO agencyVO = new AgencyVO(user.getEvaluationAgency());
+
+        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());
+            }
+        }
+        return agencyVO;
     }
 
 

+ 29 - 6
site/src/main/java/com/mooctest/crowd/site/service/impl/CommonServiceImpl.java

@@ -1,12 +1,10 @@
 package com.mooctest.crowd.site.service.impl;
 
+import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
 import com.mooctest.crowd.domain.repository.*;
 import com.mooctest.crowd.site.constants.CommonConstant;
 import com.mooctest.crowd.site.data.ColumnFilter;
-import com.mooctest.crowd.site.data.dto.IndexDTO;
-import com.mooctest.crowd.site.data.dto.IndexInfoDTO;
-import com.mooctest.crowd.site.data.dto.IndexPageDTO;
-import com.mooctest.crowd.site.data.dto.MyCrowdDTO;
+import com.mooctest.crowd.site.data.dto.*;
 import com.mooctest.crowd.site.data.enums.ColumnFilterType;
 import com.mooctest.crowd.site.data.response.ResponseVO;
 import com.mooctest.crowd.site.data.response.ServerCode;
@@ -23,10 +21,9 @@ import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 public class CommonServiceImpl implements CommonService {
@@ -34,6 +31,9 @@ public class CommonServiceImpl implements CommonService {
     private CrowdTestTaskRepo taskRepo;
 
     @Autowired
+    private UserRepo userRepo;
+
+    @Autowired
     @Qualifier("WebMediator")
     private ViewMediator viewMediator;
 
@@ -69,6 +69,11 @@ public class CommonServiceImpl implements CommonService {
     }
 
     @Override
+    public UserDataDTO getPersonCrowdData(Long userId) {
+        return viewMediator.renderMyCrowdData(userId);
+    }
+
+    @Override
     @Cacheable(value = "userCache",key = "#userId")
     public IndexInfoDTO getIndexInfos(Long userId){
         IndexInfoDTO indexInfoDTO = viewMediator.renderIndexInfos();
@@ -137,6 +142,24 @@ public class CommonServiceImpl implements CommonService {
         return new ResponseVO<>(ServerCode.SUCCESS, resourcePage);
     }
 
+    @Override
+    public ExpertVO getExpert(Long id) {
+        return new ExpertVO(commonRepo.findExpertById(id));
+    }
+
+    @Override
+    public DataDTO getAllData() {
+        DataDTO dataDTO = new DataDTO();
+        List<CrowdTestProject> allCrowdTestProject = projectRepo.getAllCrowdTestProject();
+        dataDTO.setProjectList(allCrowdTestProject);
+        List<UserDataDTO> userDataList = userRepo.getAllUserInfo().stream().map(userPO -> {
+            UserDataDTO personCrowdData = this.getPersonCrowdData(userPO.getId());
+            return personCrowdData;
+        }).collect(Collectors.toList());
+        dataDTO.setUserDataList(userDataList);
+        return dataDTO;
+    }
+
     Pageable getPageable(SearchConditionVO searchConditionVO) {
         int activePage = searchConditionVO.getActivePage() == 0 ? 1 : searchConditionVO.getActivePage();
         Sort sort = new Sort(Sort.Direction.DESC, "id");

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

@@ -21,6 +21,7 @@ import com.mooctest.crowd.site.data.vo.RegionalManagerVO;
 import com.mooctest.crowd.site.mediator.OperationMediator;
 import com.mooctest.crowd.site.mediator.ViewMediator;
 import com.mooctest.crowd.site.service.CrowdProjectService;
+import com.mooctest.crowd.site.service.ThemeSchedulerService;
 import com.mooctest.crowd.site.util.GenerateFlowCodeUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
@@ -71,6 +72,8 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     @Autowired
     private FieldDao fieldDao;
 
+    @Autowired
+    private ThemeSchedulerService themeSchedulerService;
 
     @Override
     public List<CrowdTestProjectVO> findAllMoreHotProjects() {
@@ -126,13 +129,13 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
         log.info("\n" + project.toString() + "\n");
         String projectCode = GenerateFlowCodeUtil.generateFlowCode("PROJ");
         project.setCode(projectCode);
-
         if(project.getCreateTime() == null){
             project.setCreateTime(new Timestamp(System.currentTimeMillis()));
         }
         ProjectDetailsDTO projectDetailsDTO = new ProjectDetailsDTO();
         projectRepo.saveCrowdTestProject(project);
         projectDetailsDTO.setProjectDetails(new CrowdProjectVO(project));
+        themeSchedulerService.createNewThemeScheduler(project);
         return projectDetailsDTO;
     }
 

+ 5 - 0
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTaskServiceImpl.java

@@ -18,6 +18,7 @@ import com.mooctest.crowd.site.data.vo.CrowdTaskVO;
 import com.mooctest.crowd.site.data.vo.CrowdTestProjectVO;
 import com.mooctest.crowd.site.mediator.ViewMediator;
 import com.mooctest.crowd.site.service.CrowdTaskService;
+import com.mooctest.crowd.site.service.ThemeSchedulerTaskService;
 import com.mooctest.crowd.site.util.GenerateFlowCodeUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -57,6 +58,9 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
     @Autowired
     private EvaluationAgencyDao agencyDao;
 
+    @Autowired
+    private ThemeSchedulerTaskService themeSchedulerTaskService;
+
     @Override
     public List<CrowdTaskVO> findMoreHotTasks(){
         List<CrowdTaskVO> list=viewMediator.findMoreHotTasks();//根据创建时间已经倒叙排序好
@@ -91,6 +95,7 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
         CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
         String taskCode = GenerateFlowCodeUtil.generateFlowCode("TASK-"+ ProjectType.getCode(command.getType()));
         task.create(taskCode);
+        themeSchedulerTaskService.createNewThemeScheduler(task);
         project.addTask(task);
         projectRepo.saveCrowdTestProject(project);
         return getTaskDetails(projectCode, taskCode, userId);

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

@@ -53,6 +53,7 @@ public class ResidentServiceImpl implements ResidentAgencyService {
             resagency[i] = residentAgencyPOS.get(i).getUserId();
             EvaluationAgencyPO evaluationAgencyPO = agencyDao.findByUserId(resagency[i]);
             residentAgencyVO.setName(evaluationAgencyPO.getEvaluationAgencyName());
+            residentAgencyVO.setAgencyPhoto(evaluationAgencyPO.getAgencyPhoto());
             residentAgencyVO.setTaskCount(totalCountOfUser.get(i).getCount());
             residentAgencyVO.setAddress(evaluationAgencyPO.getAddress());
             residentAgencyVO.setAgencyId(residentAgencyPOS.get(i).getAgencyId());

+ 115 - 0
site/src/main/java/com/mooctest/crowd/site/service/impl/ThemeSchedulerServiceImpl.java

@@ -0,0 +1,115 @@
+package com.mooctest.crowd.site.service.impl;
+
+import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
+import com.mooctest.crowd.site.service.ThemeSchedulerService;
+import com.mooctest.crowd.site.service.ThemeStatusService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+import org.springframework.scheduling.support.CronTrigger;
+import org.springframework.stereotype.Service;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ScheduledFuture;
+
+
+/**
+ * @program: crowd
+ * @author: hanyuwei
+ * @create: 2020-07-13 11:30
+ **/
+@Service
+public class ThemeSchedulerServiceImpl implements ThemeSchedulerService {
+
+
+    @Autowired
+    private ThemeStatusService themeStatusService;
+
+    private ConcurrentHashMap<CrowdTestProject, ThemeScheduler> map = new ConcurrentHashMap<>();
+    @Override
+    public boolean createNewThemeScheduler(CrowdTestProject crowdTestProject) {
+        if(! this.map.containsKey(crowdTestProject)) {
+            String cronExp = this.generateNextCronExp(crowdTestProject);
+            if(cronExp==null){
+                return false;
+            }
+            ThemeScheduler themeDetailScheduler = new ThemeScheduler(crowdTestProject, cronExp);
+            themeDetailScheduler.startCron();
+            map.put(crowdTestProject, themeDetailScheduler);
+            return true;
+        }
+        return false;
+    }
+
+    public String generateNextCronExp(CrowdTestProject themeDetail) {
+        String cronExp = null;
+        String dateFormat="ss mm HH dd MM EE";
+        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat, Locale.US);
+        Date now = new Date();
+        if(now.before(themeDetail.getCreateTime())) {
+            cronExp = sdf.format(themeDetail.getCreateTime());
+        } else if(now.before(themeDetail.getDeadTime())){
+            cronExp = sdf.format(themeDetail.getDeadTime());
+        }
+        return cronExp;
+    }
+    @Override
+    public boolean cancelThemeScheduler(CrowdTestProject themeDetail) {
+        if(this.map.containsKey(themeDetail)) {
+            ThemeScheduler themeDetailScheduler = map.get(themeDetail);
+            themeDetailScheduler.stopCron();
+            map.remove(themeDetail);
+            return true;
+        }
+        return false;
+    }
+
+    private class ThemeScheduler {
+        private ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
+        private ScheduledFuture<?> future;
+        private CrowdTestProject crowdTestProject = null;
+        private String cronExp = null;
+
+        ThemeScheduler() {}
+
+        ThemeScheduler (CrowdTestProject crowdTestProject, String cronExp) {
+            this.crowdTestProject = crowdTestProject;
+            this.cronExp =  cronExp;
+            this.threadPoolTaskScheduler =  new ThreadPoolTaskScheduler();
+            this.threadPoolTaskScheduler.initialize();
+        }
+        public String startCron() {
+            future = this.threadPoolTaskScheduler.schedule(new MyRunnable(this.crowdTestProject), new CronTrigger(this.cronExp));
+            return "startCron";
+        }
+
+        public String stopCron() {
+            if (future != null) {
+                future.cancel(true);
+            }
+            return "stopCron";
+        }
+
+        private class MyRunnable implements Runnable {
+
+            private CrowdTestProject crowdTestProject;
+
+            public MyRunnable() {}
+
+            public MyRunnable (CrowdTestProject themeDetail) {
+                this.crowdTestProject = crowdTestProject;
+            }
+
+            @Override
+            public void run() {
+                Integer result = themeStatusService.updateStatus(this.crowdTestProject);
+                map.remove(crowdTestProject);
+                if(result.equals(CrowdTestProject.HAS_CREATED) || result.equals(CrowdTestProject.HAS_RELEASED)) {
+                    createNewThemeScheduler(crowdTestProject);
+                }
+            }
+        }
+    }
+}

+ 119 - 0
site/src/main/java/com/mooctest/crowd/site/service/impl/ThemeSchedulerTaskServiceImpl.java

@@ -0,0 +1,119 @@
+package com.mooctest.crowd.site.service.impl;
+
+import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
+import com.mooctest.crowd.site.service.ThemeSchedulerService;
+import com.mooctest.crowd.site.service.ThemeSchedulerTaskService;
+import com.mooctest.crowd.site.service.ThemeStatusService;
+import com.mooctest.crowd.site.service.ThemeStatusTaskService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+import org.springframework.scheduling.support.CronTrigger;
+import org.springframework.stereotype.Service;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ScheduledFuture;
+
+
+/**
+ * @program: crowd
+ * @author: hanyuwei
+ * @create: 2020-07-13 11:30
+ **/
+@Service
+public class ThemeSchedulerTaskServiceImpl implements ThemeSchedulerTaskService {
+
+
+    @Autowired
+    private ThemeStatusTaskService themeStatusTaskService;
+
+    private ConcurrentHashMap<CrowdTestTask, ThemeScheduler> map = new ConcurrentHashMap<>();
+    @Override
+    public boolean createNewThemeScheduler(CrowdTestTask crowdTestTask) {
+        if(! this.map.containsKey(crowdTestTask)) {
+            String cronExp = this.generateNextCronExp(crowdTestTask);
+            if(cronExp==null){
+                return false;
+            }
+            ThemeScheduler crowdTestTaskScheduler = new ThemeScheduler(crowdTestTask, cronExp);
+            crowdTestTaskScheduler.startCron();
+            map.put(crowdTestTask, crowdTestTaskScheduler);
+            return true;
+        }
+        return false;
+    }
+
+    public String generateNextCronExp(CrowdTestTask crowdTestTask) {
+        String cronExp = null;
+        String dateFormat="ss mm HH dd MM EE";
+        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat, Locale.US);
+        Date now = new Date();
+        if(now.before(crowdTestTask.getCreateTime())) {
+            cronExp = sdf.format(crowdTestTask.getCreateTime());
+        } else if(now.before(crowdTestTask.getDeadTime())){
+            cronExp = sdf.format(crowdTestTask.getDeadTime());
+        }
+        return cronExp;
+    }
+    @Override
+    public boolean cancelThemeScheduler(CrowdTestTask crowdTestTask) {
+        if(this.map.containsKey(crowdTestTask)) {
+            ThemeScheduler crowdTestTaskScheduler = map.get(crowdTestTask);
+            crowdTestTaskScheduler.stopCron();
+            map.remove(crowdTestTask);
+            return true;
+        }
+        return false;
+    }
+
+    private class ThemeScheduler {
+        private ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
+        private ScheduledFuture<?> future;
+        private CrowdTestTask crowdTestTask = null;
+        private String cronExp = null;
+
+        ThemeScheduler() {}
+
+        ThemeScheduler (CrowdTestTask crowdTestTask, String cronExp) {
+            this.crowdTestTask = crowdTestTask;
+            this.cronExp =  cronExp;
+            this.threadPoolTaskScheduler =  new ThreadPoolTaskScheduler();
+            this.threadPoolTaskScheduler.initialize();
+        }
+        public String startCron() {
+            future = this.threadPoolTaskScheduler.schedule(new MyRunnable(this.crowdTestTask), new CronTrigger(this.cronExp));
+            return "startCron";
+        }
+
+        public String stopCron() {
+            if (future != null) {
+                future.cancel(true);
+            }
+            return "stopCron";
+        }
+
+        private class MyRunnable implements Runnable {
+
+            private CrowdTestTask crowdTestTask;
+
+            public MyRunnable() {}
+
+            public MyRunnable (CrowdTestTask crowdTestTask) {
+                this.crowdTestTask = crowdTestTask;
+            }
+
+            @Override
+            public void run() {
+                System.out.println("run111 ");
+                Integer result = themeStatusTaskService.updateStatus(this.crowdTestTask);
+                map.remove(crowdTestTask);
+                if(result.equals(CrowdTestTask.HAS_CREATED) || result.equals(CrowdTestTask.HAS_RELEASED)) {
+                    System.out.println("run22 ");
+                    createNewThemeScheduler(crowdTestTask);
+                }
+            }
+        }
+    }
+}

+ 30 - 0
site/src/main/java/com/mooctest/crowd/site/service/impl/ThemeStatusServiceImpl.java

@@ -0,0 +1,30 @@
+package com.mooctest.crowd.site.service.impl;
+
+import com.mooctest.crowd.domain.dao.CrowdTestProjectDao;
+import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
+import com.mooctest.crowd.site.service.ThemeStatusService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @program: crowd
+ * @author: hanyuwei
+ * @create: 2020-07-13 13:11
+ **/
+@Service
+public class ThemeStatusServiceImpl implements ThemeStatusService {
+
+    @Autowired
+    private CrowdTestProjectDao crowdTestProjectDao;
+
+    @Override
+    public Integer updateStatus(CrowdTestProject crowdTestProject) {
+        int status = 0;
+        long curr = System.currentTimeMillis();
+        if (crowdTestProject.getDeadTime().getTime() < curr) {
+            status = CrowdTestProject.HAS_TIME_OUT;
+        }
+        crowdTestProjectDao.updateStatusById(status,crowdTestProject.getCode());
+        return status;
+    }
+}

+ 30 - 0
site/src/main/java/com/mooctest/crowd/site/service/impl/ThemeStatusTaskServiceImpl.java

@@ -0,0 +1,30 @@
+package com.mooctest.crowd.site.service.impl;
+
+import com.mooctest.crowd.domain.dao.CrowdTestTaskDao;
+import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
+import com.mooctest.crowd.site.service.ThemeStatusTaskService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @program: crowd
+ * @author: hanyuwei
+ * @create: 2020-07-13 13:11
+ **/
+@Service
+public class ThemeStatusTaskServiceImpl implements ThemeStatusTaskService {
+
+    @Autowired
+    private CrowdTestTaskDao crowdTestProjectDao;
+
+    @Override
+    public Integer updateStatus(CrowdTestTask crowdTestProject) {
+        int status = 0;
+        long curr = System.currentTimeMillis();
+        if (crowdTestProject.getDeadTime().getTime() < curr) {
+            status = CrowdTestTask.HAS_TIME_OUT;
+        }
+        crowdTestProjectDao.updateStatusById(status,crowdTestProject.getCode());
+        return status;
+    }
+}

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/resources/application.yml

@@ -56,7 +56,7 @@ oss:
 
 cache:
   expire:
-    duration: 7200
+    duration: 72000
 
 agency: 7
 

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