|
@@ -25,6 +25,8 @@ 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.stereotype.Service;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
@@ -34,6 +36,7 @@ import java.util.List;
|
|
|
import java.util.regex.Matcher;
|
|
|
import java.util.regex.Pattern;
|
|
|
import java.util.regex.PatternSyntaxException;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @author: Diors.Po
|
|
@@ -57,16 +60,19 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
|
|
|
private OperationMediator operationMediator;
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * 过滤掉已经结束的
|
|
|
+ * @return
|
|
|
+ */
|
|
|
@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));
|
|
|
}
|
|
@@ -75,7 +81,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();
|
|
@@ -90,7 +96,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());
|
|
@@ -117,9 +123,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);
|
|
|
});
|
|
|
|
|
@@ -144,7 +150,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 -> {
|
|
@@ -158,11 +164,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());
|
|
@@ -171,7 +177,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());
|
|
|
});
|
|
@@ -215,7 +221,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
|
|
|
return getProjectDetails(projectCode, userId);
|
|
|
}
|
|
|
|
|
|
- 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;
|
|
@@ -237,36 +243,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<>();
|
|
@@ -277,15 +283,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<>();
|
|
@@ -313,7 +319,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;
|
|
|
}
|
|
@@ -321,7 +327,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);
|
|
@@ -331,7 +337,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);
|
|
@@ -340,21 +346,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位任意数
|
|
|
* 此方法中前三位格式有:
|
|
@@ -374,7 +382,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);
|
|
@@ -384,7 +392,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);
|