Kaynağa Gözat

Merge branch 'feature-jump' into 'master'

Feature jump

See merge request crowd-2019/crowd-test-service-backend!123
郭超 5 yıl önce
ebeveyn
işleme
67521f60fd
21 değiştirilmiş dosya ile 361 ekleme ve 13 silme
  1. 24 0
      core/src/main/java/com/mooctest/crowd/domain/dao/EndPointDao.java
  2. 0 2
      core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestProject.java
  3. 6 1
      core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestTask.java
  4. 12 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/EndPoint.java
  5. 2 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/TestType.java
  6. 30 0
      core/src/main/java/com/mooctest/crowd/domain/model/EndPointPO.java
  7. 6 0
      core/src/main/java/com/mooctest/crowd/domain/model/TestTypePO.java
  8. 89 1
      core/src/main/java/com/mooctest/crowd/domain/repository/CrowdTestProjectRepo.java
  9. 9 0
      core/src/main/java/com/mooctest/crowd/domain/repository/ICrowdTestProjectRepo.java
  10. 7 0
      site/src/main/java/com/mooctest/crowd/site/command/CrowdTestTaskCommand.java
  11. 16 0
      site/src/main/java/com/mooctest/crowd/site/command/EndPointCommand.java
  12. 2 0
      site/src/main/java/com/mooctest/crowd/site/data/TaskOperationControl.java
  13. 2 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTaskVO.java
  14. 21 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/EndPointVO.java
  15. 4 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/TestTypeVO.java
  16. 2 0
      site/src/main/java/com/mooctest/crowd/site/mediator/ViewMediator.java
  17. 46 7
      site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java
  18. 16 0
      site/src/main/java/com/mooctest/crowd/site/service/EndPointService.java
  19. 10 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdReportServiceImpl.java
  20. 11 2
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTaskServiceImpl.java
  21. 46 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/EndPointServiceImpl.java

+ 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 {

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

@@ -0,0 +1,12 @@
+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;
+}

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

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

@@ -0,0 +1,30 @@
+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;
+
+}

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

+ 89 - 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,35 @@ 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();
+                            addEndPointPO.setCaseId(endPoint.getCaseId());
+                            addEndPointPO.setExamId(endPoint.getExamId());
+                            addEndPointPO.setProjectCode(crowdTestProject.getCode());
+                            addEndPointPO.setTaskCode(crowdTestTask.getCode());
+                            endPointDao.save(addEndPointPO);
+                        }
+                    }
+                }else{
+                    Optional<EndPointPO> endPointPO = endPointDao.findByTaskCode(crowdTestTask.getCode());
+                    if(endPointPO.isPresent()){
+                        endPointDao.deleteEndPoint(crowdTestTask.getCode());
+                    }
+                }
+
             }
         }
         // 保存项目报告
@@ -178,6 +212,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 +343,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);
+
 }

+ 7 - 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,10 @@ public class CrowdTestTaskCommand {
         crowdTestTask.setFixedPrice(fixedPrice);
         crowdTestTask.setRequirementFile(requirementFile);
         crowdTestTask.setParticipantCount(participantCount);
+
+        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;
+}

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

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

@@ -0,0 +1,21 @@
+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 caseId;
+    private String examId;
+
+    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();
     }
 }

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

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

+ 46 - 7
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<>();
@@ -906,6 +909,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 +953,25 @@ public class WebMediatorImpl implements ViewMediator {
                         }).collect(Collectors.toList());
             }
             taskDetailsDTO.setAcceptedUserList(taskToUserVOS);
+
+            Optional<EndPointPO> endPointPOOptional = endPointDao.findByTaskCode(task.get().getCode());
+            // 判断是否具有配置项,提供跳转url
+            if(endPointPOOptional.isPresent()){
+                // 获取测试类型对应的跳转url
+                TestType testType = commonRepo.getTestTypeByAppCode(task.get().getType());
+                String url = testType.getUrl();
+                String reportUrl = url.replace("examId", endPointPOOptional.get().getExamId())
+                        .replace("caseId", endPointPOOptional.get().getCaseId())
+                        .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());
@@ -1587,6 +1610,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) {
@@ -1596,16 +1620,26 @@ 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);
             }
-            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 已拒绝视图
         //评测机构和测评人员视角
@@ -1629,6 +1663,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);
                     }
@@ -1647,7 +1687,6 @@ public class WebMediatorImpl implements ViewMediator {
                     }
 
                 }
-
             } else if (task.getDistributionType() == 2) {
                 if (task.getStatus() == CrowdTestTaskStatus.HAS_RELEASED) {
                     taskOperationControl.setReceive(true);

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

+ 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("当前用户没有此任务的操作权限!");
         }

+ 11 - 2
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;
@@ -153,6 +154,14 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
         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;
+    }
+}