测试前调试建议
- 运行以下 SQL 查看每条记录的实际排序值:
sql
java
SELECT
*,
DATEDIFF(NOW(), create_time) AS days_diff,
IF(DATEDIFF(NOW(), create_time) > 10 AND STATUS != '2', 0, 1) AS top_flag
FROM t_cm_complaint
WHERE is_delete = 0
ORDER BY top_flag ASC, create_time DESC;
-
检查
create_time
字段的数据类型和实际值,确保时间计算准确。 -
如果需要更精确的时间判断,可以使用
TIMESTAMPDIFF
函数:IF(TIMESTAMPDIFF(HOUR, create_time, NOW()) > 240 AND STATUS != '2', 0, 1) ASC
最终我的sql这么写
java
/**
* 平台统一投诉管理表 分页 (超过十天未办结的工单需要置顶显示)
*/
@GetMapping("/list")
@ApiOperationSupport(order = 2)
@Operation(summary = "分页", description = "传入cmComplaint")
public R<IPage<CmComplaintVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> cmComplaint, Query query) {
// 去掉默认排序条件
query.setDescs(null);
QueryWrapper<CmComplaintEntity> queryWrapper = Condition.getQueryWrapper(cmComplaint, CmComplaintEntity.class);
// 添加置顶排序条件:超过10天未办结的工单排在最前
queryWrapper.last("ORDER BY IF(DATEDIFF(NOW(), create_time) > 10 AND status != '2', 0, 1) ASC, create_time DESC");
IPage<CmComplaintEntity> pages = cmComplaintService.page(Condition.getPage(query), queryWrapper);
return R.data(CmComplaintWrapper.build().pageVO(pages));
}