package com.vincent.rsf.httpaudit.web.util; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.vincent.rsf.framework.common.Cools; import java.util.HashMap; import java.util.Map; import java.util.regex.Pattern; /** * 管理端分页请求解析(与 rsf-admin MyDataProvider 入参一致) */ public final class HttpAuditAdminQueryHelper { private static final Pattern SAFE_ORDER = Pattern.compile( "^[a-zA-Z0-9_]+\\s+(asc|ASC|desc|DESC)(\\s*,\\s*[a-zA-Z0-9_]+\\s+(asc|ASC|desc|DESC))*$"); private HttpAuditAdminQueryHelper() { } public static Map normalizeBody(Map body) { Map m = new HashMap<>(body != null ? body : Map.of()); Object meta = m.get("meta"); if (meta instanceof Map) { for (Map.Entry e : ((Map) meta).entrySet()) { m.put(String.valueOf(e.getKey()), e.getValue()); } m.remove("meta"); } return m; } public static Page extractPage(Map m) { long cur = 1L; long size = 10L; if (m.get("current") != null) { cur = Long.parseLong(String.valueOf(m.get("current"))); } if (m.get("pageSize") != null) { size = Long.parseLong(String.valueOf(m.get("pageSize"))); } m.remove("current"); m.remove("pageSize"); return new Page<>(cur, size); } public static String extractOrderBy(Map m) { Object ob = m.remove("orderBy"); return ob == null ? null : String.valueOf(ob).trim(); } public static String extractCondition(Map m) { Object c = m.remove("condition"); if (Cools.isEmpty(c)) { return null; } return String.valueOf(c).trim(); } public static void applySafeOrder(QueryWrapper qw, String orderBy, String defaultOrderBySql) { if (orderBy != null && !orderBy.isEmpty() && SAFE_ORDER.matcher(orderBy).matches()) { qw.last("ORDER BY " + orderBy); } else if (defaultOrderBySql != null) { qw.last(defaultOrderBySql); } } /** create_time 区间;入参可为日期或含 T 的日期时间字符串 */ public static void applyCreateTimeRange(QueryWrapper qw, Object timeStart, Object timeEnd) { if (!Cools.isEmpty(timeStart)) { qw.ge("create_time", normalizeDateTimeParam(timeStart)); } if (!Cools.isEmpty(timeEnd)) { qw.le("create_time", normalizeDateTimeParam(timeEnd)); } } private static Object normalizeDateTimeParam(Object raw) { String s = String.valueOf(raw).trim(); return s.indexOf('T') >= 0 ? s.replace('T', ' ') : raw; } }