/** * Copyright (C) 2018-2022 * All rights reserved, Designed By www.yixiang.co * 注意: * 本软件为www.yixiang.co开发研制 */ package com.gkhy.safePlatform.targetDuty.utils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.gkhy.safePlatform.targetDuty.annotation.Query; import org.apache.commons.collections.CollectionUtils; import org.springframework.util.StringUtils; import java.lang.reflect.Field; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; /** */ @SuppressWarnings({"unchecked", "all"}) public class QueryHelpPlus { public static QueryWrapper getPredicate(R obj, Q query) { QueryWrapper queryWrapper = new QueryWrapper(); if (query == null) { return queryWrapper; } try { List fields = getAllFields(query.getClass(), new ArrayList<>()); for (Field field : fields) { boolean accessible = field.isAccessible(); field.setAccessible(true); Query q = field.getAnnotation(Query.class); if (q != null) { String propName = q.propName(); String blurry = q.blurry(); String attributeName = isBlank(propName) ? field.getName() : propName; attributeName = humpToUnderline(attributeName); Class fieldType = field.getType(); Object val = field.get(query); if (val == null || "".equals(val)) { continue; } // 模糊多字段 if ( StringUtils.hasText(blurry)) { String[] blurrys = blurry.split(","); //queryWrapper.or(); queryWrapper.and(wrapper -> { for (int i = 0; i < blurrys.length; i++) { String column = humpToUnderline(blurrys[i]); //if(i!=0){ wrapper.or(); //} wrapper.like(column, val.toString()); } }); continue; } String finalAttributeName = attributeName; switch (q.type()) { case EQUAL: //queryWrapper.and(wrapper -> wrapper.eq(finalAttributeName, val)); queryWrapper.eq(attributeName, val); break; case GREATER_THAN: queryWrapper.ge(finalAttributeName, val); break; case LESS_THAN: queryWrapper.le(finalAttributeName, val); break; case LESS_THAN_NQ: queryWrapper.lt(finalAttributeName, val); break; case INNER_LIKE: queryWrapper.like(finalAttributeName, val); break; case LEFT_LIKE: queryWrapper.likeLeft(finalAttributeName, val); break; case RIGHT_LIKE: queryWrapper.likeRight(finalAttributeName, val); break; case IN: if (!CollectionUtils.isEmpty((Collection) val)) { queryWrapper.in(finalAttributeName, (Collection) val); } break; case NOT_EQUAL: queryWrapper.ne(finalAttributeName, val); break; case NOT_NULL: queryWrapper.isNotNull(finalAttributeName); break; case BETWEEN: List between = new ArrayList<>((List) val); queryWrapper.between(finalAttributeName, between.get(0), between.get(1)); break; case UNIX_TIMESTAMP: List UNIX_TIMESTAMP = new ArrayList<>((List) val); if (!UNIX_TIMESTAMP.isEmpty()) { SimpleDateFormat fm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); long time1 = fm.parse(UNIX_TIMESTAMP.get(0).toString()).getTime() / 1000; long time2 = fm.parse(UNIX_TIMESTAMP.get(1).toString()).getTime() / 1000; queryWrapper.between(finalAttributeName, time1, time2); } break; default: break; } } field.setAccessible(accessible); } } catch (Exception e) { System.out.println("自动注入失败:"+e.getMessage()); } return queryWrapper; } private static boolean isBlank(final CharSequence cs) { int strLen; if (cs == null || (strLen = cs.length()) == 0) { return true; } for (int i = 0; i < strLen; i++) { if (!Character.isWhitespace(cs.charAt(i))) { return false; } } return true; } private static List getAllFields(Class clazz, List fields) { if (clazz != null) { fields.addAll(Arrays.asList(clazz.getDeclaredFields())); getAllFields(clazz.getSuperclass(), fields); } return fields; } /*** * 驼峰命名转为下划线命名 * * @param para * 驼峰命名的字符串 */ public static String humpToUnderline(String para) { StringBuilder sb = new StringBuilder(para); int temp = 0;//定位 if (!para.contains("_")) { for (int i = 0; i < para.length(); i++) { if (Character.isUpperCase(para.charAt(i))) { sb.insert(i + temp, "_"); temp += 1; } } } return sb.toString(); } // public static void main(String[] args) { // QueryWrapper query = new QueryWrapper(); // //query.or(); // query.or(wrapper -> wrapper.eq("store_id", 1).or().eq("store_id", 2)); // //query.like("a",1); // //query.or(); // //query.like("b",2); // //query.and(wrapper->wrapper.eq("c",1)); // query.eq("1", 1); // // System.out.println(query.getSqlSegment()); // } }