|
@@ -25,9 +25,13 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
|
|
import org.apache.poi.ss.usermodel.*;
|
|
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.data.domain.Page;
|
|
|
+import org.springframework.data.domain.Pageable;
|
|
|
+import org.springframework.data.jpa.domain.Specification;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
+import javax.persistence.criteria.*;
|
|
|
import java.io.IOException;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
@@ -43,7 +47,7 @@ import java.util.stream.Collectors;
|
|
|
*/
|
|
|
@Slf4j
|
|
|
@Service
|
|
|
-public class CrowdProjectServiceImpl implements CrowdProjectService {
|
|
|
+public class CrowdProjectServiceImpl implements CrowdProjectService{
|
|
|
|
|
|
@Autowired
|
|
|
private ViewMediator viewMediator;
|
|
@@ -58,16 +62,34 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
|
|
|
private OperationMediator operationMediator;
|
|
|
|
|
|
|
|
|
-
|
|
|
+ /**
|
|
|
+ * 众测项目分页查询服务,过滤掉已完成的。
|
|
|
+ *
|
|
|
+ * @param pageable
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Page<CrowdTestProjectPO> findAll(Pageable pageable) {
|
|
|
+
|
|
|
+ Specification<CrowdTestProjectPO> queryContion = new Specification<CrowdTestProjectPO>() {
|
|
|
+ @Override
|
|
|
+ public Predicate toPredicate(Root<CrowdTestProjectPO> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
|
|
|
+ Path<Object> custName = root.get("status");
|
|
|
+ Predicate predicate = cb.notEqual(custName, CrowdTestProjectStatus.HAS_FINISHED);
|
|
|
+ return predicate;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ return projectRepo.findAll(queryContion, pageable);
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
public List<CrowdTestProjectPO> findAll() {
|
|
|
- return projectRepo.findAll();
|
|
|
+ return projectRepo.findAll();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public ProjectDetailsDTO getProjectDetails(String projectCode, Long userId) {
|
|
|
- if (userId==null)
|
|
|
+ if (userId == null)
|
|
|
return viewMediator.renderProjectDetails(projectRepo.getByProjectCode(projectCode), null);
|
|
|
return viewMediator.renderProjectDetails(projectRepo.getByProjectCode(projectCode), userRepo.getByID(userId));
|
|
|
}
|
|
@@ -76,7 +98,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
|
|
|
public ProjectDetailsDTO createCrowdProject(CrowdTestProjectCommand command) {
|
|
|
CrowdTestProject project = command.toCrowdProject();
|
|
|
project.setStatus(CrowdTestProjectStatus.HAS_RELEASED);
|
|
|
- log.info("\n"+project.toString()+"\n");
|
|
|
+ log.info("\n" + project.toString() + "\n");
|
|
|
String projectCode = GenerateFlowCodeUtil.generateFlowCode("PROJ");
|
|
|
project.setCode(projectCode);
|
|
|
ProjectDetailsDTO projectDetailsDTO = new ProjectDetailsDTO();
|
|
@@ -91,7 +113,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
|
|
|
if (project.getStatus() == CrowdTestProjectStatus.HAS_FINISHED)
|
|
|
throw new BaseException("结项项目禁止修改!");
|
|
|
if (!project.getUserId().equals(crowdTestProjectCommand.getUserId()))
|
|
|
- throw new BaseException("UserId不一致, newUserId: "+crowdTestProjectCommand.getUserId()+", oldUserId: "+project.getUserId());
|
|
|
+ throw new BaseException("UserId不一致, newUserId: " + crowdTestProjectCommand.getUserId() + ", oldUserId: " + project.getUserId());
|
|
|
//todo 后面需要加入是否有权限进行更新
|
|
|
projectRepo.saveCrowdTestProject(operationMediator.updateProject(project, crowdTestProjectCommand));
|
|
|
return getProjectDetails(projectCode, crowdTestProjectCommand.getUserId());
|
|
@@ -118,9 +140,9 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
|
|
|
task.setEndTime(command.getDatetime());
|
|
|
task.setDeadTime(command.getDatetime());
|
|
|
task.setRequirementFile(command.getFile());
|
|
|
- task.setName(command.getName()+"-"+type);
|
|
|
- task.setQuotedPrice(command.getPrice()/command.getType().size());
|
|
|
- task.setFixedPrice(command.getPrice()/command.getType().size());
|
|
|
+ task.setName(command.getName() + "-" + type);
|
|
|
+ task.setQuotedPrice(command.getPrice() / command.getType().size());
|
|
|
+ task.setFixedPrice(command.getPrice() / command.getType().size());
|
|
|
tasks.add(task);
|
|
|
});
|
|
|
|
|
@@ -145,7 +167,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<CrowdTestProject> generateProjectByExcel(Long userId, MultipartFile file){
|
|
|
+ public List<CrowdTestProject> generateProjectByExcel(Long userId, MultipartFile file) {
|
|
|
User user = userRepo.getByID(userId);
|
|
|
List<CrowdTestProject> projects = transferExcel2Projects(file);
|
|
|
projects.forEach(project -> {
|
|
@@ -159,11 +181,11 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
|
|
|
task.setEndTime(project.getEndTime());
|
|
|
task.setDeadTime(project.getDeadTime());
|
|
|
task.setRequirementFile(project.getRequirementFile());
|
|
|
- task.setName(project.getName()+"-"+task.getType());
|
|
|
+ task.setName(project.getName() + "-" + task.getType());
|
|
|
task.setQuotedPrice(project.getQuotedPrice());
|
|
|
task.setFixedPrice(project.getFixedPrice());
|
|
|
task.setDescription(project.getDescription());
|
|
|
- if (user.getEvaluationAgency()==null)
|
|
|
+ if (user.getEvaluationAgency() == null)
|
|
|
task.setEvaluationAgencyId(1L);
|
|
|
else
|
|
|
task.setEvaluationAgencyId(user.getEvaluationAgency().getId());
|
|
@@ -172,7 +194,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
|
|
|
project.getCrowdTestReportForProject().setCode(GenerateFlowCodeUtil.generateReportCode());
|
|
|
project.getCrowdTestReportForProject().setDependencyCode(project.getCode());
|
|
|
project.getCrowdTestReportForProject().setDescription(project.getDescription());
|
|
|
- project.getCrowdTestReportForProject().setName(project.getName()+"测试报告");
|
|
|
+ project.getCrowdTestReportForProject().setName(project.getName() + "测试报告");
|
|
|
project.getCrowdTestReportForProject().setType(project.getType());
|
|
|
project.getCrowdTestReportForProject().setTestObject(project.getName());
|
|
|
});
|
|
@@ -219,32 +241,32 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
|
|
|
@Override
|
|
|
public boolean modifyData(String projectCode) {
|
|
|
CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
|
|
|
- if(project.getStatus() == CrowdTestProjectStatus.HAS_FINISHED && project.getLinkMan().contains("先生")){
|
|
|
+ if (project.getStatus() == CrowdTestProjectStatus.HAS_FINISHED && project.getLinkMan().contains("先生")) {
|
|
|
project.setRestPrice(0.00);
|
|
|
project.setJoinCount(1);
|
|
|
project.getCrowdTestTaskList().stream()
|
|
|
.filter(crowdTestTask -> crowdTestTask.getStatus() == CrowdTestTaskStatus.HAS_FINISHED)
|
|
|
.map(crowdTestTask -> {
|
|
|
- crowdTestTask.setParticipantCount(1);
|
|
|
- crowdTestTask.setAcceptedCount(1);
|
|
|
- crowdTestTask.setParticipantHasCommittedCount(1);
|
|
|
- crowdTestTask.setFullStatus(1);
|
|
|
- TaskToUser taskToUser = new TaskToUser();
|
|
|
- taskToUser.setValue(crowdTestTask.getCode(), crowdTestTask.getEvaluationAgencyId(), crowdTestTask.getQuotedPrice(),
|
|
|
- 1,crowdTestTask.getDistributionType(), 1, crowdTestTask.getCreateTime());
|
|
|
- taskToUser.setCommitReportTime(crowdTestTask.getCreateTime());
|
|
|
- taskToUser.setIsCommitted(1);
|
|
|
- taskToUser.setCommitTaskTime(crowdTestTask.getCreateTime());
|
|
|
- List<CrowdTestReport> reportList = projectRepo.getCrowdTestReportByCrowdTestTask(crowdTestTask.getCode());
|
|
|
- List<CrowdTestReport> testReportList = reportList.stream().peek(crowdTestReport -> crowdTestReport.setUserId(crowdTestTask.getEvaluationAgencyId())).collect(Collectors.toList());
|
|
|
- taskToUser.setCrowdTestReportList(testReportList);
|
|
|
- crowdTestTask.getAcceptedUserList().add(taskToUser);
|
|
|
- return crowdTestTask;
|
|
|
- }).collect(Collectors.toList());
|
|
|
+ crowdTestTask.setParticipantCount(1);
|
|
|
+ crowdTestTask.setAcceptedCount(1);
|
|
|
+ crowdTestTask.setParticipantHasCommittedCount(1);
|
|
|
+ crowdTestTask.setFullStatus(1);
|
|
|
+ TaskToUser taskToUser = new TaskToUser();
|
|
|
+ taskToUser.setValue(crowdTestTask.getCode(), crowdTestTask.getEvaluationAgencyId(), crowdTestTask.getQuotedPrice(),
|
|
|
+ 1, crowdTestTask.getDistributionType(), 1, crowdTestTask.getCreateTime());
|
|
|
+ taskToUser.setCommitReportTime(crowdTestTask.getCreateTime());
|
|
|
+ taskToUser.setIsCommitted(1);
|
|
|
+ taskToUser.setCommitTaskTime(crowdTestTask.getCreateTime());
|
|
|
+ List<CrowdTestReport> reportList = projectRepo.getCrowdTestReportByCrowdTestTask(crowdTestTask.getCode());
|
|
|
+ List<CrowdTestReport> testReportList = reportList.stream().peek(crowdTestReport -> crowdTestReport.setUserId(crowdTestTask.getEvaluationAgencyId())).collect(Collectors.toList());
|
|
|
+ taskToUser.setCrowdTestReportList(testReportList);
|
|
|
+ crowdTestTask.getAcceptedUserList().add(taskToUser);
|
|
|
+ return crowdTestTask;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
List<CrowdTestReport> reportList = projectRepo.getCrowdTestReportByCrowdTestTask(project.getCode()).stream().peek(crowdTestReport -> crowdTestReport.setUserId(project.getRegionalManagerId())).collect(Collectors.toList());
|
|
|
project.setCrowdTestReportForProject(reportList.get(0));
|
|
|
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
project.setIsDeleted(1);
|
|
|
project.getCrowdTestTaskList().stream().peek(crowdTestTask -> crowdTestTask.setIsDeleted(1)).collect(Collectors.toList());
|
|
|
}
|
|
@@ -253,15 +275,15 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public boolean modifyAllData(){
|
|
|
+ public boolean modifyAllData() {
|
|
|
List<CrowdTestProject> projectList = projectRepo.getAllCrowdTestProject();
|
|
|
- for(CrowdTestProject crowdTestProject : projectList){
|
|
|
+ for (CrowdTestProject crowdTestProject : projectList) {
|
|
|
modifyData(crowdTestProject.getCode());
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- private List<CrowdTestProject> transferExcel2Projects(MultipartFile file){
|
|
|
+ private List<CrowdTestProject> transferExcel2Projects(MultipartFile file) {
|
|
|
List<String> logList = new ArrayList<>();
|
|
|
List<CrowdTestProject> projects = new ArrayList<>();
|
|
|
Workbook workbook = null;
|
|
@@ -283,36 +305,36 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
|
|
|
|
|
|
Row keyRow = sheet.getRow(0);
|
|
|
int cellCount = keyRow.getPhysicalNumberOfCells();
|
|
|
- log.info("CellCount: "+cellCount);
|
|
|
+ log.info("CellCount: " + cellCount);
|
|
|
log.info("Rows: " + sheet.getPhysicalNumberOfRows());
|
|
|
- for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++ ){
|
|
|
+ for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++) {
|
|
|
CrowdTestProject project = CrowdTestProjectFactory.defaulstCrowdTestProject();
|
|
|
CrowdTestReport report = CrowdTestProjectFactory.defaultProjectReport();
|
|
|
Row row = sheet.getRow(i);
|
|
|
- if (row == null){
|
|
|
+ if (row == null) {
|
|
|
logList.add("表中存在错误的单元格,请把与内容无关的单元格置空");
|
|
|
break;
|
|
|
}
|
|
|
- for (int j = 0; j < cellCount; j++){
|
|
|
+ for (int j = 0; j < cellCount; j++) {
|
|
|
Cell cell = row.getCell(j);
|
|
|
- if (cell == null ) {
|
|
|
+ if (cell == null) {
|
|
|
logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "单元格为空");
|
|
|
log.error("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "单元格为空");
|
|
|
continue;
|
|
|
}
|
|
|
cell.setCellType(CellType.STRING);
|
|
|
- log.info("ROW: "+i+", COL: "+j +", DATA: "+ cell.getStringCellValue());
|
|
|
- if (cell.getStringCellValue().trim().equals("")){
|
|
|
+ log.info("ROW: " + i + ", COL: " + j + ", DATA: " + cell.getStringCellValue());
|
|
|
+ if (cell.getStringCellValue().trim().equals("")) {
|
|
|
logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "单元格为空");
|
|
|
continue;
|
|
|
}
|
|
|
- switch (j){
|
|
|
+ switch (j) {
|
|
|
case 0:
|
|
|
project.setName(cell.getStringCellValue().trim());
|
|
|
break;
|
|
|
case 1:
|
|
|
- if(!(cell.getStringCellValue().trim().equals("IOS")||cell.getStringCellValue().trim().equals("WEB")||cell.getStringCellValue().trim().equals("ANDROID"))){
|
|
|
- logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "测试平台数据不合法:"+cell.getStringCellValue());
|
|
|
+ if (!(cell.getStringCellValue().trim().equals("IOS") || cell.getStringCellValue().trim().equals("WEB") || cell.getStringCellValue().trim().equals("ANDROID"))) {
|
|
|
+ logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "测试平台数据不合法:" + cell.getStringCellValue());
|
|
|
break;
|
|
|
}
|
|
|
List<String> platforms = new ArrayList<>();
|
|
@@ -323,15 +345,15 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
|
|
|
project.setLinkMan(cell.getStringCellValue().trim());
|
|
|
break;
|
|
|
case 3:
|
|
|
- if (!isRightPhone(cell.getStringCellValue().trim())){
|
|
|
- logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "不合法的手机号码:"+cell.getStringCellValue());
|
|
|
+ if (!isRightPhone(cell.getStringCellValue().trim())) {
|
|
|
+ logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "不合法的手机号码:" + cell.getStringCellValue());
|
|
|
break;
|
|
|
}
|
|
|
project.setLinkManMobile(cell.getStringCellValue().trim());
|
|
|
break;
|
|
|
case 4:
|
|
|
- if (ProjectType.getCode(cell.getStringCellValue().trim())==null){
|
|
|
- logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "错误的测试服务类型:"+cell.getStringCellValue());
|
|
|
+ if (ProjectType.getCode(cell.getStringCellValue().trim()) == null) {
|
|
|
+ logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "错误的测试服务类型:" + cell.getStringCellValue());
|
|
|
break;
|
|
|
}
|
|
|
List<String> types = new ArrayList<>();
|
|
@@ -359,7 +381,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
|
|
|
projects.forEach(project -> {
|
|
|
log.info(project.toString());
|
|
|
});
|
|
|
- if (logList.size()>0)
|
|
|
+ if (logList.size() > 0)
|
|
|
throw new Excel2ProjectException(logList);
|
|
|
return projects;
|
|
|
}
|
|
@@ -367,7 +389,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
|
|
|
/**
|
|
|
* 匹配平台类型 0,1,2 任意 ^[0-2](([,][0-2])?([,][0-2])?)$
|
|
|
*/
|
|
|
- private boolean isPlatform(String str)throws PatternSyntaxException {
|
|
|
+ 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);
|
|
@@ -377,7 +399,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
|
|
|
/**
|
|
|
* 匹配项目类型 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 {
|
|
|
+ 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);
|
|
@@ -386,21 +408,23 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
|
|
|
|
|
|
/**
|
|
|
* 判断手机号或者座机是正确
|
|
|
+ *
|
|
|
* @param phone
|
|
|
* @return
|
|
|
*/
|
|
|
- private boolean isRightPhone(String phone){
|
|
|
- if(phone.startsWith("0")){
|
|
|
- if(!isTel(phone)){
|
|
|
+ private boolean isRightPhone(String phone) {
|
|
|
+ if (phone.startsWith("0")) {
|
|
|
+ if (!isTel(phone)) {
|
|
|
return false;
|
|
|
}
|
|
|
- }else{
|
|
|
- if(!(isChinaPhoneLegal(phone) || isHKPhoneLegal(phone))){
|
|
|
+ } else {
|
|
|
+ if (!(isChinaPhoneLegal(phone) || isHKPhoneLegal(phone))) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
* 大陆手机号码11位数,匹配格式:前三位固定格式+后8位任意数
|
|
|
* 此方法中前三位格式有:
|
|
@@ -420,7 +444,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
|
|
|
/**
|
|
|
* 香港手机号码8位数,5|6|8|9开头+7位任意数
|
|
|
*/
|
|
|
- private boolean isHKPhoneLegal(String str)throws PatternSyntaxException {
|
|
|
+ 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);
|
|
@@ -430,7 +454,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
|
|
|
/**
|
|
|
* 座机号
|
|
|
*/
|
|
|
- private boolean isTel(String str)throws PatternSyntaxException {
|
|
|
+ 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);
|