Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
8b24069dca
@ -1,26 +1,55 @@
|
|||||||
package cd.casic.framework.commons.util.json.databind;
|
package cd.casic.framework.commons.util.json.databind;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import com.fasterxml.jackson.core.JsonGenerator;
|
import com.fasterxml.jackson.core.JsonGenerator;
|
||||||
|
import com.fasterxml.jackson.databind.BeanProperty;
|
||||||
|
import com.fasterxml.jackson.databind.JsonMappingException;
|
||||||
import com.fasterxml.jackson.databind.JsonSerializer;
|
import com.fasterxml.jackson.databind.JsonSerializer;
|
||||||
import com.fasterxml.jackson.databind.SerializerProvider;
|
import com.fasterxml.jackson.databind.SerializerProvider;
|
||||||
|
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 基于时间戳的 LocalDateTime 序列化器
|
* 基于时间戳的 LocalDateTime 序列化器
|
||||||
*
|
*
|
||||||
* @author 老五
|
* @author 老五
|
||||||
*/
|
*/
|
||||||
public class TimestampLocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {
|
public class TimestampLocalDateTimeSerializer extends JsonSerializer<LocalDateTime> implements ContextualSerializer {
|
||||||
|
|
||||||
public static final TimestampLocalDateTimeSerializer INSTANCE = new TimestampLocalDateTimeSerializer();
|
public static final TimestampLocalDateTimeSerializer INSTANCE = new TimestampLocalDateTimeSerializer();
|
||||||
|
private DateTimeFormatter dateTimeFormatter = null;
|
||||||
|
|
||||||
|
public TimestampLocalDateTimeSerializer() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public TimestampLocalDateTimeSerializer(DateTimeFormatter dateTimeFormatter) {
|
||||||
|
this.dateTimeFormatter = dateTimeFormatter;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
|
public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
|
||||||
// 将 LocalDateTime 对象,转换为 Long 时间戳
|
// // 将 LocalDateTime 对象,转换为 Long 时间戳
|
||||||
gen.writeNumber(value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
|
// gen.writeNumber(value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
|
||||||
|
if (dateTimeFormatter != null) {
|
||||||
|
gen.writeString(value.format(dateTimeFormatter));
|
||||||
|
} else {
|
||||||
|
gen.writeNumber(value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JsonSerializer<?> createContextual(SerializerProvider serializerProvider, BeanProperty property) throws JsonMappingException {
|
||||||
|
if (property != null) {
|
||||||
|
JsonFormat format = property.getAnnotation(JsonFormat.class);
|
||||||
|
if (format != null && !format.pattern().isEmpty()) {
|
||||||
|
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format.pattern());
|
||||||
|
return new TimestampLocalDateTimeSerializer(dateTimeFormatter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ public class ShuiMuController {
|
|||||||
private ShuiMuService shuiMuService;
|
private ShuiMuService shuiMuService;
|
||||||
@GetMapping("/getToken")
|
@GetMapping("/getToken")
|
||||||
public CommonResult<String> getToken(){
|
public CommonResult<String> getToken(){
|
||||||
return CommonResult.success(shuiMuService.getToken());
|
return CommonResult.success(shuiMuService.getToken().replace("Bearer ",""));
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 获取编译环境
|
* 获取编译环境
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
package cd.casic.ci.process.dto.resp.shuimu;
|
package cd.casic.ci.process.dto.resp.shuimu;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.annotation.JSONField;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class ShuiMuTestProblemResp {
|
public class ShuiMuTestProblemResp {
|
||||||
private String id;
|
private String id;
|
||||||
@ -14,6 +18,9 @@ public class ShuiMuTestProblemResp {
|
|||||||
private String testid;
|
private String testid;
|
||||||
private String testGroupId;
|
private String testGroupId;
|
||||||
private String createAt;
|
private String createAt;
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
private LocalDateTime createTime;
|
||||||
private String description;
|
private String description;
|
||||||
private String cwe;
|
private String cwe;
|
||||||
private String testGroupIdAndproblemId;
|
private String testGroupIdAndproblemId;
|
||||||
|
@ -44,4 +44,6 @@ public class TestCaseManagerResp {
|
|||||||
|
|
||||||
private LocalDateTime updateTime;
|
private LocalDateTime updateTime;
|
||||||
|
|
||||||
|
private Integer fileCount;
|
||||||
|
private String fileSize;
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,7 @@ import jakarta.annotation.Resource;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.scheduling.annotation.Async;
|
||||||
|
import org.springframework.scheduling.annotation.EnableAsync;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -137,7 +138,7 @@ public class AFLWorker extends DockerWorker {
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@Async
|
|
||||||
public void afterTaskExecute(TaskRunContext context){
|
public void afterTaskExecute(TaskRunContext context){
|
||||||
append(context,"开始拉取afl输出信息");
|
append(context,"开始拉取afl输出信息");
|
||||||
PipTask contextDef = (PipTask)context.getContextDef();
|
PipTask contextDef = (PipTask)context.getContextDef();
|
||||||
|
@ -33,6 +33,10 @@ import org.springframework.web.util.UriComponentsBuilder;
|
|||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static cd.casic.ci.process.constant.ShuiMuUrlConstant.*;
|
import static cd.casic.ci.process.constant.ShuiMuUrlConstant.*;
|
||||||
@ -295,7 +299,15 @@ public class ShuiMuServiceImpl implements ShuiMuService {
|
|||||||
ResponseEntity<String> exchange = restTemplate.exchange(uriString, HttpMethod.GET, entity, String.class, new HashMap<>());
|
ResponseEntity<String> exchange = restTemplate.exchange(uriString, HttpMethod.GET, entity, String.class, new HashMap<>());
|
||||||
JSONObject jsonObject = JSON.parseObject(exchange.getBody());
|
JSONObject jsonObject = JSON.parseObject(exchange.getBody());
|
||||||
String data = jsonObject.getString("data");
|
String data = jsonObject.getString("data");
|
||||||
return JSONArray.parseArray(data, ShuiMuTestProblemResp.class);
|
List<ShuiMuTestProblemResp> shuiMuTestProblemResps = JSONArray.parseArray(data, ShuiMuTestProblemResp.class);
|
||||||
|
shuiMuTestProblemResps.forEach(item ->{
|
||||||
|
String createAt = item.getCreateAt();
|
||||||
|
LocalDateTime date = Instant.ofEpochMilli(Long.parseLong(createAt))
|
||||||
|
.atZone(ZoneId.systemDefault())
|
||||||
|
.toLocalDateTime();
|
||||||
|
item.setCreateTime(date);
|
||||||
|
});
|
||||||
|
return shuiMuTestProblemResps;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public ShuiMuProjectReportResp getProjectReport(String projectId) {
|
public ShuiMuProjectReportResp getProjectReport(String projectId) {
|
||||||
|
@ -33,4 +33,5 @@ public interface TestCaseInfoService extends IService<TestCaseInfo> {
|
|||||||
TestCaseInfoResp findById(String id);
|
TestCaseInfoResp findById(String id);
|
||||||
|
|
||||||
List<String> findFileTypeList();
|
List<String> findFileTypeList();
|
||||||
|
List<TestCaseInfoResp> findByManagerIds(List<String> idList);
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
|
|||||||
import cd.casic.framework.commons.pojo.PageResult;
|
import cd.casic.framework.commons.pojo.PageResult;
|
||||||
import cd.casic.framework.security.dal.user.AdminUserDO;
|
import cd.casic.framework.security.dal.user.AdminUserDO;
|
||||||
import cd.casic.framework.tenant.core.service.AdminUserServiceImpl;
|
import cd.casic.framework.tenant.core.service.AdminUserServiceImpl;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
@ -24,6 +25,7 @@ import org.springframework.util.CollectionUtils;
|
|||||||
import org.springframework.util.ObjectUtils;
|
import org.springframework.util.ObjectUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -138,6 +140,17 @@ public class TestCaseInfoServiceImpl extends ServiceImpl<TestCaseInfoDao, TestCa
|
|||||||
return fileTypeList;
|
return fileTypeList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<TestCaseInfoResp> findByManagerIds(List<String> idList) {
|
||||||
|
if (CollectionUtils.isEmpty(idList)) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
LambdaQueryWrapper<TestCaseInfo> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
wrapper.in(TestCaseInfo::getTestCaseManagerId,idList);
|
||||||
|
List<TestCaseInfo> testCaseInfos = testCaseInfoDao.selectList(wrapper);
|
||||||
|
return TestCaseInfoConverter.INSTANCE.toRespList(testCaseInfos);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void setUserName(TestCaseInfoResp testCaseInfoResp) {
|
private void setUserName(TestCaseInfoResp testCaseInfoResp) {
|
||||||
if (!StringUtils.isEmpty(testCaseInfoResp.getCreator())){
|
if (!StringUtils.isEmpty(testCaseInfoResp.getCreator())){
|
||||||
|
@ -3,12 +3,14 @@ package cd.casic.ci.process.process.service.testCase.impl;
|
|||||||
|
|
||||||
import cd.casic.ci.process.dto.req.testCase.TestCaseManagerQueryReq;
|
import cd.casic.ci.process.dto.req.testCase.TestCaseManagerQueryReq;
|
||||||
import cd.casic.ci.process.dto.req.testCase.TestCaseManagerReq;
|
import cd.casic.ci.process.dto.req.testCase.TestCaseManagerReq;
|
||||||
|
import cd.casic.ci.process.dto.resp.testCase.TestCaseInfoResp;
|
||||||
import cd.casic.ci.process.dto.resp.testCase.TestCaseManagerResp;
|
import cd.casic.ci.process.dto.resp.testCase.TestCaseManagerResp;
|
||||||
import cd.casic.ci.process.process.converter.TestCaseManagerConverter;
|
import cd.casic.ci.process.process.converter.TestCaseManagerConverter;
|
||||||
import cd.casic.ci.process.process.dao.testCase.TestCaseInfoDao;
|
import cd.casic.ci.process.process.dao.testCase.TestCaseInfoDao;
|
||||||
import cd.casic.ci.process.process.dao.testCase.TestCaseManagerDao;
|
import cd.casic.ci.process.process.dao.testCase.TestCaseManagerDao;
|
||||||
import cd.casic.ci.process.process.dataObject.testCase.TestCaseInfo;
|
import cd.casic.ci.process.process.dataObject.testCase.TestCaseInfo;
|
||||||
import cd.casic.ci.process.process.dataObject.testCase.TestCaseManager;
|
import cd.casic.ci.process.process.dataObject.testCase.TestCaseManager;
|
||||||
|
import cd.casic.ci.process.process.service.testCase.TestCaseInfoService;
|
||||||
import cd.casic.ci.process.process.service.testCase.TestCaseManagerService;
|
import cd.casic.ci.process.process.service.testCase.TestCaseManagerService;
|
||||||
import cd.casic.ci.process.properties.TargetFileUploadProperties;
|
import cd.casic.ci.process.properties.TargetFileUploadProperties;
|
||||||
import cd.casic.framework.commons.exception.ServiceException;
|
import cd.casic.framework.commons.exception.ServiceException;
|
||||||
@ -16,6 +18,8 @@ import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
|
|||||||
import cd.casic.framework.commons.pojo.PageResult;
|
import cd.casic.framework.commons.pojo.PageResult;
|
||||||
import cd.casic.framework.security.dal.user.AdminUserDO;
|
import cd.casic.framework.security.dal.user.AdminUserDO;
|
||||||
import cd.casic.framework.tenant.core.service.AdminUserServiceImpl;
|
import cd.casic.framework.tenant.core.service.AdminUserServiceImpl;
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
@ -27,10 +31,13 @@ import jakarta.annotation.Resource;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
import org.springframework.util.ObjectUtils;
|
import org.springframework.util.ObjectUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author HopeLi
|
* @author HopeLi
|
||||||
@ -55,6 +62,9 @@ public class TestCaseManagerServiceImpl extends ServiceImpl<TestCaseManagerDao,
|
|||||||
@Resource
|
@Resource
|
||||||
private TargetFileUploadProperties fileUploadProperties;
|
private TargetFileUploadProperties fileUploadProperties;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private TestCaseInfoService testCaseInfoService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String create(TestCaseManagerReq req) {
|
public String create(TestCaseManagerReq req) {
|
||||||
TestCaseManager testCaseManager = TestCaseManagerConverter.INSTANCE.toBean(req);
|
TestCaseManager testCaseManager = TestCaseManagerConverter.INSTANCE.toBean(req);
|
||||||
@ -118,9 +128,14 @@ public class TestCaseManagerServiceImpl extends ServiceImpl<TestCaseManagerDao,
|
|||||||
}
|
}
|
||||||
List<TestCaseManagerResp> respList = TestCaseManagerConverter.INSTANCE.toRespList(testCaseManagerPage.getRecords());
|
List<TestCaseManagerResp> respList = TestCaseManagerConverter.INSTANCE.toRespList(testCaseManagerPage.getRecords());
|
||||||
respList.forEach(this::setUserName);
|
respList.forEach(this::setUserName);
|
||||||
|
List<String> list = respList.stream().map(TestCaseManagerResp::getId).toList();
|
||||||
|
List<TestCaseInfoResp> testCaseInfos = testCaseInfoService.findByManagerIds(list);
|
||||||
|
Map<String, List<TestCaseInfoResp>> collect = testCaseInfos.stream().collect(Collectors.groupingBy(TestCaseInfoResp::getTestCaseManagerId));
|
||||||
|
fullManagerFileInfo(respList,collect);
|
||||||
return new PageResult<>(respList,testCaseManagerPage.getTotal(),testCaseManagerPage.getCurrent(),testCaseManagerPage.getSize());
|
return new PageResult<>(respList,testCaseManagerPage.getTotal(),testCaseManagerPage.getCurrent(),testCaseManagerPage.getSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TestCaseManagerResp findById(String id) {
|
public TestCaseManagerResp findById(String id) {
|
||||||
TestCaseManager testCaseManager = testCaseManagerDao.selectById(id);
|
TestCaseManager testCaseManager = testCaseManagerDao.selectById(id);
|
||||||
@ -190,4 +205,41 @@ public class TestCaseManagerServiceImpl extends ServiceImpl<TestCaseManagerDao,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private void fullManagerFileInfo(List<TestCaseManagerResp> respList,Map<String,List<TestCaseInfoResp>> caseInfoMap){
|
||||||
|
if (CollectionUtils.isEmpty(respList)||CollectionUtils.isEmpty(caseInfoMap)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (TestCaseManagerResp managerInfo : respList) {
|
||||||
|
List<TestCaseInfoResp> testCaseInfos = caseInfoMap.get(managerInfo.getId());
|
||||||
|
if (CollectionUtils.isEmpty(testCaseInfos)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Integer size = 0;
|
||||||
|
Integer fileCount = testCaseInfos.size();
|
||||||
|
for (TestCaseInfoResp testCaseInfo : testCaseInfos) {
|
||||||
|
JSONArray array= JSONArray.parseArray(testCaseInfo.getTestFileList());
|
||||||
|
if (!array.isEmpty()) {
|
||||||
|
JSONObject jsonObject = array.getJSONObject(0);
|
||||||
|
Integer fileSize = jsonObject.getInteger("size");
|
||||||
|
size+=fileSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
managerInfo.setFileCount(fileCount);
|
||||||
|
managerInfo.setFileSize(getSizeStr(size));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private String getSizeStr(Integer size){
|
||||||
|
Integer devid=1;
|
||||||
|
int level = 0; // 0 -byte 1-kb 2-mb 3-gb
|
||||||
|
while (size/devid>=1024){
|
||||||
|
devid*=1024;
|
||||||
|
};
|
||||||
|
return switch (level) {
|
||||||
|
case 0 -> size / devid + "byte";
|
||||||
|
case 1 -> size / devid + "kb";
|
||||||
|
case 2 -> size / devid + "mb";
|
||||||
|
case 3 -> size / devid + "gb";
|
||||||
|
default -> size + "";
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user