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);
|
}
|
}
|