项目场景:
提示:
想用mybatis-plus里的分页,查询多表数据,表结构相同,存在一个集合里,返回IPage,并且 @Dict用注解翻译对应字段,同时根据时间排序。
问题描述
提示:
本人对分页应用不熟练,只想当时用QueryGenerator.initQueryWrapper这种实现,钻了牛角尖。
想把下面表的日志记录拼起来并且通过时间排序,@dict注解翻译用户名
public class user {
@TableId(type = IdType.AUTO)
@ApiModelProperty(value = "id")
private String id;
@ApiModelProperty(value = "用户姓名")
private Long user;
}
//id name (179637197793,管理A)
//id name (1795275,管理员)
//订单表
public class Order extends {
@TableId(type = IdType.AUTO)
@ApiModelProperty(value = "id")
private Long id;
@ApiModelProperty(value = "流水号")
private Long no;
}
public class OrderLog {
@TableId(type = IdType.AUTO)
@ApiModelProperty(value = "交易id")
private Long id;
@ApiModelProperty(value = "订单id")
private Long orderId;
@ApiModelProperty(value = "用户id")
@Dict(dictTable = "sysuser", dicCode = "id", dicText = "name")
//@Dict注解主要是实现 字符的转换,给前端提供想要的数据。
private String userId;
@ApiModelProperty(value = "操作前状态")
private Long before;
@ApiModelProperty(value = "操作后状态")
private Long after;
@ApiModelProperty(value = "操作内容")
private String content;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "操作时间")
private Date createTime;
}
//订单A表
public class OrderA extends {
@TableId(type = IdType.AUTO)
@ApiModelProperty(value = "id")
private Long id;
@ApiModelProperty(value = "订单表id")
private Long orderId;
@ApiModelProperty(value = "订单明细表id")
private Long OrderItemId;
@ApiModelProperty(value = "流水号")
private Long no;
}
//订单明细A表
public class OrderALog {
@TableId(type = IdType.AUTO)
@ApiModelProperty(value = "交易id")
private Long id;
@ApiModelProperty(value = "订单Aid")
private Long orderAId;
@ApiModelProperty(value = "用户id")
@Dict(dictTable = "sysuser", dicCode = "id", dicText = "name")
private String userId;
@ApiModelProperty(value = "操作前状态")
private Long before;
@ApiModelProperty(value = "操作后状态")
private Long after;
@ApiModelProperty(value = "操作内容")
private String content;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "操作时间")
private Date createTime;
}
解决方案:
提示:这里填写该问题的具体解决方案:
在这里插入代码片
//创建一个公用的返回的vo
//因为只需要查记录所以id这里就没返回 根据自己需要内容
public class Log {
@ApiModelProperty(value = "用户id")
@Dict(dictTable = "sysuser", dicCode = "id", dicText = "name")
private String userId;
@ApiModelProperty(value = "操作前状态")
private Long before;
@ApiModelProperty(value = "操作后状态")
private Long after;
@ApiModelProperty(value = "操作内容")
private String content;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "操作时间")
private Date createTime;
}
//serviceImpl
@Override
public List<LogVo> getLog(Long id,Long orderAId) {
//订单日志
LambdaQueryWrapper<OrderLog> queryOrderLog = new LambdaQueryWrapper<OrderLog>();
queryOrderLog.eq(OrderLog::getOrderId, id);
List<OrderLog> OrderLogs = this.orderLogMapper.selectList(queryOrderLog);
OrderLogs.forEach(OrderLog-> list.add(new Log(OrderLog.getUserId(),
OrderLog.getBefore(),
OrderLog.getAfter(),
OrderLog.getContent(),
OrderLog.getCreateTime()
)));
//订单明细A表日志
LambdaQueryWrapper<OrderALog > queryOrderALog = new LambdaQueryWrapper<OrderALog >();
queryOrderALog .eq(OrderALog ::getOrderAId, orderAId);
List<OrderALog> OrderALogs = this.orderALogMapper.selectList(queryOrderALog );
OrderALogs .forEach(OrderALog-> list.add(new Log(OrderALog.getUserId(),
OrderALog.getBefore(),
OrderALog.getAfter(),
OrderALog.getContent(),
OrderALog.getCreateTime()
)));
}
@ApiOperation(value = "日志:记录",)
@GetMapping(value = "/getLog")
public Result<IPage<Log>> getLog(
@RequestParam(name = "id")
@ApiParam(name = "id", value = "订单id", required = true) Long id, @RequestParam(name = "OrderId", required = false),
@ApiParam(name = "orderAId", value = "订单AId") Long orderAId) throws ParseException {
Order order= this.OrderService.getById(id);
if (order== null) {
return Result.error("未查到该信息!");
}
List<Log> log = this.orderLogService.getLog(id,orderAId);
Page<Log> page = new Page<>(1, 200);
//根据创建时间排序
log.sort(Comparator.comparing(LogVo::getCreateTime));
IPage<Log> LogPage = page.setRecords(log);
return Result.OK(LogPage );
}
返回:Ipage对象
这样即根据createTime排序同时翻译用户名
{
"success": true,
"message": "",
"code": 200,
"result": {
"records": [
{
"userId": "179637197793",
"before": null,
"after": 10,
"content": "交易清单录入",
"createTime": "2024-06-13 10:19:49",
"userId_dictText": "管理A"
},
{
"userId": "1795275",
"before": null,
"after": 10,
"content": "",
"createTime": "2024-06-14 15:45:44",
"userId_dictText": "管理员"
} ],
"total": 0,
"size": 200,
"current": 1,
"orders": [],
"optimizeCountSql": true,
"searchCount": true,
"maxLimit": null,
"countId": null,
"pages": 0
},
"timestamp": 1720402097673
}