Browse Source

发布和开放测试平台-用户提交测试报告

master
zhouyl 1 year ago
parent
commit
a8018728f0
  1. 108
      tp-admin/src/main/java/com/inscloudtech/web/controller/system/TestReportController.java
  2. 2
      tp-common/src/main/java/com/inscloudtech/common/annotation/Log.java
  3. 48
      tp-common/src/main/java/com/inscloudtech/common/utils/file/FileUploadUtils.java
  4. 6
      tp-common/src/main/java/com/inscloudtech/common/utils/file/MimeTypeUtils.java
  5. 2
      tp-framework/src/main/java/com/inscloudtech/framework/aspectj/LogAspect.java
  6. 50
      tp-functional/src/main/java/com/inscloudtech/functional/domain/TestReport.java
  7. 18
      tp-functional/src/main/java/com/inscloudtech/functional/mapper/TestReportMapper.java
  8. 19
      tp-functional/src/main/java/com/inscloudtech/functional/service/TestReportService.java
  9. 36
      tp-functional/src/main/java/com/inscloudtech/functional/service/impl/TestReportServiceImpl.java
  10. 2
      tp-system/src/main/java/com/inscloudtech/system/domain/SysOperLog.java
  11. 2
      tp-system/src/main/java/com/inscloudtech/system/service/impl/SysOperLogServiceImpl.java

108
tp-admin/src/main/java/com/inscloudtech/web/controller/system/TestReportController.java

@ -0,0 +1,108 @@
package com.inscloudtech.web.controller.system;
/***/
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.inscloudtech.common.annotation.Log;
import com.inscloudtech.common.core.domain.PageQuery;
import com.inscloudtech.common.core.domain.R;
import com.inscloudtech.common.core.page.TableDataInfo;
import com.inscloudtech.common.enums.BusinessType;
import com.inscloudtech.common.utils.file.FileUploadUtils;
import com.inscloudtech.functional.domain.TestReport;
import com.inscloudtech.functional.service.TestReportService;
import com.inscloudtech.system.domain.vo.SysOssVo;
import com.inscloudtech.system.service.ISysOssService;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
/**
* 测试报告管理
*
* @author zfcf
* @date 2024-08-28
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/functional/testReport")
public class TestReportController {
private final TestReportService testReportService;
private final ISysOssService iSysOssService;
/**
* 分页查询
* @param
* @param
* @return
*/
@GetMapping("/page" )
public TableDataInfo<TestReport> page(PageQuery pageQuery, TestReport testReport) {
Page page = new Page();
page.setSize(pageQuery.getPageSize());
page.setCurrent(pageQuery.getPageNum());
Page result = testReportService.page(page, Wrappers.query(testReport));
TableDataInfo dataInfo = new TableDataInfo();
dataInfo.setTotal(result.getTotal());
dataInfo.setRows(result.getRecords());
return dataInfo;
}
/**
* 通过id查询测试报告
* @param id id
* @return R
*/
@GetMapping("/{id}" )
public R getById(@PathVariable("id" ) Long id) {
return R.ok(testReportService.getById(id));
}
/**
* 上传测试报告
*
*/
@SneakyThrows
@Log(title = "测试报告管理", businessType = BusinessType.INSERT)
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R uploadToolAndTips( @RequestPart("file") MultipartFile file,
@RequestPart("reportName") String reportName) {
if (StrUtil.isEmpty(reportName)) {
return R.fail("报告名称不能为空!");
}
testReportService.check(reportName);
TestReport testReport = new TestReport();
testReport.setReportName(reportName);
if(file != null && FileUploadUtils.checkTxtFileValid(file)){
SysOssVo toolVo = iSysOssService.upload(file);
testReport.setReportPath(toolVo.getOriginalName());
testReport.setReportOssId(toolVo.getOssId());
}
testReportService.save(testReport);
return R.ok("操作成功!");
}
/**
* 通过id删除测试报告
* @param id id
* @return R
*/
@DeleteMapping("/{id}" )
public R removeById(@PathVariable Long id) {
return R.ok(testReportService.removeById(id));
}
}

2
tp-common/src/main/java/com/inscloudtech/common/annotation/Log.java

@ -6,7 +6,7 @@ import com.inscloudtech.common.enums.OperatorType;
import java.lang.annotation.*; import java.lang.annotation.*;
/** /**
* 自定义操作日志记录注解
* 自定义安全审计模块注解
* *
* @author inscloudtech * @author inscloudtech
*/ */

48
tp-common/src/main/java/com/inscloudtech/common/utils/file/FileUploadUtils.java

@ -29,6 +29,11 @@ public class FileUploadUtils {
*/ */
public static final long DEFAULT_MAX_SIZE = 50000 * 1024 * 1024; public static final long DEFAULT_MAX_SIZE = 50000 * 1024 * 1024;
/**
* 默认大小 10M
*/
public static final long DEFAULT_TEXT_MAX_SIZE = 10 * 1024 * 1024;
/** /**
* 默认的文件名最大长度 100 * 默认的文件名最大长度 100
*/ */
@ -264,6 +269,49 @@ public class FileUploadUtils {
return true; return true;
} }
/**
* 文本文件大小校验
*
* @param file 上传的文件
* @throws FileSizeLimitExceededException 如果超出最大大小
*/
public static boolean checkTxtFileValid(MultipartFile file)
throws FileSizeLimitExceededException, InvalidExtensionException {
long size = file.getSize();
if (size > DEFAULT_TEXT_MAX_SIZE) {
throw new FileSizeLimitExceededException(DEFAULT_TEXT_MAX_SIZE / 1024 / 1024);
}
String[] allowedExtension = MimeTypeUtils.DEFAULT_ALLOWED_TXT_EXTENSION;
String extension = getExtension(file);
if(StrUtil.isEmpty(extension)){
return false;
}
if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) {
if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) {
return false;
// throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension,
// fileName);
} else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION) {
// throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension,
// fileName);
return false;
} else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION) {
// throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension,
// fileName);
return false;
} else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION) {
// throw new InvalidExtensionException.InvalidVideoExtensionException(allowedExtension, extension,
// fileName);'
return false;
} else {
// throw new InvalidExtensionException(allowedExtension, extension, fileName);
return false;
}
}
return true;
}
/** /**
* 判断MIME类型是否是允许的MIME类型 * 判断MIME类型是否是允许的MIME类型
*/ */

6
tp-common/src/main/java/com/inscloudtech/common/utils/file/MimeTypeUtils.java

@ -37,6 +37,12 @@ public class MimeTypeUtils {
// pdf // pdf
"pdf"}; "pdf"};
public static final String[] DEFAULT_ALLOWED_TXT_EXTENSION = {
// word excel powerpoint
"doc", "docx", "xls", "xlsx", "ppt", "pptx", "html", "htm", "txt",
// pdf
"pdf"};
public static String getExtension(String prefix) { public static String getExtension(String prefix) {
switch (prefix) { switch (prefix) {
case IMAGE_PNG: case IMAGE_PNG:

2
tp-framework/src/main/java/com/inscloudtech/framework/aspectj/LogAspect.java

@ -30,7 +30,7 @@ import java.util.Map;
import java.util.StringJoiner; import java.util.StringJoiner;
/** /**
* 操作日志记录处理
* 安全审计模块处理
* *
* @author inscloudtech * @author inscloudtech
*/ */

50
tp-functional/src/main/java/com/inscloudtech/functional/domain/TestReport.java

@ -0,0 +1,50 @@
package com.inscloudtech.functional.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.inscloudtech.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 测试报告管理对象 test_report
*
* @author inscloudtech
* @date 2024-09-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("test_report")
public class TestReport extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 主键
*/
@TableId(value = "id")
private Long id;
/**
* 报告名称
*/
@TableField(condition = SqlCondition.LIKE)
private String reportName;
/**
* 报告文件
*/
private String reportPath;
/**
* 分析结果文件
*/
private String resultPath;
/**
* 报告文件下载id
*/
private Long reportOssId;
/**
* 分析结果文件下载id
*/
private Long resultOssId;
}

18
tp-functional/src/main/java/com/inscloudtech/functional/mapper/TestReportMapper.java

@ -0,0 +1,18 @@
package com.inscloudtech.functional.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.inscloudtech.functional.domain.TestReport;
import org.apache.ibatis.annotations.Mapper;
/**
* cpu信息
*
* @author zfcf
* @date 2024-08-28
*/
@Mapper
public interface TestReportMapper extends BaseMapper<TestReport> {
}

19
tp-functional/src/main/java/com/inscloudtech/functional/service/TestReportService.java

@ -0,0 +1,19 @@
package com.inscloudtech.functional.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.inscloudtech.functional.domain.CpuInfo;
import com.inscloudtech.functional.domain.TestReport;
import org.springframework.web.multipart.MultipartFile;
/**
* cpu信息Service接口
* @author zfcf
* @date 2024-08-28
*/
public interface TestReportService extends IService<TestReport> {
void check(String reportName);
}

36
tp-functional/src/main/java/com/inscloudtech/functional/service/impl/TestReportServiceImpl.java

@ -0,0 +1,36 @@
package com.inscloudtech.functional.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.inscloudtech.common.exception.ServiceException;
import com.inscloudtech.common.helper.LoginHelper;
import com.inscloudtech.common.utils.file.FileUploadUtils;
import com.inscloudtech.functional.domain.CpuInfo;
import com.inscloudtech.functional.domain.TestReport;
import com.inscloudtech.functional.mapper.CpuInfoMapper;
import com.inscloudtech.functional.mapper.TestReportMapper;
import com.inscloudtech.functional.service.CpuInfoService;
import com.inscloudtech.functional.service.TestReportService;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
/**
*
* @author zfcf
* @date 2024-08-28
*/
@Service
public class TestReportServiceImpl extends ServiceImpl<TestReportMapper, TestReport> implements TestReportService {
@Override
public void check(String reportName) {
TestReport dbObj = baseMapper.selectOne(new LambdaQueryWrapper<TestReport>().eq(TestReport::getReportName, reportName).eq(TestReport::getCreateBy, LoginHelper.getUserId()));
if (ObjectUtil.isNotNull(dbObj)) {
throw new ServiceException("测试报告名称【"+reportName+"】已存在!");
}
}
}

2
tp-system/src/main/java/com/inscloudtech/system/domain/SysOperLog.java

@ -15,7 +15,7 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
/** /**
* 操作日志记录表 oper_log
* 安全审计模块 oper_log
* *
* @author inscloudtech * @author inscloudtech
*/ */

2
tp-system/src/main/java/com/inscloudtech/system/service/impl/SysOperLogServiceImpl.java

@ -34,7 +34,7 @@ public class SysOperLogServiceImpl implements ISysOperLogService {
private final SysOperLogMapper baseMapper; private final SysOperLogMapper baseMapper;
/** /**
* 操作日志记录
* 安全审计模块
* *
* @param operLogEvent 操作日志事件 * @param operLogEvent 操作日志事件
*/ */

Loading…
Cancel
Save