package com.zt.common.db.query; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zt.common.constant.Constant; import com.zt.common.db.constant.OP; import com.zt.common.db.constant.OrderType; import org.apache.commons.lang3.StringUtils; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public class QueryFilter { /** * 分页组件 */ private Page page = new Page(); private QueryWrapper queryWrapper = new QueryWrapper(); /** * 字段参数构建列表 */ private Map params = new LinkedHashMap<>(); public QueryFilter() { } public QueryFilter(List queryParams) { try { for (QueryParam param : queryParams) { Object value = param.getValue(); if (value == null || (value instanceof String && StringUtils.isBlank((String) value))) { continue;// k空值跳过 } this.params.put(param.getName(), value); /** 参数名称^条件 eg:a^EQ 则表示,a字段是varchar类型,条件是eq ^后第一个参数为数据类型 */ if (StringUtils.isNotBlank(param.getFormat())) {// 指定格式 String[] aryParamKey = param.getFormat().split("\\^"); if (aryParamKey.length != 2) { return; } String name = aryParamKey[0], op = aryParamKey[1]; if (OP.EQ.equals(op)) { // 等于 queryWrapper.eq(name, value); } else if (OP.LESS.equals(op)) { // 小于 queryWrapper.lt(name, value); } else if (OP.GT.equals(op)) { // 大于 queryWrapper.gt(name, value); } else if (OP.LE.equals(op)) { // 小于等于 queryWrapper.le(name, value); } else if (OP.GE.equals(op)) { // 大于等于 queryWrapper.ge(name, value); } else if (OP.LIKE.equals(op)) { // 相似 queryWrapper.like(name, value); this.params.put(param.getName(), "%" + value.toString() + "%"); } else if (OP.LEFT_LIKE.equals(op)) { // 左相似 queryWrapper.likeLeft(name, value); this.params.put(param.getName(), "%" + value.toString()); } else if (OP.RIGHT_LIKE.equals(op)) { // 右相似 queryWrapper.likeRight(name, value); this.params.put(param.getName(), value.toString() + "%"); } else if (OP.IN.equals(op)) { // 在...中 queryWrapper.in(name, value.toString().split(",")); } else if (OP.NOT_IN.equals(op)) { // 不在...中 queryWrapper.notIn(name, value.toString().split(",")); } } } String offset = String.valueOf(params.get(Constant.Q.PAGE)); String limit = String.valueOf(params.get(Constant.Q.LIMIT)); if (StringUtils.isNotBlank(offset) && StringUtils.isNotBlank(limit)) { Page page = new Page(Long.parseLong(offset), Long.parseLong(limit)); // 分页参数 params.put(Constant.Q.PAGE, page); // 分页对象 this.setPage(page); } // 排序字段 String orderField = (String) params.get(Constant.Q.ORDER_FIELD); String order = (String) params.get(Constant.Q.ORDER); // 前端字段排序 if (StringUtils.isNotBlank(orderField) && StringUtils.isNotBlank(order)) { if (OrderType.fromString(order) == OrderType.ASC) { queryWrapper.orderByAsc(orderField); } else { queryWrapper.orderByDesc(orderField); } } } catch (Exception e) { } } public Page getPage() { return page; } public void setPage(Page page) { this.page = page; } public void addParam(String key, Object obj) { this.params.put(key, obj); } public Map getParams() { return params; } /** * 给工作流用的 * * @return */ public Map getQueryParams() { Map params = this.getParams(); // 构建动态条件SQL String dynamicWhereSql = queryWrapper.getCustomSqlSegment(); if (StringUtils.isNotEmpty(dynamicWhereSql)) { params.put("whereSql", dynamicWhereSql.replace("ew.paramNameValuePairs.", "").substring("where".length())); } params.putAll(queryWrapper.getParamNameValuePairs()); Page page = (Page) params.get(Constant.Q.PAGE); if (page != null) { List orderItems = page.getOrders(); if (orderItems.size() > 0) { StringBuilder sb = new StringBuilder(); for (OrderItem orderItem : orderItems) { sb.append(orderItem.getColumn()).append(" ").append(orderItem.isAsc() ? "" : "desc").append(","); } sb.deleteCharAt(sb.length() - 1); params.put("orderBySql", sb.toString()); } } return params; } public QueryWrapper getWrapper() { return queryWrapper; } public List getPageList(List list) { return new PageList<>(list, page.getTotal()); } public List getPageList(List list, int total) { return new PageList<>(list, total); } }