package com.vci.ubcs.starter.util; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.StringUtil; import java.util.Locale; import java.util.Map; /** * UBCSSqlKeyword * map转wrapper时用到的比对转换 * @author ludc * @date 2023/06/06 10:01 */ public class UBCSSqlKeyword { private static final String SQL_REGEX = "'|%|--|insert|delete|select|count|group|union|drop|truncate|alter|grant|execute|exec|xp_cmdshell|call|declare|sql"; private static final String EQUAL = "_equal"; private static final String NOT_EQUAL = "_notequal"; private static final String LIKE = "_like"; private static final String LIKE_LEFT = "_likeleft"; private static final String LIKE_RIGHT = "_likeright"; private static final String NOT_LIKE = "_notlike"; private static final String GE = "_ge"; private static final String LE = "_le"; private static final String GT = "_gt"; private static final String LT = "_lt"; private static final String DATE_GE = "_datege"; private static final String DATE_GT = "_dategt"; private static final String DATE_EQUAL = "_dateequal"; private static final String DATE_LT = "_datelt"; private static final String DATE_LE = "_datele"; private static final String IS_NULL = "_null"; private static final String NOT_NULL = "_notnull"; private static final String IGNORE = "_ignore"; public UBCSSqlKeyword() { } public static void buildCondition(Map query, QueryWrapper qw) { if (!Func.isEmpty(query)) { query.forEach((k, v) -> { if (!Func.hasEmpty(new Object[]{k, v}) && !k.endsWith("_ignore")) { if (k.endsWith("_equal")) { qw.eq(getColumn(k, "_equal"), v); } else if (k.endsWith("_notequal")) { qw.ne(getColumn(k, "_notequal"), v); } else if (k.endsWith("_likeleft")) { qw.likeLeft(getColumn(k, "_likeleft"), v); } else if (k.endsWith("_likeright")) { qw.likeRight(getColumn(k, "_likeright"), v); } else if (k.endsWith("_notlike")) { qw.notLike(getColumn(k, "_notlike"), v); } else if (k.endsWith("_ge")) { qw.ge(getColumn(k, "_ge"), v); } else if (k.endsWith("_le")) { qw.le(getColumn(k, "_le"), v); } else if (k.endsWith("_gt")) { qw.gt(getColumn(k, "_gt"), v); } else if (k.endsWith("_lt")) { qw.lt(getColumn(k, "_lt"), v); } else if (k.endsWith("_datege")) { qw.ge(getColumn(k, "_datege"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss")); } else if (k.endsWith("_dategt")) { qw.gt(getColumn(k, "_dategt"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss")); } else if (k.endsWith("_dateequal")) { qw.eq(getColumn(k, "_dateequal"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss")); } else if (k.endsWith("_datele")) { qw.le(getColumn(k, "_datele"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss")); } else if (k.endsWith("_datelt")) { qw.lt(getColumn(k, "_datelt"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss")); } else if (k.endsWith("_null")) { qw.isNull(getColumn(k, "_null")); } else if (k.endsWith("_notnull")) { qw.isNotNull(getColumn(k, "_notnull")); } else { qw.like(getColumn(k, "_like"), v); } } }); } } public static void buildCondition(Map query, MPJLambdaWrapper qw) { if (!Func.isEmpty(query)) { query.forEach((k, v) -> { if (!Func.hasEmpty(new Object[]{k, v}) && !k.endsWith("_ignore")) { if (k.endsWith("_equal")) { qw.eq(getColumn(k, "_equal"), v); } else if (k.endsWith("_notequal")) { qw.ne(getColumn(k, "_notequal"), v); } else if (k.endsWith("_likeleft")) { qw.likeLeft(getColumn(k, "_likeleft"), v); } else if (k.endsWith("_likeright")) { qw.likeRight(getColumn(k, "_likeright"), v); } else if (k.endsWith("_notlike")) { qw.notLike(getColumn(k, "_notlike"), v); } else if (k.endsWith("_ge")) { qw.ge(getColumn(k, "_ge"), v); } else if (k.endsWith("_le")) { qw.le(getColumn(k, "_le"), v); } else if (k.endsWith("_gt")) { qw.gt(getColumn(k, "_gt"), v); } else if (k.endsWith("_lt")) { qw.lt(getColumn(k, "_lt"), v); } else if (k.endsWith("_datege")) { qw.ge(getColumn(k, "_datege"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss")); } else if (k.endsWith("_dategt")) { qw.gt(getColumn(k, "_dategt"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss")); } else if (k.endsWith("_dateequal")) { qw.eq(getColumn(k, "_dateequal"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss")); } else if (k.endsWith("_datele")) { qw.le(getColumn(k, "_datele"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss")); } else if (k.endsWith("_datelt")) { qw.lt(getColumn(k, "_datelt"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss")); } else if (k.endsWith("_null")) { qw.isNull(getColumn(k, "_null")); } else if (k.endsWith("_notnull")) { qw.isNotNull(getColumn(k, "_notnull")); } else { qw.like(getColumn(k, "_like"), v); } } }); } } public static void buildConditionByMapString(Map query, MPJLambdaWrapper qw) { if (!Func.isEmpty(query)) { query.forEach((k, v) -> { if (!Func.hasEmpty(new Object[]{k, v}) && !k.endsWith("_ignore")) { if (k.endsWith("_equal")) { qw.eq(getColumn(k, "_equal"), v); } else if (k.endsWith("_notequal")) { qw.ne(getColumn(k, "_notequal"), v); } else if (k.endsWith("_likeleft")) { qw.likeLeft(getColumn(k, "_likeleft"), v); } else if (k.endsWith("_likeright")) { qw.likeRight(getColumn(k, "_likeright"), v); } else if (k.endsWith("_notlike")) { qw.notLike(getColumn(k, "_notlike"), v); } else if (k.endsWith("_ge")) { qw.ge(getColumn(k, "_ge"), v); } else if (k.endsWith("_le")) { qw.le(getColumn(k, "_le"), v); } else if (k.endsWith("_gt")) { qw.gt(getColumn(k, "_gt"), v); } else if (k.endsWith("_lt")) { qw.lt(getColumn(k, "_lt"), v); } else if (k.endsWith("_datege")) { qw.ge(getColumn(k, "_datege"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss")); } else if (k.endsWith("_dategt")) { qw.gt(getColumn(k, "_dategt"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss")); } else if (k.endsWith("_dateequal")) { qw.eq(getColumn(k, "_dateequal"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss")); } else if (k.endsWith("_datele")) { qw.le(getColumn(k, "_datele"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss")); } else if (k.endsWith("_datelt")) { qw.lt(getColumn(k, "_datelt"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss")); } else if (k.endsWith("_null")) { qw.isNull(getColumn(k, "_null")); } else if (k.endsWith("_notnull")) { qw.isNotNull(getColumn(k, "_notnull")); } else { qw.like(getColumn(k, "_like"), v); } } }); } } public static void buildConditionByMapString(Map query, QueryWrapper qw) { if (!Func.isEmpty(query)) { query.forEach((k, v) -> { if (!Func.hasEmpty(new Object[]{k, v}) && !k.endsWith("_ignore")) { if (k.endsWith("_equal")) { qw.eq(getColumn(k, "_equal"), v); } else if (k.endsWith("_notequal")) { qw.ne(getColumn(k, "_notequal"), v); } else if (k.endsWith("_likeleft")) { qw.likeLeft(getColumn(k, "_likeleft"), v); } else if (k.endsWith("_likeright")) { qw.likeRight(getColumn(k, "_likeright"), v); } else if (k.endsWith("_notlike")) { qw.notLike(getColumn(k, "_notlike"), v); } else if (k.endsWith("_ge")) { qw.ge(getColumn(k, "_ge"), v); } else if (k.endsWith("_le")) { qw.le(getColumn(k, "_le"), v); } else if (k.endsWith("_gt")) { qw.gt(getColumn(k, "_gt"), v); } else if (k.endsWith("_lt")) { qw.lt(getColumn(k, "_lt"), v); } else if (k.endsWith("_datege")) { qw.ge(getColumn(k, "_datege"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss")); } else if (k.endsWith("_dategt")) { qw.gt(getColumn(k, "_dategt"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss")); } else if (k.endsWith("_dateequal")) { qw.eq(getColumn(k, "_dateequal"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss")); } else if (k.endsWith("_datele")) { qw.le(getColumn(k, "_datele"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss")); } else if (k.endsWith("_datelt")) { qw.lt(getColumn(k, "_datelt"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss")); } else if (k.endsWith("_null")) { qw.isNull(getColumn(k, "_null")); } else if (k.endsWith("_notnull")) { qw.isNotNull(getColumn(k, "_notnull")); } else { qw.like(getColumn(k, "_like"), v); } } }); } } /** * 目前考虑一种特殊情况,在做连表查询的时候,因为查询条件是map转wrapper, * 这样就会出现未明确定义列的错误,所以需要考虑在何处来做处理, * @param column * @param keyword * @return */ private static String getColumn(String column, String keyword) { //没有转下划线映射 return StringUtil.removeSuffix(column, keyword).toLowerCase(Locale.ROOT); } public static String filter(String param) { return param == null ? null : param.replaceAll("(?i)'|%|--|insert|delete|select|count|group|union|drop|truncate|alter|grant|execute|exec|xp_cmdshell|call|declare|sql", ""); } }