From a8018728f0a8bb8758b5d705f9079d5d244db662 Mon Sep 17 00:00:00 2001 From: zhouyl <583641232@qq.com> Date: Mon, 2 Sep 2024 11:40:48 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=20=20=E5=8F=91=E5=B8=83=E5=92=8C?= =?UTF-8?q?=E5=BC=80=E6=94=BE=E6=B5=8B=E8=AF=95=E5=B9=B3=E5=8F=B0-?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=8F=90=E4=BA=A4=E6=B5=8B=E8=AF=95=E6=8A=A5?= =?UTF-8?q?=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/TestReportController.java | 108 ++++++++++++++++++ .../inscloudtech/common/annotation/Log.java | 2 +- .../common/utils/file/FileUploadUtils.java | 48 ++++++++ .../common/utils/file/MimeTypeUtils.java | 6 + .../framework/aspectj/LogAspect.java | 2 +- .../functional/domain/TestReport.java | 50 ++++++++ .../functional/mapper/TestReportMapper.java | 18 +++ .../functional/service/TestReportService.java | 19 +++ .../service/impl/TestReportServiceImpl.java | 36 ++++++ .../system/domain/SysOperLog.java | 2 +- .../service/impl/SysOperLogServiceImpl.java | 2 +- 11 files changed, 289 insertions(+), 4 deletions(-) create mode 100644 tp-admin/src/main/java/com/inscloudtech/web/controller/system/TestReportController.java create mode 100644 tp-functional/src/main/java/com/inscloudtech/functional/domain/TestReport.java create mode 100644 tp-functional/src/main/java/com/inscloudtech/functional/mapper/TestReportMapper.java create mode 100644 tp-functional/src/main/java/com/inscloudtech/functional/service/TestReportService.java create mode 100644 tp-functional/src/main/java/com/inscloudtech/functional/service/impl/TestReportServiceImpl.java diff --git a/tp-admin/src/main/java/com/inscloudtech/web/controller/system/TestReportController.java b/tp-admin/src/main/java/com/inscloudtech/web/controller/system/TestReportController.java new file mode 100644 index 0000000..fce206e --- /dev/null +++ b/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 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)); + } + + +} diff --git a/tp-common/src/main/java/com/inscloudtech/common/annotation/Log.java b/tp-common/src/main/java/com/inscloudtech/common/annotation/Log.java index 86fa20d..d3668ac 100644 --- a/tp-common/src/main/java/com/inscloudtech/common/annotation/Log.java +++ b/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.*; /** - * 自定义操作日志记录注解 + * 自定义安全审计模块注解 * * @author inscloudtech */ diff --git a/tp-common/src/main/java/com/inscloudtech/common/utils/file/FileUploadUtils.java b/tp-common/src/main/java/com/inscloudtech/common/utils/file/FileUploadUtils.java index df99887..1b9014a 100644 --- a/tp-common/src/main/java/com/inscloudtech/common/utils/file/FileUploadUtils.java +++ b/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; + /** + * 默认大小 10M + */ + public static final long DEFAULT_TEXT_MAX_SIZE = 10 * 1024 * 1024; + /** * 默认的文件名最大长度 100 */ @@ -264,6 +269,49 @@ public class FileUploadUtils { 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类型 */ diff --git a/tp-common/src/main/java/com/inscloudtech/common/utils/file/MimeTypeUtils.java b/tp-common/src/main/java/com/inscloudtech/common/utils/file/MimeTypeUtils.java index f965979..88294e3 100644 --- a/tp-common/src/main/java/com/inscloudtech/common/utils/file/MimeTypeUtils.java +++ b/tp-common/src/main/java/com/inscloudtech/common/utils/file/MimeTypeUtils.java @@ -37,6 +37,12 @@ public class MimeTypeUtils { // 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) { switch (prefix) { case IMAGE_PNG: diff --git a/tp-framework/src/main/java/com/inscloudtech/framework/aspectj/LogAspect.java b/tp-framework/src/main/java/com/inscloudtech/framework/aspectj/LogAspect.java index af75e25..786a2ee 100644 --- a/tp-framework/src/main/java/com/inscloudtech/framework/aspectj/LogAspect.java +++ b/tp-framework/src/main/java/com/inscloudtech/framework/aspectj/LogAspect.java @@ -30,7 +30,7 @@ import java.util.Map; import java.util.StringJoiner; /** - * 操作日志记录处理 + * 安全审计模块处理 * * @author inscloudtech */ diff --git a/tp-functional/src/main/java/com/inscloudtech/functional/domain/TestReport.java b/tp-functional/src/main/java/com/inscloudtech/functional/domain/TestReport.java new file mode 100644 index 0000000..a3c4016 --- /dev/null +++ b/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; + +} diff --git a/tp-functional/src/main/java/com/inscloudtech/functional/mapper/TestReportMapper.java b/tp-functional/src/main/java/com/inscloudtech/functional/mapper/TestReportMapper.java new file mode 100644 index 0000000..46bc610 --- /dev/null +++ b/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 { + +} diff --git a/tp-functional/src/main/java/com/inscloudtech/functional/service/TestReportService.java b/tp-functional/src/main/java/com/inscloudtech/functional/service/TestReportService.java new file mode 100644 index 0000000..f0ba616 --- /dev/null +++ b/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 { + + void check(String reportName); +} + diff --git a/tp-functional/src/main/java/com/inscloudtech/functional/service/impl/TestReportServiceImpl.java b/tp-functional/src/main/java/com/inscloudtech/functional/service/impl/TestReportServiceImpl.java new file mode 100644 index 0000000..2b42ce4 --- /dev/null +++ b/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 implements TestReportService { + + @Override + public void check(String reportName) { + TestReport dbObj = baseMapper.selectOne(new LambdaQueryWrapper().eq(TestReport::getReportName, reportName).eq(TestReport::getCreateBy, LoginHelper.getUserId())); + if (ObjectUtil.isNotNull(dbObj)) { + throw new ServiceException("测试报告名称【"+reportName+"】已存在!"); + } + } + +} diff --git a/tp-system/src/main/java/com/inscloudtech/system/domain/SysOperLog.java b/tp-system/src/main/java/com/inscloudtech/system/domain/SysOperLog.java index 7c6ef1d..334b21c 100644 --- a/tp-system/src/main/java/com/inscloudtech/system/domain/SysOperLog.java +++ b/tp-system/src/main/java/com/inscloudtech/system/domain/SysOperLog.java @@ -15,7 +15,7 @@ import java.util.HashMap; import java.util.Map; /** - * 操作日志记录表 oper_log + * 安全审计模块 oper_log * * @author inscloudtech */ diff --git a/tp-system/src/main/java/com/inscloudtech/system/service/impl/SysOperLogServiceImpl.java b/tp-system/src/main/java/com/inscloudtech/system/service/impl/SysOperLogServiceImpl.java index 69be960..55fd6a9 100644 --- a/tp-system/src/main/java/com/inscloudtech/system/service/impl/SysOperLogServiceImpl.java +++ b/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; /** - * 操作日志记录 + * 安全审计模块 * * @param operLogEvent 操作日志事件 */