package com.vci.ubcs.starter.util;
|
|
import com.alibaba.cloud.commons.lang.StringUtils;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.OrderItem;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
import com.vci.ubcs.starter.web.constant.QueryOptionConstant;
|
import com.vci.ubcs.starter.web.util.VciBaseUtil;
|
import org.springblade.core.mp.support.Query;
|
import org.springblade.core.tool.support.Kv;
|
import org.springblade.core.tool.utils.BeanUtil;
|
import org.springblade.core.tool.utils.DateUtil;
|
import org.springblade.core.tool.utils.Func;
|
import org.springblade.core.tool.utils.StringUtil;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* map转单表查询对象
|
* 为避免BladeX框架自带的Map转Wrapper自动映射驼峰,
|
* 这边单独写一个以免混淆
|
* @author ludc
|
* @date 2023/6/6 15:26
|
*/
|
public class UBCSCondition {
|
|
/**
|
* 空格
|
*/
|
public static final String SPACE = " ";
|
|
public UBCSCondition() {
|
}
|
|
public static <T> IPage<T> getPage(Query query) {
|
Page<T> page = new Page((long) Func.toInt(query.getCurrent(), 1), (long)Func.toInt(query.getSize(), 10));
|
String[] ascArr = Func.toStrArray(query.getAscs());
|
String[] descArr = ascArr;
|
int var4 = ascArr.length;
|
|
int var5;
|
for(var5 = 0; var5 < var4; ++var5) {
|
String asc = descArr[var5];
|
page.addOrder(new OrderItem[]{OrderItem.asc(StringUtil.cleanIdentifier(asc))});
|
}
|
|
descArr = Func.toStrArray(query.getDescs());
|
String[] var8 = descArr;
|
var5 = descArr.length;
|
|
for(int var9 = 0; var9 < var5; ++var9) {
|
String desc = var8[var9];
|
page.addOrder(new OrderItem[]{OrderItem.desc(StringUtil.cleanIdentifier(desc))});
|
}
|
|
return page;
|
}
|
|
public static <T> QueryWrapper<T> getQueryWrapper(T entity) {
|
return new QueryWrapper<T>(entity);
|
}
|
|
public static <T> QueryWrapper<T> getQueryWrapper(Map<String, Object> query, Class<T> clazz) {
|
Kv exclude = Kv.create().set("Blade-Auth", "Blade-Auth").set("current", "current").set("size", "size").set("ascs", "ascs").set("descs", "descs");
|
return getQueryWrapper(query, exclude, clazz);
|
}
|
|
public static <T> QueryWrapper<T> getQueryWrapperByMapString(Map<String, String> query, Class<T> clazz) {
|
Kv exclude = Kv.create().set("Blade-Auth", "Blade-Auth").set("current", "current").set("size", "size").set("ascs", "ascs").set("descs", "descs");
|
return getQueryWrapperByMapString(query, exclude, clazz);
|
}
|
|
/**
|
* map转换为QueryWrapper
|
* @param query
|
* @param exclude
|
* @param clazz
|
* @param <T>
|
* @return
|
*/
|
public static <T> QueryWrapper<T> getQueryWrapper(Map<String, Object> query, Map<String, Object> exclude, Class<T> clazz) {
|
exclude.forEach((k, v) -> {
|
query.remove(k);
|
});
|
QueryWrapper<T> qw = new QueryWrapper();
|
qw.setEntity(BeanUtil.newInstance(clazz));
|
UBCSSqlKeyword.buildCondition(query, qw);
|
return qw;
|
}
|
|
public static <T> QueryWrapper<T> getQueryWrapperByMapString(Map<String, String> query, Map<String, Object> exclude, Class<T> clazz) {
|
exclude.forEach((k, v) -> {
|
query.remove(k);
|
});
|
QueryWrapper<T> qw = new QueryWrapper<>();
|
qw.setEntity(BeanUtil.newInstance(clazz));
|
UBCSSqlKeyword.buildConditionByMapString(query, qw);
|
return qw;
|
}
|
|
public static <T> MPJLambdaWrapper<T> getMPJLambdaWrapper(T entity) {
|
return new MPJLambdaWrapper(entity);
|
}
|
|
public static <T> MPJLambdaWrapper<T> getMPJLambdaWrapper(Map<String, Object> query, Class<T> clazz) {
|
Kv exclude = Kv.create().set("Blade-Auth", "Blade-Auth").set("current", "current").set("size", "size").set("ascs", "ascs").set("descs", "descs");
|
return getMPJLambdaWrapper(query, exclude, clazz);
|
}
|
|
public static <T> MPJLambdaWrapper<T> getMPJLambdaWrapperByMapString(Map<String, String> query, Class<T> clazz) {
|
Kv exclude = Kv.create().set("Blade-Auth", "Blade-Auth").set("current", "current").set("size", "size").set("ascs", "ascs").set("descs", "descs");
|
return getMPJLambdaWrapperByMapString(query, exclude, clazz);
|
}
|
|
/**
|
* map转换为MPJLambdaWrapper
|
* @param query
|
* @param exclude
|
* @param clazz
|
* @param <T>
|
* @return
|
*/
|
public static <T> MPJLambdaWrapper<T> getMPJLambdaWrapper(Map<String, Object> query, Map<String, Object> exclude, Class<T> clazz) {
|
exclude.forEach((k, v) -> {
|
query.remove(k);
|
});
|
MPJLambdaWrapper<T> qw = new MPJLambdaWrapper();
|
qw.setEntity(BeanUtil.newInstance(clazz));
|
UBCSSqlKeyword.buildCondition(query, qw);
|
return qw;
|
}
|
|
public static <T> MPJLambdaWrapper<T> getMPJLambdaWrapperByMapString(Map<String, String> query, Map<String, Object> exclude, Class<T> clazz) {
|
exclude.forEach((k, v) -> {
|
query.remove(k);
|
});
|
MPJLambdaWrapper<T> qw = new MPJLambdaWrapper();
|
qw.setEntity(BeanUtil.newInstance(clazz));
|
UBCSSqlKeyword.buildConditionByMapString(query, qw);
|
return qw;
|
}
|
|
public static String getWhereSqlByMap(Map<String, String> conditionMap){
|
List<String> whereSqlList = new ArrayList<>();
|
conditionMap.forEach((key,value)->{
|
String sql = "";
|
// 不为空才去拼接
|
if(!Func.hasEmpty(new Object[]{key, value}) && !key.endsWith("_ignore")){
|
if (key.endsWith("_like")) {
|
String field = UBCSSqlKeyword.getColumn(key, "_like");
|
sql = field + SPACE + "LIKE" + SPACE + "'%" + value + "%'" + SPACE;
|
} else if (key.endsWith("_notequal")) {
|
String field = UBCSSqlKeyword.getColumn(key, "_notequal");
|
sql = field + SPACE + " != " + value + SPACE;
|
} else if (key.endsWith("_likeleft")) {
|
String field = UBCSSqlKeyword.getColumn(key, "_likeleft");
|
sql = field + SPACE + "LIKE" + SPACE + "%" + value + SPACE;
|
} else if (key.endsWith("_likeright")) {
|
String field = UBCSSqlKeyword.getColumn(key, "_likeright");
|
sql = field + SPACE + "LIKE" + SPACE + value + "%" + SPACE;
|
} else if (key.endsWith("_notlike")) {
|
String field = UBCSSqlKeyword.getColumn(key, "_notlike");
|
sql = field + SPACE + "NO LIKE" + SPACE + "%" + value + "%" + SPACE;
|
} else if (key.endsWith("_ge")) {
|
String field = UBCSSqlKeyword.getColumn(key, "_ge");
|
sql = field + SPACE + " >= " + value + SPACE;
|
} else if (key.endsWith("_le")) {
|
//说明是<=的。我们需要先获取一下
|
String field = UBCSSqlKeyword.getColumn(key, "_le");
|
sql = field + SPACE + " <= " + value + "" + SPACE;
|
} else if (key.endsWith("_gt")) {
|
String field = UBCSSqlKeyword.getColumn(key, "_gt");
|
sql = field + SPACE + "> " + value + SPACE;
|
} else if (key.endsWith("_lt")) {
|
String field = UBCSSqlKeyword.getColumn(key, "_lt");
|
sql = field + SPACE + "< " + value + SPACE;
|
} else if (key.endsWith("_datege")) {
|
String field = UBCSSqlKeyword.getColumn(key, "_datege");
|
sql = field + SPACE + ">= '" + DateUtil.parse(String.valueOf(value), "yyyy-MM-dd HH:mm:ss") + "'" + SPACE;
|
} else if (key.endsWith("_dategt")) {
|
String field = UBCSSqlKeyword.getColumn(key, "_dategt");
|
sql = field + SPACE + "> '" + DateUtil.parse(String.valueOf(value), "yyyy-MM-dd HH:mm:ss") + "'" + SPACE;
|
} else if (key.endsWith("_dateequal")) {
|
String field = UBCSSqlKeyword.getColumn(key, "_dateequal");
|
sql = field + SPACE + "= '" + DateUtil.parse(String.valueOf(value), "yyyy-MM-dd HH:mm:ss") + "'" + SPACE;
|
} else if (key.endsWith("_datele")) {
|
String field = UBCSSqlKeyword.getColumn(key, "_datele");
|
sql = field + SPACE + "<= '" + DateUtil.parse(String.valueOf(value), "yyyy-MM-dd HH:mm:ss") + "'" + SPACE;
|
} else if (key.endsWith("_datelt")) {
|
String field = UBCSSqlKeyword.getColumn(key, "_datelt");
|
sql = field + SPACE + "< '" + DateUtil.parse(String.valueOf(value), "yyyy-MM-dd HH:mm:ss") + "'" + SPACE;
|
} else if (key.endsWith("_null")) {
|
String field = UBCSSqlKeyword.getColumn(key, "_null");
|
sql = field + SPACE + "IS NULL" + SPACE;
|
} else if (key.endsWith("_notnull")) {
|
String field = UBCSSqlKeyword.getColumn(key, "_notnull");
|
sql = field + SPACE + "IS NOT NULL" + SPACE;
|
} else if (key.endsWith("_dateequal")) {
|
String field = UBCSSqlKeyword.getColumn(key, "_dateequal");
|
sql = field + SPACE + "= '" + DateUtil.parse(String.valueOf(value), "yyyy-MM-dd HH:mm:ss") + "'" + SPACE;
|
} else if (key.endsWith("_equal")) {
|
String field = UBCSSqlKeyword.getColumn(key, "_equal");
|
sql = field + SPACE + "= '" + value + "'" + SPACE;
|
} else if(key.endsWith("_in")) {
|
String field = UBCSSqlKeyword.getColumn(key, "_in");
|
sql = VciBaseUtil.toInSql(field,value);
|
} else if(key.endsWith("_notin")) {
|
String field = UBCSSqlKeyword.getColumn(key, "_notin");
|
sql = VciBaseUtil.toInSql(field,value);
|
}else{
|
sql = VciBaseUtil.toInSql(key,value);
|
}
|
if(!sql.isEmpty()){
|
whereSqlList.add(sql);
|
}
|
}
|
});
|
//组合起来
|
StringBuilder andSb = new StringBuilder();
|
whereSqlList.stream().forEach(s -> {
|
andSb.append(s).append(SPACE).append(QueryOptionConstant.AND).append(SPACE);
|
});
|
String andString = andSb.toString().trim();
|
String endWithSql = QueryOptionConstant.AND;
|
if (andString.endsWith(endWithSql)) {
|
andString = andString.substring(0, andString.length() - endWithSql.length());
|
}
|
return andString;
|
}
|
|
}
|