|
@@ -1,14 +1,13 @@
|
|
|
package com.mooctest.crowd.domain.domainobject;
|
|
|
|
|
|
import com.google.gson.Gson;
|
|
|
-import com.mooctest.crowd.domain.exception.BaseException;
|
|
|
-import com.mooctest.crowd.domain.exception.CrowdTestProjectException;
|
|
|
+import com.mooctest.crowd.domain.exception.*;
|
|
|
import lombok.Data;
|
|
|
|
|
|
import java.sql.Timestamp;
|
|
|
import java.util.ArrayList;
|
|
|
-import java.util.Date;
|
|
|
import java.util.List;
|
|
|
+import java.util.Optional;
|
|
|
|
|
|
/**
|
|
|
* @author guochao
|
|
@@ -63,39 +62,35 @@ public class CrowdTestProject {
|
|
|
", distributionCity='" + distributionCity + '\'' +
|
|
|
", quotedPrice=" + quotedPrice +
|
|
|
", fixedPrice=" + fixedPrice +
|
|
|
- ", status='" + status + '\'' +
|
|
|
+ ", status=" + status +
|
|
|
", deadTime=" + deadTime +
|
|
|
", endTime=" + endTime +
|
|
|
- ", createTime=" + createTime +
|
|
|
", isDeleted=" + isDeleted +
|
|
|
+ ", createTime=" + createTime +
|
|
|
", crowdTestTaskList=" + crowdTestTaskList +
|
|
|
", crowdTestReportForProject=" + crowdTestReportForProject +
|
|
|
'}';
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 更新项目信息
|
|
|
- * @param crowdTestProject
|
|
|
* @param crowdTestProjectModify
|
|
|
* @return
|
|
|
*/
|
|
|
- public CrowdTestProject updateCrowdTestProject(CrowdTestProject crowdTestProject, CrowdTestProject crowdTestProjectModify){
|
|
|
+ public CrowdTestProject updateCrowdTestProject( CrowdTestProject crowdTestProjectModify){
|
|
|
Gson gson = new Gson();
|
|
|
- crowdTestProject = gson.fromJson(gson.toJson(crowdTestProjectModify),CrowdTestProject.class);
|
|
|
- return crowdTestProject;
|
|
|
+ return gson.fromJson(gson.toJson(crowdTestProjectModify),CrowdTestProject.class);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 更新项目中的指定任务信息
|
|
|
- * @param crowdTestProject
|
|
|
* @param crowdTestTaskCode
|
|
|
* @param crowdTestTaskModify
|
|
|
* @return
|
|
|
*/
|
|
|
- public CrowdTestProject updateCrowdTestTask(CrowdTestProject crowdTestProject, String crowdTestTaskCode, CrowdTestTask crowdTestTaskModify){
|
|
|
+ public CrowdTestProject updateCrowdTestTask(String crowdTestTaskCode, CrowdTestTask crowdTestTaskModify){
|
|
|
List<CrowdTestTask> crowdTestTaskListNew = new ArrayList<>();
|
|
|
- List<CrowdTestTask> crowdTestTaskList = crowdTestProject.getCrowdTestTaskList();
|
|
|
+ List<CrowdTestTask> crowdTestTaskList = this.getCrowdTestTaskList();
|
|
|
for(CrowdTestTask crowdTestTaskSelect : crowdTestTaskList){
|
|
|
List<CrowdTestReport> crowdTestReportList = crowdTestTaskSelect.getCrowdTestReportList();
|
|
|
if(crowdTestTaskCode.equals(crowdTestTaskSelect.getCode())){
|
|
@@ -105,21 +100,20 @@ public class CrowdTestProject {
|
|
|
crowdTestTaskSelect.setCrowdTestReportList(crowdTestReportList);
|
|
|
crowdTestTaskListNew.add(crowdTestTaskSelect);
|
|
|
}
|
|
|
- crowdTestProject.setCrowdTestTaskList(crowdTestTaskListNew);
|
|
|
- return crowdTestProject;
|
|
|
+ this.setCrowdTestTaskList(crowdTestTaskListNew);
|
|
|
+ return this;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 更新项目中任务的指定报告信息
|
|
|
- * @param crowdTestProject
|
|
|
* @param crowdTestTaskCode
|
|
|
* @param crowdTestReportCode
|
|
|
* @param crowdTestReportModify
|
|
|
* @return
|
|
|
*/
|
|
|
- public CrowdTestProject updateCrowdTestReport(CrowdTestProject crowdTestProject, String crowdTestTaskCode, String crowdTestReportCode, CrowdTestReport crowdTestReportModify) {
|
|
|
+ public CrowdTestProject updateCrowdTestReport( String crowdTestTaskCode, String crowdTestReportCode, CrowdTestReport crowdTestReportModify) {
|
|
|
List<CrowdTestTask> crowdTestTaskListNew = new ArrayList<>();
|
|
|
- List<CrowdTestTask> crowdTestTaskList = crowdTestProject.getCrowdTestTaskList();
|
|
|
+ List<CrowdTestTask> crowdTestTaskList = this.getCrowdTestTaskList();
|
|
|
for(CrowdTestTask crowdTestTaskSelect : crowdTestTaskList){
|
|
|
List<CrowdTestReport> crowdTestReportListNew = new ArrayList<>();
|
|
|
if(crowdTestTaskCode.equals(crowdTestTaskSelect.getCode())){
|
|
@@ -135,225 +129,559 @@ public class CrowdTestProject {
|
|
|
crowdTestTaskSelect.setCrowdTestReportList(crowdTestReportListNew);
|
|
|
crowdTestTaskListNew.add(crowdTestTaskSelect);
|
|
|
}
|
|
|
- crowdTestProject.setCrowdTestTaskList(crowdTestTaskListNew);
|
|
|
- return crowdTestProject;
|
|
|
+ this.setCrowdTestTaskList(crowdTestTaskListNew);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 逻辑删除项目(项目发布者)
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public CrowdTestProject removeCrowdTestProject(User user) {
|
|
|
+ //判断用户是否认证
|
|
|
+ if(user.getPersonalAuthentication() == null && user.getEnterpriseAuthentication() == null && user.getRegionalManager() == null && user.getEvaluationAgency() == null){
|
|
|
+ throw new CrowdTestProjectException("当前用户未进行认证,无权限对项目操作");
|
|
|
+ }
|
|
|
+ //判断用户是否为项目发起者
|
|
|
+ if(!this.getUserId().equals(user.getId())){
|
|
|
+ throw new CrowdTestProjectException("当前用户无权限发布此项目");
|
|
|
+ }
|
|
|
+
|
|
|
+ this.getCrowdTestTaskList()
|
|
|
+ .stream().forEach(crowdTestTask -> crowdTestTask.removeCrowdTestTask());
|
|
|
+ this.getCrowdTestTaskList()
|
|
|
+ .stream().forEach(crowdTestTask -> crowdTestTask.getCrowdTestReportList().stream().forEach(crowdTestReport -> crowdTestReport.removeCrowdTestReport()));
|
|
|
+
|
|
|
+ CrowdTestReport crowdTestReportForProject = this.getCrowdTestReportForProject();
|
|
|
+ if(crowdTestReportForProject != null){
|
|
|
+ crowdTestReportForProject.removeCrowdTestReport();
|
|
|
+ }
|
|
|
+ this.setIsDeleted(DeletedStatus.isDeleted);
|
|
|
+ return this;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 逻辑删除项目
|
|
|
+ * 逻辑删除任务(区域管理员)
|
|
|
+ * @param crowdTestTaskCode
|
|
|
* @return
|
|
|
*/
|
|
|
- public CrowdTestProject removeCrowdTestProject() {
|
|
|
- if(this.getIsDeleted() == DeletedStatus.isDeleted){
|
|
|
- throw new CrowdTestProjectException("项目已被删除,不能再次删除");
|
|
|
+ public CrowdTestProject removeCrowdTestTask(String crowdTestTaskCode, User user) {
|
|
|
+ //判断是否为区域管理员
|
|
|
+ RegionalManager regionalManager = user.getRegionalManager();
|
|
|
+ if(regionalManager == null){
|
|
|
+ throw new UserNotExistException("当前用户不是区域管理员,没有权限对任务进行操作");
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断是否是当前项目的区域管理员
|
|
|
+ if(!this.getRegionalManagerId().equals(user.getId())){
|
|
|
+ throw new CrowdTestTaskException("当前用户没有权限删除此测试任务!");
|
|
|
+ }
|
|
|
+
|
|
|
+ Optional<CrowdTestTask> task = this.getCrowdTestTaskList()
|
|
|
+ .stream().filter(crowdTestTask -> crowdTestTask.getCode().equals(crowdTestTaskCode)).findFirst();
|
|
|
+ if(!task.isPresent()){
|
|
|
+ throw new CrowdTestTaskException("当前项目下没有此测试任务!");
|
|
|
}else{
|
|
|
- List<CrowdTestTask> crowdTestTaskList = this.getCrowdTestTaskList();
|
|
|
- for(CrowdTestTask crowdTestTask : crowdTestTaskList){
|
|
|
- crowdTestTask.removeCrowdTestTask();
|
|
|
- List<CrowdTestReport> crowdTestReportList = crowdTestTask.getCrowdTestReportList();
|
|
|
- for(CrowdTestReport crowdTestReport : crowdTestReportList){
|
|
|
- crowdTestReport.removeCrowdTestReport();
|
|
|
+ task.get().removeCrowdTestTask();
|
|
|
+ task.get().getCrowdTestReportList().stream().forEach(crowdTestReport -> crowdTestReport.removeCrowdTestReport());
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 逻辑删除报告(测评机构)
|
|
|
+ * @param crowdTestTaskCode
|
|
|
+ * @param crowdTestReportCode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public CrowdTestProject removeCrowdTestReport(String crowdTestTaskCode, String crowdTestReportCode, User user) {
|
|
|
+
|
|
|
+ //判断是否为测评机构
|
|
|
+ EvaluationAgency evaluationAgency = user.getEvaluationAgency();
|
|
|
+ if(evaluationAgency == null){
|
|
|
+ throw new UserNotExistException("当前用户不是测评机构,没有权限操作测试报告");
|
|
|
+ }
|
|
|
+
|
|
|
+ Optional<CrowdTestTask> task = this.getCrowdTestTaskList()
|
|
|
+ .stream().filter(crowdTestTask -> crowdTestTask.getCode().equals(crowdTestTaskCode)).findFirst();
|
|
|
+ if(!task.isPresent()){
|
|
|
+ throw new CrowdTestTaskException("当前项目下没有此测试任务!");
|
|
|
+ }else{
|
|
|
+ //判断是否是当前任务的测评机构
|
|
|
+ if(!task.get().getEvaluationAgencyId().equals(user.getId())){
|
|
|
+ throw new CrowdTestTaskException("当前用户没有权限删除此任务的测试报告!");
|
|
|
+ }else{
|
|
|
+ Optional<CrowdTestReport> report = task.get().getCrowdTestReportList()
|
|
|
+ .stream().filter(crowdTestReport -> crowdTestReport.getCode().equals(crowdTestReportCode)).findFirst();
|
|
|
+ if(!report.isPresent()){
|
|
|
+ throw new CrowdTestReportException("当前任务下没有此测试报告!");
|
|
|
+ }else{
|
|
|
+ report.get().removeCrowdTestReport();
|
|
|
}
|
|
|
}
|
|
|
- this.setStatus(DeletedStatus.isDeleted);
|
|
|
}
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
- * 逻辑删除任务
|
|
|
- * @param crowdTestTaskCode
|
|
|
+ * 删除项目报告(区域管理员)
|
|
|
* @return
|
|
|
*/
|
|
|
- public CrowdTestProject removeCrowdTestTask(String crowdTestTaskCode) {
|
|
|
- List<CrowdTestTask> crowdTestTaskList = this.getCrowdTestTaskList();
|
|
|
- for(CrowdTestTask crowdTestTask : crowdTestTaskList){
|
|
|
- if(crowdTestTaskCode.equals(crowdTestTask.getCode())){
|
|
|
- crowdTestTask.removeCrowdTestTask();
|
|
|
- List<CrowdTestReport> crowdTestReportList = crowdTestTask.getCrowdTestReportList();
|
|
|
- for(CrowdTestReport crowdTestReport : crowdTestReportList){
|
|
|
- crowdTestReport.removeCrowdTestReport();
|
|
|
+ public CrowdTestProject removeCrowdTestProjectReport(String crowdTestProjectReportCode,User user) {
|
|
|
+ //判断是否为区域管理员
|
|
|
+ RegionalManager regionalManager = user.getRegionalManager();
|
|
|
+ if(regionalManager == null){
|
|
|
+ throw new UserNotExistException("当前用户不是区域管理员,没有权限对项目进行操作");
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断是否是当前项目的区域管理员
|
|
|
+ if(!this.getRegionalManagerId().equals(user.getId())){
|
|
|
+ throw new CrowdTestTaskException("当前用户没有权限删除此测试任务!");
|
|
|
+ }
|
|
|
+
|
|
|
+ CrowdTestReport crowdTestReportForProject = this.getCrowdTestReportForProject();
|
|
|
+ if(crowdTestReportForProject == null){
|
|
|
+ throw new CrowdTestProjectException("当前项目下没有项目报告!");
|
|
|
+ }else if(!crowdTestProjectReportCode.equals(crowdTestReportForProject.getCode())){
|
|
|
+ throw new CrowdTestProjectException("当前项目下没有此项目报告!");
|
|
|
+ }else{
|
|
|
+ crowdTestReportForProject.setIsDeleted(DeletedStatus.isDeleted);
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void addTask(CrowdTestTask task){
|
|
|
+ if (!(this.getStatus() >= CrowdTestProjectStatus.HAS_RECEIVED || this.getStatus()<=CrowdTestTaskStatus.HAS_COMMITED))
|
|
|
+ throw new BaseException("当前阶段不允许创建新任务");
|
|
|
+ this.getCrowdTestTaskList().add(task);
|
|
|
+ }
|
|
|
+
|
|
|
+ public CrowdTestTask getTask(String taskCode){
|
|
|
+ Optional<CrowdTestTask> testTask = this.getCrowdTestTaskList().stream().filter(crowdTestTask -> crowdTestTask.getCode().equals(taskCode)).findFirst();
|
|
|
+ if (!testTask.isPresent())
|
|
|
+ throw new CrowdTestTaskNotExistException();
|
|
|
+ return testTask.get();
|
|
|
+ }
|
|
|
+
|
|
|
+ public CrowdTestReport getTaskReport(String taskCode, String reportCode){
|
|
|
+ Optional<CrowdTestReport> report = getTask(taskCode).getCrowdTestReportList().stream().filter(crowdTestReport -> crowdTestReport.getCode().equals(reportCode)).findFirst();
|
|
|
+ if (!report.isPresent())
|
|
|
+ throw new CrowdTestReportNotExistException();
|
|
|
+ return report.get();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建测试项目(普通用户)
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public CrowdTestProject createCrowdTestProject(User user) {
|
|
|
+// //判断用户是否认证
|
|
|
+// if(user.getPersonalAuthentication() == null && user.getEnterpriseAuthentication() == null && user.getRegionalManager() == null && user.getEvaluationAgency() == null){
|
|
|
+// throw new CrowdTestProjectException("当前用户未进行认证,无权限对项目操作");
|
|
|
+// }
|
|
|
+ //增加设置项目code ---------需要补上
|
|
|
+// String projectCode = GenerateFlowCodeUtil.generateFlowCode("PROJ");
|
|
|
+// this.setCode(projectCode);
|
|
|
+
|
|
|
+ this.setStatus(CrowdTestProjectStatus.HAS_CREATED);
|
|
|
+ this.setCreateTime(new Timestamp(System.currentTimeMillis()));
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发布项目(普通用户)
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public CrowdTestProject releaseCrowdTestProject(User user) {
|
|
|
+ //判断用户是否认证
|
|
|
+ if(user.getPersonalAuthentication() == null && user.getEnterpriseAuthentication() == null && user.getRegionalManager() == null && user.getEvaluationAgency() == null){
|
|
|
+ throw new CrowdTestProjectException("当前用户未进行认证,无权限对项目操作");
|
|
|
+ }
|
|
|
+ //判断用户是否为项目发起者
|
|
|
+ if(!this.getUserId().equals(user.getId())){
|
|
|
+ throw new CrowdTestProjectException("当前用户无权限发布此项目");
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断项目状态
|
|
|
+ if(this.status != (CrowdTestProjectStatus.HAS_RELEASED-1)){
|
|
|
+ throw new CrowdTestProjectException("当前项目状态不能被发布,当前状态为:"+this.getStatus());
|
|
|
+ }else{
|
|
|
+ this.setStatus(CrowdTestProjectStatus.HAS_RELEASED);
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 接收项目(区域管理员)
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public CrowdTestProject receiveProject(User user) {
|
|
|
+ //判断是否为区域管理员
|
|
|
+ RegionalManager regionalManager = user.getRegionalManager();
|
|
|
+ if(regionalManager == null){
|
|
|
+ throw new UserNotExistException("当前用户不是区域管理员,没有权限接收项目");
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断项目状态
|
|
|
+ if(this.getStatus() != CrowdTestProjectStatus.HAS_RELEASED){
|
|
|
+ throw new CrowdTestProjectException("项目不能被接收,项目状态为: " + this.getStatus());
|
|
|
+ }else{
|
|
|
+ //项目是定向发布
|
|
|
+ if(this.getProjectDistributionTypeId() == 0){
|
|
|
+ if(!this.getRegionalManagerId().equals(user.getId())){
|
|
|
+ throw new CrowdTestProjectException("当前用户没有权限接收此定向发布的项目!");
|
|
|
+ }else{
|
|
|
+ this.setStatus(CrowdTestProjectStatus.HAS_RECEIVED);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //项目是区域发布
|
|
|
+ else if(this.getProjectDistributionTypeId() == 1){
|
|
|
+ List<RegionalManagerToRegional> regionalList = regionalManager.getRegionalList();
|
|
|
+ boolean isValidCity = false;
|
|
|
+ //判断管理员管辖的区域是否符合要求
|
|
|
+ for(RegionalManagerToRegional regional : regionalList){
|
|
|
+ //判断市是否相同
|
|
|
+ if(this.getDistributionCity().equals(regional.getCity())){
|
|
|
+ isValidCity = true;
|
|
|
+ }
|
|
|
+ //如果市区是"*",则判断省份是否相同
|
|
|
+ if(regional.getCity().equals("*")){
|
|
|
+ if(this.getDistributionProvince().equals(regional.getProvince())){
|
|
|
+ isValidCity = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(!isValidCity){
|
|
|
+ throw new CrowdTestProjectException("项目发布的区域不符合当前区域管理员所管辖的区域!");
|
|
|
+ }else{
|
|
|
+ this.setRegionalManagerId(user.getId());
|
|
|
+ this.setStatus(CrowdTestProjectStatus.HAS_RECEIVED);
|
|
|
}
|
|
|
}
|
|
|
+ //项目是广场发布
|
|
|
+ else{
|
|
|
+ this.setRegionalManagerId(user.getId());
|
|
|
+ this.setStatus(CrowdTestProjectStatus.HAS_RECEIVED);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建测试任务(区域管理员)
|
|
|
+ * @param crowdTestTask
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public CrowdTestProject createCrowdTestTask(CrowdTestTask crowdTestTask, User user) {
|
|
|
+ //判断是否为区域管理员
|
|
|
+ RegionalManager regionalManager = user.getRegionalManager();
|
|
|
+ if(regionalManager == null){
|
|
|
+ throw new UserNotExistException("当前用户不是区域管理员,没有权限创建测试任务");
|
|
|
}
|
|
|
|
|
|
- boolean judgeHasCrowdTestTask = false;
|
|
|
- for(CrowdTestTask crowdTestTask : this.getCrowdTestTaskList()){
|
|
|
- if(crowdTestTask.getIsDeleted() == DeletedStatus.isNotDeleted){
|
|
|
- judgeHasCrowdTestTask = true;
|
|
|
+ //判断是否是当前项目的区域管理员
|
|
|
+ if(!this.getRegionalManagerId().equals(user.getId())){
|
|
|
+ throw new CrowdTestTaskException("当前用户没有权限为此项目创建测试任务!");
|
|
|
+ }else{
|
|
|
+ //判断项目状态
|
|
|
+ if(this.getStatus() != (CrowdTestProjectStatus.HAS_COMMITED-1)){
|
|
|
+ throw new CrowdTestProjectException("当前项目状态不能创建任务,项目状态为: " + this.getStatus());
|
|
|
+ }else{
|
|
|
+ List<CrowdTestTask> crowdTestTaskList = this.getCrowdTestTaskList();
|
|
|
+// //增加设置任务code -------需要加上
|
|
|
+// String taskCode = GenerateFlowCodeUtil.generateFlowCode("TASK-"+ command.getType());
|
|
|
+// crowdTestTask.setCode(taskCode);
|
|
|
+
|
|
|
+ crowdTestTask.setStatus(CrowdTestTaskStatus.HAS_CREATED);
|
|
|
+ //添加测试任务
|
|
|
+ crowdTestTaskList.add(crowdTestTask);
|
|
|
+ this.setCrowdTestTaskList(crowdTestTaskList);
|
|
|
}
|
|
|
}
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发布任务(区域管理员)
|
|
|
+ * @param crowdTestTaskCode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public CrowdTestProject releaseCrowdTestTask(String crowdTestTaskCode, User user) {
|
|
|
+ //判断是否为区域管理员
|
|
|
+ RegionalManager regionalManager = user.getRegionalManager();
|
|
|
+ if(regionalManager == null){
|
|
|
+ throw new UserNotExistException("当前用户不是区域管理员,没有权限发布测试任务");
|
|
|
+ }
|
|
|
|
|
|
- // 如果删除任务后,项目中不存在任务,把项目状态从HAS_SPLITED改为HAS_RECEIVED
|
|
|
- if(!judgeHasCrowdTestTask){
|
|
|
- this.setStatus(CrowdTestProjectStatus.HAS_RECEIVED);
|
|
|
+ //判断是否是当前项目的区域管理员
|
|
|
+ if(!this.regionalManagerId.equals(user.getId())){
|
|
|
+ throw new CrowdTestProjectException("当前用户没有权限发布的当前项目下的任务!");
|
|
|
+ }else {
|
|
|
+ List<CrowdTestTask> crowdTestTaskList = this.getCrowdTestTaskList();
|
|
|
+ List<CrowdTestTask> crowdTestTaskListResult = new ArrayList<>();
|
|
|
+ //发布任务时修改任务状态
|
|
|
+ for(CrowdTestTask crowdTestTask : crowdTestTaskList){
|
|
|
+ if(crowdTestTaskCode.equals(crowdTestTask.getCode())){
|
|
|
+ if(crowdTestTask.getStatus() != (CrowdTestTaskStatus.HAS_RELEASED-1)){
|
|
|
+ throw new CrowdTestTaskException("当前任务不能被发布,当前任务状态为:"+crowdTestTask.getStatus());
|
|
|
+ }else{
|
|
|
+ crowdTestTask.setStatus(CrowdTestTaskStatus.HAS_RELEASED);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ crowdTestTaskListResult.add(crowdTestTask);
|
|
|
+ }
|
|
|
+ this.setCrowdTestTaskList(crowdTestTaskListResult);
|
|
|
+ return this;
|
|
|
}
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 接收任务(测评机构)
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public CrowdTestProject receiveTask(String crowdTestTaskCode, User user) {
|
|
|
+ //判断是否为测评机构
|
|
|
+ EvaluationAgency evaluationAgency = user.getEvaluationAgency();
|
|
|
+ if(evaluationAgency == null){
|
|
|
+ throw new UnauthorizedException("当前用户不是测评机构,没有权限接收任务");
|
|
|
+ }
|
|
|
+ Optional<CrowdTestTask> taskOp = this.getCrowdTestTaskList().stream().filter(task -> task.getCode().equals(crowdTestTaskCode)).findFirst();
|
|
|
+ //任务是否不存在
|
|
|
+ if (!taskOp.isPresent())
|
|
|
+ throw new CrowdTestTaskNotExistException();
|
|
|
+ CrowdTestTask task = taskOp.get();
|
|
|
+ //任务当前状态
|
|
|
+ if (task.getStatus()!=CrowdTestTaskStatus.HAS_RELEASED)
|
|
|
+ throw new CrowdTestTaskException("任务当前状态不能被接收,当前状态为:"+task.getStatus());
|
|
|
+ //定向发布类型
|
|
|
+ if (task.getDistributionType() == 0) {
|
|
|
+ if (!task.getEvaluationAgencyId().equals(user.getId()))
|
|
|
+ throw new CrowdTestTaskException("当前用户没有权限接收此定向发布的任务!");
|
|
|
+ }
|
|
|
+ task.setEvaluationAgencyId(user.getId());
|
|
|
+ task.setStatus(CrowdTestTaskStatus.HAS_RECEIVED);
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
- * 逻辑删除报告
|
|
|
+ * 创建测试报告(测评机构)
|
|
|
* @param crowdTestTaskCode
|
|
|
- * @param crowdTestReportCode
|
|
|
+ * @param crowdTestReport
|
|
|
* @return
|
|
|
*/
|
|
|
- public CrowdTestProject removeCrowdTestReport(String crowdTestTaskCode, String crowdTestReportCode) {
|
|
|
+ public CrowdTestProject createCrowdTestReport(String crowdTestTaskCode, CrowdTestReport crowdTestReport, User user) {
|
|
|
+ //判断是否为测评机构
|
|
|
+ EvaluationAgency evaluationAgency = user.getEvaluationAgency();
|
|
|
+ if(evaluationAgency == null){
|
|
|
+ throw new UserNotExistException("当前用户不是测评机构,没有权限创建测试报告");
|
|
|
+ }
|
|
|
List<CrowdTestTask> crowdTestTaskList = this.getCrowdTestTaskList();
|
|
|
+ List<CrowdTestTask> crowdTestTaskListResult = new ArrayList<>();
|
|
|
for(CrowdTestTask crowdTestTask : crowdTestTaskList){
|
|
|
- if(crowdTestTaskCode.equals(crowdTestTask.getCode())){
|
|
|
- List<CrowdTestReport> crowdTestReportList = crowdTestTask.getCrowdTestReportList();
|
|
|
- for(CrowdTestReport crowdTestReport : crowdTestReportList){
|
|
|
- if(crowdTestReportCode.equals(crowdTestReport.getCode())){
|
|
|
- crowdTestReport.removeCrowdTestReport();
|
|
|
+ if(crowdTestTask.getCode().equals(crowdTestTaskCode)){
|
|
|
+ //判断是否是当前任务的测评机构
|
|
|
+ if(!crowdTestTask.getEvaluationAgencyId().equals(user.getId())){
|
|
|
+ throw new CrowdTestTaskException("当前用户没有权限创建任务测试报告!");
|
|
|
+ }else{
|
|
|
+ if(crowdTestTask.getStatus() != (CrowdTestTaskStatus.HAS_COMMITED-1)){
|
|
|
+ throw new CrowdTestTaskException("当前任务无法创建测试报告,任务状态为:"+crowdTestTask.getStatus());
|
|
|
+ }else{
|
|
|
+ //设置报告code ----------需要添加
|
|
|
+// String reportCode = GenerateFlowCodeUtil.generateFlowCode("REPORT");
|
|
|
+// crowdTestReport.setCode(reportCode);
|
|
|
+
|
|
|
+ crowdTestReport.setScope(1);
|
|
|
+ crowdTestReport.setDependencyCode(crowdTestTaskCode);
|
|
|
+ List<CrowdTestReport> crowdTestReportList = crowdTestTask.getCrowdTestReportList();
|
|
|
+ crowdTestReportList.add(crowdTestReport);
|
|
|
+ crowdTestTask.setCrowdTestReportList(crowdTestReportList);
|
|
|
+ crowdTestTaskListResult.add(crowdTestTask);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ this.setCrowdTestTaskList(crowdTestTaskListResult);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
|
|
|
- boolean judgeHasCrowdTestReport = false;
|
|
|
- for(CrowdTestTask crowdTestTask : this.getCrowdTestTaskList()){
|
|
|
- if(crowdTestTaskCode.equals(crowdTestTask.getCode())){
|
|
|
- List<CrowdTestReport> crowdTestReportList = crowdTestTask.getCrowdTestReportList();
|
|
|
- for(CrowdTestReport crowdTestReport : crowdTestReportList){
|
|
|
- if(crowdTestReport.getIsDeleted() == DeletedStatus.isNotDeleted){
|
|
|
- judgeHasCrowdTestReport = true;
|
|
|
+ /**
|
|
|
+ * 提交测试任务(测评机构)
|
|
|
+ * @param crowdTestTaskCode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public CrowdTestProject commitCrowdTestTask(String crowdTestTaskCode, User user) {
|
|
|
+ //判断是否为测评机构
|
|
|
+ EvaluationAgency evaluationAgency = user.getEvaluationAgency();
|
|
|
+ if(evaluationAgency == null){
|
|
|
+ throw new UserNotExistException("当前用户不是测评机构,没有权限提交测试任务");
|
|
|
+ }
|
|
|
+
|
|
|
+ List<CrowdTestTask> crowdTestTaskList = this.getCrowdTestTaskList();
|
|
|
+ List<CrowdTestTask> crowdTestTaskListResult = new ArrayList<>();
|
|
|
+ for(CrowdTestTask crowdTestTask : crowdTestTaskList){
|
|
|
+ if(crowdTestTask.getCode().equals(crowdTestTaskCode)){
|
|
|
+ //判断是否是当前任务的测评机构
|
|
|
+ if(!crowdTestTask.getEvaluationAgencyId().equals(user.getId())){
|
|
|
+ throw new CrowdTestTaskException("当前用户没有权限提交任务!");
|
|
|
+ }else{
|
|
|
+ if(crowdTestTask.getCrowdTestReportList().size() == 0){
|
|
|
+ throw new CrowdTestTaskException("当前任务中没有报告,不能提交此任务");
|
|
|
+ }
|
|
|
+ if(crowdTestTask.getStatus() != (CrowdTestTaskStatus.HAS_COMMITED-1)){
|
|
|
+ throw new CrowdTestTaskException("当前任务无法提交,任务状态为:"+crowdTestTask.getStatus());
|
|
|
+ }else{
|
|
|
+ crowdTestTask.setStatus(CrowdTestTaskStatus.HAS_COMMITED);
|
|
|
}
|
|
|
- }
|
|
|
- // 删除报告后,如果任务中不存在报告,把任务状态从HAS_REPORTED改为HAS_RECEIVED
|
|
|
- if(!judgeHasCrowdTestReport){
|
|
|
- crowdTestTask.setStatus(CrowdTestTaskStatus.HAS_RECEIVED);
|
|
|
}
|
|
|
}
|
|
|
+ crowdTestTaskListResult.add(crowdTestTask);
|
|
|
}
|
|
|
+ this.setCrowdTestTaskList(crowdTestTaskListResult);
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
- * 删除项目报告,并修改项目转态
|
|
|
+ * 结束任务(区域管理员)
|
|
|
* @return
|
|
|
*/
|
|
|
- public CrowdTestProject removeCrowdTestProjectReport() {
|
|
|
- CrowdTestReport crowdTestReportForProject = this.getCrowdTestReportForProject();
|
|
|
- if(crowdTestReportForProject.getIsDeleted() != DeletedStatus.isNotDeleted){
|
|
|
- throw new CrowdTestProjectException("项目报告已经被删除,不可重复删除");
|
|
|
- }else{
|
|
|
- crowdTestReportForProject.setIsDeleted(DeletedStatus.isDeleted);
|
|
|
+ public CrowdTestProject finishCrowdTestTask(String crowdTestTaskCode, User user) {
|
|
|
+ //判断是否为区域管理员
|
|
|
+ RegionalManager regionalManager = user.getRegionalManager();
|
|
|
+ if(regionalManager == null){
|
|
|
+ throw new UserNotExistException("当前用户不是区域管理员,没有权限结束测试任务");
|
|
|
}
|
|
|
|
|
|
- if(CrowdTestProjectStatus.HAS_REPORTED == this.getStatus()){
|
|
|
- this.setStatus(CrowdTestProjectStatus.HAS_SPLITED);
|
|
|
- }else{
|
|
|
- throw new CrowdTestProjectException("项目当前状态不可进行报告删除,当前状态为:"+this.getStatus());
|
|
|
+ //判断是否是当前项目的区域管理员
|
|
|
+ if(!this.regionalManagerId.equals(user.getId())){
|
|
|
+ throw new CrowdTestProjectException("当前用户没有权限结束当前项目下的任务!");
|
|
|
}
|
|
|
+
|
|
|
+ //项目状态判断
|
|
|
+ if(this.getStatus() != (CrowdTestProjectStatus.HAS_COMMITED-1)){
|
|
|
+ throw new CrowdTestProjectException("当前项目状态不可结束任务!");
|
|
|
+ }else {
|
|
|
+ List<CrowdTestTask> crowdTestTaskList = this.getCrowdTestTaskList();
|
|
|
+ List<CrowdTestTask> crowdTestTaskListResult = new ArrayList<>();
|
|
|
+
|
|
|
+ for(CrowdTestTask crowdTestTask : crowdTestTaskList){
|
|
|
+ if(crowdTestTaskCode.equals(crowdTestTask.getCode())){
|
|
|
+ if(crowdTestTask.getStatus() != (CrowdTestTaskStatus.HAS_FINISHED-1)){
|
|
|
+ throw new CrowdTestTaskException("当前任务不能被结束,任务状态为:"+crowdTestTask.getStatus());
|
|
|
+ }else{
|
|
|
+ //结束任务时修改任务状态为"已结束"
|
|
|
+ crowdTestTask.setStatus(CrowdTestTaskStatus.HAS_FINISHED);
|
|
|
+ crowdTestTask.setEndTime(new Timestamp(System.currentTimeMillis()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ crowdTestTaskListResult.add(crowdTestTask);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.setCrowdTestTaskList(crowdTestTaskListResult);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
- public void addTask(CrowdTestTask task){
|
|
|
- if (this.getStatus() != CrowdTestProjectStatus.HAS_RECEIVED && this.getStatus() != CrowdTestProjectStatus.HAS_SPLITED)
|
|
|
- throw new BaseException("当前阶段不允许创建新任务");
|
|
|
- this.getCrowdTestTaskList().add(task);
|
|
|
- this.setStatus(CrowdTestProjectStatus.HAS_SPLITED);
|
|
|
+ /**
|
|
|
+ * 创建项目报告(区域管理员)
|
|
|
+ * @param crowdTestReport
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public CrowdTestProject createCrowdTestProjectReport(CrowdTestReport crowdTestReport, User user) {
|
|
|
+ //判断是否为区域管理员
|
|
|
+ RegionalManager regionalManager = user.getRegionalManager();
|
|
|
+ if(regionalManager == null){
|
|
|
+ throw new UserNotExistException("当前用户不是区域管理员,没有权限创建项目报告");
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断是否是当前项目的区域管理员
|
|
|
+ if(!this.regionalManagerId.equals(user.getId())){
|
|
|
+ throw new CrowdTestProjectException("当前用户没有权限创建项目报告!");
|
|
|
+ }
|
|
|
+ //项目状态判断
|
|
|
+ if(this.getStatus() != (CrowdTestProjectStatus.HAS_COMMITED-1)){
|
|
|
+ throw new CrowdTestProjectException("当前项目状态不可创建项目报告!状态为:"+this.getStatus());
|
|
|
+ }else{
|
|
|
+ crowdTestReport.setScope(0);
|
|
|
+ crowdTestReport.setDependencyCode(this.getCode());
|
|
|
+ this.setCrowdTestReportForProject(crowdTestReport);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 设置任务和报告的数据
|
|
|
+ * 提交项目(区域管理员)
|
|
|
* @return
|
|
|
*/
|
|
|
- public CrowdTestProject generateDefaultTaskAndReportData() {
|
|
|
- this.setCode("PROJ-"+ this.getName()); //换成名称
|
|
|
- this.setUserId(11L);
|
|
|
- this.setRegionalManagerId(13L);
|
|
|
- this.setProjectDistributionTypeId(1L);
|
|
|
- this.setDistributionProvince("江苏");
|
|
|
- this.setDistributionCity("南京");
|
|
|
- this.setFixedPrice(100000.00);
|
|
|
- this.setQuotedPrice(100000.00);
|
|
|
- this.setStatus(CrowdTestProjectStatus.HAS_FINISHED);
|
|
|
- this.setIsDeleted(DeletedStatus.isNotDeleted);
|
|
|
- this.setCreateTime(new Timestamp(getBeforeDay(new Date(System.currentTimeMillis()),5).getTime()));
|
|
|
- this.setDeadTime(new Timestamp(getBeforeDay(new Date(System.currentTimeMillis()),1).getTime()));
|
|
|
-
|
|
|
- //初始化任务
|
|
|
- int taskCount = 1;
|
|
|
- List<CrowdTestTask> crowdTestTaskList = new ArrayList<>();
|
|
|
- for(int j = 0; j < taskCount; j++){
|
|
|
- CrowdTestTask crowdTestTask = new CrowdTestTask();
|
|
|
- crowdTestTask.setCode(this.getCode()+"-TASK-任务"+(j+1));
|
|
|
- crowdTestTask.setName(this.getName() + "-任务" + (j+1));
|
|
|
- crowdTestTask.setCrowdTestProjectCode(this.getCode());
|
|
|
- crowdTestTask.setEvaluationAgencyId(12L);
|
|
|
- crowdTestTask.setType(0);
|
|
|
- crowdTestTask.setDistributionType(this.getProjectDistributionTypeId());
|
|
|
- crowdTestTask.setDistributionProvince(this.getDistributionProvince());
|
|
|
- crowdTestTask.setDistributionCity(this.getDistributionCity());
|
|
|
- crowdTestTask.setDescription("这是"+this.getName()+"测试项目的第"+(j+1)+"个测试任务");
|
|
|
- crowdTestTask.setQuotedPrice(this.getQuotedPrice() / taskCount);
|
|
|
- crowdTestTask.setFixedPrice(this.getFixedPrice() / taskCount);
|
|
|
- crowdTestTask.setStatus(CrowdTestTaskStatus.HAS_FINISHED);
|
|
|
- crowdTestTask.setIsDeleted(DeletedStatus.isNotDeleted);
|
|
|
- crowdTestTask.setCreateTime(new Timestamp(getBeforeDay(new Date(System.currentTimeMillis()),4).getTime()));
|
|
|
- crowdTestTask.setDeadTime(new Timestamp(getBeforeDay(new Date(System.currentTimeMillis()),2).getTime()));
|
|
|
-
|
|
|
- //初始化任务报告
|
|
|
- int reportCount = 1;
|
|
|
- List<CrowdTestReport> crowdTestReportList = new ArrayList<>();
|
|
|
-
|
|
|
- for(int k = 0; k < reportCount; k++){
|
|
|
- CrowdTestReport crowdTestReport = new CrowdTestReport();
|
|
|
- crowdTestReport.setCode(crowdTestTask.getCode()+"REPO-报告"+(k+1));
|
|
|
- crowdTestReport.setName(crowdTestTask.getName()+"-报告"+(k+1));
|
|
|
- crowdTestReport.setDependencyCode(crowdTestTask.getCode());
|
|
|
- crowdTestReport.setType(0);
|
|
|
- crowdTestReport.setScope(0);
|
|
|
- crowdTestReport.setContent(crowdTestTask.getDescription()+"的第"+(k+1)+"的测试报告");
|
|
|
- crowdTestReport.setConclusion("TEST SUCCESS");
|
|
|
- crowdTestReport.setIsDeleted(DeletedStatus.isNotDeleted);
|
|
|
- crowdTestReport.setCreateTime(new Timestamp(getBeforeDay(new Date(System.currentTimeMillis()),3).getTime()));
|
|
|
- crowdTestReportList.add(crowdTestReport);
|
|
|
- }
|
|
|
- crowdTestTask.setCrowdTestReportList(crowdTestReportList);
|
|
|
- crowdTestTaskList.add(crowdTestTask);
|
|
|
- }
|
|
|
- //初始化项目报告
|
|
|
- CrowdTestReport crowdTestReportForProject = new CrowdTestReport();
|
|
|
- crowdTestReportForProject.setCode(this.getCode()+"-项目报告");
|
|
|
- crowdTestReportForProject.setName(this.getName()+"-项目报告");
|
|
|
- crowdTestReportForProject.setDependencyCode(this.getCode());
|
|
|
- crowdTestReportForProject.setType(0);
|
|
|
- crowdTestReportForProject.setScope(0);
|
|
|
- crowdTestReportForProject.setContent(this.getName()+"的项目报告");
|
|
|
- crowdTestReportForProject.setConclusion("PROJECT TEST SUCCESS");
|
|
|
- crowdTestReportForProject.setIsDeleted(DeletedStatus.isNotDeleted);
|
|
|
- crowdTestReportForProject.setCreateTime(new Timestamp(getBeforeDay(new Date(System.currentTimeMillis()),2).getTime()));
|
|
|
-
|
|
|
- this.setCrowdTestReportForProject(crowdTestReportForProject);
|
|
|
- this.setCrowdTestTaskList(crowdTestTaskList);
|
|
|
+ public CrowdTestProject commitCrowdTestProject(User user) {
|
|
|
+ //判断是否为区域管理员
|
|
|
+ RegionalManager regionalManager = user.getRegionalManager();
|
|
|
+ if(regionalManager == null){
|
|
|
+ throw new UserNotExistException("当前用户不是区域管理员,没有权限提交项目");
|
|
|
+ }
|
|
|
|
|
|
+ //判断是否是当前项目的区域管理员
|
|
|
+ if(!this.regionalManagerId.equals(user.getId())){
|
|
|
+ throw new CrowdTestProjectException("当前用户没有权限操作此项目!");
|
|
|
+ }
|
|
|
+
|
|
|
+ //项目状态判断
|
|
|
+ if(this.getStatus() != CrowdTestProjectStatus.HAS_RECEIVED){
|
|
|
+ throw new CrowdTestProjectException("当前项目状态不可提交项目!状态为:"+this.getStatus());
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断项目下是否有任务
|
|
|
+ if(this.getCrowdTestTaskList()==null || this.getCrowdTestTaskList().size() < 1){
|
|
|
+ throw new CrowdTestProjectException("还未创建任务,项目不能被提交");
|
|
|
+ }else{
|
|
|
+ //结束项目时查看是否已结束任务
|
|
|
+ if(this.getCrowdTestTaskList().stream().filter(task -> task.getStatus()!=CrowdTestTaskStatus.HAS_REJECTED)
|
|
|
+ .anyMatch(task -> task.getStatus()!=CrowdTestTaskStatus.HAS_FINISHED)){
|
|
|
+ throw new CrowdTestTaskException("存在未结束的任务,项目不能被提交");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //判断项目下是否有项目报告
|
|
|
+ if(this.getCrowdTestReportForProject() == null){
|
|
|
+ throw new CrowdTestProjectException("还未创建项目报告,项目不能被提交");
|
|
|
+ }
|
|
|
+ this.setStatus(CrowdTestProjectStatus.HAS_COMMITED);
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 计算指定时间的后几天
|
|
|
+ * 结束项目(项目发起者)
|
|
|
+ * @return
|
|
|
*/
|
|
|
- private Date getNextDay(Date date, int day){
|
|
|
- //计算相关的时间间隔
|
|
|
- long addTime = 24*3600*1000;
|
|
|
- addTime *= day;
|
|
|
- //把时间间隔转换为毫秒数
|
|
|
- Date nextDate=new Date(date.getTime() + addTime);
|
|
|
- return nextDate;
|
|
|
+ public CrowdTestProject finishCrowdTestProject(User user) {
|
|
|
+ //判断用户是否认证
|
|
|
+// if(user.getPersonalAuthentication() == null && user.getEnterpriseAuthentication() == null && user.getRegionalManager() == null && user.getEvaluationAgency() == null){
|
|
|
+// throw new CrowdTestProjectException("当前用户未进行认证,无权限对项目操作");
|
|
|
+// }
|
|
|
+ //判断是否为项目发起者
|
|
|
+ if(!this.getUserId().equals(user.getId())){
|
|
|
+ throw new CrowdTestProjectException("当前用户没有权限结束项目!");
|
|
|
+ }
|
|
|
+
|
|
|
+ if(this.getStatus() != CrowdTestProjectStatus.HAS_COMMITED){
|
|
|
+ throw new CrowdTestProjectException("项目不能确认结束,当前状态为:"+this.getStatus());
|
|
|
+ }else{
|
|
|
+ this.setStatus(CrowdTestProjectStatus.HAS_FINISHED);
|
|
|
+ this.setEndTime(new Timestamp(System.currentTimeMillis()));
|
|
|
+ }
|
|
|
+ return this;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 计算指定时间的前几天
|
|
|
- */
|
|
|
- private Date getBeforeDay(Date date, int day){
|
|
|
- //计算相关的时间间隔
|
|
|
- long subTime = 24*3600*1000;
|
|
|
- subTime *= day;
|
|
|
- //把时间间隔转换为毫秒数
|
|
|
- Date beforeDate=new Date(date.getTime() - subTime);
|
|
|
- return beforeDate;
|
|
|
+ public void reject(Long userId) {
|
|
|
+ if (this.getProjectDistributionTypeId()!=0
|
|
|
+ || this.getStatus() != CrowdTestProjectStatus.HAS_RELEASED
|
|
|
+ || !this.getRegionalManagerId().equals(userId)){
|
|
|
+ throw new CrowdTestProjectException("非法的操作");
|
|
|
+ }
|
|
|
+ this.setStatus(CrowdTestProjectStatus.HAS_REJECTED);
|
|
|
}
|
|
|
}
|