Browse Source

add resource token

willliamguo 3 years ago
parent
commit
445afade0a

+ 17 - 0
core/src/main/java/com/mooctest/crowd/domain/dao/ResourceTokenDao.java

@@ -0,0 +1,17 @@
+package com.mooctest.crowd.domain.dao;
+
+import com.mooctest.crowd.domain.model.EndPointPO;
+import com.mooctest.crowd.domain.model.ResourceTokenPO;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+import javax.transaction.Transactional;
+import java.util.Optional;
+
+
+@Transactional
+public interface ResourceTokenDao extends PagingAndSortingRepository<ResourceTokenPO, Long> ,CrudRepository<ResourceTokenPO, Long>, JpaRepository<ResourceTokenPO, Long> ,JpaSpecificationExecutor<EndPointPO>{
+    Optional<ResourceTokenPO> findByProjectCodeAndTaskCodeAndUserId(String projectCode, String taskCode, Long userId);
+}

+ 23 - 0
core/src/main/java/com/mooctest/crowd/domain/domainobject/ResourceToken.java

@@ -0,0 +1,23 @@
+package com.mooctest.crowd.domain.domainobject;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ResourceToken {
+    private Long id;
+    private String projectCode;
+    private String taskCode;
+    private Long userId;
+    private String token;
+
+    public ResourceToken(String projectCode, String taskCode, Long userId, String token) {
+        this.projectCode = projectCode;
+        this.taskCode = taskCode;
+        this.userId = userId;
+        this.token = token;
+    }
+}

+ 29 - 0
core/src/main/java/com/mooctest/crowd/domain/model/ResourceTokenPO.java

@@ -0,0 +1,29 @@
+package com.mooctest.crowd.domain.model;
+
+import lombok.Data;
+
+import javax.persistence.*;
+
+
+@Data
+@Entity
+@Table(name = "resource_token")
+public class ResourceTokenPO {
+
+    @Id
+    @Column(name = "RT_ID")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @Column(name = "RT_P_CODE")
+    private String projectCode;
+
+    @Column(name = "RT_T_CODE")
+    private String taskCode;
+
+    @Column(name = "RT_U_ID")
+    private Long userId;
+
+    @Column(name = "RT_TOKEN")
+    private String token;
+}

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

@@ -138,4 +138,18 @@ public class CrowdTaskController{
     public ResponseVO<List<JabaResult>> getTaskWord(@PathVariable("projectCode") String projectCode, @PathVariable("taskCode") String taskCode, HttpSession session){
         return new ResponseVO<>(ServerCode.SUCCESS, taskService.getTaskWord(projectCode, taskCode));
     }
+
+    /**
+     * 获取project task user对应的中认token
+     * @return
+     */
+    @LoginRequired
+    @RequestMapping(value = "/project/{projectCode}/task/{taskCode}/token", method = RequestMethod.GET)
+    public ResponseVO<String> getToken(@PathVariable("projectCode") String projectCode, @PathVariable("taskCode") String taskCode, HttpSession session){
+        Object user = session.getAttribute("userId");
+        if (user == null)
+            return new ResponseVO<>(ServerCode.ERROR, "未登录,请先登录");
+        Long userId = Long.parseLong((String)session.getAttribute("userId"));
+        return new ResponseVO<>(ServerCode.SUCCESS, taskService.getToken(projectCode, taskCode, userId));
+    }
 }

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

@@ -701,7 +701,7 @@ public class WebMediatorImpl implements ViewMediator {
                         }).filter(Objects::nonNull).collect(Collectors.toList());
                 if(allTaskOfAgency != null && allTaskOfAgency.size() > 0){
                     unfinishedTasks = allTaskOfAgency.stream()
-                            .filter(crowdTestTask -> crowdTestTask.getStatus() >= CrowdTestTaskStatus.HAS_RELEASED && crowdTestTask.getStatus() < CrowdTestTaskStatus.HAS_FINISHED)
+                            .filter(crowdTestTask -> crowdTestTask.getStatus() >= CrowdTestTaskStatus.HAS_RELEASED && (crowdTestTask.getStatus() < CrowdTestTaskStatus.HAS_FINISHED || crowdTestTask.getStatus() == CrowdTestTaskStatus.HAS_TIME_OUT))
                             .sorted(Comparator.comparing(CrowdTestTask::getCreateTime).reversed())
                             .map(CrowdTaskVO::new).collect(Collectors.toList());
 

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

@@ -44,4 +44,6 @@ public interface CrowdTaskService {
     TaskDetailsDTO addToken(String projectCode, String taskCode, Long userId, String token);
 
     List<JabaResult> getTaskWord(String projectCode, String taskCode);
+
+    String getToken(String projectCode, String taskCode, Long userId);
 }

+ 21 - 4
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTaskServiceImpl.java

@@ -2,18 +2,19 @@ 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;
-import com.mooctest.crowd.domain.domainobject.DistributeType;
+import com.mooctest.crowd.domain.dao.ResourceTokenDao;
+import com.mooctest.crowd.domain.domainobject.*;
 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.model.ResourceTokenPO;
 import com.mooctest.crowd.domain.repository.CommonRepo;
 import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
 import com.mooctest.crowd.domain.repository.CrowdTestTaskRepo;
 import com.mooctest.crowd.domain.repository.UserRepo;
+import com.mooctest.crowd.domain.util.Converter;
+import com.mooctest.crowd.domain.util.MD5Base64Util;
 import com.mooctest.crowd.site.command.CrowdTestTaskCommand;
 import com.mooctest.crowd.site.data.dto.TaskDetailsDTO;
 import com.mooctest.crowd.site.data.dto.TaskSquareDTO;
@@ -47,6 +48,9 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
     private EndPointDao endPointDao;
 
     @Autowired
+    private ResourceTokenDao resourceTokenDao;
+
+    @Autowired
     CrowdTestProjectRepo projectRepo;
 
     @Autowired
@@ -236,5 +240,18 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
         return TFIDFAnalyzer.getInstance().extractTagsList(taskDetails.getCrowdTaskVO().getDescription(), 20);
     }
 
+    @Override
+    public String getToken(String projectCode, String taskCode, Long userId) {
+        Optional<ResourceTokenPO> resourceTokenPOOptional = resourceTokenDao.findByProjectCodeAndTaskCodeAndUserId(projectCode, taskCode, userId);
+        if(resourceTokenPOOptional.isPresent()){
+            return resourceTokenPOOptional.get().getToken();
+        }else{
+            String token = MD5Base64Util.EncryptionByBase64(projectCode + "-" + taskCode + "-" + userId);
+            ResourceToken resourceToken = new ResourceToken(projectCode, taskCode, userId, token);
+            ResourceTokenPO resourceTokenPO = resourceTokenDao.save(Converter.convert(ResourceTokenPO.class, resourceToken));
+            return resourceTokenPO.getToken();
+        }
+    }
+
 }