package com.jsh.erp.utils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.springframework.util.Assert; import java.util.List; import java.util.Map; import static com.jsh.erp.utils.Constants.CURRENT_PAGE; import static com.jsh.erp.utils.Constants.PAGE_SIZE; /** * @author jishenghua qq752718920 2018-10-7 15:26:27 */ public class QueryUtils { public static String filterSqlSpecialChar(String search) { return search != null ? search .replaceAll("_", "\\\\_") .replaceAll("!", "\\\\!") .replaceAll("\\[", "\\\\[") .replaceAll("\\]", "\\\\]") .replaceAll("\\^", "\\\\^") : null; } public static T list2One(List list, String label) { Assert.notNull(label); Assert.notEmpty(list, label + "对应的记录不存在"); Assert.isTrue(list.size() == 1, label + "对应的记录不止一个"); return list.get(0); } public static T list2One(List list, String label, T defaultValue) { Assert.notNull(list); Assert.notNull(label); if (list.isEmpty()) return defaultValue; else { Assert.isTrue(list.size() == 1, label + "对应的记录不止一个"); return list.get(0); } } public static List search(Map map) { List search = null; String str = map.get(Constants.SEARCH); if (StringUtil.isNotEmpty(str)) { search = StringUtil.searchCondition(str); } return search; } public static int rows(Map map) { return Integer.parseInt(map.get(PAGE_SIZE)); } public static int offset(Map map) { return (currentPage(map) - 1) * pageSize(map); } public static int pageSize(Map map) { return Integer.parseInt(map.get(PAGE_SIZE)); } public static int currentPage(Map map) { int val = Integer.parseInt(map.get(CURRENT_PAGE)); if (val < 1) throw new RuntimeException("当前页数目:" + val + " 必须大于0"); return val; } public static String order(Map map) { String orderString = OrderUtils.getOrderString(map.get(Constants.ORDER)); return orderString.trim().isEmpty() ? null : orderString; } public static Integer level(Map map) { String levelString = map.get(Constants.LEVEL); return StringUtil.isEmpty(levelString) ? null : Integer.parseInt(levelString); } public static boolean isRecursion(Map map) { String isRecursion = map.get(Constants.IS_RECURSION); return StringUtil.isNotEmpty(isRecursion) && Constants.IS_RECURSION_VALUE.equals(isRecursion); } public static int type(Map map) { return Integer.parseInt(map.get(Constants.TYPE)); } public static String filter(Map map) { if (map.containsKey(Constants.FILTER)) { JSONArray array = JSON.parseArray(map.get(Constants.FILTER)); if (array.isEmpty()) { return null; } else { boolean first = true; StringBuilder builder = new StringBuilder(); for (int idx = 0; idx < array.size(); ++idx) { JSONObject object = array.getJSONObject(idx); if (object.get("value") instanceof JSONArray) { JSONArray value = object.getJSONArray("value"); if (!value.isEmpty()) { if (!first) { builder.append(" AND "); } else { first = false; } String key = object.getString("name"); builder.append("("); builder.append("`").append(key).append("`"); builder.append(" IN "); builder.append("("); for (int vidx = 0; vidx < value.size(); ++vidx) { if (vidx != 0) { builder.append(","); } builder.append(value.getString(vidx)); } builder.append(")"); builder.append(")"); } } } return builder.toString(); } } else { return null; } } }