09-20-巡检-试验计划,任务,纪录

This commit is contained in:
2025-09-20 21:11:42 +08:00
parent e0c6ab1bfb
commit f83c10a9ca
16 changed files with 1777 additions and 5 deletions

View File

@ -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.OpsInspectionTestPlanVo;
import org.dromara.inspection.domain.bo.OpsInspectionTestPlanBo;
import org.dromara.inspection.service.IOpsInspectionTestPlanService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 运维-巡检-试验计划
* 前端访问路由地址为:/inspection/testPlan
*
* @author LionLi
* @date 2025-09-20
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/testPlan")
public class OpsInspectionTestPlanController extends BaseController {
private final IOpsInspectionTestPlanService opsInspectionTestPlanService;
/**
* 查询运维-巡检-试验计划列表
*/
@SaCheckPermission("inspection:testPlan:list")
@GetMapping("/list")
public TableDataInfo<OpsInspectionTestPlanVo> list(OpsInspectionTestPlanBo bo, PageQuery pageQuery) {
return opsInspectionTestPlanService.queryPageList(bo, pageQuery);
}
/**
* 导出运维-巡检-试验计划列表
*/
@SaCheckPermission("inspection:testPlan:export")
@Log(title = "运维-巡检-试验计划", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(OpsInspectionTestPlanBo bo, HttpServletResponse response) {
List<OpsInspectionTestPlanVo> list = opsInspectionTestPlanService.queryList(bo);
ExcelUtil.exportExcel(list, "运维-巡检-试验计划", OpsInspectionTestPlanVo.class, response);
}
/**
* 获取运维-巡检-试验计划详细信息
*
* @param id 主键
*/
@SaCheckPermission("inspection:testPlan:query")
@GetMapping("/{id}")
public R<OpsInspectionTestPlanVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) {
return R.ok(opsInspectionTestPlanService.queryById(id));
}
/**
* 新增运维-巡检-试验计划
*/
@SaCheckPermission("inspection:testPlan:add")
@Log(title = "运维-巡检-试验计划", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody OpsInspectionTestPlanBo bo) {
return toAjax(opsInspectionTestPlanService.insertByBo(bo));
}
/**
* 修改运维-巡检-试验计划
*/
@SaCheckPermission("inspection:testPlan:edit")
@Log(title = "运维-巡检-试验计划", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody OpsInspectionTestPlanBo bo) {
return toAjax(opsInspectionTestPlanService.updateByBo(bo));
}
/**
* 删除运维-巡检-试验计划
*
* @param ids 主键串
*/
@SaCheckPermission("inspection:testPlan:remove")
@Log(title = "运维-巡检-试验计划", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable("ids") Long[] ids) {
return toAjax(opsInspectionTestPlanService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,116 @@
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.dromara.inspection.service.impl.OpsInspectionTestTaskServiceImpl;
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.OpsInspectionTestTaskVo;
import org.dromara.inspection.domain.bo.OpsInspectionTestTaskBo;
import org.dromara.inspection.service.IOpsInspectionTestTaskService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 运维-巡检-试验任务
* 前端访问路由地址为:/inspection/testTask
*
* @author LionLi
* @date 2025-09-20
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/testTask")
public class OpsInspectionTestTaskController extends BaseController {
private final OpsInspectionTestTaskServiceImpl opsInspectionTestTaskService;
/**
* 查询运维-巡检-试验任务列表
*/
@SaCheckPermission("inspection:testTask:list")
@GetMapping("/list")
public TableDataInfo<OpsInspectionTestTaskVo> list(OpsInspectionTestTaskBo bo, PageQuery pageQuery) {
return opsInspectionTestTaskService.queryPageList(bo, pageQuery);
}
/**
* 导出运维-巡检-试验任务列表
*/
@SaCheckPermission("inspection:testTask:export")
@Log(title = "运维-巡检-试验任务", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(OpsInspectionTestTaskBo bo, HttpServletResponse response) {
List<OpsInspectionTestTaskVo> list = opsInspectionTestTaskService.queryList(bo);
ExcelUtil.exportExcel(list, "运维-巡检-试验任务", OpsInspectionTestTaskVo.class, response);
}
/**
* 获取运维-巡检-试验任务详细信息
*
* @param id 主键
*/
@SaCheckPermission("inspection:testTask:query")
@GetMapping("/{id}")
public R<OpsInspectionTestTaskVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) {
return R.ok(opsInspectionTestTaskService.queryById(id));
}
/**
* 新增运维-巡检-试验任务
*/
@SaCheckPermission("inspection:testTask:add")
@Log(title = "运维-巡检-试验任务", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody OpsInspectionTestTaskBo bo) {
return toAjax(opsInspectionTestTaskService.insertByBo(bo));
}
/**
* 修改运维-巡检-试验任务
*/
@SaCheckPermission("inspection:testTask:edit")
@Log(title = "运维-巡检-试验任务", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody OpsInspectionTestTaskBo bo) {
return toAjax(opsInspectionTestTaskService.updateByBo(bo));
}
/**
* 删除运维-巡检-试验任务
*
* @param ids 主键串
*/
@SaCheckPermission("inspection:testTask:remove")
@Log(title = "运维-巡检-试验任务", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable("ids") Long[] ids) {
return toAjax(opsInspectionTestTaskService.deleteWithValidByIds(List.of(ids), true));
}
@SaCheckPermission("inspection:testTask:record")
@GetMapping("/record")
public R<Object> record(@RequestParam Long projectId){
return opsInspectionTestTaskService.record(projectId);
}
}

View File

@ -0,0 +1,109 @@
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_test_plan
*
* @author LionLi
* @date 2025-09-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ops_inspection_test_plan")
public class OpsInspectionTestPlan extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
* 电站ID
*/
private Long projectId;
/**
* 计划名称
*/
private String planName;
/**
* 计划编号
*/
private String planCode;
/**
* 实验对象类型,1安全试验2网络实验3性能试验4
*/
private String testObject;
/**
*
*/
private Date beginTime;
/**
*
*/
private Date endTime;
/**
* 试验目的与预期结果
*/
private String testInfo;
/**
* 实验环境
*/
private String testSetting;
/**
* 负责人ID
*/
private Long personCharge;
/**
* 参与人员IDS
*/
private String personIds;
/**
* 自定义检查项
*/
private String inspectionItems;
/**
* 实验步骤
*/
private String testStep;
/**
* 所需资源与设备
*/
private String testDevice;
/**
* 风险评估与应对措施
*/
private String testSolutions;
/**
* 申请状态 1已批准2进行中3已完成4草稿5未通过
*/
private String testStatus;
//1启动2停止
private String testPlanType;
}

View File

@ -0,0 +1,147 @@
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_test_task
*
* @author LionLi
* @date 2025-09-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ops_inspection_test_task")
public class OpsInspectionTestTask extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
* 项目ID(电站ID)
*/
private Long projectId;
/**
* 任务名称
*/
private String taskName;
/**
* 测试对象
*/
private String testObject;
/**
*
*/
private Date beginTime;
/**
*
*/
private Date endTime;
/**
*
*/
private String timeInfo;
/**
* 执行人员
*/
private Long person;
/**
* 状态,1待执行2暂停3失败4执行中5已完成
*/
private String status;
/**
* 关联测试计划ID
*/
private Long testPlanId;
/**
* 试验环境
*/
private String testSetting;
/**
* 开始时间
*/
private Date planBeginTime;
/**
* 进度
*/
private Long progress;
/**
* 失败原因
*/
private String failReason;
/**
* 失败时间
*/
private Date failTime;
/**
* 失败阶段
*/
private Long failPhase;
/**
* 失败原因分析
*/
private String faileAnalyze;
/**
* 改进建议
*/
private String faileTips;
/**
* 试验时长(分钟)
*/
private Long testLongTime;
/**
* 结果
*/
private String testFinal;
/**
* 结果详情
*/
private String finalInfo;
/**
* 暂停原因
*/
private String pauseFor;
/**
* 暂停时间
*/
private Date pauseTime;
/**
* 计划完成时间
*/
private Date planFinishTime;
}

View File

@ -0,0 +1,121 @@
package org.dromara.inspection.domain.bo;
import org.dromara.inspection.domain.OpsInspectionTestPlan;
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_test_plan
*
* @author LionLi
* @date 2025-09-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = OpsInspectionTestPlan.class, reverseConvertGenerate = false)
public class OpsInspectionTestPlanBo extends BaseEntity {
/**
*
*/
private Long id;
/**
* 电站ID
*/
@NotNull(message = "电站ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long projectId;
/**
* 计划名称
*/
@NotBlank(message = "计划名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String planName;
/**
* 计划编号
*/
@NotBlank(message = "计划编号不能为空", groups = { AddGroup.class, EditGroup.class })
private String planCode;
/**
* 实验对象类型,1安全试验2网络实验3性能试验4
*/
@NotBlank(message = "实验对象类型,1安全试验2网络实验3性能试验4不能为空", groups = { AddGroup.class, EditGroup.class })
private String testObject;
/**
*
*/
@NotNull(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
private Date beginTime;
/**
*
*/
@NotNull(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
private Date endTime;
/**
* 试验目的与预期结果
*/
@NotBlank(message = "试验目的与预期结果不能为空", groups = { AddGroup.class, EditGroup.class })
private String testInfo;
/**
* 实验环境
*/
@NotBlank(message = "实验环境不能为空", groups = { AddGroup.class, EditGroup.class })
private String testSetting;
/**
* 负责人ID
*/
@NotNull(message = "负责人ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long personCharge;
/**
* 参与人员IDS
*/
@NotBlank(message = "参与人员IDS不能为空", groups = { AddGroup.class, EditGroup.class })
private String personIds;
/**
* 自定义检查项
*/
// @NotBlank(message = "自定义检查项不能为空", groups = { AddGroup.class, EditGroup.class })
private String inspectionItems;
/**
* 实验步骤
*/
private String testStep;
/**
* 所需资源与设备
*/
private String testDevice;
/**
* 风险评估与应对措施
*/
@NotBlank(message = "风险评估与应对措施不能为空", groups = { AddGroup.class, EditGroup.class })
private String testSolutions;
/**
* 申请状态 1已批准2进行中3已完成4草稿5未通过
*/
@NotBlank(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class })
private String testStatus;
//1启动2停止
private String testPlanType;
}

View File

@ -0,0 +1,154 @@
package org.dromara.inspection.domain.bo;
import org.dromara.inspection.domain.OpsInspectionTestTask;
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_test_task
*
* @author LionLi
* @date 2025-09-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = OpsInspectionTestTask.class, reverseConvertGenerate = false)
public class OpsInspectionTestTaskBo extends BaseEntity {
/**
*
*/
private Long id;
/**
* 项目ID(电站ID)
*/
@NotNull(message = "项目ID(电站ID)不能为空", groups = { AddGroup.class, EditGroup.class })
private Long projectId;
/**
* 任务名称
*/
@NotBlank(message = "任务名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String taskName;
/**
* 测试对象
*/
@NotBlank(message = "测试对象不能为空", groups = { AddGroup.class, EditGroup.class })
private String testObject;
/**
*
*/
@NotNull(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
private Date beginTime;
/**
*
*/
@NotNull(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
private Date endTime;
/**
*
*/
@NotBlank(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
private String timeInfo;
/**
* 执行人员
*/
@NotNull(message = "执行人员不能为空", groups = { AddGroup.class, EditGroup.class })
private Long person;
/**
* 状态,1待执行2暂停3失败4执行中5已完成
*/
@NotBlank(message = "状态,1待执行2暂停3失败4执行中5已完成不能为空", groups = { AddGroup.class, EditGroup.class })
private String status;
/**
* 关联测试计划ID
*/
@NotNull(message = "关联测试计划ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long testPlanId;
/**
* 试验环境
*/
private String testSetting;
/**
* 开始时间
*/
private Date planBeginTime;
/**
* 进度
*/
private Long progress;
/**
* 失败原因
*/
private String failReason;
/**
* 失败时间
*/
private Date failTime;
/**
* 失败阶段
*/
private Long failPhase;
/**
* 失败原因分析
*/
private String faileAnalyze;
/**
* 改进建议
*/
private String faileTips;
/**
* 试验时长(分钟)
*/
private Long testLongTime;
/**
* 结果
*/
private String testFinal;
/**
* 结果详情
*/
private String finalInfo;
/**
* 暂停原因
*/
private String pauseFor;
/**
* 暂停时间
*/
private Date pauseTime;
/**
* 计划完成时间
*/
private Date planFinishTime;
}

View File

@ -0,0 +1,141 @@
package org.dromara.inspection.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.inspection.domain.OpsInspectionItem;
import org.dromara.inspection.domain.OpsInspectionTestPlan;
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 org.dromara.personnel.domain.OpsUser;
import org.dromara.personnel.domain.vo.OpsUserVo;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* 运维-巡检-试验计划视图对象 ops_inspection_test_plan
*
* @author LionLi
* @date 2025-09-20
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = OpsInspectionTestPlan.class)
public class OpsInspectionTestPlanVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "")
private Long id;
/**
* 电站ID
*/
@ExcelProperty(value = "电站ID")
private Long projectId;
/**
* 计划名称
*/
@ExcelProperty(value = "计划名称")
private String planName;
/**
* 计划编号
*/
@ExcelProperty(value = "计划编号")
private String planCode;
/**
* 实验对象类型,1安全试验2网络实验3性能试验4
*/
@ExcelProperty(value = "实验对象类型,1安全试验2网络实验3性能试验4")
private String testObject;
/**
*
*/
@ExcelProperty(value = "")
private Date beginTime;
/**
*
*/
@ExcelProperty(value = "")
private Date endTime;
/**
* 试验目的与预期结果
*/
@ExcelProperty(value = "试验目的与预期结果")
private String testInfo;
/**
* 实验环境
*/
@ExcelProperty(value = "实验环境")
private String testSetting;
/**
* 负责人ID
*/
@ExcelProperty(value = "负责人ID")
private Long personCharge;
private OpsUserVo person;
/**
* 参与人员IDS
*/
@ExcelProperty(value = "参与人员IDS")
private String personIds;
private List<OpsUserVo> persons;
/**
* 自定义检查项
*/
@ExcelProperty(value = "自定义检查项")
private String inspectionItems;
private List<OpsInspectionItem> inspectionItemList;
/**
* 实验步骤
*/
@ExcelProperty(value = "实验步骤")
private String testStep;
/**
* 所需资源与设备
*/
@ExcelProperty(value = "所需资源与设备")
private String testDevice;
/**
* 风险评估与应对措施
*/
@ExcelProperty(value = "风险评估与应对措施")
private String testSolutions;
/**
* 申请状态 1已批准2进行中3已完成4草稿5未通过
*/
@ExcelProperty(value = "状态")
private String testStatus;
//1启动2停止
private String testPlanType;
}

View File

@ -0,0 +1,45 @@
package org.dromara.inspection.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class OpsInspectionTestTaskRecord {
/**
* 本月完成数
*/
private Long finishCount;
/**
* 上月增加数
*/
private BigDecimal finishCountAdd;
/**
* 本月通过率
*/
private BigDecimal passValue;
/**
* 通过增长率
*/
private BigDecimal passValueAdd;
/**
* 待分析数
*/
private Long failCount;
/**
* 平均测试时间
*/
private Long averageTestTime;
/**
* 平均测试时间数增长率
*/
private BigDecimal averageTestTimeAdd;
}

View File

@ -0,0 +1,181 @@
package org.dromara.inspection.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.inspection.domain.OpsInspectionTestTask;
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 org.dromara.personnel.domain.vo.OpsUserVo;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 运维-巡检-试验任务视图对象 ops_inspection_test_task
*
* @author LionLi
* @date 2025-09-20
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = OpsInspectionTestTask.class)
public class OpsInspectionTestTaskVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "")
private Long id;
/**
* 项目ID(电站ID)
*/
@ExcelProperty(value = "项目ID(电站ID)")
private Long projectId;
/**
* 任务名称
*/
@ExcelProperty(value = "任务名称")
private String taskName;
/**
* 测试对象
*/
@ExcelProperty(value = "测试对象")
private String testObject;
/**
*
*/
@ExcelProperty(value = "开始时间")
private Date beginTime;
/**
*
*/
@ExcelProperty(value = "结束时间")
private Date endTime;
/**
*
*/
@ExcelProperty(value = "时间段")
private String timeInfo;
/**
* 执行人员
*/
@ExcelProperty(value = "执行人员")
private Long person;
private OpsUserVo personInfo;
/**
* 状态,1待执行2暂停3失败4执行中5已完成
*/
@ExcelProperty(value = "状态,1待执行2暂停3失败4执行中5已完成")
private String status;
/**
* 关联测试计划ID
*/
@ExcelProperty(value = "关联测试计划ID")
private Long testPlanId;
private OpsInspectionTestPlanVo testPlan;
/**
* 试验环境
*/
@ExcelProperty(value = "试验环境")
private String testSetting;
/**
* 开始时间
*/
@ExcelProperty(value = "开始时间")
private Date planBeginTime;
/**
* 进度
*/
@ExcelProperty(value = "进度")
private Long progress;
/**
* 失败原因
*/
@ExcelProperty(value = "失败原因")
private String failReason;
/**
* 失败时间
*/
@ExcelProperty(value = "失败时间")
private Date failTime;
/**
* 失败阶段
*/
@ExcelProperty(value = "失败阶段")
private Long failPhase;
/**
* 失败原因分析
*/
@ExcelProperty(value = "失败原因分析")
private String faileAnalyze;
/**
* 改进建议
*/
@ExcelProperty(value = "改进建议")
private String faileTips;
/**
* 试验时长(分钟)
*/
@ExcelProperty(value = "试验时长(分钟)")
private Long testLongTime;
/**
* 结果
*/
@ExcelProperty(value = "结果")
private String testFinal;
/**
* 结果详情
*/
@ExcelProperty(value = "结果详情")
private String finalInfo;
/**
* 暂停原因
*/
@ExcelProperty(value = "暂停原因")
private String pauseFor;
/**
* 暂停时间
*/
@ExcelProperty(value = "暂停时间")
private Date pauseTime;
/**
* 计划完成时间
*/
private Date planFinishTime;
}

View File

@ -0,0 +1,15 @@
package org.dromara.inspection.mapper;
import org.dromara.inspection.domain.OpsInspectionTestPlan;
import org.dromara.inspection.domain.vo.OpsInspectionTestPlanVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 运维-巡检-试验计划Mapper接口
*
* @author LionLi
* @date 2025-09-20
*/
public interface OpsInspectionTestPlanMapper extends BaseMapperPlus<OpsInspectionTestPlan, OpsInspectionTestPlanVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.inspection.mapper;
import org.dromara.inspection.domain.OpsInspectionTestTask;
import org.dromara.inspection.domain.vo.OpsInspectionTestTaskVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 运维-巡检-试验任务Mapper接口
*
* @author LionLi
* @date 2025-09-20
*/
public interface OpsInspectionTestTaskMapper extends BaseMapperPlus<OpsInspectionTestTask, OpsInspectionTestTaskVo> {
}

View File

@ -0,0 +1,69 @@
package org.dromara.inspection.service;
import org.dromara.inspection.domain.OpsInspectionTestPlan;
import org.dromara.inspection.domain.vo.OpsInspectionTestPlanVo;
import org.dromara.inspection.domain.bo.OpsInspectionTestPlanBo;
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-20
*/
public interface IOpsInspectionTestPlanService {
/**
* 查询运维-巡检-试验计划
*
* @param id 主键
* @return 运维-巡检-试验计划
*/
OpsInspectionTestPlanVo queryById(Long id);
/**
* 分页查询运维-巡检-试验计划列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 运维-巡检-试验计划分页列表
*/
TableDataInfo<OpsInspectionTestPlanVo> queryPageList(OpsInspectionTestPlanBo bo, PageQuery pageQuery);
/**
* 查询符合条件的运维-巡检-试验计划列表
*
* @param bo 查询条件
* @return 运维-巡检-试验计划列表
*/
List<OpsInspectionTestPlanVo> queryList(OpsInspectionTestPlanBo bo);
/**
* 新增运维-巡检-试验计划
*
* @param bo 运维-巡检-试验计划
* @return 是否新增成功
*/
Boolean insertByBo(OpsInspectionTestPlanBo bo);
/**
* 修改运维-巡检-试验计划
*
* @param bo 运维-巡检-试验计划
* @return 是否修改成功
*/
Boolean updateByBo(OpsInspectionTestPlanBo bo);
/**
* 校验并批量删除运维-巡检-试验计划信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,69 @@
package org.dromara.inspection.service;
import org.dromara.inspection.domain.OpsInspectionTestTask;
import org.dromara.inspection.domain.vo.OpsInspectionTestTaskVo;
import org.dromara.inspection.domain.bo.OpsInspectionTestTaskBo;
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-20
*/
public interface IOpsInspectionTestTaskService {
/**
* 查询运维-巡检-试验任务
*
* @param id 主键
* @return 运维-巡检-试验任务
*/
OpsInspectionTestTaskVo queryById(Long id);
/**
* 分页查询运维-巡检-试验任务列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 运维-巡检-试验任务分页列表
*/
TableDataInfo<OpsInspectionTestTaskVo> queryPageList(OpsInspectionTestTaskBo bo, PageQuery pageQuery);
/**
* 查询符合条件的运维-巡检-试验任务列表
*
* @param bo 查询条件
* @return 运维-巡检-试验任务列表
*/
List<OpsInspectionTestTaskVo> queryList(OpsInspectionTestTaskBo bo);
/**
* 新增运维-巡检-试验任务
*
* @param bo 运维-巡检-试验任务
* @return 是否新增成功
*/
Boolean insertByBo(OpsInspectionTestTaskBo bo);
/**
* 修改运维-巡检-试验任务
*
* @param bo 运维-巡检-试验任务
* @return 是否修改成功
*/
Boolean updateByBo(OpsInspectionTestTaskBo bo);
/**
* 校验并批量删除运维-巡检-试验任务信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -240,14 +240,21 @@ public class OpsInspectionTaskServiceImpl implements IOpsInspectionTaskService {
durationMillis += opsInspectionTaskVo.getFinishTime().getTime() - opsInspectionTaskVo.getCreateTime().getTime(); durationMillis += opsInspectionTaskVo.getFinishTime().getTime() - opsInspectionTaskVo.getCreateTime().getTime();
} }
//赋值分钟 //赋值分钟
recordVo.setAverageCompletionTime(TimeUnit.MILLISECONDS.toMinutes(durationMillis)/list.size()); if (list.isEmpty()){
recordVo.setAverageCompletionTime(0L);
}else {
recordVo.setAverageCompletionTime(TimeUnit.MILLISECONDS.toMinutes(durationMillis) / list.size());
}
//解决效率 总共问题 / 已解决数 * 100 //解决效率 已解决数 / 总共数量 * 100
BigDecimal problemCountBigDecimal = BigDecimal.valueOf(recordVo.getProblemCount()); BigDecimal problemCountBigDecimal = BigDecimal.valueOf(recordVo.getProblemCount());
BigDecimal solvedProblemCountBigDecimal = BigDecimal.valueOf(recordVo.getSolvedProblemCount()); BigDecimal solvedProblemCountBigDecimal = BigDecimal.valueOf(recordVo.getSolvedProblemCount());
BigDecimal bigDecimal = problemCountBigDecimal.divide(solvedProblemCountBigDecimal, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(0, RoundingMode.HALF_UP); if (solvedProblemCountBigDecimal.compareTo(BigDecimal.ZERO) == 0 || problemCountBigDecimal.compareTo(BigDecimal.ZERO) == 0){
recordVo.setSolveEfficiency(bigDecimal); recordVo.setSolveEfficiency(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);
}
for (OpsInspectionTaskVo opsInspectionTaskVo : opsInspectionTaskVos) { for (OpsInspectionTaskVo opsInspectionTaskVo : opsInspectionTaskVos) {
if (opsInspectionTaskVo.getCreateTime().after(startDate) && opsInspectionTaskVo.getCreateTime().before(endDate)){ if (opsInspectionTaskVo.getCreateTime().after(startDate) && opsInspectionTaskVo.getCreateTime().before(endDate)){
switch (opsInspectionTaskVo.getProblemType()){ switch (opsInspectionTaskVo.getProblemType()){

View File

@ -0,0 +1,201 @@
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.dromara.inspection.domain.vo.OpsInspectionItemVo;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.dromara.inspection.domain.bo.OpsInspectionTestPlanBo;
import org.dromara.inspection.domain.vo.OpsInspectionTestPlanVo;
import org.dromara.inspection.domain.OpsInspectionTestPlan;
import org.dromara.inspection.mapper.OpsInspectionTestPlanMapper;
import org.dromara.inspection.service.IOpsInspectionTestPlanService;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 运维-巡检-试验计划Service业务层处理
*
* @author LionLi
* @date 2025-09-20
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class OpsInspectionTestPlanServiceImpl implements IOpsInspectionTestPlanService {
@Autowired
private OpsUserServiceImpl opsUserService;
@Autowired
private OpsInspectionItemServiceImpl inspectionItemService;
private final OpsInspectionTestPlanMapper baseMapper;
/**
* 查询运维-巡检-试验计划
*
* @param id 主键
* @return 运维-巡检-试验计划
*/
@Override
public OpsInspectionTestPlanVo queryById(Long id){
OpsInspectionTestPlanVo opsInspectionTestPlanVo = baseMapper.selectVoById(id);
List<OpsInspectionTestPlanVo> opsInspectionTestPlanVo1 = List.of(opsInspectionTestPlanVo);
setValue(opsInspectionTestPlanVo1);
return opsInspectionTestPlanVo1.getFirst();
}
/**
* 分页查询运维-巡检-试验计划列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 运维-巡检-试验计划分页列表
*/
@Override
public TableDataInfo<OpsInspectionTestPlanVo> queryPageList(OpsInspectionTestPlanBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<OpsInspectionTestPlan> lqw = buildQueryWrapper(bo);
Page<OpsInspectionTestPlanVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
setValue(result.getRecords());
return TableDataInfo.build(result);
}
/**
* 查询符合条件的运维-巡检-试验计划列表
*
* @param bo 查询条件
* @return 运维-巡检-试验计划列表
*/
@Override
public List<OpsInspectionTestPlanVo> queryList(OpsInspectionTestPlanBo bo) {
LambdaQueryWrapper<OpsInspectionTestPlan> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<OpsInspectionTestPlan> buildQueryWrapper(OpsInspectionTestPlanBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<OpsInspectionTestPlan> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(OpsInspectionTestPlan::getId);
lqw.eq(bo.getProjectId() != null, OpsInspectionTestPlan::getProjectId, bo.getProjectId());
lqw.like(StringUtils.isNotBlank(bo.getPlanName()), OpsInspectionTestPlan::getPlanName, bo.getPlanName());
lqw.eq(StringUtils.isNotBlank(bo.getPlanCode()), OpsInspectionTestPlan::getPlanCode, bo.getPlanCode());
lqw.eq(StringUtils.isNotBlank(bo.getTestObject()), OpsInspectionTestPlan::getTestObject, bo.getTestObject());
lqw.eq(bo.getBeginTime() != null, OpsInspectionTestPlan::getBeginTime, bo.getBeginTime());
lqw.eq(bo.getEndTime() != null, OpsInspectionTestPlan::getEndTime, bo.getEndTime());
lqw.eq(StringUtils.isNotBlank(bo.getTestInfo()), OpsInspectionTestPlan::getTestInfo, bo.getTestInfo());
lqw.eq(StringUtils.isNotBlank(bo.getTestSetting()), OpsInspectionTestPlan::getTestSetting, bo.getTestSetting());
lqw.eq(bo.getPersonCharge() != null, OpsInspectionTestPlan::getPersonCharge, bo.getPersonCharge());
lqw.eq(StringUtils.isNotBlank(bo.getPersonIds()), OpsInspectionTestPlan::getPersonIds, bo.getPersonIds());
lqw.eq(StringUtils.isNotBlank(bo.getInspectionItems()), OpsInspectionTestPlan::getInspectionItems, bo.getInspectionItems());
lqw.eq(StringUtils.isNotBlank(bo.getTestStep()), OpsInspectionTestPlan::getTestStep, bo.getTestStep());
lqw.eq(StringUtils.isNotBlank(bo.getTestDevice()), OpsInspectionTestPlan::getTestDevice, bo.getTestDevice());
lqw.eq(StringUtils.isNotBlank(bo.getTestSolutions()), OpsInspectionTestPlan::getTestSolutions, bo.getTestSolutions());
return lqw;
}
/**
* 新增运维-巡检-试验计划
*
* @param bo 运维-巡检-试验计划
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(OpsInspectionTestPlanBo bo) {
OpsInspectionTestPlan add = MapstructUtils.convert(bo, OpsInspectionTestPlan.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改运维-巡检-试验计划
*
* @param bo 运维-巡检-试验计划
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(OpsInspectionTestPlanBo bo) {
OpsInspectionTestPlan update = MapstructUtils.convert(bo, OpsInspectionTestPlan.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(OpsInspectionTestPlan entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除运维-巡检-试验计划信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 处理回显数据
*/
public void setValue(List<OpsInspectionTestPlanVo> list){
for (OpsInspectionTestPlanVo opsInspectionTestPlanVo : list) {
if(opsInspectionTestPlanVo.getPersonCharge()!=null) {
OpsUserVo byId = opsUserService.queryById(opsInspectionTestPlanVo.getPersonCharge());
if (byId != null) {
opsInspectionTestPlanVo.setPerson(byId);
}
}
if (opsInspectionTestPlanVo.getPersonIds() != null){
String[] split = opsInspectionTestPlanVo.getPersonIds().split(",");
List<OpsUserVo> opsUserVos = new ArrayList<>();
for (String s : split) {
OpsUserVo opsUserVo = opsUserService.queryById(Long.parseLong(s));
if (opsUserVo != null){
opsUserVos.add(opsUserVo);
}
}
opsInspectionTestPlanVo.setPersons(opsUserVos);
}
// if (opsInspectionTestPlanVo.getInspectionItems()!=null){
// String[] split = opsInspectionTestPlanVo.getInspectionItems().split(",");
// List<OpsInspectionItemVo> opsInspectionItemVos = new ArrayList<>();
// for (String s : split) {
// OpsInspectionItemVo opsInspectionItemVo = inspectionItemService.queryById(Long.parseLong(s));
// if (opsInspectionItemVo != null){
// opsInspectionItemVos.add(opsInspectionItemVo);
// }
// }
// }
}
}
}

View File

@ -0,0 +1,276 @@
package org.dromara.inspection.service.impl;
import lombok.Data;
import org.dromara.common.core.domain.R;
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.dromara.inspection.domain.vo.OpsInspectionTestPlanVo;
import org.dromara.inspection.domain.vo.OpsInspectionTestTaskRecord;
import org.dromara.personnel.domain.vo.OpsUserVo;
import org.dromara.personnel.service.impl.OpsUserServiceImpl;
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;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 运维-巡检-试验任务Service业务层处理
*
* @author LionLi
* @date 2025-09-20
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class OpsInspectionTestTaskServiceImpl implements IOpsInspectionTestTaskService {
private final OpsInspectionTestTaskMapper baseMapper;
@Autowired
private OpsUserServiceImpl opsUserService;
@Autowired
private OpsInspectionTestPlanServiceImpl opsInspectionTestPlanService;
/**
* 查询运维-巡检-试验任务
*
* @param id 主键
* @return 运维-巡检-试验任务
*/
@Override
public OpsInspectionTestTaskVo queryById(Long id){
OpsInspectionTestTaskVo opsInspectionTestTaskVo = baseMapper.selectVoById(id);
List<OpsInspectionTestTaskVo> opsInspectionTestTaskVo1 = List.of(opsInspectionTestTaskVo);
setValue(opsInspectionTestTaskVo1);
return opsInspectionTestTaskVo1.getFirst();
}
/**
* 分页查询运维-巡检-试验任务列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 运维-巡检-试验任务分页列表
*/
@Override
public TableDataInfo<OpsInspectionTestTaskVo> queryPageList(OpsInspectionTestTaskBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<OpsInspectionTestTask> lqw = buildQueryWrapper(bo);
Page<OpsInspectionTestTaskVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
setValue(result.getRecords());
return TableDataInfo.build(result);
}
/**
* 查询符合条件的运维-巡检-试验任务列表
*
* @param bo 查询条件
* @return 运维-巡检-试验任务列表
*/
@Override
public List<OpsInspectionTestTaskVo> queryList(OpsInspectionTestTaskBo bo) {
LambdaQueryWrapper<OpsInspectionTestTask> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<OpsInspectionTestTask> buildQueryWrapper(OpsInspectionTestTaskBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<OpsInspectionTestTask> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(OpsInspectionTestTask::getId);
lqw.eq(bo.getProjectId() != null, OpsInspectionTestTask::getProjectId, bo.getProjectId());
lqw.like(StringUtils.isNotBlank(bo.getTaskName()), OpsInspectionTestTask::getTaskName, bo.getTaskName());
lqw.eq(StringUtils.isNotBlank(bo.getTestObject()), OpsInspectionTestTask::getTestObject, bo.getTestObject());
lqw.eq(bo.getBeginTime() != null, OpsInspectionTestTask::getBeginTime, bo.getBeginTime());
lqw.eq(bo.getEndTime() != null, OpsInspectionTestTask::getEndTime, bo.getEndTime());
lqw.eq(StringUtils.isNotBlank(bo.getTimeInfo()), OpsInspectionTestTask::getTimeInfo, bo.getTimeInfo());
lqw.eq(bo.getPerson() != null, OpsInspectionTestTask::getPerson, bo.getPerson());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), OpsInspectionTestTask::getStatus, bo.getStatus());
lqw.eq(bo.getTestPlanId() != null, OpsInspectionTestTask::getTestPlanId, bo.getTestPlanId());
lqw.eq(StringUtils.isNotBlank(bo.getTestSetting()), OpsInspectionTestTask::getTestSetting, bo.getTestSetting());
lqw.eq(bo.getPlanBeginTime() != null, OpsInspectionTestTask::getPlanBeginTime, bo.getPlanBeginTime());
lqw.eq(bo.getProgress() != null, OpsInspectionTestTask::getProgress, bo.getProgress());
lqw.eq(StringUtils.isNotBlank(bo.getFailReason()), OpsInspectionTestTask::getFailReason, bo.getFailReason());
lqw.eq(bo.getFailTime() != null, OpsInspectionTestTask::getFailTime, bo.getFailTime());
lqw.eq(bo.getFailPhase() != null, OpsInspectionTestTask::getFailPhase, bo.getFailPhase());
lqw.eq(StringUtils.isNotBlank(bo.getFaileAnalyze()), OpsInspectionTestTask::getFaileAnalyze, bo.getFaileAnalyze());
lqw.eq(StringUtils.isNotBlank(bo.getFaileTips()), OpsInspectionTestTask::getFaileTips, bo.getFaileTips());
lqw.eq(bo.getTestLongTime() != null, OpsInspectionTestTask::getTestLongTime, bo.getTestLongTime());
lqw.eq(StringUtils.isNotBlank(bo.getTestFinal()), OpsInspectionTestTask::getTestFinal, bo.getTestFinal());
lqw.eq(StringUtils.isNotBlank(bo.getFinalInfo()), OpsInspectionTestTask::getFinalInfo, bo.getFinalInfo());
lqw.eq(StringUtils.isNotBlank(bo.getPauseFor()), OpsInspectionTestTask::getPauseFor, bo.getPauseFor());
lqw.eq(bo.getPauseTime() != null, OpsInspectionTestTask::getPauseTime, bo.getPauseTime());
return lqw;
}
/**
* 新增运维-巡检-试验任务
*
* @param bo 运维-巡检-试验任务
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(OpsInspectionTestTaskBo bo) {
OpsInspectionTestTask add = MapstructUtils.convert(bo, OpsInspectionTestTask.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改运维-巡检-试验任务
*
* @param bo 运维-巡检-试验任务
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(OpsInspectionTestTaskBo bo) {
OpsInspectionTestTask update = MapstructUtils.convert(bo, OpsInspectionTestTask.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(OpsInspectionTestTask entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除运维-巡检-试验任务信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 处理回显信息
*/
private void setValue(List<OpsInspectionTestTaskVo> list){
for (OpsInspectionTestTaskVo opsInspectionTestTaskVo : list) {
if(opsInspectionTestTaskVo.getPerson()!= null){
OpsUserVo opsUserVo = opsUserService.queryById(opsInspectionTestTaskVo.getPerson());
if (opsUserVo != null){
opsInspectionTestTaskVo.setPersonInfo(opsUserVo);
}
}
if (opsInspectionTestTaskVo.getTestPlanId() != null){
OpsInspectionTestPlanVo opsInspectionTestPlanVo = opsInspectionTestPlanService.queryById(opsInspectionTestTaskVo.getTestPlanId());
if (opsInspectionTestPlanVo != null){
opsInspectionTestTaskVo.setTestPlan(opsInspectionTestPlanVo);
}
}
}
}
/**
* 统计记录
*/
public R<Object> record(Long projectId){
LocalDate firstDay = LocalDate.now().withDayOfMonth(1);
LocalDate lastDay = firstDay.plusMonths(1).minusDays(1);
Date startDate = Date.from(firstDay.atStartOfDay(ZoneId.systemDefault()).toInstant());
Date endDate = Date.from(lastDay.atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant());
LambdaQueryWrapper<OpsInspectionTestTask> lqw = new LambdaQueryWrapper<>();
lqw.eq(OpsInspectionTestTask::getProjectId,projectId);
OpsInspectionTestTaskBo opsInspectionTestTaskBo = new OpsInspectionTestTaskBo();
opsInspectionTestTaskBo.setProjectId(projectId);
List<OpsInspectionTestTaskVo> list = queryList(opsInspectionTestTaskBo);
if (list==null || list.isEmpty()){
return R.fail("没有数据");
}
OpsInspectionTestTaskRecord record = new OpsInspectionTestTaskRecord();
//完成实验数
Long finishCount = 0L;
//待分析记录
Long failCount = 0L;
//总共完成时间
Long totalTestTime = 0L;
for (OpsInspectionTestTaskVo opsInspectionTestTaskVo : list) {
if (opsInspectionTestTaskVo.getPlanFinishTime().after(startDate) && opsInspectionTestTaskVo.getPlanFinishTime().before(endDate) && opsInspectionTestTaskVo.getStatus().equals("5")){
finishCount++;
totalTestTime += opsInspectionTestTaskVo.getPlanFinishTime().getTime() - opsInspectionTestTaskVo.getPlanBeginTime().getTime();
}
if (opsInspectionTestTaskVo.getPlanFinishTime().after(startDate) && opsInspectionTestTaskVo.getPlanFinishTime().before(endDate) && opsInspectionTestTaskVo.getStatus().equals("3")){
failCount++;
}
}
record.setFinishCount(finishCount);
record.setFailCount(failCount);
record.setPassValue(BigDecimal.valueOf(finishCount).divide(BigDecimal.valueOf(list.size()), 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
record.setAverageTestTime(totalTestTime/finishCount);
//统计上一月的数据
firstDay = LocalDate.now().minusMonths(1).withDayOfMonth(1);
lastDay = firstDay.plusMonths(1).minusDays(1);
Date finalEndDate = Date.from(firstDay.atStartOfDay(ZoneId.systemDefault()).toInstant());
Date finalStartDate = Date.from(lastDay.atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant());
List<OpsInspectionTestTaskVo> lastMounth = list.stream().filter(testTaskVo -> testTaskVo.getPlanBeginTime().before(finalEndDate) && testTaskVo.getPlanFinishTime().after(finalStartDate))
.toList();
//完成实验数
finishCount = 0L;
//待分析记录
failCount = 0L;
//总共完成时间
totalTestTime = 0L;
for (OpsInspectionTestTaskVo opsInspectionTestTaskVo : lastMounth) {
if (opsInspectionTestTaskVo.getPlanFinishTime().after(startDate) && opsInspectionTestTaskVo.getPlanFinishTime().before(endDate) && opsInspectionTestTaskVo.getStatus().equals("5")){
finishCount++;
totalTestTime += opsInspectionTestTaskVo.getPlanFinishTime().getTime() - opsInspectionTestTaskVo.getPlanBeginTime().getTime();
}
}
Long finishCount1 = totalTestTime/ finishCount;
//完成数增长率
record.setFinishCountAdd(BigDecimal.valueOf(finishCount / record.getFinishCount()).multiply(new BigDecimal("100")));
//通过率
record.setPassValueAdd(BigDecimal.valueOf(finishCount).divide(BigDecimal.valueOf(lastMounth.size()), 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).divide(record.getPassValue(),2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
//时长增长率
record.setAverageTestTimeAdd(BigDecimal.valueOf((totalTestTime/finishCount) / record.getAverageTestTime()));
return R.ok(record);
}
}