- 接口
/**
* 操作日志
*/
@Repository
public interface OperationLogVoRepository extends CrudRepository<OperationLog, String>, JpaSpecificationExecutor<OperationLog> {
List<OperationLog> findAllByEnvironmentAndOperObjType(String environmentId, String serviceName);
}
- 实体类
@Entity(name = "operation_log")
@Data
public class OperationLog {
@Id
@GenericGenerator(name = "uuid", strategy = "com.common.cloud.id.UUIDGenerator")
@GeneratedValue(generator = "uuid")
private String id;
private String username; //登录名
private String clientIp;//客户端ip
@Enumerated(EnumType.STRING)
private OperLogType logType;//日志类型
private String environment;//环境
@Enumerated(EnumType.STRING)
private OperObjType operObjType;//操作对象类型
private String operObjName;//操作对象名称
@Enumerated(EnumType.STRING)
private OperAction operAction; //操作类型
private String operDesc;//操作描述
@Enumerated(EnumType.STRING)
private OperResult operResult;//操作结果
private String oldData;//操作前数据
private String newData;//操作后数据
private String errorMsg;//错误信息
@Column(updatable = false)
@CreationTimestamp
private Date operTime;
}
- 分页参数
@Data
@ApiModel(value = "环境下的服务分页参数")
public class PageQueryRequestVO {
/**
* 当前页码
*/
@ApiModelProperty(value = "当前页码")
private Integer pageNum;
/**
* 每页数量
*/
@ApiModelProperty(value = "每页数量")
private Integer pageSize;
@ApiModelProperty(value = "根据时间排序, 0 :倒序,1:正序")
private Integer sortByTime;
}
- 返回的实体类
@Data
@ApiModel(value = "服务内的操作日志")
public class OperationLogVo {
@ApiModelProperty(value = "结果状态,success、fail")
private String result;
@ApiModelProperty(value = "简要操作结果")
private String resultSummary;
@ApiModelProperty(value = "操作对象")
private String userName;
@ApiModelProperty(value = "操作对象的ip")
private String userIP;
@ApiModelProperty(value = "操作详细信息")
private String details;
@ApiModelProperty(value = "创建时间")
private String createTime;
public OperationLogVo() {
}
public OperationLogVo(String result, String resultSummary, String userName, String userIP, String details, String createTime) {
this.result = result;
this.resultSummary = resultSummary;
this.userName = userName;
this.userIP = userIP;
this.details = details;
this.createTime = createTime;
}
}
- 分页逻辑
/**
* 操作日志
*/
public Page<OperationLogVo> operationLog(String namespace, String serviceName, PageQueryRequestVO pageQueryRequestVO) {
// 页码
Integer pageNum = pageQueryRequestVO.getPageNum() == null ? 1 : pageQueryRequestVO.getPageNum();
pageNum--;
// 每页数量
Integer pageSize = pageQueryRequestVO.getPageSize() == null ? 10 : pageQueryRequestVO.getPageSize();
Sort sort = null;
if (null != pageQueryRequestVO && null != pageQueryRequestVO.getSortByTime()) {
if (pageQueryRequestVO.getSortByTime() == 0) {
sort = new Sort(Sort.Direction.DESC, "operTime");
} else {
sort = new Sort(Sort.Direction.ASC, "operTime");
}
}
final PageRequest pageRequest = new PageRequest(pageNum, pageSize, sort);
Page<OperationLog> dataPage = operationLogRepository.findAll((root, criteriaQuery, criteriaBuilder) -> {
List<Predicate> predicates = new ArrayList<>();
if (null != namespace) {
Predicate groupId = criteriaBuilder.equal(root.get("environment"), namespace);
predicates.add(groupId);
}
if (null != serviceName) {
Predicate groupId = criteriaBuilder.equal(root.get("operObjName"), serviceName);
predicates.add(groupId);
}
return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
}, pageRequest);
List<OperationLogVo> opertionLogVos = new ArrayList<>();
dataPage.getContent().forEach(operationLog -> {
String operResult = operationLog.getOperResult().toString();
String username = operationLog.getUsername();
String clientIp = operationLog.getClientIp();
StringBuffer resultSummary = new StringBuffer("操作");
if (operResult.equals(OperResult.success.name())) {
resultSummary.append("成功").append("@").append(username);
} else {
resultSummary.append("失败").append("@").append(username);
}
String operDesc = operationLog.getOperDesc();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date operTime = operationLog.getOperTime();
OperationLogVo vo = new OperationLogVo(resultSummary.toString(), operResult, username, clientIp, operDesc, simpleDateFormat.format(operTime));
opertionLogVos.add(vo);
});
Page<OperationLogVo> page = new PageImpl<>(opertionLogVos, pageRequest, dataPage.getTotalElements());
return page;
}