提交 36a66896 authored 作者: 孙洁清's avatar 孙洁清

输入输出查询接口

测评报告分页条件接口 删除报告接口 新增接口todo...
上级 7c55db22
......@@ -19,6 +19,18 @@
</properties>
<dependencies>
<!-- 导入zip解压包 -->
<dependency>
<groupId>ant</groupId>
<artifactId>ant</artifactId>
<version>1.6.5</version>
</dependency>
<!-- 导入rar解压包 -->
<dependency>
<groupId>com.github.junrar</groupId>
<artifactId>junrar</artifactId>
<version>0.7</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
......@@ -47,6 +59,11 @@
<artifactId>guava</artifactId>
<version>28.2-jre</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<!--fastJson-->
<dependency>
<groupId>com.alibaba</groupId>
......@@ -93,6 +110,22 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
......
package com.zjty.autotest;
import com.zjty.autotest.mq.PushBlockQueue;
import com.zjty.autotest.util.IdWorker;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import javax.annotation.PostConstruct;
@SpringBootApplication
public class AutotestApplication {
public static void main(String[] args) {
......@@ -14,4 +17,6 @@ public class AutotestApplication {
public IdWorker idWorkker(){
return new IdWorker(1, 1);
}
}
package com.zjty.autotest.config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
@Configuration
@EnableAsync
public class ExecutorConfig {
private static final Logger logger = LoggerFactory.getLogger(ExecutorConfig.class);
@Bean
public Executor asyncServiceExecutor() {
logger.info("start asyncServiceExecutor");
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//配置核心线程数
executor.setCorePoolSize(5);
//配置最大线程数
executor.setMaxPoolSize(5);
//配置队列大小
executor.setQueueCapacity(99999);
//配置线程池中的线程的名称前缀
executor.setThreadNamePrefix("async-service-");
// rejection-policy:当pool已经达到max size的时候,如何处理新任务
// CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
//执行初始化
executor.initialize();
return executor;
}
}
package com.zjty.autotest.config;
import com.zjty.autotest.mq.PushBlockQueue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class ProjectInitRun implements CommandLineRunner {
@Autowired
private PushBlockQueue pushBlockQueue;
@Override
public void run(String... args) throws Exception {
pushBlockQueue.start();
}
}
package com.zjty.autotest.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
......@@ -44,7 +44,7 @@ public class AutoResultSetController {
}
@ApiOperation("新增")
@RequestMapping(method=RequestMethod.POST)
public ResponseResult add(@RequestBody TestChannel testChannel ){
public ResponseResult add(@RequestBody TestChannel testChannel ){
return autoResultSetService.addResultSet(testChannel);
}
......
package com.zjty.autotest.controller;
import com.zjty.autotest.pojo.sjq.TestReport;
import com.zjty.autotest.pojo.sjq.common.AppHttpCodeEnum;
import com.zjty.autotest.pojo.sjq.common.ResponseResult;
import com.zjty.autotest.service.TestReportService;
import io.swagger.annotations.Api;
......@@ -29,7 +31,11 @@ public class TestReportController {
@ApiOperation("根据AutoResultId查询输入")
@RequestMapping(value="/in/{id}",method= RequestMethod.GET)
public ResponseResult findByIdInData(@PathVariable String id){
return testReportService.findByIdInData(id);
TestReport testReport = testReportService.findByResultId(id);
if(testReport!=null) {
return ResponseResult.okResult(testReport.getInputReport());
}
return ResponseResult.errorResult(AppHttpCodeEnum.ERROR);
}
/**
......@@ -39,7 +45,11 @@ public class TestReportController {
@ApiOperation("根据AutoResultId查询输出")
@RequestMapping(value="/out/{id}",method= RequestMethod.GET)
public ResponseResult findByIdOutData(@PathVariable String id){
return testReportService.findByIdOutData(id);
TestReport testReport = testReportService.findByResultId(id);
if(testReport!=null) {
return ResponseResult.okResult(testReport.getOutReport());
}
return ResponseResult.errorResult(AppHttpCodeEnum.ERROR);
}
}
package com.zjty.autotest.controller;
import com.zjty.autotest.pojo.sjq.common.AppHttpCodeEnum;
import com.zjty.autotest.pojo.sjq.common.ResponseResult;
import com.zjty.autotest.service.UploadCodeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
@RequestMapping("/code")
@RestController
@Api(value = "上传源代码",description = "提供上传源代码")
public class UploadCodeController {
@Autowired
private UploadCodeService uploadCodeService;
@PostMapping("/upload")
@ApiOperation("上传接口")
public ResponseResult singleFileUpload(@RequestParam("file") MultipartFile file){
return uploadCodeService.uploadCodeFile(file);
}
}
......@@ -3,6 +3,11 @@ package com.zjty.autotest.dao;
import com.zjty.autotest.pojo.sjq.AutoResultSet;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
public interface AutoResultSetDao extends JpaRepository<AutoResultSet,String>, JpaSpecificationExecutor<AutoResultSet> {
@Modifying
@Query("update AutoResultSet set status=1 where id=:id")
int updateStatus(String id);
}
......@@ -17,6 +17,8 @@ public interface TestReportDao extends JpaRepository<TestReport,String>, JpaSpec
@Query(value = "select out_report from test_report where result_id =:resultId",nativeQuery = true)
String findByOutResultId(String resultId);
@Query(value = "select * from test_report where result_id=:resultId",nativeQuery = true)
TestReport findByResultId(String resultId);
@Modifying
int deleteByResultId(String resultId);
}
package com.zjty.autotest.mq;
import java.util.HashMap;
import java.util.Map;
public class CacheManager {
private static Map<String,Object> cacheMap=new HashMap<>();
public static Object getCache(String key){
return cacheMap.get(key);
}
public static void putCache(String key,Object obj){
cacheMap.put(key,obj);
}
public static void removeCache(String key){
Object o = cacheMap.get(key);
if(o!=null){
cacheMap.remove(key);
}
}
}
package com.zjty.autotest.mq;
import com.zjty.autotest.service.AsyncService;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
@Component
public class PushBlockQueue extends LinkedBlockingQueue<Object> {
@Autowired
private AsyncService asyncService;
//状态标识位
private boolean flag = false;
@Async("asyncServiceExecutor")
public void zx(){
try {
while (flag) {
//从队列中取消息
Object obj = take();
//线程池派出线程来消费取出的消息
asyncService.executeAsync((String) obj);
// es.execute(new PushBlockQueueHandler(obj));
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 队列监听启动
*/
public void start() {
if (!this.flag) {
flag = true;
} else {
throw new IllegalArgumentException("队列已启动,不可重复启动!");
}
zx();
}
/**
* 停止队列监听
*/
public void stop(){
this.flag=false;
}
}
package com.zjty.autotest.mq;
import com.alibaba.fastjson.JSON;
import com.zjty.autotest.pojo.sjq.*;
import com.zjty.autotest.service.AutoResultSetService;
import com.zjty.autotest.service.TestReportService;
import com.zjty.autotest.util.TimeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Component
public class PushBlockQueueHandler implements Runnable {
@Autowired
private TestReportService testReportService;
@Autowired
private AutoResultSetService autoResultSetService;
@PostConstruct
public void init(){
new Thread(this).start();
}
//消费的对象
private Object obj;
public PushBlockQueueHandler() {
}
public PushBlockQueueHandler(Object obj) {
this.obj = obj;
}
//消费线程
@Override
public void run() {
doBusiness();
}
//消费行为
private void doBusiness() {
String id = (String) obj;
System.out.println("id:" + id);
TestChannel testChannel = (TestChannel) CacheManager.getCache(id);
if (testChannel != null) {
try {
EvaReport evaReport = new EvaReport();
evaReport.setBrowser(testChannel.getBrowser());
evaReport.setFailCount(testChannel.getName() + "系统未通过测试," + "未通过测试点共" + "10" + "个");
evaReport.setProjectName(testChannel.getName());
evaReport.setCreateTime(new Date());
evaReport.setSystem("中标麒麟v7龙芯版");
evaReport.setUrl(testChannel.getUrl());
List<FailMessage> failMessages = new ArrayList<>();
FailMessage failMessage = new FailMessage();
failMessage.setUrl("https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1");
failMessage.setMessage("抗击疫情打不开响应超时");
failMessage.setPicture("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1584955247760&di=f073d6fd65cf71798843c6e4634358dd&imgtype=0&src=http%3A%2F%2Fa0.att.hudong.com%2F78%2F52%2F01200000123847134434529793168.jpg");
failMessages.add(failMessage);
evaReport.setFailMessages(failMessages);
List<PageRoute> pageRoutes = new ArrayList<>();
PageRoute pageRoute = new PageRoute();
pageRoute.setPageName("https://www.baidu.com/");
pageRoute.setAddress("/baidu");
pageRoute.setMessage("");
pageRoute.setResponseTime(300);
pageRoute.setSuccess(0);
pageRoute.setPicture("https://pics4.baidu.com/feed/500fd9f9d72a6059aecf87d92406529d013bbaca.jpeg?token=53433060d4d120e00d8ac6612d2303fd");
PageRoute pageRoute1 = new PageRoute();
pageRoute1.setPageName("https://www.baidu.com/");
pageRoute1.setAddress("/baidu");
pageRoute1.setMessage("不能访问");
pageRoute1.setResponseTime(300);
pageRoute1.setSuccess(1);
pageRoute1.setPicture("https://pics4.baidu.com/feed/500fd9f9d72a6059aecf87d92406529d013bbaca.jpeg?token=53433060d4d120e00d8ac6612d2303fd");
pageRoutes.add(pageRoute);
pageRoutes.add(pageRoute1);
evaReport.setPageRoutes(pageRoutes);
List<PageContentTest> pageContents = new ArrayList<>();
PageContentTest pageContentTest = new PageContentTest();
pageContentTest.setUrl("http://news.baidu.com/");
List<PageContent> contents = new ArrayList<>();
PageContent pageContent = new PageContent();
pageContent.setParms("国内");
pageContent.setMessage("");
pageContent.setResponseTime(300);
pageContent.setSuccess(0);
PageContent pageContent1 = new PageContent();
pageContent1.setParms("国外");
pageContent1.setMessage("响应时间过长");
pageContent1.setResponseTime(30000);
pageContent1.setSuccess(1);
contents.add(pageContent);
contents.add(pageContent1);
pageContentTest.setContents(contents);
pageContents.add(pageContentTest);
evaReport.setPageContents(pageContents);
//调用黄承天代码
Thread.sleep(6000);
if (testChannel.getCodeUrl() != null) {
//解压上传得代码
//获取前端代码中得网页路由地址
//比对黄承天代码中访问得地址和路由地址,黄承天是否访问全了。
}
System.out.println("修改状态");
//改变报告状态
String out = JSON.toJSONString(evaReport);
String in = JSON.toJSONString(testChannel);
System.out.println(id);
TestReport testReport = new TestReport();
testReport.setResultId(id);
testReport.setOutReport(out);
testReport.setInputReport(in);
testReportService.save(testReport);
autoResultSetService.updateByid(id);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + "-收到消息:" + obj);
}
}
package com.zjty.autotest.pojo.sjq;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.util.List;
@NoArgsConstructor
@AllArgsConstructor
@Data
@ApiModel(description = "评测报告类")
public class EvaReport {
@ApiModelProperty(value = "系统名称")
private String projectName;
@ApiModelProperty(value = "浏览器")
private String browser;
@ApiModelProperty(value = "操作系统")
private String system;
@ApiModelProperty(value = "入口地址")
private String url;
@ApiModelProperty(value = "未通过总结")
private String failCount;
@ApiModelProperty(value = "未通过测试点数据")
private List<FailMessage> failMessages;
@ApiModelProperty(value = "网页路由测试")
private List<PageRoute> pageRoutes;
@ApiModelProperty(value = "网页内容数据")
private List<PageContentTest> pageContents;
@ApiModelProperty(value = "记录修改时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
}
package com.zjty.autotest.pojo.sjq;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
@ApiModel(description = "未通过测试类")
public class FailMessage {
@ApiModelProperty(value = "所在网页")
private String url;
@ApiModelProperty(value = "未通过理由")
private String message;
@ApiModelProperty(value = "页面截图url")
private String picture;
}
package com.zjty.autotest.pojo.sjq;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
@ApiModel(description = "上传文件返回得信息")
public class FileBean {
private String url;
private String fileType;
}
package com.zjty.autotest.pojo.sjq;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
@ApiModel(description = "路由类")
public class PageContent {
/**
* 元素类型
*/
private String parms;
/**
* 响应时间
*/
private Integer responseTime;
/**
* 是否通过
*/
private Integer success;
/**
* 未通过理由
*/
private String message;
}
package com.zjty.autotest.pojo.sjq;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@NoArgsConstructor
@AllArgsConstructor
@Data
@ApiModel(description = "网页内容测试类")
public class PageContentTest {
private String url;
private List<PageContent> contents;
}
package com.zjty.autotest.pojo.sjq;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
@ApiModel(description = "页面路由测试类")
public class PageRoute {
/**
* 网页名称
*/
private String pageName;
/**
* 地址
*/
private String address;
/**
* 是否通过 0不成功 1成功
*/
private Integer success;
/**
* 响应时间
*/
private Integer responseTime;
/**
* 相关信息(未通过理由)
*/
private String message;
/**
* 截图的url
*/
private String picture;
}
......@@ -38,6 +38,8 @@ public class TestChannel {
private String url;
@ApiModelProperty(value = "上传代码路径地址")
private String codeUrl;
@ApiModelProperty(value = "文件类型")
private String fileType;
/**
* 参数填写
*/
......
......@@ -20,6 +20,11 @@ public enum AppHttpCodeEnum {
PARAM_IMAGE_FORMAT_ERROR(502,"图片格式有误"),
SERVER_ERROR(503,"服务器内部错误"),
SAVE_ERROR(504,"删除错误"),
File_Empty(505,"文件为空"),
File_Format_ERROR(506,"文件类型有误,只接受.zip"),
File_UPLOAD_ERROR(507,"文件上传失败"),
UPDATE_ERROR(508,"修改失败"),
ERROR(508,"操作失败"),
// 数据错误 1000~2000
DATA_EXIST(1000,"数据已经存在"),
AP_USER_DATA_NOT_EXIST(1001,"ApUser数据不存在"),
......
package com.zjty.autotest.service;
public interface AsyncService {
/**
* 执行异步任务
*/
void executeAsync(String id);
}
......@@ -18,6 +18,13 @@ public interface AutoResultSetService {
* 根据id删除
*/
ResponseResult deleteByid(String id);
/**
* 根据id修改状态
* @param id
* @return
*/
ResponseResult updateByid(String id);
/**
* 新增
*/
......
package com.zjty.autotest.service;
import com.zjty.autotest.pojo.sjq.EvaReport;
import com.zjty.autotest.pojo.sjq.TestReport;
import com.zjty.autotest.pojo.sjq.common.ResponseResult;
public interface TestReportService{
ResponseResult deleteByResultId(String id);
ResponseResult save(TestReport testReport);
ResponseResult addInReport(String id, String inReport);
/**
* 根据id查询输入
*/
ResponseResult findByIdInData(String resultId);
TestReport findByResultId(String resultId);
/**
* 根据id查询输出
*/
......
package com.zjty.autotest.service;
import com.zjty.autotest.pojo.sjq.common.ResponseResult;
import org.springframework.web.multipart.MultipartFile;
public interface UploadCodeService {
ResponseResult uploadCodeFile(MultipartFile file);
}
package com.zjty.autotest.service.impl;
import com.alibaba.fastjson.JSON;
import com.zjty.autotest.mq.CacheManager;
import com.zjty.autotest.pojo.sjq.*;
import com.zjty.autotest.service.AsyncService;
import com.zjty.autotest.service.AutoResultSetService;
import com.zjty.autotest.service.TestReportService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Service
public class AsyncServiceImpl implements AsyncService {
@Autowired
private AutoResultSetService autoResultSetService;
@Autowired
private TestReportService testReportService;
@Override
public void executeAsync(String id) {
System.out.println("id:" + id);
TestChannel testChannel = (TestChannel) CacheManager.getCache(id);
if (testChannel != null) {
try {
EvaReport evaReport = new EvaReport();
evaReport.setBrowser(testChannel.getBrowser());
evaReport.setFailCount(testChannel.getName() + "系统未通过测试," + "未通过测试点共" + "10" + "个");
evaReport.setProjectName(testChannel.getName());
evaReport.setCreateTime(new Date());
evaReport.setSystem("中标麒麟v7龙芯版");
evaReport.setUrl(testChannel.getUrl());
List<FailMessage> failMessages = new ArrayList<>();
FailMessage failMessage = new FailMessage();
failMessage.setUrl("https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1");
failMessage.setMessage("抗击疫情打不开响应超时");
failMessage.setPicture("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1584955247760&di=f073d6fd65cf71798843c6e4634358dd&imgtype=0&src=http%3A%2F%2Fa0.att.hudong.com%2F78%2F52%2F01200000123847134434529793168.jpg");
failMessages.add(failMessage);
evaReport.setFailMessages(failMessages);
List<PageRoute> pageRoutes = new ArrayList<>();
PageRoute pageRoute = new PageRoute();
pageRoute.setPageName("https://www.baidu.com/");
pageRoute.setAddress("/baidu");
pageRoute.setMessage("");
pageRoute.setResponseTime(300);
pageRoute.setSuccess(0);
pageRoute.setPicture("https://pics4.baidu.com/feed/500fd9f9d72a6059aecf87d92406529d013bbaca.jpeg?token=53433060d4d120e00d8ac6612d2303fd");
PageRoute pageRoute1 = new PageRoute();
pageRoute1.setPageName("https://www.baidu.com/");
pageRoute1.setAddress("/baidu");
pageRoute1.setMessage("不能访问");
pageRoute1.setResponseTime(300);
pageRoute1.setSuccess(1);
pageRoute1.setPicture("https://pics4.baidu.com/feed/500fd9f9d72a6059aecf87d92406529d013bbaca.jpeg?token=53433060d4d120e00d8ac6612d2303fd");
pageRoutes.add(pageRoute);
pageRoutes.add(pageRoute1);
evaReport.setPageRoutes(pageRoutes);
List<PageContentTest> pageContents = new ArrayList<>();
PageContentTest pageContentTest = new PageContentTest();
pageContentTest.setUrl("http://news.baidu.com/");
List<PageContent> contents = new ArrayList<>();
PageContent pageContent = new PageContent();
pageContent.setParms("国内");
pageContent.setMessage("");
pageContent.setResponseTime(300);
pageContent.setSuccess(0);
PageContent pageContent1 = new PageContent();
pageContent1.setParms("国外");
pageContent1.setMessage("响应时间过长");
pageContent1.setResponseTime(30000);
pageContent1.setSuccess(1);
contents.add(pageContent);
contents.add(pageContent1);
pageContentTest.setContents(contents);
pageContents.add(pageContentTest);
evaReport.setPageContents(pageContents);
//调用黄承天代码
Thread.sleep(6000);
if (testChannel.getCodeUrl() != null) {
//解压上传得代码
//获取前端代码中得网页路由地址
//比对黄承天代码中访问得地址和路由地址,黄承天是否访问全了。
}
System.out.println("修改状态");
//改变报告状态
String out = JSON.toJSONString(evaReport);
String in = JSON.toJSONString(testChannel);
System.out.println(id);
TestReport testReport = new TestReport();
testReport.setResultId(id);
testReport.setOutReport(out);
testReport.setInputReport(in);
testReportService.save(testReport);
// autoResultSetService.updateByid(id);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package com.zjty.autotest.service.impl;
import com.alibaba.fastjson.JSON;
import com.zjty.autotest.dao.AutoResultSetDao;
import com.zjty.autotest.mq.CacheManager;
import com.zjty.autotest.mq.PushBlockQueue;
import com.zjty.autotest.pojo.sjq.AutoResultSet;
import com.zjty.autotest.pojo.sjq.TestChannel;
import com.zjty.autotest.pojo.sjq.TestReport;
import com.zjty.autotest.pojo.sjq.common.AppHttpCodeEnum;
import com.zjty.autotest.pojo.sjq.common.ResponseResult;
import com.zjty.autotest.service.AsyncService;
import com.zjty.autotest.service.AutoResultSetService;
import com.zjty.autotest.service.TestReportService;
import com.zjty.autotest.util.IdWorker;
......@@ -32,6 +36,8 @@ public class AutoResultSetServiceImpl implements AutoResultSetService {
@Autowired
private AutoResultSetDao autoResultSetDao;
@Autowired
private PushBlockQueue pushBlockQueue;
@Autowired
private TestReportService testReportService;
@Autowired
private IdWorker idWorker;
......@@ -76,21 +82,37 @@ public class AutoResultSetServiceImpl implements AutoResultSetService {
return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
}
@Override
public ResponseResult updateByid(String id) {
int i = autoResultSetDao.updateStatus(id);
if(i==1){
return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
}
return ResponseResult.errorResult(AppHttpCodeEnum.UPDATE_ERROR);
}
@Override
public ResponseResult addResultSet(TestChannel testChannel) {
String tid=idWorker.nextId()+"";
AutoResultSet autoResultSet=new AutoResultSet();
autoResultSet.setId(idWorker.nextId()+"");
autoResultSet.setId(tid);
autoResultSet.setProjectName(testChannel.getName());
autoResultSet.setUser(testChannel.getUser());
autoResultSet.setCreateTime(new Date());
autoResultSet.setUpdateTime(new Date());
autoResultSet.setStatus(0);
autoResultSetDao.save(autoResultSet);
AutoResultSet save = autoResultSetDao.save(autoResultSet);
CacheManager.putCache(tid,testChannel);
//将数据保存到队列
//定时去读取
//调用黄承天代码
//修改状态为1
//发送websocket
return null;
try {
pushBlockQueue.put(tid);
// PushBlockQueue.getInstance().put(tid);
return ResponseResult.okResult(save);
} catch (Exception e) {
e.printStackTrace();
return ResponseResult.errorResult(AppHttpCodeEnum.SERVER_ERROR,e.getMessage());
}
}
}
......@@ -3,6 +3,7 @@ package com.zjty.autotest.service.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
......@@ -10,6 +11,7 @@ import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import com.zjty.autotest.dao.TestReportDao;
import com.zjty.autotest.pojo.sjq.EvaReport;
import com.zjty.autotest.pojo.sjq.TestReport;
import com.zjty.autotest.pojo.sjq.common.AppHttpCodeEnum;
import com.zjty.autotest.pojo.sjq.common.ResponseResult;
......@@ -83,6 +85,31 @@ public class TestReportServiceImpl implements TestReportService {
return ResponseResult.okResult(i);
}
@Override
public ResponseResult save(TestReport testReport) {
System.out.println(testReport);
if(testReport!=null){
testReport.setId(idWorker.nextId()+"");
testReport.setOutReport(testReport.getOutReport());
testReport.setOutReport(testReport.getInputReport());
testReport.setResultId(testReport.getResultId());
testReportDao.save(testReport);
return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
}
return ResponseResult.errorResult(AppHttpCodeEnum.ERROR);
}
@Override
public ResponseResult addInReport(String id, String inReport) {
TestReport testReport=new TestReport();
testReport.setResultId(id);
testReport.setId(idWorker.nextId()+"");
testReport.setInputReport(inReport);
testReport.setOutReport("");
testReportDao.save(testReport);
return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
}
@Override
public ResponseResult findByIdInData(String resultId) {
String in = testReportDao.findByInResultId(resultId);
......@@ -92,6 +119,12 @@ public class TestReportServiceImpl implements TestReportService {
return ResponseResult.okResult(in);
}
@Override
public TestReport findByResultId(String resultId) {
TestReport testReport = testReportDao.findByResultId(resultId);
return testReport;
}
@Override
public ResponseResult findByIdOutData(String resultId) {
String out = testReportDao.findByOutResultId(resultId);
......
package com.zjty.autotest.service.impl;
import com.zjty.autotest.pojo.sjq.FileBean;
import com.zjty.autotest.pojo.sjq.common.AppHttpCodeEnum;
import com.zjty.autotest.pojo.sjq.common.ResponseResult;
import com.zjty.autotest.service.UploadCodeService;
import com.zjty.autotest.util.IdWorker;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
@Service
public class UploadCodeServiceImpl implements UploadCodeService {
@Value("${uploadUnFile}")
private String uploadUnFile;
@Autowired
private IdWorker idWorker;
@Override
public ResponseResult uploadCodeFile(MultipartFile file) {
try {
if (file.isEmpty()) {
return ResponseResult.errorResult(AppHttpCodeEnum.File_Empty);
}
String fileName = file.getOriginalFilename();
String fileType = fileName.substring(fileName.lastIndexOf("."));
File dest = new File(uploadUnFile +"/"+idWorker.nextId()+"/"+fileName);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
file.transferTo(dest);
FileBean bean=new FileBean(dest.getAbsolutePath(),fileType);
return ResponseResult.okResult(bean);
} catch (IOException e) {
e.printStackTrace();
}
return ResponseResult.errorResult(AppHttpCodeEnum.File_UPLOAD_ERROR);
}
}
package com.zjty.autotest.util;
import com.github.junrar.Archive;
import com.github.junrar.rarfile.FileHeader;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import java.io.*;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
public class UnZipRarUtil {
/**
* 解压
*
* @param sourceFile
* @param toFolder
*/
public static String zipRarToFile(String fileName, String sourceFile, String toFolder) throws Exception {
int pos = fileName.lastIndexOf(".");
String extName = fileName.substring(pos + 1).toLowerCase();
File pushFile = new File(sourceFile);
File descFile = new File(toFolder);
if (!descFile.exists()) {
descFile.mkdirs();
}
//解压目的文件
String descDir = toFolder + "\\" + fileName.substring(0, pos) + "\\";
//开始解压zip
if (extName.equals("zip")) {
UnZipRarUtil.unZipFiles(pushFile, descDir);
} else if (extName.equals("rar")) {
//开始解压rar
UnZipRarUtil.unRarFile(pushFile.getAbsolutePath(), descDir);
}
return descDir;
}
/**
* 获取所有文件
*
* @param filelist
* @param strPath
* @return
*/
public static List<File> getFileList(List<File> filelist, String strPath) {
File dir = new File(strPath);
File[] files = dir.listFiles(); // 该文件目录下文件全部放入数组
if (files != null) {
for (int i = 0; i < files.length; i++) {
String fileName = files[i].getName();
if (files[i].isDirectory()) { // 判断是文件还是文件夹
getFileList(filelist, files[i].getAbsolutePath()); // 获取文件绝对路径
} else {
filelist.add(files[i]);
continue;
}
}
}
return filelist;
}
/**
* 解压到指定目录
*
* @param zipPath
* @param descDir
* @author
*/
public static void unZipFiles(String zipPath, String descDir) throws IOException {
unZipFiles(new File(zipPath), descDir);
}
/**
* 解压文件到指定目录
*
* @param zipFile
* @param descDir
* @author isea533
*/
@SuppressWarnings("rawtypes")
public static void unZipFiles(File zipFile, String descDir) throws IOException {
File pathFile = new File(descDir);
if (!pathFile.exists()) {
pathFile.mkdirs();
}
ZipFile zip = new ZipFile(zipFile);
for (Enumeration entries = zip.getEntries(); entries.hasMoreElements(); ) {
ZipEntry entry = (ZipEntry) entries.nextElement();
String zipEntryName = entry.getName();
InputStream in = zip.getInputStream(entry);
String outPath = (descDir + zipEntryName).replaceAll("\\*", "/");
;
//判断路径是否存在,不存在则创建文件路径
File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
if (!file.exists()) {
file.mkdirs();
}
//判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压
if (new File(outPath).isDirectory()) {
continue;
}
//输出文件路径信息
System.out.println(outPath);
OutputStream out = new FileOutputStream(outPath);
byte[] buf1 = new byte[1024];
int len;
while ((len = in.read(buf1)) > 0) {
out.write(buf1, 0, len);
}
in.close();
out.close();
}
}
/**
* 根据原始rar路径,解压到指定文件夹下.
*
* @param srcRarPath 原始rar路径
* @param dstDirectoryPath 解压到的文件夹
*/
public static void unRarFile(String srcRarPath, String dstDirectoryPath) {
if (!srcRarPath.toLowerCase().endsWith(".rar")) {
System.out.println("非rar文件!");
return;
}
File dstDiretory = new File(dstDirectoryPath);
if (!dstDiretory.exists()) {// 目标目录不存在时,创建该文件夹
dstDiretory.mkdirs();
}
Archive a = null;
try {
a = new Archive(new File(srcRarPath));
if (a != null) {
a.getMainHeader().print(); // 打印文件信息.
FileHeader fh = a.nextFileHeader();
while (fh != null) {
if (fh.isDirectory()) { // 文件夹
File fol = new File(dstDirectoryPath + File.separator
+ fh.getFileNameString());
fol.mkdirs();
} else { // 文件
File out = new File(dstDirectoryPath + File.separator
+ fh.getFileNameString().trim());
try {// 之所以这么写try,是因为万一这里面有了异常,不影响继续解压.
if (!out.exists()) {
if (!out.getParentFile().exists()) {// 相对路径可能多级,可能需要创建父目录.
out.getParentFile().mkdirs();
}
out.createNewFile();
}
FileOutputStream os = new FileOutputStream(out);
a.extractFile(fh, os);
os.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
fh = a.nextFileHeader();
}
a.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
......@@ -8,4 +8,9 @@ spring.jpa.hibernate.ddl-auto=update
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
spring.jpa.show-sql=false
spring.resources.static-locations=classpath:/adapter/
\ No newline at end of file
spring.resources.static-locations=classpath:/adapter/
uploadUnFile=E:/opt/auto/test/zr/
# spring-http-\u6587\u4EF6\u4E0A\u4F20\u76F8\u5173\u914D\u7F6E
spring.servlet.multipart.max-file-size=500MB
spring.servlet.multipart.max-request-size=500MB
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论