| 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<String, Object> params = new LinkedHashMap<>(); | 
|   | 
|     public QueryFilter() { | 
|     } | 
|   | 
|     public QueryFilter(List<QueryParam> 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<String, Object> getParams() { | 
|         return params; | 
|     } | 
|   | 
|     /** | 
|      * 给工作流用的 | 
|      * | 
|      * @return | 
|      */ | 
|     public Map<String, Object> getQueryParams() { | 
|         Map<String, Object> 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<OrderItem> 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 <T> List<T> getPageList(List<T> list) { | 
|         return new PageList<>(list, page.getTotal()); | 
|     } | 
|   | 
|     public <T> List<T> getPageList(List<T> list, int total) { | 
|         return new PageList<>(list, total); | 
|     } | 
| } |