diff --git a/pom.xml b/pom.xml index 78af187..8e2bad5 100644 --- a/pom.xml +++ b/pom.xml @@ -18,14 +18,14 @@ org.redkale redkale - 2.7.0 + 2.8.0.dev - + diff --git a/root/index.html b/root/index.html index cbcff52..72d1260 100644 --- a/root/index.html +++ b/root/index.html @@ -11,7 +11,7 @@ - + Meta-Kit @@ -42,7 +42,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/root/metadata/dataList.html b/root/metadata/dataList.html index 1e33267..527c41f 100644 --- a/root/metadata/dataList.html +++ b/root/metadata/dataList.html @@ -23,7 +23,7 @@ - + 业务列表(Meta-Service) @@ -33,8 +33,8 @@ - - + + 添加过滤条件 @@ -54,7 +54,7 @@ - + {{filter.label}} @@ -75,12 +75,12 @@ - + - 操作 + --> - + - + 实体表(Meta-Table) @@ -32,7 +32,7 @@ - + 已关联的表 diff --git a/root/metadata/metaService.html b/root/metadata/metaService.html index 8683cca..66da499 100644 --- a/root/metadata/metaService.html +++ b/root/metadata/metaService.html @@ -22,7 +22,7 @@ }*/ - + @@ -123,7 +123,7 @@ - + 业务相关表 @@ -133,7 +133,7 @@ - + 字段信息 @@ -164,7 +164,7 @@ - + 列表配置 diff --git a/root/metadata/metatable/import.html b/root/metadata/metatable/import.html index 067f9ca..7ba1cec 100644 --- a/root/metadata/metatable/import.html +++ b/root/metadata/metatable/import.html @@ -195,7 +195,7 @@ DB-Table - + - + @@ -51,7 +51,7 @@ - + 实体表(Meta-Table) @@ -60,7 +60,7 @@ - + 实体字段信息 diff --git a/root/qtask/debug.html b/root/qtask/debug.html index 3e3e473..3153acc 100644 --- a/root/qtask/debug.html +++ b/root/qtask/debug.html @@ -2,7 +2,7 @@ QTask - [测试用例] - + 选择QTask任务 @@ -57,7 +57,7 @@ RUN - + 查询结果: diff --git a/src/main/java/net/tccn/base/BaseServlet.java b/src/main/java/net/tccn/base/BaseServlet.java index dbaedb1..414349f 100644 --- a/src/main/java/net/tccn/base/BaseServlet.java +++ b/src/main/java/net/tccn/base/BaseServlet.java @@ -60,9 +60,9 @@ public class BaseServlet extends HttpServlet { if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With")) || (accept != null && accept.contains("application/json"))) { response.finish(JBean.by(-2, "未登陆")); } else { - response.setStatus(302); + //response.setStatus(302); response.setHeader("location", "/user/login.html"); - response.finish(); + response.finish304(); } return; } diff --git a/src/main/java/net/tccn/base/Kv.java b/src/main/java/net/tccn/base/Kv.java index f8229fd..be08148 100644 --- a/src/main/java/net/tccn/base/Kv.java +++ b/src/main/java/net/tccn/base/Kv.java @@ -1,21 +1,26 @@ package net.tccn.base; +import org.redkale.convert.json.JsonConvert; + +import javax.persistence.Id; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.function.Function; import java.util.function.Predicate; +import java.util.stream.Collectors; import java.util.stream.Stream; /** * Created by liangxianyou@eversec.cn at 2018/3/12 14:17. */ public class Kv extends LinkedHashMap { + + protected static final JsonConvert convert = JsonConvert.root(); + public static Kv of() { return new Kv(); } @@ -24,6 +29,16 @@ public class Kv extends LinkedHashMap { return new Kv().set(k, v); } + private static Predicate isNumber = (t) -> { + return t == Integer.class || t == int.class + || t == Long.class || t == long.class + || t == Float.class || t == float.class + || t == Double.class || t == double.class + || t == Short.class || t == short.class + || t == Byte.class || t == byte.class + ; + }; + public Kv set(K k, V v) { put(k, v); return this; @@ -34,9 +49,30 @@ public class Kv extends LinkedHashMap { return this; } + public static Kv filter(Map map, String... fields) { + Kv kv = Kv.of(); + if (fields == null || fields.length == 0 || map == null) { + return kv; + } + + for (String field : fields) { + if (field.contains("->")) { + String[] arr = field.split("->"); + kv.put(arr[1], map.get(arr[0])); + continue; + } + + kv.put(field, map.get(field)); + } + return kv; + } + // 将obj 属性映射到Kv 中 public static Kv toKv(Object m, String... fields) { Kv kv = Kv.of(); + if (m == null) { + return kv; + } Stream.of(fields).forEach(field -> { String filedT = field; String filedS = field; @@ -48,7 +84,7 @@ public class Kv extends LinkedHashMap { filedS = arr[1]; } - Method method = m.getClass().getDeclaredMethod("get" + Utils.toUpperCaseFirst(filedS)); + Method method = m.getClass().getMethod("get" + Utils.toUpperCaseFirst(filedS)); if (method != null) { kv.set(filedT, method.invoke(m)); } @@ -64,24 +100,8 @@ public class Kv extends LinkedHashMap { return toKv(m, Kv.of(), m.getClass()); } - private static Kv toKv(Object m, Kv kv, Class clazz) { - Field[] fields = clazz.getDeclaredFields(); - for (Field field : fields) { - try { - field.setAccessible(true); - if (!kv.containsKey(field.getName())) { - kv.set(field.getName(), field.get(m)); - } - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - - Class superclass = clazz.getSuperclass(); - if (superclass != null) { - kv = toKv(m, kv, superclass); - } - return kv; + public static List toKv(Collection datas, String... fields) { + return datas.stream().map(x -> toKv(x, fields)).collect(Collectors.toList()); } public T toBean(Class type) { @@ -93,28 +113,65 @@ public class Kv extends LinkedHashMap { return s.substring(0, 1).toUpperCase() + s.substring(1); }; - private static Predicate isNumber = (t) -> { - return t == Integer.class || t == int.class - || t == Long.class || t == long.class - || t == float.class || t == Float.class - || t == Double.class || t == double.class - || t == Short.class || t == short.class - || t == Byte.class || t == byte.class - ; - }; + private static Kv toKv(Object m, Kv kv, Class clazz) { + if (m instanceof Map) { + kv.putAll((Map) m); + return kv; + } + + Method[] methods = clazz.getMethods(); + for (Method method : methods) { + if (!method.getName().startsWith("get") || method.getParameterCount() > 0 || "getClass".equals(method.getName())) + continue; + + String k = toLowerCaseFirst(method.getName().replaceFirst("get", "")); + if (!kv.containsKey(k) || Utils.isEmpty(kv.get(k))) { + try { + kv.set(k, method.invoke(m)); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + } + + for (Field field : clazz.getDeclaredFields()) { + if (field.getAnnotation(Id.class) != null) { + try { + field.setAccessible(true); + kv.set("_id", field.get(m)); + break; + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + } + + Class superclass = clazz.getSuperclass(); + if (superclass != null) { + kv = toKv(m, kv, superclass); + } + return kv; + } public static T toAs(Object v, Class clazz) { if (v == null) { return null; - } else if (v.getClass() == clazz) { + } else if (v.getClass() == clazz) { // 类型一致返回 return (T) v; - } else if (clazz == String.class) { + } else if (clazz == String.class) { // 目标类型 Sting return (T) String.valueOf(v); + } else if (clazz == Kv.class) { // 目标类型 Kv + return (T) Kv.toKv(v); + } else if (clazz.isInstance(v)) { + return clazz.cast(v); + } else if (v instanceof Map) { // 源类型 Map + return Kv.toBean((Map) v, clazz); } Object v1 = v; try { - if (v.getClass() == Long.class) {//多种数值类型的处理: Long => x switch (clazz.getSimpleName()) { case "int", "Integer" -> v1 = (int) (long) v; @@ -168,19 +225,21 @@ public class Kv extends LinkedHashMap { } public static T toBean(Map map, Class clazz) { - //按照方法名 + 类型寻找, + //按照方法名 + 类型寻找, //按照方法名 寻找 //+ Object obj = null; try { - obj = clazz.newInstance(); - } catch (InstantiationException | IllegalAccessException e) { + obj = clazz.getDeclaredConstructor().newInstance(); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException | + NoSuchMethodException e) { new IllegalArgumentException("创建对象实列失败", e); // 检查clazz是否有无参构造 } for (String k : (Set) map.keySet()) { Object v = map.get(k); if (v == null) continue; + //寻找method try { String methodName = "set" + upFirst.apply(k); Class tClazz = null; @@ -212,8 +271,8 @@ public class Kv extends LinkedHashMap { method.invoke(obj, toAs(v, tClazz)); } - //没有方法,找属性注解 - if (method == null) { + //没有方法,找属性注解 + /*if (method == null) { Field field = null; Field[] fields = clazz.getDeclaredFields(); for (Field _field : fields) { @@ -229,7 +288,7 @@ public class Kv extends LinkedHashMap { field.setAccessible(true); field.set(obj, toAs(v, tClazz)); } - } + }*/ } catch (IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } @@ -238,5 +297,65 @@ public class Kv extends LinkedHashMap { return (T) obj; } + /** + * 将字符串第一个字母转大写 + * + * @param str 待转换字符串 + * @return + */ + public static String toUpperCaseFirst(String str) { + Objects.requireNonNull(str); + return str.substring(0, 1).toUpperCase() + str.substring(1); + } + /** + * 将字符串第一个字母转小写 + * + * @param str 待转换字符串 + * @return + */ + public static String toLowerCaseFirst(String str) { + Objects.requireNonNull(str); + return str.substring(0, 1).toLowerCase() + str.substring(1); + } + + public String toString() { + return convert.convertTo(this); + } + + public int getInt(String key) { + return toAs(get(key), int.class); + } + + public int getInt(String key, int defaultValue) { + V v = get(key); + if (v == null) { + return defaultValue; + } + return toAs(v, int.class); + } + + public long getLong(String key) { + return toAs(get(key), Long.class); + } + + public long getLong(String key, long defaultValue) { + V v = get(key); + if (v == null) { + return defaultValue; + } + return toAs(v, long.class); + } + + public String getStr(String key) { + return toAs(get(key), String.class); + } + + public String getStr(String key, String defaultValue) { + V v = get(key); + if (v == null) { + return defaultValue; + } + return toAs(v, String.class); + } } \ No newline at end of file diff --git a/src/main/java/net/tccn/base/Utils.java b/src/main/java/net/tccn/base/Utils.java index d8b7fc3..1d373ca 100644 --- a/src/main/java/net/tccn/base/Utils.java +++ b/src/main/java/net/tccn/base/Utils.java @@ -1,10 +1,11 @@ package net.tccn.base; import net.tccn.base.dbq.jdbc.api.DbSource; -import net.tccn.base.dbq.jdbc.api.DbSourceMysql; import java.lang.reflect.Array; import java.util.*; +import java.util.function.Function; +import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -112,4 +113,102 @@ public class Utils { return false; } + public static String fmt36(int n) { + return Integer.toString(n, 36); + } + + public static String fmt36(long n) { + return Long.toString(n, 36); + } + + public static Map toMap(Collection list, Function fun) { + Map map = new HashMap<>(list.size()); + for (V v : list) { + if (v == null) { + continue; + } + map.put(fun.apply(v), v); + } + return map; + } + + public static Map toMap(Collection list, Function fun, Function fun2) { + Map map = new HashMap<>(list.size()); + for (V v : list) { + if (v == null) { + continue; + } + map.put(fun.apply(v), fun2.apply(v)); + } + return map; + } + + public static List toList(Collection list, Function fun) { + if (list == null || list.isEmpty()) { + return new ArrayList<>(); + } + List list1 = new ArrayList<>(); + list.forEach(x -> list1.add(fun.apply(x))); + return list1; + } + + public static Set toSet(Collection list, Function fun) { + if (list == null || list.isEmpty()) { + return new HashSet<>(); + } + Set set = new HashSet<>(list.size()); + list.forEach(x -> set.add(fun.apply(x))); + return set; + } + + public static List filter(Collection list, Predicate predicate) { + if (list == null || list.isEmpty()) { + return new ArrayList<>(); + } + List list1 = new ArrayList<>(list.size()); + list.forEach(x -> { + if (!predicate.test(x)) { + return; + } + + list1.add(x); + }); + + return list1; + } + + public static List filterToList(Collection list, Predicate predicate, Function fun) { + if (list == null || list.isEmpty()) { + return new ArrayList<>(); + } + List list1 = new ArrayList<>(list.size()); + + list.forEach(x -> { + if (!predicate.test(x)) { + return; + } + + list1.add(fun.apply(x)); + }); + + return list1; + } + + public static Map> group(Collection list, Function fun) { + if (list == null || list.isEmpty()) { + return new HashMap<>(); + } + return list.stream().collect(Collectors.groupingBy(fun)); + } + + public static Map> group(Collection list, Function fun, Function fun2) { + if (list == null || list.isEmpty()) { + return new HashMap<>(); + } + Map> group = group(list, fun); + Map> _group = new HashMap<>(); + group.forEach((k, v) -> _group.put(k, toList(v, fun2))); + return _group; + } + } diff --git a/src/main/java/net/tccn/base/arango/Doc.java b/src/main/java/net/tccn/base/arango/Doc.java index 04c9ec1..dac81d5 100644 --- a/src/main/java/net/tccn/base/arango/Doc.java +++ b/src/main/java/net/tccn/base/arango/Doc.java @@ -251,6 +251,7 @@ public abstract class Doc { if (t == null) { t = (T) this; } + // arangoSource.createDocument(this); return db.query(arangoSource.parseAqlCount(t), int.class).first(); } //ok diff --git a/src/main/java/net/tccn/base/dbq/DbExecutors.java b/src/main/java/net/tccn/base/dbq/DbExecutors.java index 253fffd..22a41f3 100644 --- a/src/main/java/net/tccn/base/dbq/DbExecutors.java +++ b/src/main/java/net/tccn/base/dbq/DbExecutors.java @@ -30,7 +30,7 @@ public class DbExecutors { //System.out.printf("----------------%n countSql:%s%n findSql:%s%n----------------%n", sqls[0], sqls[1]); CompletableFuture countFuture = CompletableFuture.supplyAsync(() -> dbKit.findColumn(sqls[0], int.class)); - CompletableFuture> listFuture = CompletableFuture.supplyAsync(() -> dbKit.findList(sqls[1], Map.class)); + CompletableFuture> listFuture = CompletableFuture.supplyAsync(() -> dbKit.queryList(sqls[1], Map.class)); List rows = listFuture.get(); Integer total = countFuture.get(); diff --git a/src/main/java/net/tccn/base/dbq/fbean/FBean.java b/src/main/java/net/tccn/base/dbq/fbean/FBean.java index 1675c53..e4ef834 100644 --- a/src/main/java/net/tccn/base/dbq/fbean/FBean.java +++ b/src/main/java/net/tccn/base/dbq/fbean/FBean.java @@ -1,6 +1,7 @@ package net.tccn.base.dbq.fbean; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; import java.util.List; @@ -8,7 +9,8 @@ import java.util.List; * 查询用实体 * @author: liangxianyou at 2018/10/25 14:49. */ -@Data +@Getter +@Setter public class FBean { private String platToken; // 平台token diff --git a/src/main/java/net/tccn/base/dbq/fbean/Filter.java b/src/main/java/net/tccn/base/dbq/fbean/Filter.java index d632338..54b8bf6 100644 --- a/src/main/java/net/tccn/base/dbq/fbean/Filter.java +++ b/src/main/java/net/tccn/base/dbq/fbean/Filter.java @@ -1,6 +1,7 @@ package net.tccn.base.dbq.fbean; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; import java.util.List; @@ -8,7 +9,8 @@ import java.util.List; * 查询条件实体 * Created by liangxianyou at 2018/12/14 15:34. */ -@Data +@Getter +@Setter public class Filter { private String col; private String value; diff --git a/src/main/java/net/tccn/base/dbq/fbean/Limit.java b/src/main/java/net/tccn/base/dbq/fbean/Limit.java index 7ee40b2..6b91c60 100644 --- a/src/main/java/net/tccn/base/dbq/fbean/Limit.java +++ b/src/main/java/net/tccn/base/dbq/fbean/Limit.java @@ -1,11 +1,13 @@ package net.tccn.base.dbq.fbean; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; /** * Created by liangxianyou at 2018/12/14 15:36. */ -@Data +@Getter +@Setter public class Limit { private int pn; private int ps; diff --git a/src/main/java/net/tccn/base/dbq/fbean/Order.java b/src/main/java/net/tccn/base/dbq/fbean/Order.java index ed38a82..d5abcc2 100644 --- a/src/main/java/net/tccn/base/dbq/fbean/Order.java +++ b/src/main/java/net/tccn/base/dbq/fbean/Order.java @@ -1,13 +1,15 @@ package net.tccn.base.dbq.fbean; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; import java.util.List; /** * Created by liangxianyou at 2018/12/14 15:36. */ -@Data +@Getter +@Setter public class Order { private String col; private int desc;//1 or -1 diff --git a/src/main/java/net/tccn/base/dbq/jdbc/api/DbAccount.java b/src/main/java/net/tccn/base/dbq/jdbc/api/DbAccount.java index 9349526..935cc52 100644 --- a/src/main/java/net/tccn/base/dbq/jdbc/api/DbAccount.java +++ b/src/main/java/net/tccn/base/dbq/jdbc/api/DbAccount.java @@ -1,6 +1,7 @@ package net.tccn.base.dbq.jdbc.api; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; import net.tccn.base.arango.Doc; import org.redkale.convert.ConvertColumn; @@ -12,7 +13,8 @@ import java.util.List; * * @author: liangxianyou at 2018/11/14 12:58. */ -@Data +@Getter +@Setter @Table(name = "MetaDb", catalog = "db_meta") public class DbAccount extends Doc { public static DbAccount dao = dao(DbAccount.class); diff --git a/src/main/java/net/tccn/base/dbq/jdbc/api/DbKit.java b/src/main/java/net/tccn/base/dbq/jdbc/api/DbKit.java index 4776046..cc075ba 100644 --- a/src/main/java/net/tccn/base/dbq/jdbc/api/DbKit.java +++ b/src/main/java/net/tccn/base/dbq/jdbc/api/DbKit.java @@ -61,13 +61,13 @@ public class DbKit implements DbSource { } @Override - public List findList(String sql, Class type) { - return dbSource.findList(sql, type); + public List queryList(String sql, Class type) { + return dbSource.queryList(sql, type); } @Override - public T findFirst(String sql, Class type) { - return dbSource.findFirst(sql, type); + public T find(String sql, Class type) { + return dbSource.find(sql, type); } @Override @@ -85,20 +85,20 @@ public class DbKit implements DbSource { dbSource.dropTable(tableName); } - public void exetute(String sql) { - dbSource.exetute(sql); + public boolean exetute(String sql) { + return dbSource.exetute(sql); } // ----------------------------------------- - public CompletableFuture findfirstAsync(String sql, Class type) { - return CompletableFuture.supplyAsync(() -> findFirst(sql, type)); + public CompletableFuture findAsync(String sql, Class type) { + return CompletableFuture.supplyAsync(() -> find(sql, type)); } - public CompletableFuture> findListAsync(String sql, Class type) { - return CompletableFuture.supplyAsync(() -> findList(sql, type)); + public CompletableFuture> queryListAsync(String sql, Class type) { + return CompletableFuture.supplyAsync(() -> queryList(sql, type)); } - public CompletableFuture queryColumnAsync(String sql, Class type) { + public CompletableFuture findColumnAsync(String sql, Class type) { return CompletableFuture.supplyAsync(() -> findColumn(sql, type)); } diff --git a/src/main/java/net/tccn/base/dbq/jdbc/api/DbSource.java b/src/main/java/net/tccn/base/dbq/jdbc/api/DbSource.java index 6684bd9..cba92a1 100644 --- a/src/main/java/net/tccn/base/dbq/jdbc/api/DbSource.java +++ b/src/main/java/net/tccn/base/dbq/jdbc/api/DbSource.java @@ -13,9 +13,9 @@ public interface DbSource extends IService { void setDbAccount(DbAccount dbAccount); void setCatalog(String catelog); - List findList(String sql, Class type); + List queryList(String sql, Class type); - T findFirst(String sql, Class type); + T find(String sql, Class type); T findColumn(String sql, Class type); @@ -25,21 +25,21 @@ public interface DbSource extends IService { //待实现 default void update(String tableName, T t) {} - default int queryInt(String sql) { + default int findInt(String sql) { return findColumn(sql, int.class); } - default long queryLong(String sql) { + default long findLong(String sql) { return findColumn(sql, long.class); } - default double queryDouble(String sql) { + default double findDouble(String sql) { return findColumn(sql, double.class); } - default Date queryDate(String sql) { + default Date findDate(String sql) { return findColumn(sql, Date.class); } void createTable(String sql); void dropTable(String tableName); - void exetute(String sql); + boolean exetute(String sql); } diff --git a/src/main/java/net/tccn/base/dbq/jdbc/api/DbSourceMysql.java b/src/main/java/net/tccn/base/dbq/jdbc/api/DbSourceMysql.java index a214eb2..3241072 100644 --- a/src/main/java/net/tccn/base/dbq/jdbc/api/DbSourceMysql.java +++ b/src/main/java/net/tccn/base/dbq/jdbc/api/DbSourceMysql.java @@ -55,7 +55,7 @@ public class DbSourceMysql implements DbSource { } @Override - public List findList(String sql, Class type) { + public List queryList(String sql, Class type) { Connection connection = connection(); try ( PreparedStatement ps = connection.prepareStatement(sql); @@ -83,7 +83,7 @@ public class DbSourceMysql implements DbSource { } } } - list.add(Map.class == type ? row : Kv.toBean(row, type)); + list.add(Kv.toAs(row, type)); } return list; @@ -97,8 +97,8 @@ public class DbSourceMysql implements DbSource { } @Override - public T findFirst(String sql, Class type) { - List list = findList(sql, type); + public T find(String sql, Class type) { + List list = queryList(sql, type); return list.size() > 0 ? list.get(0) : null; } @@ -150,12 +150,12 @@ public class DbSourceMysql implements DbSource { } @Override - public void exetute(String sql) { + public boolean exetute(String sql) { Connection connection = connection(); try ( PreparedStatement ps = connection.prepareStatement(sql); ) { - ps.execute(); + return ps.execute(); //ps.executeUpdate(); } catch (SQLException e) { throw new CfgException("SQL 执行失败:", sql); @@ -166,50 +166,31 @@ public class DbSourceMysql implements DbSource { //fixme: lxy 处理连接超过8小时失效问题 private Connection connection() { - Connection connection = connection(0); - if (connection != null && catalog != null && !catalog.isEmpty()) { - try { + Connection connection = null; + try { + connection = connection(0); + if (catalog != null && !catalog.isEmpty()) { connection.setCatalog(catalog); //还回连接的时候是否需要重置catalog? 后续观察 - } catch (SQLException e) { - e.printStackTrace(); } + } catch (InterruptedException | SQLException e) { + new IllegalArgumentException("获取连接失败", e); } return connection; } - private Connection connection(int n) { + private synchronized Connection connection(int n) throws InterruptedException, SQLException { LinkedBlockingQueue queue = conns.getOrDefault(accountKey, new LinkedBlockingQueue<>(15)); - Connection conn = null; AtomicInteger num = counter.getOrDefault(accountKey, new AtomicInteger(0)); - try { - if (queue.size() == 0 && num.get() < 15) { - conn = DriverManager.getConnection(dbAccount.getUrl(), dbAccount.getUser(), dbAccount.getPwd()); - int x = num.incrementAndGet(); - counter.put(accountKey, num); - System.out.println("创建新的连接:" + x); - } else { - conn = queue.take(); - if (conn.isClosed()) { - System.out.println("connetion had closed,"); - conn = connection(n); - } - } - } catch (SQLException | InterruptedException e) { - if (e instanceof InterruptedException) { - try { - conn = DriverManager.getConnection(dbAccount.getUrl(), dbAccount.getUser(), dbAccount.getPwd()); - num.getAndIncrement(); - if (conn != null) { - System.out.println("获取连接异常,并重新创建成功"); - } - } catch (SQLException ex) { - new IllegalArgumentException("创建连接失败", e); - } - num.getAndIncrement(); - counter.put(accountKey, num); - } else { - new IllegalArgumentException("获取连接失败", e); + if (queue.size() == 0 && num.get() < 15) { // 创建总连接数小于15,且暂无可用连接 + conn = DriverManager.getConnection(dbAccount.getUrl(), dbAccount.getUser(), dbAccount.getPwd()); + int x = num.incrementAndGet(); + counter.put(accountKey, num); + System.out.println("创建新的连接:" + x); + } else { + conn = queue.take(); + if (!conn.isValid(5)) { + conn = connection(++n); } } conns.put(accountKey, queue); diff --git a/src/main/java/net/tccn/base/dbq/parser/ParseMysql.java b/src/main/java/net/tccn/base/dbq/parser/ParseMysql.java index f830167..f5149f2 100644 --- a/src/main/java/net/tccn/base/dbq/parser/ParseMysql.java +++ b/src/main/java/net/tccn/base/dbq/parser/ParseMysql.java @@ -87,7 +87,7 @@ public class ParseMysql implements Parser { //from StringBuilder bufFrom = new StringBuilder(); - bufFrom.append(" from ").append(metaTable.getCatalog()).append(".`").append(metaTable.getName()).append("` `").append(metaTable.getAlias()).append("`"); + bufFrom.append(" from `").append(metaTable.getCatalog()).append("`.`").append(metaTable.getName()).append("` `").append(metaTable.getAlias()).append("`"); //left join if (!Utils.isEmpty(links)) { links.forEach(x -> { diff --git a/src/main/java/net/tccn/base/dbq/qtask/DbTask.java b/src/main/java/net/tccn/base/dbq/qtask/DbTask.java index 89ba0fc..018f756 100644 --- a/src/main/java/net/tccn/base/dbq/qtask/DbTask.java +++ b/src/main/java/net/tccn/base/dbq/qtask/DbTask.java @@ -1,6 +1,7 @@ package net.tccn.base.dbq.qtask; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; import net.tccn.base.arango.Doc; import javax.persistence.Table; @@ -8,7 +9,8 @@ import javax.persistence.Table; /** * @author: liangxianyou at 2018/11/13 14:59. */ -@Data +@Getter +@Setter @Table(name = "DbTask", catalog = "db_meta") public class DbTask extends Doc { public static DbTask dao = dao(DbTask.class); diff --git a/src/main/java/net/tccn/base/dbq/table/Column.java b/src/main/java/net/tccn/base/dbq/table/Column.java index b26bf94..f414f3b 100644 --- a/src/main/java/net/tccn/base/dbq/table/Column.java +++ b/src/main/java/net/tccn/base/dbq/table/Column.java @@ -1,12 +1,14 @@ package net.tccn.base.dbq.table; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; /** * 数据库表的列 * @author: liangxianyou at 2018/10/8 10:59. */ -@Data +@Getter +@Setter public class Column { private String field; //列名称 private String type; //列类型 diff --git a/src/main/java/net/tccn/base/dbq/table/Field.java b/src/main/java/net/tccn/base/dbq/table/Field.java index c4a656c..8b3c19d 100644 --- a/src/main/java/net/tccn/base/dbq/table/Field.java +++ b/src/main/java/net/tccn/base/dbq/table/Field.java @@ -1,11 +1,13 @@ package net.tccn.base.dbq.table; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; /** * @author: liangxianyou at 2018/10/17 17:24. */ -@Data +@Getter +@Setter public class Field { private String name; private String label; diff --git a/src/main/java/net/tccn/base/dbq/table/Table.java b/src/main/java/net/tccn/base/dbq/table/Table.java index f3ebd9f..41f0422 100644 --- a/src/main/java/net/tccn/base/dbq/table/Table.java +++ b/src/main/java/net/tccn/base/dbq/table/Table.java @@ -1,7 +1,8 @@ package net.tccn.base.dbq.table; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; import java.util.ArrayList; import java.util.List; @@ -10,7 +11,8 @@ import java.util.List; * 数据库表. * @author: liangxianyou at 2018/10/8 10:58. */ -@Data +@Getter +@Setter public class Table { private String catalog; //库名称 private String name; //表名称 diff --git a/src/main/java/net/tccn/dict/Dict.java b/src/main/java/net/tccn/dict/Dict.java index dab3522..b4728de 100644 --- a/src/main/java/net/tccn/dict/Dict.java +++ b/src/main/java/net/tccn/dict/Dict.java @@ -1,6 +1,7 @@ package net.tccn.dict; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; import net.tccn.base.arango.Doc; import javax.persistence.Table; @@ -9,7 +10,8 @@ import java.io.Serializable; /** * @author: liangxianyou */ -@Data +@Getter +@Setter @Table(name = "Dict", catalog = "db_meta") public class Dict extends Doc implements Serializable { public static Dict dao = Doc.dao(Dict.class); diff --git a/src/main/java/net/tccn/meta/Filter.java b/src/main/java/net/tccn/meta/Filter.java index 87ec5b9..364a176 100644 --- a/src/main/java/net/tccn/meta/Filter.java +++ b/src/main/java/net/tccn/meta/Filter.java @@ -1,6 +1,7 @@ package net.tccn.meta; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; import java.util.List; import java.util.Map; @@ -8,7 +9,8 @@ import java.util.Map; /** * @author: liangxianyou */ -@Data +@Getter +@Setter public class Filter { private String name; private String label; diff --git a/src/main/java/net/tccn/meta/FromItem.java b/src/main/java/net/tccn/meta/FromItem.java index c6a28a3..095fe97 100644 --- a/src/main/java/net/tccn/meta/FromItem.java +++ b/src/main/java/net/tccn/meta/FromItem.java @@ -1,13 +1,15 @@ package net.tccn.meta; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; import java.util.List; /** * @author: liangxianyou */ -@Data +@Getter +@Setter public class FromItem { private String col; private String label; diff --git a/src/main/java/net/tccn/meta/MetaLink.java b/src/main/java/net/tccn/meta/MetaLink.java index 5b769f8..c058fba 100644 --- a/src/main/java/net/tccn/meta/MetaLink.java +++ b/src/main/java/net/tccn/meta/MetaLink.java @@ -1,6 +1,7 @@ package net.tccn.meta; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; import net.tccn.base.arango.Doc; import javax.persistence.Table; @@ -9,7 +10,8 @@ import java.util.Map; /** * Created by liangxianyou at 2018/12/25 16:22. */ -@Data +@Getter +@Setter @Table(name = "MetaLink", catalog = "db_meta") public class MetaLink extends Doc { public static MetaLink dao = Doc.dao(MetaLink.class); diff --git a/src/main/java/net/tccn/meta/MetaService.java b/src/main/java/net/tccn/meta/MetaService.java index 1fff715..eda8158 100644 --- a/src/main/java/net/tccn/meta/MetaService.java +++ b/src/main/java/net/tccn/meta/MetaService.java @@ -1,6 +1,7 @@ package net.tccn.meta; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; import net.tccn.base.arango.Doc; import javax.persistence.Table; @@ -12,7 +13,8 @@ import java.util.Map; /** * Created by liangxianyou at 2018/12/24 16:15. */ -@Data +@Getter +@Setter @Table(name = "MetaService", catalog = "db_meta") public class MetaService extends Doc { public static MetaService dao = Doc.dao(MetaService.class); diff --git a/src/main/java/net/tccn/meta/MetaTable.java b/src/main/java/net/tccn/meta/MetaTable.java index c6bde9f..6c98492 100644 --- a/src/main/java/net/tccn/meta/MetaTable.java +++ b/src/main/java/net/tccn/meta/MetaTable.java @@ -1,6 +1,7 @@ package net.tccn.meta; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; import net.tccn.base.arango.Doc; import net.tccn.base.dbq.table.Field; @@ -15,7 +16,8 @@ import java.util.stream.Collectors; * * @author: liangxianyou at 2018/10/17 12:58. */ -@Data +@Getter +@Setter @Table(name = "MetaTable", catalog = "db_meta") public class MetaTable extends Doc implements Serializable { public static final MetaTable dao = MetaTable.dao(MetaTable.class); @@ -27,6 +29,7 @@ public class MetaTable extends Doc implements Serializable { private String sysPlatId; //所属系统平台 private String dbPlatId; //所属数据平台 private String catalog; //所在database + private Integer status; //状态 0 默认, 9删除 private Integer hv;//临时 // ------------------------------------------------ diff --git a/src/main/java/net/tccn/meta/MetadataService.java b/src/main/java/net/tccn/meta/MetadataService.java index dfaf72a..7de1fa0 100644 --- a/src/main/java/net/tccn/meta/MetadataService.java +++ b/src/main/java/net/tccn/meta/MetadataService.java @@ -1,9 +1,6 @@ package net.tccn.meta; -import net.tccn.base.BaseService; -import net.tccn.base.JBean; -import net.tccn.base.Kv; -import net.tccn.base.MetaKit; +import net.tccn.base.*; import net.tccn.base.dbq.table.Field; import net.tccn.plat.MetaPlat; import org.redkale.net.http.RestMapping; @@ -29,7 +26,8 @@ public class MetadataService extends BaseService { //arango -> (isEmpty(catalog) || catalog.equals(x.getCatalog())) && (isEmpty(dbPlatId) || dbPlatId.equals(x.getDbPlatId())) && (isEmpty(name) || x.getName().contains(name)) && - (isEmpty(token) || x.getSysPlatId().equals(platId(token))) + (isEmpty(token) || x.getSysPlatId().equals(platId(token))) && + (isEmpty(x.getStatus()) || x.getStatus() != 9) ).map(x -> Kv.of("name", x.getName()) .set("comment", x.getComment()) .set("catalog", x.getCatalog()) @@ -139,7 +137,7 @@ public class MetadataService extends BaseService { //arango @RestMapping(name = "showsort", comment = "展示字段修改") public JBean showSort(String name, List> shows, @RestParam(name = "platToken") String token) { - if (shows == null || shows.size() == 0) return null; + if (Utils.isEmpty(shows)) return null; MetaService metaService = MetaKit.getMetaService(name, token); metaService.setShows(shows); @@ -149,7 +147,7 @@ public class MetadataService extends BaseService { //arango @RestMapping(name = "exportsave", comment = "导出配置保存") public JBean exportSave(String name, List> exports, @RestParam(name = "platToken") String token) { - if (exports == null || exports.size() == 0) return null; + if (Utils.isEmpty(exports)) return null; MetaService metaService = MetaKit.getMetaService(name, token); metaService.setExports(exports); @@ -160,7 +158,7 @@ public class MetadataService extends BaseService { //arango @RestMapping(name = "detailsave", comment = "详情配置保存") public JBean detailSave(String name, List> details, @RestParam(name = "platToken") String token) { - if (details == null || details.size() == 0) return null; + if (Utils.isEmpty(details)) return null; MetaService metaService = MetaKit.getMetaService(name, token); metaService.setDetails(details); @@ -171,7 +169,7 @@ public class MetadataService extends BaseService { //arango @RestMapping(name = "editsave", comment = "表单配置保存") public JBean editSave(String name, List edits, @RestParam(name = "platToken") String token) { - if (edits == null || edits.size() == 0) return null; + if (Utils.isEmpty(edits)) return null; MetaService metaService = MetaKit.getMetaService(name, token); metaService.setEdits(edits); @@ -182,7 +180,7 @@ public class MetadataService extends BaseService { //arango @RestMapping(name = "delsave", comment = "删除配置保存") public JBean delSave(String name, Map dels, @RestParam(name = "platToken") String token) { - if (dels == null || dels.size() == 0) return null; + if (Utils.isEmpty(dels)) return null; MetaService metaService = MetaKit.getMetaService(name, token); metaService.setDels(dels); @@ -193,7 +191,7 @@ public class MetadataService extends BaseService { //arango @RestMapping(name = "importsort", comment = "导入字段保存") public JBean importSort(String serviceKey, List items, @RestParam(name = "platToken") String token) { - if (isEmpty(items)) return null; + if (Utils.isEmpty(items)) return null; MetaTable metaTable = MetaKit.getMetaTable(serviceKey, token); //fixme: metaTable.setImports(items); @@ -230,8 +228,9 @@ public class MetadataService extends BaseService { //arango JBean jBean = new JBean(); List list = MetaKit.getMetaTables().stream() - .filter(x -> (isEmpty(token) || x.getSysPlatId().equals(platId(token)))) - .map(x -> { + .filter(x -> (isEmpty(token) || x.getSysPlatId().equals(platId(token))) + && (x.getStatus() == null || x.getStatus() != 9) + ).map(x -> { Kv kv = Kv.of("name", x.getName()) .set("comment", x.getComment()) .set("alias", x.getAlias()) @@ -277,9 +276,7 @@ public class MetadataService extends BaseService { //arango List links = MetaKit.getMetaLinks(); if (!isEmpty(alias)) { - links = links.stream() - .filter(x -> x.getTables()[0].equals(alias) || x.getTables()[1].equals(alias)) - .collect(Collectors.toList()); + links = Utils.filter(links, x -> x.getTables()[0].equals(alias) || x.getTables()[1].equals(alias)); } return jBean.setBody(links); diff --git a/src/main/java/net/tccn/plat/MetaDb.java b/src/main/java/net/tccn/plat/MetaDb.java index 29d0877..2859cef 100644 --- a/src/main/java/net/tccn/plat/MetaDb.java +++ b/src/main/java/net/tccn/plat/MetaDb.java @@ -1,17 +1,18 @@ package net.tccn.plat; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; import net.tccn.base.arango.Doc; import org.redkale.convert.ConvertColumn; import javax.persistence.Table; -import java.util.List; /** * 数据库平台 * @author: liangxianyou at 2018/11/14 12:58. */ -@Data +@Getter +@Setter @Table(name = "MetaDb", catalog = "db_meta") public class MetaDb extends Doc { public static MetaDb dao = dao(MetaDb.class); diff --git a/src/main/java/net/tccn/plat/MetaPlat.java b/src/main/java/net/tccn/plat/MetaPlat.java index 946d6fb..b071e8e 100644 --- a/src/main/java/net/tccn/plat/MetaPlat.java +++ b/src/main/java/net/tccn/plat/MetaPlat.java @@ -1,14 +1,16 @@ package net.tccn.plat; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; import net.tccn.base.arango.Doc; - -import javax.persistence.Table; +import org.redkale.persistence.Entity; +import org.redkale.persistence.Table; /** * @author: liangxianyou at 2018/11/26 17:46. */ -@Data +@Getter +@Setter @Table(name = "MetaPlat", catalog = "db_meta") public class MetaPlat extends Doc { public static MetaPlat dao = dao(MetaPlat.class); diff --git a/src/main/java/net/tccn/plat/_DbService.java b/src/main/java/net/tccn/plat/_DbService.java index 88d8d44..1d3b785 100644 --- a/src/main/java/net/tccn/plat/_DbService.java +++ b/src/main/java/net/tccn/plat/_DbService.java @@ -32,7 +32,7 @@ public class _DbService extends BaseService { dbKit = MetaKit.getDbKit(dbPlatId, ""); } - List list = dbKit.findList("SHOW DATABASES;", Map.class); + List list = dbKit.queryList("SHOW DATABASES;", Map.class); Stream database = list.stream().map(x -> String.valueOf(x.get("Database"))); @@ -44,7 +44,7 @@ public class _DbService extends BaseService { DbKit dbKit = MetaKit.getDbKit(dbPlatId, ""); String sql = tplKit.getTpl("db.table_list", Kv.of("catalog", catalog).set("tables", tables)); - return dbKit.findList(sql, Table.class); + return dbKit.queryList(sql, Table.class); } @RestMapping(ignore = true) @@ -77,8 +77,8 @@ public class _DbService extends BaseService { String sql = tplKit.getTpl("db.table_list", Kv.of("table", tableName)); String columnSql = String.format("SHOW FULL COLUMNS FROM %s.`%s`", catalog, tableName); - CompletableFuture tableFuture = dbKit.findfirstAsync(sql, Table.class); - CompletableFuture> columnFuture = dbKit.findListAsync(columnSql, Column.class); + CompletableFuture tableFuture = dbKit.findAsync(sql, Table.class); + CompletableFuture> columnFuture = dbKit.queryListAsync(columnSql, Column.class); try { Table table = tableFuture.get(); diff --git a/src/main/java/net/tccn/qtask/DbTask.java b/src/main/java/net/tccn/qtask/DbTask.java index c960197..47446ee 100644 --- a/src/main/java/net/tccn/qtask/DbTask.java +++ b/src/main/java/net/tccn/qtask/DbTask.java @@ -1,6 +1,7 @@ package net.tccn.qtask; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; import net.tccn.base.arango.Doc; import javax.persistence.Table; @@ -8,7 +9,8 @@ import javax.persistence.Table; /** * Created by liangxianyou at 2019/4/20 20:04. */ -@Data +@Getter +@Setter @Table(name = "DbTask", catalog = "db_meta") public class DbTask extends Doc { public static DbTask dao = dao(DbTask.class); diff --git a/src/main/java/net/tccn/qtask/Task.java b/src/main/java/net/tccn/qtask/Task.java index 2a98aa1..0822658 100644 --- a/src/main/java/net/tccn/qtask/Task.java +++ b/src/main/java/net/tccn/qtask/Task.java @@ -1,6 +1,7 @@ package net.tccn.qtask; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; import net.tccn.base.Kv; import net.tccn.base.dbq.jdbc.api.DbAccount; @@ -10,7 +11,8 @@ import net.tccn.base.dbq.jdbc.api.DbAccount; * |- * 任务对象 */ -@Data +@Getter +@Setter public class Task { private String name; // 任务标识,同一系统唯一 diff --git a/src/main/java/net/tccn/qtask/impl/QTaskMysql.java b/src/main/java/net/tccn/qtask/impl/QTaskMysql.java index 40a647d..15be374 100644 --- a/src/main/java/net/tccn/qtask/impl/QTaskMysql.java +++ b/src/main/java/net/tccn/qtask/impl/QTaskMysql.java @@ -58,6 +58,6 @@ public class QTaskMysql extends QTaskAbs implements QTask { dbKit.exetute(sql); }*/ - return dbKit.findList(sql, Map.class); + return dbKit.queryList(sql, Map.class); } } diff --git a/src/main/java/net/tccn/user/MetaUser.java b/src/main/java/net/tccn/user/MetaUser.java index 3b1d292..4d83215 100644 --- a/src/main/java/net/tccn/user/MetaUser.java +++ b/src/main/java/net/tccn/user/MetaUser.java @@ -1,6 +1,7 @@ package net.tccn.user; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; import net.tccn.base.JBean; import net.tccn.base.arango.Doc; import org.redkale.util.Utility; @@ -10,7 +11,8 @@ import javax.persistence.Table; /** * @author: liangxianyou at 2018/11/22 17:37. */ -@Data +@Getter +@Setter @Table(name = "MetaUser", catalog = "db_meta") public class MetaUser extends Doc { public static MetaUser dao = dao(MetaUser.class);