package org.jeecg.modules.system.aspect; import cn.hutool.core.util.ArrayUtil; import java.util.*; import java.util.function.BiConsumer; /** * 批量查询器 */ public class FieldBatchQuery { // key=查询要素=table+paramName, value=查询条件 private Map queryBatch = new HashMap<>(); /** * 便利查询要素 * @param action */ public void forEach(BiConsumer action) { this.queryBatch.forEach(action); } /** * 查询表数量 * @return */ public int size() { return queryBatch.size(); } /** * 查找查询结果 * @param tableName * @param paramName * @param paramValue * @param column * @return */ public Object findResult(String tableName, String[] paramName, String[] paramValue, String column) { String queryKey = tableName + "()" + ArrayUtil.join(paramName, ","); if(!this.queryBatch.containsKey(queryKey)) return null; return this.queryBatch.get(queryKey).findResult(paramValue, column); } /** * 保存查询条件 * @param tableName 查询表名 * @param textName 查询字段名称 * @param paramName 查询参数名称 * @param paramValue 查询参数值 */ public void put(String tableName, String textName, String[] paramName, String[] paramValue) { String queryKey = tableName + "()" + ArrayUtil.join(paramName, ","); QueryParam queryParams; if(this.queryBatch.containsKey(queryKey)){ queryParams = this.queryBatch.get(queryKey); }else{ queryParams = new QueryParam(tableName, paramName); this.queryBatch.put(queryKey, queryParams); } // 添加查询结果column名称 queryParams.addTextName(textName); // 添加查询参数 queryParams.addParamValue(paramValue); } public static class QueryParam { private String queryTable; private Set columns = new HashSet<>(); private Set paramValueSet = new HashSet<>(); private String[] paramName; private List queryResult = new ArrayList<>(); private Map resultIndex = new HashMap<>(); public QueryParam(String tableName, String[] column) { this.queryTable = tableName; this.paramName = column; } public void addTextName(String textName) { this.columns.add(textName); } public void addParamValue(String[] paramValue) { paramValueSet.add(ArrayUtil.join(paramValue, ",")); } public String getQueryTable() { return queryTable; } public String[] getColumns() { String[] ret = new String[this.columns.size()]; this.columns.toArray(ret); return ret; } public String getParamName() { return "concat(" + ArrayUtil.join(this.paramName, ",',',") + ")"; } public String[] getParamValues() { String[] ret = new String[this.paramValueSet.size()]; this.paramValueSet.toArray(ret); return ret; } public void setQueryResult(List queryResult) { this.queryResult = queryResult; } public Object findResult(String[] paramValue, String column) { if(paramValue == null) return null; String value = ArrayUtil.join(paramValue, ","); if(this.resultIndex.containsKey(value)){ return this.queryResult.get(this.resultIndex.get(value)).get(column); } for (int i = 0; i < this.queryResult.size(); i++) { Map map = queryResult.get(i); if(value.equals(map.get("paramValue"))){ this.resultIndex.put(value, i); return map.get(column); } } return null; } } }