Compare commits

..

19 Commits

Author SHA1 Message Date
8cf7b0125d Merge remote-tracking branch 'origin/dev' into dev 2025-09-23 14:58:55 +08:00
700e8564ce 多团队配置修改 2025-09-23 14:58:18 +08:00
bcc1a5c6d1 09-23-抢修,报修优化 2025-09-23 11:39:18 +08:00
28ecf71e0c 综合管理模块排班类型添加项目id 2025-09-22 20:03:46 +08:00
a655f14188 综合管理模块 2025-09-22 19:01:09 +08:00
c17c53fd95 09-22-提交 2025-09-22 17:50:21 +08:00
959030fdb1 09-22-报修任务支持多上传 2025-09-22 15:27:33 +08:00
772b610bec 09-22-文件服务暴露删除方法 2025-09-22 15:05:41 +08:00
1e16cfd54e 09-22-巡检-试验管理-纪录搁置 2025-09-22 10:15:40 +08:00
f83c10a9ca 09-20-巡检-试验计划,任务,纪录 2025-09-20 21:11:42 +08:00
e0c6ab1bfb 09-20-巡检任务 2025-09-20 16:30:10 +08:00
1404911f53 09-19-巡检待办,计划,自定义巡检项 2025-09-19 19:51:52 +08:00
c6a63ade7f 09-19-巡检待办事项初始化 2025-09-19 12:46:01 +08:00
c975ef553a 运维模块补充 2025-09-18 19:56:40 +08:00
94e62580c3 运维模块补充 2025-09-17 16:34:02 +08:00
bc2d41ca89 运维模块重命名提交 2025-09-17 10:33:39 +08:00
ad55550d9f 运维模块补充 2025-09-17 10:25:03 +08:00
599df010ea 运维模块补充提交 2025-09-17 10:23:55 +08:00
36ee19b6e9 运维模块搭建 2025-09-17 10:18:16 +08:00
140 changed files with 11531 additions and 23 deletions

View File

@ -71,7 +71,7 @@
<properties>
<!-- 环境标识,需要与配置文件的名称相对应 -->
<profiles.active>dev</profiles.active>
<nacos.server>192.168.110.209:18848</nacos.server>
<nacos.server>192.168.110.149:18848</nacos.server>
<nacos.discovery.group>DEFAULT_GROUP</nacos.discovery.group>
<nacos.config.group>DEFAULT_GROUP</nacos.config.group>
<nacos.username>nacos</nacos.username>

View File

@ -3,6 +3,7 @@ package org.dromara.resource.api;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.resource.api.domain.RemoteFile;
import java.util.Collection;
import java.util.List;
/**
@ -35,4 +36,7 @@ public interface RemoteFileService {
* @return 列表
*/
List<RemoteFile> selectByIds(String ossIds);
void deleteFile(Collection<String> urls);
}

View File

@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.resource.api.domain.RemoteFile;
import java.util.Collection;
import java.util.List;
/**
@ -50,4 +51,9 @@ public class RemoteFileServiceMock implements RemoteFileService {
return List.of();
}
@Override
public void deleteFile(Collection<String> urls){
log.warn("服务调用异常 -> 降级处理");
}
}

View File

@ -1,5 +1,10 @@
package org.dromara.system.api;
import jakarta.validation.constraints.NotNull;
import org.dromara.system.api.domain.vo.RemoteProjectVo;
import java.util.List;
/**
* @author lilemy
* @date 2025-09-10 16:15
@ -14,4 +19,19 @@ public interface RemoteProjectService {
*/
String selectProjectNameById(Long projectId);
/**
*校验用户是否拥有操作项目的权限
* @param projectId
* @param userId
*/
void validAuth(Long projectId, Long userId);
/**
* 判断项目是否存在
* @param projectId
* @return
*/
RemoteProjectVo getById(Long projectId);
void validAuth(List<Long> projectIdList, Long userId);
}

View File

@ -189,4 +189,5 @@ public interface RemoteUserService {
*/
Map<Long, String> selectPostNamesByIds(List<Long> postIds);
RemoteUserVo selectUserByPhonenumber(String phone);
}

View File

@ -0,0 +1,159 @@
package org.dromara.system.api.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* 项目视图对象 project
*
* @author lilemy
* @date 2025-03-04
*/
@Data
@ExcelIgnoreUnannotated
public class RemoteProjectVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
private Long id;
/**
* 项目名称
*/
private String projectName;
/**
* 项目简称
*/
private String shortName;
/**
* 父项目id
*/
private Long parentId;
/**
* 状态0正常 1停用
*/
private String status;
/**
* 项目图片
*/
private String picUrl;
/**
* 经度
*/
private String lng;
/**
* 纬度
*/
private String lat;
/**
* 备注
*/
private String remark;
/**
* 项目类型
*/
private String projectType;
/**
* 项目阶段
*/
private String projectStage;
/**
* 项目地址
*/
private String projectSite;
/**
* 负责人
*/
private String principal;
/**
* 负责人电话
*/
private String principalPhone;
/**
* 实际容量
*/
private String actual;
/**
* 计划容量
*/
private String plan;
/**
* 开工时间
*/
private String onStreamTime;
/**
* 打卡范围09:00,18:00
*/
private String punchRange;
/**
* 打卡时间开始
*/
private String playCardStart;
/**
* 打卡时间结束
*/
private String playCardEnd;
/**
* 设计总量
*/
private Long designTotal;
/**
* 安全协议书
*/
private String securityAgreement;
/**
* 招标文件
*/
private String tenderFiles;
/**
* 显示隐藏0显示 1隐藏
*/
private String showHidden;
/**
* 排序字段
*/
private Long sort;
/**
* 创建时间
*/
private Date createTime;
}

View File

@ -0,0 +1,28 @@
package org.dromara.system.api.utils;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* @author lilemy
* @date 2025/5/27 9:16
*/
public class BigDecimalUtil {
/**
* 计算百分比
*
* @param dividend 被除数
* @param divisor 除数
* @return 百分比保留2位小数如 12.34%
*/
public static BigDecimal toPercentage(BigDecimal dividend, BigDecimal divisor) {
if (dividend == null || divisor == null || divisor.compareTo(BigDecimal.ZERO) == 0) {
return BigDecimal.valueOf(0.00);
}
return dividend
.multiply(new BigDecimal("100"))
.divide(divisor, 2, RoundingMode.HALF_UP);
}
}

View File

@ -0,0 +1,100 @@
package org.dromara.system.api.utils;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* @author lilemy
* @date 2025/4/17 14:53
*/
public class DocumentUtil {
/**
* 在给定的 run 里插入图片,并按原始大小(或缩放后大小)设置宽高。
*
* @param run 要插入图片的 XWPFRun
* @param imagePath 本地图片路径或 URL这里示例用本地文件
* @param document 当前文档对象
* @param maxWidthPx 最大允许宽度(像素),如果原图更宽就按比例缩放;设置为 <=0 则不缩放
*/
public static void insertImageDynamic(XWPFRun run,
String imagePath,
XWPFDocument document,
int maxWidthPx) throws Exception {
// 1. 先把图片读到 byte[]
byte[] imgBytes = Files.readAllBytes(Paths.get(imagePath));
// 2. 用 ImageIO 读出宽高(像素)
BufferedImage img = ImageIO.read(new ByteArrayInputStream(imgBytes));
int widthPx = img.getWidth();
int heightPx = img.getHeight();
// 3. 如果指定了最大宽度,而且原图更宽,则按比例缩放
if (maxWidthPx > 0 && widthPx > maxWidthPx) {
double ratio = (double) maxWidthPx / widthPx;
widthPx = maxWidthPx;
heightPx = (int) (heightPx * ratio);
}
// 4. 把像素转换成 EMU
int widthEmu = Units.pixelToEMU(widthPx);
int heightEmu = Units.pixelToEMU(heightPx);
// 5. 插入图片
String lower = imagePath.toLowerCase();
int format = lower.endsWith(".png") ? XWPFDocument.PICTURE_TYPE_PNG
: lower.endsWith(".gif") ? XWPFDocument.PICTURE_TYPE_GIF
: lower.endsWith(".jpeg") ? XWPFDocument.PICTURE_TYPE_JPEG
: lower.endsWith(".jpg") ? XWPFDocument.PICTURE_TYPE_JPEG
: XWPFDocument.PICTURE_TYPE_PNG; // 默认当 PNG
try (InputStream picIn = new ByteArrayInputStream(imgBytes)) {
run.addPicture(picIn, format, imagePath, widthEmu, heightEmu);
}
}
/**
* 递归将 sourceDir 中的所有文件和子目录,按照相对于 rootDir 的路径写入 ZipOutputStream。
*
* @param rootDir 源目录的根,用来计算相对路径
* @param sourceDir 当前递归到的目录
* @param zos ZIP 输出流
*/
public static void zipDirectory(Path rootDir, Path sourceDir, ZipOutputStream zos) throws IOException {
// 遍历当前目录下的所有文件和文件夹
try (DirectoryStream<Path> stream = Files.newDirectoryStream(sourceDir)) {
for (Path entry : stream) {
if (Files.isDirectory(entry)) {
// 如果是目录,递归
zipDirectory(rootDir, entry, zos);
} else {
// 如果是文件,创建一个 ZipEntry路径以 '/' 分隔
Path relativePath = rootDir.relativize(entry);
String zipEntryName = relativePath.toString().replace(File.separatorChar, '/');
ZipEntry zipEntry = new ZipEntry(zipEntryName);
zos.putNextEntry(zipEntry);
// 把文件内容写入 ZIP
try (InputStream is = Files.newInputStream(entry)) {
byte[] buffer = new byte[4096];
int len;
while ((len = is.read(buffer)) != -1) {
zos.write(buffer, 0, len);
}
}
zos.closeEntry();
}
}
}
}
}

View File

@ -0,0 +1,97 @@
package org.dromara.system.api.utils;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.exception.ServiceException;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;
/**
* @author lilemy
* @date 2025/4/23 10:42
*/
@Slf4j
public class Dxf2JsonUtil {
/**
* dxf转json
*
* @param exePath dxf2json.exe路径
* @param inputDXFPath 输入dxf文件路径
* @param outputJSONPath 输出json文件路径
* @param sourceEPSG 源坐标系
* @param targetEPSG 目标坐标系
*/
public static void dxf2json(String exePath, String inputDXFPath, String outputJSONPath, String sourceEPSG, String targetEPSG) {
// 判断对应文件是否存在
File exeFile = new File(exePath);
if (!exeFile.exists()) {
throw new ServiceException("转换程序不存在!");
}
File inputDXFFile = new File(inputDXFPath);
if (!inputDXFFile.exists()) {
throw new ServiceException("待转换 dxf 文件不存在!");
}
// 构造命令行参数
List<String> parameters = buildParameter(exePath, inputDXFPath, outputJSONPath, sourceEPSG, targetEPSG);
// 执行命令行
ProcessBuilder builder = new ProcessBuilder(parameters);
// 合并标准错误和输出
builder.redirectErrorStream(true);
try {
Process process = builder.start();
// 读取输出
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream(), "GBK")
);
String line;
log.info("dxf 转 json 程序开始执行,程序路径:{},输入 dxf 路径:{},输出 json 文件路径:{},源坐标系:{},模板坐标系:{}",
exePath, inputDXFPath, outputJSONPath, sourceEPSG, targetEPSG);
while ((line = reader.readLine()) != null) {
log.info("dxf 转 json 程序执行中:{}", line);
JSONObject jsonObject = JSONUtil.parseObj(line);
Integer code = jsonObject.get("code", Integer.class);
if (code != 0 && code != 200) {
throw new ServiceException("dxf 转 json 程序执行出错!");
}
}
int exitCode = process.waitFor();
log.info("dxf 转 json 程序执行完毕,程序退出码:{}", exitCode);
reader.close();
} catch (IOException | InterruptedException e) {
log.error("执行 dxf 转 json 命令行时出错", e);
}
}
/**
* 构造命令行参数
*
* @param exePath dxf2json.exe路径
* @param inputDXFPath 输入dxf文件路径
* @param outputJSONPath 输出json文件路径
* @param sourceEPSG 源坐标系
* @param targetEPSG 目标坐标系
* @return 命令行参数
*/
public static List<String> buildParameter(String exePath,
String inputDXFPath,
String outputJSONPath,
String sourceEPSG,
String targetEPSG) {
// 构造命令行
return Arrays.asList(
exePath,
inputDXFPath,
outputJSONPath,
sourceEPSG,
targetEPSG
);
}
}

View File

@ -0,0 +1,24 @@
package org.dromara.system.api.utils;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.net.http.HttpClient;
import java.time.Duration;
/**
* @Author 铁憨憨
* @Date 2025/7/18 10:16
* @Version 1.0
*
* HttpClient 设计为可重用、线程安全的组件,其内部维护了连接池等资源,适合在多个接口调用中共享使用,所以交给Spring Bean 管理
*/
@Configuration
public class HttpClientConfig {
@Bean
public HttpClient httpClient() {
return HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.build();
}
}

View File

@ -0,0 +1,56 @@
package org.dromara.system.api.utils;
import cn.hutool.core.util.HexUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.AES;
import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* @author lilemy
* @date 2025/6/25 10:57
*/
@Slf4j
@Component
public class IdCardEncryptorUtil {
@Value("${id-card.encrypt-key}")
private String encryptKeyHex;
private AES aes;
@PostConstruct
public void init() {
byte[] keyBytes = HexUtil.decodeHex(encryptKeyHex);
this.aes = SecureUtil.aes(keyBytes);
log.info("身份证 AES 加解密工具初始化成功");
}
/**
* 加密
*
* @param idCard 身份证号码
* @return 加密后的身份证号码
*/
public String encrypt(String idCard) {
return aes.encryptBase64(idCard);
}
/**
* 解密
*
* @param encrypted 密文
* @return 解密后的身份证号码
*/
public String decrypt(String encrypted) {
if (encrypted == null) {
return null;
}
return aes.decryptStr(encrypted);
}
}

View File

@ -0,0 +1,316 @@
//package org.dromara.system.api.utils;
//
//import cn.hutool.json.JSONUtil;
//import org.dromara.common.constant.GeoJsonConstant;
//import org.dromara.common.core.constant.HttpStatus;
//import org.dromara.common.core.exception.ServiceException;
//import org.dromara.common.domain.GeoPoint;
//import org.dromara.facility.domain.dto.geojson.FacFeatureByPlane;
//import org.dromara.facility.domain.dto.geojson.FacFeatureByPoint;
//import org.dromara.facility.domain.dto.geojson.FacGeometry;
//import org.dromara.facility.domain.dto.geojson.FacGeometryByPoint;
//import org.locationtech.jts.geom.*;
//import org.locationtech.jts.index.strtree.STRtree;
//
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import java.util.stream.Collectors;
//
///**
// * @author lilemy
// * @date 2025/4/24 11:48
// */
//public class JSTUtil {
//
// private static final GeometryFactory geometryFactory = new GeometryFactory();
//
// /**
// * 获取最近点的名称
// *
// * @param target 目标点
// * @param nameGeoJson 点对象列表
// * @return 最近点的名称
// */
// public static String findNearestText(List<Double> target, List<FacFeatureByPoint> nameGeoJson) {
// Point targetPoint = geometryFactory.createPoint(new Coordinate(target.get(0), target.get(1)));
// FacFeatureByPoint nearestFeature = null;
// double minDistance = Double.MAX_VALUE;
// for (FacFeatureByPoint feature : nameGeoJson) {
// FacGeometryByPoint geometry = feature.getGeometry();
// List<Double> coords = geometry.getCoordinates();
// if (coords != null && coords.size() == 2) {
// Point currentPoint = geometryFactory.createPoint(new Coordinate(coords.get(0), coords.get(1)));
// double distance = targetPoint.distance(currentPoint);
// if (distance < minDistance) {
// minDistance = distance;
// nearestFeature = feature;
// }
// }
// }
// if (nearestFeature != null && nearestFeature.getProperties() != null) {
// return nearestFeature.getProperties().getText();
// }
// return null; // 如果没找到合适的点
// }
//
// /**
// * 点是否在平面内
// *
// * @param planeLists 平面坐标
// * @param pointList 点坐标
// * @return 点是否在平面内
// */
// public static Boolean pointIsWithInPlane(List<List<Double>> planeLists, List<Double> pointList) {
// // 构建平面
// Coordinate[] coordinates = getPlaneCoordinate(planeLists);
// Polygon polygon = geometryFactory.createPolygon(coordinates);
// // 构建待判断点
// Point point = geometryFactory.createPoint(new Coordinate(pointList.get(0), pointList.get(1)));
// // 判断是否在多边形内
// return polygon.contains(point);
// }
//
// /**
// * 获取平面内点列表集合
// *
// * @param planeLists 平面坐标列表
// * @param pointLists 点坐标列表集合
// * @return 平面内点坐标列表集合
// */
// public static List<List<Double>> getPointInPlaneList(List<List<Double>> planeLists, List<List<Double>> pointLists) {
// // 构建平面
// Coordinate[] coordinates = getPlaneCoordinate(planeLists);
// LinearRing shell = geometryFactory.createLinearRing(coordinates);
// Polygon polygon = geometryFactory.createPolygon(shell);
// // 获取平面内点结合
// return pointLists.stream().filter(pointList -> {
// // 构建待判断点
// Point point = geometryFactory.createPoint(new Coordinate(pointList.get(0), pointList.get(1)));
// // 判断是否在多边形内
// return polygon.contains(point);
// }).toList();
// }
//
// /**
// * 平面是否在平面内
// *
// * @param referencePlane 参考平面
// * @param comparePlane 比较平面
// * @return 平面是否在平面内
// */
// public static Boolean planeIsWithInPlane(List<List<Double>> referencePlane, List<List<Double>> comparePlane) {
// // 构建参考平面
// Coordinate[] referenceCoordinates = getPlaneCoordinate(referencePlane);
// Polygon referencePolygon = geometryFactory.createPolygon(referenceCoordinates);
// // 构建比较平面
// Coordinate[] compareCoordinates = getPlaneCoordinate(comparePlane);
// Polygon comparePolygon = geometryFactory.createPolygon(compareCoordinates);
// // 判断是否在多边形内
// return referencePolygon.contains(comparePolygon);
// }
//
// /**
// * 判断两个平面是否相交
// *
// * @param referencePlane 参考平面
// * @param comparePlane 待比较平面
// * @return 平面是否相交
// */
// public static Boolean arePolygonsIntersecting(List<List<Double>> referencePlane, List<List<Double>> comparePlane) {
// // 构建 Polygon A参考面
// Coordinate[] coordsA = referencePlane.stream()
// .map(p -> new Coordinate(p.getFirst(), p.get(1)))
// .toArray(Coordinate[]::new);
// Polygon polygonA = geometryFactory.createPolygon(coordsA);
// // 构建 Polygon B比较面
// Coordinate[] coordsB = comparePlane.stream()
// .map(p -> new Coordinate(p.getFirst(), p.get(1)))
// .toArray(Coordinate[]::new);
// Polygon polygonB = geometryFactory.createPolygon(coordsB);
// // 使用 JTS 判断是否相交
// return polygonA.intersects(polygonB);
// }
//
// /**
// * 获取平面坐标数组
// *
// * @param planeLists 平面坐标列表
// * @return 平面坐标数组
// */
// public static Coordinate[] getPlaneCoordinate(List<List<Double>> planeLists) {
// return planeLists.stream().map(planeList ->
// new Coordinate(planeList.getFirst(), planeList.get(1)))
// .toList().toArray(new Coordinate[0]);
// }
//
// /**
// * 获取二维坐标
// *
// * @param geometry 几何对象
// * @return 二维坐标
// */
// public static List<List<Double>> getTwoDimensionalCoordinates(FacGeometry geometry) {
// String type = geometry.getType();
// List<Object> coordinates = geometry.getCoordinates();
// return switch (type) {
// case GeoJsonConstant.POINT -> throw new ServiceException("点位无法创建方阵", HttpStatus.BAD_REQUEST);
// case GeoJsonConstant.LINE -> coordinates.stream()
// .filter(obj -> obj instanceof List<?>)
// .map(obj -> ((List<?>) obj).stream()
// .filter(num -> num instanceof Number)
// .map(num -> ((Number) num).doubleValue())
// .collect(Collectors.toList()))
// .collect(Collectors.toList());
// case GeoJsonConstant.POLYGON -> coordinates.stream()
// .filter(obj -> obj instanceof List<?>)
// .flatMap(obj -> ((List<?>) obj).stream())
// .filter(pointObj -> pointObj instanceof List<?>)
// .map(pointObj -> ((List<?>) pointObj).stream()
// .filter(num -> num instanceof Number)
// .map(num -> ((Number) num).doubleValue())
// .collect(Collectors.toList()))
// .collect(Collectors.toList());
// default -> throw new ServiceException("暂不支持该类型", HttpStatus.BAD_REQUEST);
// };
// }
//
// /**
// * 匹配最近的点,获取该点的名称
// *
// * @param polygon 平面
// * @param points 点列表集合
// * @return 最近点的名称
// */
// public static String findNearestPointText(List<List<Double>> polygon, List<FacFeatureByPoint> points) {
// if (polygon == null || polygon.size() < 3 || points == null || points.isEmpty()) {
// return null;
// }
// // 1. 构建 Polygon
// Coordinate[] polygonCoords = polygon.stream()
// .map(coord -> new Coordinate(coord.getFirst(), coord.get(1)))
// .toArray(Coordinate[]::new);
// Polygon jtsPolygon = geometryFactory.createPolygon(polygonCoords);
// // 2. 构建空间索引JTS STRtree
// STRtree spatialIndex = new STRtree();
// Map<Coordinate, FacFeatureByPoint> coordToFeatureMap = new HashMap<>();
// for (FacFeatureByPoint feature : points) {
// List<Double> coords = feature.getGeometry().getCoordinates();
// if (coords == null || coords.size() != 2) continue;
// Coordinate coord = new Coordinate(coords.get(0), coords.get(1));
// Point point = geometryFactory.createPoint(coord);
// // 用点的 Envelope 加入索引
// spatialIndex.insert(point.getEnvelopeInternal(), point);
// coordToFeatureMap.put(coord, feature);
// }
// // 3. 查询距离 polygon 最近的点
// // 用 polygon 中心点附近构造 Envelope扩大一些范围
// Envelope searchEnv = jtsPolygon.getEnvelopeInternal();
// searchEnv.expandBy(10); // 扩大搜索半径
// @SuppressWarnings("unchecked")
// List<Point> candidatePoints = spatialIndex.query(searchEnv);
// double minDistance = Double.MAX_VALUE;
// Coordinate nearestCoord = null;
// for (Point point : candidatePoints) {
// double distance = point.distance(jtsPolygon);
// if (distance < minDistance) {
// minDistance = distance;
// nearestCoord = point.getCoordinate();
// }
// }
// if (nearestCoord != null) {
// FacFeatureByPoint nearestFeature = coordToFeatureMap.get(nearestCoord);
// if (nearestFeature != null && nearestFeature.getProperties() != null) {
// return nearestFeature.getProperties().getText();
// }
// }
// return null;
// }
//
// /**
// * 匹配最近的面,获取该面的信息
// *
// * @param pointFeature 点位
// * @param polygons 平面列表
// * @return 最近面的信息
// */
// public static FacFeatureByPlane findNearestOrContainingPolygon(
// FacFeatureByPoint pointFeature,
// List<FacFeatureByPlane> polygons
// ) {
// if (pointFeature == null || polygons == null || polygons.isEmpty()) {
// return null;
// }
// List<Double> coords = pointFeature.getGeometry().getCoordinates();
// if (coords == null || coords.size() != 2) return null;
// Coordinate pointCoord = new Coordinate(coords.get(0), coords.get(1));
// Point point = geometryFactory.createPoint(pointCoord);
// FacFeatureByPlane nearestPolygon = null;
// double minDistance = Double.MAX_VALUE;
// for (FacFeatureByPlane polygonFeature : polygons) {
// if (polygonFeature == null || polygonFeature.getGeometry() == null) {
// continue; // 跳过空对象
// }
// List<List<Double>> polyCoords = polygonFeature.getGeometry().getCoordinates().getFirst();
// Coordinate[] polygonCoords = polyCoords.stream()
// .map(c -> new Coordinate(c.getFirst(), c.get(1)))
// .toArray(Coordinate[]::new);
// Polygon polygon = geometryFactory.createPolygon(polygonCoords);
// // 优先使用包含点的 polygon
// if (polygon.contains(point)) {
// return polygonFeature;
// }
// double distance = polygon.distance(point);
// if (distance < minDistance) {
// minDistance = distance;
// nearestPolygon = polygonFeature;
// }
// }
// return nearestPolygon;
// }
//
// /**
// * 判断一个点是否在多个区域中,返回第一个匹配区域的点集合(否则 null
// *
// * @param lat 纬度
// * @param lng 经度
// * @param rangeListJson 多边形列表,每个为 JSON 数组(多边形的点数组)
// * @return 匹配区域的 List<Point>,否则 null
// */
// public static List<GeoPoint> findMatchingRange(String lat, String lng, List<String> rangeListJson) {
// double latitude = Double.parseDouble(lat);
// double longitude = Double.parseDouble(lng);
// Point point = geometryFactory.createPoint(new Coordinate(longitude, latitude));
// for (String rangeJson : rangeListJson) {
// List<GeoPoint> polygonPoints = JSONUtil.toList(rangeJson, GeoPoint.class);
// if (polygonPoints.size() < 3) continue; // 不是有效多边形
//
// Polygon polygon = buildPolygon(polygonPoints);
// if (polygon.contains(point)) {
// return polygonPoints; // 找到匹配范围
// }
// }
// return null;
// }
//
// /**
// * 将点集合转换为 JTS 多边形
// */
// private static Polygon buildPolygon(List<GeoPoint> points) {
// Coordinate[] coordinates = points.stream()
// .map(p -> new Coordinate(p.getLng(), p.getLat()))
// .toArray(Coordinate[]::new);
//
// // 需要闭合坐标环(首尾相连)
// if (!coordinates[0].equals2D(coordinates[coordinates.length - 1])) {
// Coordinate[] closed = new Coordinate[coordinates.length + 1];
// System.arraycopy(coordinates, 0, closed, 0, coordinates.length);
// closed[closed.length - 1] = coordinates[0];
// coordinates = closed;
// }
//
// LinearRing shell = geometryFactory.createLinearRing(coordinates);
// return geometryFactory.createPolygon(shell);
// }
//
//}

View File

@ -0,0 +1,24 @@
package org.dromara.system.api.utils;
import cn.hutool.json.JSONArray;
/**
* @author lilemy
* @date 2025/5/30 14:55
*/
public class JsonDimensionUtil {
/**
* 判断 JSONArray 的嵌套维度
*
* @param array 需要判断的 JSONArray
* @return 返回维度层级1 表示一维2 表示二维3 表示三维 ...
*/
public static int getJsonArrayDepth(Object array) {
if (array instanceof JSONArray jsonArray && !jsonArray.isEmpty()) {
return 1 + getJsonArrayDepth(jsonArray.getFirst());
}
return 0;
}
}

View File

@ -0,0 +1,34 @@
//package org.dromara.system.api.utils;
//
//import cn.hutool.core.collection.CollUtil;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//
//import java.util.Collections;
//import java.util.List;
//import java.util.function.Function;
//
///**
// * @author lilemy
// * @date 2025/5/28 11:25
// */
//public class PageConvertUtil {
//
// /**
// * 将 Page<T> 转换为 Page<V>
// *
// * @param source 原始分页数据
// * @param mapper 实体 -> VO 的转换函数
// * @return Page<V>
// */
// public static <T, V> Page<V> convert(Page<T> source, Function<T, V> mapper) {
// Page<V> target = new Page<>(source.getCurrent(), source.getSize(), source.getTotal());
// if (CollUtil.isEmpty(source.getRecords())) {
// target.setRecords(Collections.emptyList());
// } else {
// List<V> voList = source.getRecords().stream().map(mapper).toList();
// target.setRecords(voList);
// }
// return target;
// }
//
//}

View File

@ -93,10 +93,10 @@
</dependency>
<!-- 自定义负载均衡(多团队开发使用) -->
<!-- <dependency>-->
<!-- <groupId>org.dromara</groupId>-->
<!-- <artifactId>ruoyi-common-loadbalancer</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-loadbalancer</artifactId>
</dependency>
<!-- ELK 日志收集 -->
<!-- <dependency>-->

View File

@ -58,18 +58,19 @@
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<artifactId>hutool-all</artifactId>
<version>5.8.38</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-http</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>cn.hutool</groupId>-->
<!-- <artifactId>hutool-http</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-extra</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>cn.hutool</groupId>-->
<!-- <artifactId>hutool-extra</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>org.projectlombok</groupId>

View File

@ -89,10 +89,10 @@
</dependency>
<!-- 自定义负载均衡(多团队开发使用) -->
<!-- <dependency>-->
<!-- <groupId>org.dromara</groupId>-->
<!-- <artifactId>ruoyi-common-loadbalancer</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-loadbalancer</artifactId>
</dependency>
<!-- ELK 日志收集 -->
<!-- <dependency>-->

View File

@ -15,6 +15,7 @@
<module>ruoyi-resource</module>
<module>ruoyi-workflow</module>
<module>ruoyi-synjinlangyun</module>
<module>xny-ops</module>
</modules>
<artifactId>ruoyi-modules</artifactId>
@ -26,10 +27,10 @@
<dependencies>
<!-- 自定义负载均衡(多团队开发使用) -->
<!-- <dependency>-->
<!-- <groupId>org.dromara</groupId>-->
<!-- <artifactId>ruoyi-common-loadbalancer</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-loadbalancer</artifactId>
</dependency>
<!-- ELK 日志收集 -->
<!-- <dependency>-->

View File

@ -195,7 +195,7 @@ public class GenController extends BaseController {
*/
private void genCode(HttpServletResponse response, byte[] data) throws IOException {
response.reset();
response.addHeader("Access-Control-Allow-Origin", "*");
// response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("Content-Disposition", "attachment; filename=\"ruoyi.zip\"");
response.addHeader("Content-Length", "" + data.length);

View File

@ -18,6 +18,7 @@ import org.dromara.resource.service.ISysOssService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collection;
import java.util.List;
/**
@ -86,4 +87,13 @@ public class RemoteFileServiceImpl implements RemoteFileService {
List<SysOssVo> sysOssVos = sysOssService.listByIds(StringUtils.splitTo(ossIds, Convert::toLong));
return MapstructUtils.convert(sysOssVos, RemoteFile.class);
}
@Override
public void deleteFile(Collection<String> urls){
OssClient storage = OssFactory.instance();
for (String url : urls) {
storage.delete(url);
}
}
}

View File

@ -1,11 +1,23 @@
package org.dromara.system.dubbo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboService;
import org.dromara.common.core.constant.HttpStatus;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.system.api.RemoteProjectService;
import org.dromara.system.api.domain.vo.RemoteProjectVo;
import org.dromara.system.domain.BusProject;
import org.dromara.system.domain.BusUserProjectRelevancy;
import org.dromara.system.service.IBusProjectService;
import org.dromara.system.service.IBusUserProjectRelevancyService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author lilemy
* @date 2025-09-11 18:33
@ -27,4 +39,22 @@ public class RemoteProjectServiceImpl implements RemoteProjectService {
public String selectProjectNameById(Long projectId) {
return projectService.getProjectNameById(projectId);
}
@Override
public void validAuth(Long projectId, Long userId) {
projectService.validAuth(projectId, userId);
}
@Override
public RemoteProjectVo getById(Long projectId) {
BusProject byId = projectService.getById(projectId);
RemoteProjectVo remoteProjectVo = new RemoteProjectVo();
BeanUtils.copyProperties(byId, remoteProjectVo);
return remoteProjectVo;
}
@Override
public void validAuth(List<Long> projectIdList, Long userId) {
projectService.validAuth(projectIdList, userId);
}
}

View File

@ -488,4 +488,10 @@ public class RemoteUserServiceImpl implements RemoteUserService {
.collect(Collectors.toMap(SysPost::getPostId, SysPost::getPostName));
}
@Override
public RemoteUserVo selectUserByPhonenumber(String phone) {
SysUserVo sysUserVo = userMapper.selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getPhonenumber, phone));
return BeanUtil.copyProperties(sysUserVo, RemoteUserVo.class);
}
}

View File

@ -0,0 +1,27 @@
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
#FROM findepi/graalvm:java17-native
LABEL maintainer="Lion Li"
RUN mkdir -p /xny/ops/logs \
/xny/ops/temp \
/ruoyi/skywalking/agent
WORKDIR /xny/ops
ENV SERVER_PORT=19301 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
EXPOSE ${SERVER_PORT}
ADD ./target/xny-ops.jar ./app.jar
SHELL ["/bin/bash", "-c"]
ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
#-Dskywalking.agent.service_name=xny-ops \
#-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \
-XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
-jar app.jar

View File

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-modules</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>xny-ops</artifactId>
<description>
xny-ops模块
</description>
<dependencies>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-nacos</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sentinel</artifactId>
</dependency>
<!-- RuoYi Common Log -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-log</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-service-impl</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-doc</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-web</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-seata</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-idempotent</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-tenant</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-security</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-translation</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sensitive</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-encrypt</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,23 @@
package org.dromara;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
/**
* 运维模块
*/
@EnableDubbo
@SpringBootApplication
public class OpsApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(OpsApplication.class);
application.setApplicationStartup(new BufferingApplicationStartup(2048));
application.run(args);
System.out.println("(♥◠‿◠)ノ゙ 运维模块启动成功 ლ(´ڡ`ლ)゙ ");
}
}

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

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

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

View File

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

View File

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

View File

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

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,121 @@
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));
}
/**
* 获取运维-巡检-试验任务记录
*
* @param projectId 项目ID
*/
// @SaCheckPermission("inspection:testTask:record")
// @GetMapping("/record")
// public R<Object> record(@RequestParam Long projectId){
// return opsInspectionTestTaskService.record(projectId);
// }
}

View File

@ -0,0 +1,46 @@
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.io.Serial;
/**
* 运维-巡检-自定义巡检项对象 ops_inspection_item
*
* @author LionLi
* @date 2025-09-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ops_inspection_item")
public class OpsInspectionItem extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
* 电站id
*/
private Long projectId;
/**
* 自定义巡检项名称
*/
private String name;
/**
* 业务id巡检计划1
*/
private String type;
}

View File

@ -0,0 +1,77 @@
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 java.io.Serial;
/**
* 运维-巡检-待办对象 ops_inspection_matter
*
* @author LionLi
* @date 2025-09-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ops_inspection_matter")
public class OpsInspectionMatter extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
* (任务)电站id
*/
private Long projectId;
/**
* 任务名称
*/
private String taskName;
/**
* 任务描述
*/
private String describeValue;
/**
* 任务开始时间
*/
private Date taskBeginTime;
/**
* 任务结束时间
*/
private Date taskEndTime;
/**
* 时间段
*/
private String taskTimeInfo;
/**
* 等级,常规,重要,紧急
*/
private String taskLevel;
/**
* 任务类型
*/
private String taskType;
/**
* 状态
*/
private String status;
}

View File

@ -0,0 +1,100 @@
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;
import java.util.List;
/**
* 运维-巡检-计划对象 ops_inspection_plan
*
* @author LionLi
* @date 2025-09-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ops_inspection_plan")
public class OpsInspectionPlan extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id")
private Long id;
/**
* 电站id
*/
private Long projectId;
/**
* 计划名称
*/
private Long planName;
/**
* 计划类型1每日巡检2每周巡检3每月巡检4每季度巡检
*/
private String planType;
/**
* 巡检对象1服务器2网络设备3应用系统4基础设施
*/
private String objectType;
/**
* 开始日期
*/
private Date beginTime;
/**
* 结束日期
*/
private Date endTime;
/**
* 巡检频率
*/
private String inspectionFrequency;
/**
* 计划开始时间
*/
private String planBeginTime;
/**
* 持续时间(分钟)
*/
private Long duration;
/**
* 负责人ID
*/
private Long person;
/**
* 巡检项IDS
*/
private String inspectionItemId;
/**
* 1启用2停用
*/
private String status;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,112 @@
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 java.io.Serial;
/**
* 运维-巡检-抢修对象 ops_inspection_repair
*
* @author LionLi
* @date 2025-09-22
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ops_inspection_repair")
public class OpsInspectionRepair extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
*
*/
private Long projectId;
/**
* 1常规2紧急3致命
*/
private String level;
/**
* 1待处理2处理中3已完成
*/
private String status;
/**
* 抢修类型1电力2设备3供水4网络5设施
*/
private String type;
/**
* 报修名称
*/
private String name;
/**
* 指派维修人
*/
private Long sendPerson;
/**
* 详细信息
*/
private String reportInfo;
/**
* 故障位置
*/
private String position;
/**
* 文件IDS
*/
private String fileId;
/**
* 文件路径
*/
private String fileUrl;
/**
* 报修人姓名
*/
private String reportName;
/**
* 报修人联系电话
*/
private String reportPhone;
/**
* 维修结果
*/
// private String reportFinal;
/**
* 预计完成时间
*/
private String expectedTime;
/**
* 完成时间
*/
private Date reportFinishTime;
/**
* 支援,1需要2不需要
*/
private String support;
}

View File

@ -0,0 +1,95 @@
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.io.Serial;
import java.util.Date;
/**
* 运维-巡检-报修对象 ops_inspection_report
*
* @author LionLi
* @date 2025-09-22
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ops_inspection_report")
public class OpsInspectionReport extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
* 项目ID(电站ID)
*/
private Long projectId;
/**
* 1低优先2中优先3高优先
*/
private String level;
/**
* 1待处理2处理中3已完成
*/
private String status;
/**
* 报修类型1硬件2软件
*/
private String type;
/**
* 报修名称
*/
private String name;
/**
* 指派维修人
*/
private Long sendPerson;
/**
* 详细信息
*/
private String reportInfo;
/**
* 故障位置
*/
private String position;
/**
* 文件ID 多个用逗号分隔
*/
private String fileId;
/**
* 文件路径
*/
private String fileUrl;
/**
* 报修人姓名
*/
private String reportName;
/**
* 报修人联系电话
*/
private String reportPhone;
private String reportFinal;
private Date reportFinishTime;
}

View File

@ -0,0 +1,92 @@
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.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* 运维-巡检计划-任务对象 ops_inspection_task
*
* @author LionLi
* @date 2025-09-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ops_inspection_task")
public class OpsInspectionTask extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
private Long projectId;
/**
* 任务名
*/
private String taskName;
/**
* 巡检对象
*/
private String inspectionObject;
/**
*
*/
private Date beginTime;
/**
*
*/
private Date endTime;
/**
* 时间段
*/
private String timeInfo;
/**
* 计划ID
*/
private Long planId;
/**
* 执行人ID
*/
private Long personId;
/**
* 进度
*/
@TableField(exist = false)
private BigDecimal taskProgress;
/**
* 状态 1待执行2已延期3执行中4已完成
*/
private String taskType;
/**
* 发现问题种类,1磁盘使用率2内存使用率3服务状态4响应时间5设备运行状态
*/
private String problemType;
/**
* 完成时间
*/
private Date finishTime;
}

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,43 @@
package org.dromara.inspection.domain.bo;
import org.dromara.inspection.domain.OpsInspectionItem;
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.*;
/**
* 运维-巡检-自定义巡检项业务对象 ops_inspection_item
*
* @author LionLi
* @date 2025-09-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = OpsInspectionItem.class, reverseConvertGenerate = false)
public class OpsInspectionItemBo extends BaseEntity {
private Long id;
/**
* 电站id
*/
private Long projectId;
/**
* 自定义巡检项名称
*/
@NotBlank(message = "自定义巡检项名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String name;
/**
* 业务id巡检计划1
*/
@NotBlank(message = "业务id巡检计划1不能为空", groups = { AddGroup.class, EditGroup.class })
private String type;
}

View File

@ -0,0 +1,81 @@
package org.dromara.inspection.domain.bo;
import org.dromara.inspection.domain.OpsInspectionMatter;
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;
/**
* 运维-巡检-待办业务对象 ops_inspection_matter
*
* @author LionLi
* @date 2025-09-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = OpsInspectionMatter.class, reverseConvertGenerate = false)
public class OpsInspectionMatterBo 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 taskName;
/**
* 任务描述
*/
@NotBlank(message = "任务描述不能为空", groups = { AddGroup.class, EditGroup.class })
private String describeValue;
/**
* 任务开始时间
*/
@NotNull(message = "任务开始时间不能为空", groups = { AddGroup.class, EditGroup.class })
private Date taskBeginTime;
/**
* 任务结束时间
*/
@NotNull(message = "任务结束时间不能为空", groups = { AddGroup.class, EditGroup.class })
private Date taskEndTime;
/**
* 时间段
*/
@NotBlank(message = "时间段不能为空", groups = { AddGroup.class, EditGroup.class })
private String taskTimeInfo;
/**
* 等级1常规2重要3紧急
*/
@NotBlank(message = "等级1常规2重要3紧急不能为空", groups = { AddGroup.class, EditGroup.class })
private String taskLevel;
/**
* 任务类型
*/
@NotBlank(message = "任务类型不能为空", groups = { AddGroup.class, EditGroup.class })
private String taskType;
/**
* 状态
*/
// @NotBlank(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class })
private String status;
}

View File

@ -0,0 +1,108 @@
package org.dromara.inspection.domain.bo;
import org.dromara.inspection.domain.OpsInspectionPlan;
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 java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 运维-巡检-计划业务对象 ops_inspection_plan
*
* @author LionLi
* @date 2025-09-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = OpsInspectionPlan.class, reverseConvertGenerate = false)
public class OpsInspectionPlanBo extends BaseEntity {
/**
* id
*/
private Long id;
/**
* 电站id
*/
private Long projectId;
/**
* 计划名称
*/
@NotNull(message = "计划名称不能为空", groups = { AddGroup.class, EditGroup.class })
private Long planName;
/**
* 计划类型1每日巡检2每周巡检3每月巡检4每季度巡检
*/
@NotBlank(message = "计划类型1每日巡检2每周巡检3每月巡检4每季度巡检不能为空", groups = { AddGroup.class, EditGroup.class })
private String planType;
/**
* 巡检对象1服务器2网络设备3应用系统4基础设施
*/
@NotBlank(message = "巡检对象1服务器2网络设备3应用系统4基础设施不能为空", groups = { AddGroup.class, EditGroup.class })
private String objectType;
/**
* 开始日期
*/
@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 inspectionFrequency;
/**
* 计划开始时间
*/
@NotBlank(message = "计划开始时间不能为空", groups = { AddGroup.class, EditGroup.class })
private String planBeginTime;
/**
* 持续时间(分钟)
*/
@NotNull(message = "持续时间(分钟)不能为空", groups = { AddGroup.class, EditGroup.class })
private Long duration;
/**
* 负责人ID
*/
@NotNull(message = "负责人ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long person;
/**
* 巡检项IDS
*/
private String inspectionItemId;
/**
* 1启用2停用
*/
@NotBlank(message = "1启用2停用不能为空", groups = { AddGroup.class, EditGroup.class })
private String status;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,124 @@
package org.dromara.inspection.domain.bo;
import org.dromara.inspection.domain.OpsInspectionRepair;
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;
/**
* 运维-巡检-抢修业务对象 ops_inspection_repair
*
* @author LionLi
* @date 2025-09-22
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = OpsInspectionRepair.class, reverseConvertGenerate = false)
public class OpsInspectionRepairBo extends BaseEntity {
/**
*
*/
private Long id;
/**
*
*/
@NotNull(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
private Long projectId;
/**
* 1常规2紧急3致命
*/
@NotBlank(message = "1常规2紧急3致命不能为空", groups = { AddGroup.class, EditGroup.class })
private String level;
/**
* 1待处理2处理中3已完成
*/
@NotBlank(message = "1待处理2处理中3已完成不能为空", groups = { AddGroup.class, EditGroup.class })
private String status;
/**
* 抢修类型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 name;
/**
* 指派维修人
*/
// @NotNull(message = "指派维修人不能为空", groups = { AddGroup.class, EditGroup.class })
private Long sendPerson;
/**
* 详细信息
*/
@NotBlank(message = "详细信息不能为空", groups = { AddGroup.class, EditGroup.class })
private String reportInfo;
/**
* 故障位置
*/
@NotBlank(message = "故障位置不能为空", groups = { AddGroup.class, EditGroup.class })
private String position;
/**
* 文件IDS
*/
private String fileId;
/**
* 文件路径
*/
private String fileUrl;
/**
* 报修人姓名
*/
@NotBlank(message = "报修人姓名不能为空", groups = { AddGroup.class, EditGroup.class })
private String reportName;
/**
* 报修人联系电话
*/
@NotBlank(message = "报修人联系电话不能为空", groups = { AddGroup.class, EditGroup.class })
private String reportPhone;
/**
* 维修结果
*/
// @NotBlank(message = "维修结果不能为空", groups = { AddGroup.class, EditGroup.class })
// private String reportFinal;
/**
* 预计完成时间
*/
@NotBlank(message = "预计完成时间不能为空", groups = { AddGroup.class, EditGroup.class })
private String expectedTime;
/**
* 完成时间
*/
// @NotNull(message = "完成时间不能为空", groups = { AddGroup.class, EditGroup.class })
private Date reportFinishTime;
/**
* 支援,1需要2不需要
*/
@NotBlank(message = "支援,1需要2不需要不能为空", groups = { AddGroup.class, EditGroup.class })
private String support;
}

View File

@ -0,0 +1,104 @@
package org.dromara.inspection.domain.bo;
import org.dromara.inspection.domain.OpsInspectionReport;
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;
/**
* 运维-巡检-报修业务对象 ops_inspection_report
*
* @author LionLi
* @date 2025-09-22
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = OpsInspectionReport.class, reverseConvertGenerate = false)
public class OpsInspectionReportBo extends BaseEntity {
/**
* id
*/
private Long id;
/**
* 项目ID(电站ID)
*/
@NotNull(message = "项目ID(电站ID)不能为空", groups = { AddGroup.class, EditGroup.class })
private Long projectId;
/**
* 1低优先2中优先3高优先
*/
@NotBlank(message = "优先级不能为空", groups = {AddGroup.class, EditGroup.class})
private String level;
/**
* 1待处理2处理中3已完成
*/
private String status;
/**
* 报修类型1硬件2软件
*/
@NotBlank(message = "报修类型不能为空", groups = { AddGroup.class, EditGroup.class })
private String type;
/**
* 报修名称
*/
@NotBlank(message = "报修名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String name;
/**
* 指派维修人
*/
// @NotNull(message = "指派维修人不能为空", groups = { AddGroup.class, EditGroup.class })
private Long sendPerson;
/**
* 详细信息
*/
@NotBlank(message = "详细信息不能为空", groups = {AddGroup.class, EditGroup.class})
private String reportInfo;
/**
* 故障位置
*/
@NotBlank(message = "故障位置不能为空", groups = {AddGroup.class, EditGroup.class})
private String position;
/**
* 文件ID
*/
// @NotBlank(message = "文件不能为空", groups = {AddGroup.class, EditGroup.class})
private String fileId;
/**
* 文件路径
*/
private String fileUrl;
/**
* 报修人姓名
*/
@NotBlank(message = "姓名不能为空", groups = {AddGroup.class, EditGroup.class})
private String reportName;
/**
* 报修人联系电话
*/
@NotBlank(message = "电话不能为空", groups = {AddGroup.class, EditGroup.class})
private String reportPhone;
private String reportFinal;
private Date reportFinishTime;
}

View File

@ -0,0 +1,100 @@
package org.dromara.inspection.domain.bo;
import com.baomidou.mybatisplus.annotation.TableField;
import org.dromara.inspection.domain.OpsInspectionTask;
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.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 运维-巡检计划-任务业务对象 ops_inspection_task
*
* @author LionLi
* @date 2025-09-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = OpsInspectionTask.class, reverseConvertGenerate = false)
public class OpsInspectionTaskBo extends BaseEntity {
/**
*
*/
private Long id;
private Long projectId;
/**
* 任务名
*/
@NotBlank(message = "任务名不能为空", groups = { AddGroup.class, EditGroup.class })
private String taskName;
/**
* 巡检对象
*/
@NotBlank(message = "巡检对象不能为空", groups = { AddGroup.class, EditGroup.class })
private String inspectionObject;
/**
*
*/
@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;
/**
* 计划ID
*/
@NotNull(message = "计划ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long planId;
/**
* 执行人ID
*/
@NotNull(message = "执行人ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long personId;
/**
* 进度
*/
@TableField(exist = false)
private BigDecimal taskProgress;
/**
* 状态 1待执行2已延期3执行中4已完成
*/
@NotNull(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class })
private String taskType;
/**
* 发现问题种类,1磁盘使用率2内存使用率3服务状态4响应时间5设备运行状态
*/
private String problemType;
/**
* 完成时间
*/
private Date finishTime;
}

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,55 @@
package org.dromara.inspection.domain.vo;
import org.dromara.inspection.domain.OpsInspectionItem;
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_item
*
* @author LionLi
* @date 2025-09-19
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = OpsInspectionItem.class)
public class OpsInspectionItemVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@ExcelProperty(value = "")
private Long id;
/**
* 电站id
*/
private Long projectId;
/**
* 自定义巡检项名称
*/
@ExcelProperty(value = "自定义巡检项名称")
private String name;
/**
* 业务id巡检计划1
*/
@ExcelProperty(value = "业务id巡检计划1")
private String type;
}

View File

@ -0,0 +1,86 @@
package org.dromara.inspection.domain.vo;
import java.util.Date;
import org.dromara.inspection.domain.OpsInspectionMatter;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 运维-巡检-待办视图对象 ops_inspection_matter
*
* @author LionLi
* @date 2025-09-19
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = OpsInspectionMatter.class)
public class OpsInspectionMatterVo 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 taskName;
/**
* 任务描述
*/
@ExcelProperty(value = "任务描述")
private String describeValue;
/**
* 任务开始时间
*/
@ExcelProperty(value = "任务开始时间")
private Date taskBeginTime;
/**
* 任务结束时间
*/
@ExcelProperty(value = "任务结束时间")
private Date taskEndTime;
/**
* 时间段
*/
@ExcelProperty(value = "时间段")
private String taskTimeInfo;
/**
* 等级1常规2重要3紧急
*/
@ExcelProperty(value = "等级1常规2重要3紧急")
private String taskLevel;
/**
* 任务类型
*/
@ExcelProperty(value = "任务类型")
private String taskType;
@ExcelProperty(value = "状态")
private String status;
}

View File

@ -0,0 +1,121 @@
package org.dromara.inspection.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.inspection.domain.OpsInspectionPlan;
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;
import java.util.List;
/**
* 运维-巡检-计划视图对象 ops_inspection_plan
*
* @author LionLi
* @date 2025-09-19
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = OpsInspectionPlan.class)
public class OpsInspectionPlanVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 电站id
*/
private Long projectId;
/**
* id
*/
@ExcelProperty(value = "id")
private Long id;
/**
* 计划名称
*/
@ExcelProperty(value = "计划名称")
private Long planName;
/**
* 计划类型1每日巡检2每周巡检3每月巡检4每季度巡检
*/
@ExcelProperty(value = "计划类型1每日巡检2每周巡检3每月巡检4每季度巡检")
private String planType;
/**
* 巡检对象1服务器2网络设备3应用系统4基础设施
*/
@ExcelProperty(value = "巡检对象1服务器2网络设备3应用系统4基础设施")
private String objectType;
/**
* 开始日期
*/
@ExcelProperty(value = "开始日期")
private Date beginTime;
/**
* 结束日期
*/
@ExcelProperty(value = "结束日期")
private Date endTime;
/**
* 巡检频率
*/
@ExcelProperty(value = "巡检频率")
private String inspectionFrequency;
/**
* 计划开始时间
*/
@ExcelProperty(value = "计划开始时间")
private String planBeginTime;
/**
* 持续时间(分钟)
*/
@ExcelProperty(value = "持续时间(分钟)")
private Long duration;
/**
* 负责人ID
*/
@ExcelProperty(value = "负责人ID")
private Long person;
/**
* 负责人姓名
*/
private String nickName;
/**
* 负责人头像
*/
private String avatar;
/**
* 巡检项IDS
*/
@ExcelProperty(value = "巡检项ID")
private String inspectionItemId;
/**
* 1启用2停用
*/
@ExcelProperty(value = "1启用2停用")
private String status;
}

View File

@ -0,0 +1,69 @@
package org.dromara.inspection.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
/**
* 巡检记录
*/
@Data
public class OpsInspectionRecordVo {
/**
* 类型 1月 2周 3日
*/
// private String type;
/**
* 完成巡检数量
*/
private Long finishInspectionCount;
/**
* 问题梳数量
*/
private Long problemCount;
/**
* 已解决问题数量
*/
private Long solvedProblemCount;
/**
* 平均完成时间
*/
private Long averageCompletionTime;
/**
* 解决效率
*/
private BigDecimal solveEfficiency;
/**
* 磁盘使用率类型问题数量
*/
private Long cpsyl;
/**
* 内存使用率类型问题数量
*/
private Long ncsyl;
/**
* 服务状态类型问题数量
*/
private Long fwzt;
/**
* 响应时间类型问题数量
*/
private Long xysj;
/**
* 设备运行状态类型问题数量
*/
private Long sbyxzt;
}

View File

@ -0,0 +1,141 @@
package org.dromara.inspection.domain.vo;
import java.util.Date;
import org.dromara.inspection.domain.OpsInspectionRepair;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.personnel.domain.vo.OpsUserVo;
import java.io.Serial;
import java.io.Serializable;
/**
* 运维-巡检-抢修视图对象 ops_inspection_repair
*
* @author LionLi
* @date 2025-09-22
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = OpsInspectionRepair.class)
public class OpsInspectionRepairVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "")
private Long id;
/**
*
*/
@ExcelProperty(value = "")
private Long projectId;
/**
* 1常规2紧急3致命
*/
@ExcelProperty(value = "1常规2紧急3致命")
private String level;
/**
* 1待处理2处理中3已完成
*/
@ExcelProperty(value = "1待处理2处理中3已完成")
private String status;
/**
* 抢修类型1电力2设备3供水4网络5设施
*/
@ExcelProperty(value = "抢修类型1电力2设备3供水4网络5设施")
private String type;
/**
* 报修名称
*/
@ExcelProperty(value = "报修名称")
private String name;
/**
* 指派维修人
*/
@ExcelProperty(value = "指派维修人")
private Long sendPerson;
private OpsUserVo sendPersonVo;
/**
* 详细信息
*/
@ExcelProperty(value = "详细信息")
private String reportInfo;
/**
* 故障位置
*/
@ExcelProperty(value = "故障位置")
private String position;
/**
* 文件IDS
*/
@ExcelProperty(value = "文件IDS")
private String fileId;
/**
* 文件路径
*/
@ExcelProperty(value = "文件路径")
private String fileUrl;
/**
* 报修人姓名
*/
@ExcelProperty(value = "报修人姓名")
private String reportName;
/**
* 报修人联系电话
*/
@ExcelProperty(value = "报修人联系电话")
private String reportPhone;
/**
* 维修结果
*/
// @ExcelProperty(value = "维修结果")
// private String reportFinal;
/**
* 预计完成时间
*/
@ExcelProperty(value = "预计完成时间")
private String expectedTime;
/**
* 完成时间
*/
@ExcelProperty(value = "完成时间")
private Date reportFinishTime;
/**
* 支援,1需要2不需要
*/
@ExcelProperty(value = "支援,1需要2不需要")
private String support;
/**
* 分钟数
*/
private String minute;
private Date createTime;
}

View File

@ -0,0 +1,30 @@
package org.dromara.inspection.domain.vo;
import lombok.Data;
@Data
public class OpsInspectionReportRecordVo {
//本月总报修数
private String byzbxs;
//报修数较上周增长率
private String bxsjszzzl;
//平均处理时长
private String pjclsc;
//处理时长较上周增长率
private String clscjszzzl;
//待处理报修
private String dclbx;
//完成率
private String wcl;
//完成率较上周增长率
private String wcljszzzl;
}

View File

@ -0,0 +1,119 @@
package org.dromara.inspection.domain.vo;
import org.dromara.inspection.domain.OpsInspectionReport;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
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_report
*
* @author LionLi
* @date 2025-09-22
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = OpsInspectionReport.class)
public class OpsInspectionReportVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@ExcelProperty(value = "")
private Long id;
/**
* 项目ID(电站ID)
*/
private Long projectId;
/**
* 1低优先2中优先3高优先
*/
@ExcelProperty(value = "1低优先2中优先3高优先")
private String level;
/**
* 1待处理2处理中3已完成
*/
@ExcelProperty(value = "1待处理2处理中3已完成")
private String status;
/**
* 报修类型1硬件2软件
*/
@ExcelProperty(value = "报修类型1硬件2软件")
private String type;
/**
* 报修名称
*/
@ExcelProperty(value = "报修名称")
private String name;
/**
* 指派维修人ID
*/
@ExcelProperty(value = "指派维修人")
private Long sendPerson;
/**
* 指派维修人
*/
private OpsUserVo sendPersonVo;
/**
* 详细信息
*/
@ExcelProperty(value = "详细信息")
private String reportInfo;
/**
* 故障位置
*/
@ExcelProperty(value = "故障位置")
private String position;
/**
* 文件ID
*/
@ExcelProperty(value = "文件ID")
private String fileId;
/**
* 文件路径
*/
@ExcelProperty(value = "文件路径")
private String fileUrl;
/**
* 报修人姓名
*/
@ExcelProperty(value = "报修人姓名")
private String reportName;
/**
* 报修人联系电话
*/
@ExcelProperty(value = "报修人联系电话")
private String reportPhone;
@ExcelProperty(value = "维修结果")
private String reportFinal;
@ExcelProperty(value = "完成时间")
private Date reportFinishTime;
private Date createTime;
}

View File

@ -0,0 +1,110 @@
package org.dromara.inspection.domain.vo;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.inspection.domain.OpsInspectionTask;
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_task
*
* @author LionLi
* @date 2025-09-20
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = OpsInspectionTask.class)
public class OpsInspectionTaskVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "")
private Long id;
private Long projectId;
/**
* 任务名
*/
@ExcelProperty(value = "任务名")
private String taskName;
/**
* 巡检对象
*/
@ExcelProperty(value = "巡检对象")
private String inspectionObject;
/**
*
*/
@ExcelProperty(value = "")
private Date beginTime;
/**
*
*/
@ExcelProperty(value = "")
private Date endTime;
/**
* 时间段
*/
@ExcelProperty(value = "时间段")
private String timeInfo;
/**
* 计划ID
*/
@ExcelProperty(value = "计划ID")
private Long planId;
private OpsInspectionPlanVo plan;
/**
* 执行人ID
*/
@ExcelProperty(value = "执行人ID")
private Long personId;
private OpsUserVo person;
/**
* 进度
*/
private BigDecimal taskProgress;
/**
* 状态 1待执行2已延期3执行中4已完成
*/
private String taskType;
/**
* 发现问题种类,1磁盘使用率2内存使用率3服务状态4响应时间5设备运行状态
*/
private String problemType;
private Date finishTime;
private Date createTime;
}

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.OpsInspectionItem;
import org.dromara.inspection.domain.vo.OpsInspectionItemVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 运维-巡检-自定义巡检项Mapper接口
*
* @author LionLi
* @date 2025-09-19
*/
public interface OpsInspectionItemMapper extends BaseMapperPlus<OpsInspectionItem, OpsInspectionItemVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.inspection.mapper;
import org.dromara.inspection.domain.OpsInspectionMatter;
import org.dromara.inspection.domain.vo.OpsInspectionMatterVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 运维-巡检-待办Mapper接口
*
* @author LionLi
* @date 2025-09-19
*/
public interface OpsInspectionMatterMapper extends BaseMapperPlus<OpsInspectionMatter, OpsInspectionMatterVo> {
}

View File

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

View File

@ -0,0 +1,15 @@
package org.dromara.inspection.mapper;
import org.dromara.inspection.domain.OpsInspectionRepair;
import org.dromara.inspection.domain.vo.OpsInspectionRepairVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 运维-巡检-抢修Mapper接口
*
* @author LionLi
* @date 2025-09-22
*/
public interface OpsInspectionRepairMapper extends BaseMapperPlus<OpsInspectionRepair, OpsInspectionRepairVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.inspection.mapper;
import org.dromara.inspection.domain.OpsInspectionReport;
import org.dromara.inspection.domain.vo.OpsInspectionReportVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 运维-巡检-报修Mapper接口
*
* @author LionLi
* @date 2025-09-22
*/
public interface OpsInspectionReportMapper extends BaseMapperPlus<OpsInspectionReport, OpsInspectionReportVo> {
}

View File

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

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.OpsInspectionItem;
import org.dromara.inspection.domain.vo.OpsInspectionItemVo;
import org.dromara.inspection.domain.bo.OpsInspectionItemBo;
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-19
*/
public interface IOpsInspectionItemService {
/**
* 查询运维-巡检-自定义巡检项
*
* @param id 主键
* @return 运维-巡检-自定义巡检项
*/
OpsInspectionItemVo queryById(Long id);
/**
* 分页查询运维-巡检-自定义巡检项列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 运维-巡检-自定义巡检项分页列表
*/
TableDataInfo<OpsInspectionItemVo> queryPageList(OpsInspectionItemBo bo, PageQuery pageQuery);
/**
* 查询符合条件的运维-巡检-自定义巡检项列表
*
* @param bo 查询条件
* @return 运维-巡检-自定义巡检项列表
*/
List<OpsInspectionItemVo> queryList(OpsInspectionItemBo bo);
/**
* 新增运维-巡检-自定义巡检项
*
* @param bo 运维-巡检-自定义巡检项
* @return 是否新增成功
*/
Boolean insertByBo(OpsInspectionItemBo bo);
/**
* 修改运维-巡检-自定义巡检项
*
* @param bo 运维-巡检-自定义巡检项
* @return 是否修改成功
*/
Boolean updateByBo(OpsInspectionItemBo bo);
/**
* 校验并批量删除运维-巡检-自定义巡检项信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

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

View File

@ -0,0 +1,68 @@
package org.dromara.inspection.service;
import org.dromara.inspection.domain.vo.OpsInspectionRepairVo;
import org.dromara.inspection.domain.bo.OpsInspectionRepairBo;
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-22
*/
public interface IOpsInspectionRepairService {
/**
* 查询运维-巡检-抢修
*
* @param id 主键
* @return 运维-巡检-抢修
*/
OpsInspectionRepairVo queryById(Long id);
/**
* 分页查询运维-巡检-抢修列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 运维-巡检-抢修分页列表
*/
TableDataInfo<OpsInspectionRepairVo> queryPageList(OpsInspectionRepairBo bo, PageQuery pageQuery);
/**
* 查询符合条件的运维-巡检-抢修列表
*
* @param bo 查询条件
* @return 运维-巡检-抢修列表
*/
List<OpsInspectionRepairVo> queryList(OpsInspectionRepairBo bo);
/**
* 新增运维-巡检-抢修
*
* @param bo 运维-巡检-抢修
* @return 是否新增成功
*/
Boolean insertByBo(OpsInspectionRepairBo bo);
/**
* 修改运维-巡检-抢修
*
* @param bo 运维-巡检-抢修
* @return 是否修改成功
*/
Boolean updateByBo(OpsInspectionRepairBo 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.vo.OpsInspectionReportVo;
import org.dromara.inspection.domain.bo.OpsInspectionReportBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.springframework.web.multipart.MultipartFile;
import java.util.Collection;
import java.util.List;
/**
* 运维-巡检-报修Service接口
*
* @author LionLi
* @date 2025-09-22
*/
public interface IOpsInspectionReportService {
/**
* 查询运维-巡检-报修
*
* @param id 主键
* @return 运维-巡检-报修
*/
OpsInspectionReportVo queryById(Long id);
/**
* 分页查询运维-巡检-报修列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 运维-巡检-报修分页列表
*/
TableDataInfo<OpsInspectionReportVo> queryPageList(OpsInspectionReportBo bo, PageQuery pageQuery);
/**
* 查询符合条件的运维-巡检-报修列表
*
* @param bo 查询条件
* @return 运维-巡检-报修列表
*/
List<OpsInspectionReportVo> queryList(OpsInspectionReportBo bo);
/**
* 新增运维-巡检-报修
*
* @param bo 运维-巡检-报修
* @return 是否新增成功
*/
Boolean insertByBo(OpsInspectionReportBo bo);
/**
* 修改运维-巡检-报修
*
* @param bo 运维-巡检-报修
* @return 是否修改成功
*/
Boolean updateByBo(OpsInspectionReportBo 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.OpsInspectionTask;
import org.dromara.inspection.domain.vo.OpsInspectionTaskVo;
import org.dromara.inspection.domain.bo.OpsInspectionTaskBo;
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 IOpsInspectionTaskService {
/**
* 查询运维-巡检计划-任务
*
* @param id 主键
* @return 运维-巡检计划-任务
*/
OpsInspectionTaskVo queryById(Long id);
/**
* 分页查询运维-巡检计划-任务列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 运维-巡检计划-任务分页列表
*/
TableDataInfo<OpsInspectionTaskVo> queryPageList(OpsInspectionTaskBo bo, PageQuery pageQuery);
/**
* 查询符合条件的运维-巡检计划-任务列表
*
* @param bo 查询条件
* @return 运维-巡检计划-任务列表
*/
List<OpsInspectionTaskVo> queryList(OpsInspectionTaskBo bo);
/**
* 新增运维-巡检计划-任务
*
* @param bo 运维-巡检计划-任务
* @return 是否新增成功
*/
Boolean insertByBo(OpsInspectionTaskBo bo);
/**
* 修改运维-巡检计划-任务
*
* @param bo 运维-巡检计划-任务
* @return 是否修改成功
*/
Boolean updateByBo(OpsInspectionTaskBo 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.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

@ -0,0 +1,134 @@
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.OpsInspectionItemBo;
import org.dromara.inspection.domain.vo.OpsInspectionItemVo;
import org.dromara.inspection.domain.OpsInspectionItem;
import org.dromara.inspection.mapper.OpsInspectionItemMapper;
import org.dromara.inspection.service.IOpsInspectionItemService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 运维-巡检-自定义巡检项Service业务层处理
*
* @author LionLi
* @date 2025-09-19
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class OpsInspectionItemServiceImpl implements IOpsInspectionItemService {
private final OpsInspectionItemMapper baseMapper;
/**
* 查询运维-巡检-自定义巡检项
*
* @param id 主键
* @return 运维-巡检-自定义巡检项
*/
@Override
public OpsInspectionItemVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询运维-巡检-自定义巡检项列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 运维-巡检-自定义巡检项分页列表
*/
@Override
public TableDataInfo<OpsInspectionItemVo> queryPageList(OpsInspectionItemBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<OpsInspectionItem> lqw = buildQueryWrapper(bo);
Page<OpsInspectionItemVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的运维-巡检-自定义巡检项列表
*
* @param bo 查询条件
* @return 运维-巡检-自定义巡检项列表
*/
@Override
public List<OpsInspectionItemVo> queryList(OpsInspectionItemBo bo) {
LambdaQueryWrapper<OpsInspectionItem> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<OpsInspectionItem> buildQueryWrapper(OpsInspectionItemBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<OpsInspectionItem> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(OpsInspectionItem::getId);
lqw.eq(bo.getProjectId() != null, OpsInspectionItem::getProjectId, bo.getProjectId());
lqw.like(StringUtils.isNotBlank(bo.getName()), OpsInspectionItem::getName, bo.getName());
lqw.eq(StringUtils.isNotBlank(bo.getType()), OpsInspectionItem::getType, bo.getType());
return lqw;
}
/**
* 新增运维-巡检-自定义巡检项
*
* @param bo 运维-巡检-自定义巡检项
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(OpsInspectionItemBo bo) {
OpsInspectionItem add = MapstructUtils.convert(bo, OpsInspectionItem.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改运维-巡检-自定义巡检项
*
* @param bo 运维-巡检-自定义巡检项
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(OpsInspectionItemBo bo) {
OpsInspectionItem update = MapstructUtils.convert(bo, OpsInspectionItem.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(OpsInspectionItem entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除运维-巡检-自定义巡检项信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -0,0 +1,139 @@
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.OpsInspectionMatterBo;
import org.dromara.inspection.domain.vo.OpsInspectionMatterVo;
import org.dromara.inspection.domain.OpsInspectionMatter;
import org.dromara.inspection.mapper.OpsInspectionMatterMapper;
import org.dromara.inspection.service.IOpsInspectionMatterService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 运维-巡检-待办Service业务层处理
*
* @author LionLi
* @date 2025-09-19
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class OpsInspectionMatterServiceImpl implements IOpsInspectionMatterService {
private final OpsInspectionMatterMapper baseMapper;
/**
* 查询运维-巡检-待办
*
* @param id 主键
* @return 运维-巡检-待办
*/
@Override
public OpsInspectionMatterVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询运维-巡检-待办列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 运维-巡检-待办分页列表
*/
@Override
public TableDataInfo<OpsInspectionMatterVo> queryPageList(OpsInspectionMatterBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<OpsInspectionMatter> lqw = buildQueryWrapper(bo);
Page<OpsInspectionMatterVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的运维-巡检-待办列表
*
* @param bo 查询条件
* @return 运维-巡检-待办列表
*/
@Override
public List<OpsInspectionMatterVo> queryList(OpsInspectionMatterBo bo) {
LambdaQueryWrapper<OpsInspectionMatter> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<OpsInspectionMatter> buildQueryWrapper(OpsInspectionMatterBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<OpsInspectionMatter> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(OpsInspectionMatter::getId);
lqw.eq(bo.getProjectId() != null, OpsInspectionMatter::getProjectId, bo.getProjectId());
lqw.like(StringUtils.isNotBlank(bo.getTaskName()), OpsInspectionMatter::getTaskName, bo.getTaskName());
lqw.eq(StringUtils.isNotBlank(bo.getDescribeValue()), OpsInspectionMatter::getDescribeValue, bo.getDescribeValue());
lqw.eq(bo.getTaskBeginTime() != null, OpsInspectionMatter::getTaskBeginTime, bo.getTaskBeginTime());
lqw.eq(bo.getTaskEndTime() != null, OpsInspectionMatter::getTaskEndTime, bo.getTaskEndTime());
lqw.eq(StringUtils.isNotBlank(bo.getTaskTimeInfo()), OpsInspectionMatter::getTaskTimeInfo, bo.getTaskTimeInfo());
lqw.eq(StringUtils.isNotBlank(bo.getTaskLevel()), OpsInspectionMatter::getTaskLevel, bo.getTaskLevel());
lqw.eq(StringUtils.isNotBlank(bo.getTaskType()), OpsInspectionMatter::getTaskType, bo.getTaskType());
return lqw;
}
/**
* 新增运维-巡检-待办
*
* @param bo 运维-巡检-待办
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(OpsInspectionMatterBo bo) {
OpsInspectionMatter add = MapstructUtils.convert(bo, OpsInspectionMatter.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改运维-巡检-待办
*
* @param bo 运维-巡检-待办
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(OpsInspectionMatterBo bo) {
OpsInspectionMatter update = MapstructUtils.convert(bo, OpsInspectionMatter.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(OpsInspectionMatter entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除运维-巡检-待办信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -0,0 +1,167 @@
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;
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.personnel.domain.OpsUser;
import org.dromara.personnel.service.impl.OpsUserServiceImpl;
import org.dromara.system.api.RemoteUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.dromara.inspection.domain.bo.OpsInspectionPlanBo;
import org.dromara.inspection.domain.vo.OpsInspectionPlanVo;
import org.dromara.inspection.domain.OpsInspectionPlan;
import org.dromara.inspection.mapper.OpsInspectionPlanMapper;
import org.dromara.inspection.service.IOpsInspectionPlanService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 运维-巡检-计划Service业务层处理
*
* @author LionLi
* @date 2025-09-19
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class OpsInspectionPlanServiceImpl implements IOpsInspectionPlanService {
@DubboReference
private RemoteUserService remoteUserService;
@Autowired
private OpsUserServiceImpl opsUserService;
private final OpsInspectionPlanMapper baseMapper;
/**
* 查询运维-巡检-计划
*
* @param id 主键
* @return 运维-巡检-计划
*/
@Override
public OpsInspectionPlanVo queryById(Long id){
OpsInspectionPlanVo opsInspectionPlanVo = baseMapper.selectVoById(id);
if (opsInspectionPlanVo == null){
return null;
}
List<OpsInspectionPlanVo> opsInspectionPlanVo1 = List.of(opsInspectionPlanVo);
setValue(opsInspectionPlanVo1);
return opsInspectionPlanVo1.getFirst();
}
/**
* 分页查询运维-巡检-计划列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 运维-巡检-计划分页列表
*/
@Override
public TableDataInfo<OpsInspectionPlanVo> queryPageList(OpsInspectionPlanBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<OpsInspectionPlan> lqw = buildQueryWrapper(bo);
Page<OpsInspectionPlanVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
setValue(result.getRecords());
return TableDataInfo.build(result);
}
/**
* 查询符合条件的运维-巡检-计划列表
*
* @param bo 查询条件
* @return 运维-巡检-计划列表
*/
@Override
public List<OpsInspectionPlanVo> queryList(OpsInspectionPlanBo bo) {
LambdaQueryWrapper<OpsInspectionPlan> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<OpsInspectionPlan> buildQueryWrapper(OpsInspectionPlanBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<OpsInspectionPlan> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(OpsInspectionPlan::getId);
lqw.eq(bo.getProjectId() != null, OpsInspectionPlan::getProjectId, bo.getProjectId());
lqw.eq(StringUtils.isNotBlank(bo.getPlanType()), OpsInspectionPlan::getPlanType, bo.getPlanType());
lqw.eq(StringUtils.isNotBlank(bo.getObjectType()), OpsInspectionPlan::getObjectType, bo.getObjectType());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), OpsInspectionPlan::getStatus, bo.getStatus());
return lqw;
}
/**
* 新增运维-巡检-计划
*
* @param bo 运维-巡检-计划
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(OpsInspectionPlanBo bo) {
OpsInspectionPlan add = MapstructUtils.convert(bo, OpsInspectionPlan.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改运维-巡检-计划
*
* @param bo 运维-巡检-计划
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(OpsInspectionPlanBo bo) {
OpsInspectionPlan update = MapstructUtils.convert(bo, OpsInspectionPlan.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(OpsInspectionPlan 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<OpsInspectionPlanVo> list){
list.forEach(record -> {
OpsUser byId = opsUserService.getById(record.getPerson());
if (byId != null){
record.setNickName(byId.getUserName());
}else{
record.setNickName("未知用户");
}
});
}
}

View File

@ -0,0 +1,331 @@
package org.dromara.inspection.service.impl;
import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.seata.spring.annotation.GlobalTransactional;
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.bo.OpsInspectionReportBo;
import org.dromara.inspection.domain.vo.OpsInspectionReportRecordVo;
import org.dromara.inspection.domain.vo.OpsInspectionReportVo;
import org.dromara.inspection.service.IOpsInspectionRepairService;
import org.dromara.personnel.domain.vo.OpsUserVo;
import org.dromara.personnel.service.impl.OpsUserServiceImpl;
import org.dromara.resource.api.RemoteFileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.dromara.inspection.domain.bo.OpsInspectionRepairBo;
import org.dromara.inspection.domain.vo.OpsInspectionRepairVo;
import org.dromara.inspection.domain.OpsInspectionRepair;
import org.dromara.inspection.mapper.OpsInspectionRepairMapper;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* 运维-巡检-抢修Service业务层处理
*
* @author LionLi
* @date 2025-09-22
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class OpsInspectionRepairServiceImpl implements IOpsInspectionRepairService {
private final OpsInspectionRepairMapper baseMapper;
@DubboReference
private RemoteFileService remoteFileService;
@Autowired
private OpsUserServiceImpl opsUserService;
/**
* 查询运维-巡检-抢修
*
* @param id 主键
* @return 运维-巡检-抢修
*/
@Override
public OpsInspectionRepairVo queryById(Long id){
OpsInspectionRepairVo vo = baseMapper.selectVoById(id);
List<OpsInspectionRepairVo> vo1 = List.of(vo);
setValue(vo1);
return vo1.getFirst();
}
/**
* 分页查询运维-巡检-抢修列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 运维-巡检-抢修分页列表
*/
@Override
public TableDataInfo<OpsInspectionRepairVo> queryPageList(OpsInspectionRepairBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<OpsInspectionRepair> lqw = buildQueryWrapper(bo);
Page<OpsInspectionRepairVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
setValue(result.getRecords());
return TableDataInfo.build(result);
}
/**
* 查询符合条件的运维-巡检-抢修列表
*
* @param bo 查询条件
* @return 运维-巡检-抢修列表
*/
@Override
public List<OpsInspectionRepairVo> queryList(OpsInspectionRepairBo bo) {
LambdaQueryWrapper<OpsInspectionRepair> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<OpsInspectionRepair> buildQueryWrapper(OpsInspectionRepairBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<OpsInspectionRepair> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(OpsInspectionRepair::getId);
lqw.eq(bo.getProjectId() != null, OpsInspectionRepair::getProjectId, bo.getProjectId());
lqw.eq(StringUtils.isNotBlank(bo.getLevel()), OpsInspectionRepair::getLevel, bo.getLevel());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), OpsInspectionRepair::getStatus, bo.getStatus());
lqw.eq(StringUtils.isNotBlank(bo.getType()), OpsInspectionRepair::getType, bo.getType());
return lqw;
}
/**
* 新增运维-巡检-抢修
*
* @param bo 运维-巡检-抢修
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(OpsInspectionRepairBo bo) {
OpsInspectionRepair add = MapstructUtils.convert(bo, OpsInspectionRepair.class);
validEntityBeforeSave(add);
if (add.getFileId() != null){
String[] split = add.getFileId().split(",");
List<String> urls = new ArrayList<>();
for (String s : split) {
String ossUrl = remoteFileService.selectUrlByIds(s);
if (ossUrl != null){
urls.add(ossUrl);
}
}
String join = String.join(",", urls);
add.setFileUrl(join);
bo.setFileUrl(join);
}
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改运维-巡检-抢修
*
* @param bo 运维-巡检-抢修
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(OpsInspectionRepairBo bo) {
OpsInspectionRepair update = MapstructUtils.convert(bo, OpsInspectionRepair.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(OpsInspectionRepair entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除运维-巡检-抢修信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
@GlobalTransactional
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
List<String> urls = new ArrayList<>();
for (Long id : ids) {
OpsInspectionRepairVo vo = queryById(id);
if (vo != null){
if (vo.getFileUrl()!=null) {
urls.add(vo.getFileUrl());
}
}
}
if (!urls.isEmpty()) {
for (String url : urls) {
List<String> list = Arrays.asList(url.split(","));
remoteFileService.deleteFile(list);
}
}
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 处理回显数据
*/
private void setValue(List<OpsInspectionRepairVo> list){
if (list == null || list.isEmpty()){
return;
}
for (OpsInspectionRepairVo vo : list) {
if (vo.getSendPerson() == null){
continue;
}
OpsUserVo opsUserVo = opsUserService.queryById(vo.getSendPerson());
if (opsUserVo == null){
continue;
}
vo.setSendPersonVo(opsUserVo);
//处理分钟数
if (vo.getStatus().equals("3")){
long time = vo.getReportFinishTime().getTime() - vo.getCreateTime().getTime();
vo.setMinute(String.valueOf(TimeUnit.MILLISECONDS.toMinutes( time)));
}
}
}
public R<OpsInspectionReportRecordVo> record(Long projectId) {
//变量初始化
OpsInspectionReportRecordVo recordVo = new OpsInspectionReportRecordVo();
OpsInspectionRepairBo bo = new OpsInspectionRepairBo();
bo.setProjectId(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());
//查询当前项目的报修数据
List<OpsInspectionRepairVo> vos = queryList(bo);
//过滤本月数据
List<OpsInspectionRepairVo> thisMonth = vos.stream()
.filter(vo -> vo.getCreateTime().after(startDate))
.filter(vo -> vo.getCreateTime().before(endDate))
.toList();
//本月总报修数
recordVo.setByzbxs(String.valueOf(thisMonth.size()));
//平均处理时长 完成时间-创建时间 转为 分钟 / 总报
Long time = 0L;//总共完成时间
for (OpsInspectionRepairVo vo : thisMonth) {
if (vo.getStatus().equals("3")){
time += vo.getReportFinishTime().getTime() - vo.getCreateTime().getTime();
}
}
time = TimeUnit.MILLISECONDS.toMinutes(time);
BigDecimal divide1 = BigDecimal.valueOf(time).divide(BigDecimal.valueOf(thisMonth.size()), 0, RoundingMode.HALF_UP);
long hours = TimeUnit.MINUTES.toHours(Long.parseLong(divide1.toString()));
//平均处理时长
recordVo.setPjclsc(Long.toString(hours));
//待处理报修
int size = thisMonth.stream().filter(vo -> vo.getStatus().equals("1")).toList().size();
recordVo.setDclbx(String.valueOf(size));
//完成率
//完成数
int finishCount = thisMonth.stream().filter(vo -> vo.getStatus().equals("3")).toList().size();
BigDecimal divide = BigDecimal.valueOf(finishCount).divide(BigDecimal.valueOf(thisMonth.size()), 2, RoundingMode.HALF_UP);
recordVo.setWcl(divide.multiply(new BigDecimal("100")).toString());
//统计上一月的数据
firstDay = LocalDate.now().minusMonths(1).withDayOfMonth(1);
lastDay = firstDay.plusMonths(1).minusDays(1);
Date finalStartDate = Date.from(firstDay.atStartOfDay(ZoneId.systemDefault()).toInstant());
Date finalEndDate = Date.from(lastDay.atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant());
thisMonth = vos.stream()
.filter(vo -> vo.getCreateTime().after(finalStartDate))
.filter(vo -> vo.getCreateTime().before(finalEndDate))
.toList();
//上一月总报修数
Long lastMonth = (long) thisMonth.size();
//上一月平均处理时长
BigDecimal avg;
time = 0L;
for (OpsInspectionRepairVo vo : thisMonth) {
if (vo.getStatus().equals("3")){
time += vo.getReportFinishTime().getTime() - vo.getCreateTime().getTime();
}
}
time = TimeUnit.MILLISECONDS.toMinutes(time);
if (thisMonth.isEmpty()){
avg = BigDecimal.ZERO;
}else {
avg = BigDecimal.valueOf(time).divide(BigDecimal.valueOf(thisMonth.size()),2, RoundingMode.HALF_UP);
}
//上一月完成率
finishCount = thisMonth.stream().filter(vo -> vo.getStatus().equals("3")).toList().size();
if (!thisMonth.isEmpty()) {
divide = BigDecimal.valueOf(finishCount).divide(BigDecimal.valueOf(thisMonth.size()), 2, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
}else {
divide = BigDecimal.ZERO;
}
//总报修数增长率
BigDecimal multiply;
if (lastMonth != 0) {
multiply = BigDecimal.valueOf(Long.parseLong(recordVo.getByzbxs())).divide(BigDecimal.valueOf(lastMonth), 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
}else {
multiply = BigDecimal.ZERO;
}
recordVo.setBxsjszzzl(multiply.toString());
//平均处理时长增长率 本月 / 上月 * 100
if (!avg.equals(BigDecimal.ZERO)) {
recordVo.setClscjszzzl(BigDecimal.valueOf(Long.parseLong(recordVo.getPjclsc())).divide(avg, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).toString());
}else{
recordVo.setClscjszzzl("0");
}
//完成率增长率 本月 / 上月 * 100
if (!divide.equals(BigDecimal.ZERO)) {
recordVo.setWcljszzzl(BigDecimal.valueOf(Long.parseLong(recordVo.getWcl())).divide(divide, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).toString());
}else {
recordVo.setWcljszzzl("0");
}
return R.ok(recordVo);
}
}

View File

@ -0,0 +1,337 @@
package org.dromara.inspection.service.impl;
import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.dubbo.config.annotation.DubboService;
import org.apache.seata.spring.annotation.GlobalTransactional;
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.OpsInspectionReportRecordVo;
import org.dromara.personnel.domain.vo.OpsUserVo;
import org.dromara.personnel.service.impl.OpsUserServiceImpl;
import org.dromara.resource.api.RemoteFileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.dromara.inspection.domain.bo.OpsInspectionReportBo;
import org.dromara.inspection.domain.vo.OpsInspectionReportVo;
import org.dromara.inspection.domain.OpsInspectionReport;
import org.dromara.inspection.mapper.OpsInspectionReportMapper;
import org.dromara.inspection.service.IOpsInspectionReportService;
import org.springframework.web.multipart.MultipartFile;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* 运维-巡检-报修Service业务层处理
*
* @author LionLi
* @date 2025-09-22
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class OpsInspectionReportServiceImpl implements IOpsInspectionReportService {
private final OpsInspectionReportMapper baseMapper;
@DubboReference
private RemoteFileService remoteFileService;
@Autowired
private OpsUserServiceImpl opsUserService;
/**
* 查询运维-巡检-报修
*
* @param id 主键
* @return 运维-巡检-报修
*/
@Override
public OpsInspectionReportVo queryById(Long id){
OpsInspectionReportVo opsInspectionReportVo = baseMapper.selectVoById(id);
List<OpsInspectionReportVo> opsInspectionReportVo1 = List.of(opsInspectionReportVo);
setValue(opsInspectionReportVo1);
return opsInspectionReportVo1.getFirst();
}
/**
* 分页查询运维-巡检-报修列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 运维-巡检-报修分页列表
*/
@Override
public TableDataInfo<OpsInspectionReportVo> queryPageList(OpsInspectionReportBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<OpsInspectionReport> lqw = buildQueryWrapper(bo);
Page<OpsInspectionReportVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
setValue(result.getRecords());
return TableDataInfo.build(result);
}
/**
* 查询符合条件的运维-巡检-报修列表
*
* @param bo 查询条件
* @return 运维-巡检-报修列表
*/
@Override
public List<OpsInspectionReportVo> queryList(OpsInspectionReportBo bo) {
LambdaQueryWrapper<OpsInspectionReport> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<OpsInspectionReport> buildQueryWrapper(OpsInspectionReportBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<OpsInspectionReport> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(OpsInspectionReport::getId);
lqw.eq(bo.getProjectId() != null, OpsInspectionReport::getProjectId, bo.getProjectId());
lqw.eq(StringUtils.isNotBlank(bo.getLevel()), OpsInspectionReport::getLevel, bo.getLevel());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), OpsInspectionReport::getStatus, bo.getStatus());
lqw.eq(StringUtils.isNotBlank(bo.getType()), OpsInspectionReport::getType, bo.getType());
lqw.like(StringUtils.isNotBlank(bo.getName()), OpsInspectionReport::getName, bo.getName());
lqw.eq(bo.getSendPerson() != null, OpsInspectionReport::getSendPerson, bo.getSendPerson());
lqw.eq(StringUtils.isNotBlank(bo.getReportInfo()), OpsInspectionReport::getReportInfo, bo.getReportInfo());
lqw.eq(StringUtils.isNotBlank(bo.getPosition()), OpsInspectionReport::getPosition, bo.getPosition());
lqw.eq(bo.getFileId() != null, OpsInspectionReport::getFileId, bo.getFileId());
lqw.eq(StringUtils.isNotBlank(bo.getFileUrl()), OpsInspectionReport::getFileUrl, bo.getFileUrl());
lqw.like(StringUtils.isNotBlank(bo.getReportName()), OpsInspectionReport::getReportName, bo.getReportName());
lqw.eq(StringUtils.isNotBlank(bo.getReportPhone()), OpsInspectionReport::getReportPhone, bo.getReportPhone());
return lqw;
}
/**
* 新增运维-巡检-报修
*
* @param bo 运维-巡检-报修
* @return 是否新增成功
*/
@Override
@GlobalTransactional
public Boolean insertByBo(OpsInspectionReportBo bo) {
OpsInspectionReport add = MapstructUtils.convert(bo, OpsInspectionReport.class);
validEntityBeforeSave(add);
if (add == null){
return false;
}
if (add.getFileId() != null){
String[] split = add.getFileId().split(",");
List<String> urls = new ArrayList<>();
for (String s : split) {
String ossUrl = remoteFileService.selectUrlByIds(s);
if (ossUrl != null){
urls.add(ossUrl);
}
}
String join = String.join(",", urls);
add.setFileUrl(join);
bo.setFileUrl(join);
}
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改运维-巡检-报修
*
* @param bo 运维-巡检-报修
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(OpsInspectionReportBo bo) {
OpsInspectionReport update = MapstructUtils.convert(bo, OpsInspectionReport.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(OpsInspectionReport entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除运维-巡检-报修信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
@GlobalTransactional
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
List<String> urls = new ArrayList<>();
for (Long id : ids) {
OpsInspectionReportVo opsInspectionReportVo = queryById(id);
if (opsInspectionReportVo != null){
if (opsInspectionReportVo.getFileUrl()!=null) {
urls.add(opsInspectionReportVo.getFileUrl());
}
}
}
if (!urls.isEmpty()) {
for (String url : urls) {
List<String> list = Arrays.asList(url.split(","));
remoteFileService.deleteFile(list);
}
}
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 处理回显数据
*/
private void setValue(List<OpsInspectionReportVo> list){
if (list == null || list.isEmpty()){
return;
}
for (OpsInspectionReportVo vo : list) {
if (vo.getSendPerson() == null){
continue;
}
OpsUserVo opsUserVo = opsUserService.queryById(vo.getSendPerson());
if (opsUserVo == null){
continue;
}
vo.setSendPersonVo(opsUserVo);
}
}
public R<OpsInspectionReportRecordVo> record(Long projectId) {
//变量初始化
OpsInspectionReportRecordVo recordVo = new OpsInspectionReportRecordVo();
OpsInspectionReportBo bo = new OpsInspectionReportBo();
bo.setProjectId(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());
//查询当前项目的报修数据
List<OpsInspectionReportVo> opsInspectionReportVos = queryList(bo);
//过滤本月数据
List<OpsInspectionReportVo> thisMonth = opsInspectionReportVos.stream()
.filter(vo -> vo.getCreateTime().after(startDate))
.filter(vo -> vo.getCreateTime().before(endDate))
.toList();
//本月总报修数
recordVo.setByzbxs(String.valueOf(thisMonth.size()));
//平均处理时长 完成时间-创建时间 转为 分钟 / 总报
Long time = 0L;//总共完成时间
for (OpsInspectionReportVo vo : thisMonth) {
if (vo.getStatus().equals("3")){
time += vo.getReportFinishTime().getTime() - vo.getCreateTime().getTime();
}
}
time = TimeUnit.MILLISECONDS.toMinutes(time);
BigDecimal divide1 = BigDecimal.valueOf(time).divide(BigDecimal.valueOf(thisMonth.size()), 0, RoundingMode.HALF_UP);
long hours = TimeUnit.MINUTES.toHours(Long.parseLong(divide1.toString()));
//平均处理时长
recordVo.setPjclsc(Long.toString(hours));
//待处理报修
int size = thisMonth.stream().filter(vo -> vo.getStatus().equals("1")).toList().size();
recordVo.setDclbx(String.valueOf(size));
//完成率
//完成数
int finishCount = thisMonth.stream().filter(vo -> vo.getStatus().equals("3")).toList().size();
BigDecimal divide = BigDecimal.valueOf(finishCount).divide(BigDecimal.valueOf(thisMonth.size()), 2, RoundingMode.HALF_UP);
recordVo.setWcl(divide.multiply(new BigDecimal("100")).toString());
//统计上一月的数据
firstDay = LocalDate.now().minusMonths(1).withDayOfMonth(1);
lastDay = firstDay.plusMonths(1).minusDays(1);
Date finalStartDate = Date.from(firstDay.atStartOfDay(ZoneId.systemDefault()).toInstant());
Date finalEndDate = Date.from(lastDay.atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant());
thisMonth = opsInspectionReportVos.stream()
.filter(vo -> vo.getCreateTime().after(finalStartDate))
.filter(vo -> vo.getCreateTime().before(finalEndDate))
.toList();
//上一月总报修数
Long lastMonth = (long) thisMonth.size();
//上一月平均处理时长
BigDecimal avg;
time = 0L;
for (OpsInspectionReportVo vo : thisMonth) {
if (vo.getStatus().equals("3")){
time += vo.getReportFinishTime().getTime() - vo.getCreateTime().getTime();
}
}
time = TimeUnit.MILLISECONDS.toMinutes(time);
if (thisMonth.isEmpty()){
avg = BigDecimal.ZERO;
}else {
avg = BigDecimal.valueOf(time).divide(BigDecimal.valueOf(thisMonth.size()),2, RoundingMode.HALF_UP);
}
//上一月完成率
finishCount = thisMonth.stream().filter(vo -> vo.getStatus().equals("3")).toList().size();
if (!thisMonth.isEmpty()) {
divide = BigDecimal.valueOf(finishCount).divide(BigDecimal.valueOf(thisMonth.size()), 2, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
}else {
divide = BigDecimal.ZERO;
}
//总报修数增长率
BigDecimal multiply;
if (lastMonth != 0) {
multiply = BigDecimal.valueOf(Long.parseLong(recordVo.getByzbxs())).divide(BigDecimal.valueOf(lastMonth), 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
}else {
multiply = BigDecimal.ZERO;
}
recordVo.setBxsjszzzl(multiply.toString());
//平均处理时长增长率 本月 / 上月 * 100
if (!avg.equals(BigDecimal.ZERO)) {
recordVo.setClscjszzzl(BigDecimal.valueOf(Long.parseLong(recordVo.getPjclsc())).divide(avg, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).toString());
}else{
recordVo.setClscjszzzl("0");
}
//完成率增长率 本月 / 上月 * 100
if (!divide.equals(BigDecimal.ZERO)) {
recordVo.setWcljszzzl(BigDecimal.valueOf(Long.parseLong(recordVo.getWcl())).divide(divide, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).toString());
}else {
recordVo.setWcljszzzl("0");
}
return R.ok(recordVo);
}
}

View File

@ -0,0 +1,300 @@
package org.dromara.inspection.service.impl;
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.OpsInspectionPlanVo;
import org.dromara.inspection.domain.vo.OpsInspectionRecordVo;
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.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;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* 运维-巡检计划-任务Service业务层处理
*
* @author LionLi
* @date 2025-09-20
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class OpsInspectionTaskServiceImpl implements IOpsInspectionTaskService {
private final OpsInspectionTaskMapper baseMapper;
@Autowired
private OpsInspectionPlanServiceImpl opsInspectionPlanService;
@Autowired
private OpsUserServiceImpl opsUserService;
/**
* 查询运维-巡检计划-任务
*
* @param id 主键
* @return 运维-巡检计划-任务
*/
@Override
public OpsInspectionTaskVo queryById(Long id){
OpsInspectionTaskVo opsInspectionTaskVo = baseMapper.selectVoById(id);
List<OpsInspectionTaskVo> opsInspectionTaskVo1 = List.of(opsInspectionTaskVo);
buildEcho(opsInspectionTaskVo1);
return opsInspectionTaskVo1.getFirst();
}
/**
* 分页查询运维-巡检计划-任务列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 运维-巡检计划-任务分页列表
*/
@Override
public TableDataInfo<OpsInspectionTaskVo> queryPageList(OpsInspectionTaskBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<OpsInspectionTask> lqw = buildQueryWrapper(bo);
Page<OpsInspectionTaskVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
buildEcho(result.getRecords());
return TableDataInfo.build(result);
}
/**
* 查询符合条件的运维-巡检计划-任务列表
*
* @param bo 查询条件
* @return 运维-巡检计划-任务列表
*/
@Override
public List<OpsInspectionTaskVo> queryList(OpsInspectionTaskBo bo) {
LambdaQueryWrapper<OpsInspectionTask> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<OpsInspectionTask> buildQueryWrapper(OpsInspectionTaskBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<OpsInspectionTask> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getId() != null, OpsInspectionTask::getId, bo.getId());
lqw.eq(bo.getPersonId()!= null, OpsInspectionTask::getPersonId, bo.getPersonId());
lqw.orderByAsc(OpsInspectionTask::getId);
lqw.like(StringUtils.isNotBlank(bo.getTaskName()), OpsInspectionTask::getTaskName, bo.getTaskName());
lqw.like(StringUtils.isNotBlank(bo.getInspectionObject()), OpsInspectionTask::getInspectionObject, bo.getInspectionObject());
lqw.eq(bo.getBeginTime() != null, OpsInspectionTask::getBeginTime, bo.getBeginTime());
lqw.eq(bo.getEndTime() != null, OpsInspectionTask::getEndTime, bo.getEndTime());
lqw.eq(StringUtils.isNotBlank(bo.getTimeInfo()), OpsInspectionTask::getTimeInfo, bo.getTimeInfo());
lqw.eq(bo.getPlanId() != null, OpsInspectionTask::getPlanId, bo.getPlanId());
lqw.eq(bo.getProjectId() != null, OpsInspectionTask::getProjectId, bo.getProjectId());
lqw.eq(bo.getTaskType() != null, OpsInspectionTask::getTaskType, bo.getTaskType());
return lqw;
}
/**
* 新增运维-巡检计划-任务
*
* @param bo 运维-巡检计划-任务
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(OpsInspectionTaskBo bo) {
OpsInspectionTask add = MapstructUtils.convert(bo, OpsInspectionTask.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改运维-巡检计划-任务
*
* @param bo 运维-巡检计划-任务
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(OpsInspectionTaskBo bo) {
OpsInspectionTask update = MapstructUtils.convert(bo, OpsInspectionTask.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(OpsInspectionTask entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除运维-巡检计划-任务信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 巡检记录统计 1月 2周 3日
*/
public R<OpsInspectionRecordVo> record(String type,Long projectId){
//从任务列表中统计
OpsInspectionTaskBo opsInspectionTaskBo = new OpsInspectionTaskBo();
opsInspectionTaskBo.setProjectId(projectId);
List<OpsInspectionTaskVo> opsInspectionTaskVos = this.queryList(opsInspectionTaskBo);
Long cpsyl = 0L;
Long ncsyl = 0L;
Long fwzt = 0L;
Long xysj = 0L;
Long sbyxzt = 0L;
Date startDate;
Date endDate;
OpsInspectionRecordVo recordVo = new OpsInspectionRecordVo();
switch ( type){
//统计今天
case "1" ->{
// 设置时间范围今天的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());
}
//统计本周
case "2" ->{
LocalDate today = LocalDate.now();
LocalDate start = today.minusDays(today.getDayOfWeek().getValue() - 1);
LocalDate end = start.plusDays(6);
startDate = Date.from(start.atStartOfDay(ZoneId.systemDefault()).toInstant());
endDate = Date.from(end.atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant());
}
//统计本月
case "3" ->{
LocalDate firstDay = LocalDate.now().withDayOfMonth(1);
LocalDate lastDay = firstDay.plusMonths(1).minusDays(1);
startDate = Date.from(firstDay.atStartOfDay(ZoneId.systemDefault()).toInstant());
endDate = Date.from(lastDay.atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant());
}
default -> {
return R.fail("未知类型");
}
}
//完成巡检数
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);
//发现问题数 通过createTime统计
int problemCount = opsInspectionTaskVos.stream()
.filter(taskVo -> taskVo.getCreateTime().after(finalStartDate) && taskVo.getCreateTime().before(finalEndDate))
.toList().size();
recordVo.setProblemCount((long) problemCount);
//已解决数 获取列表以供通用
List<OpsInspectionTaskVo> 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());
// 计算总共耗时(毫秒)
long durationMillis = 0L;
for (OpsInspectionTaskVo opsInspectionTaskVo : list) {
durationMillis += opsInspectionTaskVo.getFinishTime().getTime() - opsInspectionTaskVo.getCreateTime().getTime();
}
//赋值分钟
if (list.isEmpty()){
recordVo.setAverageCompletionTime(0L);
}else {
recordVo.setAverageCompletionTime(TimeUnit.MILLISECONDS.toMinutes(durationMillis) / list.size());
}
//解决效率 已解决数 / 总共数量 * 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));
}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) {
if (opsInspectionTaskVo.getCreateTime().after(startDate) && opsInspectionTaskVo.getCreateTime().before(endDate)){
switch (opsInspectionTaskVo.getProblemType()){
case "1" -> cpsyl++;
case "2" -> ncsyl++;
case "3" -> fwzt++;
case "4" -> xysj++;
case "5" -> sbyxzt++;
}
}
}
recordVo.setCpsyl(cpsyl);
recordVo.setNcsyl(ncsyl);
recordVo.setFwzt(fwzt);
recordVo.setXysj(xysj);
recordVo.setSbyxzt(sbyxzt);
return R.ok(recordVo);
}
/**
* 构造回显信息
*/
private void buildEcho(List<OpsInspectionTaskVo> taskVos) {
//TODO 回显信息
taskVos.forEach(taskVo -> {
if (taskVo.getPlanId()!=null) {
OpsInspectionPlanVo opsInspectionPlanVo = opsInspectionPlanService.queryById(taskVo.getPlanId());
if (opsInspectionPlanVo != null) {
taskVo.setPlan(opsInspectionPlanVo);
}
}
if (taskVo.getPersonId()!=null) {
OpsUserVo opsUserVo = opsUserService.queryById(taskVo.getPersonId());
if (opsUserVo != null) {
taskVo.setPerson(opsUserVo);
}
}
});
}
}

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,256 @@
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> lastMonth = list.stream().filter(testTaskVo -> testTaskVo.getPlanBeginTime().before(finalEndDate) && testTaskVo.getPlanFinishTime().after(finalStartDate))
.toList();
return R.ok(record);
}
}

View File

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

View File

@ -0,0 +1,134 @@
package org.dromara.personnel.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.common.core.exception.ServiceException;
import org.dromara.personnel.domain.bo.OpsSchedulingReq;
import org.dromara.personnel.domain.dto.SchedulingUserGroupDTO;
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.personnel.domain.vo.OpsSchedulingVo;
import org.dromara.personnel.domain.bo.OpsSchedulingBo;
import org.dromara.personnel.service.IOpsSchedulingService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 运维-人员排班
* 前端访问路由地址为:/personnel/scheduling
*
* @author LionLi
* @date 2025-09-19
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/personnel/scheduling")
public class OpsSchedulingController extends BaseController {
private final IOpsSchedulingService opsSchedulingService;
/**
* 查询运维-人员排班列表
*/
@SaCheckPermission("personnel:scheduling:list")
@GetMapping("/list")
public TableDataInfo<OpsSchedulingVo> list(OpsSchedulingBo bo, PageQuery pageQuery) {
return opsSchedulingService.queryPageList(bo, pageQuery);
}
/**
* 查询运维-人员排班列表
*/
@SaCheckPermission("personnel:scheduling:list")
@GetMapping("/getRiLiList")
public R<List<SchedulingUserGroupDTO>> getRiLiList(OpsSchedulingReq req) {
return R.ok(opsSchedulingService.getRiLiList(req));
}
/**
* 导出运维-人员排班列表
*/
@SaCheckPermission("personnel:scheduling:export")
@Log(title = "运维-人员排班", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(OpsSchedulingBo bo, HttpServletResponse response) {
List<OpsSchedulingVo> list = opsSchedulingService.queryList(bo);
ExcelUtil.exportExcel(list, "运维-人员排班", OpsSchedulingVo.class, response);
}
/**
* 获取运维-人员排班详细信息
*
* @param id 主键
*/
@SaCheckPermission("personnel:scheduling:query")
@GetMapping("/{id}")
public R<OpsSchedulingVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) {
return R.ok(opsSchedulingService.queryById(id));
}
/**
* 新增运维-人员排班
*/
@SaCheckPermission("personnel:scheduling:add")
@Log(title = "运维-人员排班", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody OpsSchedulingBo bo) {
return toAjax(opsSchedulingService.insertByBo(bo));
}
/**
* 修改运维-人员排班
*/
@SaCheckPermission("personnel:scheduling:edit")
@Log(title = "运维-人员排班", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping("/all")
public R<Void> allEdit(@RequestBody OpsSchedulingBo bo) {
if (bo.getProjectId() == null) {
throw new ServiceException("项目id不能为空");
}
if (bo.getSchedulingDate() == null) {
throw new ServiceException("排班日期不能为空");
}
return toAjax(opsSchedulingService.allEdit(bo));
}
/**
* 修改运维-人员排班
*/
@SaCheckPermission("personnel:scheduling:edit")
@Log(title = "运维-人员排班", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody OpsSchedulingBo bo) {
return toAjax(opsSchedulingService.updateByBo(bo));
}
/**
* 删除运维-人员排班
*
* @param ids 主键串
*/
@SaCheckPermission("personnel:scheduling:remove")
@Log(title = "运维-人员排班", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable("ids") Long[] ids) {
return toAjax(opsSchedulingService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

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

View File

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

View File

@ -0,0 +1,106 @@
package org.dromara.personnel.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.personnel.domain.vo.OpsUserFilesVo;
import org.dromara.personnel.domain.bo.OpsUserFilesBo;
import org.dromara.personnel.service.IOpsUserFilesService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 运维人员文件
* 前端访问路由地址为:/personnel/userFiles
*
* @author LionLi
* @date 2025-09-17
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/userFiles")
public class OpsUserFilesController extends BaseController {
private final IOpsUserFilesService opsUserFilesService;
/**
* 查询运维人员文件列表
*/
@SaCheckPermission("personnel:userFiles:list")
@GetMapping("/list")
public TableDataInfo<OpsUserFilesVo> list(OpsUserFilesBo bo, PageQuery pageQuery) {
return opsUserFilesService.queryPageList(bo, pageQuery);
}
/**
* 导出运维人员文件列表
*/
@SaCheckPermission("personnel:userFiles:export")
@Log(title = "运维人员文件", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(OpsUserFilesBo bo, HttpServletResponse response) {
List<OpsUserFilesVo> list = opsUserFilesService.queryList(bo);
ExcelUtil.exportExcel(list, "运维人员文件", OpsUserFilesVo.class, response);
}
/**
* 获取运维人员文件详细信息
*
* @param opsUserId 主键
*/
@SaCheckPermission("personnel:userFiles:query")
@GetMapping("/{opsUserId}")
public R<OpsUserFilesVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("opsUserId") Long opsUserId) {
return R.ok(opsUserFilesService.queryById(opsUserId));
}
/**
* 新增运维人员文件
*/
@SaCheckPermission("personnel:userFiles:add")
@Log(title = "运维人员文件", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody OpsUserFilesBo bo) {
return toAjax(opsUserFilesService.insertByBo(bo));
}
/**
* 修改运维人员文件
*/
@SaCheckPermission("personnel:userFiles:edit")
@Log(title = "运维人员文件", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody OpsUserFilesBo bo) {
return toAjax(opsUserFilesService.updateByBo(bo));
}
/**
* 删除运维人员文件
*
* @param opsUserIds 主键串
*/
@SaCheckPermission("personnel:userFiles:remove")
@Log(title = "运维人员文件", businessType = BusinessType.DELETE)
@DeleteMapping("/{opsUserIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable("opsUserIds") Long[] opsUserIds) {
return toAjax(opsUserFilesService.deleteWithValidByIds(List.of(opsUserIds), true));
}
}

View File

@ -0,0 +1,106 @@
package org.dromara.personnel.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.personnel.domain.vo.OpsWorkWageVo;
import org.dromara.personnel.domain.bo.OpsWorkWageBo;
import org.dromara.personnel.service.IOpsWorkWageService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 工种薪水
* 前端访问路由地址为:/personnel/workWage
*
* @author LionLi
* @date 2025-09-17
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/workWage")
public class OpsWorkWageController extends BaseController {
private final IOpsWorkWageService opsWorkWageService;
/**
* 查询工种薪水列表
*/
@SaCheckPermission("personnel:workWage:list")
@GetMapping("/list")
public TableDataInfo<OpsWorkWageVo> list(OpsWorkWageBo bo, PageQuery pageQuery) {
return opsWorkWageService.queryPageList(bo, pageQuery);
}
/**
* 导出工种薪水列表
*/
@SaCheckPermission("personnel:workWage:export")
@Log(title = "工种薪水", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(OpsWorkWageBo bo, HttpServletResponse response) {
List<OpsWorkWageVo> list = opsWorkWageService.queryList(bo);
ExcelUtil.exportExcel(list, "工种薪水", OpsWorkWageVo.class, response);
}
/**
* 获取工种薪水详细信息
*
* @param id 主键
*/
@SaCheckPermission("personnel:workWage:query")
@GetMapping("/{id}")
public R<OpsWorkWageVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) {
return R.ok(opsWorkWageService.queryById(id));
}
/**
* 新增工种薪水
*/
@SaCheckPermission("personnel:workWage:add")
@Log(title = "工种薪水", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody OpsWorkWageBo bo) {
return toAjax(opsWorkWageService.insertByBo(bo));
}
/**
* 修改工种薪水
*/
@SaCheckPermission("personnel:workWage:edit")
@Log(title = "工种薪水", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody OpsWorkWageBo bo) {
return toAjax(opsWorkWageService.updateByBo(bo));
}
/**
* 删除工种薪水
*
* @param ids 主键串
*/
@SaCheckPermission("personnel:workWage:remove")
@Log(title = "工种薪水", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable("ids") Long[] ids) {
return toAjax(opsWorkWageService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,73 @@
package org.dromara.personnel.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_equipment
*
* @author LionLi
* @date 2025-09-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ops_equipment")
public class OpsEquipment extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id")
private Long id;
/**
* 设备id
*/
private String deviceId;
/**
* 设备名称
*/
private String deviceName;
/**
* 设备类型
*/
private String deviceType;
/**
* 所属电站
*/
private String affiliationPowerStation;
/**
* 通讯协议
*/
private String commProtocol;
/**
* IP地址
*/
private String ipAdd;
/**
* 最后在线时间
*/
private Date lastOnlineTime;
/**
* 状态
*/
private String status;
}

View File

@ -0,0 +1,69 @@
package org.dromara.personnel.domain;
import jakarta.validation.constraints.NotNull;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* 运维-人员排班对象 ops_scheduling
*
* @author LionLi
* @date 2025-09-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ops_scheduling")
public class OpsScheduling extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id")
private Long id;
/**
* 项目id
*/
private Long projectId;
/**
* 运维人员id
*/
private Long opsUserId;
/**
* 排班类型ID
*/
private Long schedulingType;
/**
* 排班日期
*/
private LocalDate schedulingDate;
/**
* 排班开始时间
*/
private LocalDateTime schedulingStartTime;
/**
* 排班结束时间
*/
private LocalDateTime schedulingEndTime;
}

View File

@ -0,0 +1,60 @@
package org.dromara.personnel.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalTime;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* 运维-排班时间类型对象 ops_scheduling_date
*
* @author LionLi
* @date 2025-09-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ops_scheduling_date")
public class OpsSchedulingDate extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id")
private Long id;
/**
* 项目id
*/
private Long projectId;
/**
* 排班名称
*/
private String schedulingName;
/**
* 开始时间
*/
private LocalTime startTime;
/**
* 结束时间
*/
private LocalTime endTime;
/**
* 时长
*/
private Double duration;
}

View File

@ -0,0 +1,198 @@
package org.dromara.personnel.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 java.io.Serial;
/**
* 运维人员对象 sub_construction_user
*
* @author LionLi
* @date 2025-09-16
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ops_user")
public class OpsUser extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
* 人脸照
*/
private String facePic;
/**
* 系统用户id
*/
private Long sysUserId;
/**
* 人员姓名
*/
private String userName;
/**
* 项目id
*/
private Long projectId;
/**
* 班组id
*/
private Long teamId;
/**
* 班组名称
*/
private String teamName;
/**
* 状态0在职 1离职
*/
private String status;
/**
* 联系电话
*/
private String phone;
/**
* 性别(0:保密 1:男 2女)
*/
private String sex;
/**
* 民族
*/
private String nation;
/**
* 身份证正面图片
*/
private String sfzFrontPic;
/**
* 身份证背面图片
*/
private String sfzBackPic;
/**
* 身份证号码
*/
private String sfzNumber;
/**
* 身份证有效开始期
*/
private Date sfzStart;
/**
* 身份证有效结束期
*/
private Date sfzEnd;
/**
* 身份证地址
*/
private String sfzSite;
/**
* 身份证出生日期
*/
private Date sfzBirth;
/**
* 籍贯
*/
private String nativePlace;
/**
* 银行卡图片
*/
private String yhkPic;
/**
* 银行卡号
*/
private String yhkNumber;
/**
* 开户行
*/
private String yhkOpeningBank;
/**
* 持卡人
*/
private String yhkCardholder;
/**
* 工种(字典type_of_work)
*/
private String typeOfWork;
/**
* 工资计量单位
*/
private String wageMeasureUnit;
/**
* 特种作业证图片
*/
private String specialWorkPic;
/**
* 打卡(0启用打卡 1禁止打卡)
*/
private String clock;
/**
* 入场时间
*/
private String entryDate;
/**
* 离场时间
*/
private String leaveDate;
/**
* 薪水
*/
private Long salary;
/**
* 用户角色(1=普通用户,2=管理员)
*/
private String userRole;
/**
* 退场状态(0未退场 1退场未提交材料 2已退场)
*/
private String exitStatus;
/**
* 首次进入项目的时间
*/
private Date firstDate;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,46 @@
package org.dromara.personnel.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 运维人员文件对象 ops_user_files
*
* @author LionLi
* @date 2025-09-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ops_user_files")
public class OpsUserFiles extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 运维人员id
*/
@TableId(value = "ops_user_id")
private Long opsUserId;
/**
* 文件id
*/
private Long fileId;
/**
* 文件名称
*/
private String fileName;
/**
* 文件类型1、特种作业证图片
*/
private String fileType;
}

View File

@ -0,0 +1,66 @@
package org.dromara.personnel.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 工种薪水对象 ops_work_wage
*
* @author LionLi
* @date 2025-09-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ops_work_wage")
public class OpsWorkWage extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@TableId(value = "id")
private Long id;
/**
* 项目id
*/
private Long projectId;
/**
* 工种
*/
private String workType;
/**
* 是否是特种兵1是 2否
*/
private String isSpecialType;
/**
* 工资计算方式1计时 2计件
*/
private String wageCalculationType;
/**
* 工资标准
*/
private Long wage;
/**
* 工资计量单位
*/
private String wageMeasureUnit;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,78 @@
package org.dromara.personnel.domain.bo;
import org.dromara.personnel.domain.OpsEquipment;
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_equipment
*
* @author LionLi
* @date 2025-09-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = OpsEquipment.class, reverseConvertGenerate = false)
public class OpsEquipmentBo extends BaseEntity {
/**
* id
*/
private Long id;
/**
* 设备id
*/
private String deviceId;
/**
* 设备名称
*/
@NotBlank(message = "设备名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String deviceName;
/**
* 设备类型
*/
@NotBlank(message = "设备类型不能为空", groups = { AddGroup.class, EditGroup.class })
private String deviceType;
/**
* 所属电站
*/
@NotBlank(message = "所属电站不能为空", groups = { AddGroup.class, EditGroup.class })
private String affiliationPowerStation;
/**
* 通讯协议
*/
@NotBlank(message = "通讯协议不能为空", groups = { AddGroup.class, EditGroup.class })
private String commProtocol;
/**
* IP地址
*/
@NotBlank(message = "IP地址不能为空", groups = { AddGroup.class, EditGroup.class })
private String ipAdd;
/**
* 最后在线时间
*/
@NotNull(message = "最后在线时间不能为空", groups = { AddGroup.class, EditGroup.class })
private Date lastOnlineTime;
/**
* 状态
*/
@NotBlank(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class })
private String status;
}

View File

@ -0,0 +1,76 @@
package org.dromara.personnel.domain.bo;
import org.dromara.personnel.domain.OpsScheduling;
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.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 运维-人员排班业务对象 ops_scheduling
*
* @author LionLi
* @date 2025-09-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = OpsScheduling.class, reverseConvertGenerate = false)
public class OpsSchedulingBo extends BaseEntity {
/**
* id
*/
@NotNull(message = "id不能为空", groups = { EditGroup.class })
private Long id;
/**
* 项目id
*/
@NotNull(message = "项目id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long projectId;
/**
* 运维人员id
*/
private Long opsUserId;
@NotNull(message = "运维人员列表不能为null",groups = { AddGroup.class})
@Size(min = 1, message = "运维人员列表至少包含一个元素")
private List<SchedulingUserTypeBo> userTypeBos;
/**
* 排班类型id
*/
// @NotBlank(message = "排班类型id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long schedulingType;
/**
* 排班日期
*/
// @NotNull(message = "排班日期不能为空", groups = { AddGroup.class, EditGroup.class })
private LocalDate schedulingDate;
/**
* 排班开始时间
*/
// @NotNull(message = "排班开始时间不能为空", groups = { AddGroup.class, EditGroup.class })
private LocalDateTime schedulingStartTime;
/**
* 排班结束时间
*/
// @NotNull(message = "排班结束时间不能为空", groups = { AddGroup.class, EditGroup.class })
private LocalDateTime schedulingEndTime;
}

View File

@ -0,0 +1,63 @@
package org.dromara.personnel.domain.bo;
import org.dromara.personnel.domain.OpsSchedulingDate;
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.time.LocalTime;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 运维-排班时间类型业务对象 ops_scheduling_date
*
* @author LionLi
* @date 2025-09-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = OpsSchedulingDate.class, reverseConvertGenerate = false)
public class OpsSchedulingDateBo extends BaseEntity {
/**
* id
*/
@NotNull(message = "id不能为空", groups = { EditGroup.class })
private Long id;
/**
* 项目id
*/
@NotNull(message = "项目id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long projectId;
/**
* 排班名称
*/
@NotBlank(message = "排班名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String schedulingName;
/**
* 开始时间
*/
@NotNull(message = "开始时间不能为空", groups = { AddGroup.class, EditGroup.class })
private LocalTime startTime;
/**
* 结束时间
*/
@NotNull(message = "结束时间不能为空", groups = { AddGroup.class, EditGroup.class })
private LocalTime endTime;
/**
* 时长
*/
private Double duration;
}

View File

@ -0,0 +1,44 @@
package org.dromara.personnel.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.personnel.domain.OpsScheduling;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
/**
* 运维-人员排班业务对象 ops_scheduling
*
* @author LionLi
* @date 2025-09-19
*/
@Data
public class OpsSchedulingReq implements Serializable {
/**
* 项目id
*/
private Long projectId;
/**
* 排班开始日期
*/
private LocalDate schedulingStartDate;
/**
* 排班结束日期
*/
private LocalDate schedulingEndDate;
}

Some files were not shown because too many files have changed in this diff Show More