소스 검색

Merge branch 'feature-V2.0' of http://git.mooctest.com/crowd-2019/crowd-test-service-backend into feature-V2.0

 Conflicts:
	site/src/main/java/com/mooctest/crowd/site/service/impl/UserServiceImpl.java
xuxuan 5 년 전
부모
커밋
1d4e6fd31b
36개의 변경된 파일481개의 추가작업 그리고 60개의 파일을 삭제
  1. 2 7
      core/src/main/java/com/mooctest/crowd/domain/IpAddress/AddressUtils.java
  2. 5 6
      core/src/main/java/com/mooctest/crowd/domain/IpAddress/Area.java
  3. 6 1
      core/src/main/java/com/mooctest/crowd/domain/dao/CrowdTestTaskDao.java
  4. 1 0
      core/src/main/java/com/mooctest/crowd/domain/dao/UserDao.java
  5. 6 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestProject.java
  6. 8 1
      core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestTask.java
  7. 1 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/EvaluationAgency.java
  8. 21 0
      core/src/main/java/com/mooctest/crowd/domain/repository/CrowdTestProjectRepo.java
  9. 4 0
      core/src/main/java/com/mooctest/crowd/domain/repository/IUserRepo.java
  10. 7 0
      core/src/main/java/com/mooctest/crowd/domain/repository/UserRepo.java
  11. 0 0
      site/src/main/java/com/mooctest/crowd/site/controller/CommonController.java
  12. 5 0
      site/src/main/java/com/mooctest/crowd/site/controller/PersonalDataController.java
  13. 6 8
      site/src/main/java/com/mooctest/crowd/site/controller/UserController.java
  14. 16 0
      site/src/main/java/com/mooctest/crowd/site/data/dto/DataDTO.java
  15. 1 1
      site/src/main/java/com/mooctest/crowd/site/data/dto/MyCrowdDTO.java
  16. 0 1
      site/src/main/java/com/mooctest/crowd/site/data/dto/QualificationDTO.java
  17. 20 0
      site/src/main/java/com/mooctest/crowd/site/data/dto/UserDataDTO.java
  18. 1 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/AgencyVO.java
  19. 26 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdProjectDataVO.java
  20. 22 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTaskDataVO.java
  21. 4 2
      site/src/main/java/com/mooctest/crowd/site/mediator/ViewMediator.java
  22. 88 12
      site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java
  23. 5 4
      site/src/main/java/com/mooctest/crowd/site/service/CommonService.java
  24. 2 0
      site/src/main/java/com/mooctest/crowd/site/service/PersonalDataService.java
  25. 8 0
      site/src/main/java/com/mooctest/crowd/site/service/ThemeSchedulerTaskService.java
  26. 7 0
      site/src/main/java/com/mooctest/crowd/site/service/ThemeStatusTaskService.java
  27. 13 2
      site/src/main/java/com/mooctest/crowd/site/service/impl/AgencyServiceImpl.java
  28. 24 4
      site/src/main/java/com/mooctest/crowd/site/service/impl/CommonServiceImpl.java
  29. 1 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdProjectServiceImpl.java
  30. 5 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTaskServiceImpl.java
  31. 5 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/PersonalDataServiceImpl.java
  32. 11 11
      site/src/main/java/com/mooctest/crowd/site/service/impl/ThemeSchedulerServiceImpl.java
  33. 119 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/ThemeSchedulerTaskServiceImpl.java
  34. 30 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/ThemeStatusTaskServiceImpl.java
  35. 0 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/UserServiceImpl.java
  36. 1 0
      site/src/main/java/com/mooctest/crowd/site/util/DataUtils.java

+ 2 - 7
core/src/main/java/com/mooctest/crowd/domain/IpAddress/AddressUtils.java

@@ -188,13 +188,8 @@ public class AddressUtils {
         log.info("返回数据================="+returnStr);
         JSONObject jsonObject = JSONObject.parseObject(returnStr);
         String  address=jsonObject.getString("addr");
-        Area  area=new Area(jsonObject.getString("pro"),jsonObject.getString("city"));
-        return  area;
-
-
-
-
-
+        Area area=new Area(jsonObject.getString("pro"),jsonObject.getString("city"));
+        return area;
     }
 
     // 这里我们举的例子是获取所在地省份名称,也可以改变上边getAddress的返回值,获取具体的市县名

+ 5 - 6
core/src/main/java/com/mooctest/crowd/domain/IpAddress/Area.java

@@ -11,14 +11,13 @@ import lombok.Data;
 @Data
 public class Area {
 
-    private  String pro;//省
-    private  String city;
+    private String pro;//省
+    private String city;
 
 
-
-    public  Area(String pro,String city){
-        this.pro=pro;
-        this.city=city;
+    public Area(String pro, String city) {
+        this.pro = pro;
+        this.city = city;
     }
 
 }

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

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

+ 1 - 0
core/src/main/java/com/mooctest/crowd/domain/dao/UserDao.java

@@ -6,6 +6,7 @@ import org.springframework.data.repository.CrudRepository;
 import org.springframework.data.repository.PagingAndSortingRepository;
 
 import javax.transaction.Transactional;
+import java.util.List;
 import java.util.Optional;
 
 @Transactional

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

@@ -2,6 +2,7 @@ package com.mooctest.crowd.domain.domainobject;
 
 import com.google.gson.Gson;
 import com.mooctest.crowd.domain.exception.*;
+import com.mooctest.crowd.domain.model.CrowdTestProjectPO;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -62,6 +63,11 @@ public class CrowdTestProject {
 //        return crowdTestProject;
 //    }
 
+    public CrowdTestProject(CrowdTestProjectPO crowdTestProjectPO){
+        this.code = crowdTestProjectPO.getCode();
+        this.name = crowdTestProjectPO.getName();
+    }
+
     /**
      * 更新项目信息
      *

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

@@ -15,7 +15,14 @@ import java.util.stream.Collectors;
  * @date 2019/7/11 14:14
  */
 @Data
-public class CrowdTestTask{
+public class CrowdTestTask {
+    public static final int HAS_REJECTED = -1;  //定向发布被拒
+    public static final int HAS_CREATED = 0;    //创建任务
+    public static final int HAS_RELEASED = 1;   //发布任务
+    public static final int HAS_RECEIVED = 2;   //接受任务
+    public static final int HAS_COMMITED = 3;   //区域管理员提交任务
+    public static final int HAS_FINISHED = 4;   //结束任务
+    public static final int HAS_TIME_OUT = 5; //时间截止
     private Long id;
     private String name;
     private String code;

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

@@ -43,6 +43,7 @@ public class EvaluationAgency {
         agencyPhoto = evaluationAgencyPO.getAgencyPhoto();
         evaluationAgencyName = evaluationAgencyPO.getEvaluationAgencyName();
         userId = evaluationAgencyPO.getUserId();
+        address = evaluationAgencyPO.getAddress();
         updateTime=evaluationAgencyPO.getUpdateTime();
         expireTime=evaluationAgencyPO.getExpireTime();
         checkTime=evaluationAgencyPO.getCheckTime();

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

@@ -296,6 +296,27 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
         return crowdTestProjectResult;
     }
 
+    public CrowdTestTask getTaskDetail(CrowdTestTask crowdTestTask, Long userId){
+        // 检索任务中的所有已接收任务的人员信息
+        List<TaskToUserPO> taskToUserPOList = taskToUserDao.findByTaskCode(crowdTestTask.getCode()).stream().filter(taskToUserPO -> taskToUserPO.getUserId().equals(userId)).collect(Collectors.toList());
+        List<TaskToUser> taskToUserList = taskToUserPOList.stream().map(taskToUserPO -> {
+            TaskToUser taskToUser = Converter.convert(TaskToUser.class, taskToUserPO);
+            // 获取人员详细信息
+            Optional<UserPO> userPOOptional = userDao.findById(taskToUser.getUserId());
+            if (userPOOptional.isPresent()) {
+                taskToUser.setUser(Converter.convert(User.class, userPOOptional.get()));
+            } else {
+                throw new HttpBadRequestException("无此人员的信息");
+            }
+            // 获取每个人员的报告信息
+            List<CrowdTestReport> crowdTestReportListResult = getReportByTaskCodeAndUserId(crowdTestTask.getCode(), taskToUser.getUserId());
+            taskToUser.setCrowdTestReportList(crowdTestReportListResult);
+            return taskToUser;
+        }).collect(Collectors.toList());
+        crowdTestTask.setAcceptedUserList(taskToUserList);
+        return crowdTestTask;
+    }
+
     /**
      * 通过任务code和人员id获取报告列表
      *

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

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

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

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

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
site/src/main/java/com/mooctest/crowd/site/controller/CommonController.java


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

@@ -38,6 +38,11 @@ public class PersonalDataController {
         return  personalDataService.addQualification(userId,qualificationVO);
     }
 
+    @RequestMapping(value = "/displayone/{id:\\d+}", method = RequestMethod.GET)
+    public QualificationDTO displayOneQualification(@PathVariable("id") long id){
+        return  personalDataService.getOne(id);
+    }
+
     @RequestMapping(value = "/updatequalification/{id:\\d+}/{userId:\\d+}", method = RequestMethod.PUT)
     public QualificationDTO updateQualification(@PathVariable("id") long id, @PathVariable("userId") long userId,@RequestBody QualificationVO qualificationVO){
         return  personalDataService.updateQualification(id,userId,qualificationVO);

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

@@ -155,7 +155,6 @@ public class UserController extends BaseController {
     }
 
 
-
     /**
      * 修改个人认证信息
      *
@@ -308,17 +307,16 @@ public class UserController extends BaseController {
 
     /**
      * 用户所在地
+     *
      * @param request
      * @return
      */
-    @RequestMapping(value = "index/address",method = RequestMethod.GET)
+    @RequestMapping(value = "index/address", method = RequestMethod.GET)
     public Area getAddressByIp(HttpServletRequest request) throws UnsupportedEncodingException {
-         String ip=DataUtils.getClientIp(request);
-         LOG.info("ip地址是========"+ip);
-          Area   area= AddressUtils.getProvinceName(ip);
-         return  area;
-
-
+        String ip = DataUtils.getClientIp(request);
+        LOG.info("ip地址是========" + ip);
+        Area area = AddressUtils.getProvinceName(ip);
+        return area;
     }
 
 }

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

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

+ 1 - 1
site/src/main/java/com/mooctest/crowd/site/data/dto/MyCrowdDTO.java

@@ -20,8 +20,8 @@ public class MyCrowdDTO implements Serializable {
     private List<CrowdProjectVO> myProjects;
     private List<CrowdProjectVO> handlingProjects;
     private List<CrowdProjectVO> acceptableProjects;
+    private List<CrowdProjectVO> finishedProjects;
     private Long myProjectNoticeCount;
     private Long processProjectNoticeCount;
     private Long acceptableProjectNoticeCount;
-
 }

+ 0 - 1
site/src/main/java/com/mooctest/crowd/site/data/dto/QualificationDTO.java

@@ -9,5 +9,4 @@ import java.util.List;
 public class QualificationDTO {
     private QualificationVO qualificationVO;
     private List<QualificationVO> qualificationVOList;
-
 }

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

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

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

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

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

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

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

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

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

@@ -40,6 +40,8 @@ public interface ViewMediator {
 
     MyCrowdDTO renderMyCrowd(Long userId);
 
+    UserDataDTO renderMyCrowdData(Long userId);
+
     TaskSquareDTO renderTaskSquare();
 
     ProjectDetailsDTO renderProjectDetails(CrowdTestProject project, User user);
@@ -66,8 +68,6 @@ public interface ViewMediator {
     //任务模糊查询
     List<CrowdTaskVO>  findTaskByNameLike(String name);
 
-
-
     List<CrowdTestProjectVO>   crowdTestProjects();
 
     List<CrowdTaskVO>    crowdTaskVos();
@@ -97,4 +97,6 @@ public interface ViewMediator {
     ResourceVO getResourceDetailed(String code);
 
     List<ResourceVO>  getSearchResource(String name);
+
+    QualificationDTO getOne(long id);
 }

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

@@ -113,19 +113,18 @@ public class WebMediatorImpl implements ViewMediator {
 
     @Override
     public List<UserVO> renderMoreUser(Pageable pageable) {
-        List<UserVO> userVOS = new ArrayList<>();
-        List<RankCountInfo> rankCountInfos = taskToUserDao.findTotalCountOfUser();
-        long[] ids = new long[rankCountInfos.size()];
-        for (int i = 0; i < rankCountInfos.size(); i++) {
-            if (userDao.findById(rankCountInfos.get(i).getEntityId()).isPresent()) {
-                ids[i] = rankCountInfos.get(i).getEntityId();
-                Optional<UserPO> userPO = userDao.findById(ids[i]);
-                User user = new User(userPO.get());
+        //获取众测人员排名
+        String agencyName = agencyDao.findById(Long.parseLong(agencyId)).get().getEvaluationAgencyName();
+        List<UserVO> userVOS = taskToUserDao.findTotalCountOfUser().stream().map(rankInfo -> {
+            EvaluationAgencyPO agency = agencyDao.findByUserId(rankInfo.getEntityId());
+            if (agency != null && agency.getEvaluationAgencyName().equals(agencyName)) {
+                User user = userRepo.getByID(agency.getUserId());
                 UserVO userVO = new UserVO(user);
-                userVO.setTaskCount(rankCountInfos.get(i).getCount());
-                userVOS.add(userVO);
+                userVO.setTaskCount(rankInfo.getCount());
+                return userVO;
             }
-        }
+            return null;
+        }).filter(Objects::nonNull).collect(Collectors.toList());
         return userVOS;
     }
 
@@ -493,6 +492,57 @@ public class WebMediatorImpl implements ViewMediator {
         return myCrowdDTO;
     }
 
+    @Override
+    public UserDataDTO renderMyCrowdData(Long userId) {
+        UserDataDTO userDataDTO = new UserDataDTO();
+        User user = userRepo.getByID(userId);
+        //我的众测 - 项目相关信息
+        //获取我创建的项目列表
+        List<CrowdProjectDataVO> myProjects = projectDao.findByUserIdAndIsDeleted(userId, DeletedStatus.isNotDeleted).stream().map(CrowdTestProject::new).collect(Collectors.toList())
+                .stream().map(CrowdProjectDataVO::new).collect(Collectors.toList());
+        UserVO userVO = new UserVO(user);
+        userDataDTO.setMyProjects(myProjects);
+        userDataDTO.setUserVO(userVO);
+        if (user.getRoleList().stream().noneMatch(role -> role.getName().equals("evaluationAgency")))
+            return userDataDTO;
+        List<CrowdTestTask> allTaskOfAgency = null;
+        List<CrowdTestTask> unfinishedTasks = null;
+        List<CrowdTestTask> finishedTasks = null;
+        if (user.getRoleList().stream().anyMatch(role -> role.getName().equals("evaluationAgency"))) {
+            List<TaskToUserPO> taskToUserPOS = taskToUserDao.findByUserId(user.getId());
+            if (taskToUserPOS != null && taskToUserPOS.size() > 0) {
+                allTaskOfAgency = taskToUserPOS.stream().sorted(Comparator.comparing(TaskToUserPO::getAcceptTime))
+                        .map(taskToUserPO -> {
+                            CrowdTestTaskPO crowdTestTaskPO = taskDao.findByCodeAndIsDeleted(taskToUserPO.getTaskCode(), DeletedStatus.isNotDeleted);
+                            if (crowdTestTaskPO != null) {
+                                CrowdTestTask task = new CrowdTestTask();
+                                BeanUtils.copyProperties(crowdTestTaskPO, task);
+
+                                // 测试类型的转换
+                                Optional<TestTypePO> testTypePO = testTypeDao.findByCode(task.getType());
+                                if (!testTypePO.isPresent()) {
+                                    throw new HttpBadRequestException("请选择测试类型");
+                                }
+                                task.setType(testTypePO.get().getName());
+                                CrowdTestTask taskDetail = projectRepo.getTaskDetail(task, user.getId());
+                                return taskDetail;
+                            }
+                            return null;
+                        }).collect(Collectors.toList());
+                unfinishedTasks = allTaskOfAgency.stream()
+                        .filter(crowdTestTask -> crowdTestTask.getStatus() >= CrowdTestTaskStatus.HAS_RELEASED && crowdTestTask.getStatus() < CrowdTestTaskStatus.HAS_FINISHED)
+                        .collect(Collectors.toList());
+
+                finishedTasks = allTaskOfAgency.stream()
+                        .filter(crowdTestTask -> crowdTestTask.getStatus() == CrowdTestTaskStatus.HAS_FINISHED)
+                        .collect(Collectors.toList());
+            }
+        }
+        userDataDTO.setFinishedTasks(finishedTasks);
+        userDataDTO.setUnfinishedTasks(unfinishedTasks);
+        return userDataDTO;
+    }
+
     private CrowdProjectVO changeApplicationType(CrowdProjectVO projectVO) {
         // 应用类型值的转换
         Optional<ApplicationTypePO> applicationTypePO = applicationTypeDao.findByCode(projectVO.getPlatform());
@@ -991,7 +1041,18 @@ public class WebMediatorImpl implements ViewMediator {
             BankCardVO bankCardVO = new BankCardVO();
             bankCardVO.setId(bankCardPO.getId());
             bankCardVO.setUser(bankCardPO.getUser());
-            bankCardVO.setNumber(bankCardPO.getNumber());
+            int length=bankCardPO.getNumber().length();
+            int afterLength = 4;
+            String replaceSymbol = "*";
+            StringBuffer sb = new StringBuffer();
+            for (int i = 0; i < length; i++) {
+                if (i >= (length - afterLength)) {
+                            sb.append(bankCardPO.getNumber().charAt(i));
+                } else {
+                            sb.append(replaceSymbol);
+                        }
+                bankCardVO.setNumber(sb.toString());
+            }
             Optional<BankLogoPO> bankLogo = bankLogoDao.findByCode(bankCardPO.getCode());
             bankCardVO.setLogoUrl(bankLogo.get().getLogoUrl());
             bankCardVO.setName(bankLogo.get().getName());
@@ -1113,6 +1174,21 @@ public class WebMediatorImpl implements ViewMediator {
         return results;
     }
 
+    @Override
+    public QualificationDTO getOne(long id) {
+        QualificationDTO qualificationDTO = new QualificationDTO();
+        Optional<QualificationPO> qualificationPO = qualificationDao.findById(id);
+        QualificationVO qualificationVO = new QualificationVO();
+        qualificationVO.setId(qualificationPO.get().getId());
+        qualificationVO.setName(qualificationPO.get().getName());
+        qualificationVO.setNumber(qualificationPO.get().getNumber());
+        qualificationVO.setLicensingAuthority(qualificationPO.get().getLicensingAuthority());
+        qualificationVO.setTime(qualificationPO.get().getTime());
+        qualificationVO.setIsPublic(qualificationPO.get().getIsPublic());
+        qualificationDTO.setQualificationVO(qualificationVO);
+        return qualificationDTO;
+}
+
     private ProjectOperationControl initProjectPermission(CrowdTestProject project, User user) {
         ProjectOperationControl operationControl = new ProjectOperationControl();
         if (user == null)

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

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

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

@@ -27,4 +27,6 @@ public interface PersonalDataService {
     BankCardDTO addBankCard(long userId,BankCardVO bankCardVO) throws JSONException;
 
     BankCardDTO deleteBankCard(long id,long userId);
+
+    QualificationDTO getOne(long id);
 }

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

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

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

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

+ 13 - 2
site/src/main/java/com/mooctest/crowd/site/service/impl/AgencyServiceImpl.java

@@ -104,7 +104,8 @@ public class AgencyServiceImpl implements AgencyService {
                 EvaluationAgency evaluationAgency = new EvaluationAgency(evaluationAgencyPO);
                 EvaluationAgencyVO evalutionAgencyVO = new EvaluationAgencyVO(evaluationAgency);
                 evalutionAgencyVO.setTaskCount(rankInfos.get(i).getCount());
-                evalutionAgencyVO.setAddress((user.get().getProvince() + user.get().getCity()).replaceAll("null", ""));
+                evalutionAgencyVO.setAddress(evaluationAgency.getAddress());
+//                evalutionAgencyVO.setAddress((user.get().getProvince() + user.get().getCity()).replaceAll("null", ""));
                 list.add(evalutionAgencyVO);
             }
         }
@@ -209,7 +210,17 @@ public class AgencyServiceImpl implements AgencyService {
         EvaluationAgency agency = user.getEvaluationAgency();
         if (agency == null)
             throw new EvaluationAgencyNotExistException("当前用户未申请机构认证");
-        return new AgencyVO(user.getEvaluationAgency());
+        AgencyVO agencyVO = new AgencyVO(user.getEvaluationAgency());
+
+        List<RankCountInfo> rankCountInfoList = taskToUserDao.findTotalCountOfUser();
+        long ids[] = new long[rankCountInfoList.size()];
+        for (int i = 0; i < ids.length; i++) {
+            ids[i] = rankCountInfoList.get(i).getEntityId();
+            if (ids[i] == agencyVO.getUserId()) {
+                agencyVO.setTaskCount(rankCountInfoList.get(i).getCount());
+            }
+        }
+        return agencyVO;
     }
 
 

+ 24 - 4
site/src/main/java/com/mooctest/crowd/site/service/impl/CommonServiceImpl.java

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

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

@@ -362,6 +362,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
 
     @Override
     public List<CrowdTestProject> getByProject() {
+
         return projectRepo.getByProject();
     }
 

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

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

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

@@ -62,4 +62,9 @@ public class PersonalDataServiceImpl implements PersonalDataService {
     public BankCardDTO deleteBankCard(long id, long userId) {
         return viewMediator.deleteBankCard(id,userId);
     }
+
+    @Override
+    public QualificationDTO getOne(long id) {
+        return viewMediator.getOne(id);
+    }
 }

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

@@ -43,24 +43,24 @@ public class ThemeSchedulerServiceImpl implements ThemeSchedulerService {
         return false;
     }
 
-    public String generateNextCronExp(CrowdTestProject themeDetail) {
+    public String generateNextCronExp(CrowdTestProject crowdTestProject) {
         String cronExp = null;
         String dateFormat="ss mm HH dd MM EE";
         SimpleDateFormat sdf = new SimpleDateFormat(dateFormat, Locale.US);
         Date now = new Date();
-        if(now.before(themeDetail.getCreateTime())) {
-            cronExp = sdf.format(themeDetail.getCreateTime());
-        } else if(now.before(themeDetail.getDeadTime())){
-            cronExp = sdf.format(themeDetail.getDeadTime());
+        if(now.before(crowdTestProject.getCreateTime())) {
+            cronExp = sdf.format(crowdTestProject.getCreateTime());
+        } else if(now.before(crowdTestProject.getDeadTime())){
+            cronExp = sdf.format(crowdTestProject.getDeadTime());
         }
         return cronExp;
     }
     @Override
-    public boolean cancelThemeScheduler(CrowdTestProject themeDetail) {
-        if(this.map.containsKey(themeDetail)) {
-            ThemeScheduler themeDetailScheduler = map.get(themeDetail);
+    public boolean cancelThemeScheduler(CrowdTestProject crowdTestProject) {
+        if(this.map.containsKey(crowdTestProject)) {
+            ThemeScheduler themeDetailScheduler = map.get(crowdTestProject);
             themeDetailScheduler.stopCron();
-            map.remove(themeDetail);
+            map.remove(crowdTestProject);
             return true;
         }
         return false;
@@ -98,12 +98,12 @@ public class ThemeSchedulerServiceImpl implements ThemeSchedulerService {
 
             public MyRunnable() {}
 
-            public MyRunnable (CrowdTestProject themeDetail) {
+            public MyRunnable (CrowdTestProject crowdTestProject) {
                 this.crowdTestProject = crowdTestProject;
             }
-
             @Override
             public void run() {
+                System.out.println("ThemeScheduler " + this.crowdTestProject.getName() + " updateStatus," + new Date());
                 Integer result = themeStatusService.updateStatus(this.crowdTestProject);
                 map.remove(crowdTestProject);
                 if(result.equals(CrowdTestProject.HAS_CREATED) || result.equals(CrowdTestProject.HAS_RELEASED)) {

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

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

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

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

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
site/src/main/java/com/mooctest/crowd/site/service/impl/UserServiceImpl.java


+ 1 - 0
site/src/main/java/com/mooctest/crowd/site/util/DataUtils.java

@@ -73,6 +73,7 @@ public class DataUtils {
         String ipAddress = null;
         try {
             ipAddress = request.getHeader("x-forwarded-for");
+            System.out.println("ipAddress " + ipAddress);
             if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                 ipAddress = request.getHeader("Proxy-Client-IP");
             }

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.