sftp 操作日志.

This commit is contained in:
lijiahangmax
2024-03-05 00:02:06 +08:00
parent f1ade4e182
commit a75ead9a58
22 changed files with 628 additions and 39 deletions

View File

@@ -0,0 +1,24 @@
package com.orion.ops.module.infra.api;
import com.orion.lang.define.wrapper.DataGrid;
import com.orion.ops.module.infra.entity.dto.operator.OperatorLogDTO;
import com.orion.ops.module.infra.entity.dto.operator.OperatorLogQueryDTO;
/**
* 操作日志服务
*
* @author Jiahang Li
* @version 1.0.0
* @since 2024/3/4 23:11
*/
public interface OperatorLogApi {
/**
* 操作日志服务
*
* @param request request
* @return rows
*/
DataGrid<OperatorLogDTO> getOperatorLogList(OperatorLogQueryDTO request);
}

View File

@@ -0,0 +1,85 @@
package com.orion.ops.module.infra.entity.dto.operator;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* 操作日志 业务对象
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023-10-10 17:08
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(name = "OperatorLogDTO", description = "操作日志 业务对象")
public class OperatorLogDTO implements Serializable {
private static final long serialVersionUID = 1L;
@Schema(description = "id")
private Long id;
@Schema(description = "用户id")
private Long userId;
@Schema(description = "用户名")
private String username;
@Schema(description = "traceId")
private String traceId;
@Schema(description = "请求ip")
private String address;
@Schema(description = "请求地址")
private String location;
@Schema(description = "userAgent")
private String userAgent;
@Schema(description = "风险等级")
private String riskLevel;
@Schema(description = "模块")
private String module;
@Schema(description = "操作类型")
private String type;
@Schema(description = "日志")
private String logInfo;
@Schema(description = "参数")
private String extra;
@Schema(description = "操作结果 0失败 1成功")
private Integer result;
@Schema(description = "错误信息")
private String errorMessage;
@Schema(description = "返回值")
private String returnValue;
@Schema(description = "操作时间")
private Integer duration;
@Schema(description = "开始时间")
private Date startTime;
@Schema(description = "结束时间")
private Date endTime;
@Schema(description = "创建时间")
private Date createTime;
}

View File

@@ -0,0 +1,61 @@
package com.orion.ops.module.infra.entity.dto.operator;
import com.orion.ops.framework.common.entity.PageRequest;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;
/**
* 操作日志 查询对象
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023-10-10 17:08
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(name = "OperatorLogQueryDTO", description = "操作日志 查询对象")
public class OperatorLogQueryDTO extends PageRequest {
private static final long serialVersionUID = 1L;
@Schema(description = "id")
private Long id;
@Schema(description = "用户id")
private Long userId;
@Size(max = 32)
@Schema(description = "模块")
private String module;
@Size(max = 1)
@Schema(description = "风险等级")
private String riskLevel;
@Size(max = 64)
@Schema(description = "操作类型")
private String type;
@Schema(description = "操作类型")
private List<String> typeList;
@Schema(description = "参数")
private String extra;
@Schema(description = "操作结果 0失败 1成功")
private Integer result;
@Schema(description = "开始时间区间 - 开始")
private Date startTimeStart;
@Schema(description = "开始时间区间 - 结束")
private Date startTimeEnd;
}

View File

@@ -0,0 +1,61 @@
package com.orion.ops.module.infra.api.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.orion.lang.define.wrapper.DataGrid;
import com.orion.ops.framework.common.utils.Valid;
import com.orion.ops.module.infra.api.OperatorLogApi;
import com.orion.ops.module.infra.convert.OperatorLogProviderConvert;
import com.orion.ops.module.infra.dao.OperatorLogDAO;
import com.orion.ops.module.infra.entity.domain.OperatorLogDO;
import com.orion.ops.module.infra.entity.dto.operator.OperatorLogDTO;
import com.orion.ops.module.infra.entity.dto.operator.OperatorLogQueryDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* 操作日志服务实现
*
* @author Jiahang Li
* @version 1.0.0
* @since 2024/3/4 23:18
*/
@Slf4j
@Service
public class OperatorLogApiImpl implements OperatorLogApi {
@Resource
private OperatorLogDAO operatorLogDAO;
@Override
public DataGrid<OperatorLogDTO> getOperatorLogList(OperatorLogQueryDTO request) {
Valid.valid(request);
return operatorLogDAO.of()
.page(request)
.wrapper(this.buildQueryWrapper(request))
.dataGrid(OperatorLogProviderConvert.MAPPER::to);
}
/**
* 构建查询 wrapper
*
* @param request request
* @return wrapper
*/
private LambdaQueryWrapper<OperatorLogDO> buildQueryWrapper(OperatorLogQueryDTO request) {
return operatorLogDAO.wrapper()
.eq(OperatorLogDO::getId, request.getId())
.eq(OperatorLogDO::getUserId, request.getUserId())
.eq(OperatorLogDO::getRiskLevel, request.getRiskLevel())
.eq(OperatorLogDO::getModule, request.getModule())
.eq(OperatorLogDO::getType, request.getType())
.in(OperatorLogDO::getType, request.getTypeList())
.eq(OperatorLogDO::getResult, request.getResult())
.like(OperatorLogDO::getExtra, request.getExtra())
.ge(OperatorLogDO::getStartTime, request.getStartTimeStart())
.le(OperatorLogDO::getStartTime, request.getStartTimeEnd())
.orderByDesc(OperatorLogDO::getId);
}
}

View File

@@ -14,9 +14,4 @@ Authorization: {{token}}
"endTime": ""
}
### 查询登录日志
GET {{baseUrl}}/infra/operator-log/login-history?username=admin
Content-Type: application/json
Authorization: {{token}}
###

View File

@@ -8,7 +8,6 @@ import com.orion.ops.framework.log.core.enums.IgnoreLogMode;
import com.orion.ops.framework.web.core.annotation.RestWrapper;
import com.orion.ops.module.infra.define.operator.OperatorLogOperatorType;
import com.orion.ops.module.infra.entity.request.operator.OperatorLogQueryRequest;
import com.orion.ops.module.infra.entity.vo.LoginHistoryVO;
import com.orion.ops.module.infra.entity.vo.OperatorLogVO;
import com.orion.ops.module.infra.service.OperatorLogService;
import io.swagger.v3.oas.annotations.Operation;
@@ -72,13 +71,5 @@ public class OperatorLogController {
return operatorLogService.clearOperatorLog(request);
}
@IgnoreLog(IgnoreLogMode.RET)
@GetMapping("/login-history")
@Operation(summary = "查询用户登录日志")
@PreAuthorize("@ss.hasPermission('infra:system-user:login-history')")
public List<LoginHistoryVO> getLoginHistory(@RequestParam("username") String username) {
return operatorLogService.getLoginHistory(username);
}
}

View File

@@ -67,4 +67,10 @@ DELETE {{baseUrl}}/infra/system-user/delete?id=1
Authorization: {{token}}
### 查询登录日志
GET {{baseUrl}}/infra/system-user/login-history?username=admin
Content-Type: application/json
Authorization: {{token}}
###

View File

@@ -10,8 +10,10 @@ import com.orion.ops.framework.log.core.enums.IgnoreLogMode;
import com.orion.ops.framework.web.core.annotation.RestWrapper;
import com.orion.ops.module.infra.define.operator.SystemUserOperatorType;
import com.orion.ops.module.infra.entity.request.user.*;
import com.orion.ops.module.infra.entity.vo.LoginHistoryVO;
import com.orion.ops.module.infra.entity.vo.SystemUserVO;
import com.orion.ops.module.infra.entity.vo.UserSessionVO;
import com.orion.ops.module.infra.service.OperatorLogService;
import com.orion.ops.module.infra.service.SystemUserManagementService;
import com.orion.ops.module.infra.service.SystemUserRoleService;
import com.orion.ops.module.infra.service.SystemUserService;
@@ -51,6 +53,9 @@ public class SystemUserController {
@Resource
private SystemUserManagementService systemUserManagementService;
@Resource
private OperatorLogService operatorLogService;
@OperatorLog(SystemUserOperatorType.CREATE)
@PostMapping("/create")
@Operation(summary = "创建用户")
@@ -159,5 +164,12 @@ public class SystemUserController {
return HttpWrapper.ok();
}
}
@IgnoreLog(IgnoreLogMode.RET)
@GetMapping("/login-history")
@Operation(summary = "查询用户登录日志")
@PreAuthorize("@ss.hasPermission('infra:system-user:login-history')")
public List<LoginHistoryVO> getLoginHistory(@RequestParam("username") String username) {
return operatorLogService.getLoginHistory(username);
}
}

View File

@@ -0,0 +1,22 @@
package com.orion.ops.module.infra.convert;
import com.orion.ops.module.infra.entity.domain.OperatorLogDO;
import com.orion.ops.module.infra.entity.dto.operator.OperatorLogDTO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* 操作日志 对外对象转换器
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023-10-10 17:08
*/
@Mapper
public interface OperatorLogProviderConvert {
OperatorLogProviderConvert MAPPER = Mappers.getMapper(OperatorLogProviderConvert.class);
OperatorLogDTO to(OperatorLogDO domain);
}