From 49a31edad215765e5d740a51c80c6ea6ebcc2503 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Sun, 28 Sep 2025 17:21:39 +0800 Subject: [PATCH] =?UTF-8?q?09-28-=E5=AE=9E=E9=AA=8C=E7=AE=A1=E7=90=86?= =?UTF-8?q?=EF=BC=8C=E5=AE=9E=E9=AA=8C=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OpsInspectionTaskController.java | 2 +- .../OpsInspectionTaskProblemController.java | 106 ++++++++++++ .../OpsInspectionTestTaskController.java | 2 +- .../inspection/domain/OpsInspectionNode.java | 2 +- .../inspection/domain/OpsInspectionPlan.java | 2 +- .../inspection/domain/OpsInspectionTask.java | 5 + .../domain/OpsInspectionTaskProblem.java | 68 ++++++++ .../domain/OpsInspectionTestTask.java | 5 + .../domain/bo/OpsInspectionNodeBo.java | 2 +- .../domain/bo/OpsInspectionPlanBo.java | 2 +- .../domain/bo/OpsInspectionTaskBo.java | 5 + .../domain/bo/OpsInspectionTaskProblemBo.java | 72 ++++++++ .../domain/bo/OpsInspectionTestTaskBo.java | 5 + .../domain/vo/OpsInspectionNodeVo.java | 2 +- .../domain/vo/OpsInspectionPlanVo.java | 2 +- .../domain/vo/OpsInspectionRecordVo.java | 14 +- .../domain/vo/OpsInspectionTaskProblemVo.java | 88 ++++++++++ .../domain/vo/OpsInspectionTaskVo.java | 10 ++ .../domain/vo/OpsInspectionTestPlanVo.java | 5 +- .../domain/vo/OpsInspectionTestTaskVo.java | 10 ++ .../OpsInspectionTaskProblemMapper.java | 15 ++ .../IOpsInspectionTaskProblemService.java | 69 ++++++++ .../service/IOpsInspectionTaskService.java | 3 +- .../IOpsInspectionTestTaskService.java | 3 +- .../impl/OpsInspectionPlanServiceImpl.java | 1 + .../OpsInspectionTaskProblemServiceImpl.java | 137 +++++++++++++++ .../impl/OpsInspectionTaskServiceImpl.java | 160 ++++++++++++++---- .../OpsInspectionTestPlanServiceImpl.java | 23 +-- .../OpsInspectionTestTaskServiceImpl.java | 83 ++++++--- 29 files changed, 823 insertions(+), 80 deletions(-) create mode 100644 ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/controller/OpsInspectionTaskProblemController.java create mode 100644 ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionTaskProblem.java create mode 100644 ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionTaskProblemBo.java create mode 100644 ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionTaskProblemVo.java create mode 100644 ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/mapper/OpsInspectionTaskProblemMapper.java create mode 100644 ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/IOpsInspectionTaskProblemService.java create mode 100644 ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionTaskProblemServiceImpl.java diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/controller/OpsInspectionTaskController.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/controller/OpsInspectionTaskController.java index 771617c..7d9a814 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/controller/OpsInspectionTaskController.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/controller/OpsInspectionTaskController.java @@ -89,7 +89,7 @@ public class OpsInspectionTaskController extends BaseController { @RepeatSubmit() @PutMapping() public R edit(@Validated(EditGroup.class) @RequestBody OpsInspectionTaskBo bo) { - return toAjax(opsInspectionTaskService.updateByBo(bo)); + return opsInspectionTaskService.updateByBo(bo); } /** diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/controller/OpsInspectionTaskProblemController.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/controller/OpsInspectionTaskProblemController.java new file mode 100644 index 0000000..9e833b6 --- /dev/null +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/controller/OpsInspectionTaskProblemController.java @@ -0,0 +1,106 @@ +package org.dromara.inspection.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.inspection.domain.vo.OpsInspectionTaskProblemVo; +import org.dromara.inspection.domain.bo.OpsInspectionTaskProblemBo; +import org.dromara.inspection.service.IOpsInspectionTaskProblemService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 运维-巡检-任务-问题 + * 前端访问路由地址为:/inspection/problem + * + * @author LionLi + * @date 2025-09-26 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/problem") +public class OpsInspectionTaskProblemController extends BaseController { + + private final IOpsInspectionTaskProblemService opsInspectionTaskProblemService; + + /** + * 查询运维-巡检-任务-问题列表 + */ + @SaCheckPermission("inspection:problem:list") + @GetMapping("/list") + public TableDataInfo list(OpsInspectionTaskProblemBo bo, PageQuery pageQuery) { + return opsInspectionTaskProblemService.queryPageList(bo, pageQuery); + } + + /** + * 导出运维-巡检-任务-问题列表 + */ + @SaCheckPermission("inspection:problem:export") + @Log(title = "运维-巡检-任务-问题", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(OpsInspectionTaskProblemBo bo, HttpServletResponse response) { + List list = opsInspectionTaskProblemService.queryList(bo); + ExcelUtil.exportExcel(list, "运维-巡检-任务-问题", OpsInspectionTaskProblemVo.class, response); + } + + /** + * 获取运维-巡检-任务-问题详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("inspection:problem:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(opsInspectionTaskProblemService.queryById(id)); + } + + /** + * 新增运维-巡检-任务-问题 + */ + @SaCheckPermission("inspection:problem:add") + @Log(title = "运维-巡检-任务-问题", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody OpsInspectionTaskProblemBo bo) { + return toAjax(opsInspectionTaskProblemService.insertByBo(bo)); + } + + /** + * 修改运维-巡检-任务-问题 + */ + @SaCheckPermission("inspection:problem:edit") + @Log(title = "运维-巡检-任务-问题", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody OpsInspectionTaskProblemBo bo) { + return toAjax(opsInspectionTaskProblemService.updateByBo(bo)); + } + + /** + * 删除运维-巡检-任务-问题 + * + * @param ids 主键串 + */ + @SaCheckPermission("inspection:problem:remove") + @Log(title = "运维-巡检-任务-问题", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("ids") Long[] ids) { + return toAjax(opsInspectionTaskProblemService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/controller/OpsInspectionTestTaskController.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/controller/OpsInspectionTestTaskController.java index fb208d7..c8a509a 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/controller/OpsInspectionTestTaskController.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/controller/OpsInspectionTestTaskController.java @@ -89,7 +89,7 @@ public class OpsInspectionTestTaskController extends BaseController { @RepeatSubmit() @PutMapping() public R edit(@Validated(EditGroup.class) @RequestBody OpsInspectionTestTaskBo bo) { - return toAjax(opsInspectionTestTaskService.updateByBo(bo)); + return opsInspectionTestTaskService.updateByBo(bo); } /** diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionNode.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionNode.java index 048fc30..89e393a 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionNode.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionNode.java @@ -69,7 +69,7 @@ public class OpsInspectionNode extends BaseEntity { private String remark; /** - * 状态1完成2未完成 + * 状态1完成2未完成3失败 */ private String status; diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionPlan.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionPlan.java index 5cb4397..041b6ec 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionPlan.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionPlan.java @@ -38,7 +38,7 @@ public class OpsInspectionPlan extends BaseEntity { /** * 计划名称 */ - private Long planName; + private String planName; /** * 计划类型,1每日巡检2每周巡检3每月巡检4每季度巡检 diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionTask.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionTask.java index 2b8fc68..33c409a 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionTask.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionTask.java @@ -83,6 +83,11 @@ public class OpsInspectionTask extends BaseEntity { */ private String problemType; + /** + * 开始时间 + */ + private Date startTime; + /** * 完成时间 */ diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionTaskProblem.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionTaskProblem.java new file mode 100644 index 0000000..d377b69 --- /dev/null +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionTaskProblem.java @@ -0,0 +1,68 @@ +package org.dromara.inspection.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 运维-巡检-任务-问题对象 ops_inspection_task_problem + * + * @author LionLi + * @date 2025-09-26 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("ops_inspection_task_problem") +public class OpsInspectionTaskProblem extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @TableId(value = "id") + private Long id; + + /** + * 电站id + */ + private Long projectId; + + /** + * 巡检任务ID + */ + private Long taskId; + + /** + * 发现问题类型1磁盘使用率2内存使用率3服务状态4响应时间5设备运行状态 + */ + private String type; + + /** + * 问题详细信息 + */ + private String info; + + /** + * 发现日期 + */ + private Date findTime; + + /** + * 是否解决1解决2未解决 + */ + private String finish; + + /** + * 解决日期 + */ + private Date finishTime; + + +} diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionTestTask.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionTestTask.java index 771bc7c..68ce51a 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionTestTask.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/OpsInspectionTestTask.java @@ -74,6 +74,11 @@ public class OpsInspectionTestTask extends BaseEntity { */ private String status; + /** + * 是否已分析1未分析2已分析 + */ + private String unPack; + /** * 关联测试计划ID */ diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionNodeBo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionNodeBo.java index 3667b87..be2ff02 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionNodeBo.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionNodeBo.java @@ -74,7 +74,7 @@ public class OpsInspectionNodeBo extends BaseEntity { private String remark; /** - * 状态1完成2未完成 + * 状态1完成2未完成3失败 */ @NotBlank(message = "状态1完成2未完成不能为空", groups = { AddGroup.class, EditGroup.class }) private String status; diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionPlanBo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionPlanBo.java index 5f2bdd3..00e15e6 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionPlanBo.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionPlanBo.java @@ -38,7 +38,7 @@ public class OpsInspectionPlanBo extends BaseEntity { * 计划名称 */ @NotNull(message = "计划名称不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long planName; + private String planName; /** * 计划类型,1每日巡检2每周巡检3每月巡检4每季度巡检 diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionTaskBo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionTaskBo.java index bb79e33..975ab49 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionTaskBo.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionTaskBo.java @@ -90,6 +90,11 @@ public class OpsInspectionTaskBo extends BaseEntity { */ private String problemType; + /** + * 开始时间 + */ + private Date startTime; + /** * 完成时间 */ diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionTaskProblemBo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionTaskProblemBo.java new file mode 100644 index 0000000..ce2502b --- /dev/null +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionTaskProblemBo.java @@ -0,0 +1,72 @@ +package org.dromara.inspection.domain.bo; + +import org.dromara.inspection.domain.OpsInspectionTaskProblem; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 运维-巡检-任务-问题业务对象 ops_inspection_task_problem + * + * @author LionLi + * @date 2025-09-26 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = OpsInspectionTaskProblem.class, reverseConvertGenerate = false) +public class OpsInspectionTaskProblemBo extends BaseEntity { + + /** + * + */ + private Long id; + + /** + * 巡检任务ID + */ + @NotNull(message = "巡检任务ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long taskId; + + /** + * 电站id + */ + @NotNull(message = "电站ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long projectId; + + /** + * 发现问题类型1磁盘使用率2内存使用率3服务状态4响应时间5设备运行状态 + */ + @NotBlank(message = "发现问题类型1磁盘使用率2内存使用率3服务状态4响应时间5设备运行状态不能为空", groups = { AddGroup.class, EditGroup.class }) + private String type; + + /** + * 问题详细信息 + */ + @NotBlank(message = "问题详细信息不能为空", groups = { AddGroup.class, EditGroup.class }) + private String info; + + /** + * 发现日期 + */ + @NotNull(message = "发现日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date findTime; + + /** + * 是否解决1解决2未解决 + */ + @NotBlank(message = "是否解决1解决2未解决不能为空", groups = { AddGroup.class, EditGroup.class }) + private String finish; + + /** + * 解决日期 + */ + private Date finishTime; + + +} diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionTestTaskBo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionTestTaskBo.java index d8c9427..4d6b016 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionTestTaskBo.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/bo/OpsInspectionTestTaskBo.java @@ -81,6 +81,11 @@ public class OpsInspectionTestTaskBo extends BaseEntity { @NotBlank(message = "状态,1待执行2暂停3失败4执行中5已完成不能为空", groups = { AddGroup.class, EditGroup.class }) private String status; + /** + * 是否已分析1未分析2已分析 + */ + private String unPack; + /** * 关联测试计划ID */ diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionNodeVo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionNodeVo.java index 7864c52..a8ac841 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionNodeVo.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionNodeVo.java @@ -81,7 +81,7 @@ public class OpsInspectionNodeVo implements Serializable { private String remark; /** - * 状态1完成2未完成 + * 状态1完成2未完成3失败 */ @ExcelProperty(value = "状态1完成2未完成") private String status; diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionPlanVo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionPlanVo.java index 8294bcd..7353652 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionPlanVo.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionPlanVo.java @@ -45,7 +45,7 @@ public class OpsInspectionPlanVo implements Serializable { * 计划名称 */ @ExcelProperty(value = "计划名称") - private Long planName; + private String planName; /** * 计划类型,1每日巡检2每周巡检3每月巡检4每季度巡检 diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionRecordVo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionRecordVo.java index 508273a..a726289 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionRecordVo.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionRecordVo.java @@ -22,7 +22,7 @@ public class OpsInspectionRecordVo { private Long finishInspectionCount; /** - * 问题梳数量 + * 问题数量 */ private Long problemCount; @@ -36,10 +36,20 @@ public class OpsInspectionRecordVo { */ private Long averageCompletionTime; + /** + * 巡检完成率 + */ + private String xjwcl; + + /** + * 已解决率 + */ +// private String yjjl; + /** * 解决效率 */ - private BigDecimal solveEfficiency; + private BigDecimal jjxl; /** * 磁盘使用率类型问题数量 diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionTaskProblemVo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionTaskProblemVo.java new file mode 100644 index 0000000..7401712 --- /dev/null +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionTaskProblemVo.java @@ -0,0 +1,88 @@ +package org.dromara.inspection.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import jakarta.validation.constraints.NotNull; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.inspection.domain.OpsInspectionTaskProblem; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 运维-巡检-任务-问题视图对象 ops_inspection_task_problem + * + * @author LionLi + * @date 2025-09-26 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = OpsInspectionTaskProblem.class) +public class OpsInspectionTaskProblemVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @ExcelProperty(value = "") + private Long id; + + /** + * 电站id + */ + private Long projectId; + + /** + * 巡检任务ID + */ + @ExcelProperty(value = "巡检任务ID") + private Long taskId; + + /** + * 发现问题类型1磁盘使用率2内存使用率3服务状态4响应时间5设备运行状态 + */ + @ExcelProperty(value = "发现问题类型1磁盘使用率2内存使用率3服务状态4响应时间5设备运行状态") + private String type; + + /** + * 问题详细信息 + */ + @ExcelProperty(value = "问题详细信息") + private String info; + + /** + * 发现日期 + */ + @ExcelProperty(value = "发现日期") + private Date findTime; + + /** + * 是否解决1解决2未解决 + */ + @ExcelProperty(value = "是否解决1解决2未解决") + private String finish; + + /** + * 解决日期 + */ + @ExcelProperty(value = "解决日期") + private Date finishTime; + + /** + * 创建时间 + */ + private Date createTime; + +} diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionTaskVo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionTaskVo.java index 33bcb42..54b716c 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionTaskVo.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionTaskVo.java @@ -101,6 +101,11 @@ public class OpsInspectionTaskVo implements Serializable { private List nodes; + /** + * 问题列表 + */ + private List problems; + /** * 状态 1待执行2已延期3执行中4已完成 */ @@ -111,6 +116,11 @@ public class OpsInspectionTaskVo implements Serializable { */ private String problemType; + /** + * 开始时间 + */ + private Date startTime; + private Date finishTime; private Date createTime; diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionTestPlanVo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionTestPlanVo.java index 49b0624..462fa37 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionTestPlanVo.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionTestPlanVo.java @@ -12,6 +12,7 @@ import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import org.dromara.personnel.domain.OpsUser; import org.dromara.personnel.domain.vo.OpsUserVo; +import org.dromara.system.api.domain.vo.RemoteUserVo; import java.io.Serial; import java.io.Serializable; @@ -93,7 +94,7 @@ public class OpsInspectionTestPlanVo implements Serializable { @ExcelProperty(value = "负责人ID") private Long personCharge; - private OpsUserVo person; + private RemoteUserVo person; /** * 参与人员IDS @@ -101,7 +102,7 @@ public class OpsInspectionTestPlanVo implements Serializable { @ExcelProperty(value = "参与人员IDS") private String personIds; - private List persons; + private List persons; /** * 自定义检查项 diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionTestTaskVo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionTestTaskVo.java index b9eda71..86a63b6 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionTestTaskVo.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/domain/vo/OpsInspectionTestTaskVo.java @@ -99,6 +99,11 @@ public class OpsInspectionTestTaskVo implements Serializable { @ExcelProperty(value = "状态,1待执行2暂停3失败4执行中5已完成") private String status; + /** + * 是否已分析1未分析2已分析 + */ + private String unPack; + /** * 关联测试计划ID */ @@ -190,4 +195,9 @@ public class OpsInspectionTestTaskVo implements Serializable { */ private Date planFinishTime; + /** + * 创建 时间 + */ + private Date createTime; + } diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/mapper/OpsInspectionTaskProblemMapper.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/mapper/OpsInspectionTaskProblemMapper.java new file mode 100644 index 0000000..b4a69c6 --- /dev/null +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/mapper/OpsInspectionTaskProblemMapper.java @@ -0,0 +1,15 @@ +package org.dromara.inspection.mapper; + +import org.dromara.inspection.domain.OpsInspectionTaskProblem; +import org.dromara.inspection.domain.vo.OpsInspectionTaskProblemVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 运维-巡检-任务-问题Mapper接口 + * + * @author LionLi + * @date 2025-09-26 + */ +public interface OpsInspectionTaskProblemMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/IOpsInspectionTaskProblemService.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/IOpsInspectionTaskProblemService.java new file mode 100644 index 0000000..e9ba220 --- /dev/null +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/IOpsInspectionTaskProblemService.java @@ -0,0 +1,69 @@ +package org.dromara.inspection.service; + +import org.dromara.inspection.domain.OpsInspectionTaskProblem; +import org.dromara.inspection.domain.vo.OpsInspectionTaskProblemVo; +import org.dromara.inspection.domain.bo.OpsInspectionTaskProblemBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 运维-巡检-任务-问题Service接口 + * + * @author LionLi + * @date 2025-09-26 + */ +public interface IOpsInspectionTaskProblemService { + + /** + * 查询运维-巡检-任务-问题 + * + * @param id 主键 + * @return 运维-巡检-任务-问题 + */ + OpsInspectionTaskProblemVo queryById(Long id); + + /** + * 分页查询运维-巡检-任务-问题列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 运维-巡检-任务-问题分页列表 + */ + TableDataInfo queryPageList(OpsInspectionTaskProblemBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的运维-巡检-任务-问题列表 + * + * @param bo 查询条件 + * @return 运维-巡检-任务-问题列表 + */ + List queryList(OpsInspectionTaskProblemBo bo); + + /** + * 新增运维-巡检-任务-问题 + * + * @param bo 运维-巡检-任务-问题 + * @return 是否新增成功 + */ + Boolean insertByBo(OpsInspectionTaskProblemBo bo); + + /** + * 修改运维-巡检-任务-问题 + * + * @param bo 运维-巡检-任务-问题 + * @return 是否修改成功 + */ + Boolean updateByBo(OpsInspectionTaskProblemBo bo); + + /** + * 校验并批量删除运维-巡检-任务-问题信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/IOpsInspectionTaskService.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/IOpsInspectionTaskService.java index e5a6d93..df9b701 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/IOpsInspectionTaskService.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/IOpsInspectionTaskService.java @@ -1,5 +1,6 @@ package org.dromara.inspection.service; +import org.dromara.common.core.domain.R; import org.dromara.inspection.domain.OpsInspectionTask; import org.dromara.inspection.domain.vo.OpsInspectionTaskVo; import org.dromara.inspection.domain.bo.OpsInspectionTaskBo; @@ -56,7 +57,7 @@ public interface IOpsInspectionTaskService { * @param bo 运维-巡检计划-任务 * @return 是否修改成功 */ - Boolean updateByBo(OpsInspectionTaskBo bo); + R updateByBo(OpsInspectionTaskBo bo); /** * 校验并批量删除运维-巡检计划-任务信息 diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/IOpsInspectionTestTaskService.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/IOpsInspectionTestTaskService.java index ae4cbcb..01d38a0 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/IOpsInspectionTestTaskService.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/IOpsInspectionTestTaskService.java @@ -1,5 +1,6 @@ package org.dromara.inspection.service; +import org.dromara.common.core.domain.R; import org.dromara.inspection.domain.OpsInspectionTestTask; import org.dromara.inspection.domain.vo.OpsInspectionTestTaskVo; import org.dromara.inspection.domain.bo.OpsInspectionTestTaskBo; @@ -56,7 +57,7 @@ public interface IOpsInspectionTestTaskService { * @param bo 运维-巡检-试验任务 * @return 是否修改成功 */ - Boolean updateByBo(OpsInspectionTestTaskBo bo); + R updateByBo(OpsInspectionTestTaskBo bo); /** * 校验并批量删除运维-巡检-试验任务信息 diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionPlanServiceImpl.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionPlanServiceImpl.java index 9fdf794..b27580f 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionPlanServiceImpl.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionPlanServiceImpl.java @@ -176,6 +176,7 @@ public class OpsInspectionPlanServiceImpl implements IOpsInspectionPlanService { itemVos.add(itemVo); } } + record.setItemVoList(itemVos); } }); diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionTaskProblemServiceImpl.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionTaskProblemServiceImpl.java new file mode 100644 index 0000000..b7277f1 --- /dev/null +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionTaskProblemServiceImpl.java @@ -0,0 +1,137 @@ +package org.dromara.inspection.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.dromara.inspection.domain.bo.OpsInspectionTaskProblemBo; +import org.dromara.inspection.domain.vo.OpsInspectionTaskProblemVo; +import org.dromara.inspection.domain.OpsInspectionTaskProblem; +import org.dromara.inspection.mapper.OpsInspectionTaskProblemMapper; +import org.dromara.inspection.service.IOpsInspectionTaskProblemService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 运维-巡检-任务-问题Service业务层处理 + * + * @author LionLi + * @date 2025-09-26 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class OpsInspectionTaskProblemServiceImpl implements IOpsInspectionTaskProblemService { + + private final OpsInspectionTaskProblemMapper baseMapper; + + /** + * 查询运维-巡检-任务-问题 + * + * @param id 主键 + * @return 运维-巡检-任务-问题 + */ + @Override + public OpsInspectionTaskProblemVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询运维-巡检-任务-问题列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 运维-巡检-任务-问题分页列表 + */ + @Override + public TableDataInfo queryPageList(OpsInspectionTaskProblemBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的运维-巡检-任务-问题列表 + * + * @param bo 查询条件 + * @return 运维-巡检-任务-问题列表 + */ + @Override + public List queryList(OpsInspectionTaskProblemBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(OpsInspectionTaskProblemBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(OpsInspectionTaskProblem::getId); + lqw.eq(bo.getTaskId() != null, OpsInspectionTaskProblem::getTaskId, bo.getTaskId()); + lqw.eq(StringUtils.isNotBlank(bo.getType()), OpsInspectionTaskProblem::getType, bo.getType()); + lqw.eq(StringUtils.isNotBlank(bo.getInfo()), OpsInspectionTaskProblem::getInfo, bo.getInfo()); + lqw.eq(bo.getFindTime() != null, OpsInspectionTaskProblem::getFindTime, bo.getFindTime()); + lqw.eq(StringUtils.isNotBlank(bo.getFinish()), OpsInspectionTaskProblem::getFinish, bo.getFinish()); + lqw.eq(bo.getFinishTime() != null, OpsInspectionTaskProblem::getFinishTime, bo.getFinishTime()); + return lqw; + } + + /** + * 新增运维-巡检-任务-问题 + * + * @param bo 运维-巡检-任务-问题 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(OpsInspectionTaskProblemBo bo) { + OpsInspectionTaskProblem add = MapstructUtils.convert(bo, OpsInspectionTaskProblem.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改运维-巡检-任务-问题 + * + * @param bo 运维-巡检-任务-问题 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(OpsInspectionTaskProblemBo bo) { + OpsInspectionTaskProblem update = MapstructUtils.convert(bo, OpsInspectionTaskProblem.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(OpsInspectionTaskProblem entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除运维-巡检-任务-问题信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionTaskServiceImpl.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionTaskServiceImpl.java index 3a50eab..1d8745e 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionTaskServiceImpl.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionTaskServiceImpl.java @@ -12,18 +12,15 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.inspection.domain.OpsInspectionNode; -import org.dromara.inspection.domain.vo.OpsInspectionNodeVo; -import org.dromara.inspection.domain.vo.OpsInspectionPlanVo; -import org.dromara.inspection.domain.vo.OpsInspectionRecordVo; +import org.dromara.inspection.domain.OpsInspectionTaskProblem; +import org.dromara.inspection.domain.vo.*; import org.dromara.inspection.mapper.OpsInspectionNodeMapper; -import org.dromara.personnel.domain.vo.OpsUserVo; -import org.dromara.personnel.service.impl.OpsUserServiceImpl; +import org.dromara.inspection.mapper.OpsInspectionTaskProblemMapper; import org.dromara.system.api.RemoteUserService; import org.dromara.system.api.domain.vo.RemoteUserVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.dromara.inspection.domain.bo.OpsInspectionTaskBo; -import org.dromara.inspection.domain.vo.OpsInspectionTaskVo; import org.dromara.inspection.domain.OpsInspectionTask; import org.dromara.inspection.mapper.OpsInspectionTaskMapper; import org.dromara.inspection.service.IOpsInspectionTaskService; @@ -36,7 +33,6 @@ import java.time.LocalTime; import java.time.ZoneId; import java.util.*; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; /** * 运维-巡检计划-任务Service业务层处理 @@ -51,6 +47,7 @@ public class OpsInspectionTaskServiceImpl implements IOpsInspectionTaskService { private final OpsInspectionTaskMapper baseMapper; private final OpsInspectionNodeMapper nodeMapper; + private final OpsInspectionTaskProblemMapper problemMapper; @Autowired private OpsInspectionPlanServiceImpl opsInspectionPlanService; @@ -139,10 +136,55 @@ public class OpsInspectionTaskServiceImpl implements IOpsInspectionTaskService { * @return 是否修改成功 */ @Override - public Boolean updateByBo(OpsInspectionTaskBo bo) { + public R updateByBo(OpsInspectionTaskBo bo) { OpsInspectionTask update = MapstructUtils.convert(bo, OpsInspectionTask.class); validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; + + //过滤出更新为完成任务的情况 + OpsInspectionTaskVo oldVo = baseMapper.selectVoById(bo.getId()); + //如果原来不为完成状态而更新为完成状态 + if (!oldVo.getTaskType().equals("4") && bo.getTaskType().equals("4")){ + + //判断节点是否全部完成 + List split = Arrays.stream(bo.getNodeIds().split(",")).toList(); + LambdaQueryWrapper nodeLambdaQueryWrapper = new LambdaQueryWrapper<>(); + nodeLambdaQueryWrapper.in(OpsInspectionNode::getId, split); + //全部节点 + List nodeVos = nodeMapper.selectVoList(nodeLambdaQueryWrapper); + boolean isAllFinish = true; + for (OpsInspectionNodeVo nodeVo : nodeVos) { + if (nodeVo.getStatus().equals("2")){ + isAllFinish = false; + } + break; + } + if (!isAllFinish){ + return R.fail("节点尚未全部完成"); + } + + //判断问题是否全部解决 + LambdaQueryWrapper problemLqw = new LambdaQueryWrapper<>(); + problemLqw.eq(OpsInspectionTaskProblem::getTaskId, bo.getId()); + List problems = problemMapper.selectVoList(problemLqw); + for (OpsInspectionTaskProblemVo problem : problems) { + if (problem.getFinish().equals("2")){ + isAllFinish = false; + break; + } + } + if (!isAllFinish){ + return R.fail("纪录的问题尚未完全解决"); + } + } + + boolean b = baseMapper.updateById(update) > 0; + + if (b){ + return R.ok(); + }else { + + return R.fail("更新失败"); + } } /** @@ -192,7 +234,6 @@ public class OpsInspectionTaskServiceImpl implements IOpsInspectionTaskService { // 设置时间范围:今天的00:00:00到23:59:59 startDate = Date.from(LocalDateTime.of(LocalDate.now(), LocalTime.MIN).atZone(ZoneId.systemDefault()).toInstant()); endDate = Date.from(LocalDateTime.of(LocalDate.now(), LocalTime.MAX).atZone(ZoneId.systemDefault()).toInstant()); - } //统计本周 @@ -221,48 +262,67 @@ public class OpsInspectionTaskServiceImpl implements IOpsInspectionTaskService { Date finalStartDate = startDate; Date finalEndDate = endDate; - Long finishInspectionCount = (long) opsInspectionTaskVos.stream() - .filter(taskVo -> taskVo.getFinishTime().after(finalStartDate) && taskVo.getFinishTime().before(finalEndDate)) - .toList().size(); - recordVo.setFinishInspectionCount(finishInspectionCount); + //仅统计在本月完成的巡检 + List finishList = opsInspectionTaskVos.stream() + .filter(taskVo -> taskVo.getFinishTime() != null && taskVo.getStartTime() != null && taskVo.getFinishTime().before(finalEndDate) && taskVo.getStartTime().after(finalStartDate)) + .filter(vo -> vo.getCreateTime().after(finalStartDate) && vo.getCreateTime().before(finalEndDate)) + .toList(); + recordVo.setFinishInspectionCount((long) finishList.size()); //发现问题数 通过createTime统计 - int problemCount = opsInspectionTaskVos.stream() - .filter(taskVo -> taskVo.getCreateTime().after(finalStartDate) && taskVo.getCreateTime().before(finalEndDate)) - .toList().size(); + int problemCount = 0; +// List problemList = opsInspectionTaskVos.stream() +// .filter(taskVo -> taskVo.getCreateTime().after(finalStartDate) && taskVo.getCreateTime().before(finalEndDate)) +// .toList(); +// if (!problemList.isEmpty()){ +// problemCount = problemList.size(); +// } + LambdaQueryWrapper problemLqw = new LambdaQueryWrapper<>(); + problemLqw.eq(OpsInspectionTaskProblem::getProjectId, projectId); + problemLqw.between(OpsInspectionTaskProblem::getCreateTime, finalStartDate, finalEndDate); + + List problemVos = problemMapper.selectVoList(problemLqw); + if (problemVos != null && !problemVos.isEmpty()){ + problemCount = problemVos.size(); + } recordVo.setProblemCount((long) problemCount); - //已解决数 获取列表以供通用 - List list = opsInspectionTaskVos.stream() - .filter(taskVo -> taskVo.getCreateTime().after(finalStartDate) && taskVo.getCreateTime().before(finalEndDate)) - .filter(taskVo -> taskVo.getTaskType().equals("4")) - .toList(); - recordVo.setSolvedProblemCount((long) list.size()); + //已解决数 获取列表以供通用 从本月发现列表里筛选出已解决 + List finishProblems = new ArrayList<>(); + if (problemVos == null || problemVos.isEmpty()){ + recordVo.setSolvedProblemCount(0L); + }else { + //过滤出完成的 + finishProblems.addAll(problemVos.stream().filter(vo -> vo.getFinish().equals("1")).toList()); + recordVo.setSolvedProblemCount((long) finishProblems.size()); + } // 计算总共耗时(毫秒) long durationMillis = 0L; - for (OpsInspectionTaskVo opsInspectionTaskVo : list) { - durationMillis += opsInspectionTaskVo.getFinishTime().getTime() - opsInspectionTaskVo.getCreateTime().getTime(); + for (OpsInspectionTaskProblemVo vo : finishProblems) { + durationMillis += vo.getFinishTime().getTime() - vo.getFindTime().getTime(); } - //赋值分钟 - if (list.isEmpty()){ + //平均处理分钟 + if (finishProblems.isEmpty()){ recordVo.setAverageCompletionTime(0L); }else { - recordVo.setAverageCompletionTime(TimeUnit.MILLISECONDS.toMinutes(durationMillis) / list.size()); + recordVo.setAverageCompletionTime(TimeUnit.MILLISECONDS.toMinutes(durationMillis) / finishProblems.size()); } - //解决效率 已解决数 / 总共数量 * 100 + //解决效率 = 已解决数 / 已发现数总共数量 * 100 BigDecimal problemCountBigDecimal = BigDecimal.valueOf(recordVo.getProblemCount()); BigDecimal solvedProblemCountBigDecimal = BigDecimal.valueOf(recordVo.getSolvedProblemCount()); - if (solvedProblemCountBigDecimal.compareTo(BigDecimal.ZERO) == 0 || problemCountBigDecimal.compareTo(BigDecimal.ZERO) == 0){ - recordVo.setSolveEfficiency(BigDecimal.valueOf(0)); + + if (solvedProblemCountBigDecimal.compareTo(BigDecimal.ZERO) < 1 || problemCountBigDecimal.compareTo(BigDecimal.ZERO) < 1){ + recordVo.setJjxl(BigDecimal.valueOf(0)); }else { BigDecimal bigDecimal = solvedProblemCountBigDecimal.divide(problemCountBigDecimal, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(0, RoundingMode.HALF_UP); - recordVo.setSolveEfficiency(bigDecimal); + recordVo.setJjxl(bigDecimal); } - for (OpsInspectionTaskVo opsInspectionTaskVo : opsInspectionTaskVos) { - if (opsInspectionTaskVo.getCreateTime().after(startDate) && opsInspectionTaskVo.getCreateTime().before(endDate)){ - switch (opsInspectionTaskVo.getProblemType()){ + + if (problemVos != null) { + for (OpsInspectionTaskProblemVo vo : problemVos) { + switch (vo.getType()){ case "1" -> cpsyl++; case "2" -> ncsyl++; case "3" -> fwzt++; @@ -277,6 +337,30 @@ public class OpsInspectionTaskServiceImpl implements IOpsInspectionTaskService { recordVo.setXysj(xysj); recordVo.setSbyxzt(sbyxzt); + //巡检完成率 + BigDecimal xjwcl; + //本月巡检数 + int byxjs = opsInspectionTaskVos.stream().filter(vo -> vo.getCreateTime().after(finalStartDate) && vo.getCreateTime().before(finalEndDate)) + .toList() + .size(); + //完成 / 巡检数 * 100 + if (byxjs > 0) { + xjwcl = BigDecimal.valueOf(recordVo.getFinishInspectionCount()).divide(BigDecimal.valueOf(byxjs), 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")); + }else { + xjwcl = BigDecimal.valueOf(0); + } + recordVo.setXjwcl(xjwcl.toString()); + + //问题解决率 + BigDecimal wtjjl; + //解决数 / 问题数 * 100 + if (problemVos == null || problemVos.isEmpty()){ + wtjjl = BigDecimal.valueOf(0); + }else { + wtjjl = BigDecimal.valueOf(recordVo.getSolvedProblemCount()).divide(BigDecimal.valueOf(problemVos.size()), 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")); + } + recordVo.setJjxl(wtjjl); + return R.ok(recordVo); } @@ -338,6 +422,12 @@ public class OpsInspectionTaskServiceImpl implements IOpsInspectionTaskService { } + //处理问题列表 + LambdaQueryWrapper problemWrapper = new LambdaQueryWrapper<>(); + problemWrapper.eq(OpsInspectionTaskProblem::getTaskId, taskVo.getId()); + List problemVos = problemMapper.selectVoList(problemWrapper); + taskVo.setProblems(problemVos); + }); } diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionTestPlanServiceImpl.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionTestPlanServiceImpl.java index 6133bcc..934c1ce 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionTestPlanServiceImpl.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionTestPlanServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.inspection.service.impl; +import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -14,6 +15,8 @@ import org.dromara.personnel.domain.OpsUser; import org.dromara.personnel.domain.bo.OpsUserBo; import org.dromara.personnel.domain.vo.OpsUserVo; import org.dromara.personnel.service.impl.OpsUserServiceImpl; +import org.dromara.system.api.RemoteUserService; +import org.dromara.system.api.domain.vo.RemoteUserVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.dromara.inspection.domain.bo.OpsInspectionTestPlanBo; @@ -38,10 +41,8 @@ import java.util.Collection; @Service public class OpsInspectionTestPlanServiceImpl implements IOpsInspectionTestPlanService { - @Autowired - private OpsUserServiceImpl opsUserService; - @Autowired - private OpsInspectionItemServiceImpl inspectionItemService; + @DubboReference + private RemoteUserService userService; private final OpsInspectionTestPlanMapper baseMapper; @@ -166,19 +167,19 @@ public class OpsInspectionTestPlanServiceImpl implements IOpsInspectionTestPlanS for (OpsInspectionTestPlanVo opsInspectionTestPlanVo : list) { if(opsInspectionTestPlanVo.getPersonCharge()!=null) { - OpsUserVo byId = opsUserService.queryById(opsInspectionTestPlanVo.getPersonCharge()); - if (byId != null) { - opsInspectionTestPlanVo.setPerson(byId); + List byId = userService.selectListByIds(List.of(opsInspectionTestPlanVo.getPersonCharge())); + if (byId != null && !byId.isEmpty()) { + opsInspectionTestPlanVo.setPerson(byId.getFirst()); } } if (opsInspectionTestPlanVo.getPersonIds() != null){ String[] split = opsInspectionTestPlanVo.getPersonIds().split(","); - List opsUserVos = new ArrayList<>(); + List opsUserVos = new ArrayList<>(); for (String s : split) { - OpsUserVo opsUserVo = opsUserService.queryById(Long.parseLong(s)); - if (opsUserVo != null){ - opsUserVos.add(opsUserVo); + List opsUserVo = userService.selectListByIds(List.of(Long.parseLong(s))); + if (opsUserVo != null && !opsUserVo.isEmpty()){ + opsUserVos.add(opsUserVo.getFirst()); } } opsInspectionTestPlanVo.setPersons(opsUserVos); diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionTestTaskServiceImpl.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionTestTaskServiceImpl.java index 5eba050..db9a80d 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionTestTaskServiceImpl.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/inspection/service/impl/OpsInspectionTestTaskServiceImpl.java @@ -13,9 +13,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.inspection.domain.OpsInspectionNode; -import org.dromara.inspection.domain.vo.OpsInspectionNodeVo; -import org.dromara.inspection.domain.vo.OpsInspectionTestPlanVo; -import org.dromara.inspection.domain.vo.OpsInspectionTestTaskRecord; +import org.dromara.inspection.domain.vo.*; import org.dromara.inspection.mapper.OpsInspectionNodeMapper; import org.dromara.personnel.domain.vo.OpsUserVo; import org.dromara.personnel.service.impl.OpsUserServiceImpl; @@ -24,7 +22,6 @@ import org.dromara.system.api.domain.vo.RemoteUserVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.dromara.inspection.domain.bo.OpsInspectionTestTaskBo; -import org.dromara.inspection.domain.vo.OpsInspectionTestTaskVo; import org.dromara.inspection.domain.OpsInspectionTestTask; import org.dromara.inspection.mapper.OpsInspectionTestTaskMapper; import org.dromara.inspection.service.IOpsInspectionTestTaskService; @@ -149,10 +146,36 @@ public class OpsInspectionTestTaskServiceImpl implements IOpsInspectionTestTaskS * @return 是否修改成功 */ @Override - public Boolean updateByBo(OpsInspectionTestTaskBo bo) { + public R updateByBo(OpsInspectionTestTaskBo bo) { OpsInspectionTestTask update = MapstructUtils.convert(bo, OpsInspectionTestTask.class); validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; + + OpsInspectionTestTaskVo oldVo = baseMapper.selectVoById(bo.getId()); + + if (!oldVo.getStatus().equals("5") && bo.getStatus().equals("5")){ + //判断节点是否全部完成 + List split = Arrays.stream(bo.getNodeIds().split(",")).toList(); + LambdaQueryWrapper nodeLambdaQueryWrapper = new LambdaQueryWrapper<>(); + nodeLambdaQueryWrapper.in(OpsInspectionNode::getId, split); + //全部节点 + List nodeVos = nodeMapper.selectVoList(nodeLambdaQueryWrapper); + boolean isAllFinish = true; + for (OpsInspectionNodeVo nodeVo : nodeVos) { + if (nodeVo.getStatus().equals("2")) { + isAllFinish = false; + break; + } + } + if (!isAllFinish){ + return R.fail("节点尚未全部完成"); + } + } + boolean b = baseMapper.updateById(update) > 0; + if (b){ + return R.ok(); + }else { + return R.fail(); + } } /** @@ -260,6 +283,9 @@ public class OpsInspectionTestTaskServiceImpl implements IOpsInspectionTestTaskS if (list==null || list.isEmpty()){ return R.fail("没有数据"); } + //筛选出本月数据 + List benyueList = list.stream().filter(vo -> vo.getPlanBeginTime() != null && vo.getPlanFinishTime() != null && vo.getPlanBeginTime().after(startDate) && vo.getPlanFinishTime().before(endDate)).toList(); + OpsInspectionTestTaskRecord record = new OpsInspectionTestTaskRecord(); //完成实验数 @@ -267,34 +293,40 @@ public class OpsInspectionTestTaskServiceImpl implements IOpsInspectionTestTaskS //待分析记录 Long failCount = 0L; //总共完成时间 - Long totalTestTime = 0L; + long totalTestTime = 0L; - for (OpsInspectionTestTaskVo opsInspectionTestTaskVo : list) { - if (opsInspectionTestTaskVo.getPlanBeginTime().after(startDate) && opsInspectionTestTaskVo.getPlanFinishTime().before(endDate) && opsInspectionTestTaskVo.getStatus().equals("5")){ + for (OpsInspectionTestTaskVo vo : benyueList) { + //只统计开始和结束都在本月内的 + if (vo.getStatus().equals("5")){ finishCount++; - totalTestTime += opsInspectionTestTaskVo.getPlanFinishTime().getTime() - opsInspectionTestTaskVo.getPlanBeginTime().getTime(); + totalTestTime += vo.getPlanFinishTime().getTime() - vo.getPlanBeginTime().getTime(); } - if (opsInspectionTestTaskVo.getPlanFinishTime().after(startDate) && opsInspectionTestTaskVo.getPlanFinishTime().before(endDate) && opsInspectionTestTaskVo.getStatus().equals("3")){ + + if (vo.getStatus().equals("3") && vo.getUnPack().equals("1")){ failCount++; } } record.setFinishCount(String.valueOf(finishCount)); record.setFailCount(String.valueOf(failCount)); - if (!list.isEmpty()) { - record.setPassValue(String.valueOf(BigDecimal.valueOf(finishCount).divide(BigDecimal.valueOf(list.size()), 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")))); + if (!list.isEmpty() && !benyueList.isEmpty()) { + record.setPassValue(String.valueOf(BigDecimal.valueOf(finishCount).divide(BigDecimal.valueOf(benyueList.size()), 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")))); }else { record.setPassValue("0"); } - record.setAverageTestTime(BigDecimal.valueOf((double) TimeUnit.MILLISECONDS.toMinutes(totalTestTime) / finishCount).toString()); - - //统计上一月的数据 - Date finalEndDate = Date.from(LocalDate.now().minusMonths(1).withDayOfMonth(1).atStartOfDay(ZoneId.systemDefault()).toInstant()); - Date finalStartDate = Date.from(LocalDate.now().minusMonths(1).withDayOfMonth(1).plusMonths(1).minusDays(1).atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant()); + if(finishCount >0 ) { + record.setAverageTestTime(BigDecimal.valueOf((double) TimeUnit.MILLISECONDS.toMinutes(totalTestTime) / finishCount).toString()); + }else { + record.setAverageTestTime("0"); + } + //统计上一月的数据finalStartDate finalEndDate + Date finalStartDate = Date.from(LocalDate.now().minusMonths(1).withDayOfMonth(1).atStartOfDay(ZoneId.systemDefault()).toInstant()); + Date finalEndDate = Date.from(LocalDate.now().minusMonths(1).withDayOfMonth(1).plusMonths(1).minusDays(1).atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant()); //上月数据列表 - List lastMonth = list.stream().filter(testTaskVo -> testTaskVo.getPlanFinishTime().before(finalEndDate) && testTaskVo.getPlanBeginTime().after(finalStartDate)) + List lastMonth = list.stream().filter(testTaskVo -> testTaskVo.getCreateTime().before(finalEndDate) && testTaskVo.getCreateTime().after(finalStartDate)) .toList(); + log.info("上月数据列表:{}",lastMonth); //上月完成数 finishCount = 0L; @@ -309,6 +341,8 @@ public class OpsInspectionTestTaskServiceImpl implements IOpsInspectionTestTaskS totalTestTime += vo.getPlanFinishTime().getTime() - vo.getPlanBeginTime().getTime(); } } + log.info("上月完成数:{}",finishCount); + log.info("上月总共时长:{}",totalTestTime); //完成数增长率 BigDecimal wcszzl; @@ -323,6 +357,7 @@ public class OpsInspectionTestTaskServiceImpl implements IOpsInspectionTestTaskS if(BigDecimal.valueOf(lastMonth.size()).compareTo(BigDecimal.ZERO) > 0) { passValue = BigDecimal.valueOf(Double.valueOf(finishCount)).divide(BigDecimal.valueOf(lastMonth.size()), 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")); } + log.info("上月通过率:{}",passValue); //进行比较 得出通过增长率 BigDecimal tgzzl; if(passValue.compareTo(BigDecimal.ZERO) > 0) { @@ -333,7 +368,14 @@ public class OpsInspectionTestTaskServiceImpl implements IOpsInspectionTestTaskS record.setPassValueAdd(tgzzl.toString()); //上月平均实验时间 - BigDecimal sypjsj = BigDecimal.valueOf((double) TimeUnit.MILLISECONDS.toMinutes(totalTestTime) / finishCount); + BigDecimal sypjsj; + if (finishCount > 0) { + sypjsj = BigDecimal.valueOf((double) TimeUnit.MILLISECONDS.toMinutes(totalTestTime) / finishCount); + }else { + sypjsj = BigDecimal.ZERO; + } + log.info("上月平均实验分钟数:{}",sypjsj); + log.info("本月平均实验分钟数:{}",record.getAverageTestTime()); //平均时间增长率 BigDecimal sysjzzl; if (BigDecimal.valueOf(Double.parseDouble(record.getAverageTestTime())).compareTo(BigDecimal.ZERO) > 0) { @@ -341,6 +383,7 @@ public class OpsInspectionTestTaskServiceImpl implements IOpsInspectionTestTaskS }else { sysjzzl = BigDecimal.ZERO; } + log.info("实验分钟数增长率:{}",sysjzzl); record.setAverageTestTimeAdd(sysjzzl.toString()); return R.ok(record);