spring data jpa 分页

  • 接口
/**
 * 操作日志
 */
@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;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一彡十

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值