From f294cb315fb8cb7ca9a7462f96fc342620051864 Mon Sep 17 00:00:00 2001 From: caozehui <2427765068@qq.com> Date: Thu, 20 Mar 2025 11:15:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device/pojo/constant/DevValidMessage.java | 1 + .../plan/mapper/mapping/AdPlanMapper.xml | 4 +- .../gather/plan/pojo/param/AdPlanParam.java | 1 + .../plan/service/impl/AdPlanServiceImpl.java | 12 ++ .../report/controller/ReportController.java | 1 - .../gather/report/mapper/PqReportMapper.java | 8 +- .../report/mapper/mapping/PqReportMapper.xml | 3 + .../pojo/constant/ReportValidMessage.java | 11 ++ .../report/pojo/enums/ReportEnableEnum.java | 22 ---- .../report/pojo/enums/ReportResponseEnum.java | 5 +- .../gather/report/pojo/param/ReportParam.java | 6 + .../njcn/gather/report/pojo/po/PqReport.java | 4 +- .../gather/report/pojo/vo/PqReportVO.java | 6 +- .../report/service/IPqReportService.java | 9 -- .../service/impl/PqReportServiceImpl.java | 117 +++++++++--------- 15 files changed, 113 insertions(+), 97 deletions(-) create mode 100644 detection/src/main/java/com/njcn/gather/report/pojo/constant/ReportValidMessage.java delete mode 100644 detection/src/main/java/com/njcn/gather/report/pojo/enums/ReportEnableEnum.java diff --git a/detection/src/main/java/com/njcn/gather/device/pojo/constant/DevValidMessage.java b/detection/src/main/java/com/njcn/gather/device/pojo/constant/DevValidMessage.java index 02363996..df0fe7a6 100644 --- a/detection/src/main/java/com/njcn/gather/device/pojo/constant/DevValidMessage.java +++ b/detection/src/main/java/com/njcn/gather/device/pojo/constant/DevValidMessage.java @@ -210,4 +210,5 @@ public interface DevValidMessage { String PREINVESTMENT_PLAN_NOT_BLANK = "预投资计划不能为空"; String TIMECHECK_NOT_NULL = "是否做守时检测不能为空"; String CREATEID_NOT_BLANK = "设备序列号不能为空"; + String ASSOCIATE_REPORT_NOT_NULL = "是否关联报告不能为空"; } diff --git a/detection/src/main/java/com/njcn/gather/plan/mapper/mapping/AdPlanMapper.xml b/detection/src/main/java/com/njcn/gather/plan/mapper/mapping/AdPlanMapper.xml index 6c555da7..2ed76027 100644 --- a/detection/src/main/java/com/njcn/gather/plan/mapper/mapping/AdPlanMapper.xml +++ b/detection/src/main/java/com/njcn/gather/plan/mapper/mapping/AdPlanMapper.xml @@ -8,14 +8,14 @@ FROM pq_report WHERE name = #{name} AND version = #{version} - and enable !=0 + and state = 1 diff --git a/detection/src/main/java/com/njcn/gather/plan/pojo/param/AdPlanParam.java b/detection/src/main/java/com/njcn/gather/plan/pojo/param/AdPlanParam.java index 8d489042..4e0d480f 100644 --- a/detection/src/main/java/com/njcn/gather/plan/pojo/param/AdPlanParam.java +++ b/detection/src/main/java/com/njcn/gather/plan/pojo/param/AdPlanParam.java @@ -62,6 +62,7 @@ public class AdPlanParam { private List devIds; @ApiModelProperty(value = "是否关联报告") + @NotNull(message = DevValidMessage.ASSOCIATE_REPORT_NOT_NULL) private Integer associateReport; @ApiModelProperty(value = "报告模板名称") diff --git a/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanServiceImpl.java b/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanServiceImpl.java index cd439356..51f6aebb 100644 --- a/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanServiceImpl.java @@ -193,6 +193,18 @@ public class AdPlanServiceImpl extends ServiceImpl impleme if (!plan1.getErrorSysId().equals(param.getErrorSysId())) { throw new BusinessException(PlanResponseEnum.CANNOT_CHANGE_ERROR_SYS_WHEN_CHECKING); } + if (param.getAssociateReport() != plan1.getAssociateReport()) { + throw new BusinessException(PlanResponseEnum.CANNOT_CHANGE_REPORT_WHEN_CHECKING); + } + if (param.getAssociateReport() != plan1.getAssociateReport()) { + throw new BusinessException(PlanResponseEnum.CANNOT_CHANGE_REPORT_WHEN_CHECKING); + } + if (param.getAssociateReport() == 1) { + String reportId = this.baseMapper.getReportIdByNameAndVersion(param.getReportName(), param.getReportVersion()); + if (!reportId.equals(plan1.getReportTemplateId())) { + throw new BusinessException(PlanResponseEnum.CANNOT_CHANGE_REPORT_WHEN_CHECKING); + } + } } BeanUtil.copyProperties(param, plan2); diff --git a/detection/src/main/java/com/njcn/gather/report/controller/ReportController.java b/detection/src/main/java/com/njcn/gather/report/controller/ReportController.java index e0c6fa47..73445c44 100644 --- a/detection/src/main/java/com/njcn/gather/report/controller/ReportController.java +++ b/detection/src/main/java/com/njcn/gather/report/controller/ReportController.java @@ -21,7 +21,6 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.List; -import java.util.Map; /** diff --git a/detection/src/main/java/com/njcn/gather/report/mapper/PqReportMapper.java b/detection/src/main/java/com/njcn/gather/report/mapper/PqReportMapper.java index 80d9b8ee..2fc9c2f2 100644 --- a/detection/src/main/java/com/njcn/gather/report/mapper/PqReportMapper.java +++ b/detection/src/main/java/com/njcn/gather/report/mapper/PqReportMapper.java @@ -3,11 +3,17 @@ package com.njcn.gather.report.mapper; import com.github.yulichang.base.MPJBaseMapper; import com.njcn.gather.report.pojo.po.PqReport; +import java.util.List; + /** * @author makejava * @date 2025-03-19 */ public interface PqReportMapper extends MPJBaseMapper { - + /** + * 获取所有已被计划绑定的报告模板id + * @return + */ + List getBoundReportIds(); } diff --git a/detection/src/main/java/com/njcn/gather/report/mapper/mapping/PqReportMapper.xml b/detection/src/main/java/com/njcn/gather/report/mapper/mapping/PqReportMapper.xml index 72efe3ab..a215e556 100644 --- a/detection/src/main/java/com/njcn/gather/report/mapper/mapping/PqReportMapper.xml +++ b/detection/src/main/java/com/njcn/gather/report/mapper/mapping/PqReportMapper.xml @@ -3,5 +3,8 @@ + diff --git a/detection/src/main/java/com/njcn/gather/report/pojo/constant/ReportValidMessage.java b/detection/src/main/java/com/njcn/gather/report/pojo/constant/ReportValidMessage.java new file mode 100644 index 00000000..4e6ba17b --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/report/pojo/constant/ReportValidMessage.java @@ -0,0 +1,11 @@ +package com.njcn.gather.report.pojo.constant; + +/** + * @author caozehui + * @data 2025-03-20 + */ +public interface ReportValidMessage { + String NAME_NOT_BLANK = "报告模板名称不能为空"; + String VERSION_NOT_BLANK = "报告模板版本号不能为空"; + String ENABLE_NOT_NULL = "报告模板的启用状态不能为空"; +} diff --git a/detection/src/main/java/com/njcn/gather/report/pojo/enums/ReportEnableEnum.java b/detection/src/main/java/com/njcn/gather/report/pojo/enums/ReportEnableEnum.java deleted file mode 100644 index 7a0b3349..00000000 --- a/detection/src/main/java/com/njcn/gather/report/pojo/enums/ReportEnableEnum.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.njcn.gather.report.pojo.enums; - -import lombok.Getter; - -/** - * @author caozehui - * @data 2025-03-20 - */ -@Getter -public enum ReportEnableEnum { - DELETE(0, "删除"), - ENABLE(1, "启用"), - DISABLE(2, "禁用"); - - private int code; - private String desc; - - ReportEnableEnum(int code, String desc) { - this.code = code; - this.desc = desc; - } -} diff --git a/detection/src/main/java/com/njcn/gather/report/pojo/enums/ReportResponseEnum.java b/detection/src/main/java/com/njcn/gather/report/pojo/enums/ReportResponseEnum.java index b27885eb..29cd309f 100644 --- a/detection/src/main/java/com/njcn/gather/report/pojo/enums/ReportResponseEnum.java +++ b/detection/src/main/java/com/njcn/gather/report/pojo/enums/ReportResponseEnum.java @@ -11,7 +11,10 @@ public enum ReportResponseEnum { FILE_UPLOAD_FAILED("A012001", "文件上传失败"), FILE_SUFFIX_ERROR("A012002", "文件后缀错误,请上传.docx文件"), - REPORT_REPEATED("A012003", "已存在相同版本、相同名称的报告"); + REPORT_REPEATED("A012003", "已存在相同版本、相同名称的报告"), + FILE_NOT_NULL("A012004", "上传的文件不能为空"), + DELETE_BOUND_REPORT_ERROR("A012005", "已被计划绑定模板的报告不能删除"), + FILE_NAME_SAME_ERROR("A012006", "文件名不能相同"); private String code; private String message; diff --git a/detection/src/main/java/com/njcn/gather/report/pojo/param/ReportParam.java b/detection/src/main/java/com/njcn/gather/report/pojo/param/ReportParam.java index b574e788..51f4b7af 100644 --- a/detection/src/main/java/com/njcn/gather/report/pojo/param/ReportParam.java +++ b/detection/src/main/java/com/njcn/gather/report/pojo/param/ReportParam.java @@ -1,11 +1,15 @@ package com.njcn.gather.report.pojo.param; +import com.njcn.gather.report.pojo.constant.ReportValidMessage; import com.njcn.web.pojo.param.BaseParam; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import org.springframework.web.multipart.MultipartFile; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + /** * @author caozehui * @data 2025-03-19 @@ -14,9 +18,11 @@ import org.springframework.web.multipart.MultipartFile; public class ReportParam { @ApiModelProperty(value = "报告模板名称", required = true) + @NotBlank(message = ReportValidMessage.NAME_NOT_BLANK) private String name; @ApiModelProperty(value = "版本号", required = true) + @NotBlank(message = ReportValidMessage.VERSION_NOT_BLANK) private String version; @ApiModelProperty(value = "描述信息", required = true) diff --git a/detection/src/main/java/com/njcn/gather/report/pojo/po/PqReport.java b/detection/src/main/java/com/njcn/gather/report/pojo/po/PqReport.java index d01ef474..25c8b89e 100644 --- a/detection/src/main/java/com/njcn/gather/report/pojo/po/PqReport.java +++ b/detection/src/main/java/com/njcn/gather/report/pojo/po/PqReport.java @@ -48,8 +48,8 @@ public class PqReport extends BaseEntity implements Serializable { private String description; /** - * 状态:0-删除 1-激活 2-未激活 + * 状态:0-删除 1-正常 */ - private Integer enable; + private Integer state; } diff --git a/detection/src/main/java/com/njcn/gather/report/pojo/vo/PqReportVO.java b/detection/src/main/java/com/njcn/gather/report/pojo/vo/PqReportVO.java index ae58890b..539249a6 100644 --- a/detection/src/main/java/com/njcn/gather/report/pojo/vo/PqReportVO.java +++ b/detection/src/main/java/com/njcn/gather/report/pojo/vo/PqReportVO.java @@ -37,12 +37,12 @@ public class PqReportVO { /** * 描述信息 */ - private String desc; + private String description; /** - * 状态:0-删除 1-激活 2-未激活 + * 状态:0-删除 1-正常 */ - private Integer enable; + //private Integer state; @Data public static class FileVO{ diff --git a/detection/src/main/java/com/njcn/gather/report/service/IPqReportService.java b/detection/src/main/java/com/njcn/gather/report/service/IPqReportService.java index 392fb061..16b090ef 100644 --- a/detection/src/main/java/com/njcn/gather/report/service/IPqReportService.java +++ b/detection/src/main/java/com/njcn/gather/report/service/IPqReportService.java @@ -71,15 +71,6 @@ public interface IPqReportService extends IService { */ List listAllVersion(String name); - /** - * 根据报告名称和版本号查询报告 - * - * @param name - * @param version - * @return - */ - PqReport getReportByNameAndVersion(String name, String version); - void generateReport(DevReportParam devReportParam); void downloadReport(DevReportParam devReportParam, HttpServletResponse response); diff --git a/detection/src/main/java/com/njcn/gather/report/service/impl/PqReportServiceImpl.java b/detection/src/main/java/com/njcn/gather/report/service/impl/PqReportServiceImpl.java index 1d38416a..04d01899 100644 --- a/detection/src/main/java/com/njcn/gather/report/service/impl/PqReportServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/report/service/impl/PqReportServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.text.StrPool; import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -23,7 +24,6 @@ import com.njcn.gather.plan.pojo.po.AdPlan; import com.njcn.gather.plan.service.IAdPlanService; import com.njcn.gather.report.mapper.PqReportMapper; import com.njcn.gather.report.pojo.DevReportParam; -import com.njcn.gather.report.pojo.enums.ReportEnableEnum; import com.njcn.gather.report.pojo.enums.ReportResponseEnum; import com.njcn.gather.report.pojo.param.ReportParam; import com.njcn.gather.report.pojo.po.PqReport; @@ -102,7 +102,7 @@ public class PqReportServiceImpl extends ServiceImpl i QueryWrapper wrapper = new QueryWrapper<>(); wrapper.like(StrUtil.isNotBlank(queryParam.getName()), "name", queryParam.getName()) .eq(StrUtil.isNotBlank(queryParam.getVersion()), "version", queryParam.getVersion()) - .ne("enable", ReportEnableEnum.DELETE.getCode()); + .eq("state", DataStateEnum.ENABLE.getCode()); Page page1 = this.page(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), wrapper); List pqReportVOList = page1.getRecords().stream().map(pqReport -> { @@ -155,7 +155,8 @@ public class PqReportServiceImpl extends ServiceImpl i this.checkRepeat(reportParam, false); PqReport pqReport = new PqReport(); BeanUtils.copyProperties(reportParam, pqReport); - pqReport.setEnable(ReportEnableEnum.DISABLE.getCode()); + pqReport.setState(DataStateEnum.ENABLE.getCode()); + // 上传文件 this.uploadFile(reportParam, pqReport); return this.save(pqReport); @@ -175,11 +176,15 @@ public class PqReportServiceImpl extends ServiceImpl i @Override public boolean delete(List ids) { + List boundReportIds = this.baseMapper.getBoundReportIds(); + if (CollectionUtil.containsAny(boundReportIds, ids)) { + throw new BusinessException(ReportResponseEnum.DELETE_BOUND_REPORT_ERROR); + } + // 删除对应的文件 this.deleteFile(ids); boolean result = this.lambdaUpdate().in(CollectionUtil.isNotEmpty(ids), PqReport::getId, ids) - .ne(PqReport::getEnable, ReportEnableEnum.DELETE.getCode()) - .set(PqReport::getEnable, ReportEnableEnum.DELETE.getCode()) + .set(PqReport::getState, DataStateEnum.DELETED.getCode()) .update(); return result; } @@ -187,26 +192,18 @@ public class PqReportServiceImpl extends ServiceImpl i @Override public List listAllName() { List result = this.lambdaQuery() - .ne(PqReport::getEnable, ReportEnableEnum.DELETE.getCode()).list().stream().map(PqReport::getName).collect(Collectors.toList()); + .eq(PqReport::getState, DataStateEnum.ENABLE.getCode()).list().stream().map(PqReport::getName).collect(Collectors.toList()); return result; } @Override public List listAllVersion(String name) { List result = this.lambdaQuery().eq(PqReport::getName, name) - .ne(PqReport::getEnable, ReportEnableEnum.DELETE.getCode()) + .eq(PqReport::getState, DataStateEnum.ENABLE.getCode()) .list().stream().map(PqReport::getVersion).collect(Collectors.toList()); return result; } - @Override - public PqReport getReportByNameAndVersion(String name, String version) { - PqReport one = this.lambdaQuery().eq(PqReport::getName, name).eq(PqReport::getVersion, version) - .ne(PqReport::getEnable, ReportEnableEnum.DELETE.getCode()) - .last("LIMIT 1").one(); - return one; - } - /** * 上传文件,并设置pqReport的basePath和detailPath属性 * @@ -219,56 +216,64 @@ public class PqReportServiceImpl extends ServiceImpl i //校验文件后缀 MultipartFile baseFile = reportParam.getBaseFile(); MultipartFile detailFile = reportParam.getDetailFile(); - String baseOriginalFilename = baseFile.getOriginalFilename(); - String baseFileName = baseOriginalFilename.substring(0, baseOriginalFilename.lastIndexOf(".")); - String baseSuffix = baseOriginalFilename.substring(baseOriginalFilename.lastIndexOf(".") + 1); - String detailOriginalFilename = detailFile.getOriginalFilename(); - String detailFileName = detailOriginalFilename.substring(0, detailOriginalFilename.lastIndexOf(".")); - String detailSuffix = detailOriginalFilename.substring(detailOriginalFilename.lastIndexOf(".") + 1); + if (ObjectUtil.isNotNull(baseFile) && ObjectUtil.isNotNull(detailFile) && !baseFile.isEmpty() && !detailFile.isEmpty()) { + String baseOriginalFilename = baseFile.getOriginalFilename(); + String baseFileName = baseOriginalFilename.substring(0, baseOriginalFilename.lastIndexOf(".")); + String baseSuffix = baseOriginalFilename.substring(baseOriginalFilename.lastIndexOf(".") + 1); + String detailOriginalFilename = detailFile.getOriginalFilename(); + String detailFileName = detailOriginalFilename.substring(0, detailOriginalFilename.lastIndexOf(".")); + String detailSuffix = detailOriginalFilename.substring(detailOriginalFilename.lastIndexOf(".") + 1); - if (!"docx".equals(baseSuffix) || !"docx".equals(detailSuffix)) { - throw new BusinessException(ReportResponseEnum.FILE_SUFFIX_ERROR); - } - - pqReport.setBasePath(uploadDir + baseFileName + "_" + pqReport.getVersion() + ".docx"); - pqReport.setDetailPath(uploadDir + detailFileName + "_" + pqReport.getVersion() + ".docx"); - - try { - // 创建上传目录(如果不存在) - Path uploadPath = Paths.get(uploadDir); - if (!Files.exists(uploadPath)) { - Files.createDirectories(uploadPath); + if (!"docx".equals(baseSuffix) || !"docx".equals(detailSuffix)) { + throw new BusinessException(ReportResponseEnum.FILE_SUFFIX_ERROR); + } + if (baseFileName.equals(detailFileName)) { + throw new BusinessException(ReportResponseEnum.FILE_NAME_SAME_ERROR); } - //清空目录下的文件 - File[] files = uploadPath.toFile().listFiles(); - if (ArrayUtil.isNotEmpty(files)) { - for (int i = 0; i < files.length; i++) { - files[i].delete(); + pqReport.setBasePath(uploadDir + baseFileName + "_" + pqReport.getVersion() + ".docx"); + pqReport.setDetailPath(uploadDir + detailFileName + "_" + pqReport.getVersion() + ".docx"); + + try { + // 创建上传目录(如果不存在) + Path uploadPath = Paths.get(uploadDir); + if (!Files.exists(uploadPath)) { + Files.createDirectories(uploadPath); } + + //清空目录下的文件 + File[] files = uploadPath.toFile().listFiles(); + if (ArrayUtil.isNotEmpty(files)) { + for (int i = 0; i < files.length; i++) { + files[i].delete(); + } + } + + // 保存文件 + byte[] baseBytes = baseFile.getBytes(); + BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(pqReport.getBasePath())); + bufferedOutputStream.write(baseBytes); + bufferedOutputStream.flush(); + bufferedOutputStream.close(); + + byte[] detailBytes = detailFile.getBytes(); + bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(pqReport.getDetailPath())); + bufferedOutputStream.write(detailBytes); + bufferedOutputStream.flush(); + + bufferedOutputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + throw new BusinessException(ReportResponseEnum.FILE_UPLOAD_FAILED); } - - // 保存文件 - byte[] baseBytes = baseFile.getBytes(); - BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(pqReport.getBasePath())); - bufferedOutputStream.write(baseBytes); - bufferedOutputStream.flush(); - bufferedOutputStream.close(); - - byte[] detailBytes = detailFile.getBytes(); - bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(pqReport.getDetailPath())); - bufferedOutputStream.write(detailBytes); - bufferedOutputStream.flush(); - - bufferedOutputStream.close(); - } catch (IOException e) { - e.printStackTrace(); - throw new BusinessException(ReportResponseEnum.FILE_UPLOAD_FAILED); + } else { + throw new BusinessException(ReportResponseEnum.FILE_NOT_NULL); } } /** * 根据id删除已有的文件 + * * @param ids */ private void deleteFile(List ids) { @@ -813,7 +818,7 @@ public class PqReportServiceImpl extends ServiceImpl i QueryWrapper wrapper = new QueryWrapper(); wrapper.eq("name", reportParam.getName()) .eq("version", reportParam.getVersion()) - .ne("enable", DataStateEnum.DELETED.getCode()); + .eq("state", DataStateEnum.ENABLE.getCode()); if (isExcludeSelf) { if (reportParam instanceof ReportParam.UpdateParam) { wrapper.ne("id", ((ReportParam.UpdateParam) reportParam).getId());