瀏覽代碼

Merge branch 'feature-jump' into 'Dev'

Feature jump

See merge request crowd-2019/crowd-test-service-backend!127
郭超 5 年之前
父節點
當前提交
4bfda80b62
共有 31 個文件被更改,包括 497 次插入62 次删除
  1. 3 3
      core/src/main/java/com/mooctest/crowd/domain/dao/CrowdTestProjectDao.java
  2. 3 4
      core/src/main/java/com/mooctest/crowd/domain/dao/CrowdTestTaskDao.java
  3. 24 0
      core/src/main/java/com/mooctest/crowd/domain/dao/EndPointDao.java
  4. 0 2
      core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestProject.java
  5. 6 1
      core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestTask.java
  6. 13 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/EndPoint.java
  7. 2 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/TestType.java
  8. 34 0
      core/src/main/java/com/mooctest/crowd/domain/model/EndPointPO.java
  9. 6 0
      core/src/main/java/com/mooctest/crowd/domain/model/TestTypePO.java
  10. 35 12
      core/src/main/java/com/mooctest/crowd/domain/repository/CommonRepo.java
  11. 94 1
      core/src/main/java/com/mooctest/crowd/domain/repository/CrowdTestProjectRepo.java
  12. 9 0
      core/src/main/java/com/mooctest/crowd/domain/repository/ICrowdTestProjectRepo.java
  13. 21 0
      site/src/main/java/com/mooctest/crowd/site/command/CrowdTestTaskCommand.java
  14. 16 0
      site/src/main/java/com/mooctest/crowd/site/command/EndPointCommand.java
  15. 0 0
      site/src/main/java/com/mooctest/crowd/site/controller/CommonController.java
  16. 7 0
      site/src/main/java/com/mooctest/crowd/site/controller/CrowdTaskController.java
  17. 2 0
      site/src/main/java/com/mooctest/crowd/site/data/TaskOperationControl.java
  18. 2 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTaskVO.java
  19. 20 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/EndPointVO.java
  20. 4 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/TestTypeVO.java
  21. 4 0
      site/src/main/java/com/mooctest/crowd/site/mediator/ViewMediator.java
  22. 76 29
      site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java
  23. 1 1
      site/src/main/java/com/mooctest/crowd/site/service/CommonService.java
  24. 2 0
      site/src/main/java/com/mooctest/crowd/site/service/CrowdTaskService.java
  25. 16 0
      site/src/main/java/com/mooctest/crowd/site/service/EndPointService.java
  26. 9 3
      site/src/main/java/com/mooctest/crowd/site/service/impl/CommonServiceImpl.java
  27. 4 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdProjectServiceImpl.java
  28. 10 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdReportServiceImpl.java
  29. 25 3
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTaskServiceImpl.java
  30. 46 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/EndPointServiceImpl.java
  31. 3 3
      site/src/main/resources/application.yml

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

@@ -35,15 +35,15 @@ public interface CrowdTestProjectDao extends CrudRepository<CrowdTestProjectPO,
     List<CrowdTestProjectPO> findAll();
 
     //这个指定了查询条数 适用于众测广场首页 这样性能会高一点。
-    @Query(value = "SELECT * FROM crowd_test_project p WHERE CTP_STATUS =1 and CTP_PDT_ID = 2 and CTP_IS_DELETED = 0 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_CREATE_TIME DESC LIMIT 6; ", nativeQuery = true)
     List<CrowdTestProjectPO> findindexProject();
 
 
-    @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)
+    @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_STATUS ASC, CTP_CREATE_TIME DESC; ", nativeQuery = true)
     List<CrowdTestProjectPO> findAllHotProject();
 
     //这个指定了查询条数 适用于众测广场首页 这样性能会高一点对应热门项目
-    @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)
+    @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 6; ", nativeQuery = true)
     List<CrowdTestProjectPO> findall();
 
     CrowdTestProjectPO findByIdAndIsDeleted(Long id, int isDeleted);

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

@@ -33,16 +33,15 @@ public interface CrowdTestTaskDao extends CrudRepository<CrowdTestTaskPO, Long>,
     List<CrowdTestTaskPO> findindexTask();
 
 
-    //热门任务
-    @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)
+    @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", 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)
+    @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 6", nativeQuery = true)
     List<CrowdTestTaskPO> findMoreHotTasks();
 
     //热门任务
-    @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)
+    @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_STATUS ASC ,CTT_CREATE_TIME DESC", nativeQuery = true)
     List<CrowdTestTaskPO> findMoreHotTasksList();
 
     List<CrowdTestTaskPO> findByNameLike(String name);

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

@@ -0,0 +1,24 @@
+package com.mooctest.crowd.domain.dao;
+
+import com.mooctest.crowd.domain.model.EndPointPO;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.data.repository.query.Param;
+
+import javax.transaction.Transactional;
+import java.util.Optional;
+
+
+@Transactional
+public interface EndPointDao extends PagingAndSortingRepository<EndPointPO, Long> ,CrudRepository<EndPointPO, Long>, JpaRepository<EndPointPO, Long> ,JpaSpecificationExecutor<EndPointPO>{
+    Optional<EndPointPO> findByTaskCode(String code);
+
+    @Modifying
+    @Query(nativeQuery = true,value="delete from end_point where EP_T_CODE=?")
+    void deleteEndPoint(@Param("taskCode") String code);
+
+}

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

@@ -54,7 +54,6 @@ public class CrowdTestProject {
     private int isDeleted;
     private int joinCount;
     private Timestamp createTime;
-
     private List<CrowdTestTask> crowdTestTaskList;
     private CrowdTestReport crowdTestReportForProject;
 
@@ -264,7 +263,6 @@ public class CrowdTestProject {
         this.getCrowdTestTaskList().add(task);
     }
 
-
     public void removeTask(CrowdTestTask task) {
         this.setRestPrice(this.getRestPrice() + task.getQuotedPrice());
         this.getCrowdTestTaskList().remove(task);

+ 6 - 1
core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestTask.java

@@ -45,6 +45,7 @@ public class CrowdTestTask {
     private int acceptedCount;
     private int participantHasCommittedCount;
     private List<TaskToUser> acceptedUserList = new ArrayList<>();
+    private EndPoint endPoint;
 //    private List<CrowdTestReport> crowdTestReportList = new ArrayList<>();
 
     @Override
@@ -185,7 +186,11 @@ public class CrowdTestTask {
     }
 
     public void confirmFinish() {
-        if ((this.getParticipantHasCommittedCount() == this.getAcceptedCount() && this.getStatus() == CrowdTestTaskStatus.HAS_RECEIVED) || (this.getParticipantHasCommittedCount() == this.getParticipantCount() && this.getStatus() == CrowdTestTaskStatus.HAS_COMMITED)) {
+        // 具有配置项,管理员可以结束任务
+        if(this.getEndPoint() != null){
+            this.setStatus(CrowdTestTaskStatus.HAS_FINISHED);
+            this.setEndTime(new Timestamp(System.currentTimeMillis()));
+        } else 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 {

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

@@ -0,0 +1,13 @@
+package com.mooctest.crowd.domain.domainobject;
+
+import lombok.Data;
+
+@Data
+public class EndPoint {
+    private Long id;
+    private String projectCode;
+    private String taskCode;
+    private String caseId;
+    private String examId;
+    private String serverCode;
+}

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

@@ -12,4 +12,6 @@ public class TestType {
     private String code;
     private String name;
     private String introduction;
+    private int type; //0-无跳转 1-有跳转
+    private String url;
 }

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

@@ -0,0 +1,34 @@
+package com.mooctest.crowd.domain.model;
+
+import lombok.Data;
+
+import javax.persistence.*;
+
+
+@Data
+@Entity
+@Table(name = "end_point")
+public class EndPointPO {
+
+    @Id
+    @Column(name = "EP_ID")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @Column(name = "EP_P_CODE")
+    private String projectCode;
+
+    @Column(name = "EP_T_CODE")
+    private String taskCode;
+
+    @Column(name = "EP_CASEID")
+    private String caseId;
+
+    @Column(name = "EP_EXAMID")
+    private String examId;
+
+    @Column(name = "EP_SERVER_CODE")
+    private String serverCode;
+
+
+}

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

@@ -24,4 +24,10 @@ public class TestTypePO {
 
     @Column(name = "TT_INTRODUCTION")
     private String introduction;
+
+    @Column(name = "TT_TYPE")
+    private int type; //0-无跳转 1-有跳转
+
+    @Column(name = "TT_URL")
+    private String url;
 }

+ 35 - 12
core/src/main/java/com/mooctest/crowd/domain/repository/CommonRepo.java

@@ -2,13 +2,17 @@ package com.mooctest.crowd.domain.repository;
 
 import com.mooctest.crowd.domain.dao.*;
 import com.mooctest.crowd.domain.domainobject.*;
-import com.mooctest.crowd.domain.exception.*;
+import com.mooctest.crowd.domain.exception.ApplicationTypeNoExistException;
+import com.mooctest.crowd.domain.exception.BadRequestException;
+import com.mooctest.crowd.domain.exception.HttpBadRequestException;
+import com.mooctest.crowd.domain.exception.TestTypeNoExistException;
 import com.mooctest.crowd.domain.model.*;
 import com.mooctest.crowd.domain.util.Converter;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.data.jpa.domain.Specifications;
 import org.springframework.stereotype.Component;
@@ -17,6 +21,7 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 import java.util.stream.Collectors;
@@ -199,27 +204,45 @@ public class CommonRepo {
         };
     }
 
-    public Page<CrowdTestProject> getProjectList(Pageable pageable, String code, String keyword) {
-        System.out.println("code " + code);
+    public List<CrowdTestProject> getProjectList(Pageable pageable, String code, String keyword) {
         Specifications<CrowdTestProjectPO> where = Specifications.where(getCode(code, keyword));
-        return crowdTestProjectDao.findAll(where, pageable).map(crowdTestProjectPO -> Converter.convert(CrowdTestProject.class, crowdTestProjectPO));
+        //添加排序
+        Sort sort = new Sort(Sort.Direction.ASC,"status");
+        return crowdTestProjectDao.findAll(where, sort).stream().map(crowdTestProjectPO -> Converter.convert(CrowdTestProject.class, crowdTestProjectPO)).collect(Collectors.toList());
     }
 
     private Specification<CrowdTestProjectPO> getCode(String code, String keyword) {
         return new Specification<CrowdTestProjectPO>() {
+//            @Override
+//            public Predicate toPredicate(Root<CrowdTestProjectPO> a, CriteriaQuery<?> q, CriteriaBuilder cb) {
+//                Predicate predicate = cb.conjunction();
+//                if (code != null) {
+//                    predicate.getExpressions().add(cb.equal(a.get("applicationType"), code));
+//                }
+//                if (keyword != null && keyword != "") {
+//                    predicate.getExpressions().add(
+//                            cb.like(a.<String>get("name"), "%" + StringUtils.trim(keyword) + "%")
+//                    );
+//                }
+////                q.orderBy(cb.desc(a.get("status").as(Integer.class)));
+//                return predicate;
+//            }
+
             @Override
-            public Predicate toPredicate(Root<CrowdTestProjectPO> a, CriteriaQuery<?> q, CriteriaBuilder cb) {
-                Predicate predicate = cb.conjunction();
+            public Predicate toPredicate(Root<CrowdTestProjectPO> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                //用于暂时存放查询条件的集合
+                List<Predicate> predicatesList = new ArrayList<>();
                 if (code != null) {
-                    predicate.getExpressions().add(cb.equal(a.get("applicationType"), code));
+                    Predicate codePredicate = cb.equal(root.get("applicationType"), code);
+                    predicatesList.add(codePredicate);
                 }
                 if (keyword != null && keyword != "") {
-                    predicate.getExpressions().add(
-                            cb.like(a.<String>get("name"), "%" + StringUtils.trim(keyword) + "%")
-                    );
+                    Predicate namePredicate = cb.like(root.get("name"), '%'+StringUtils.trim(keyword)+'%');
+                    predicatesList.add(namePredicate);
                 }
-//                q.orderBy(cb.desc(a.get("status").as(Integer.class)));
-                return predicate;
+                //最终将查询条件拼好然后return
+                Predicate[] predicates = new Predicate[predicatesList.size()];
+                return cb.and(predicatesList.toArray(predicates));
             }
         };
     }

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

@@ -50,6 +50,12 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
     @Autowired
     private ApplicationTypeDao applicationTypeDao;
 
+    @Autowired
+    private EndPointDao endPointDao;
+
+    @Autowired
+    private CommonRepo commonRepo;
+
     @Override
     public Page<CrowdTestProjectPO> findAll(Specification specification, Pageable pageable) {
         return crowdTestProjectDao.findAll(specification, pageable);
@@ -134,7 +140,6 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
     public void saveCrowdTestProject(CrowdTestProject crowdTestProject) {
         CrowdTestProjectPO crowdTestProjectPO = Converter.convert(CrowdTestProjectPO.class, crowdTestProject);
         crowdTestProjectDao.save(crowdTestProjectPO);
-
         List<CrowdTestTask> crowdTestTaskList = crowdTestProject.getCrowdTestTaskList();
         if (crowdTestTaskList != null) {
             for (CrowdTestTask crowdTestTask : crowdTestTaskList) {
@@ -153,6 +158,40 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
 //                Set<Long> collect = taskToUserPOS.stream().map(TaskToUserPO::getUserId).collect(Collectors.toSet());
 //                crowdTestTaskPO.setParticipantHasReportCount(collect.size());
                 crowdTestTaskDao.save(crowdTestTaskPO);
+
+                // 判断是否存在配置项
+                if(commonRepo.getTestTypeByAppCode(crowdTestTask.getType()).getType() == 1){
+                    // 保存配置项信息
+                    if(crowdTestTask.getEndPoint() != null){
+                        Optional<EndPointPO> endPointPO = endPointDao.findByTaskCode(crowdTestTask.getCode());
+                        EndPoint endPoint = crowdTestTask.getEndPoint();
+                        if(endPointPO.isPresent()){
+                            EndPointPO addEndPointPO = Converter.convert(EndPointPO.class, endPoint);
+                            addEndPointPO.setId(endPointPO.get().getId());
+                            addEndPointPO.setProjectCode(crowdTestProject.getCode());
+                            addEndPointPO.setTaskCode(crowdTestTask.getCode());
+                            endPointDao.save(addEndPointPO);
+                        }else{
+                            EndPointPO addEndPointPO = new EndPointPO();
+                            if(endPoint.getExamId() != null){
+                                addEndPointPO.setExamId(endPoint.getExamId());
+                            }
+                            if(endPoint.getCaseId() != null){
+                                addEndPointPO.setCaseId(endPoint.getCaseId());
+                            }
+                            addEndPointPO.setProjectCode(crowdTestProject.getCode());
+                            addEndPointPO.setTaskCode(crowdTestTask.getCode());
+                            addEndPointPO.setServerCode(endPoint.getServerCode());
+                            endPointDao.save(addEndPointPO);
+                        }
+                    }
+                }else{
+                    Optional<EndPointPO> endPointPO = endPointDao.findByTaskCode(crowdTestTask.getCode());
+                    if(endPointPO.isPresent()){
+                        endPointDao.deleteEndPoint(crowdTestTask.getCode());
+                    }
+                }
+
             }
         }
         // 保存项目报告
@@ -178,6 +217,54 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
         return crowdTestProjectList;
     }
 
+    @Override
+    public EndPoint getEndPoint(String taskCode) {
+        Optional<EndPointPO> endPointPO=endPointDao.findByTaskCode(taskCode);
+        if(endPointPO.isPresent()){
+            EndPoint endPoint = Converter.convert(EndPoint.class, endPointPO.get());
+            return endPoint;
+        }
+        return null;
+    }
+
+    @Override
+    public EndPoint addEndPoint(String taskCode, EndPoint endPoint) {
+        Optional<EndPointPO> endPointPO=endPointDao.findByTaskCode(taskCode);
+        if(!endPointPO.isPresent()){
+            EndPointPO addEndPointPO = Converter.convert(EndPointPO.class, endPoint);
+            endPointDao.save(addEndPointPO);
+        }else {
+            throw new HttpBadRequestException("任务已存在");
+        }
+        return this.getEndPoint(taskCode);
+    }
+
+    @Override
+    public void deleteEndPoint(String taskCode) {
+        Optional<EndPointPO> endPointPO=endPointDao.findByTaskCode(taskCode);
+        if(endPointPO.isPresent()){
+            endPointDao.deleteEndPoint(taskCode);
+            throw new HttpBadRequestException("任务已删除");
+        }else{
+            throw new HttpBadRequestException("任务不存在");
+        }
+    }
+
+    @Override
+    public EndPoint updateEndPoint(String taskCode, EndPoint endPoint) {
+        Optional<EndPointPO> endPointPO=endPointDao.findByTaskCode(taskCode);
+        if(endPointPO.isPresent()){
+            endPointPO.get().setProjectCode(endPoint.getProjectCode());
+            endPointPO.get().setTaskCode(endPoint.getTaskCode());
+            endPointPO.get().setCaseId(endPoint.getCaseId());
+            endPointPO.get().setExamId(endPoint.getExamId());
+            endPointDao.save(endPointPO.get());
+            return this.getEndPoint(endPoint.getTaskCode());
+        }else {
+            throw new HttpBadRequestException("任务不存在");
+        }
+    }
+
 //    @Override
 //    public void removeCrowdTestProject(String crowdTestProjectCode){
 //        CrowdTestProject crowdTestProject = getByProjectCode(crowdTestProjectCode);
@@ -261,6 +348,12 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
         List<CrowdTestTask> crowdTestTaskListResult = new ArrayList<>();
         for (CrowdTestTaskPO crowdTestTaskPO : crowdTestTaskPOList) {
             CrowdTestTask crowdTestTaskResult = Converter.convert(CrowdTestTask.class, crowdTestTaskPO);
+            // 判断否存在配置项
+            Optional<EndPointPO> endPointPO = endPointDao.findByTaskCode(crowdTestTaskResult.getCode());
+            if(endPointPO.isPresent()){
+                crowdTestTaskResult.setEndPoint(Converter.convert(EndPoint.class, endPointPO.get()));
+            }
+
             // 检索任务中的所有已接收任务的人员信息
             List<TaskToUserPO> taskToUserPOList = taskToUserDao.findByTaskCode(crowdTestTaskResult.getCode());
             List<TaskToUser> taskToUserList = taskToUserPOList.stream().map(taskToUserPO -> {

+ 9 - 0
core/src/main/java/com/mooctest/crowd/domain/repository/ICrowdTestProjectRepo.java

@@ -1,5 +1,6 @@
 package com.mooctest.crowd.domain.repository;
 import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
+import com.mooctest.crowd.domain.domainobject.EndPoint;
 import com.mooctest.crowd.domain.exception.CrowdTestProjectNotExistException;
 import com.mooctest.crowd.domain.model.CrowdTestProjectPO;
 import org.springframework.data.domain.Page;
@@ -54,4 +55,12 @@ public interface ICrowdTestProjectRepo {
 //
 //    CrowdTestProject updateCrowdTestProjectStatus(Long id, String status) throws CrowdTestProjectNotExistException;
 
+    EndPoint getEndPoint(String taskCode);
+
+    EndPoint addEndPoint(String taskCode,EndPoint endPoint);
+
+    void deleteEndPoint(String taskCode);
+
+    EndPoint updateEndPoint(String taskCode,EndPoint endPoint);
+
 }

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

@@ -1,6 +1,7 @@
 package com.mooctest.crowd.site.command;
 
 import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
+import com.mooctest.crowd.domain.domainobject.EndPoint;
 import lombok.Data;
 import org.springframework.beans.BeanUtils;
 
@@ -43,6 +44,8 @@ public class CrowdTestTaskCommand {
 
     private int participantCount;
 
+    private EndPoint endPoint;
+
     public boolean isLegal(){
         if (this.resource == 1 && this.location == null)
             return false;
@@ -68,6 +71,24 @@ public class CrowdTestTaskCommand {
         crowdTestTask.setFixedPrice(fixedPrice);
         crowdTestTask.setRequirementFile(requirementFile);
         crowdTestTask.setParticipantCount(participantCount);
+
+        //http://59.42.10.17:8081/report/detail/examId_50/caseId_50/userId
+        if(endPoint.getServerCode() != null && endPoint.getServerCode() != ""){
+            String serverCode = endPoint.getServerCode();
+            if(serverCode.contains("examId_")){
+                endPoint.setExamId(serverCode.split("examId_")[1].split("/")[0]);
+                serverCode = serverCode.replaceFirst("examId_","");
+            }
+            if(serverCode.contains("caseId_")){
+                endPoint.setCaseId(serverCode.split("caseId_")[1].split("/")[0]);
+                serverCode = serverCode.replaceFirst("caseId_","");
+            }
+            endPoint.setServerCode(serverCode);
+            crowdTestTask.setEndPoint(endPoint);
+        }
+//        if(endpoint != null && endpoint.getCaseId() != null && endpoint.getExamId() != null){
+//            crowdTestTask.setEndPoint(endpoint);
+//        }
         return crowdTestTask;
     }
 

+ 16 - 0
site/src/main/java/com/mooctest/crowd/site/command/EndPointCommand.java

@@ -0,0 +1,16 @@
+package com.mooctest.crowd.site.command;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class EndPointCommand {
+    private String projectCode;
+    private String taskCode;
+    private String  caseId;
+    private String  examId;
+}

文件差異過大導致無法顯示
+ 0 - 0
site/src/main/java/com/mooctest/crowd/site/controller/CommonController.java


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

@@ -104,4 +104,11 @@ public class CrowdTaskController{
         Long userId = Long.parseLong((String)session.getAttribute("userId"));
         return taskService.confirmFinish(projectCode, taskCode, userId);
     }
+
+
+    @RequestMapping(value = "/jump/{projectCode}/{taskCode}/{userId}", method = RequestMethod.GET)
+    public void jumpPublicTesting(@PathVariable("projectCode") String projectCode, @PathVariable("taskCode") String taskCode,
+                                     @PathVariable("userId") Long userId){
+        taskService.jumpPublicTesting(projectCode,taskCode,userId);
+    }
 }

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

@@ -19,6 +19,7 @@ public class TaskOperationControl {
     private boolean uploadReport = false;
     private boolean finish = false;
     private boolean confirmFinish = false;
+    private boolean writeReport = false;
 
     public void hasAll(){
         this.receive = true;
@@ -36,5 +37,6 @@ public class TaskOperationControl {
         this.update = false;
         this.finish = false;
         this.uploadReport = false;
+        this.writeReport = false;
     }
 }

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

@@ -48,6 +48,8 @@ public class CrowdTaskVO implements Serializable{
     private Timestamp createTime;
     private List<TaskToUserVO> taskToUserVOS = new ArrayList<>();
     private String time_interval;
+    private EndPointVO endPointVO;
+    private String writeReportUrl;
 
     public CrowdTaskVO(CrowdTestTask task){
         id = task.getCode();

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

@@ -0,0 +1,20 @@
+package com.mooctest.crowd.site.data.vo;
+
+import com.mooctest.crowd.domain.domainobject.EndPoint;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+
+/**
+ * @program: crowd
+ * @description: ${description}
+ * @author: hanyuwei
+ * @create: 2020-07-28 17:23
+ **/
+@Data
+public class EndPointVO {
+    private String serverCode;
+
+    public EndPointVO(EndPoint endPoint){
+        BeanUtils.copyProperties(endPoint, this);
+    }
+}

+ 4 - 0
site/src/main/java/com/mooctest/crowd/site/data/vo/TestTypeVO.java

@@ -18,10 +18,14 @@ public class TestTypeVO implements Serializable {
     private String code;
     private String name;
     private String introduction;
+    private int type; //0-无跳转 1-有跳转
+    private String url;
 
     public TestTypeVO(TestType testType){
         code = testType.getCode();
         name = testType.getName();
         introduction = testType.getIntroduction();
+        type = testType.getType();
+        url = testType.getUrl();
     }
 }

+ 4 - 0
site/src/main/java/com/mooctest/crowd/site/mediator/ViewMediator.java

@@ -126,4 +126,8 @@ public interface ViewMediator {
     List<CrowdTestProjectVO> crowdTestProjectsWaitingAccept();
 
     List<UserTaskCountVO> getCount();
+
+    void  jumpPublicTesting(String projectCode, String taskCode, Long userId);
+
+
 }

+ 76 - 29
site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java

@@ -126,6 +126,9 @@ public class WebMediatorImpl implements ViewMediator {
     @Autowired
     private ThemeStatusTaskService themeStatusTaskService;
 
+    @Autowired
+    private EndPointDao endPointDao;
+
     @Override
     public List<CrowdTestProjectVO> crowdTestProjects() {
         List<CrowdTestProjectVO> authingList = new ArrayList<>();
@@ -563,7 +566,7 @@ public class WebMediatorImpl implements ViewMediator {
         //我的众测 - 项目相关信息
         //获取我创建的项目列表
         List<CrowdProjectVO> myProejcts = projectDao.findByUserIdAndIsDeleted(userId, DeletedStatus.isNotDeleted)
-                .stream().sorted(Comparator.comparing(CrowdTestProjectPO::getCreateTime).thenComparing(CrowdTestProjectPO::getStatus).reversed()).map(crowdTestProjectPO -> {
+                .stream().map(crowdTestProjectPO -> {
                     CrowdTestProject project = new CrowdTestProject();
                     BeanUtils.copyProperties(crowdTestProjectPO, project);
                     CrowdProjectVO projectVO = new CrowdProjectVO(project);
@@ -572,25 +575,25 @@ public class WebMediatorImpl implements ViewMediator {
                         projectVO.setNeedHandle(true);
                     // 应用类型值的转换
                     projectVO = changeApplicationType(projectVO);
+                    // 判断项目是否截止
+                    if (projectVO.getDatetime().getTime() <= System.currentTimeMillis() && project.getStatus() < CrowdTestProjectStatus.HAS_FINISHED) {
+                        project.setStatus(CrowdTestProjectStatus.HAS_TIME_OUT);
+                    }
                     return projectVO;
-                }).collect(Collectors.toList());
+                }).collect(Collectors.toList()).stream().sorted(Comparator.comparing(CrowdProjectVO::getCreateTime).thenComparing(CrowdProjectVO::getStatus).reversed()).collect(Collectors.toList());
         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)
-                    .stream().sorted(Comparator.comparing(CrowdTestProjectPO::getCreateTime).thenComparing(CrowdTestProjectPO::getStatus).reversed()).collect(Collectors.toList());
+                    .stream().map(crowdTestProjectPO -> {
+                        // 判断项目是否截止
+                        if (crowdTestProjectPO.getDeadTime().getTime() <= System.currentTimeMillis() && crowdTestProjectPO.getStatus() < CrowdTestProjectStatus.HAS_FINISHED) {
+                            crowdTestProjectPO.setStatus(CrowdTestProjectStatus.HAS_TIME_OUT);
+                        }
+                        return crowdTestProjectPO;
+                    }).collect(Collectors.toList())
+                    .stream().sorted(Comparator.comparing(CrowdTestProjectPO::getStatus).reversed().thenComparing(CrowdTestProjectPO::getCreateTime).reversed()).collect(Collectors.toList());
             //获取区域管理员正在处理中的项目列表
             myCrowdDTO.setHandlingProjects(crowdTestProjectPOList.stream().filter(crowdTestProjectPO -> crowdTestProjectPO.getStatus() > CrowdTestProjectStatus.HAS_RELEASED).map(crowdTestProjectPO -> {
                 CrowdTestProject project = new CrowdTestProject();
@@ -646,6 +649,10 @@ public class WebMediatorImpl implements ViewMediator {
                                 // 测试类型的转换
                                 String typeName = commonRepo.getTypeNameByCode(task.getType());
                                 task.setType(typeName);
+                                // 判断任务是否截止
+                                if (task.getDeadTime().getTime() <= System.currentTimeMillis() && task.getStatus() < CrowdTestTaskStatus.HAS_FINISHED) {
+                                    task.setStatus(CrowdTestTaskStatus.HAS_TIME_OUT);
+                                }
                                 return task;
                             }
                             return null;
@@ -894,8 +901,8 @@ public class WebMediatorImpl implements ViewMediator {
 
         CrowdTaskVO taskVO = new CrowdTaskVO(task.get());
         // 测试类型的转换
-        String typeName = commonRepo.getTypeNameByCode(taskVO.getServiceType());
-        taskVO.setServiceType(typeName);
+//        String typeName = commonRepo.getTypeNameByCode(taskVO.getServiceType());
+//        taskVO.setServiceType(typeName);
 
         System.out.println("renderTaskDetails userId:" + userId);
         if (userId == null) {
@@ -906,6 +913,12 @@ public class WebMediatorImpl implements ViewMediator {
             // 区域管理员视图
             List<TaskToUserVO> taskToUserVOS = new ArrayList<>();
             if (userId.equals(project.getRegionalManagerId())) {
+                // 判断否存在配置项
+                Optional<EndPointPO> endPointPO = endPointDao.findByTaskCode(taskVO.getCode());
+                if(endPointPO.isPresent()){
+                    taskVO.setEndPointVO(new EndPointVO(Converter.convert(EndPoint.class, endPointPO.get())));
+                }
+
                 taskToUserVOS = task.get().getAcceptedUserList().stream().map(taskToUser -> {
                     TaskToUserVO taskToUserVO = new TaskToUserVO(taskToUser);
                     taskToUserVO.setUserVO(Converter.convert(UserVO.class, taskToUser.getUser()));
@@ -944,11 +957,20 @@ public class WebMediatorImpl implements ViewMediator {
                         }).collect(Collectors.toList());
             }
             taskDetailsDTO.setAcceptedUserList(taskToUserVOS);
+
+            Optional<EndPointPO> endPointPOOptional = endPointDao.findByTaskCode(task.get().getCode());
+            // 判断是否具有配置项,提供跳转url
+            if(endPointPOOptional.isPresent()){
+                // 获取测试类型对应的跳转url
+                String reportUrl = endPointPOOptional.get().getServerCode().replace("userId", String.valueOf(userId));
+                taskVO.setWriteReportUrl(reportUrl);
+            }
         }
 
         if (saveFlag) {
             projectRepo.saveCrowdTestProject(project);
         }
+
         taskDetailsDTO.setCrowdTaskVO(taskVO);
 //        EvaluationAgencyPO agencyPO = agencyDao.findByUserId(task.get().getEvaluationAgencyId());
 //        taskVO.setInstitution(agencyPO==null?"该机构已注销":agencyPO.getEvaluationAgencyName());
@@ -1057,7 +1079,7 @@ public class WebMediatorImpl implements ViewMediator {
             CrowdTestProject crowdTestProject = new CrowdTestProject();
             BeanUtils.copyProperties(crowdTestProjectPO, crowdTestProject);
             return new CrowdTestProjectVO(crowdTestProject);
-        }).collect(Collectors.toList()));
+        }).collect(Collectors.toList()).stream().sorted(Comparator.comparing(CrowdTestProjectVO::getCreateTime).reversed()).collect(Collectors.toList()));
         return authingList;
     }
 
@@ -1071,7 +1093,7 @@ public class WebMediatorImpl implements ViewMediator {
             BeanUtils.copyProperties(crowdTestTaskPO, crowdTestTask);
             crowdTestTask.setType(serviceType.get().getName());
             return new CrowdTaskVO(crowdTestTask);
-        }).collect(Collectors.toList()));
+        }).collect(Collectors.toList()).stream().sorted(Comparator.comparing(CrowdTaskVO::getCreateTime).reversed()).collect(Collectors.toList()));
         return authingList;
     }
 
@@ -1162,6 +1184,11 @@ public class WebMediatorImpl implements ViewMediator {
         return userTaskCountVOList;
     }
 
+    @Override
+    public void jumpPublicTesting(String projectCode, String taskCode, Long userId) {
+        String url = "http://47.99.140.117/" + projectCode + "/"+taskCode+"/"+userId;
+    }
+
     /**
      * 众测广场首页展示的众测任务
      * @return
@@ -1582,6 +1609,7 @@ public class WebMediatorImpl implements ViewMediator {
     }
 
     private TaskOperationControl initTaskPermission(CrowdTestProject project, CrowdTestTask task, User user) {
+        Optional<EndPointPO> endPointPOOptional = endPointDao.findByTaskCode(task.getCode());
         TaskOperationControl taskOperationControl = new TaskOperationControl();
 
         if (user == null || task.getStatus() == CrowdTestTaskStatus.HAS_FINISHED || task.getStatus() == CrowdTestTaskStatus.HAS_TIME_OUT) {
@@ -1591,16 +1619,30 @@ public class WebMediatorImpl implements ViewMediator {
         //区域管理员或系统管理员视角
         if (user.getRoleList().stream().anyMatch(role -> role.getName().equals("SystemAdministrator"))
                 || (user.getRegionalManager() != null && user.getId().equals(project.getRegionalManagerId()))) {
-            if ((task.getParticipantHasCommittedCount() == task.getAcceptedCount() && task.getStatus() == CrowdTestTaskStatus.HAS_RECEIVED) || (task.getParticipantHasCommittedCount() == task.getParticipantCount() && task.getStatus() == CrowdTestTaskStatus.HAS_COMMITED)) {
-                taskOperationControl.setConfirmFinish(true);
-            }
             if (task.getStatus() < CrowdTestTaskStatus.HAS_RECEIVED) {
                 taskOperationControl.setUpdate(true);
+                // 具有配置项,需要在第三方进行填写报告
+                if(endPointPOOptional.isPresent()){
+                    taskOperationControl.setWriteReport(true);
+                }
             }
-            taskOperationControl.setFinish(false);
-            if (task.getStatus() == CrowdTestTaskStatus.HAS_FINISHED || task.getStatus() == CrowdTestTaskStatus.HAS_TIME_OUT) {
-                taskOperationControl.setConfirmFinish(false);
+            else{
+                if ((task.getParticipantHasCommittedCount() == task.getAcceptedCount() && task.getStatus() == CrowdTestTaskStatus.HAS_RECEIVED) || (task.getParticipantHasCommittedCount() == task.getParticipantCount() && task.getStatus() == CrowdTestTaskStatus.HAS_COMMITED)) {
+                    taskOperationControl.setConfirmFinish(true);
+                }
+
+                taskOperationControl.setFinish(false);
+                if (task.getStatus() == CrowdTestTaskStatus.HAS_FINISHED || task.getStatus() == CrowdTestTaskStatus.HAS_TIME_OUT) {
+                    taskOperationControl.setConfirmFinish(false);
+                }
+                // 具有配置项,需要在第三方进行填写报告
+                if(endPointPOOptional.isPresent()){
+                    taskOperationControl.setWriteReport(true);
+                    taskOperationControl.setUploadReport(true);
+                    taskOperationControl.setConfirmFinish(true);
+                }
             }
+
         }
         // TODO 已拒绝视图
         //评测机构和测评人员视角
@@ -1624,6 +1666,12 @@ public class WebMediatorImpl implements ViewMediator {
                             taskOperationControl.setFinish(false);
                             taskOperationControl.setUploadReport(false);
                         }
+
+                        // 具有配置项,需要在第三方进行填写报告
+                        if(endPointPOOptional.isPresent()){
+                            taskOperationControl.noAll();
+                            taskOperationControl.setWriteReport(true);
+                        }
                     } else if (task.getStatus() == CrowdTestTaskStatus.HAS_COMMITED) {
                         taskOperationControl.setUploadReport(false);
                     }
@@ -1642,14 +1690,13 @@ public class WebMediatorImpl implements ViewMediator {
                     }
 
                 }
-
             } else if (task.getDistributionType() == 2) {
                 if (task.getStatus() == CrowdTestTaskStatus.HAS_RELEASED) {
                     taskOperationControl.setReceive(true);
-                    // 项目发起者
-                    if (project.getUserId().equals(user.getId())) {
-                        taskOperationControl.setReceive(false);
-                    }
+//                    // 项目发起者
+//                    if (project.getUserId().equals(user.getId())) {
+//                        taskOperationControl.setReceive(false);
+//                    }
                 }
             }
         }

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

@@ -34,7 +34,7 @@ public interface CommonService {
 
     Page<CompetitionVO> getCompetition(Pageable pageable,String keyword);
 
-    Page<CrowdProjectVO> getProjectList(Pageable pageable,String code,String keyword);
+    List<CrowdProjectVO> getProjectList(Pageable pageable,String code,String keyword);
 
     List<ResourceVO>  getResource();
 

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

@@ -37,4 +37,6 @@ public interface CrowdTaskService {
     TaskDetailsDTO confirmFinish(String projectCode, String taskCode, Long userId);
 
     List<CrowdTaskVO> findMoreHotTasksList(String keyword);
+
+    void  jumpPublicTesting(String projectCode, String taskCode, Long userId);
 }

+ 16 - 0
site/src/main/java/com/mooctest/crowd/site/service/EndPointService.java

@@ -0,0 +1,16 @@
+package com.mooctest.crowd.site.service;
+
+
+import com.mooctest.crowd.site.command.EndPointCommand;
+import com.mooctest.crowd.site.data.vo.EndPointVO;
+
+
+public interface EndPointService {
+    EndPointVO getEndPoint(String taskCode);
+
+    EndPointVO addEndPoint(String taskCode,EndPointCommand endPointCommand);
+
+    void deleteEndPoint(String taskCode);
+
+    EndPointVO updateEndPoint(String taskCode,EndPointCommand endPointCommand);
+}

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

@@ -3,6 +3,7 @@ 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.CrowdTestProjectStatus;
 import com.mooctest.crowd.domain.domainobject.User;
 import com.mooctest.crowd.domain.exception.HaveNotAgencyAuthException;
 import com.mooctest.crowd.domain.exception.HaveNotPartAuthException;
@@ -149,13 +150,18 @@ public class CommonServiceImpl implements CommonService {
     }
 
     @Override
-    public Page<CrowdProjectVO> getProjectList(Pageable pageable, String code,String keyword) {
-        return commonRepo.getProjectList(pageable,code,keyword).map(project->{
+    public List<CrowdProjectVO> getProjectList(Pageable pageable, String code,String keyword) {
+        List<CrowdProjectVO> crowdProjectVOS = commonRepo.getProjectList(pageable, code, keyword).stream().map(project -> {
+            // 判断项目是否截止
+            if (project.getDeadTime().getTime() <= System.currentTimeMillis() && project.getStatus() < CrowdTestProjectStatus.HAS_FINISHED) {
+                project.setStatus(CrowdTestProjectStatus.HAS_TIME_OUT);
+            }
             CrowdProjectVO crowdProjectVO = new CrowdProjectVO(project);
             String applicationName = commonRepo.getApplicationNameByCode(crowdProjectVO.getPlatform());
             crowdProjectVO.setPlatform(applicationName);
             return crowdProjectVO;
-        });
+        }).collect(Collectors.toList());
+        return crowdProjectVOS;
     }
 
     @Override

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

@@ -129,6 +129,10 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
             // 应用类型值的转换
             String applicationName = commonRepo.getApplicationNameByCode(crowdTestProject.getApplicationType());
             crowdTestProject.setApplicationType(applicationName);
+            // 判断项目是否截止
+            if (crowdTestProject.getDeadTime().getTime() <= System.currentTimeMillis() && crowdTestProject.getStatus() < CrowdTestProjectStatus.HAS_FINISHED) {
+                crowdTestProject.setStatus(CrowdTestProjectStatus.HAS_TIME_OUT);
+            }
             return new CrowdProjectVO(crowdTestProject);
         }).collect(Collectors.toList());
         if (keyword != null && keyword != "") {

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

@@ -1,5 +1,6 @@
 package com.mooctest.crowd.site.service.impl;
 
+import com.mooctest.crowd.domain.dao.EndPointDao;
 import com.mooctest.crowd.domain.domainobject.*;
 import com.mooctest.crowd.domain.exception.BaseException;
 import com.mooctest.crowd.domain.exception.CrowdTestReportNotExistException;
@@ -30,6 +31,9 @@ public class CrowdReportServiceImpl implements CrowdReportService {
     private CrowdTestProjectRepo projectRepo;
 
     @Autowired
+    private EndPointDao endPointDao;
+
+    @Autowired
     private ViewMediator viewMediator;
 
     @Override
@@ -50,6 +54,12 @@ public class CrowdReportServiceImpl implements CrowdReportService {
         // 判断报告的可操作性
         List<TaskToUser> acceptedUserList = task.get().getAcceptedUserList();
         Optional<TaskToUser> userOptional = acceptedUserList.stream().filter(user -> user.getUserId().equals(userId)).findFirst();
+
+//        Optional<EndPointPO> endPointPOOptional = endPointDao.findByTaskCode(taskCode);
+//        //具有配置项,需要在第三方进行填写报告
+//        if(endPointPOOptional.isPresent() && userId.equals(project.getRegionalManagerId())){
+//
+//        }
         if(!userOptional.isPresent()){
             throw new BaseException("当前用户没有此任务的操作权限!");
         }

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

@@ -1,6 +1,7 @@
 package com.mooctest.crowd.site.service.impl;
 
 import com.mooctest.crowd.domain.dao.CrowdTestTaskDao;
+import com.mooctest.crowd.domain.dao.EndPointDao;
 import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTaskStatus;
@@ -8,6 +9,7 @@ import com.mooctest.crowd.domain.domainobject.DistributeType;
 import com.mooctest.crowd.domain.exception.BaseException;
 import com.mooctest.crowd.domain.exception.CrowdTestTaskNotExistException;
 import com.mooctest.crowd.domain.exception.UnauthorizedException;
+import com.mooctest.crowd.domain.model.EndPointPO;
 import com.mooctest.crowd.domain.repository.CommonRepo;
 import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
 import com.mooctest.crowd.domain.repository.CrowdTestTaskRepo;
@@ -39,8 +41,7 @@ import java.util.stream.Collectors;
 public class CrowdTaskServiceImpl implements CrowdTaskService {
 
     @Autowired
-    private CrowdTestTaskRepo taskRepo;
-
+    private EndPointDao endPointDao;
 
     @Autowired
     CrowdTestProjectRepo projectRepo;
@@ -72,6 +73,10 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
             BeanUtils.copyProperties(crowdTestTaskPO, task);
             String typeName = commonRepo.getTypeNameByCode(task.getType());
             task.setType(typeName);
+            // 判断任务是否截止
+            if (task.getDeadTime().getTime() <= System.currentTimeMillis() && task.getStatus() < CrowdTestTaskStatus.HAS_FINISHED) {
+                task.setStatus(CrowdTestTaskStatus.HAS_TIME_OUT);
+            }
             return new CrowdTaskVO(task);
         }).collect(Collectors.toList());
         if (keyword != null && keyword != "") {
@@ -81,6 +86,11 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
     }
 
     @Override
+    public void jumpPublicTesting(String projectCode, String taskCode, Long userId) {
+        viewMediator.jumpPublicTesting(projectCode,taskCode,userId);
+    }
+
+    @Override
     public List<CrowdTaskVO> findAll() {
         return viewMediator.crowdTaskVos();
     }
@@ -119,7 +129,7 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
             throw new CrowdTestTaskNotExistException();
         if (task.get().getStatus() == CrowdTestTaskStatus.HAS_FINISHED)
             throw new BaseException("禁止修改已结束的任务!");
-        command.setType(commonRepo.getTypeCodeByName(command.getType()));
+//        command.setType(commonRepo.getTypeCodeByName(command.getType()));
         CrowdTestTask updateTask = command.toCrowdTask(projectCode);
         // 定向任务被拒绝,更新时需要删除任务中的taskToUser  acceptedUserList
         if (task.get().getDistributionType().equals(DistributeType.DIRECT.getId())) {
@@ -145,9 +155,21 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
     @Override
     public TaskDetailsDTO acceptTask(String projectCode, String taskCode, Long userId) {
         CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        // 项目发起者
+        if (project.getUserId().equals(userId)) {
+            throw new BaseException("您是项目发起者,不可接收自己项目下的测试任务!");
+        }
         CrowdTestTask task = project.getTask(taskCode);
         task.receive(userRepo.getByID(userId));
         project.setJoinCount(project.getJoinCount() + 1);
+
+        // 判断是否为第三方任务,如果是则管理员自身也是一个参与者
+        Optional<EndPointPO> endPointPOOptional = endPointDao.findByTaskCode(task.getCode());
+        if(endPointPOOptional.isPresent()){
+            task.receive(userRepo.getByID(project.getRegionalManagerId()));
+            project.setJoinCount(project.getJoinCount() + 1);
+        }
+
         projectRepo.saveCrowdTestProject(project);
         return getTaskDetails(projectCode, taskCode, userId);
     }

+ 46 - 0
site/src/main/java/com/mooctest/crowd/site/service/impl/EndPointServiceImpl.java

@@ -0,0 +1,46 @@
+package com.mooctest.crowd.site.service.impl;
+
+
+import com.mooctest.crowd.domain.domainobject.EndPoint;
+import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
+import com.mooctest.crowd.domain.util.Converter;
+import com.mooctest.crowd.site.command.EndPointCommand;
+import com.mooctest.crowd.site.data.vo.EndPointVO;
+import com.mooctest.crowd.site.service.EndPointService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+
+@Service
+public class EndPointServiceImpl implements EndPointService {
+
+    @Autowired
+    private CrowdTestProjectRepo crowdTestProjectRepo;
+    @Override
+    public EndPointVO getEndPoint(String taskCode) {
+        EndPoint endPoint=crowdTestProjectRepo.getEndPoint(taskCode);
+        EndPointVO endPointVO = Converter.convert(EndPointVO.class, endPoint);
+        return endPointVO;
+    }
+
+    @Override
+    public EndPointVO addEndPoint(String taskCode, EndPointCommand endPointCommand) {
+        EndPoint endPoint = Converter.convert(EndPoint.class, endPointCommand);
+        EndPoint addEndPoint=crowdTestProjectRepo.addEndPoint(taskCode,endPoint);
+        EndPointVO endPointVO = Converter.convert(EndPointVO.class, addEndPoint);
+        return  endPointVO;
+    }
+
+    @Override
+    public void deleteEndPoint(String taskCode) {
+        crowdTestProjectRepo.deleteEndPoint(taskCode);
+    }
+
+    @Override
+    public EndPointVO updateEndPoint(String taskCode, EndPointCommand endPointCommand) {
+        EndPoint endPoint = Converter.convert(EndPoint.class, endPointCommand);
+        EndPoint updateEndPoint=crowdTestProjectRepo.updateEndPoint(taskCode,endPoint);
+        EndPointVO endPointVO = Converter.convert(EndPointVO.class, updateEndPoint);
+        return  endPointVO;
+    }
+}

+ 3 - 3
site/src/main/resources/application.yml

@@ -69,7 +69,7 @@ green:
 spring:
   profiles: dev
   datasource:
-    url: jdbc:mysql://101.37.175.111:3306/crowd-test-service?useSSL=false&useUnicode=yes&characterEncoding=UTF-8
+    url: jdbc:mysql://101.37.175.111:3306/crowd-test-service?useSSL=false&useUnicode=yes&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
 
     username: mooctest
     password: secr3t!
@@ -121,7 +121,7 @@ website:
 spring:
   profiles: dev-pre
   datasource:
-    url: jdbc:mysql://101.37.175.111:3306/crowd-test-service-pre?useSSL=false&useUnicode=yes&characterEncoding=UTF-8
+    url: jdbc:mysql://101.37.175.111:3306/crowd-test-service-pre?useSSL=false&useUnicode=yes&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
     username: mooctest
     password: secr3t!
   redis:
@@ -171,7 +171,7 @@ website:
 spring:
   profiles: online
   datasource:
-    url: jdbc:mysql://10.18.18.50:3306/crowd-test-service?useSSL=false&useUnicode=yes&characterEncoding=UTF-8
+    url: jdbc:mysql://10.18.18.50:3306/crowd-test-service?useSSL=false&useUnicode=yes&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
     username: root
     password: callfortest_crowd
   redis:

部分文件因文件數量過多而無法顯示