Commit 59843676 authored by 霍传世's avatar 霍传世

多线程测试生成PDF

parent a1f7fde9
...@@ -231,23 +231,24 @@ public class GeneratorAllTypePdfByProvinceController { ...@@ -231,23 +231,24 @@ public class GeneratorAllTypePdfByProvinceController {
ExecutorService executorService = Executors.newFixedThreadPool(5); ExecutorService executorService = Executors.newFixedThreadPool(5);
List<RetryCommand> retryCommands = new ArrayList<>();
//分组开始执行记录 //分组开始执行记录
for (String key : schoolReport.keySet()) { for (String key : schoolReport.keySet()) {
logger.info("province:"+key+ "Gen..............................................................."); logger.info("province:"+key+ "Gen");
List<BasicReportParameters> schoolBasicReport = schoolReport.get(key); List<BasicReportParameters> schoolBasicReport = schoolReport.get(key);
List<BasicReportParameters> schoolSubject = schoolSubjectReport.get(key); List<BasicReportParameters> schoolSubject = schoolSubjectReport.get(key);
List<ClassBasicReportParameters> classBasicReport = classReport.get(key); List<ClassBasicReportParameters> classBasicReport = classReport.get(key);
List<ClassBasicReportParameters> classSubject = classSubjectReport.get(key); List<ClassBasicReportParameters> classSubject = classSubjectReport.get(key);
for (BasicReportParameters schoolLevel : schoolBasicReport) { for (BasicReportParameters schoolLevel : schoolBasicReport) {
executorService.submit(() -> { executorService.submit(() -> {
logger.info("school:"+schoolLevel.getSchool()+"loading---------------------------------------------------------------"); List<RetryCommand> retryCommands = new ArrayList<>();
logger.info("school:"+schoolLevel.getSchool()+"loading");
Map<String, List<BasicReportParameters>> schoolMap= schoolSubject.stream().collect(Collectors.groupingBy(BasicReportParameters::getSchool)); Map<String, List<BasicReportParameters>> schoolMap= schoolSubject.stream().collect(Collectors.groupingBy(BasicReportParameters::getSchool));
Map<String, List<ClassBasicReportParameters>> classBasic = classBasicReport.stream().collect(Collectors.groupingBy(ClassBasicReportParameters::getSchool)); Map<String, List<ClassBasicReportParameters>> classBasic = classBasicReport.stream().collect(Collectors.groupingBy(ClassBasicReportParameters::getSchool));
final Map<String, List<ClassBasicReportParameters>> subjectClass = classSubject.stream().collect(Collectors.groupingBy(ClassBasicReportParameters::getSchool)); final Map<String, List<ClassBasicReportParameters>> subjectClass = classSubject.stream().collect(Collectors.groupingBy(ClassBasicReportParameters::getSchool));
List<BasicReportParameters> schoolSelf = schoolMap.get(schoolLevel.getSchool()); List<BasicReportParameters> schoolSelf = schoolMap.get(schoolLevel.getSchool());
logger.info("basicReport:loading******************************************"); logger.info("basicReport:loading");
logger.info("exitCode:"+schoolLevel.getSchool()); logger.info("exitCode:"+schoolLevel.getSchool());
ProcessBuilder processBuilder = new ProcessBuilder(); ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command("bash", "-c", schoolLevel.getCommand()); processBuilder.command("bash", "-c", schoolLevel.getCommand());
...@@ -295,7 +296,7 @@ public class GeneratorAllTypePdfByProvinceController { ...@@ -295,7 +296,7 @@ public class GeneratorAllTypePdfByProvinceController {
} }
} }
for (BasicReportParameters parameters : schoolSelf) { for (BasicReportParameters parameters : schoolSelf) {
logger.info("subjectReport:loading***************************************************************"); logger.info("subjectReport:loading");
logger.info("exitCode:"+parameters.getSubSubject()); logger.info("exitCode:"+parameters.getSubSubject());
ProcessBuilder processBuilderSubject = new ProcessBuilder(); ProcessBuilder processBuilderSubject = new ProcessBuilder();
processBuilderSubject.command("bash", "-c", parameters.getCommand()); processBuilderSubject.command("bash", "-c", parameters.getCommand());
...@@ -345,7 +346,7 @@ public class GeneratorAllTypePdfByProvinceController { ...@@ -345,7 +346,7 @@ public class GeneratorAllTypePdfByProvinceController {
List<ClassBasicReportParameters> args = classBasic.get(schoolLevel.getSchool()); List<ClassBasicReportParameters> args = classBasic.get(schoolLevel.getSchool());
List<ClassBasicReportParameters> params = subjectClass.get(schoolLevel.getSchool()); List<ClassBasicReportParameters> params = subjectClass.get(schoolLevel.getSchool());
for (ClassBasicReportParameters arg : args) { for (ClassBasicReportParameters arg : args) {
logger.info("classBasic:loading++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); logger.info("classBasic:loading");
logger.info("exitCode:"+arg.getClassName()); logger.info("exitCode:"+arg.getClassName());
ProcessBuilder processBuilderClass = new ProcessBuilder(); ProcessBuilder processBuilderClass = new ProcessBuilder();
processBuilderClass.command("bash", "-c", arg.getCommand()); processBuilderClass.command("bash", "-c", arg.getCommand());
...@@ -394,7 +395,7 @@ public class GeneratorAllTypePdfByProvinceController { ...@@ -394,7 +395,7 @@ public class GeneratorAllTypePdfByProvinceController {
final Map<String, List<ClassBasicReportParameters>> collect = params.stream().collect(Collectors.groupingBy(ClassBasicReportParameters::getClassName)); final Map<String, List<ClassBasicReportParameters>> collect = params.stream().collect(Collectors.groupingBy(ClassBasicReportParameters::getClassName));
List<ClassBasicReportParameters> list = collect.get(arg.getClassName()); List<ClassBasicReportParameters> list = collect.get(arg.getClassName());
for (ClassBasicReportParameters classBasicReportParameters : list) { for (ClassBasicReportParameters classBasicReportParameters : list) {
logger.info("classSubject:loading++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); logger.info("classSubject:loading");
logger.info("exitCode:"+classBasicReportParameters.getSubSubject()); logger.info("exitCode:"+classBasicReportParameters.getSubSubject());
ProcessBuilder processBuilderClassSubject = new ProcessBuilder(); ProcessBuilder processBuilderClassSubject = new ProcessBuilder();
processBuilderClassSubject.command("bash", "-c", classBasicReportParameters.getCommand()); processBuilderClassSubject.command("bash", "-c", classBasicReportParameters.getCommand());
...@@ -443,6 +444,68 @@ public class GeneratorAllTypePdfByProvinceController { ...@@ -443,6 +444,68 @@ public class GeneratorAllTypePdfByProvinceController {
} }
} }
} }
if(retryCommands.size()!=0){
logger.info("size"+retryCommands.size());
for (RetryCommand retryCommand : retryCommands) {
String command = retryCommand.getRetryCommand();
Object arguments = retryCommand.getParams();
String filePrefix = "";
if ( arguments instanceof BasicReportParameters){
BasicReportParameters parametersOne = (BasicReportParameters) arguments;
filePrefix = parametersOne.getPrefix();
}
if (arguments instanceof ClassBasicReportParameters) {
ClassBasicReportParameters parametersTwo = (ClassBasicReportParameters) arguments;
filePrefix = parametersTwo.getPrefix();
}
logger.info("RetryCommand:loading");
ProcessBuilder processBuilderClassSubject = new ProcessBuilder();
processBuilderClassSubject.command("bash", "-c", command);
processBuilderClassSubject.redirectErrorStream(true); // 合并标准输出和错误输出
Process processClassSubject = null;
try {
processClassSubject = processBuilderClassSubject.start();
} catch (IOException e) {
throw new RuntimeException(e);
}
BufferedReader readerClassSubject = new BufferedReader(new InputStreamReader(processClassSubject.getInputStream()));
String lineClassSubject;
while (true) {
try {
if (!((lineClassSubject = readerClassSubject.readLine()) != null)) break;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
try {
int exitCodeSubjectClass = processClassSubject.waitFor();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
File classSubjectFile = new File(filePrefix);
File[] classSubjectFiles = classSubjectFile.listFiles();
assert classSubjectFiles != null;
for (File file : classSubjectFiles) {
logger.info(file.getName()+"=file—>key="+fileToUrl.get(file.getName()));
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileToUrl.get(file.getName()), file);
try {
PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
logger.info(putObjectResult.getRequestId());
file.delete();
} catch (CosServiceException e) {
logger.info("cos服务出现问题");
e.printStackTrace();
} catch (CosClientException e) {
logger.info("cos客户端出现问题"+file.getName()+"文件上传有误,重新上传");
}
}
}
}
//插入数据 //插入数据
int rowsAffected = reportJdbcTemplate.update("UPDATE school_report_task_generate SET status = ? WHERE exam_id = ? AND region = ? AND province = ? AND school = ?",1,schoolLevel.getExamId(),schoolLevel.getRegion(),schoolLevel.getProvince(),schoolLevel.getSchool()); int rowsAffected = reportJdbcTemplate.update("UPDATE school_report_task_generate SET status = ? WHERE exam_id = ? AND region = ? AND province = ? AND school = ?",1,schoolLevel.getExamId(),schoolLevel.getRegion(),schoolLevel.getProvince(),schoolLevel.getSchool());
...@@ -452,66 +515,6 @@ public class GeneratorAllTypePdfByProvinceController { ...@@ -452,66 +515,6 @@ public class GeneratorAllTypePdfByProvinceController {
} }
} }
if(retryCommands.size()!=0){
logger.info("size"+retryCommands.size());
for (RetryCommand retryCommand : retryCommands) {
String command = retryCommand.getRetryCommand();
Object params = retryCommand.getParams();
String filePrefix = "";
if ( params instanceof BasicReportParameters){
BasicReportParameters parametersOne = (BasicReportParameters) params;
filePrefix = parametersOne.getPrefix();
}
if (params instanceof ClassBasicReportParameters) {
ClassBasicReportParameters parametersTwo = (ClassBasicReportParameters) params;
filePrefix = parametersTwo.getPrefix();
}
logger.info("RetryCommand:loading++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
ProcessBuilder processBuilderClassSubject = new ProcessBuilder();
processBuilderClassSubject.command("bash", "-c", command);
processBuilderClassSubject.redirectErrorStream(true); // 合并标准输出和错误输出
Process processClassSubject = null;
try {
processClassSubject = processBuilderClassSubject.start();
} catch (IOException e) {
throw new RuntimeException(e);
}
BufferedReader readerClassSubject = new BufferedReader(new InputStreamReader(processClassSubject.getInputStream()));
String lineClassSubject;
while (true) {
try {
if (!((lineClassSubject = readerClassSubject.readLine()) != null)) break;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
try {
int exitCodeSubjectClass = processClassSubject.waitFor();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
File classSubjectFile = new File(filePrefix);
File[] classSubjectFiles = classSubjectFile.listFiles();
assert classSubjectFiles != null;
for (File file : classSubjectFiles) {
logger.info(file.getName()+"=file—>key="+fileToUrl.get(file.getName()));
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileToUrl.get(file.getName()), file);
try {
PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
logger.info(putObjectResult.getRequestId());
file.delete();
} catch (CosServiceException e) {
logger.info("cos服务出现问题");
e.printStackTrace();
} catch (CosClientException e) {
logger.info("cos客户端出现问题"+file.getName()+"文件上传有误,重新上传");
}
}
}
}
return ResponseEntity.ok("操作成功"); return ResponseEntity.ok("操作成功");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment