|
|
@@ -0,0 +1,754 @@
|
|
|
+package com.mooctest.crowd.domain.controller;
|
|
|
+
|
|
|
+import com.google.gson.Gson;
|
|
|
+import com.mooctest.crowd.domain.domainobject.*;
|
|
|
+import com.mooctest.crowd.domain.model.CrowdTestProjectPO;
|
|
|
+import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
|
|
|
+import com.mooctest.crowd.domain.repository.UserRepo;
|
|
|
+import com.mooctest.crowd.domain.util.Converter;
|
|
|
+import com.mooctest.crowd.domain.util.FileUtil;
|
|
|
+import org.apache.poi.hssf.usermodel.HSSFCell;
|
|
|
+import org.apache.poi.hssf.usermodel.HSSFRow;
|
|
|
+import org.apache.poi.hssf.usermodel.HSSFSheet;
|
|
|
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.web.bind.annotation.PathVariable;
|
|
|
+import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestMethod;
|
|
|
+import org.springframework.web.bind.annotation.RestController;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
+
|
|
|
+import java.io.FileNotFoundException;
|
|
|
+import java.io.IOException;
|
|
|
+import java.sql.Timestamp;
|
|
|
+import java.text.DecimalFormat;
|
|
|
+import java.util.*;
|
|
|
+import java.util.regex.Matcher;
|
|
|
+import java.util.regex.Pattern;
|
|
|
+import java.util.regex.PatternSyntaxException;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author guochao
|
|
|
+ * @date 2019-07-27 15:46
|
|
|
+ */
|
|
|
+
|
|
|
+@RestController
|
|
|
+@RequestMapping("/api/project/")
|
|
|
+public class CrowdTestProjectController {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CrowdTestProjectRepo crowdTestProjectRepo;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private UserRepo userRepo;
|
|
|
+
|
|
|
+ @RequestMapping(value = "findById/{crowdTestProjectId}", method = RequestMethod.GET)
|
|
|
+ public String getCrowdTestProjectById(@PathVariable("crowdTestProjectId") Long crowdTestProjectId){
|
|
|
+ CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByID(crowdTestProjectId);
|
|
|
+ return crowdTestProject.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "findByProjectCode/{crowdTestProjectCode}", method = RequestMethod.GET)
|
|
|
+ public String getCrowdTestProjectByProjectCode(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode){
|
|
|
+ CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
|
|
|
+ return crowdTestProject.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "findByUserId/{userId}", method = RequestMethod.GET)
|
|
|
+ public String getAllCrowdTestProjectByUserId(@PathVariable("userId") Long userId){
|
|
|
+ List<CrowdTestProject> allCrowdTestProject = crowdTestProjectRepo.getCrowdListByUserId(userId);
|
|
|
+ return allCrowdTestProject.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "findByRMId/{regionalManagerId}", method = RequestMethod.GET)
|
|
|
+ public String getAllCrowdTestProjectByRMId(@PathVariable("regionalManagerId") Long regionalManagerId){
|
|
|
+ List<CrowdTestProject> allCrowdTestProject = crowdTestProjectRepo.getCrowdListByRegionalManagerId(regionalManagerId);
|
|
|
+ return allCrowdTestProject.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "findAll", method = RequestMethod.GET)
|
|
|
+ public String getAllCrowdTestProject(){
|
|
|
+ List<CrowdTestProject> allCrowdTestProject = crowdTestProjectRepo.getAllCrowdTestProject();
|
|
|
+ return allCrowdTestProject.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除项目(普通用户)
|
|
|
+ * @param crowdTestProjectCode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @RequestMapping(value = "deleteProject/{crowdTestProjectCode}", method = RequestMethod.GET)
|
|
|
+ public String deleteCrowdTestProjectByProjectCode(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode) {
|
|
|
+ CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
|
|
|
+ CrowdTestProject crowdTestProjectResult = crowdTestProject.removeCrowdTestProject();
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
|
|
|
+ return crowdTestProjectRepo.getAllCrowdTestProject().toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除任务(区域管理员)
|
|
|
+ * @param crowdTestProjectCode
|
|
|
+ * @param crowdTestTaskCode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @RequestMapping(value = "deleteTask/{crowdTestProjectCode}/{crowdTestTaskCode}", method = RequestMethod.GET)
|
|
|
+ public String deleteCrowdTestTask(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode,
|
|
|
+ @PathVariable("crowdTestTaskCode") String crowdTestTaskCode) {
|
|
|
+ CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
|
|
|
+ CrowdTestProject crowdTestProjectResult = crowdTestProject.removeCrowdTestTask(crowdTestTaskCode);
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
|
|
|
+ return crowdTestProjectRepo.getAllCrowdTestProject().toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除任务报告(测评机构)
|
|
|
+ * @param crowdTestProjectCode
|
|
|
+ * @param crowdTestTaskCode
|
|
|
+ * @param crowdTestReportCode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @RequestMapping(value = "deleteReport/{crowdTestProjectCode}/{crowdTestTaskCode}/{crowdTestReportCode}", method = RequestMethod.GET)
|
|
|
+ public String deleteCrowdTestReport(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode,
|
|
|
+ @PathVariable("crowdTestTaskCode") String crowdTestTaskCode,
|
|
|
+ @PathVariable("crowdTestReportCode") String crowdTestReportCode) {
|
|
|
+ CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
|
|
|
+ CrowdTestProject crowdTestProjectResult = crowdTestProject.removeCrowdTestReport(crowdTestTaskCode,crowdTestReportCode);
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
|
|
|
+ return crowdTestProjectRepo.getAllCrowdTestProject().toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除项目报告(区域管理员)
|
|
|
+ * @param crowdTestProjectCode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @RequestMapping(value = "deleteProjectReport/{crowdTestProjectCode}", method = RequestMethod.GET)
|
|
|
+ public String deleteCrowdTestReport(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode) {
|
|
|
+ CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
|
|
|
+ CrowdTestProject crowdTestProjectResult = crowdTestProject.removeCrowdTestProjectReport();
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
|
|
|
+ return crowdTestProjectRepo.getAllCrowdTestProject().toString();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @RequestMapping(value = "deleteListByProjectCode/{crowdTestProjectCode1}/{crowdTestProjectCode2}", method = RequestMethod.GET)
|
|
|
+ public void deleteCrowdTestProjectByProjectCode(@PathVariable("crowdTestProjectCode1") String crowdTestProjectCode1,
|
|
|
+ @PathVariable("crowdTestProjectCode2") String crowdTestProjectCode2) {
|
|
|
+ CrowdTestProject crowdTestProject1 = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode1);
|
|
|
+ CrowdTestProject crowdTestProject2 = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode2);
|
|
|
+ List<CrowdTestProject> crowdTestProjectList = new ArrayList<>();
|
|
|
+ crowdTestProjectList.add(crowdTestProject1);
|
|
|
+ crowdTestProjectList.add(crowdTestProject2);
|
|
|
+ crowdTestProjectRepo.removeCrowdTestProjectList(crowdTestProjectList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 对项目聚合根的操作
|
|
|
+ */
|
|
|
+
|
|
|
+ @RequestMapping(value = "modifyProject/{crowdTestProjectCode}/{linkMan}", method = RequestMethod.GET)
|
|
|
+ public void modifyCrowdTestProject(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode,@PathVariable("linkMan") String linkMan){
|
|
|
+ CrowdTestProject crowdTestProjectModify;
|
|
|
+
|
|
|
+ CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
|
|
|
+ Gson gson = new Gson();
|
|
|
+ crowdTestProjectModify = gson.fromJson(gson.toJson(crowdTestProject), CrowdTestProject.class);
|
|
|
+ crowdTestProjectModify.setLinkMan(linkMan);
|
|
|
+ CrowdTestProject updateCrowdTestProject = crowdTestProject.updateCrowdTestProject(crowdTestProject, crowdTestProjectModify);
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(updateCrowdTestProject);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @RequestMapping(value = "modifyTask/{crowdTestProjectCode}/{crowdTestTaskCode}/{taskName}", method = RequestMethod.GET)
|
|
|
+ public void modifyCrowdTestTask(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode, @PathVariable("crowdTestTaskCode") String crowdTestTaskCode,
|
|
|
+ @PathVariable("taskName") String taskName){
|
|
|
+ CrowdTestTask crowdTestTaskModify = new CrowdTestTask();
|
|
|
+ CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
|
|
|
+ List<CrowdTestTask> crowdTestTaskList = crowdTestProject.getCrowdTestTaskList();
|
|
|
+ for(CrowdTestTask crowdTestTaskSelect : crowdTestTaskList){
|
|
|
+ if(crowdTestTaskCode.equals(crowdTestTaskSelect.getCode())){
|
|
|
+ // 使用Gson序列化进行深拷贝
|
|
|
+ Gson gson = new Gson();
|
|
|
+ crowdTestTaskModify = gson.fromJson(gson.toJson(crowdTestTaskSelect), CrowdTestTask.class);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ crowdTestTaskModify.setName(taskName);
|
|
|
+ CrowdTestProject updateCrowdTestProject = crowdTestProject.updateCrowdTestTask(crowdTestProject, crowdTestTaskCode, crowdTestTaskModify);
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(updateCrowdTestProject);
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "modifyReport/{crowdTestProjectCode}/{crowdTestTaskCode}/{crowdTestReportCode}/{reportName}", method = RequestMethod.GET)
|
|
|
+ public void modifyCrowdTestReport(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode, @PathVariable("crowdTestTaskCode") String crowdTestTaskCode,
|
|
|
+ @PathVariable("crowdTestReportCode") String crowdTestReportCode, @PathVariable("reportName") String reportName){
|
|
|
+ CrowdTestReport crowdTestReportModify = new CrowdTestReport();
|
|
|
+ CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
|
|
|
+ for(CrowdTestTask crowdTestTask : crowdTestProject.getCrowdTestTaskList()){
|
|
|
+ if(crowdTestTaskCode.equals(crowdTestTask.getCode())){
|
|
|
+ for(CrowdTestReport crowdTestReport : crowdTestTask.getCrowdTestReportList()){
|
|
|
+ if(crowdTestReportCode.equals(crowdTestReport.getCode())){
|
|
|
+ Gson gson = new Gson();
|
|
|
+ crowdTestReportModify = gson.fromJson(gson.toJson(crowdTestReport), CrowdTestReport.class);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ crowdTestReportModify.setName(reportName);
|
|
|
+ CrowdTestProject updateCrowdTestProject = crowdTestProject.updateCrowdTestReport(crowdTestProject, crowdTestTaskCode, crowdTestReportCode, crowdTestReportModify);
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(updateCrowdTestProject);
|
|
|
+ }
|
|
|
+
|
|
|
+ /*普通用户DO*/
|
|
|
+ /**
|
|
|
+ * 新建项目(普通用户)
|
|
|
+ * @param userId
|
|
|
+ * @param projectName
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @RequestMapping(value = "createProject/{userId}/{projectName}", method = RequestMethod.GET)
|
|
|
+ public String createCrowdTestProject(@PathVariable("userId") Long userId,@PathVariable("projectName") String projectName){
|
|
|
+ //数据准备
|
|
|
+ CrowdTestProject crowdTestProject = new CrowdTestProject();
|
|
|
+ crowdTestProject.setCode("PRO"+System.currentTimeMillis());
|
|
|
+ crowdTestProject.setName(projectName);
|
|
|
+ crowdTestProject.setProjectDistributionTypeId(1L);
|
|
|
+ crowdTestProject.setLinkMan("郭超");
|
|
|
+ crowdTestProject.setLinkManMobile("13657094936");
|
|
|
+ crowdTestProject.setQuotedPrice(200.00);
|
|
|
+ crowdTestProject.setDeadTime(new Timestamp(getNextDay(new Date(System.currentTimeMillis()),1).getTime()));
|
|
|
+ crowdTestProject.setCreateTime(new Timestamp(System.currentTimeMillis()));
|
|
|
+
|
|
|
+ User user = userRepo.getByID(userId);
|
|
|
+ CrowdTestProject crowdTestProjectResult = user.createCrowdTestProject(crowdTestProject);
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
|
|
|
+ return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发布项目(普通用户)
|
|
|
+ * @param userId
|
|
|
+ * @param crowdTestProjectCode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @RequestMapping(value = "releaseProject/{userId}/{crowdTestProjectCode}", method = RequestMethod.GET)
|
|
|
+ public String releaseCrowdTestProject(@PathVariable("userId") Long userId,@PathVariable("crowdTestProjectCode") String crowdTestProjectCode){
|
|
|
+ CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
|
|
|
+ User user = userRepo.getByID(userId);
|
|
|
+ CrowdTestProject crowdTestProjectResult = user.releaseCrowdTestProject(crowdTestProject);
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
|
|
|
+ return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 对区域管理员的操作
|
|
|
+ */
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 接收项目(区域管理员)
|
|
|
+ * @param regionalManagerId
|
|
|
+ * @param crowdTestProjectCode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @RequestMapping(value = "receiveProject/{regionalManagerId}/{crowdTestProjectCode}", method = RequestMethod.GET)
|
|
|
+ public String receiveTaskByProjectCode(@PathVariable("regionalManagerId") Long regionalManagerId, @PathVariable("crowdTestProjectCode") String crowdTestProjectCode) {
|
|
|
+ User userForRegionalManager = userRepo.getByID(regionalManagerId);
|
|
|
+ RegionalManager regionalManager = userForRegionalManager.getRegionalManager();
|
|
|
+
|
|
|
+ CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
|
|
|
+
|
|
|
+ CrowdTestProject crowdTestProjectResult = regionalManager.receiveProject(crowdTestProject);
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(crowdTestProject);
|
|
|
+ return crowdTestProjectResult.toString();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 项目中新建任务(区域管理员拆分项目)
|
|
|
+ * @param crowdTestProjectCode
|
|
|
+ * @param taskName
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @RequestMapping(value = "createTask/{regionalManagerId}/{crowdTestProjectCode}/{taskName}", method = RequestMethod.GET)
|
|
|
+ public String createCrowdTestTask(@PathVariable("regionalManagerId") Long regionalManagerId,@PathVariable("crowdTestProjectCode") String crowdTestProjectCode,@PathVariable("taskName") String taskName){
|
|
|
+ CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
|
|
|
+
|
|
|
+ //数据准备
|
|
|
+ CrowdTestTask crowdTestTask = new CrowdTestTask();
|
|
|
+ crowdTestTask.setCode(crowdTestProjectCode+"_TASK"+System.currentTimeMillis());
|
|
|
+ crowdTestTask.setName(taskName);
|
|
|
+ crowdTestTask.setCrowdTestProjectCode(crowdTestProjectCode);
|
|
|
+ crowdTestTask.setQuotedPrice(200.00);
|
|
|
+ crowdTestTask.setDeadTime(new Timestamp(getNextDay(new Date(System.currentTimeMillis()),1).getTime()));
|
|
|
+ crowdTestTask.setCreateTime(new Timestamp(System.currentTimeMillis()));
|
|
|
+
|
|
|
+ //具体操作
|
|
|
+ User userForRegionalManager = userRepo.getByID(regionalManagerId);
|
|
|
+ RegionalManager regionalManager = userForRegionalManager.getRegionalManager();
|
|
|
+
|
|
|
+ CrowdTestProject crowdTestProjectResult = regionalManager.createCrowdTestTask(crowdTestProject, crowdTestTask);
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
|
|
|
+ return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发布任务(区域管理员)
|
|
|
+ * @param crowdTestProjectCode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @RequestMapping(value = "releaseTask/{regionalManagerId}/{crowdTestProjectCode}/{crowdTestTaskCode}", method = RequestMethod.GET)
|
|
|
+ public String releaseCrowdTestTask(@PathVariable("regionalManagerId") Long regionalManagerId,@PathVariable("crowdTestProjectCode") String crowdTestProjectCode,
|
|
|
+ @PathVariable("crowdTestTaskCode") String crowdTestTaskCode){
|
|
|
+ CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
|
|
|
+ User userForRegionalManager = userRepo.getByID(regionalManagerId);
|
|
|
+ RegionalManager regionalManager = userForRegionalManager.getRegionalManager();
|
|
|
+
|
|
|
+ CrowdTestProject crowdTestProjectResult = regionalManager.releaseCrowdTestTask(crowdTestProject, crowdTestTaskCode);
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
|
|
|
+ return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 对测评机构的操作
|
|
|
+ */
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 接收任务(测评机构)
|
|
|
+ * @param userForEvaluationAgencyId
|
|
|
+ * @param crowdTestProjectCode
|
|
|
+ * @param crowdTestTaskCode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @RequestMapping(value = "receiveTask/{userForEvaluationAgencyId}/{crowdTestProjectCode}/{crowdTestTaskCode}", method = RequestMethod.GET)
|
|
|
+ public String receiveTaskByProjectCode(@PathVariable("userForEvaluationAgencyId") Long userForEvaluationAgencyId, @PathVariable("crowdTestProjectCode") String crowdTestProjectCode,
|
|
|
+ @PathVariable("crowdTestTaskCode") String crowdTestTaskCode) {
|
|
|
+ CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
|
|
|
+
|
|
|
+ User userForEvaluationAgency = userRepo.getByID(userForEvaluationAgencyId);
|
|
|
+ CrowdTestProject crowdTestProjectResult = userForEvaluationAgency.receiveTask(crowdTestProject, crowdTestTaskCode);
|
|
|
+ System.out.println(crowdTestProjectResult);
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
|
|
|
+ return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 项目的任务中新建报告(测评机构)
|
|
|
+ * @param crowdTestProjectCode
|
|
|
+ * @param reportName
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @RequestMapping(value = "createReport/{userForEvaluationAgencyId}/{crowdTestProjectCode}/{crowdTestTaskCode}/{reportName}", method = RequestMethod.GET)
|
|
|
+ public String createCrowdTestReport(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode,@PathVariable("userForEvaluationAgencyId") Long userForEvaluationAgencyId,
|
|
|
+ @PathVariable("reportName") String reportName, @PathVariable("crowdTestTaskCode") String crowdTestTaskCode){
|
|
|
+
|
|
|
+ CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
|
|
|
+
|
|
|
+ //report数据准备
|
|
|
+ CrowdTestReport crowdTestReport = new CrowdTestReport();
|
|
|
+ crowdTestReport.setCode(crowdTestTaskCode+"_REP"+System.currentTimeMillis());
|
|
|
+ crowdTestReport.setName(reportName);
|
|
|
+ crowdTestReport.setDependencyCode(crowdTestTaskCode);
|
|
|
+ crowdTestReport.setCreateTime(new Timestamp(System.currentTimeMillis()));
|
|
|
+
|
|
|
+ User userForEvaluationAgency = userRepo.getByID(userForEvaluationAgencyId);
|
|
|
+ CrowdTestProject crowdTestProjectResult = userForEvaluationAgency.createCrowdTestReport(crowdTestProject, crowdTestTaskCode, crowdTestReport);
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
|
|
|
+ return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 提交任务(测评机构)
|
|
|
+ * @param crowdTestProjectCode
|
|
|
+ * @param userForEvaluationAgencyId
|
|
|
+ * @param crowdTestTaskCode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @RequestMapping(value = "commitTask/{userForEvaluationAgencyId}/{crowdTestProjectCode}/{crowdTestTaskCode}", method = RequestMethod.GET)
|
|
|
+ public String commitCrowdTestReport(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode,@PathVariable("userForEvaluationAgencyId") Long userForEvaluationAgencyId,
|
|
|
+ @PathVariable("crowdTestTaskCode") String crowdTestTaskCode){
|
|
|
+
|
|
|
+ CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
|
|
|
+ User userForEvaluationAgency = userRepo.getByID(userForEvaluationAgencyId);
|
|
|
+ CrowdTestProject crowdTestProjectResult = userForEvaluationAgency.commitCrowdTestTask(crowdTestProject, crowdTestTaskCode);
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
|
|
|
+ return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 区域管理员的操作
|
|
|
+ */
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 确认结束任务(区域管理员)
|
|
|
+ * @param crowdTestProjectCode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @RequestMapping(value = "finishTask/{regionalManagerId}/{crowdTestProjectCode}", method = RequestMethod.GET)
|
|
|
+ public String commitCrowdTestTask(@PathVariable("regionalManagerId") Long regionalManagerId,@PathVariable("crowdTestProjectCode") String crowdTestProjectCode){
|
|
|
+ CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
|
|
|
+ User userForRegionalManager = userRepo.getByID(regionalManagerId);
|
|
|
+ RegionalManager regionalManager = userForRegionalManager.getRegionalManager();
|
|
|
+
|
|
|
+ CrowdTestProject crowdTestProjectResult = regionalManager.finishCrowdTestTask(crowdTestProject);
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
|
|
|
+ return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建项目报告(区域管理员)
|
|
|
+ * @param crowdTestProjectCode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @RequestMapping(value = "createProjectReport/{regionalManagerId}/{crowdTestProjectCode}/{projectReportName}", method = RequestMethod.GET)
|
|
|
+ public String createCrowdTestReport(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode,
|
|
|
+ @PathVariable("regionalManagerId") Long regionalManagerId,
|
|
|
+ @PathVariable("projectReportName") String projectReportName){
|
|
|
+
|
|
|
+ CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
|
|
|
+
|
|
|
+ //report数据准备
|
|
|
+ CrowdTestReport crowdTestReport = new CrowdTestReport();
|
|
|
+ crowdTestReport.setCode(crowdTestProjectCode+"_REP"+System.currentTimeMillis());
|
|
|
+ crowdTestReport.setName(projectReportName);
|
|
|
+ crowdTestReport.setDependencyCode(crowdTestProjectCode);
|
|
|
+ crowdTestReport.setCreateTime(new Timestamp(System.currentTimeMillis()));
|
|
|
+
|
|
|
+ User userForRegionalManager = userRepo.getByID(regionalManagerId);
|
|
|
+ RegionalManager regionalManager = userForRegionalManager.getRegionalManager();
|
|
|
+
|
|
|
+ CrowdTestProject crowdTestProjectResult = regionalManager.createCrowdTestProjectReport(crowdTestProject, crowdTestReport);
|
|
|
+
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
|
|
|
+ return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 提交项目(区域管理员)
|
|
|
+ * @param crowdTestProjectCode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @RequestMapping(value = "commitProject/{regionalManagerId}/{crowdTestProjectCode}", method = RequestMethod.GET)
|
|
|
+ public String commitProject(@PathVariable("regionalManagerId") Long regionalManagerId,@PathVariable("crowdTestProjectCode") String crowdTestProjectCode){
|
|
|
+ CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
|
|
|
+ User userForRegionalManager = userRepo.getByID(regionalManagerId);
|
|
|
+ RegionalManager regionalManager = userForRegionalManager.getRegionalManager();
|
|
|
+
|
|
|
+ CrowdTestProject crowdTestProjectResult = regionalManager.commitCrowdTestProject(crowdTestProject);
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
|
|
|
+ return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 对普通用户的操作
|
|
|
+ */
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 结束项目(普通用户)
|
|
|
+ * @param crowdTestProjectCode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @RequestMapping(value = "finishProject/{userId}/{crowdTestProjectCode}", method = RequestMethod.GET)
|
|
|
+ public String finishProject(@PathVariable("userId") Long userId,@PathVariable("crowdTestProjectCode") String crowdTestProjectCode){
|
|
|
+ CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
|
|
|
+ User user = userRepo.getByID(userId);
|
|
|
+
|
|
|
+ CrowdTestProject crowdTestProjectResult = user.finishCrowdTestProjet(crowdTestProject);
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
|
|
|
+ return crowdTestProjectRepo.getByProjectCode(crowdTestProjectResult.getCode()).toString();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 通过EXCEL向数据库中导入众包项目文件,并补全项目中任务和报告的数据
|
|
|
+ * @param file
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @RequestMapping(value = "projectListImportByExcel", method = RequestMethod.POST)
|
|
|
+ public String projectListImportByExcel(MultipartFile file){
|
|
|
+ //解析excel
|
|
|
+ List<CrowdTestProjectPO> crowdTestProjectPOList = FileUtil.importExcel(file,0,1,CrowdTestProjectPO.class);
|
|
|
+
|
|
|
+ for(int i = 0; i < crowdTestProjectPOList.size(); i++){
|
|
|
+ CrowdTestProject crowdTestProject = Converter.convert(CrowdTestProject.class, crowdTestProjectPOList.get(i));
|
|
|
+ CrowdTestProject crowdTestProjectResult = crowdTestProject.generateDefaultTaskAndReportData();
|
|
|
+ //TODO 保存数据库
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
|
|
|
+
|
|
|
+ }
|
|
|
+ System.out.println("共导入数据【"+crowdTestProjectPOList.size()+"】行");
|
|
|
+
|
|
|
+ return "success";
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 通过EXCEL向数据库中导入众包项目文件,并补全项目中任务和报告的数据
|
|
|
+ * @param file
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @RequestMapping(value = "projectImportByExcel", method = RequestMethod.POST)
|
|
|
+ public String projectImportByExcel(MultipartFile file) {
|
|
|
+ List<String> logList = new ArrayList<>();
|
|
|
+ List<Map<Integer,Object>> recordList = new ArrayList<>();
|
|
|
+ HSSFWorkbook workbook=null;
|
|
|
+ try {
|
|
|
+ workbook = new HSSFWorkbook(file.getInputStream());
|
|
|
+ } catch (FileNotFoundException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取指定标签页
|
|
|
+ HSSFSheet sheet = workbook.getSheetAt(0);
|
|
|
+ if(sheet==null){
|
|
|
+ throw new RuntimeException("标签页不存在!");
|
|
|
+ }
|
|
|
+
|
|
|
+ //总行数
|
|
|
+ int rows = sheet.getPhysicalNumberOfRows();
|
|
|
+ if (rows < 2) {
|
|
|
+ throw new RuntimeException(file.getName()+" 内容为空,请重新编辑!");
|
|
|
+ }
|
|
|
+
|
|
|
+ //不为空的单元格数 ,第一行是标题列
|
|
|
+ HSSFRow keyRow = sheet.getRow(0);
|
|
|
+ int cellNumber = keyRow.getPhysicalNumberOfCells();
|
|
|
+
|
|
|
+ //循环遍历,第一行是标题,所以从 1 开始遍历(0表示第一行,1表示第二行)
|
|
|
+ for (int r = 1; r < rows; r++) {
|
|
|
+ Map<Integer,Object> record = new LinkedHashMap<Integer,Object>();//使用HashMap的话,存进去的顺序与取出来的顺序是不一致的,此处需要使用LinkedHashMap
|
|
|
+ HSSFRow row = sheet.getRow(r);
|
|
|
+ if(row == null){
|
|
|
+ logList.add("表中存在错误的单元格,请把与内容无关的单元格置空");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (int c = 0; c < cellNumber; c++){ //共cellNumber列
|
|
|
+ HSSFCell cell = row.getCell(c);
|
|
|
+ String cellValue = "";
|
|
|
+ DecimalFormat df = new DecimalFormat("#");
|
|
|
+ //如果单元格不为空
|
|
|
+ if (cell != null) {
|
|
|
+ if(c == 1){
|
|
|
+ String platform =cell.getRichStringCellValue().getString().trim();
|
|
|
+ if(platform.length() == 0){
|
|
|
+ logList.add("第"+(r+1)+"行第"+(c+1)+"列数据为空");
|
|
|
+ }else{
|
|
|
+ if(!isPlatform(platform)){
|
|
|
+ logList.add("第"+(r+1)+"行第"+(c+1)+"列数据不符合要求");
|
|
|
+ }else{
|
|
|
+ String platformSave = "[" + platform + "]";
|
|
|
+ record.put(c,platformSave);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(c == 4){
|
|
|
+ String type =cell.getRichStringCellValue().getString().trim();
|
|
|
+ if(type.length() == 0){
|
|
|
+ logList.add("第"+(r+1)+"行第"+(c+1)+"列数据为空");
|
|
|
+ }else{
|
|
|
+ if(!isType(type)){
|
|
|
+ logList.add("第"+(r+1)+"行第"+(c+1)+"列数据不符合要求");
|
|
|
+ }else{
|
|
|
+ String typeSave = "[" + type + "]";
|
|
|
+ record.put(c,typeSave);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(c == 3){
|
|
|
+ String phone = cell.getRichStringCellValue().getString().trim();
|
|
|
+ if(!isRightPhone(phone)){
|
|
|
+ logList.add("第"+(r+1)+"行第"+(c+1)+"列手机号格式不正确");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ switch (cell.getCellType()) {
|
|
|
+ case HSSFCell.CELL_TYPE_STRING:
|
|
|
+ cellValue =cell.getRichStringCellValue().getString().trim();
|
|
|
+ if(cellValue.indexOf(" ") != -1){
|
|
|
+ logList.add("第"+(r+1)+"行第"+(c+1)+"列数据中存在空格");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case HSSFCell.CELL_TYPE_NUMERIC:
|
|
|
+ cellValue =df.format(cell.getNumericCellValue());
|
|
|
+ break;
|
|
|
+ case HSSFCell.CELL_TYPE_BOOLEAN:
|
|
|
+ cellValue =String.valueOf(cell.getBooleanCellValue()).trim();
|
|
|
+ break;
|
|
|
+ case HSSFCell.CELL_TYPE_FORMULA:
|
|
|
+ cellValue =cell.getCellFormula();
|
|
|
+ break;
|
|
|
+ case HSSFCell.CELL_TYPE_BLANK:
|
|
|
+ logList.add("第"+(r+1)+"行第"+(c+1)+"列数据为空");
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ cellValue = "";
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ logList.add("第"+(r+1)+"行第"+(c+1)+"列为空");
|
|
|
+ }
|
|
|
+ record.put(c,cellValue);
|
|
|
+ }
|
|
|
+ recordList.add(record);
|
|
|
+ }
|
|
|
+
|
|
|
+// System.out.println("logList.toString() " + logList.toString());
|
|
|
+// System.out.println("recordList.toString() " + recordList.toString());
|
|
|
+
|
|
|
+ if(logList.size() != 0){
|
|
|
+ String mes = "表格中存在问题,导入失败!";
|
|
|
+ return mes + logList.toString();
|
|
|
+ }else{
|
|
|
+ List<CrowdTestProjectPO> crowdTestProjectPOList = new ArrayList<>();
|
|
|
+ CrowdTestProjectPO crowdTestProjectPO = new CrowdTestProjectPO();
|
|
|
+ for(Map<Integer,Object> map : recordList){
|
|
|
+ crowdTestProjectPO.setName(map.get(0).toString());
|
|
|
+ crowdTestProjectPO.setPlatform(map.get(1).toString());
|
|
|
+ crowdTestProjectPO.setLinkMan(map.get(2).toString());
|
|
|
+ crowdTestProjectPO.setLinkManMobile(map.get(3).toString());
|
|
|
+ crowdTestProjectPO.setType(map.get(4).toString());
|
|
|
+ crowdTestProjectPO.setDescription(map.get(5).toString());
|
|
|
+ crowdTestProjectPOList.add(crowdTestProjectPO);
|
|
|
+ }
|
|
|
+ for(int i = 0; i < crowdTestProjectPOList.size(); i++){
|
|
|
+ CrowdTestProject crowdTestProject = Converter.convert(CrowdTestProject.class, crowdTestProjectPOList.get(i));
|
|
|
+ CrowdTestProject crowdTestProjectResult = crowdTestProject.generateDefaultTaskAndReportData();
|
|
|
+ //TODO 保存数据库
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
|
|
|
+ }
|
|
|
+ return "SUCCESS";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 通过表单向数据库中导入众包项目文件,并补全项目中任务和报告的数据
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @RequestMapping(value = "projectListImportByForm", method = RequestMethod.GET)
|
|
|
+ public String projectListImportByForm(){
|
|
|
+
|
|
|
+ //数据准备
|
|
|
+ CrowdTestProject crowdTestProject = new CrowdTestProject();
|
|
|
+ crowdTestProject.setName("百度APP");
|
|
|
+ crowdTestProject.setPlatform("[1,2]");
|
|
|
+ crowdTestProject.setLinkMan("薛晓波");
|
|
|
+ crowdTestProject.setLinkManMobile("13567908766");
|
|
|
+ crowdTestProject.setType("[1]");
|
|
|
+ crowdTestProject.setDescription("测试项目中存在的bug");
|
|
|
+
|
|
|
+ //具体操作
|
|
|
+ CrowdTestProject crowdTestProjectResult = crowdTestProject.generateDefaultTaskAndReportData();
|
|
|
+ //TODO 保存数据库
|
|
|
+ crowdTestProjectRepo.saveCrowdTestProject(crowdTestProjectResult);
|
|
|
+ return "success";
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 计算指定时间的后几天
|
|
|
+ */
|
|
|
+ private Date getNextDay(Date date, int day){
|
|
|
+ //计算相关的时间间隔
|
|
|
+ long addTime = 24*3600*1000;
|
|
|
+ addTime *= day;
|
|
|
+ //把时间间隔转换为毫秒数
|
|
|
+ Date nextDate=new Date(date.getTime() + addTime);
|
|
|
+ return nextDate;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 计算指定时间的前几天
|
|
|
+ */
|
|
|
+ private Date getBeforeDay(Date date, int day){
|
|
|
+ //计算相关的时间间隔
|
|
|
+ long subTime = 24*3600*1000;
|
|
|
+ subTime *= day;
|
|
|
+ //把时间间隔转换为毫秒数
|
|
|
+ Date beforeDate=new Date(date.getTime() - subTime);
|
|
|
+ return beforeDate;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 大陆手机号码11位数,匹配格式:前三位固定格式+后8位任意数
|
|
|
+ * 此方法中前三位格式有:
|
|
|
+ * 13+任意数
|
|
|
+ * 15+除4的任意数
|
|
|
+ * 18+除1和4的任意数
|
|
|
+ * 17+除9的任意数
|
|
|
+ * 147
|
|
|
+ */
|
|
|
+ private boolean isChinaPhoneLegal(String str) throws PatternSyntaxException {
|
|
|
+ String regExp = "^((13[0-9])|(15[^4])|(18[0,2,3,5-9])|(17[0-8])|(147))\\d{8}$";
|
|
|
+ Pattern p = Pattern.compile(regExp);
|
|
|
+ Matcher m = p.matcher(str);
|
|
|
+ return m.matches();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 香港手机号码8位数,5|6|8|9开头+7位任意数
|
|
|
+ */
|
|
|
+ private boolean isHKPhoneLegal(String str)throws PatternSyntaxException {
|
|
|
+ String regExp = "^(5|6|8|9)\\d{7}$";
|
|
|
+ Pattern p = Pattern.compile(regExp);
|
|
|
+ Matcher m = p.matcher(str);
|
|
|
+ return m.matches();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 座机号
|
|
|
+ */
|
|
|
+ private boolean isTel(String str)throws PatternSyntaxException {
|
|
|
+ String regExp = "^0[1-9](\\d{1,2}\\-?)\\d{7,8}";
|
|
|
+ Pattern p = Pattern.compile(regExp);
|
|
|
+ Matcher m = p.matcher(str);
|
|
|
+ return m.matches();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断手机号或者座机是正确
|
|
|
+ * @param phone
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private boolean isRightPhone(String phone){
|
|
|
+ if(phone.startsWith("0")){
|
|
|
+ if(!isTel(phone)){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if(!(isChinaPhoneLegal(phone) || isHKPhoneLegal(phone))){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 匹配平台类型 0,1,2 任意 ^[0-2](([,][0-2])?([,][0-2])?)$
|
|
|
+ */
|
|
|
+ private boolean isPlatform(String str)throws PatternSyntaxException {
|
|
|
+ String regExp = "^[0-2](([,][0-2])?([,][0-2])?)$";
|
|
|
+ Pattern p = Pattern.compile(regExp);
|
|
|
+ Matcher m = p.matcher(str);
|
|
|
+ return m.matches();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 匹配项目类型 0,1,2,3,4,5,6 任意 ^[0-6](([,][0-6])?([,][0-6])?([,][0-6])?([,][0-6])?([,][0-6])?([,][0-6])?)$
|
|
|
+ */
|
|
|
+ private boolean isType(String str)throws PatternSyntaxException {
|
|
|
+ String regExp = "^[0-6](([,][0-6])?([,][0-6])?([,][0-6])?([,][0-6])?([,][0-6])?([,][0-6])?)$";
|
|
|
+ Pattern p = Pattern.compile(regExp);
|
|
|
+ Matcher m = p.matcher(str);
|
|
|
+ return m.matches();
|
|
|
+ }
|
|
|
+}
|