Преглед на файлове

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

Feature v2.0

See merge request crowd-2019/crowd-test-service-backend!98
郭超 преди 5 години
родител
ревизия
63ff534d7c
променени са 45 файла, в които са добавени 939 реда и са изтрити 306 реда
  1. 1 0
      core/src/main/java/com/mooctest/crowd/domain/command/CrowdTestTaskCommand.java
  2. 6 7
      core/src/main/java/com/mooctest/crowd/domain/dao/CrowdTestProjectDao.java
  3. 9 5
      core/src/main/java/com/mooctest/crowd/domain/dao/CrowdTestTaskDao.java
  4. 11 0
      core/src/main/java/com/mooctest/crowd/domain/dao/UserTaskCountDao.java
  5. 36 46
      core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestTask.java
  6. 3 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/User.java
  7. 14 0
      core/src/main/java/com/mooctest/crowd/domain/exception/HaveNotAgencyAuthException.java
  8. 14 0
      core/src/main/java/com/mooctest/crowd/domain/exception/HaveNotPartAuthException.java
  9. 1 0
      core/src/main/java/com/mooctest/crowd/domain/repository/CommonRepo.java
  10. 1 1
      core/src/main/java/com/mooctest/crowd/domain/repository/CrowdTestProjectRepo.java
  11. 12 3
      core/src/main/java/com/mooctest/crowd/domain/repository/CrowdTestTaskRepo.java
  12. 6 6
      core/src/main/java/com/mooctest/crowd/domain/repository/EvaluationAgencyRepo.java
  13. 2 1
      core/src/main/java/com/mooctest/crowd/domain/repository/ICrowdTaskRepo.java
  14. 2 0
      core/src/main/java/com/mooctest/crowd/domain/repository/IEvaluationAgencyRepo.java
  15. 37 14
      core/src/main/java/com/mooctest/crowd/domain/repository/UserRepo.java
  16. 416 0
      core/src/main/java/com/mooctest/crowd/domain/util/MD5Base64Util.java
  17. 0 1
      site/pom.xml
  18. 5 0
      site/src/main/java/com/mooctest/crowd/site/command/ApplyAgencyAuthCommand.java
  19. 6 2
      site/src/main/java/com/mooctest/crowd/site/command/ApplyPersonalAuthCommand.java
  20. 2 0
      site/src/main/java/com/mooctest/crowd/site/command/CrowdTestTaskCommand.java
  21. 2 2
      site/src/main/java/com/mooctest/crowd/site/controller/AgencyController.java
  22. 0 0
      site/src/main/java/com/mooctest/crowd/site/controller/CommonController.java
  23. 2 33
      site/src/main/java/com/mooctest/crowd/site/controller/CrowTestSquareController.java
  24. 1 1
      site/src/main/java/com/mooctest/crowd/site/controller/UserController.java
  25. 5 1
      site/src/main/java/com/mooctest/crowd/site/controller/advice/ExceptionAdvice.java
  26. 2 2
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTaskVO.java
  27. 32 9
      site/src/main/java/com/mooctest/crowd/site/data/vo/EvaluationAgencyVO.java
  28. 1 1
      site/src/main/java/com/mooctest/crowd/site/data/vo/FullStatusVO.java
  29. 1 1
      site/src/main/java/com/mooctest/crowd/site/data/vo/StatusVO.java
  30. 1 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/UserVO.java
  31. 5 3
      site/src/main/java/com/mooctest/crowd/site/mediator/ViewMediator.java
  32. 85 48
      site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java
  33. 1 1
      site/src/main/java/com/mooctest/crowd/site/service/AgencyService.java
  34. 11 0
      site/src/main/java/com/mooctest/crowd/site/service/AuthCheckService.java
  35. 5 2
      site/src/main/java/com/mooctest/crowd/site/service/CommonService.java
  36. 0 4
      site/src/main/java/com/mooctest/crowd/site/service/CrowdTaskService.java
  37. 43 23
      site/src/main/java/com/mooctest/crowd/site/service/impl/AgencyServiceImpl.java
  38. 52 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/AuthCheckServiceImpl.java
  39. 28 5
      site/src/main/java/com/mooctest/crowd/site/service/impl/CommonServiceImpl.java
  40. 41 26
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdProjectServiceImpl.java
  41. 25 44
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTaskServiceImpl.java
  42. 10 7
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTestSquareServiceImpl.java
  43. 2 3
      site/src/main/java/com/mooctest/crowd/site/service/impl/OSSUploadServiceImpl.java
  44. 0 4
      site/src/main/java/com/mooctest/crowd/site/service/impl/ThemeStatusServiceImpl.java
  45. 0 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/UserServiceImpl.java

+ 1 - 0
core/src/main/java/com/mooctest/crowd/domain/command/CrowdTestTaskCommand.java

@@ -13,6 +13,7 @@ public class CrowdTestTaskCommand {
     private Long crowdTestProjectId;
     private Long evaluationAgencyId;
     private String type;
+    private String resource; // 可见性 0-定向 2-广场
     private String description;
     private String requirementFile;
     private Double price;

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

@@ -25,26 +25,25 @@ public interface CrowdTestProjectDao extends CrudRepository<CrowdTestProjectPO,
     //    @Override
 //    Optional<CrowdTestProjectPO> findById(Long id);
 
+    List<CrowdTestProjectPO> findByNameLikeAndIsDeleted(String name, int isDeleted);
 
-    List<CrowdTestProjectPO> findByNameLike(String name);
-
-    @Query(value = "SELECT * FROM crowd_test_project ORDER BY CTP_CREATE_TIME DESC", nativeQuery = true)
+    @Query(value = "SELECT * FROM crowd_test_project where CTP_IS_DELETED = 0 ORDER BY CTP_CREATE_TIME DESC", nativeQuery = true)
     List<CrowdTestProjectPO> findMoreHotProjects();
 
 
-    @Query(value = "SELECT * FROM crowd_test_project p WHERE CTP_STATUS !=4 and CTP_STATUS !=5 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_IS_DELETED = 0 ORDER BY CTP_CREATE_TIME DESC", nativeQuery = true)
     List<CrowdTestProjectPO> findAll();
 
     //这个指定了查询条数 适用于众测广场首页 这样性能会高一点。
-    @Query(value = "SELECT * FROM crowd_test_project p WHERE CTP_STATUS !=4 and CTP_STATUS !=5 ORDER BY CTP_JOIN_COUNT DESC ,CTP_CREATE_TIME LIMIT 6; ", nativeQuery = true)
+    @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_JOIN_COUNT DESC ,CTP_CREATE_TIME LIMIT 6; ", nativeQuery = true)
     List<CrowdTestProjectPO> findindexProject();
 
 
-    @Query(value = "SELECT * FROM crowd_test_project p WHERE CTP_STATUS !=4 and CTP_STATUS !=5 ORDER BY CTP_JOIN_COUNT DESC ,CTP_CREATE_TIME; ", nativeQuery = true)
+    @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; ", nativeQuery = true)
     List<CrowdTestProjectPO> findAllHotProject();
 
     //这个指定了查询条数 适用于众测广场首页 这样性能会高一点对应热门项目
-    @Query(value = "SELECT * FROM crowd_test_project p WHERE CTP_STATUS !=4 and CTP_STATUS !=5 ORDER BY CTP_JOIN_COUNT DESC ,CTP_CREATE_TIME LIMIT 7; ", nativeQuery = true)
+    @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 LIMIT 7; ", nativeQuery = true)
     List<CrowdTestProjectPO> findall();
 
     CrowdTestProjectPO findByIdAndIsDeleted(Long id, int isDeleted);

+ 9 - 5
core/src/main/java/com/mooctest/crowd/domain/dao/CrowdTestTaskDao.java

@@ -26,19 +26,23 @@ public interface CrowdTestTaskDao extends CrudRepository<CrowdTestTaskPO, Long>,
     @Query(value = "select CTT_ID,CTT_CODE,CTT_NAME,CTT_CTP_CODE,CTT_EA_ID," +
             "CTT_TYPE,CTT_DISTRIBUTION_TYPE,CTT_DISTRIBUTION_PROVINCE,CTT_DISTRIBUTION_CITY," +
             "CTT_REQUIREMENT_FILE,CTT_DESCRIPTION,CTT_QUOTED_PRICE,CTT_FIXED_PRICE," +
-            "CTT_STATUS,CTT_FULL_STATUS,CTT_DEAD_LINE,CTT_IS_DELETED,CTT_PARTICIPANT_COUNT,CTT_ACCEPTED_COUNT,CTT_PARTICIPANT_HAS_COMMITTED_COUNT,CTT_CREATE_TIME,CTT_END_TIME FROM  crowd_test_task t where CTT_STATUS=1 or CTT_STATUS=2 ORDER BY CTT_CREATE_TIME DESC", nativeQuery = true)
+            "CTT_STATUS,CTT_FULL_STATUS,CTT_DEAD_LINE,CTT_IS_DELETED,CTT_PARTICIPANT_COUNT,CTT_ACCEPTED_COUNT,CTT_PARTICIPANT_HAS_COMMITTED_COUNT,CTT_CREATE_TIME,CTT_END_TIME FROM  crowd_test_task t where CTT_STATUS=1 or CTT_STATUS=2  and CTT_IS_DELETED = 0 ORDER BY CTT_CREATE_TIME DESC", nativeQuery = true)
     List<CrowdTestTaskPO> findAll();
 
-    @Query(value = "select * FROM  crowd_test_task  ORDER BY CTT_CREATE_TIME DESC LIMIT 6 ", nativeQuery = true)
+    @Query(value = "select * FROM crowd_test_task WHERE (CTT_STATUS =1 or (CTT_STATUS =2 and CTT_FULL_STATUS = 0)) and CTT_DISTRIBUTION_TYPE = 2 and CTT_IS_DELETED = 0  ORDER BY CTT_CREATE_TIME DESC LIMIT 6 ", nativeQuery = true)
     List<CrowdTestTaskPO> findindexTask();
 
 
     //热门任务
-    @Query(value = "select * FROM  crowd_test_task WHERE CTT_STATUS !=4 and CTT_STATUS !=5  ORDER BY CTT_ACCEPTED_COUNT DESC,CTT_CREATE_TIME DESC LIMIT 7", nativeQuery = true)
+    @Query(value = "select * FROM crowd_test_task WHERE (CTT_STATUS =1 or (CTT_STATUS =2 and CTT_FULL_STATUS = 0)) and CTT_DISTRIBUTION_TYPE = 2 and CTT_IS_DELETED = 0 ORDER BY CTT_ACCEPTED_COUNT DESC,CTT_CREATE_TIME", nativeQuery = true)
+    List<CrowdTestTaskPO> findCanAcceptTask();
+
+    //热门任务
+    @Query(value = "select * FROM  crowd_test_task WHERE CTT_STATUS !=4 and CTT_STATUS !=5 and CTT_IS_DELETED = 0  ORDER BY CTT_ACCEPTED_COUNT DESC,CTT_CREATE_TIME DESC LIMIT 7", nativeQuery = true)
     List<CrowdTestTaskPO> findMoreHotTasks();
 
     //热门任务
-    @Query(value = "select * FROM  crowd_test_task WHERE CTT_STATUS !=4 and CTT_STATUS !=5  ORDER BY CTT_ACCEPTED_COUNT DESC,CTT_CREATE_TIME", nativeQuery = true)
+    @Query(value = "select * FROM  crowd_test_task WHERE CTT_STATUS !=4 and CTT_STATUS !=5 and CTT_IS_DELETED = 0  ORDER BY CTT_ACCEPTED_COUNT DESC,CTT_CREATE_TIME", nativeQuery = true)
     List<CrowdTestTaskPO> findMoreHotTasksList();
 
     List<CrowdTestTaskPO> findByNameLike(String name);
@@ -58,7 +62,7 @@ public interface CrowdTestTaskDao extends CrudRepository<CrowdTestTaskPO, Long>,
 //    @Query(value = "SELECT new com.mooctest.crowd.domain.model.RankInfo(SUM(p.quotedPrice), p.evaluationAgencyId) FROM CrowdTestTaskPO p where p.evaluationAgencyId is not null and p.status>1 GROUP BY p.evaluationAgencyId ORDER BY SUM(p.quotedPrice) DESC")
 //    List<RankInfo> findTotalPriceOfAgency(Pageable pageable);
 
-    @Query(nativeQuery = true, value = "select * from crowd_test_task where CTT_STATUS=1 and CTT_DISTRIBUTION_TYPE=2 order by CTT_QUOTED_PRICE DESC LIMIT 4")
+    @Query(nativeQuery = true, value = "select * from crowd_test_task where CTT_STATUS=1 and CTT_DISTRIBUTION_TYPE=2 and CTT_IS_DELETED = 0  order by CTT_QUOTED_PRICE DESC LIMIT 4")
     List<CrowdTestTaskPO> findHotTask();
 
     @Override

+ 11 - 0
core/src/main/java/com/mooctest/crowd/domain/dao/UserTaskCountDao.java

@@ -2,7 +2,10 @@ package com.mooctest.crowd.domain.dao;
 
 import com.mooctest.crowd.domain.model.UserTaskCountPO;
 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.query.Param;
 
 import javax.transaction.Transactional;
 import java.util.List;
@@ -17,4 +20,12 @@ public interface UserTaskCountDao extends CrudRepository<UserTaskCountPO, Long>,
 
     Optional<UserTaskCountPO> findById(Long id);
 
+    List<UserTaskCountPO> findAll();
+
+    @Modifying
+    @Query(nativeQuery = true,value="UPDATE user_task_count SET UTC_COUNT=?1 WHERE UTC_USER_ID=?2")
+    void updateCount(@Param("userId") long userId,@Param("count") long count);
+
+    @Override
+    <S extends UserTaskCountPO> S save(S s);
 }

+ 36 - 46
core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestTask.java

@@ -1,8 +1,6 @@
 package com.mooctest.crowd.domain.domainobject;
 
-import com.mooctest.crowd.domain.exception.BaseException;
 import com.mooctest.crowd.domain.exception.CrowdTestTaskException;
-import com.mooctest.crowd.domain.exception.UnauthorizedException;
 import lombok.Data;
 
 import java.sql.Timestamp;
@@ -88,32 +86,16 @@ public class CrowdTestTask {
 
     /**
      * 接收任务(测评机构)
+     *
      * @return
      */
-    public void receive(User user){
-        //判断用户是否为接包用户
-    List<Role>  roles=  user.getRoleList();
-    List<String> roleNames=new ArrayList<>();
-    for(int i=0;i<roles.size();i++){
-        roleNames.add(roles.get(i).getName());
-    }
-    if(!roleNames.contains("evaluationUser")&&!roleNames.contains("evaluationAgency")&&!roleNames.contains("RegionalManager")){
-         throw  new BaseException("当前用户没有接包权限");
-    }
-
-
-
-        //判断是否为测评机构
-        EvaluationAgency evaluationAgency = user.getEvaluationAgency();
-        if(evaluationAgency == null){
-            throw new UnauthorizedException("当前用户不是测评机构,没有权限接收任务");
-        }
+    public void receive(User user) {
         //任务当前状态
-        if(this.getStatus() == CrowdTestTaskStatus.HAS_RECEIVED){
-            if(this.getFullStatus() == CrowdTestTaskAcceptStatus.HAS_FULL)
+        if (this.getStatus() == CrowdTestTaskStatus.HAS_RECEIVED) {
+            if (this.getFullStatus() == CrowdTestTaskAcceptStatus.HAS_FULL)
                 throw new CrowdTestTaskException("当前任务满员!:");
-        }else if(this.getStatus()!=CrowdTestTaskStatus.HAS_RELEASED&&this.getStatus()!=CrowdTestTaskStatus.HAS_REJECTED)
-            throw new CrowdTestTaskException("任务当前状态不能被接收,当前状态为:"+this.getStatus());
+        } 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()))
@@ -122,7 +104,7 @@ public class CrowdTestTask {
 //        this.setEvaluationAgencyId(user.getId());
 
         // 判断人数是否满员
-        if (this.getAcceptedCount() >= this.getParticipantCount()){
+        if (this.getAcceptedCount() >= this.getParticipantCount()) {
             throw new CrowdTestTaskException("当前任务已经满员!");
         }
         // 新增接收者信息
@@ -134,30 +116,30 @@ public class CrowdTestTask {
 //        }else if(this.getDistributionType().equals(DistributeType.SQUARE.getId())){
 //            // 广场发布类型
 //        }
-        if (this.getDistributionType() == DistributeType.DIRECT.getId()){
+        if (this.getDistributionType() == DistributeType.DIRECT.getId()) {
             this.getAcceptedUserList().stream().map(taskToUser -> {
                 taskToUser.setIsAccepted(1);
                 taskToUser.setAcceptTime(new Timestamp(System.currentTimeMillis()));
                 return taskToUser;
             }).collect(Collectors.toList());
-        }else{
+        } 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, user.getId(), 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()){
+        this.setAcceptedCount(this.acceptedCount + 1);
+        if (this.getAcceptedCount() == this.getParticipantCount()) {
             this.setFullStatus(CrowdTestTaskAcceptStatus.HAS_FULL);
-        }else{
+        } else {
             this.setFullStatus(CrowdTestTaskAcceptStatus.NOT_FULL);
         }
         this.setStatus(CrowdTestTaskStatus.HAS_RECEIVED);
     }
 
 
-    public void reject(Long userId){
-        if (this.getDistributionType()!=0 || this.getStatus()!=CrowdTestTaskStatus.HAS_RELEASED || !this.getEvaluationAgencyId().equals(userId)){
+    public void reject(Long userId) {
+        if (this.getDistributionType() != 0 || this.getStatus() != CrowdTestTaskStatus.HAS_RELEASED || !this.getEvaluationAgencyId().equals(userId)) {
             throw new CrowdTestTaskException("非法操作!");
         }
         this.setStatus(CrowdTestTaskStatus.HAS_REJECTED);
@@ -169,7 +151,7 @@ public class CrowdTestTask {
     }
 
     public void commitByRegionalManager() {
-        if (this.getStatus()!=CrowdTestTaskStatus.HAS_RECEIVED || this.getParticipantHasCommittedCount() < this.getAcceptedCount()){
+        if (this.getStatus() != CrowdTestTaskStatus.HAS_RECEIVED || this.getParticipantHasCommittedCount() < this.getAcceptedCount()) {
             throw new CrowdTestTaskException("当前状态不能提交任务");
         }
         this.setStatus(CrowdTestTaskStatus.HAS_COMMITED);
@@ -177,36 +159,36 @@ public class CrowdTestTask {
     }
 
     public void commitByAgency(String taskCode, Long userId) {
-        if (this.getStatus()!= CrowdTestTaskStatus.HAS_RECEIVED){
+        if (this.getStatus() != CrowdTestTaskStatus.HAS_RECEIVED) {
             throw new CrowdTestTaskException("当前状态不能提交任务");
         }
 
         Optional<TaskToUser> taskToUserOptional = this.getAcceptedUserList().stream().filter(taskToUser -> taskToUser.getTaskCode().equals(taskCode)
                 && taskToUser.getUserId().equals(userId) && taskToUser.getDistributionType().equals(this.distributionType)).findFirst();
-        if(!taskToUserOptional.isPresent()){
+        if (!taskToUserOptional.isPresent()) {
             throw new CrowdTestTaskException("当前用户无权对此任务进行操作");
-        }else{
+        } else {
             TaskToUser taskToUser = taskToUserOptional.get();
-            if (taskToUser.getIsAccepted() == 0){
+            if (taskToUser.getIsAccepted() == 0) {
                 throw new CrowdTestTaskException("当前用户未接受此任务");
-            }else if(taskToUser.getHasReport() == 0){
+            } else if (taskToUser.getHasReport() == 0) {
                 throw new CrowdTestTaskException("当前用户未提交报告");
-            }else{
+            } else {
                 taskToUser.setIsCommitted(1);
                 taskToUser.setCommitTaskTime(new Timestamp(System.currentTimeMillis()));
             }
         }
-        this.setParticipantHasCommittedCount(this.getParticipantHasCommittedCount()+1);
-        if(this.getParticipantCount() == this.getParticipantHasCommittedCount()){
+        this.setParticipantHasCommittedCount(this.getParticipantHasCommittedCount() + 1);
+        if (this.getParticipantCount() == this.getParticipantHasCommittedCount()) {
             this.setStatus(CrowdTestTaskStatus.HAS_COMMITED);
         }
     }
 
     public void confirmFinish() {
-        if ((this.getParticipantHasCommittedCount() == this.getAcceptedCount() && this.getStatus() == CrowdTestTaskStatus.HAS_RECEIVED)|| (this.getParticipantHasCommittedCount() == this.getParticipantCount() && this.getStatus() == CrowdTestTaskStatus.HAS_COMMITED)) {
+        if ((this.getParticipantHasCommittedCount() == this.getAcceptedCount() && this.getStatus() == CrowdTestTaskStatus.HAS_RECEIVED) || (this.getParticipantHasCommittedCount() == this.getParticipantCount() && this.getStatus() == CrowdTestTaskStatus.HAS_COMMITED)) {
             this.setStatus(CrowdTestTaskStatus.HAS_FINISHED);
             this.setEndTime(new Timestamp(System.currentTimeMillis()));
-        }else {
+        } else {
             throw new CrowdTestTaskException("评测机构未提请结束任务,无法确认结束!");
         }
 
@@ -215,10 +197,18 @@ public class CrowdTestTask {
     public void create(String taskCode) {
         this.setCode(taskCode);
         this.setStatus(CrowdTestTaskStatus.HAS_RELEASED);
-        if (this.getDistributionType() == DistributeType.DIRECT.getId()){
+        this.directTask();
+    }
+
+    public void update() {
+        this.directTask();
+    }
+
+    private void directTask(){
+        if (this.getDistributionType() == DistributeType.DIRECT.getId()) {
             this.setParticipantCount(1);
             TaskToUser taskToUser = new TaskToUser();
-            taskToUser.setValue(this.code, this.getEvaluationAgencyId(), this.quotedPrice,0, this.getDistributionType(), 0, null);
+            taskToUser.setValue(this.code, this.getEvaluationAgencyId(), this.quotedPrice, 0, this.getDistributionType(), 0, null);
             this.getAcceptedUserList().add(taskToUser);
             this.setAcceptedUserList(acceptedUserList);
         }

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

@@ -35,6 +35,9 @@ public class User {
     private String unit;
     private String county;
     private List<Role> roleList;
+    private List<String> personAbilities;
+
+
 
     private RegionalManager regionalManager;
     private EvaluationAgency evaluationAgency;

+ 14 - 0
core/src/main/java/com/mooctest/crowd/domain/exception/HaveNotAgencyAuthException.java

@@ -0,0 +1,14 @@
+package com.mooctest.crowd.domain.exception;
+
+import lombok.NoArgsConstructor;
+
+/**
+ * @author guochao
+ * @date 2019-07-30 09:15
+ */
+@NoArgsConstructor
+public class HaveNotAgencyAuthException extends BaseException {
+    public HaveNotAgencyAuthException(String msg){
+        super(msg);
+    }
+}

+ 14 - 0
core/src/main/java/com/mooctest/crowd/domain/exception/HaveNotPartAuthException.java

@@ -0,0 +1,14 @@
+package com.mooctest.crowd.domain.exception;
+
+import lombok.NoArgsConstructor;
+
+/**
+ * @author guochao
+ * @date 2019-07-30 09:15
+ */
+@NoArgsConstructor
+public class HaveNotPartAuthException extends BaseException {
+    public HaveNotPartAuthException(String msg){
+        super(msg);
+    }
+}

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

@@ -226,6 +226,7 @@ public class CommonRepo {
                             cb.like(a.<String>get("name"), "%" + StringUtils.trim(keyword) + "%")
                     );
                 }
+                predicate.getExpressions().add(cb.equal(a.<String>get("isDeleted"), 0));
 //                q.orderBy(cb.desc(a.get("status").as(Integer.class)));
                 return predicate;
             }

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

@@ -62,7 +62,7 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
 
     @Override
     public List<CrowdTestProjectPO> findByNameLike(String name) {
-        return     crowdTestProjectDao.findByNameLike("%" + name + "%");
+        return     crowdTestProjectDao.findByNameLikeAndIsDeleted("%" + name + "%", DeletedStatus.isNotDeleted);
     }
 
     @Override

+ 12 - 3
core/src/main/java/com/mooctest/crowd/domain/repository/CrowdTestTaskRepo.java

@@ -1,10 +1,11 @@
 package com.mooctest.crowd.domain.repository;
 
 import com.mooctest.crowd.domain.dao.CrowdTestTaskDao;
-import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
+import com.mooctest.crowd.domain.dao.TaskToUserDao;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
+import com.mooctest.crowd.domain.domainobject.TaskToUser;
 import com.mooctest.crowd.domain.model.CrowdTestProjectPO;
-import com.mooctest.crowd.domain.model.CrowdTestTaskPO;
+import com.mooctest.crowd.domain.model.TaskToUserPO;
 import com.mooctest.crowd.domain.util.Converter;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -32,13 +33,16 @@ public class CrowdTestTaskRepo  implements  ICrowdTaskRepo{
     @Autowired
     private CrowdTestTaskDao taskDao;
 
-
+    @Autowired
+    private TaskToUserDao taskToUserDao;
 
     @Override
     public Page<CrowdTestTask> findAllByPage(Pageable pageable, String keyword, int deletedStatus){
         Specifications<CrowdTestProjectPO> where =  Specifications.where(getProjectByIsNotDeleted(keyword, deletedStatus));
         return  taskDao.findAll(where, pageable).map(crowdTestTaskPO -> Converter.convert(CrowdTestTask.class,crowdTestTaskPO));
     }
+
+
     private Specification<CrowdTestProjectPO> getProjectByIsNotDeleted(String keyword, int deletedStatus) {
         return new Specification<CrowdTestProjectPO>() {
             @Override
@@ -54,4 +58,9 @@ public class CrowdTestTaskRepo  implements  ICrowdTaskRepo{
             }
         };
     }
+
+    public void deleteTaskToUser(TaskToUser taskToUser){
+        taskToUserDao.delete(Converter.convert(TaskToUserPO.class, taskToUser));
+    }
+
 }

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

@@ -11,7 +11,6 @@ import com.mooctest.crowd.domain.model.EvaluationAgencyResourcePO;
 import com.mooctest.crowd.domain.util.Converter;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.domain.Specification;
@@ -41,9 +40,6 @@ public class EvaluationAgencyRepo implements IEvaluationAgencyRepo {
     @Autowired
     private EvaluationAgencyDao evaluationAgencyDao;
 
-    @Value("${agency}")
-    private String agencyId;
-
     @Override
     public EvaluationAgency findAgencyById(Long id){
         Optional<EvaluationAgencyPO> evaluationAgencyPO = evaluationAgencyDao.findById(id);
@@ -55,6 +51,12 @@ public class EvaluationAgencyRepo implements IEvaluationAgencyRepo {
     }
 
     @Override
+    public EvaluationAgency findAgencyByUserId(Long userId){
+        EvaluationAgencyPO evaluationAgencyPO = evaluationAgencyDao.findByUserIdAndIsDeleted(userId, DeletedStatus.isNotDeleted);
+        return Converter.convert(EvaluationAgency.class, evaluationAgencyPO);
+    }
+
+    @Override
     public EvaluationAgencyResource findById(Long id){
         Optional<EvaluationAgencyResourcePO> evaluationAgencyResourcePOOptional = agencyResourceDao.findById(id);
         if(!evaluationAgencyResourcePOOptional.isPresent()){
@@ -133,8 +135,6 @@ public class EvaluationAgencyRepo implements IEvaluationAgencyRepo {
                             cb.like(a.<String>get("evaluationAgencyName"), "%" + StringUtils.trim(keyword) + "%")
                     );
                 }
-                EvaluationAgency agencyById = findAgencyById(Long.parseLong(agencyId));
-                predicate.getExpressions().add(cb.notEqual(a.get("evaluationAgencyName"), agencyById.getEvaluationAgencyName()));
                 predicate.getExpressions().add(cb.equal(a.get("isDeleted"), deletedStatus));
                 predicate.getExpressions().add(cb.equal(a.get("isAuthentication"), AuthenticationStatus.isAuthenticated));
                 return predicate;

+ 2 - 1
core/src/main/java/com/mooctest/crowd/domain/repository/ICrowdTaskRepo.java

@@ -1,6 +1,7 @@
 package com.mooctest.crowd.domain.repository;
 
 import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
+import com.mooctest.crowd.domain.domainobject.TaskToUser;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
@@ -8,6 +9,6 @@ public interface ICrowdTaskRepo {
 
      Page<CrowdTestTask> findAllByPage(Pageable pageable, String keyword, int deletedStatus);
 
-
+     void deleteTaskToUser(TaskToUser taskToUser);
 
 }

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

@@ -16,6 +16,8 @@ public interface IEvaluationAgencyRepo {
 
     EvaluationAgency findAgencyById(Long id);
 
+    EvaluationAgency findAgencyByUserId(Long userId);
+
     EvaluationAgencyResource findById(Long id);
 
     List<EvaluationAgencyResource> findByEvaluationAgencyId(Long evaluationAgencyId);

+ 37 - 14
core/src/main/java/com/mooctest/crowd/domain/repository/UserRepo.java

@@ -14,6 +14,7 @@ import org.springframework.stereotype.Component;
 
 import java.sql.Timestamp;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
 
@@ -26,6 +27,8 @@ import java.util.Optional;
 public class UserRepo implements IUserRepo {
     @Autowired
     private EvaluationAgencyDao agencyDao;
+    @Autowired
+    private TestTypeDao testTypeDao;
 
     @Autowired
     private UserDao userDao;
@@ -78,6 +81,7 @@ public class UserRepo implements IUserRepo {
             throw new UserNotExistException("用户不存在");
         } else {
             User user = getUserAndRoleAndPermissionByUserPO(userPOOptional.get());
+
             return user;
         }
     }
@@ -280,22 +284,22 @@ public class UserRepo implements IUserRepo {
         if (evaluationAgency != null) {
             EvaluationAgencyPO evaluationAgencyPO = Converter.convert(EvaluationAgencyPO.class, evaluationAgency);
             evaluationAgencyPO.setUserId(userPO.getId());
-            System.out.println(evaluationAgencyPO+"xxxxxxxxxxxxxxxxxxxxxxxx");
+            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);
-               }
-           }
+            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){
@@ -409,7 +413,18 @@ public class UserRepo implements IUserRepo {
         if (enterpriseAuthenticationPO != null) {
             userResult.setEnterpriseAuthentication(Converter.convert(EnterpriseAuthentication.class, enterpriseAuthenticationPO));
         }
-
+        //获取用户能力
+        List<String> abailities = new ArrayList<>();
+         if(userPO.getPersonalCompetence()!=null){
+             abailities= Arrays.asList(userPO.getPersonalCompetence().split(","));
+         }
+        {
+            for (int i = 0; i < abailities.size(); i++) {
+                String abilityName = testTypeDao.findByCode(abailities.get(i)).get().getName();
+                abailities.add(abilityName);
+            }
+        }
+        userResult.setPersonAbilities(abailities);
         /*获取区域管理员信息*/
         List<RegionalManagerToRegionalPO> regionalManagerToRegionalPOList = regionalManagerToRegionalDao.findByUserIdAndIsDeleted(userPO.getId(), DeletedStatus.isNotDeleted);
         if (regionalManagerToRegionalPOList.size() > 0) {
@@ -438,6 +453,10 @@ public class UserRepo implements IUserRepo {
         return userResult;
     }
 
+
+
+
+
     private User getEvaluationInfo(User userResult) {
         /*获取测评机构信息*/
         EvaluationAgencyPO evaluationAgencyPO = evaluationAgencyDao.findByUserIdAndIsDeleted(userResult.getId(), DeletedStatus.isNotDeleted);
@@ -455,6 +474,10 @@ public class UserRepo implements IUserRepo {
             }
             evaluationAgencyResult.setEvaluationAgencyAbilityList(evaluationAgencyAbilityList);
 
+
+
+
+
             /*获取测评机构资源*/
             List<EvaluationAgencyResourcePO> evaluationAgencyResourcePOList = agencyResourceDao.findByEvaluationAgencyIdAndIsDeleted(evaluationAgencyResult.getId(), DeletedStatus.isNotDeleted);
             List<EvaluationAgencyResource> evaluationAgencyResourceList = new ArrayList<>();

+ 416 - 0
core/src/main/java/com/mooctest/crowd/domain/util/MD5Base64Util.java

@@ -0,0 +1,416 @@
+package com.mooctest.crowd.domain.util;
+
+/**
+ * @author guochao
+ * @date 2020-06-21 15:16
+ */
+import java.io.ByteArrayOutputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.security.MessageDigest;
+
+/**
+ 2018年3月19日
+ **/
+public class MD5Base64Util {
+
+    public static void main(String[] args)  {
+
+
+        String text ="123456";
+        System.out.println("md5:"+MD5Base64Util.EncryptionByMD5(text));
+        System.out.println("Base64:"+MD5Base64Util.EncryptionByBase64(text));
+        System.out.println("md5_Base64:"+MD5Base64Util.EncryptionByMD5AndBase64(text)+"\n");
+
+        String text2 =MD5Base64Util.EncryptionByBase64(text);//MTIzNDU2
+        System.out.println(MD5Base64Util.decryptBase64(text2)+"\n");
+
+        String text3 =MD5Base64Util.EncryptionByMD5AndBase64(text);//4QrcOUm6Wau+VuBX8g+IPg==
+        System.out.println(MD5Base64Util.decryptBase64To(text3)+"\n");
+
+        // 解密
+        String decryptText = "/OqSD3QStdp74M9CuMk3WQ==";
+        System.out.println(MD5Base64Util.decryptBase64(decryptText)+"\n");
+
+    }
+
+    private final static char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
+    private static char[] base64EncodeChars = new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
+            'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
+            'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' };
+
+    private static byte[] base64DecodeChars = new byte[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55,
+            56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+            21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+            47, 48, 49, 50, 51, -1, -1, -1, -1, -1 };
+    /**
+     * MD5加密
+     * @param text
+     * @return String
+     */
+    public static String EncryptionByMD5(String text){
+        try {
+            byte[] btInput = text.getBytes();
+            // 获得MD5摘要算法的 MessageDigest 对象
+            MessageDigest mdInst = MessageDigest.getInstance("MD5");
+            // 使用指定的字节更新摘要
+            mdInst.update(btInput);
+            // 获得密文
+            byte[] md = mdInst.digest();
+            // 把密文转换成十六进制的字符串形式
+            int j = md.length;
+            char str[] = new char[j * 2];
+            int k = 0;
+            for (int i = 0; i < j; i++) {
+                byte byte0 = md[i];
+                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
+                str[k++] = hexDigits[byte0 & 0xf];
+            }
+            return new String(str);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+
+    }
+    /**
+     * MD5加密
+     * @param text
+     * @return byte[]
+     */
+    public static byte[] EncryptionByMD5T(String text){
+        try {
+            byte[] btInput = text.getBytes();
+            // 获得MD5摘要算法的 MessageDigest 对象
+            MessageDigest mdInst = MessageDigest.getInstance("MD5");
+            // 使用指定的字节更新摘要
+            mdInst.update(btInput);
+            // 获得密文
+            byte[] md = mdInst.digest();
+            return md;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+
+    }
+    /**
+     * Base64加密
+     * @param text
+     * @return String
+     */
+    public static String EncryptionByBase64(String text) {
+        byte[] data=text.getBytes();
+        StringBuffer sb = new StringBuffer();
+        int len = data.length;
+        int i = 0;
+        int b1, b2, b3;
+
+        while (i < len) {
+            b1 = data[i++] & 0xff;
+            if (i == len) {
+                sb.append(base64EncodeChars[b1 >>> 2]);
+                sb.append(base64EncodeChars[(b1 & 0x3) << 4]);
+                sb.append("==");
+                break;
+            }
+            b2 = data[i++] & 0xff;
+            if (i == len) {
+                sb.append(base64EncodeChars[b1 >>> 2]);
+                sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
+                sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);
+                sb.append("=");
+                break;
+            }
+            b3 = data[i++] & 0xff;
+            sb.append(base64EncodeChars[b1 >>> 2]);
+            sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
+            sb.append(base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]);
+            sb.append(base64EncodeChars[b3 & 0x3f]);
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Base64加密
+     * @param data
+     * @return String
+     */
+    public static String EncryptionByBase64(byte[] data) {
+        StringBuffer sb = new StringBuffer();
+        int len = data.length;
+        int i = 0;
+        int b1, b2, b3;
+
+        while (i < len) {
+            b1 = data[i++] & 0xff;
+            if (i == len) {
+                sb.append(base64EncodeChars[b1 >>> 2]);
+                sb.append(base64EncodeChars[(b1 & 0x3) << 4]);
+                sb.append("==");
+                break;
+            }
+            b2 = data[i++] & 0xff;
+            if (i == len) {
+                sb.append(base64EncodeChars[b1 >>> 2]);
+                sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
+                sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);
+                sb.append("=");
+                break;
+            }
+            b3 = data[i++] & 0xff;
+            sb.append(base64EncodeChars[b1 >>> 2]);
+            sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
+            sb.append(base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]);
+            sb.append(base64EncodeChars[b3 & 0x3f]);
+        }
+        return sb.toString();
+    }
+
+
+    /**
+     * 先MD5加密,再base64加密
+     * @param text
+     * @return String
+     */
+    public static String EncryptionByMD5AndBase64(String text){
+
+        return EncryptionByBase64(EncryptionByMD5T(text));
+    }
+
+    /**
+     * Base64 解密
+     * @return String
+     */
+    public static String decryptBase64(String text) {
+        byte[] data = text.getBytes();
+        int len = data.length;
+        ByteArrayOutputStream buf = new ByteArrayOutputStream(len);
+        int i = 0;
+        int b1, b2, b3, b4;
+
+        while (i < len)
+        {
+
+            /* b1 */
+            do
+            {
+                b1 = base64DecodeChars[data[i++]];
+            }
+            while (i < len && b1 == -1);
+            if (b1 == -1)
+            {
+                break;
+            }
+
+            /* b2 */
+            do
+            {
+                b2 = base64DecodeChars[data[i++]];
+            }
+            while (i < len && b2 == -1);
+            if (b2 == -1)
+            {
+                break;
+            }
+            buf.write((int) ((b1 << 2) | ((b2 & 0x30) >>> 4)));
+
+            /* b3 */
+            do
+            {
+                b3 = data[i++];
+                if (b3 == 61)
+                {
+                    return new String(buf.toByteArray());
+                }
+                b3 = base64DecodeChars[b3];
+            }
+            while (i < len && b3 == -1);
+            if (b3 == -1)
+            {
+                break;
+            }
+            buf.write((int) (((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2)));
+
+            /* b4 */
+            do
+            {
+                b4 = data[i++];
+                if (b4 == 61)
+                {
+                    return new String(buf.toByteArray());
+                }
+                b4 = base64DecodeChars[b4];
+            }
+            while (i < len && b4 == -1);
+            if (b4 == -1)
+            {
+                break;
+            }
+            buf.write((int) (((b3 & 0x03) << 6) | b4));
+
+        }
+
+        return new String(buf.toByteArray());
+
+    }
+
+    /**
+     * Base64 解密到MD5
+     * @return String
+     */
+    public static String decryptBase64To(String text) {
+        byte[] data = text.getBytes();
+        int len = data.length;
+        ByteArrayOutputStream buf = new ByteArrayOutputStream(len);
+        int i = 0;
+        int b1, b2, b3, b4;
+
+        while (i < len)
+        {
+
+            /* b1 */
+            do
+            {
+                b1 = base64DecodeChars[data[i++]];
+            }
+            while (i < len && b1 == -1);
+            if (b1 == -1)
+            {
+                break;
+            }
+
+            /* b2 */
+            do
+            {
+                b2 = base64DecodeChars[data[i++]];
+            }
+            while (i < len && b2 == -1);
+            if (b2 == -1)
+            {
+                break;
+            }
+            buf.write((int) ((b1 << 2) | ((b2 & 0x30) >>> 4)));
+
+            /* b3 */
+            do
+            {
+                b3 = data[i++];
+                if (b3 == 61)
+                {
+                    byte[] br = buf.toByteArray();
+                    // 把密文转换成十六进制的字符串形式
+                    int p = br.length;
+                    char str[] = new char[p * 2];
+                    int k = 0;
+                    for (int r = 0; r < p; r++) {
+                        byte byte0 = br[r];
+                        str[k++] = hexDigits[byte0 >>> 4 & 0xf];
+                        str[k++] = hexDigits[byte0 & 0xf];
+                    }
+                    return new String(str);
+                }
+                b3 = base64DecodeChars[b3];
+            }
+            while (i < len && b3 == -1);
+            if (b3 == -1)
+            {
+                break;
+            }
+            buf.write((int) (((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2)));
+
+            /* b4 */
+            do
+            {
+                b4 = data[i++];
+                if (b4 == 61)
+                {
+                    byte[] br = buf.toByteArray();
+                    // 把密文转换成十六进制的字符串形式
+                    int p = br.length;
+                    char str[] = new char[p * 2];
+                    int k = 0;
+                    for (int r = 0; r < p; r++) {
+                        byte byte0 = br[r];
+                        str[k++] = hexDigits[byte0 >>> 4 & 0xf];
+                        str[k++] = hexDigits[byte0 & 0xf];
+                    }
+                    return new String(str);
+                }
+                b4 = base64DecodeChars[b4];
+            }
+            while (i < len && b4 == -1);
+            if (b4 == -1)
+            {
+                break;
+            }
+            buf.write((int) (((b3 & 0x03) << 6) | b4));
+
+        }
+        byte[] br = buf.toByteArray();
+        // 把密文转换成十六进制的字符串形式
+        int p = br.length;
+        char str[] = new char[p * 2];
+        int k = 0;
+        for (int r = 0; r < p; r++) {
+            byte byte0 = br[r];
+            str[k++] = hexDigits[byte0 >>> 4 & 0xf];
+            str[k++] = hexDigits[byte0 & 0xf];
+        }
+        return new String(str);
+    }
+
+    /**
+     * 网络传输中文UTF-8加密,防止乱码
+     * @param text
+     * @return String
+     */
+    public static String netEnCoderUTF8(String text){
+        return netEnCoder(text,"UTF-8");
+    }
+
+    /***
+     * 网络传输中文UTF-8解码
+     * @param text
+     * @return String
+     */
+    public static String netEDeCoderUTF8(String text){
+        return netDecoder(text,"UTF-8");
+    }
+
+
+    /**
+     *
+     * @param text
+     * @param charsetName 字符集
+     * @return String
+     */
+    public static String netEnCoder(String text,String charsetName){
+        String result=null;
+        try {
+            result= URLEncoder.encode(text,charsetName);
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    /**
+     *
+     * @param text
+     * @param charsetName 字符集
+     * @return String
+     */
+    public static String netDecoder(String text,String charsetName){
+        String result=null;
+        try {
+            result= URLDecoder.decode(text,charsetName);
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+}

+ 0 - 1
site/pom.xml

@@ -143,7 +143,6 @@
 			<artifactId>snakeyaml</artifactId>
 		</dependency>
 	</dependencies>
-
 	<build>
 		<plugins>
 			<plugin>

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

@@ -3,6 +3,7 @@ package com.mooctest.crowd.site.command;
 import com.alibaba.fastjson.JSONObject;
 import com.mooctest.crowd.domain.domainobject.EvaluationAgency;
 import com.mooctest.crowd.domain.domainobject.EvaluationAgencyAbility;
+import com.mooctest.crowd.domain.exception.HttpBadRequestException;
 import com.mooctest.crowd.domain.factory.UserFactory;
 import lombok.Data;
 import org.springframework.beans.BeanUtils;
@@ -51,6 +52,10 @@ public class ApplyAgencyAuthCommand{
     private List<AgencyResourceCommand> evaluationAgencyResourceList;
 
     public EvaluationAgency toAgency(){
+        String reg = "\\d{15}(\\d{2}[0-9xX])?";
+        if(!IdCardNum.matches(reg)){
+            throw new HttpBadRequestException("身份证信息不合法");
+        }
         EvaluationAgency agency = UserFactory.defaultAgency();
         BeanUtils.copyProperties(this, agency, "evaluationAgencyAbilityList", "evaluationAgencyResourceList");
         if( this.evaluationAgencyAbilityList != null&&this.evaluationAgencyAbilityList.size() > 0 ){

+ 6 - 2
site/src/main/java/com/mooctest/crowd/site/command/ApplyPersonalAuthCommand.java

@@ -3,11 +3,11 @@ package com.mooctest.crowd.site.command;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.mooctest.crowd.domain.domainobject.PersonalAuthentication;
+import com.mooctest.crowd.domain.exception.HttpBadRequestException;
 import lombok.Data;
 import org.springframework.beans.BeanUtils;
 
 import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
 import java.sql.Date;
 import java.sql.Timestamp;
 import java.util.List;
@@ -28,7 +28,7 @@ public class ApplyPersonalAuthCommand {
 
     @JsonProperty(value = "idCard")
     @NotNull(message = "请填写身份证号码")
-    @Pattern(regexp = "\\d{15}(\\d{2}[0-9xX])?", message = "身份证号格式错误")
+//    @Pattern(regexp = "\\d{15}(\\d{2}[0-9xX])?", message = "身份证号格式错误")
     private String idCard;
 
     @JsonProperty(value = "idCardPositivePhoto")
@@ -50,6 +50,10 @@ public class ApplyPersonalAuthCommand {
     private List<Integer> roleList;
 
     public PersonalAuthentication toPersonalAuth() {
+        String reg = "\\d{15}(\\d{2}[0-9xX])?";
+        if(!idCard.matches(reg)){
+            throw new HttpBadRequestException("身份证信息不合法");
+        }
         PersonalAuthentication personalAuthentication = new PersonalAuthentication();
         BeanUtils.copyProperties(this, personalAuthentication);
         personalAuthentication.setType(JSONObject.toJSONString(this.roleList));

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

@@ -2,6 +2,7 @@ package com.mooctest.crowd.site.command;
 
 import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
 import lombok.Data;
+import org.springframework.beans.BeanUtils;
 
 import javax.validation.constraints.NotNull;
 import java.sql.Timestamp;
@@ -52,6 +53,7 @@ public class CrowdTestTaskCommand {
 
     public CrowdTestTask toCrowdTask(){
         CrowdTestTask crowdTestTask = new CrowdTestTask();
+        BeanUtils.copyProperties(this, crowdTestTask);
         crowdTestTask.setName(name);
         crowdTestTask.setDeadTime(datetime);
         crowdTestTask.setDescription(desc);

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

@@ -136,8 +136,8 @@ public class AgencyController extends BaseSearchController {
      */
     @LoginRequired
     @RequestMapping(value = "/user/{userId}/agency", method = RequestMethod.GET)
-    public AgencyVO getAgencyInfo(@PathVariable("userId") Long userId) {
-        return agencyService.getAgencyDetails(userId);
+    public ResponseVO getAgencyInfo(@PathVariable("userId") Long userId) {
+        return new ResponseVO(ServerCode.SUCCESS ,agencyService.getDetailById(userId));
     }
 
     @RequestMapping(value = "/agency/list", method = RequestMethod.GET)

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
site/src/main/java/com/mooctest/crowd/site/controller/CommonController.java


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

@@ -1,7 +1,5 @@
 package com.mooctest.crowd.site.controller;
 
-import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
-import com.mooctest.crowd.domain.domainobject.CrowdTestProjectStatus;
 import com.mooctest.crowd.site.data.dto.CrowdTestSquareIndexDTO;
 import com.mooctest.crowd.site.data.response.ResponseVO;
 import com.mooctest.crowd.site.data.response.ServerCode;
@@ -54,8 +52,8 @@ public class CrowTestSquareController extends BaseSearchController {
         List<CrowdTaskVO> crowdTestTasks = crowdTaskService.findAll();
         crowdTestSquareIndexDTO.setCrowdTestProjectVOs(list);//众测项目
         crowdTestSquareIndexDTO.setCrowdTestTaskVOS(crowdTestTasks);//众测任务
-        crowdTestSquareIndexDTO.setHotCrowdTaskVOs(crowdTaskService.findMoreHotTasks());
-        crowdTestSquareIndexDTO.setHotCrowdTestProjectVOs(crowdProjectService.findAllMoreHotProjects());
+        crowdTestSquareIndexDTO.setHotCrowdTaskVOs(crowdTaskService.findMoreHotTasks());//热门任务
+        crowdTestSquareIndexDTO.setHotCrowdTestProjectVOs(crowdProjectService.findAllMoreHotProjects());//热门项目
         return new ResponseVO(ServerCode.SUCCESS, crowdTestSquareIndexDTO);
     }
 
@@ -68,20 +66,6 @@ public class CrowTestSquareController extends BaseSearchController {
         return crowdTestSquareService.findByNameLike(searchConditionVO);
     }
 
-    /**
-     * 获取更多热门项目
-     *
-     * @param searchConditionVO
-     * @return
-     */
-
-    @PostMapping("/hotProject/list/more")
-    public ResponseVO findMoreHotProjects(@RequestBody SearchConditionVO searchConditionVO) {
-        Pageable pageable = this.getPageable(searchConditionVO);
-        List<CrowdTestProjectVO> crowdTestProjectVOList = crowdProjectService.findAllMoreHotProjects();
-        Page<CrowdTestProjectVO> projectVOPage = DataUtils.listToPage(crowdTestProjectVOList, pageable);
-        return new ResponseVO(ServerCode.SUCCESS, projectVOPage);
-    }
 
     /**
      * 更多热门项目列表
@@ -98,21 +82,6 @@ public class CrowTestSquareController extends BaseSearchController {
         return new ResponseVO(ServerCode.SUCCESS, projectVOPage);
     }
 
-    /**
-     * 获取更多热门任务
-     *
-     * @param searchConditionVO
-     * @return
-     */
-
-    @PostMapping("/hotTasks/list/more")
-    public ResponseVO findMoreHotTasks(@RequestBody SearchConditionVO searchConditionVO) {
-        Pageable pageable = this.getPageable(searchConditionVO);
-        List<CrowdTaskVO> crowdTestProjectVOList = crowdTaskService.findMoreHotTasks();
-        Page<CrowdTaskVO> taskVOPage = DataUtils.listToPage(crowdTestProjectVOList, pageable);
-        return new ResponseVO(ServerCode.SUCCESS, taskVOPage);
-
-    }
 
     /**
      * 更多热门任务列表

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

@@ -81,7 +81,7 @@ public class UserController extends BaseController{
 
     @RequestMapping(value = "/user/detail/{userId}", method = RequestMethod.GET)
     public ResponseVO<UserVO> getUserDetail(@PathVariable Long userId) {
-        return new ResponseVO<>(ServerCode.SUCCESS, userService.getUserDetail(userId));
+        return new ResponseVO(ServerCode.SUCCESS, userService.getUserDetail(userId));
     }
 
     /**

+ 5 - 1
site/src/main/java/com/mooctest/crowd/site/controller/advice/ExceptionAdvice.java

@@ -49,7 +49,11 @@ public class ExceptionAdvice {
             return "资源不存在";
         } else if (e instanceof UserTaskCountNoExistException) {
             return "当前用户没有参与接包";
-        } else
+        } else if (e instanceof HaveNotAgencyAuthException){
+            return "您未认证为接包用户,请认证后操作。";
+        } else if (e instanceof HaveNotPartAuthException){
+            return "您未认证为发包用户,请认证后操作。";
+        }  else
             return e.getMessage();
     }
 

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

@@ -22,7 +22,7 @@ import static com.mooctest.crowd.site.data.vo.CrowdTestProjectVO.getDistanceTime
 @NoArgsConstructor
 @AllArgsConstructor
 public class CrowdTaskVO implements Serializable{
-    private long id;
+    private String id;
     private String code;
     private String projectId;
     private String title;
@@ -50,7 +50,7 @@ public class CrowdTaskVO implements Serializable{
     private String time_interval;
 
     public CrowdTaskVO(CrowdTestTask task){
-        id = task.getId();
+        id = task.getCode();
         code = task.getCode();
         projectId = task.getCrowdTestProjectCode();
         title = task.getName();

+ 32 - 9
site/src/main/java/com/mooctest/crowd/site/data/vo/EvaluationAgencyVO.java

@@ -1,12 +1,16 @@
 package com.mooctest.crowd.site.data.vo;
 
 import com.mooctest.crowd.domain.domainobject.EvaluationAgency;
+import com.mooctest.crowd.domain.domainobject.EvaluationAgencyAbility;
+import com.mooctest.crowd.domain.domainobject.EvaluationAgencyResource;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import org.springframework.beans.BeanUtils;
 
 import java.io.Serializable;
 import java.sql.Timestamp;
+import java.util.List;
 
 /**
  * @Author: xuexb
@@ -23,20 +27,39 @@ public class EvaluationAgencyVO implements Serializable {
     private String evaluationAgencyName;
     private Double allTaskPrice;
     private Long taskCount;
+    private int authStatus;
     private String address;
     private Timestamp updateTime;
     private Timestamp expireTime;
     private Timestamp checkTime;
     private Timestamp applyTime;
+    private List<String> agencyAbilities;
 
-    public EvaluationAgencyVO(EvaluationAgency evaluationAgency){
-        id = evaluationAgency.getId();
-        agencyPhoto = evaluationAgency.getAgencyPhoto();
-        evaluationAgencyName = evaluationAgency.getEvaluationAgencyName();
-        userId = evaluationAgency.getUserId();
-        updateTime=evaluationAgency.getUpdateTime();
-        expireTime=evaluationAgency.getExpireTime();
-        checkTime=evaluationAgency.getCheckTime();
-        applyTime=evaluationAgency.getApplyTime();
+    private String businessLicensePhoto;
+    private String legalPersonName;
+//    private String IdCardNum;
+//    private String gender;
+//    private String idCardPositivePhoto;//身份证正面照
+//    private String idCardBackPhoto;//身份证反面照
+//    private Date idCardDeadTime;
+
+    private List<EvaluationAgencyAbility> evaluationAgencyAbilityList;
+    private List<EvaluationAgencyResource> evaluationAgencyResourceList;
+    private int isAuthentication;
+    private String explain;
+    private int isDeleted;
+    private String type;
+
+
+    public EvaluationAgencyVO(EvaluationAgency evaluationAgency) {
+        BeanUtils.copyProperties(evaluationAgency, this);
+//        id = evaluationAgency.getId();
+//        agencyPhoto = evaluationAgency.getAgencyPhoto();
+//        evaluationAgencyName = evaluationAgency.getEvaluationAgencyName();
+//        userId = evaluationAgency.getUserId();
+//        updateTime = evaluationAgency.getUpdateTime();
+//        expireTime = evaluationAgency.getExpireTime();
+//        checkTime = evaluationAgency.getCheckTime();
+//        applyTime = evaluationAgency.getApplyTime();
     }
 }

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

@@ -28,7 +28,7 @@ public class FullStatusVO {
             this.setStyle("warning");
         } else if (status.equals(AuthenticationStatus.isNotAuthenticated)) {
             this.setText("认证失败");
-            this.setStyle("info");
+            this.setStyle("danger");
         }
     }
 }

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

@@ -29,7 +29,7 @@ public class StatusVO {
             this.setStyle("warning");
         } else if (status.equals(AuthenticationStatus.isNotAuthenticated)){
             this.setText("认证失败");
-            this.setStyle("info");
+            this.setStyle("danger");
         }
     }
 

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

@@ -35,6 +35,7 @@ public class UserVO implements Serializable {
     private Long taskCount;
     private Date birthday;
     private List<String> personalCompetence;
+    private List<String> personAbilities;
     private String unit;
     private String county;
     private String address;

+ 5 - 3
site/src/main/java/com/mooctest/crowd/site/mediator/ViewMediator.java

@@ -21,7 +21,7 @@ import java.util.List;
  * @Date: 2019.7.16 20:25
  */
 public interface ViewMediator {
-     List<CrowdTestProjectVO>   crowdTestProjects();
+    List<CrowdTestProjectVO> crowdTestProjects();
 
     List<CrowdTaskVO> findIndexTask();
 
@@ -81,10 +81,10 @@ public interface ViewMediator {
     List<CrowdTaskVO> findTaskByNameLike(String name);
 
 
-List<CrowdTestProjectVO>   AllByPage();
+    List<CrowdTestProjectVO> AllByPage();
 
     //热门项目
-    List<CrowdTestProjectVO>  hotCrowdTestProjects();
+    List<CrowdTestProjectVO> hotCrowdTestProjects();
 
 
     List<CrowdTestProjectVO> indexCrowdTestProjects();
@@ -124,4 +124,6 @@ List<CrowdTestProjectVO>   AllByPage();
     BankCardDTO getBankType();
 
     List<CrowdTestProjectVO> crowdTestProjectsWaitingAccept();
+
+    List<UserTaskCountVO> getCount();
 }

+ 85 - 48
site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java

@@ -24,12 +24,12 @@ import com.mooctest.crowd.site.data.vo.*;
 import com.mooctest.crowd.site.mediator.ViewMediator;
 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;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Component;
@@ -117,8 +117,6 @@ public class WebMediatorImpl implements ViewMediator {
     @Autowired
     private FieldDao fieldDao;
 
-    @Value("${agency}")
-    private String agencyId;
     @Autowired
     private UserToRoleDao userToRoleDao;
 
@@ -128,7 +126,6 @@ public class WebMediatorImpl implements ViewMediator {
     @Autowired
     private ThemeStatusTaskService themeStatusTaskService;
 
-
     @Override
     public List<CrowdTestProjectVO> crowdTestProjects() {
         List<CrowdTestProjectVO> authingList = new ArrayList<>();
@@ -561,17 +558,19 @@ public class WebMediatorImpl implements ViewMediator {
                     projectVO = changeApplicationType(projectVO);
                     return projectVO;
                 }).collect(Collectors.toList());
-        List<CrowdProjectVO> myProject=new ArrayList<>();
-        List<CrowdProjectVO> finishedProjects=new ArrayList<>();
-        for(int i=0;i<myProejcts.size();i++){
-            if(myProejcts.get(i).getStatus()<CrowdTestProjectStatus.HAS_FINISHED){
-                myProject.add(myProejcts.get(i));
-                myCrowdDTO.setMyProjects(myProject);
-            }else if(myProejcts.get(i).getStatus()>=CrowdTestProjectStatus.HAS_FINISHED){
-                finishedProjects.add(myProejcts.get(i));
-                myCrowdDTO.setFinishedProjects(finishedProjects);
-            }
-        }
+        myCrowdDTO.setMyProjects(myProejcts);
+//        List<CrowdProjectVO> myProject=new ArrayList<>();
+//        List<CrowdProjectVO> finishedProjects=new ArrayList<>();
+//        for(int i=0;i<myProejcts.size();i++){
+//            if(myProejcts.get(i).getStatus()<CrowdTestProjectStatus.HAS_FINISHED){
+//                myProject.add(myProejcts.get(i));
+//                myCrowdDTO.setMyProjects(myProject);
+//            }else if(myProejcts.get(i).getStatus()>=CrowdTestProjectStatus.HAS_FINISHED){
+//                finishedProjects.add(myProejcts.get(i));
+//                myCrowdDTO.setFinishedProjects(finishedProjects);
+//            }
+//        }
+
         //对于区域管理员crowdTestProjectPO -> crowdTestProjectPO.getStatus() > CrowdTestProjectStatus.HAS_RELEASED
         if (user.getRoleList().stream().anyMatch(role -> role.getName().equals("RegionalManager"))) {
             List<CrowdTestProjectPO> crowdTestProjectPOList = projectDao.findByRegionalManagerIdAndIsDeleted(userId, DeletedStatus.isNotDeleted)
@@ -613,16 +612,17 @@ public class WebMediatorImpl implements ViewMediator {
         myCrowdDTO.setMyProjectNoticeCount(myProejcts.stream().filter(CrowdProjectVO::getNeedHandle).count());
         myCrowdDTO.setProcessProjectNoticeCount(myCrowdDTO.getHandlingProjects() == null ? 0 : myCrowdDTO
                 .getHandlingProjects().stream().filter(CrowdProjectVO::getNeedHandle).count());
-        if (user.getRoleList().stream().noneMatch(role -> role.getName().equals("evaluationAgency")))
+        if (!AuthCheckServiceImpl.isAgency(user))
             return myCrowdDTO;
         List<CrowdTestTask> allTaskOfAgency = null;
         List<CrowdTaskVO> unfinishedTasks = null;
         List<CrowdTaskVO> finishedTasks = null;
-        if (user.getRoleList().stream().anyMatch(role -> role.getName().equals("evaluationAgency"))) {
+
+        // 测评机构或者测试人员
+        if (AuthCheckServiceImpl.isAgency(user)) {
             List<TaskToUserPO> taskToUserPOS = taskToUserDao.findByUserId(user.getId());
             if (taskToUserPOS != null && taskToUserPOS.size() > 0) {
-                allTaskOfAgency = taskToUserPOS.stream().sorted(Comparator.comparing(TaskToUserPO::getAcceptTime))
-                        .map(taskToUserPO -> {
+                allTaskOfAgency = taskToUserPOS.stream().map(taskToUserPO -> {
                             CrowdTestTaskPO crowdTestTaskPO = taskDao.findByCodeAndIsDeleted(taskToUserPO.getTaskCode(), DeletedStatus.isNotDeleted);
                             if (crowdTestTaskPO != null) {
                                 CrowdTestTask task = new CrowdTestTask();
@@ -636,10 +636,12 @@ public class WebMediatorImpl implements ViewMediator {
                         }).collect(Collectors.toList());
                 unfinishedTasks = allTaskOfAgency.stream()
                         .filter(crowdTestTask -> crowdTestTask.getStatus() >= CrowdTestTaskStatus.HAS_RELEASED && crowdTestTask.getStatus() < CrowdTestTaskStatus.HAS_FINISHED)
+                        .sorted(Comparator.comparing(CrowdTestTask::getCreateTime))
                         .map(CrowdTaskVO::new).collect(Collectors.toList());
 
                 finishedTasks = allTaskOfAgency.stream()
                         .filter(crowdTestTask -> crowdTestTask.getStatus() == CrowdTestTaskStatus.HAS_FINISHED)
+                        .sorted(Comparator.comparing(CrowdTestTask::getCreateTime))
                         .map(CrowdTaskVO::new).collect(Collectors.toList());
             }
         }
@@ -659,12 +661,12 @@ public class WebMediatorImpl implements ViewMediator {
         UserVO userVO = new UserVO(user);
         userDataDTO.setMyProjects(myProjects);
         userDataDTO.setUserVO(userVO);
-        if (user.getRoleList().stream().noneMatch(role -> role.getName().equals("evaluationAgency")))
+        if (!AuthCheckServiceImpl.isAgency(user))
             return userDataDTO;
         List<CrowdTestTask> allTaskOfAgency = null;
         List<CrowdTestTask> unfinishedTasks = null;
         List<CrowdTestTask> finishedTasks = null;
-        if (user.getRoleList().stream().anyMatch(role -> role.getName().equals("evaluationAgency"))) {
+        if (AuthCheckServiceImpl.isAgency(user)) {
             List<TaskToUserPO> taskToUserPOS = taskToUserDao.findByUserId(user.getId());
             if (taskToUserPOS != null && taskToUserPOS.size() > 0) {
                 allTaskOfAgency = taskToUserPOS.stream().sorted(Comparator.comparing(TaskToUserPO::getAcceptTime))
@@ -812,13 +814,14 @@ public class WebMediatorImpl implements ViewMediator {
         if (!task.isPresent())
             throw new CrowdTestTaskNotExistException();
         System.out.println("renderTaskReportDetails userID: " + userId);
+        User user = userRepo.getByID(userId);
         ReportDetailsDTO reportDetailsDTO = new ReportDetailsDTO();
         if (userId.equals(projectRepo.getByProjectCode(projectCode).getRegionalManagerId())) {
             // 区域管理员
             reportDetailsDTO.setCrowdReportVO(new CrowdReportVO(Converter.convert(CrowdTestReport.class, crowdTestReportDao.findByCodeAndIsDeleted(reportCode, DeletedStatus.isNotDeleted))));
             if (task.get().getStatus() < CrowdTestTaskStatus.HAS_FINISHED)
                 reportDetailsDTO.setOperational(false);
-        } else if (!userRepo.getByID(userId).getRoleList().stream().anyMatch(role -> role.getName().equals(RoleType.REGIONAL_MANAGER))) {
+        } else if (AuthCheckServiceImpl.isAgency(user)) {
             // 测评机构
             Optional<TaskToUser> taskToUserOptional = task.get().getAcceptedUserList().stream().filter(taskToUser -> taskToUser.getUserId().equals(userId)).findFirst();
             if (!taskToUserOptional.isPresent())
@@ -827,10 +830,9 @@ public class WebMediatorImpl implements ViewMediator {
             if (!report.isPresent())
                 throw new CrowdTestReportNotExistException();
             reportDetailsDTO.setCrowdReportVO(new CrowdReportVO(report.get()));
-            if (task.get().getStatus() < CrowdTestTaskStatus.HAS_FINISHED)
+            if (task.get().getStatus() < CrowdTestTaskStatus.HAS_FINISHED && taskToUserOptional.get().getIsCommitted() == 0)
                 reportDetailsDTO.setOperational(true);
         } else {
-            // 区域管理员
             throw new HttpBadRequestException("当前用户无法查看此报告!");
         }
 
@@ -845,16 +847,15 @@ public class WebMediatorImpl implements ViewMediator {
             throw new CrowdTestReportNotExistException();
         ReportDetailsDTO reportDetailsDTO = new ReportDetailsDTO();
         /*
-         如果该项目是已经完成的那么报告是不能修改的这边我在Vo上面加了一个属性Updated
+         如果该项目是已经完成或者已提交的那么报告是不能修改的这边我在Vo上面加了一个属性Updated
          */
-        if (project.getStatus() == CrowdTestProjectStatus.HAS_FINISHED) {
+        if (project.getStatus() == CrowdTestProjectStatus.HAS_FINISHED || project.getStatus() == CrowdTestProjectStatus.HAS_COMMITED) {
             report.setUpdated(false);
         }
         reportDetailsDTO.setCrowdReportVO(new CrowdReportVO(report));
 
-        if (project.getStatus() < CrowdTestProjectStatus.HAS_FINISHED && project.getRegionalManagerId().equals(userId)) {
+        if (project.getStatus() < CrowdTestProjectStatus.HAS_COMMITED && project.getRegionalManagerId().equals(userId)) {
             reportDetailsDTO.setOperational(true);
-
         }
         return reportDetailsDTO;
     }
@@ -890,7 +891,8 @@ public class WebMediatorImpl implements ViewMediator {
         if (userId == null) {
             taskDetailsDTO.setTaskOperationControl(this.initTaskPermission(project, task.get(), null));
         } else {
-            taskDetailsDTO.setTaskOperationControl(this.initTaskPermission(project, task.get(), userRepo.getByID(userId)));
+            User user = userRepo.getByID(userId);
+            taskDetailsDTO.setTaskOperationControl(this.initTaskPermission(project, task.get(), user));
             // 区域管理员视图
             List<TaskToUserVO> taskToUserVOS = new ArrayList<>();
             if (userId.equals(project.getRegionalManagerId())) {
@@ -907,7 +909,7 @@ public class WebMediatorImpl implements ViewMediator {
                 }).collect(Collectors.toList());
             }
             // 测评机构视图
-            else if (userRepo.getByID(userId).getRoleList().stream().anyMatch(role -> role.getName().equals(RoleType.AGENCY.getName()))) {
+            else if (AuthCheckServiceImpl.isAgency(user)) {
 //                Optional<TaskToUser> taskToUserOptional = task.get().getAcceptedUserList().stream().filter(taskToUser -> taskToUser.getUserId().equals(userId)).findFirst();
 //                if(!taskToUserOptional.isPresent())
 //                    throw new HttpBadRequestException("当前用户没有接收此任务!");
@@ -951,6 +953,7 @@ public class WebMediatorImpl implements ViewMediator {
         userDTO.setUserVO(new UserVO(user));
         userDTO.setAuthStatus(new StatusVO());
         userDTO.getAuthStatus().initUserAuthStatus(user);
+
         if (user.getEvaluationAgency() != null)
             userDTO.setAgencyVO(new AgencyVO(user.getEvaluationAgency()));
         if (user.getPersonalAuthentication() != null)
@@ -979,14 +982,13 @@ public class WebMediatorImpl implements ViewMediator {
     @Override
     public List<EvaluationAgencyVO> renderAgencyList() {
         List<EvaluationAgencyVO> agencyList = new ArrayList<>();
-        EvaluationAgency agencyTemplate = evaluationAgencyRepo.findAgencyById(Long.parseLong(agencyId));
         agencyDao.findAll().forEach(evaluationAgencyPO -> {
             EvaluationAgencyVO agencyVO = new EvaluationAgencyVO();
             agencyVO.setId(evaluationAgencyPO.getUserId());
             agencyVO.setEvaluationAgencyName(evaluationAgencyPO.getEvaluationAgencyName());
             agencyList.add(agencyVO);
         });
-        return agencyList.stream().filter(agency -> !agency.getEvaluationAgencyName().equals(agencyTemplate.getEvaluationAgencyName())).collect(Collectors.toList());
+        return agencyList.stream().collect(Collectors.toList());
     }
 
     @Override
@@ -1041,7 +1043,7 @@ public class WebMediatorImpl implements ViewMediator {
     @Override
     public List<CrowdTestProjectVO> findByNameLike(String name) {
         List<CrowdTestProjectVO> authingList = new ArrayList<>();
-        authingList.addAll(projectDao.findByNameLike("%" + name + "%").stream().map(crowdTestProjectPO -> {
+        authingList.addAll(projectDao.findByNameLikeAndIsDeleted("%" + name + "%", DeletedStatus.isNotDeleted).stream().map(crowdTestProjectPO -> {
             CrowdTestProject crowdTestProject = new CrowdTestProject();
             BeanUtils.copyProperties(crowdTestProjectPO, crowdTestProject);
             return new CrowdTestProjectVO(crowdTestProject);
@@ -1065,6 +1067,9 @@ public class WebMediatorImpl implements ViewMediator {
         List<CrowdTestProjectVO> authingList = new ArrayList<>();
         authingList.addAll(projectDao.findAll().stream().map(crowdTestProjectPO ->{
             CrowdTestProject crowdTestProject = new CrowdTestProject();
+//            if(crowdTestProject.getDeadTime().getTime() < System.currentTimeMillis()){
+//
+//            }
             BeanUtils.copyProperties(crowdTestProjectPO, crowdTestProject);
             themeStatusService.updateStatus(crowdTestProject);
             return new CrowdTestProjectVO(crowdTestProject);
@@ -1072,6 +1077,10 @@ public class WebMediatorImpl implements ViewMediator {
         return authingList;
     }
 
+    /**
+     * 更多热门任务
+     * @return
+     */
     @Override
     public List<CrowdTestProjectVO> hotCrowdTestProjects() {
         List<CrowdTestProjectVO> authingList = new ArrayList<>();
@@ -1131,9 +1140,31 @@ public class WebMediatorImpl implements ViewMediator {
     }
 
     @Override
+    public List<UserTaskCountVO> getCount() {
+        List<RankCountInfo> rankCountInfos = taskToUserDao.findTotalCountOfUser();
+        for(int i=0;i<rankCountInfos.size();i++){
+            userTaskCountDao.updateCount(rankCountInfos.get(i).getEntityId(),rankCountInfos.get(i).getCount());
+        }
+        List<UserTaskCountVO> userTaskCountVOList = new ArrayList<>();
+        userTaskCountDao.findAll().forEach(userTaskCountPO ->{
+            UserTaskCountVO userTaskCountVO =new UserTaskCountVO();
+            userTaskCountVO.setId(userTaskCountPO.getId());
+            userTaskCountVO.setUserId(userTaskCountPO.getUserId());
+            userTaskCountVO.setCount(userTaskCountPO.getCount());
+            userTaskCountVO.setType(userTaskCountPO.getType());
+            userTaskCountVOList.add(userTaskCountVO);
+        });
+        return userTaskCountVOList;
+    }
+
+    /**
+     * 众测广场首页展示的众测任务
+     * @return
+     */
+    @Override
     public List<CrowdTaskVO> crowdTaskVos(){
         List<CrowdTaskVO> authingList = new ArrayList<>();
-        authingList.addAll(taskDao.findindexTask().stream().map(crowdTestTaskPO -> {
+        authingList.addAll(taskDao.findindexTask().stream().filter(crowdTestTaskPO -> crowdTestTaskPO.getDeadTime().getTime() > System.currentTimeMillis()).map(crowdTestTaskPO -> {
             //根据code值查询出来该任务的type
             Optional<TestTypePO> serviceType = testTypeDao.findByCode(crowdTestTaskPO.getType());
             CrowdTestTask crowdTestTask = new CrowdTestTask();
@@ -1146,8 +1177,8 @@ public class WebMediatorImpl implements ViewMediator {
 
     @Override
     public List<CrowdTaskVO> crowdTaskVosWaitingAccept() {
-        return taskDao.findAll().stream().filter(crowdTestTaskPO -> crowdTestTaskPO.getStatus() == CrowdTestTaskStatus.HAS_RELEASED
-                && crowdTestTaskPO.getDeadTime().getTime() > System.currentTimeMillis()).map(crowdTestTaskPO -> {
+        List<CrowdTestTaskPO> canAcceptTask = taskDao.findCanAcceptTask();
+        List<CrowdTaskVO> taskVOList = canAcceptTask.stream().filter(crowdTestTaskPO -> crowdTestTaskPO.getDeadTime().getTime() > System.currentTimeMillis()).map(crowdTestTaskPO -> {
             //根据code值查询出来该任务的type
             Optional<TestTypePO> serviceType = testTypeDao.findByCode(crowdTestTaskPO.getType());
             CrowdTestTask crowdTestTask = new CrowdTestTask();
@@ -1155,6 +1186,7 @@ public class WebMediatorImpl implements ViewMediator {
             crowdTestTask.setType(serviceType.get().getName());
             return new CrowdTaskVO(crowdTestTask);
         }).collect(Collectors.toList());
+        return taskVOList;
     }
 
     @Override
@@ -1551,11 +1583,6 @@ public class WebMediatorImpl implements ViewMediator {
             return taskOperationControl;
         }
 
-        //发包机构和发包人员视角
-        if (user.getRoleList().stream().anyMatch(role -> role.getName().equals(RoleType.PARTY_AGENCY.getName()) || role.getName().equals(RoleType.PARTY_USER.getName())) && task.getStatus() != CrowdTestTaskStatus.HAS_REJECTED) {
-            return taskOperationControl;
-        }
-
         //区域管理员或系统管理员视角
         if (user.getRoleList().stream().anyMatch(role -> role.getName().equals("SystemAdministrator"))
                 || (user.getRegionalManager() != null && user.getId().equals(project.getRegionalManagerId()))) {
@@ -1570,8 +1597,9 @@ public class WebMediatorImpl implements ViewMediator {
                 taskOperationControl.setConfirmFinish(false);
             }
         }
-        //评测机构和测评人员视角 //??? 已拒绝视图
-        else if (user.getRoleList().stream().anyMatch(role -> role.getName().equals("evaluationAgency") || role.getName().equals(RoleType.EVALUATION_USER.getName())) && task.getStatus() != CrowdTestTaskStatus.HAS_REJECTED) {
+        // TODO 已拒绝视图
+        //评测机构和测评人员视角
+        else if (AuthCheckServiceImpl.isAgency(user) && task.getStatus() != CrowdTestTaskStatus.HAS_REJECTED) {
             if ((task.getDistributionType() == 0 && task.getEvaluationAgencyId().equals(user.getId()))
                     || (task.getDistributionType() == 2 && task.getStatus() >= CrowdTestTaskStatus.HAS_RECEIVED)) {
                 List<TaskToUser> acceptedUserList = task.getAcceptedUserList();
@@ -1596,13 +1624,18 @@ public class WebMediatorImpl implements ViewMediator {
                     }
                 } else {
                     // 未接收用户
-                    taskOperationControl.setReceive(true);
-                    if (task.getStatus() == CrowdTestTaskStatus.HAS_RELEASED) {
-                        // 定向的
-                        if (task.getDistributionType() == 0) {
-                            taskOperationControl.setReject(true);
+                    if(task.getFullStatus() == 1){
+                        taskOperationControl.noAll();
+                    }else{
+                        taskOperationControl.setReceive(true);
+                        if (task.getStatus() == CrowdTestTaskStatus.HAS_RELEASED) {
+                            // 定向的
+                            if (task.getDistributionType() == 0) {
+                                taskOperationControl.setReject(true);
+                            }
                         }
                     }
+
                 }
 
             } else if (task.getDistributionType() == 2) {
@@ -1615,6 +1648,10 @@ public class WebMediatorImpl implements ViewMediator {
                 }
             }
         }
+        //发包机构和发包人员视角
+        else if (AuthCheckServiceImpl.isPart(user) && task.getStatus() != CrowdTestTaskStatus.HAS_REJECTED) {
+            return taskOperationControl;
+        }
 
         System.out.println(taskOperationControl);
         return taskOperationControl;

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

@@ -16,7 +16,7 @@ import java.util.List;
  */
 public interface AgencyService {
 
-    EvaluationAgencyVO   getDetailById(long agencyId);
+    EvaluationAgencyVO getDetailById(long agencyId);
 
     List<EvaluationAgencyVO> findMoreAgencyVO(String keyword);
 

+ 11 - 0
site/src/main/java/com/mooctest/crowd/site/service/AuthCheckService.java

@@ -0,0 +1,11 @@
+package com.mooctest.crowd.site.service;
+
+
+import com.mooctest.crowd.domain.domainobject.User;
+
+public interface AuthCheckService {
+
+    Boolean isAgency(User user);
+
+    Boolean isPart(User user);
+}

+ 5 - 2
site/src/main/java/com/mooctest/crowd/site/service/CommonService.java

@@ -30,8 +30,6 @@ public interface CommonService {
 
     Page<CrowdProjectVO> getProjectInfo(Pageable pageable, String keyword, int deletedStatus);
 
-    Page<CrowdTaskVO> getTaskinfo(Pageable pageable, String keyword, int deletedStatus);
-
     List<ApplicationTypeVO> getHotTesting(String keyword);
 
     Page<CompetitionVO> getCompetition(Pageable pageable,String keyword);
@@ -48,4 +46,9 @@ public interface CommonService {
 
     DataDTO getAllData();
 
+    List<UserTaskCountVO> getCount();
+
+    Boolean checkCreateProject(Long userId);
+
+    Boolean checkAcceptTask(Long userId);
 }

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

@@ -14,12 +14,8 @@ import java.util.List;
  */
 public interface CrowdTaskService {
 
-List<CrowdTaskVO> findIndexCrwodTasks();
-
     List<CrowdTaskVO> findMoreHotTasks();
 
-    List<CrowdTaskVO> findIndexTask();
-
      List<CrowdTaskVO> findAll();
 
      List<CrowdTaskVO> findByNameLike(String name);

+ 43 - 23
site/src/main/java/com/mooctest/crowd/site/service/impl/AgencyServiceImpl.java

@@ -4,10 +4,8 @@ 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.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.UserTaskCountPO;
 import com.mooctest.crowd.domain.repository.EvaluationAgencyRepo;
 import com.mooctest.crowd.domain.repository.UserRepo;
@@ -25,13 +23,11 @@ import com.mooctest.crowd.site.mediator.ViewMediator;
 import com.mooctest.crowd.site.service.AgencyService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
-import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
@@ -55,6 +51,8 @@ public class AgencyServiceImpl implements AgencyService {
 
     @Autowired
     private ViewMediator mediator;
+    @Autowired
+    private TestTypeDao testTypeDao;
 
     @Autowired
     private EvaluationAgencyRepo evaluationAgencyRepo;
@@ -65,28 +63,50 @@ public class AgencyServiceImpl implements AgencyService {
     @Autowired
     private UserTaskCountDao userTaskCountDao;
 
-    @Value("${agency}")
-    private String agencyId;
-
     @Override
-    public EvaluationAgencyVO getDetailById(long agencyId) {
+    public EvaluationAgencyVO getDetailById(long userId) {
+        EvaluationAgency agency = evaluationAgencyRepo.findAgencyByUserId(userId);
+        EvaluationAgencyVO agencyVO = new EvaluationAgencyVO(agency);
         /*
-        先根据机构id查询出机构信息,再从task-to-user表里面找到这个机构的接的任务的数量。
+        先根据机构的userId查询出机构信息,再从user_task_count表里面找到这个机构的接的任务的数量。
          */
-        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] == agencyVO.getUserId()) {
-                agencyVO.setTaskCount(rankCountInfoList.get(i).getCount());
-            }
-        }
+        UserTaskCount taskCountByUserId = userRepo.getUserTaskCountByUserId(userId);
+        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;
     }
 

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

@@ -0,0 +1,52 @@
+package com.mooctest.crowd.site.service.impl;
+
+import com.mooctest.crowd.domain.domainobject.User;
+import com.mooctest.crowd.site.data.enums.RoleType;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author:xx
+ * @date:2020/7/8
+ * @description:
+ */
+@Slf4j
+@Service
+public class AuthCheckServiceImpl{
+
+    public static Boolean isAgency(User user) {
+        if(user.getRoleList().stream().anyMatch(role -> role.getName().equals(RoleType.AGENCY.getName()) ||
+                role.getName().equals(RoleType.EVALUATION_USER.getName()))){
+            return true;
+        }
+        return false;
+    }
+
+    public static Boolean isPart(User user) {
+        if(user.getRoleList().stream().anyMatch(role -> role.getName().equals(RoleType.PARTY_AGENCY.getName()) ||
+                role.getName().equals(RoleType.PARTY_USER.getName()))){
+            return true;
+        }
+        return false;
+    }
+
+    public static Boolean canCreateProject(User user) {
+        if(user.getRoleList().stream().anyMatch(role -> role.getName().equals(RoleType.PARTY_AGENCY.getName()) ||
+                role.getName().equals(RoleType.PARTY_USER.getName()) ||
+                role.getName().equals(RoleType.SYSTEM_ADMIN.getName()) ||
+                role.getName().equals(RoleType.REGIONAL_MANAGER.getName()))){
+            return true;
+        }
+        return false;
+    }
+
+    public static Boolean canAcceptTask(User user) {
+        if(user.getRoleList().stream().anyMatch(role -> role.getName().equals(RoleType.AGENCY.getName()) ||
+                role.getName().equals(RoleType.ENTERPRISE_USER.getName()) ||
+                role.getName().equals(RoleType.SYSTEM_ADMIN.getName()) ||
+                role.getName().equals(RoleType.REGIONAL_MANAGER.getName()))){
+            return true;
+        }
+        return false;
+    }
+}

+ 28 - 5
site/src/main/java/com/mooctest/crowd/site/service/impl/CommonServiceImpl.java

@@ -3,6 +3,9 @@ package com.mooctest.crowd.site.service.impl;
 import com.mooctest.crowd.domain.dao.CrowdTestProjectDao;
 import com.mooctest.crowd.domain.dao.ResourceTypeDao;
 import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
+import com.mooctest.crowd.domain.domainobject.User;
+import com.mooctest.crowd.domain.exception.HaveNotAgencyAuthException;
+import com.mooctest.crowd.domain.exception.HaveNotPartAuthException;
 import com.mooctest.crowd.domain.model.ResourceTypePO;
 import com.mooctest.crowd.domain.repository.*;
 import com.mooctest.crowd.site.constants.CommonConstant;
@@ -128,11 +131,6 @@ public class CommonServiceImpl implements CommonService {
     }
 
     @Override
-    public Page<CrowdTaskVO> getTaskinfo(Pageable pageable, String keyword, int deletedStatus) {
-        return   taskRepo.findAllByPage(pageable,keyword,deletedStatus).map(crowdTestTask -> new CrowdTaskVO(crowdTestTask));
-    }
-
-    @Override
     public List<ApplicationTypeVO> getHotTesting(String keyword) {
 
         Pageable pageable = PageRequest.of(0, CommonConstant.HOT_CROWD_ROWS_ON_PAGE);
@@ -198,6 +196,31 @@ public class CommonServiceImpl implements CommonService {
         return dataDTO;
     }
 
+    @Override
+    public List<UserTaskCountVO> getCount() {
+        return viewMediator.getCount();
+    }
+
+    @Override
+    public Boolean checkCreateProject(Long userId) {
+        User user = userRepo.getByID(userId);
+        Boolean isPart = AuthCheckServiceImpl.canCreateProject(user);
+        if(!isPart){
+            throw new HaveNotPartAuthException();
+        }
+        return isPart;
+    }
+
+    @Override
+    public Boolean checkAcceptTask(Long userId) {
+        User user = userRepo.getByID(userId);
+        Boolean isAgency = AuthCheckServiceImpl.canAcceptTask(user);
+        if(!isAgency){
+            throw new HaveNotAgencyAuthException();
+        }
+        return isAgency;
+    }
+
     Pageable getPageable(SearchConditionVO searchConditionVO) {
         int activePage = searchConditionVO.getActivePage() == 0 ? 1 : searchConditionVO.getActivePage();
         Sort sort = new Sort(Sort.Direction.DESC, "id");

+ 41 - 26
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdProjectServiceImpl.java

@@ -6,9 +6,9 @@ import com.mooctest.crowd.domain.domainobject.*;
 import com.mooctest.crowd.domain.exception.BadRequestException;
 import com.mooctest.crowd.domain.exception.BaseException;
 import com.mooctest.crowd.domain.exception.Excel2ProjectException;
+import com.mooctest.crowd.domain.exception.HaveNotPartAuthException;
 import com.mooctest.crowd.domain.factory.CrowdTestProjectFactory;
 import com.mooctest.crowd.domain.model.UserTaskCountPO;
-import com.mooctest.crowd.domain.model.UserToRolePO;
 import com.mooctest.crowd.domain.repository.CommonRepo;
 import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
 import com.mooctest.crowd.domain.repository.UserRepo;
@@ -55,7 +55,7 @@ import java.util.stream.Collectors;
 @Service
 public class CrowdProjectServiceImpl implements CrowdProjectService {
     @Autowired
-    private  CrowdTestProjectDao projectDao;
+    private CrowdTestProjectDao projectDao;
 
     @Autowired
     private UserToRoleDao userToRoleDao;
@@ -90,6 +90,12 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     @Autowired
     private ThemeSchedulerService themeSchedulerService;
 
+    /**
+     * 众测广场首页展示的项目
+     *
+     * @return
+     */
+
     @Override
     public List<CrowdTestProjectVO> findIndexProject() {
         List<CrowdTestProjectVO> authingList = new ArrayList<>();
@@ -101,13 +107,20 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
         return authingList;
     }
 
+
+    /**
+     * 更多热门项目
+     *
+     * @return
+     */
+
     @Override
     public List<CrowdTestProjectVO> findAllMoreHotProjects() {
         return viewMediator.hotCrowdTestProjects();
     }
 
     @Override
-    public List<CrowdProjectVO> findAllMoreHotProjectList(String keyword){
+    public List<CrowdProjectVO> findAllMoreHotProjectList(String keyword) {
         List<CrowdProjectVO> crowdProjectVOS = projectDao.findAllHotProject().stream().map(crowdTestProjectPO -> {
             CrowdTestProject crowdTestProject = new CrowdTestProject();
             BeanUtils.copyProperties(crowdTestProjectPO, crowdTestProject);
@@ -116,8 +129,8 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
             crowdTestProject.setApplicationType(applicationName);
             return new CrowdProjectVO(crowdTestProject);
         }).collect(Collectors.toList());
-        if(keyword != null && keyword != ""){
-            System.out.println("keyword  " +  keyword);
+        if (keyword != null && keyword != "") {
+            System.out.println("keyword  " + keyword);
             crowdProjectVOS = crowdProjectVOS.stream().filter(crowdProjectVO -> crowdProjectVO.getName().contains(keyword)).collect(Collectors.toList());
         }
         return crowdProjectVOS;
@@ -125,11 +138,9 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
 
     @Override
     public List<CrowdTestProjectVO> findByNameLike(String name) {
-        if (name == null || name.trim().equals("")){
-            System.out.println("进来进来");
+        if (name == null || name.trim().equals("")) {
             return viewMediator.AllByPage();
         }
-
         return viewMediator.findByNameLike(name);
 
     }
@@ -163,10 +174,9 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     @Override
     public ProjectDetailsDTO createCrowdProject(CrowdTestProjectCommand command, long userId) {
         // 获取用户所有角色
-        List<UserToRolePO> userToRole = userToRoleDao.findByUserId(userId);
-        if(userToRole.stream().anyMatch(userToRolePO -> userToRolePO.getRoleId().equals(RoleType.PARTY_USER.getId()) ||
-                userToRolePO.getRoleId().equals(RoleType.PARTY_AGENCY.getId()) || userToRolePO.getRoleId().equals(RoleType.AGENCY.getId()) ||
-                userToRolePO.getRoleId().equals(RoleType.REGIONAL_MANAGER.getId()) || userToRolePO.getRoleId().equals(RoleType.SYSTEM_ADMIN.getId()))){
+//        List<UserToRolePO> userToRole = userToRoleDao.findByUserId(userId);
+        User user = userRepo.getByID(userId);
+        if (AuthCheckServiceImpl.canCreateProject(user)) {
             CrowdTestProject project = command.toCrowdProject();
             project.setStatus(CrowdTestProjectStatus.HAS_RELEASED);
             log.info("\n" + project.toString() + "\n");
@@ -180,8 +190,8 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
             projectDetailsDTO.setProjectDetails(new CrowdProjectVO(project));
             themeSchedulerService.createNewThemeScheduler(project);
             return projectDetailsDTO;
-        }else{
-            throw new BaseException("用户权限不足无法创建项目,需要认证为发包用户或者发包机构!");
+        } else {
+            throw new HaveNotPartAuthException();
         }
     }
 
@@ -358,29 +368,34 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
         CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
 
         // 更新项目下测评机构或者测试人员的接包次数
-        project.getCrowdTestTaskList().stream().map(crowdTestTask -> {
+        List<CrowdTestTask> crowdTestTasks = project.getCrowdTestTaskList();
+        for(CrowdTestTask crowdTestTask : crowdTestTasks) {
             List<TaskToUser> acceptedUserList = crowdTestTask.getAcceptedUserList();
-            acceptedUserList.stream().map(taskToUser -> {
+            for (TaskToUser taskToUser : acceptedUserList) {
                 User user = userRepo.getByID(taskToUser.getUserId());
-                // 对用户判断认证类型 测评机构为1 测试人员为2
 
+                // 对用户判断认证类型 测评机构为2 测试人员为6
                 Optional<UserTaskCountPO> userTaskCountPOOptional = userTaskCountDao.findByUserId(user.getId());
                 if (!userTaskCountPOOptional.isPresent()) {
-                    UserTaskCount userTaskCount = new UserTaskCount(user.getId(), 1L, RoleType.EVALUATION_USER.getId());
+                    Long roleType = 2L;
+                    if (user.getRoleList().stream().anyMatch(role -> role.getName().equals(RoleType.EVALUATION_USER.getName()))) {
+                        roleType = RoleType.EVALUATION_USER.getId();
+                    } else if (user.getRoleList().stream().anyMatch(role -> role.getName().equals(RoleType.AGENCY.getName()))) {
+                        roleType = RoleType.AGENCY.getId();
+                    }
+                    UserTaskCount userTaskCount = new UserTaskCount(user.getId(), 1L, roleType);
                     userTaskCountDao.save(Converter.convert(UserTaskCountPO.class, userTaskCount));
                 } else {
                     UserTaskCountPO userTaskCountPO = userTaskCountPOOptional.get();
                     userTaskCountPO.setCount(userTaskCountPO.getCount() + 1);
                     userTaskCountDao.save(userTaskCountPO);
                 }
-                return null;
-            });
-            return null;
-        }).collect(Collectors.toList());
-
-        project.finishCrowdTestProject(userRepo.getByID(userId));
-        projectRepo.saveCrowdTestProject(project);
-        return getProjectDetails(projectCode, userId);
+            }
+            project.finishCrowdTestProject(userRepo.getByID(userId));
+            projectRepo.saveCrowdTestProject(project);
+            return getProjectDetails(projectCode, userId);
+        }
+        return null;
     }
 
     @Override

+ 25 - 44
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTaskServiceImpl.java

@@ -1,7 +1,6 @@
 package com.mooctest.crowd.site.service.impl;
 
 import com.mooctest.crowd.domain.dao.CrowdTestTaskDao;
-import com.mooctest.crowd.domain.dao.EvaluationAgencyDao;
 import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTaskStatus;
@@ -17,7 +16,6 @@ import com.mooctest.crowd.site.command.CrowdTestTaskCommand;
 import com.mooctest.crowd.site.data.dto.TaskDetailsDTO;
 import com.mooctest.crowd.site.data.dto.TaskSquareDTO;
 import com.mooctest.crowd.site.data.enums.ProjectType;
-import com.mooctest.crowd.site.data.enums.RoleType;
 import com.mooctest.crowd.site.data.vo.CrowdTaskVO;
 import com.mooctest.crowd.site.mediator.ViewMediator;
 import com.mooctest.crowd.site.service.CrowdTaskService;
@@ -27,7 +25,6 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 import java.util.stream.Collectors;
@@ -49,6 +46,9 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
     CrowdTestProjectRepo projectRepo;
 
     @Autowired
+    CrowdTestTaskRepo crowdTestTaskRepo;
+
+    @Autowired
     CrowdTestTaskDao taskDao;
 
     @Autowired
@@ -58,24 +58,15 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
     private ViewMediator viewMediator;
 
     @Autowired
-    private EvaluationAgencyDao agencyDao;
-
-    @Autowired
     private CommonRepo commonRepo;
 
-
-    @Override
-    public List<CrowdTaskVO> findIndexCrwodTasks() {
-        return  viewMediator.findIndexTask();
-    }
-
     @Override
-    public List<CrowdTaskVO> findMoreHotTasks(){
-           return  viewMediator.findMoreHotTasks();
+    public List<CrowdTaskVO> findMoreHotTasks() {
+        return viewMediator.findMoreHotTasks();
     }
 
     @Override
-    public List<CrowdTaskVO> findMoreHotTasksList(String keyword){
+    public List<CrowdTaskVO> findMoreHotTasksList(String keyword) {
         List<CrowdTaskVO> crowdTaskVOS = taskDao.findMoreHotTasksList().stream().map(crowdTestTaskPO -> {
             CrowdTestTask task = new CrowdTestTask();
             BeanUtils.copyProperties(crowdTestTaskPO, task);
@@ -83,35 +74,22 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
             task.setType(typeName);
             return new CrowdTaskVO(task);
         }).collect(Collectors.toList());
-        if(keyword != null && keyword != ""){
+        if (keyword != null && keyword != "") {
             crowdTaskVOS = crowdTaskVOS.stream().filter(crowdTaskVO -> crowdTaskVO.getTitle().contains(keyword)).collect(Collectors.toList());
         }
         return crowdTaskVOS;
     }
 
-
-    @Override
-    public List<CrowdTaskVO> findIndexTask() {
-        List<CrowdTaskVO> authingList = new ArrayList<>();
-        authingList.addAll(taskDao.findindexTask().stream().map(crowdTestProjectPO -> {
-            CrowdTestTask crowdTestTask = new CrowdTestTask();
-            BeanUtils.copyProperties(crowdTestProjectPO, crowdTestTask);
-            return new CrowdTaskVO(crowdTestTask);
-        }).collect(Collectors.toList()));
-        return authingList;
-    }
-
     @Override
     public List<CrowdTaskVO> findAll() {
-        return   viewMediator.crowdTaskVos();
+        return viewMediator.crowdTaskVos();
     }
 
     @Override
     public List<CrowdTaskVO> findByNameLike(String name) {
-        if(name==null||name.trim().equals("")){
-            log.info("没有关键字");
-            return  viewMediator.crowdTaskVos();
-        }else if(name!=null) {
+        if (name == null || name.trim().equals("")) {
+            return viewMediator.crowdTaskVosWaitingAccept();
+        } else if (name != null) {
             return viewMediator.findTaskByNameLike(name);
         }
         return null;
@@ -126,7 +104,7 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
     public TaskDetailsDTO createTask(String projectCode, CrowdTestTaskCommand command, Long userId) {
         CrowdTestTask task = command.toCrowdTask(projectCode);
         CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
-        String taskCode = GenerateFlowCodeUtil.generateFlowCode("TASK-"+ ProjectType.getCode(command.getType()));
+        String taskCode = GenerateFlowCodeUtil.generateFlowCode("TASK-" + ProjectType.getCode(command.getType()));
         task.create(taskCode);
         project.addTask(task);
         projectRepo.saveCrowdTestProject(project);
@@ -141,15 +119,18 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
             throw new CrowdTestTaskNotExistException();
         if (task.get().getStatus() == CrowdTestTaskStatus.HAS_FINISHED)
             throw new BaseException("禁止修改已结束的任务!");
+
         CrowdTestTask updateTask = command.toCrowdTask(projectCode);
+        // 定向任务被拒绝,更新时需要删除任务中的taskToUser  acceptedUserList
+        if (task.get().getDistributionType().equals(DistributeType.DIRECT.getId())) {
+            crowdTestTaskRepo.deleteTaskToUser(task.get().getAcceptedUserList().get(0));
+        }
+
         updateTask.setId(task.get().getId());
         updateTask.setCode(taskCode);
         updateTask.setCreateTime(task.get().getCreateTime());
-        updateTask.setRequirementFile(task.get().getRequirementFile());
-        updateTask.setStatus(task.get().getStatus());
-        if (updateTask.getDistributionType() == DistributeType.DIRECT.getId()){
-            updateTask.setParticipantCount(1);
-        }
+        updateTask.setStatus(CrowdTestTaskStatus.HAS_RELEASED);
+        updateTask.update();
         project.removeTask(task.get());
         project.addTask(updateTask);
         projectRepo.saveCrowdTestProject(project);
@@ -158,7 +139,7 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
 
     @Override
     public TaskSquareDTO getAllTasks() {
-       return viewMediator.renderTaskSquare();
+        return viewMediator.renderTaskSquare();
     }
 
     @Override
@@ -166,7 +147,7 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
         CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
         CrowdTestTask task = project.getTask(taskCode);
         task.receive(userRepo.getByID(userId));
-        project.setJoinCount(project.getJoinCount()+1);
+        project.setJoinCount(project.getJoinCount() + 1);
         projectRepo.saveCrowdTestProject(project);
         return getTaskDetails(projectCode, taskCode, userId);
     }
@@ -176,7 +157,7 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
         CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
         CrowdTestTask task = project.getTask(taskCode);
         task.reject(userId);
-        project.setRestPrice(project.getRestPrice()+task.getQuotedPrice());
+//        project.setRestPrice(project.getRestPrice() + task.getQuotedPrice());
         projectRepo.saveCrowdTestProject(project);
     }
 
@@ -184,10 +165,10 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
     public TaskDetailsDTO commitTask(String projectCode, String taskCode, Long userId) {
         CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
         CrowdTestTask task = project.getTask(taskCode);
-        if(userId.equals(project.getRegionalManagerId())){
+        if (userId.equals(project.getRegionalManagerId())) {
             // 区域管理员提交任务
             task.commitByRegionalManager();
-        }else if(userRepo.getByID(userId).getRoleList().stream().anyMatch(role -> role.getName().equals(RoleType.AGENCY.getName()))){
+        } else if (AuthCheckServiceImpl.isAgency(userRepo.getByID(userId))) {
             // 测评机构提交任务
             task.commitByAgency(taskCode, userId);
         }

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

@@ -2,7 +2,6 @@ package com.mooctest.crowd.site.service.impl;
 
 import com.mooctest.crowd.site.constants.CommonConstant;
 import com.mooctest.crowd.site.data.ColumnFilter;
-import com.mooctest.crowd.site.data.dto.ProjectAndTaskDTO;
 import com.mooctest.crowd.site.data.enums.ColumnFilterType;
 import com.mooctest.crowd.site.data.response.ResponseVO;
 import com.mooctest.crowd.site.data.response.ServerCode;
@@ -20,7 +19,6 @@ 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;
@@ -38,22 +36,27 @@ public class CrowdTestSquareServiceImpl implements CrowdTestSquareService {
     @Autowired
     private CrowdTaskService crowdTaskService;
 
+
+    /**
+     * 任务和项目的模糊查询
+     *
+     * @param searchConditionVO
+     * @return
+     */
     @Override
-    public ResponseVO findByNameLike(SearchConditionVO searchConditionVO){
-        Map<String, String> extraCondition = searchConditionVO.getColumnFilters() == null ? new HashMap<>() : this.getExtraCondition(searchConditionVO);
+    public ResponseVO findByNameLike(SearchConditionVO searchConditionVO) {
         Pageable pageable = this.getPageable(searchConditionVO);
         String keyword = searchConditionVO.getKeyword();
-        List projectAndTaskDTOList = new ArrayList<>();
         if (searchConditionVO.getColumnFilters().get(0).getType().equals("project")) {
             List<CrowdTestProjectVO> list = crowdProjectService.findByNameLike(keyword);
             Page<CrowdTestProjectVO> projectVOPage = DataUtils.listToPage(list, pageable);
             return new ResponseVO<>(ServerCode.SUCCESS, projectVOPage);
-        } else if (searchConditionVO.getColumnFilters().get(0).getType().equals("task")){
+        } else if (searchConditionVO.getColumnFilters().get(0).getType().equals("task")) {
             List<CrowdTaskVO> taskVOList = crowdTaskService.findByNameLike(keyword);
             Page<CrowdTaskVO> crowdTaskVOPage = DataUtils.listToPage(taskVOList, pageable);
             return new ResponseVO(ServerCode.SUCCESS, crowdTaskVOPage);
         }
- return null;
+        return null;
     }
 
 

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

@@ -10,8 +10,8 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
-
 import java.awt.*;
+import java.util.UUID;
 
 /**
  * @author: Diors.Po
@@ -30,8 +30,7 @@ public class OSSUploadServiceImpl implements UploadService {
 
     @Override
     public String uploadImage(MultipartFile file, Long userId) {
-        String fileName = UploadType.IMAGE+file.getOriginalFilename().substring(0,file.getOriginalFilename().lastIndexOf("."))+"_"
-                +userId+"_"
+        String fileName = UploadType.IMAGE+userId+"_"+UUID.randomUUID()+"_"
                 +System.currentTimeMillis()+""
                 +file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."), file.getOriginalFilename().length());
         return doUpload(fileName, file);

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

@@ -6,13 +6,10 @@ import com.mooctest.crowd.domain.domainobject.CrowdTestProjectStatus;
 import com.mooctest.crowd.domain.model.CrowdTestProjectPO;
 import com.mooctest.crowd.site.service.ThemeStatusService;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.sql.Timestamp;
-import java.text.SimpleDateFormat;
-import java.util.Date;
 import java.util.Optional;
 
 /**
@@ -31,7 +28,6 @@ public class ThemeStatusServiceImpl implements ThemeStatusService {
     public Integer updateStatus(CrowdTestProject crowdTestProject) {
 
         int status = 0;
-
         long curr = System.currentTimeMillis();
         if ((crowdTestProject.getDeadTime().before(new Timestamp(System.currentTimeMillis())))) {
            Optional<CrowdTestProjectPO> crowdTestProjectPO =crowdTestProjectDao.findById(crowdTestProject.getId());

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
site/src/main/java/com/mooctest/crowd/site/service/impl/UserServiceImpl.java


Някои файлове не бяха показани, защото твърде много файлове са промени