feat:设备日志模块

This commit is contained in:
dzc committed 2026-07-30 13:15:45 +08:00
1 parent 41fa28775b
commit 06330260e5
18 files changed
+1217 -5

No files matched your search

@@ -0,0 +1,47 @@
package com.bsd.pjcloud.hard.api.dto.manager;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 终端日志管理端查询条件。
*/
@Data
@Schema(description = "终端日志文件查询条件")
public class HardTerminalLogFileQueryDto {
@Schema(description = "设备ID")
private Long hardId;
@Schema(description = "设备名称")
private String hardName;
@Schema(description = "设备唯一编号")
private String uniqueCode;
@Schema(description = "商户ID")
private Long merchantId;
@Schema(description = "部门ID")
private Long deptId;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
@Schema(description = "日志日期开始")
private LocalDate logDateStart;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
@Schema(description = "日志日期结束")
private LocalDate logDateEnd;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
@Schema(description = "上传时间开始")
private LocalDateTime uploadTimeStart;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
@Schema(description = "上传时间结束")
private LocalDateTime uploadTimeEnd;
}
@@ -0,0 +1,32 @@
package com.bsd.pjcloud.hard.api.dto.manager;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import lombok.Data;
/**
* 终端日志上传预检参数。
*/
@Data
@Schema(description = "终端日志上传预检参数")
public class HardTerminalLogPreflightDto {
@NotBlank(message = "日志相对路径不能为空")
@Size(max = 255, message = "日志相对路径不能超过255个字符")
@Schema(description = "终端日志根目录下的相对路径")
private String relativePath;
@NotNull(message = "文件大小不能为空")
@Min(value = 0, message = "文件大小不能小于0")
@Schema(description = "脱敏文件大小")
private Long fileSize;
@NotBlank(message = "文件哈希不能为空")
@Pattern(regexp = "(?i)^[0-9a-f]{32}$", message = "文件哈希必须为32位MD5")
@Schema(description = "脱敏文件MD5")
private String fileHash;
}
@@ -0,0 +1,43 @@
package com.bsd.pjcloud.hard.api.dto.manager;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 终端日志上传元数据。设备快照由服务端根据请求头中的设备ID填充。
*/
@Data
@Schema(description = "终端日志上传元数据")
public class HardTerminalLogUploadDto {
@NotBlank(message = "日志相对路径不能为空")
@Size(max = 255, message = "日志相对路径不能超过255个字符")
@Schema(description = "终端日志根目录下的相对路径")
private String relativePath;
@NotNull(message = "日志日期不能为空")
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
@Schema(description = "日志所属日期")
private LocalDate logDate;
@NotNull(message = "本地修改时间不能为空")
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
@Schema(description = "终端本地文件最后修改时间")
private LocalDateTime fileModifiedTime;
@Size(max = 64, message = "应用版本不能超过64个字符")
@Schema(description = "应用版本")
private String appVersion;
@NotBlank(message = "脱敏规则版本不能为空")
@Size(max = 32, message = "脱敏规则版本不能超过32个字符")
@Schema(description = "脱敏规则版本")
private String sanitizeVersion;
}
@@ -0,0 +1,191 @@
package com.bsd.pjcloud.hard.api.entity.manager;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import com.bsd.pjcloud.common.core.util.TenantTable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 终端日志文件
*/
@Data
@TenantTable
@TableName("hard_terminal_log_file")
@EqualsAndHashCode(callSuper = true)
@Schema(description = "终端日志文件")
public class HardTerminalLogFileEntity extends Model<HardTerminalLogFileEntity> {
/**
* 编号
*/
@TableId(type = IdType.AUTO)
@Schema(description = "编号")
private Long id;
/**
* 设备ID(hard_manager.id)
*/
@Schema(description = "设备ID(hard_manager.id)")
private Long hardId;
/**
* 上传时设备名称快照
*/
@Schema(description = "上传时设备名称快照")
private String hardName;
/**
* 上传时设备唯一编号快照
*/
@Schema(description = "上传时设备唯一编号快照")
private String uniqueCode;
/**
* 上传时设备类型快照
*/
@Schema(description = "上传时设备类型快照")
private String hardType;
/**
* 上传时商户ID快照
*/
@Schema(description = "上传时商户ID快照")
private Long merchantId;
/**
* 上传时部门ID快照
*/
@Schema(description = "上传时部门ID快照")
private Long deptId;
/**
* 日志所属日期
*/
@Schema(description = "日志所属日期")
private LocalDate logDate;
/**
* 终端日志根目录下的相对路径
*/
@Schema(description = "终端日志根目录下的相对路径")
private String relativePath;
/**
* 原日志文件名
*/
@Schema(description = "原日志文件名")
private String originalName;
/**
* 文件大小(字节)
*/
@Schema(description = "文件大小(字节)")
private Long fileSize;
/**
* 文件内容哈希(当前使用MD5)
*/
@Schema(description = "文件内容哈希(当前使用MD5)")
private String fileHash;
/**
* 终端本地文件最后修改时间
*/
@Schema(description = "终端本地文件最后修改时间")
private LocalDateTime fileModifiedTime;
/**
* 文件中心sys_file记录ID
*/
@Schema(description = "文件中心sys_file记录ID")
private Long sysFileId;
/**
* OSS对象文件名
*/
@Schema(description = "OSS对象文件名")
private String storageFileName;
/**
* 文件访问相对地址
*/
@Schema(description = "文件访问相对地址")
private String storageUrl;
/**
* 上传时应用版本
*/
@Schema(description = "上传时应用版本")
private String appVersion;
/**
* 日志脱敏规则版本
*/
@Schema(description = "日志脱敏规则版本")
private String sanitizeVersion;
/**
* 最近成功上传时间
*/
@Schema(description = "最近成功上传时间")
private LocalDateTime uploadTime;
/**
* 成功上传次数
*/
@Schema(description = "成功上传次数")
private Integer uploadCount;
/**
* 备注
*/
@Schema(description = "备注")
private String remark;
/**
* 创建人
*/
@TableField(fill = FieldFill.INSERT)
@Schema(description = "创建人")
private String createBy;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
@Schema(description = "创建时间")
private LocalDateTime createTime;
/**
* 修改人
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
@Schema(description = "修改人")
private String updateBy;
/**
* 修改时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
@Schema(description = "修改时间")
private LocalDateTime updateTime;
/**
* 删除标记
*/
@TableLogic
@TableField(fill = FieldFill.INSERT)
@Schema(description = "删除标记")
private String delFlag;
/**
* 租户ID
*/
@Schema(description = "租户ID")
private Long tenantId;
}
@@ -0,0 +1,23 @@
package com.bsd.pjcloud.hard.api.vo.manager;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 终端日志设备聚合摘要。
*/
@Data
@Schema(description = "终端日志设备摘要")
public class HardTerminalLogDeviceVo {
private Long hardId;
private String hardName;
private String uniqueCode;
private String hardType;
private Long merchantId;
private Long deptId;
private Long fileCount;
private LocalDateTime latestUploadTime;
}
@@ -0,0 +1,27 @@
package com.bsd.pjcloud.hard.api.vo.manager;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/**
* 终端日志文件树节点。
*/
@Data
@Schema(description = "终端日志文件树节点")
public class HardTerminalLogFileTreeVo {
private String key;
private String label;
private String relativePath;
private Boolean directory;
private Long fileId;
private Long fileSize;
private LocalDate logDate;
private LocalDateTime uploadTime;
private List<HardTerminalLogFileTreeVo> children = new ArrayList<>();
}
@@ -0,0 +1,19 @@
package com.bsd.pjcloud.hard.api.vo.manager;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data;
/**
* 终端日志上传预检结果。
*/
@Data
@Builder
@Schema(description = "终端日志上传预检结果")
public class HardTerminalLogPreflightVo {
private Long id;
private Boolean needUpload;
private String normalizedPath;
private String message;
}
@@ -0,0 +1,22 @@
package com.bsd.pjcloud.hard.api.vo.manager;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data;
/**
* 终端日志尾部预览。
*/
@Data
@Builder
@Schema(description = "终端日志预览")
public class HardTerminalLogPreviewVo {
private Long id;
private String originalName;
private String relativePath;
private String content;
private Integer lineCount;
private Long fileSize;
private Boolean truncated;
}
@@ -0,0 +1,21 @@
package com.bsd.pjcloud.hard.api.vo.manager;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data;
/**
* 终端日志上传结果。
*/
@Data
@Builder
@Schema(description = "终端日志上传结果")
public class HardTerminalLogUploadResultVo {
private Long id;
private Boolean uploaded;
private Boolean changed;
private String relativePath;
private Integer uploadCount;
private String message;
}