From 5f53c363471c34297e2a84f42c814d2dff615172 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期二, 19 十二月 2023 11:05:54 +0800
Subject: [PATCH] #
---
zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/DateUtils.java | 195 +++
zy-asrs-framework/src/main/resources/templates/Xml.txt | 10
zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/Arith.java | 120 ++
zy-asrs-framework/src/main/java/com/zy/asrs/framework/annotations/ManagerAuth.java | 27
zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/CoolGenerator.java | 787 +++++++++++++
zy-asrs-framework/src/main/java/com/zy/asrs/framework/utils/SignUtils.java | 53
pom.xml | 1
zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/RadixTools.java | 163 ++
zy-asrs-framework/src/main/resources/templates/Html.txt | 86 +
zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/Protocol.java | 89 +
zy-asrs-framework/.gitignore | 33
zy-asrs-framework/src/main/resources/META-INF/spring.factories | 1
zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/Cache.java | 72 +
zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/Cools.java | 368 ++++++
zy-asrs-framework/src/main/resources/templates/ServiceImpl.txt | 12
zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/utils/GeneratorUtils.java | 149 ++
zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/SpringUtils.java | 38
zy-asrs-framework/src/main/resources/templates/Sql.txt | 18
zy-asrs-framework/src/main/resources/templates/Service.txt | 8
zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/R.java | 62 +
zy-asrs-framework/src/main/java/com/zy/asrs/framework/exception/ApplicationException.java | 18
zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/constant/SqlOsType.java | 9
zy-asrs-framework/src/main/java/com/zy/asrs/framework/controller/AbstractBaseController.java | 69 +
zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/domain/Column.java | 285 ++++
zy-asrs-framework/src/main/java/com/zy/asrs/framework/annotations/AppAuth.java | 27
zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/BaseRes.java | 14
zy-asrs-framework/src/main/resources/templates/Js.txt | 252 ++++
zy-asrs-framework/src/main/resources/templates/Controller.txt | 135 ++
zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/AesUtils.java | 81 +
zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/SnowflakeIdWorker.java | 162 ++
zy-asrs-framework/src/main/java/com/zy/asrs/framework/exception/CoolException.java | 17
zy-asrs-framework/src/main/java/com/zy/asrs/framework/config/CoolBaseConfig.java | 31
zy-asrs-framework/pom.xml | 52
zy-asrs-framework/src/main/java/com/zy/asrs/framework/domain/KeyValueVo.java | 36
zy-asrs-framework/src/main/resources/templates/Mapper.txt | 12
zy-asrs-framework/src/main/java/com/zy/asrs/framework/annotations/CoolTranslate.java | 15
zy-asrs-framework/src/main/resources/templates/Entity.txt | 16
zy-asrs-framework/src/main/java/com/zy/asrs/framework/utils/Algorithm.java | 22
38 files changed, 3,545 insertions(+), 0 deletions(-)
diff --git a/pom.xml b/pom.xml
index 09dfdca..cd9e21a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,6 +18,7 @@
<modules>
<module>zy-asrs-common</module>
+ <module>zy-asrs-framework</module>
<module>zy-asrs-wcs</module>
<module>zy-asrs-wms</module>
</modules>
diff --git a/zy-asrs-framework/.gitignore b/zy-asrs-framework/.gitignore
new file mode 100644
index 0000000..549e00a
--- /dev/null
+++ b/zy-asrs-framework/.gitignore
@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
diff --git a/zy-asrs-framework/pom.xml b/zy-asrs-framework/pom.xml
new file mode 100644
index 0000000..a12faef
--- /dev/null
+++ b/zy-asrs-framework/pom.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>asrs-framework</artifactId>
+ <version>1.0.0</version>
+
+ <name>framework</name>
+
+ <parent>
+ <groupId>com.zy</groupId>
+ <artifactId>asrs</artifactId>
+ <version>1.0.0</version>
+ </parent>
+
+ <properties>
+ <jdk.version>1.8</jdk.version>
+ <spring-framework.version>5.3.9</spring-framework.version>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context</artifactId>
+ <version>${spring-framework.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>mysql</groupId>
+ <artifactId>mysql-connector-java</artifactId>
+ <version>5.1.46</version>
+ </dependency>
+ <dependency>
+ <groupId>com.microsoft.sqlserver</groupId>
+ <artifactId>mssql-jdbc</artifactId>
+ <version>8.2.2.jre8</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <configuration>
+ <encoding>UTF-8</encoding>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/annotations/AppAuth.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/annotations/AppAuth.java
new file mode 100644
index 0000000..41f027c
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/annotations/AppAuth.java
@@ -0,0 +1,27 @@
+package com.zy.asrs.framework.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 搴旂敤绔璇佹爣绛�
+ */
+@Target({ElementType.TYPE,ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AppAuth {
+
+ Auth value() default Auth.CHECK;
+
+ // 澶囨敞
+ String memo() default "";
+
+ public enum Auth{
+ //鏉冮檺妫�娴�
+ CHECK,
+ //涓嶆娴嬫潈闄�
+ NONE
+ }
+
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/annotations/CoolTranslate.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/annotations/CoolTranslate.java
new file mode 100644
index 0000000..c765ed8
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/annotations/CoolTranslate.java
@@ -0,0 +1,15 @@
+package com.zy.asrs.framework.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.TYPE,ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface CoolTranslate {
+
+ // 鎰忔��
+ String value() default "";
+
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/annotations/ManagerAuth.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/annotations/ManagerAuth.java
new file mode 100644
index 0000000..7f22898
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/annotations/ManagerAuth.java
@@ -0,0 +1,27 @@
+package com.zy.asrs.framework.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 绠$悊绔璇佹爣绛�
+ */
+@Target({ElementType.TYPE,ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ManagerAuth {
+
+ Auth value() default Auth.CHECK;
+
+ // 澶囨敞
+ String memo() default "";
+
+ public enum Auth{
+ //鏉冮檺妫�娴�
+ CHECK,
+ //涓嶆娴嬫潈闄�
+ NONE
+ }
+
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/AesUtils.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/AesUtils.java
new file mode 100644
index 0000000..3ff908a
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/AesUtils.java
@@ -0,0 +1,81 @@
+package com.zy.asrs.framework.common;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+
+
+/**
+ * aes128-base64
+ * @author Vincent
+ */
+public class AesUtils {
+
+ private final static String DEFAULT_CHARSET = "utf-8";
+ private final static int DEFAULT_KEY_LENGTH = 16;
+
+ /**
+ * aes128 - base64 鍔犲瘑
+ * @param data 闇�瑕佸姞瀵嗙殑鏄庢枃
+ * @param key 鐩�
+ * @return 瀵嗘枃
+ */
+ public static String encrypt(String data, String key) {
+ try {
+ if (null == key || "".equals(key) || key.length() != DEFAULT_KEY_LENGTH) {
+ return null;
+ }
+ byte[] raw = key.getBytes(DEFAULT_CHARSET);
+ SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
+ Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"绠楁硶/妯″紡/琛ョ爜鏂瑰紡"
+ cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
+ byte[] encrypted = cipher.doFinal(data.getBytes(DEFAULT_CHARSET));
+ return RadixTools.bytesToHexStr(encrypted);
+ } catch (Exception ex) {
+ return null;
+ }
+
+ }
+
+ /**
+ * aes128 - base64 瑙e瘑
+ * @param data 闇�瑕佽В瀵嗙殑瀵嗘枃
+ * @param key 鐩�
+ * @return 鏄庢枃
+ */
+ public static String decrypt(String data, String key) {
+ try {
+ if (null == key || "".equals(key) || key.length() != DEFAULT_KEY_LENGTH) {
+ return null;
+ }
+ byte[] raw = key.getBytes(DEFAULT_CHARSET);
+ SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
+ Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
+ cipher.init(Cipher.DECRYPT_MODE, skeySpec);
+ byte[] original = cipher.doFinal(RadixTools.hexStringToBytes(data));
+ return new String(original,DEFAULT_CHARSET);
+ } catch (Exception ex) {
+ return null;
+ }
+ }
+
+ public static void main(String[] args) {
+ //test
+ String key = "123456";
+// String jsonData = "json={\"status\":200,\"msg\":\"success\",\"data\":\"dsadsa\"}×tamp=" + String.valueOf(System.currentTimeMillis()+5000000L);
+//// String jsonData = "status=200&msg=xltys1995==sadsadsad×tamp=" + String.valueOf(System.currentTimeMillis()+5000000L);
+// System.out.println(System.currentTimeMillis() + 5000000L);
+// String encrypt = encrypt(key, jsonData);
+// System.out.println(encrypt);
+// String key = "QeCB1d74ab24482b";
+// String s = decrypt("bd064484343cde2d325693c0611c157d04294ae2cea03854d10a2f0aa01377cfc69cf6c700ae665c8f4c539d030bb2af"
+// , key);
+// System.out.printf(s);
+
+
+ String data = "15988786205×tamp=" + (System.currentTimeMillis() + 5000000L);
+// String jsonData = "status=200&msg=xltys1995==sadsadsad×tamp=" + String.valueOf(System.currentTimeMillis()+5000000L);
+ System.out.println(System.currentTimeMillis() + 5000000L);
+ String encrypt = encrypt(data,key);
+ System.out.println(encrypt);
+ }
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/Arith.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/Arith.java
new file mode 100644
index 0000000..c252c65
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/Arith.java
@@ -0,0 +1,120 @@
+package com.zy.asrs.framework.common;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+
+/**
+ * 鍥涘垯杩愮畻
+ * Created by vincent on 2019-04-15
+ */
+public class Arith {
+
+ /**
+ * 鍔犳硶
+ * @param dot 淇濈暀灏忔暟鐐�
+ * @param numbers 鏁板瓧绫诲瀷
+ */
+ public static double add(int dot, Number... numbers) {
+ return getAirth(dot, ArithType.ADD.getValue(), numbers);
+ }
+
+ /**
+ * 鍑忔硶
+ * @param dot 淇濈暀灏忔暟鐐�
+ * @param numbers 绗竴涓槸琚噺鏁�
+ */
+ public static double subtract(int dot, Number... numbers) {
+ return getAirth(dot, ArithType.SUBTRACT.getValue(), numbers);
+ }
+
+ /**
+ * 涔樻硶
+ * @param dot 淇濈暀灏忔暟鐐�
+ * @param numbers 涔樻硶鐨勫洜瀛�
+ */
+ public static double multiplys(int dot, Number... numbers) {
+ return getAirth(dot, ArithType.MULTIPLY.getValue(), numbers);
+ }
+
+ /**
+ * 闄ゆ硶
+ * @param dot 淇濈暀灏忔暟鐐�
+ * @param numbers 闄ゆ暟锛岀涓�涓槸闄ゆ暟
+ */
+ public static double divides(int dot, Number... numbers) {
+ return getAirth(dot, ArithType.DIVIDE.getValue(), numbers);
+ }
+
+ /**
+ * 鑾峰彇鐧惧垎姣�
+ * @param numbers 闄ゆ暟锛岀涓�涓槸闄ゆ暟
+ * @return 鐧惧垎鏁� * 100
+ */
+ public static int percentage(Number... numbers){
+ return (int) (divides(2,numbers) * 100);
+ }
+
+ /**
+ * 浣欐暟
+ * @param numbers
+ * @return
+ */
+ public static double remainder(Number... numbers){
+ return new BigDecimal(numbers[0].toString()).remainder(new BigDecimal(String.valueOf(numbers[1]))).doubleValue();
+ }
+
+ /**
+ * 缁煎悎鐨勮繍绠�
+ * @param dot 淇濈暀绮惧害
+ * @param arithType 杩愮畻鐨勭被鍨�
+ * @param numbers 闇�瑕佽繍绠楃殑鏁板瓧
+ */
+ private static double getAirth(int dot, int arithType, Number... numbers) {
+ if (numbers == null || numbers.length == 0) {
+ return 0.0;
+ }
+ BigDecimal bigDecimal = new BigDecimal(numbers[0].toString());
+ for (int i = 1; i < numbers.length; i++) {
+ switch (arithType) {
+ case 0:
+ bigDecimal = bigDecimal.add(new BigDecimal(String.valueOf(numbers[i])));
+
+ break;
+ case 1:
+ bigDecimal = bigDecimal.divide(new BigDecimal(String.valueOf(numbers[i])), dot, RoundingMode.HALF_UP);
+ break;
+ case 2:
+ bigDecimal = bigDecimal.subtract(new BigDecimal(String.valueOf(numbers[i])));
+ break;
+ case 3:
+ bigDecimal = bigDecimal.multiply(new BigDecimal(String.valueOf(numbers[i])));
+ break;
+ default:
+ return 0.00;
+ }
+ }
+ return bigDecimal.setScale(dot, RoundingMode.HALF_UP).doubleValue();
+ }
+
+
+ /**
+ * 杩愮畻鐨勭被鍨�
+ */
+ private enum ArithType {
+ ADD("add", 0),
+ DIVIDE("divide", 1),
+ SUBTRACT("subtract", 2),
+ MULTIPLY("multiply", 3);
+ @SuppressWarnings("unused")
+ private String key;
+ private int value;
+ ArithType(String key, int value) {
+ this.key = key;
+ this.value = value;
+ }
+ public int getValue() {
+ return value;
+ }
+ }
+
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/BaseRes.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/BaseRes.java
new file mode 100644
index 0000000..b61dda1
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/BaseRes.java
@@ -0,0 +1,14 @@
+package com.zy.asrs.framework.common;
+
+public interface BaseRes {
+
+ String OK = "200-鎿嶄綔鎴愬姛";
+ String EMPTY = "201-鏆傛棤鏁版嵁";
+ String LIMIT = "202-鏃犳潈闄�";
+ String PARAM = "401-鍙傛暟涓虹┖";
+ String DENIED = "403-璇烽噸鏂扮櫥褰�";
+ String REPEAT = "407-宸插瓨鍦�";
+ String NO_ACTIVATION = "409-璇峰厛婵�娲荤郴缁�";
+ String ERROR = "500-鏈嶅姟鍣ㄩ敊璇�";
+
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/Cache.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/Cache.java
new file mode 100644
index 0000000..1497359
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/Cache.java
@@ -0,0 +1,72 @@
+package com.zy.asrs.framework.common;
+
+import com.zy.asrs.framework.exception.ApplicationException;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Supplier;
+
+/**
+ * 缂撳瓨
+ *
+ */
+public class Cache {
+
+ private Map<String,Object> caches=new ConcurrentHashMap<>();
+
+ @SuppressWarnings("unchecked")
+ public <T>T get(Class<T> prototype) {
+ return (T) get(prototype.getName());
+ }
+
+ public Object get(String key) {
+ return get(key,true);
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T>T get(String key,Supplier<T> func){
+ if(!hasKey(key)) {
+ put(key,func.get());
+ }
+ return (T)get(key);
+ }
+
+ public Object get(String key,boolean exist) {
+ if(exist) {
+ if(!hasKey(key)) {
+ throw new ApplicationException(this+"-鎵句笉鍒扮紦瀛樺璞�:"+key);
+ }
+ }
+ return caches.get(key);
+ }
+
+ public Cache put(Object value) {
+ String key=value.getClass().getName();
+ put(key,value);
+ return this;
+ }
+
+ public Cache put(String key,Object value) {
+ put(key, value,true);
+ return this;
+ }
+
+ public Cache put(String key,Object value,boolean exist) {
+ if(exist) {
+ if(hasKey(key)) {
+ throw new ApplicationException(this+"-缂撳瓨"+key+"宸插瓨鍦�");
+ }
+ }
+ caches.put(key, value);
+ return this;
+ }
+
+ public boolean hasKey(Class<?> prototype) {
+ return hasKey(prototype.getName());
+ }
+
+ public boolean hasKey(String key) {
+ return caches.containsKey(key);
+ }
+
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/Cools.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/Cools.java
new file mode 100644
index 0000000..f8f4a79
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/Cools.java
@@ -0,0 +1,368 @@
+package com.zy.asrs.framework.common;
+
+import com.zy.asrs.framework.annotations.CoolTranslate;
+
+import java.lang.reflect.*;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Created by vincent on 2019-06-09
+ */
+public class Cools {
+
+ public static boolean isEmpty(Object... objects) {
+ for (Object obj : objects){
+ if (isEmpty(obj)){
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @SuppressWarnings("rawtypes")
+ public static boolean isEmpty(Object o) {
+ if (o == null) {
+ return true;
+ }
+ if (o instanceof String) {
+ if (o.toString().trim().equals("")) {
+ return true;
+ }
+ } else if (o instanceof List) {
+ if (((List) o).size() == 0) {
+ return true;
+ }
+ } else if (o instanceof Map) {
+ if (((Map) o).size() == 0) {
+ return true;
+ }
+ } else if (o instanceof Set) {
+ if (((Set) o).size() == 0) {
+ return true;
+ }
+ } else if (o instanceof Object[]) {
+ if (((Object[]) o).length == 0) {
+ return true;
+ }
+ } else if (o instanceof int[]) {
+ if (((int[]) o).length == 0) {
+ return true;
+ }
+ } else if (o instanceof long[]) {
+ if (((long[]) o).length == 0) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static int sqlLimitIndex(Integer pageIndex, Integer pageSize){
+ return (pageIndex - 1) * pageSize;
+ }
+
+ public static String enToken(String username, String password){
+ return AesUtils.encrypt(username, zerofill(password, 16));
+ }
+
+ public static String deTokn(String token, String password){
+ return AesUtils.decrypt(token, zerofill(password, 16));
+ }
+
+ public static String zerofill(String msg, Integer count){
+ if (msg.length() == count){
+ return msg;
+ } else if (msg.length() > count){
+ return msg.substring(0, 16);
+ } else {
+ StringBuilder msgBuilder = new StringBuilder(msg);
+ for (int i = 0; i<count-msg.length(); i++){
+ msgBuilder.append("0");
+ }
+ return msgBuilder.toString();
+ }
+ }
+
+ /**
+ * 鎴彇瀛楃涓�(榛樿end=true)
+ * @param str 琚埅瀛楃涓�
+ * @param end true:鏈�鍚庝竴涓瓧绗� / false:绗竴涓瓧绗�
+ */
+ public static String deleteChar(String str, boolean end){
+ if (isEmpty(str)){
+ return "";
+ }
+ if (end){
+ return str.substring(0, str.length()-1);
+ } else {
+ return str.substring(1);
+ }
+ }
+
+ public static String deleteChar(String str){
+ return deleteChar(str, true);
+ }
+
+
+ /**
+ * map 杞� 瀵硅薄
+ */
+ public static <T> T conver(Map<? extends String, ?> map, Class<T> cls){
+ T instance = null;
+ try {
+ Constructor<T> constructor = cls.getDeclaredConstructor();
+ boolean constructorAccessible = constructor.isAccessible();
+ constructor.setAccessible(true);
+ instance = constructor.newInstance();
+ constructor.setAccessible(constructorAccessible);
+ } catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e) {
+ e.printStackTrace();
+ }
+ Class<?> prototype = cls;
+ do {
+ for (Field field : prototype.getDeclaredFields()){
+ if (Modifier.isFinal(field.getModifiers())
+ || Modifier.isStatic(field.getModifiers())
+ || Modifier.isTransient(field.getModifiers())){
+ continue;
+ }
+ String fieldName = field.getName();
+ Object val = null;
+ if (map.containsKey(fieldName)){
+ val = map.get(fieldName);
+ }
+ if (val != null){
+ boolean fieldAccessible = field.isAccessible();
+ field.setAccessible(true);
+ Class<?> type = field.getType();
+ try {
+ Constructor<?> constructor = type.getDeclaredConstructor(String.class);
+ boolean constructorAccessible = constructor.isAccessible();
+ constructor.setAccessible(true);
+ field.set(instance, constructor.newInstance(String.valueOf(val)));
+ constructor.setAccessible(constructorAccessible);
+ } catch (IllegalAccessException
+ | InstantiationException
+ | InvocationTargetException
+ | NoSuchMethodException e) {
+ System.err.println("convert error ===> Class["+prototype+"],Field:["+fieldName+"],Type:["+type+"],Value:["+val+"]");
+ }
+ field.setAccessible(fieldAccessible);
+ }
+ }
+ prototype = prototype.getSuperclass();
+ } while (!Object.class.equals(prototype));
+ return instance;
+ }
+
+ /**
+ * 瀵硅薄 杞� map
+ */
+ public static Map<String, Object> conver(Object obj){
+ Class<?> cls = obj.getClass();
+ Field[] fields = getAllFields(cls);
+ Map<String, Object> map = new HashMap<>();
+ for (Field field : fields) {
+ if (Modifier.isFinal(field.getModifiers())
+ || Modifier.isStatic(field.getModifiers())
+ || Modifier.isTransient(field.getModifiers())){
+ continue;
+ }
+ String key = field.getName();
+ boolean flag = field.isAccessible();
+ field.setAccessible(true);
+ Object val = null;
+ try {
+ val = field.get(obj);
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ field.setAccessible(flag);
+ if (val != null){
+ map.put(key, val);
+ }
+ }
+ return map;
+ }
+
+ /**
+ * 鑾峰彇鎸囧畾Class锛堝強鍏禨uperClass锛夌殑鎴愬憳鍙橀噺
+ */
+ public static Field[] getAllFields(Class<?> cls){
+ return getAllFields(cls, null);
+ }
+
+ /**
+ * 閫掑綊鍚堝苟鍩虹被Field
+ */
+ private static Field[] getAllFields(Class<?> cls, Field[] params){
+ Field[] fields = (params == null) ? cls.getDeclaredFields() : params;
+ Class<?> superCls = cls.getSuperclass();
+ if (superCls == null || superCls == Object.class){
+ return fields;
+ }
+ Field[] superClsFields = superCls.getDeclaredFields();
+ fields = addAll(fields, superClsFields);
+ return getAllFields(superCls, fields);
+ }
+
+ /**
+ * 鏍规嵁fieldName鑾峰彇Field瀵硅薄
+ */
+ public static Field getField(Class<?> cls, String fieldName) {
+ Field[] allFields = getAllFields(cls);
+ for (Field field : allFields) {
+ if (field.getName().equals(fieldName)) {
+ return field;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * 鑾峰彇瀵硅薄涓煇涓狥ield鐨勫��
+ */
+ public static Object getFieldValue(Object obj, Field field) {
+ if (null == field) {
+ return null;
+ } else {
+ if (obj instanceof Class) {
+ obj = null;
+ }
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ try {
+ return field.get(obj);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ /**
+ * 鏁扮粍鍙犲姞
+ */
+ @SuppressWarnings("unchecked")
+ public static <T> T[] addAll(T[] array1, T... array2) {
+ if (array1 == null) {
+ return clone(array2);
+ } else if (array2 == null) {
+ return clone(array1);
+ } else {
+ Class<?> cls = array1.getClass().getComponentType();
+ T[] joinedArray = (T[]) Array.newInstance(cls, array1.length + array2.length);
+ System.arraycopy(array1, 0, joinedArray, 0, array1.length);
+
+ try {
+ System.arraycopy(array2, 0, joinedArray, array1.length, array2.length);
+ return joinedArray;
+ } catch (ArrayStoreException e) {
+ Class<?> type2 = array2.getClass().getComponentType();
+ if (!cls.isAssignableFrom(type2)) {
+ throw new RuntimeException("Cannot store " + type2.getName() + " in an array of " + cls.getName(), e);
+ } else {
+ throw e;
+ }
+ }
+ }
+ }
+
+ /**
+ * 鍏嬮殕
+ */
+ private static <T> T[] clone(T[] array) {
+ return array == null ? null : array.clone();
+ }
+
+ /**
+ * map鎿嶄綔
+ */
+ public static CoolMap add(String key,Object value){
+ CoolMap map = new CoolMap();
+ map.put(key, value);
+ return map;
+ }
+
+ public static class CoolMap extends HashMap<String, Object>{
+
+ public CoolMap add(String key,Object value){
+ this.put(key, value);
+ return this;
+ }
+
+ public CoolMap $(String key,Object value){
+ this.put(key, value);
+ return this;
+ }
+
+ }
+
+ public static String md5(String string){
+ try{
+ MessageDigest md5 = MessageDigest.getInstance("MD5");
+ byte[] bytes = md5.digest(string.getBytes(StandardCharsets.UTF_8));
+ char[] chars = new char[bytes.length * 2];
+ for (int i = 0; i < bytes.length; i++) {
+ int b = bytes[i];
+ chars[i * 2] = hexDigits[(b & 0xF0) >> 4];
+ chars[i * 2 + 1] = hexDigits[b & 0x0F];
+ }
+ return new String(chars).toLowerCase();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("md5鍔犲瘑澶辫触,str=".concat(string));
+ }
+ }
+
+ private static char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
+
+ public static Map<String, Object> translate(Object obj){
+ Class<?> cls = obj.getClass();
+ Field[] fields = getAllFields(cls);
+ Map<String, Object> map = new HashMap<>();
+ for (Field field : fields) {
+ String key = field.getName();
+ if (field.isAnnotationPresent(CoolTranslate.class)){
+ CoolTranslate annotation = field.getAnnotation(CoolTranslate.class);
+ if (!isEmpty(annotation.value())) {
+ key = annotation.value();
+ }
+ }
+ boolean flag = field.isAccessible();
+ field.setAccessible(true);
+ Object val = null;
+ try {
+ val = field.get(obj);
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ field.setAccessible(flag);
+ if (val != null){
+ map.put(key, val);
+ }
+ }
+ return map;
+ }
+
+ public static boolean eq(String str, String str0) {
+ if (Cools.isEmpty(str) && Cools.isEmpty(str0)) {
+ return true;
+ }
+ if (Cools.isEmpty(str) && !Cools.isEmpty(str0)) {
+ return false;
+ }
+ if (Cools.isEmpty(str0) && !Cools.isEmpty(str)) {
+ return false;
+ }
+ if (str.equals(str0)) {
+ return true;
+ }
+ return false;
+ }
+
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/DateUtils.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/DateUtils.java
new file mode 100644
index 0000000..3145824
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/DateUtils.java
@@ -0,0 +1,195 @@
+package com.zy.asrs.framework.common;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 鏃堕棿宸ュ叿绫�
+ * Created by vincent on 2019-04-15
+ */
+public class DateUtils {
+
+ public final static String yyyyMMdd_C="yyyy骞碝M鏈坉d鏃�";
+ public final static String yyyyMM_F="yyyy-MM";
+ public final static String yyyyMMdd_F="yyyy-MM-dd";
+ public final static String yyyyMMddHHmmss_F="yyyy-MM-dd HH:mm:ss";
+ public final static String yyyyMMddHHmmsssss_F="yyyy-MM-dd HH:mm:ss,SSS";
+ public final static String yyyy="yyyy";
+ public final static String yyyyMM="yyyyMM";
+ public final static String yyyyMMdd="yyyyMMdd";
+ public final static String yyyyMMddHH="yyyyMMddHH";
+ public final static String yyyyMMddHHmmss="yyyyMMddHHmmss";
+ public final static String YYMMDDHHMMSS="YYMMDDHHMMSS";
+ public final static String yyyyMMddHHmmsssss="yyyyMMddHHmmssSSS";
+
+ /**
+ * date ==>> string
+ */
+ public static String convert(Date date, String pattern){
+ return new SimpleDateFormat(pattern).format(date);
+ }
+
+ public static String convert(Date date){
+ return convert(date, yyyyMMddHHmmss_F);
+ }
+
+ /**
+ * string ==>> date
+ */
+ public static Date convert(String str, String pattern){
+ if (str.length() < pattern.length()){
+ throw new RuntimeException("鏃堕棿瑙f瀽澶辫触 ==>> "+str);
+ }
+ if (str.length() > pattern.length()){
+ str = str.substring(0, pattern.length());
+ }
+ SimpleDateFormat format = new SimpleDateFormat(pattern);
+ Date date;
+ try {
+ date = format.parse(str);
+ } catch (ParseException e) {
+ throw new RuntimeException("鏃堕棿瑙f瀽澶辫触 ==>> "+str);
+ }
+ return date;
+ }
+
+ public static Date convert(String str){
+ return convert(str, yyyyMMddHHmmss_F);
+ }
+
+ /**
+ * 涓や釜date涔嬮棿鐩稿樊鐨勫ぉ鏁帮紝涓嶆弧涓�澶╃畻涓�澶�
+ */
+ public static int diff(Date date1, Date date2){
+ return getDaysByTimestamp(Math.abs(date2.getTime() - date1.getTime()));
+ }
+
+ public static long diffToMinute(Date date1, Date date2){
+ return Math.abs(date2.getTime() - date1.getTime())/1000/60;
+ }
+
+ public static long diffToSeconds(Date date1, Date date2){
+ return Math.abs(date2.getTime() - date1.getTime())/1000;
+ }
+
+ private static int getDaysByTimestamp(long timestamp){
+ double daysPoint = Arith.divides(2, timestamp, (1000 * 3600 * 24));
+ int daysPoint1 = (int) daysPoint;
+ double daysPoint2 = (double) daysPoint1;
+ if (daysPoint > daysPoint2){
+ return daysPoint1 + 1;
+ }
+ return daysPoint1;
+ }
+
+ /**
+ * 鍏ュ弬date璺濈鐜板湪鐨勭鏁�
+ */
+ public static int diffToNow(Date date){
+ long diff = new Date().getTime() - date.getTime();
+ return (int) (Math.abs(diff) / 1000);
+ }
+
+ /**
+ * 褰撳墠鏃堕棿鎴筹紙鍗曚綅锛氱锛�
+ */
+ public static String createTimeStamp() {
+ return Long.toString(System.currentTimeMillis() / 1000);
+ }
+
+ /**
+ * 鏃堕棿璁$畻鍑芥暟
+ * @param date 琚绠楁椂闂村疄渚�
+ * @param val 璁$畻鍊�
+ * @param timeUnit 璁$畻鍊煎崟浣�
+ * @param subtraction 鍑忔硶甯冨皵 true锛氬綋鍓嶅嚱鏁颁负鍑忔硶璁$畻锛宖alse锛氬弽涔�
+ * @return 璁$畻缁撴灉 Date
+ */
+ public static Date calculate(Date date, Long val, TimeUnit timeUnit, boolean subtraction){
+ if (Objects.isNull(date) || Objects.isNull(val) || Objects.isNull(timeUnit)){
+ return null;
+ }
+ return new Date(subtraction?date.getTime()-timeUnit.toMillis(val):date.getTime()+timeUnit.toMillis(val));
+ }
+
+ public static Date calculate(Date date, Long val, TimeUnit timeUnit){
+ return calculate(date, val, timeUnit, false);
+ }
+
+ /**
+ * 鏃堕棿瀵硅薄DateEntity
+ */
+ public static DateEntity getDateEntity(Date date){
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(date);
+ DateEntity dateEntity = new DateEntity();
+ dateEntity.setYear(cal.get(Calendar.YEAR));
+ dateEntity.setMonth(cal.get(Calendar.MONTH));
+ dateEntity.setDay(cal.get(Calendar.DATE));
+ dateEntity.setHour(cal.get(Calendar.HOUR_OF_DAY));
+ dateEntity.setMinute(cal.get(Calendar.MINUTE));
+ dateEntity.setSecond(cal.get(Calendar.SECOND));
+ return dateEntity;
+ }
+
+ static class DateEntity {
+ int year;
+ int month;
+ int day;
+ int hour;
+ int minute;
+ int second;
+
+ public int getYear() {
+ return year;
+ }
+
+ public void setYear(final int year) {
+ this.year = year;
+ }
+
+ public int getMonth() {
+ return month;
+ }
+
+ public void setMonth(final int month) {
+ this.month = month + 1;
+ }
+
+ public int getDay() {
+ return day;
+ }
+
+ public void setDay(final int day) {
+ this.day = day;
+ }
+
+ public int getHour() {
+ return hour;
+ }
+
+ public void setHour(final int hour) {
+ this.hour = hour;
+ }
+
+ public int getMinute() {
+ return minute;
+ }
+
+ public void setMinute(final int minute) {
+ this.minute = minute;
+ }
+
+ public int getSecond() {
+ return second;
+ }
+
+ public void setSecond(final int second) {
+ this.second = second;
+ }
+ }
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/Protocol.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/Protocol.java
new file mode 100644
index 0000000..a62445e
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/Protocol.java
@@ -0,0 +1,89 @@
+package com.zy.asrs.framework.common;
+
+
+import java.io.Serializable;
+
+/**
+ * common result
+ * Created by vincent on 2020-04-09
+ */
+public class Protocol<T> implements Serializable {
+
+ private static final long serialVersionUID = 4893280118017319089L;
+
+ private int code;
+
+ private String msg;
+
+ private T data;
+
+ public Protocol() {
+ }
+
+ public Protocol(int code, String msg, T data) {
+ super();
+ setCode(code);
+ setMsg(msg);
+ setData(data);
+ }
+
+ public Protocol(int code, String message) {
+ this(code, message, null);
+ }
+
+ public static <T> Protocol<T> ok(){
+ return parse(BaseRes.OK);
+ }
+
+ public static <T> Protocol<T> ok(T result){
+ Protocol<T> protocol = parse(BaseRes.OK);
+ protocol.setData(result);
+ return protocol;
+ }
+
+ public static <T> Protocol<T> error(){
+ return parse(BaseRes.ERROR);
+ }
+
+ public static <T> Protocol<T> error(String message) {
+ Protocol<T> protocol = parse(BaseRes.ERROR);
+ protocol.setMsg(message);
+ return protocol;
+ }
+
+ public static <T> Protocol<T> parse(String str) {
+ if(Cools.isEmpty(str)){
+ return parse(BaseRes.ERROR);
+ }
+ String[] msg = str.split("-");
+ if(msg.length==2){
+ return new Protocol<>(Integer.parseInt(msg[0]),msg[1]);
+ }else{
+ return parse("500-".concat(str));
+ }
+ }
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+ public T getData() {
+ return data;
+ }
+
+ public void setData(T data) {
+ this.data = data;
+ }
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/R.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/R.java
new file mode 100644
index 0000000..56f5807
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/R.java
@@ -0,0 +1,62 @@
+package com.zy.asrs.framework.common;
+
+import java.util.HashMap;
+
+/**
+ * Created by vincent on 2019-06-09
+ */
+public class R extends HashMap<String, Object> {
+
+ private static final long serialVersionUID = 1L;
+
+ private static final String CODE = "code";
+ private static final String MSG = "msg";
+ private static final String DATA = "data";
+
+ public R(Integer code, String msg){
+ super.put(CODE, code);
+ super.put(MSG, msg);
+ }
+
+ public static R ok(){
+ return parse(BaseRes.OK);
+ }
+
+ public static R ok(String msg){
+ R r = ok();
+ r.put(MSG, msg);
+ return r;
+ }
+
+ public static R ok(Object obj){
+ return parse(BaseRes.OK).add(obj);
+ }
+
+ public static R error(){
+ return parse(BaseRes.ERROR);
+ }
+
+ public static R error(String msg){
+ R r = error();
+ r.put(MSG, msg);
+ return r;
+ }
+
+ public R add(Object obj){
+ this.put(DATA, obj);
+ return this;
+ }
+
+ public static R parse(String message){
+ if(Cools.isEmpty(message)){
+ return parse(BaseRes.ERROR);
+ }
+ String[] msg = message.split("-");
+ if(msg.length==2){
+ return new R(Integer.parseInt(msg[0]),msg[1]);
+ }else{
+ return parse("500-".concat(message));
+ }
+ }
+
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/RadixTools.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/RadixTools.java
new file mode 100644
index 0000000..f29b5da
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/RadixTools.java
@@ -0,0 +1,163 @@
+package com.zy.asrs.framework.common;
+
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
+
+/**
+ * radix tools
+ * Created by vincent on 2018/10/6
+ */
+public class RadixTools {
+
+ public static void main(String[] args) {
+ String s = RadixTools.toBinaryString((byte) 1);
+ System.out.println(s);
+ for(int i=s.length()-1;i>=0;i--){
+ char c=s.charAt(i);
+ if (i == 7 && c =='1'){
+ System.out.println("===");
+ }
+ }
+ }
+
+ /************************************** BinaryString **********************************************/
+
+ public static String toBinaryString(byte b){
+ return Long.toBinaryString((b & 0xFF) + 0x100).substring(1);
+ }
+
+ public static String toBinaryString(byte[] bytes){
+ StringBuilder sb = new StringBuilder();
+ for (byte aByte : bytes) {
+ sb.append(Long.toBinaryString((aByte & 0xFF) + 0x100).substring(1));
+ }
+ return sb.toString();
+ }
+
+ /************************************** HexString **********************************************/
+
+ public static byte[] hexStringToBytes(String hexString) {
+ if (hexString == null || hexString.equals("")) {
+ return null;
+ }
+ hexString = hexString.toUpperCase();
+ int length = hexString.length() / 2;
+ char[] hexChars = hexString.toCharArray();
+ byte[] d = new byte[length];
+ for (int i = 0; i < length; i++) {
+ int pos = i * 2;
+ d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
+ }
+ return d;
+ }
+
+ public static String bytesToHexStr(byte[] bytes){
+ StringBuilder buf = new StringBuilder(bytes.length * 2);
+ for(byte b : bytes) {
+ buf.append(String.format("%02x", b & 0xff));
+ }
+
+ return buf.toString();
+ }
+
+ private static byte charToByte(char c) {
+ return (byte) "0123456789ABCDEF".indexOf(c);
+ }
+
+
+ /************************************** String **********************************************/
+
+ public static String bytesToStr(byte[] bytes){
+ return bytesToStr(bytes, Charset.forName("gbk"));
+ }
+
+ public static String bytesToStr(byte[] bytes, Charset charset){
+ return new String(bytes, charset).trim().toUpperCase();
+ }
+
+ public static byte[] strToBytes(String str) throws UnsupportedEncodingException {
+ return str.getBytes("gbk");
+ }
+
+ /************************************** long **********************************************/
+
+ public static byte[] longToBytes(long number) {
+ long temp = number;
+ byte[] b = new byte[8];
+ for (int i = 0; i < b.length; i++) {
+ b[i] = new Long(temp & 0xff).byteValue();// 灏嗘渶浣庝綅淇濆瓨鍦ㄦ渶浣庝綅
+ temp = temp >> 8; // 鍚戝彸绉�8浣�
+ }
+ return b;
+ }
+
+ public static long bytesToLong(byte[] bytes) {
+ long s = 0;
+ long s0 = bytes[0] & 0xff;// 鏈�浣庝綅
+ long s1 = bytes[1] & 0xff;
+ long s2 = bytes[2] & 0xff;
+ long s3 = bytes[3] & 0xff;
+ long s4 = bytes[4] & 0xff;// 鏈�浣庝綅
+ long s5 = bytes[5] & 0xff;
+ long s6 = bytes[6] & 0xff;
+ long s7 = bytes[7] & 0xff;
+
+ // s0涓嶅彉
+ s1 <<= 8;
+ s2 <<= 16;
+ s3 <<= 24;
+ s4 <<= 8 * 4;
+ s5 <<= 8 * 5;
+ s6 <<= 8 * 6;
+ s7 <<= 8 * 7;
+ s = s0 | s1 | s2 | s3 | s4 | s5 | s6 | s7;
+ return s;
+ }
+
+
+ /************************************** int **********************************************/
+
+ public static byte[] intToBytes(int n) {
+ byte[] b = new byte[4];
+ b[3] = (byte) (n & 0xff);
+ b[2] = (byte) (n >> 8 & 0xff);
+ b[1] = (byte) (n >> 16 & 0xff);
+ b[0] = (byte) (n >> 24 & 0xff);
+ return b;
+ }
+
+
+ public static int bytesToInt(byte[] b) {
+ int s = 0;
+ int s0 = b[0] & 0xff;// 鏈�浣庝綅
+ int s1 = b[1] & 0xff;
+ int s2 = b[2] & 0xff;
+ int s3 = b[3] & 0xff;
+ s0 <<= 24;
+ s1 <<= 16;
+ s2 <<= 8;
+ s = s0 | s1 | s2 | s3;
+ return s;
+ }
+
+ /************************************** short **********************************************/
+
+ public static short byteToShort(byte[] b) {
+ short s = 0;
+ short s0 = (short) (b[1] & 0xff);// 鏈�浣庝綅
+ short s1 = (short) (b[0] & 0xff);
+ s1 <<= 8;
+ s = (short) (s0 | s1);
+ return s;
+ }
+
+ public static byte[] shortToByte(short s){
+ byte[] b = new byte[2];
+ for(int i = 0; i < 2; i++){
+ int offset = 16 - (i+1)*8; //鍥犱负byte鍗�4涓瓧鑺傦紝鎵�浠ヨ璁$畻鍋忕Щ閲�
+ b[i] = (byte)((s >> offset)&0xff); //鎶�16浣嶅垎涓�2涓�8浣嶈繘琛屽垎鍒瓨鍌�
+ }
+ return b;
+ }
+
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/SnowflakeIdWorker.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/SnowflakeIdWorker.java
new file mode 100644
index 0000000..5c2ec07
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/SnowflakeIdWorker.java
@@ -0,0 +1,162 @@
+package com.zy.asrs.framework.common;
+
+/**
+ * Twitter_Snowflake<br>
+ * SnowFlake鐨勭粨鏋勫涓�(姣忛儴鍒嗙敤-鍒嗗紑):<br>
+ * 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 -
+ * 000000000000 <br>
+ * 1浣嶆爣璇嗭紝鐢变簬long鍩烘湰绫诲瀷鍦↗ava涓槸甯︾鍙风殑锛屾渶楂樹綅鏄鍙蜂綅锛屾鏁版槸0锛岃礋鏁版槸1锛屾墍浠d涓�鑸槸姝f暟锛屾渶楂樹綅鏄�0<br>
+ * 41浣嶆椂闂存埅(姣绾�)锛屾敞鎰忥紝41浣嶆椂闂存埅涓嶆槸瀛樺偍褰撳墠鏃堕棿鐨勬椂闂存埅锛岃�屾槸瀛樺偍鏃堕棿鎴殑宸�硷紙褰撳墠鏃堕棿鎴� - 寮�濮嬫椂闂存埅)
+ * 寰楀埌鐨勫�硷級锛岃繖閲岀殑鐨勫紑濮嬫椂闂存埅锛屼竴鑸槸鎴戜滑鐨刬d鐢熸垚鍣ㄥ紑濮嬩娇鐢ㄧ殑鏃堕棿锛岀敱鎴戜滑绋嬪簭鏉ユ寚瀹氱殑锛堝涓嬩笅闈㈢▼搴廔dWorker绫荤殑startTime灞炴�э級銆�41浣嶇殑鏃堕棿鎴紝鍙互浣跨敤69骞达紝骞碩
+ * = (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69<br>
+ * 10浣嶇殑鏁版嵁鏈哄櫒浣嶏紝鍙互閮ㄧ讲鍦�1024涓妭鐐癸紝鍖呮嫭5浣峝atacenterId鍜�5浣峸orkerId<br>
+ * 12浣嶅簭鍒楋紝姣鍐呯殑璁℃暟锛�12浣嶇殑璁℃暟椤哄簭鍙锋敮鎸佹瘡涓妭鐐规瘡姣(鍚屼竴鏈哄櫒锛屽悓涓�鏃堕棿鎴�)浜х敓4096涓狪D搴忓彿<br>
+ * 鍔犺捣鏉ュ垰濂�64浣嶏紝涓轰竴涓狶ong鍨嬨��<br>
+ * SnowFlake鐨勪紭鐐规槸锛屾暣浣撲笂鎸夌収鏃堕棿鑷鎺掑簭锛屽苟涓旀暣涓垎甯冨紡绯荤粺鍐呬笉浼氫骇鐢烮D纰版挒(鐢辨暟鎹腑蹇僆D鍜屾満鍣↖D浣滃尯鍒�)锛屽苟涓旀晥鐜囪緝楂橈紝缁忔祴璇曪紝SnowFlake姣忕鑳藉浜х敓26涓嘔D宸﹀彸銆�
+ */
+public class SnowflakeIdWorker {
+
+ // ==============================Fields===========================================
+ /** 寮�濮嬫椂闂存埅 (2015-01-01) */
+ private final long twepoch = 1420041600000L;
+
+ /** 搴忓垪鍊兼墍鍗犵殑浣嶆暟 */
+ private final long sequenceBits = 12L;
+
+ /** 鏈哄櫒id鎵�鍗犵殑浣嶆暟 */
+ private final long workerIdBits = 5L;
+
+ /** 鏈烘埧id鎵�鍗犵殑浣嶆暟 */
+ private final long datacenterIdBits = 5L;
+
+ /** 鏈哄櫒id鍚戝乏绉�12浣� */
+ private final long workerIdLeftShift = sequenceBits;
+
+ /** 鏈烘埧id鍚戝乏绉�17浣�(5+12) */
+ private final long datacenterIdLeftShift =workerIdLeftShift + workerIdBits;
+
+ /** 鏃堕棿鎴悜宸︾Щ22浣�(5+5+12) */
+ private final long timestampLeftShift = datacenterIdLeftShift + datacenterIdBits;
+
+ /** 鏀寔鐨勬渶澶ф満鍣╥d (浣嶆暟浜岃繘鍒跺��) */
+ private final long maxWorkerId = -1L ^ (-1L << workerIdBits);
+
+ /** 鏀寔鐨勬渶澶ф暟鎹爣璇唅d (浣嶆暟浜岃繘鍒跺��) */
+ private final long maxDatacenterId = -1L ^ (-1L << datacenterIdBits);
+
+ /**鐢熸垚搴忓垪鐨勬帺鐮� */
+ private final long sequenceMask = -1L ^ (-1L << sequenceBits);
+
+ /** 宸ヤ綔鏈哄櫒ID(0~31) */
+ private long workerId;
+
+ /** 鏁版嵁涓績ID(0~31) */
+ private long datacenterId;
+
+ /** 姣鍐呭簭鍒� */
+ private long sequence = 0L;
+
+ /** 涓婃鐢熸垚ID鐨勬椂闂存埅 */
+ private long lastTimestamp = -1L;
+
+ // ==============================Constructors=====================================
+
+ /**
+ * 鏋勯�犲嚱鏁�
+ *
+ * @param workerId
+ * 宸ヤ綔ID (0~31)
+ * @param datacenterId
+ * 鏁版嵁涓績ID (0~31)
+ */
+ public SnowflakeIdWorker(long workerId, long datacenterId) {
+ if (workerId > maxWorkerId || workerId < 0) {
+ throw new IllegalArgumentException(
+ String.format("worker Id can't be greater than %d or less than 0", maxWorkerId));
+ }
+ if (datacenterId > maxDatacenterId || datacenterId < 0) {
+ throw new IllegalArgumentException(
+ String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId));
+ }
+ this.workerId = workerId;
+ this.datacenterId = datacenterId;
+ }
+
+ public SnowflakeIdWorker(){
+ this(0L, 0L);
+ }
+
+ // ==============================Methods==========================================
+ /**
+ * 鑾峰緱涓嬩竴涓狪D (璇ユ柟娉曟槸绾跨▼瀹夊叏鐨�)
+ *
+ * @return SnowflakeId
+ */
+ public synchronized long nextId() {
+ long timestamp = timeGen();
+
+ // 濡傛灉褰撳墠鏃堕棿灏忎簬涓婁竴娆D鐢熸垚鐨勬椂闂存埑锛岃鏄庣郴缁熸椂閽熷洖閫�杩囪繖涓椂鍊欏簲褰撴姏鍑哄紓甯�
+ if (timestamp < lastTimestamp) {
+ throw new RuntimeException(String.format(
+ "Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp));
+ }
+
+ // 濡傛灉鏄悓涓�鏃堕棿鐢熸垚鐨勶紝鍒欒繘琛屾绉掑唴搴忓垪
+ if (lastTimestamp == timestamp) {
+ sequence = (sequence + 1) & sequenceMask;
+ // 姣鍐呭簭鍒楁孩鍑�
+ if (sequence == 0) {
+ // 闃诲鍒颁笅涓�涓绉�,鑾峰緱鏂扮殑鏃堕棿鎴�
+ timestamp = tilNextMillis(lastTimestamp);
+ }
+ }
+ // 鏃堕棿鎴虫敼鍙橈紝姣鍐呭簭鍒楅噸缃�
+ else {
+ sequence = 0L;
+ }
+
+ // 涓婃鐢熸垚ID鐨勬椂闂存埅
+ lastTimestamp = timestamp;
+
+ // 绉讳綅骞堕�氳繃鎴栬繍绠楁嫾鍒颁竴璧风粍鎴�64浣嶇殑ID
+ return ((timestamp - twepoch) << timestampLeftShift) //
+ | (datacenterId << datacenterIdLeftShift) //
+ | (workerId << workerIdLeftShift) //
+ | sequence;
+ }
+
+ /**
+ * 闃诲鍒颁笅涓�涓绉掞紝鐩村埌鑾峰緱鏂扮殑鏃堕棿鎴�
+ *
+ * @param lastTimestamp
+ * 涓婃鐢熸垚ID鐨勬椂闂存埅
+ * @return 褰撳墠鏃堕棿鎴�
+ */
+ protected long tilNextMillis(long lastTimestamp) {
+ long timestamp = timeGen();
+ while (timestamp <= lastTimestamp) {
+ timestamp = timeGen();
+ }
+ return timestamp;
+ }
+
+ /**
+ * 杩斿洖浠ユ绉掍负鍗曚綅鐨勫綋鍓嶆椂闂�
+ *
+ * @return 褰撳墠鏃堕棿(姣)
+ */
+ protected long timeGen() {
+ return System.currentTimeMillis();
+ }
+
+ // ==============================Test=============================================
+ /** 娴嬭瘯 */
+ public static void main(String[] args) {
+ SnowflakeIdWorker idWorker = new SnowflakeIdWorker(0, 0);
+ for (int i = 0; i < 1000; i++) {
+ long id = idWorker.nextId();
+ System.out.println(Long.toBinaryString(id));
+ System.out.println(id);
+ }
+ }
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/SpringUtils.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/SpringUtils.java
new file mode 100644
index 0000000..3bb38b8
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/SpringUtils.java
@@ -0,0 +1,38 @@
+package com.zy.asrs.framework.common;
+
+import com.zy.asrs.framework.exception.CoolException;
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+
+public class SpringUtils implements ApplicationContextAware {
+
+ private static ApplicationContext application;
+
+ public SpringUtils() {}
+
+ public static void init(ApplicationContext context) {
+ SpringUtils.application = context;
+ }
+
+ @Override
+ public void setApplicationContext(ApplicationContext context) throws BeansException {
+ SpringUtils.application = context;
+ }
+
+ public static ApplicationContext getApplicationContext() {
+ if(application==null) {
+ throw new CoolException(BaseRes.ERROR);
+ }
+ return application;
+ }
+
+ public static <T>T getBean(Class<T> prototype) {
+ return getApplicationContext().getBean(prototype);
+ }
+
+ public static Object getBean(String name) {
+ return getApplicationContext().getBean(name);
+ }
+
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/config/CoolBaseConfig.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/config/CoolBaseConfig.java
new file mode 100644
index 0000000..9be246a
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/config/CoolBaseConfig.java
@@ -0,0 +1,31 @@
+package com.zy.asrs.framework.config;
+
+//import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
+
+import com.zy.asrs.framework.common.SnowflakeIdWorker;
+import com.zy.asrs.framework.common.SpringUtils;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * Created by vincent on 2019-06-10
+ */
+@Configuration
+public class CoolBaseConfig {
+
+// @Bean
+// public PaginationInterceptor paginationInterceptor() {
+// return new PaginationInterceptor();
+// }
+
+ @Bean
+ public SpringUtils getSpringUtils(){
+ return new SpringUtils();
+ }
+
+ @Bean
+ public SnowflakeIdWorker snowflakeIdWorker(){
+ return new SnowflakeIdWorker();
+ }
+
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/controller/AbstractBaseController.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/controller/AbstractBaseController.java
new file mode 100644
index 0000000..282e3ce
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/controller/AbstractBaseController.java
@@ -0,0 +1,69 @@
+package com.zy.asrs.framework.controller;
+
+import com.zy.asrs.framework.common.BaseRes;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.exception.CoolException;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Created by vincent on 2019-06-09
+ */
+public abstract class AbstractBaseController {
+
+ public <T> List exportSupport(List<T> list, List<String> fields){
+ if (Cools.isEmpty(list)){
+ throw new CoolException(BaseRes.EMPTY);
+ }
+ try {
+ List<List<Object>> result = new ArrayList<>();
+ Method[] methods = list.get(0).getClass().getMethods();
+ for (T t : list){
+ List<Object> node = new ArrayList<>();
+ for (String field : fields){
+ for (Method method : methods) {
+ if (("get" + field).toLowerCase().equals(method.getName().toLowerCase())) {
+ Object val = method.invoke(t);
+ node.add(val);
+ break;
+ }
+ }
+ }
+ result.add(node);
+ }
+ return result;
+ } catch (Exception e){
+ throw new RuntimeException(e);
+ }
+
+ }
+
+ public static Map<String, Object> excludeTrash(Map<String, Object> map){
+ if (Cools.isEmpty(map)){
+ return new HashMap<>();
+ }
+ map.entrySet().removeIf(next -> next.getKey().equals("curr")
+ || next.getKey().equals("limit")
+ || next.getKey().equals("orderByField")
+ || next.getKey().equals("orderByType")
+ || next.getKey().equals("condition")
+ || Cools.isEmpty(next.getValue()));
+ return map;
+ }
+
+ public static String humpToLine(String str) {
+ Matcher matcher = Pattern.compile("[A-Z]").matcher(str);
+ StringBuffer sb = new StringBuffer();
+ while (matcher.find()) {
+ matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase());
+ }
+ matcher.appendTail(sb);
+ return sb.toString();
+ }
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/domain/KeyValueVo.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/domain/KeyValueVo.java
new file mode 100644
index 0000000..f8f45bc
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/domain/KeyValueVo.java
@@ -0,0 +1,36 @@
+package com.zy.asrs.framework.domain;
+
+/**
+ * Created by vincent on 2021/4/13
+ */
+public class KeyValueVo {
+
+ private String name;
+
+ private Long value;
+
+ public KeyValueVo() {
+ }
+
+ public KeyValueVo(String name, Long value) {
+ this.name = name;
+ this.value = value;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Long getValue() {
+ return value;
+ }
+
+ public void setValue(Long value) {
+ this.value = value;
+ }
+
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/exception/ApplicationException.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/exception/ApplicationException.java
new file mode 100644
index 0000000..4969b7c
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/exception/ApplicationException.java
@@ -0,0 +1,18 @@
+package com.zy.asrs.framework.exception;
+
+/**
+ * 搴旂敤寮傚父
+ */
+public class ApplicationException extends RuntimeException {
+
+ private static final long serialVersionUID = 1L;
+
+ public ApplicationException(Throwable e) {
+ super(e);
+ }
+
+ public ApplicationException(String message) {
+ super(message);
+ }
+
+}
\ No newline at end of file
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/exception/CoolException.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/exception/CoolException.java
new file mode 100644
index 0000000..182faad
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/exception/CoolException.java
@@ -0,0 +1,17 @@
+package com.zy.asrs.framework.exception;
+
+/**
+ * 妗嗘灦寮傚父
+ * Created by vincent on 2019-09-04
+ */
+public class CoolException extends RuntimeException {
+
+ public CoolException(Throwable e) {
+ super(e);
+ }
+
+ public CoolException(String message) {
+ super(message);
+ }
+
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/CoolGenerator.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/CoolGenerator.java
new file mode 100644
index 0000000..e131455
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/CoolGenerator.java
@@ -0,0 +1,787 @@
+package com.zy.asrs.framework.generators;
+
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.generators.constant.SqlOsType;
+import com.zy.asrs.framework.generators.domain.Column;
+import com.zy.asrs.framework.generators.utils.GeneratorUtils;
+import org.springframework.core.io.ClassPathResource;
+
+import java.io.*;
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by vincent on 2019-06-18
+ */
+public class CoolGenerator {
+
+ private static final String BASE_DIR = "src/main/";
+ private static final String JAVA_DIR = BASE_DIR + "java/";
+ private static final String XML_DIR = BASE_DIR + "resources/mapper/";
+ private static final String HTML_DIR = BASE_DIR + "webapp/";
+ private static final String[] ALL_TEMPLATES = new String[]{
+ "Controller",
+ "Service",
+ "ServiceImpl",
+ "Mapper",
+ "Entity",
+ "Xml",
+ "Html",
+ "HtmlDetail",
+ "Js",
+ "Sql"};
+ private static final ArrayList<String> SYSTEM_MODEL = new ArrayList<String>(){{
+ add("User");
+ add("Host");
+ }};
+
+
+ public String url;
+ public String username;
+ public String password;
+ public String table;
+ public String packagePath;
+ public boolean controller = true;
+ public boolean service = true;
+ public boolean mapper = true;
+ public boolean entity = true;
+ public boolean xml = true;
+ public boolean html = true;
+ public boolean htmlDetail = false;
+ public boolean js = true;
+ public boolean sql = true;
+ public SqlOsType sqlOsType;
+
+ private List<Column> columns = new ArrayList<>();
+ private String fullEntityName;
+ private String simpleEntityName;
+ private String entityImport;
+ private String entityContent;
+ private String xmlContent;
+ private String htmlContent;
+ private String htmlDialogContent;
+ private String jsTableContent;
+ private String jsForeignKeyContent;
+ private String jsDateContent;
+ private String jsPrimaryKeyDoms;
+ private String primaryKeyColumn;
+ private String majorColumn;
+ private String systemPackagePath;
+ private String systemPackage;
+
+ public void build() throws Exception {
+ init();
+ for (String template : ALL_TEMPLATES){
+ boolean pass = false;
+ String lowerCase = template.toLowerCase();
+ String templatePath = lowerCase.contains("impl")?lowerCase.substring(0,lowerCase.length()-4)+"/"+lowerCase.substring(lowerCase.length()-4):lowerCase;
+ String directory="";
+ String fileName="";
+ switch (template){
+ case "Controller":
+ pass = controller;
+ directory = JAVA_DIR + packagePath.replace(".", "/")+"/"+templatePath+"/";
+ fileName = fullEntityName+template+".java";
+ break;
+ case "Service":
+ pass = service;
+ directory = JAVA_DIR + packagePath.replace(".", "/")+"/"+templatePath+"/";
+ fileName = fullEntityName+template+".java";
+ break;
+ case "ServiceImpl":
+ pass = service;
+ directory = JAVA_DIR + packagePath.replace(".", "/")+"/"+templatePath+"/";
+ fileName = fullEntityName+template+".java";
+ break;
+ case "Mapper":
+ pass = mapper;
+ directory = JAVA_DIR + packagePath.replace(".", "/")+"/"+templatePath+"/";
+ fileName = fullEntityName+template+".java";
+ break;
+ case "Entity":
+ pass = entity;
+ directory = JAVA_DIR + packagePath.replace(".", "/")+"/"+templatePath+"/";
+ fileName = fullEntityName+".java";
+ break;
+ case "Xml":
+ pass = xml;
+ directory = XML_DIR;
+ fileName = fullEntityName+"Mapper.xml";
+ break;
+ case "Html":
+ pass = html;
+ directory = HTML_DIR + "/views/" + simpleEntityName + "/";
+ fileName = simpleEntityName+".html";
+ break;
+ case "Js":
+ pass = js;
+ directory = HTML_DIR + "/static/js/" + simpleEntityName + "/";
+ fileName = simpleEntityName+".js";
+ break;
+ case "Sql":
+ pass = sql;
+ directory = JAVA_DIR;
+ fileName = simpleEntityName+".sql";
+ default:
+ break;
+ }
+ if (!pass){ continue; }
+ String content = readFile(template);
+ writeFile(content, directory, fileName, template);
+ }
+ }
+
+ private void init() throws Exception {
+ gainDbInfo();
+ fullEntityName = GeneratorUtils.getNameSpace(table);
+ simpleEntityName = fullEntityName.substring(0, 1).toLowerCase()+fullEntityName.substring(1);
+ entityContent = createEntityMsg();
+ xmlContent = createXmlMsg();
+ htmlContent = createHtmlMsg();
+ htmlDialogContent = createHtmlDialogMsg();
+ jsTableContent = createJsTableMsg();
+ jsForeignKeyContent = createJsFkContent();
+ jsDateContent = createJsDateContent();
+ jsPrimaryKeyDoms = createJsPrimaryKeyMsg();
+ primaryKeyColumn = createPrimaryMsg();
+ majorColumn = createMajorMsg();
+ String[] packagePathSplit = packagePath.split("\\.");
+ systemPackagePath = packagePath.replaceAll(packagePathSplit[packagePathSplit.length-1], "system");
+ String[] split = systemPackagePath.split("\\.");
+ systemPackage = "";
+ for (int i = 1;i <= split.length; i++) {
+ if (i != split.length) {
+ if (i == split.length - 1) {
+ systemPackage = systemPackage + split[i-1];
+ } else {
+ systemPackage = systemPackage + split[i-1] + ".";
+ }
+ }
+
+ }
+ }
+
+ private String readFile(String template){
+ StringBuilder txtContentBuilder=new StringBuilder();
+ ClassPathResource classPath=new ClassPathResource("templates/"+template + ".txt");
+
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(classPath.getInputStream()))) {
+ String lineContent;
+ while ((lineContent = reader.readLine()) != null) {
+ txtContentBuilder.append(lineContent).append("\n");
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return txtContentBuilder.toString();
+ }
+
+ private void writeFile(String content, String directory, String fileName, String template) throws IOException {
+ File codeDirectory=new File(directory);
+ if(!codeDirectory.exists()){
+ codeDirectory.mkdirs();
+ }
+ File writerFile=new File(directory+fileName);
+ if(!writerFile.exists()){
+ content=content.
+ replaceAll("@\\{TABLENAME}", table)
+ .replaceAll("@\\{ENTITYIMPORT}", entityImport)
+ .replaceAll("@\\{ENTITYCONTENT}", entityContent)
+ .replaceAll("@\\{ENTITYNAME}", fullEntityName)
+ .replaceAll("@\\{SIMPLEENTITYNAME}", simpleEntityName)
+ .replaceAll("@\\{UENTITYNAME}", simpleEntityName)
+ .replaceAll("@\\{COMPANYNAME}",packagePath)
+ .replaceAll("@\\{XMLCONTENT}", xmlContent)
+ .replaceAll("@\\{HTMLCONTENT}", htmlContent)
+ .replaceAll("@\\{HTMLDIALOGCONTENT}", htmlDialogContent)
+ .replaceAll("@\\{JSTABLECONTENT}", jsTableContent)
+ .replaceAll("@\\{JSFOREIGNKEYCONTENT}", jsForeignKeyContent)
+ .replaceAll("@\\{JSDATECONTENT}", jsDateContent)
+ .replaceAll("@\\{JSPRIMARYKEYDOMS}", jsPrimaryKeyDoms)
+ .replaceAll("@\\{MAJORCOLUMN}", GeneratorUtils.humpToLine(majorColumn))
+ .replaceAll("@\\{MAJORCOLUMN_UP}", GeneratorUtils.firstCharConvert(GeneratorUtils.humpToLine(majorColumn), false))
+ .replaceAll("@\\{PRIMARYKEYCOLUMN}", GeneratorUtils.firstCharConvert(primaryKeyColumn, false))
+ .replaceAll("@\\{PRIMARYKEYCOLUMN0}", GeneratorUtils.firstCharConvert(primaryKeyColumn, true))
+ .replaceAll("@\\{UPCASEMARJORCOLUMN}", GeneratorUtils.firstCharConvert(primaryKeyColumn, false))
+ .replaceAll("@\\{SYSTEMPACKAGE}",systemPackage)
+ ;
+ writerFile.createNewFile();
+ BufferedWriter writer=new BufferedWriter(new FileWriter(writerFile));
+ writer.write(content);
+ writer.flush();
+ writer.close();
+ System.out.println(fullEntityName+template+" 婧愭枃浠跺垱寤烘垚鍔燂紒");
+ }else{
+ System.out.println(fullEntityName+template+" 婧愭枃浠跺凡缁忓瓨鍦ㄥ垱寤哄け璐ワ紒");
+ }
+ }
+
+ private void gainDbInfo() throws Exception {
+ Connection conn;
+ if (null == this.sqlOsType) {
+ throw new RuntimeException("璇锋寚瀹氭暟鎹簱绫诲瀷锛�");
+ }
+ switch (this.sqlOsType) {
+ case MYSQL:
+ Class.forName("com.mysql.jdbc.Driver").newInstance();
+ conn = DriverManager.getConnection("jdbc:mysql://"+url, username, password);
+ this.columns = getMysqlColumns(conn, table, true, sqlOsType);
+ break;
+ case SQL_SERVER:
+ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
+ conn = DriverManager.getConnection("jdbc:sqlserver://"+url, username, password);
+ this.columns = getSqlServerColumns(conn, table, true, sqlOsType);
+ break;
+ default:
+ throw new RuntimeException("璇锋寚瀹氭暟鎹簱绫诲瀷锛�");
+ }
+
+ }
+
+ // mysql
+ public static List<Column> getMysqlColumns(Connection conn, String table, boolean init, SqlOsType sqlOsType) throws Exception {
+ List<Column> result = new ArrayList<>();
+ PreparedStatement ps = conn.prepareStatement("select * from " + table);
+ ResultSetMetaData meta = ps.executeQuery().getMetaData();
+ // 鍗曡〃瀛楁鏁伴噺
+ int count = meta.getColumnCount();
+ ResultSet resultSet = ps.executeQuery("show full columns from " + table);
+ for (int i = 1; i < count + 1; i++) {
+ String columnName = meta.getColumnName(i);
+ if (resultSet.next() && columnName.equals(resultSet.getString("Field"))){
+ result.add(new Column(
+ conn,
+ meta.getColumnName(i),
+ GeneratorUtils.getType(meta.getColumnType(i)),
+ resultSet.getString("Comment"),
+ resultSet.getString("Key").equals("PRI"),
+ resultSet.getString("Key").equals("PRI"),
+ resultSet.getString("Null").equals("NO"),
+ GeneratorUtils.getColumnLength(resultSet.getString("Type")),
+ init,
+ sqlOsType
+ ));
+ }
+ result.forEach(column -> System.out.println(column.toString()));
+ }
+ return result;
+ }
+
+ // sqlserver
+ public static List<Column> getSqlServerColumns(Connection conn, String table, boolean init, SqlOsType sqlOsType) throws Exception {
+ List<Column> result = new ArrayList<>();
+ PreparedStatement ps = conn.prepareStatement("select * from " + table);
+ ResultSetMetaData meta = ps.executeQuery().getMetaData();
+ // 鍗曡〃瀛楁鏁伴噺
+ int count = meta.getColumnCount();
+ StringBuilder sql = new StringBuilder("SELECT \n" +
+ " 'Field'= a.name,\n" +
+ " 'Comment'= isnull(g.[value],''),\n" +
+ " 'Key'= case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then 'PRI' else '' end,\n" +
+ " 'Main'= case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in (SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid))) then 'PRI' else '' end,"+
+ " 'Type'= b.name,\n" +
+ " 'Length'= COLUMNPROPERTY(a.id,a.name,'PRECISION'),\n" +
+ " 'Decimals'= isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),\n" +
+ " 'Null'= case when a.isnullable=1 then 'Yes' else 'No' end,\n" +
+ " 'Default' = isnull(e.text,'')\n" +
+ "FROM syscolumns a\n" +
+ "LEFT JOIN systypes b on a.xusertype=b.xusertype\n" +
+ "INNER JOIN sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'\n" +
+ "LEFT JOIN syscomments e on a.cdefault=e.id\n" +
+ "LEFT JOIN sys.extended_properties g on a.id=G.major_id and a.colid=g.minor_id \n" +
+ "LEFT JOIN sys.extended_properties f on d.id=f.major_id and f.minor_id=0 where d.name = '")
+ .append(table).append("' ORDER BY a.colorder ASC");
+ ResultSet resultSet = conn.prepareStatement(sql.toString()).executeQuery();
+ for (int i = 1; i < count + 1; i++) {
+ String columnName = meta.getColumnName(i);
+ if (resultSet.next() && columnName.equals(resultSet.getString("Field"))){
+ result.add(new Column(
+ conn,
+ meta.getColumnName(i),
+ GeneratorUtils.getType(meta.getColumnType(i)),
+ resultSet.getString("Comment"),
+ resultSet.getString("Key").equals("PRI"),
+ resultSet.getString("Main").equals("PRI"),
+ resultSet.getString("Null").equals("No"),
+ GeneratorUtils.getColumnLength(resultSet.getString("Type")),
+ init,
+ sqlOsType
+ ));
+ }
+ }
+ result.forEach(column -> System.out.println(column.toString()));
+ return result;
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /**********************************************************************************************/
+ /************************************* Entity鍔ㄦ�佸瓧娈� *******************************************/
+ /**********************************************************************************************/
+
+ private String createEntityMsg(){
+ if (Cools.isEmpty(systemPackagePath)) {
+ String[] packagePathSplit = packagePath.split("\\.");
+ systemPackagePath = packagePath.replaceAll(packagePathSplit[packagePathSplit.length-1], "system");
+ }
+ if (columns.isEmpty()){
+ return null;
+ }
+ StringBuilder sb = new StringBuilder();
+ StringBuilder entityIm = new StringBuilder("import com.core.common.Cools;");
+ boolean setTableField = true;
+ boolean setTableId = true;
+ boolean setDateTimeFormat = true;
+ for (Column column : columns){
+ if (column.getType().equals("Date")){
+ entityIm.append("import java.text.SimpleDateFormat;\n")
+ .append("import java.util.Date;\n");
+ }
+
+ // 娉ㄩ噴
+ if (!Cools.isEmpty(column.getComment())){
+ sb.append(" /**\n")
+ .append(" * ")
+ .append(column.getWholeComment())
+ .append("\n")
+ .append(" */")
+ .append("\n");
+ }
+
+ // swagger
+ sb.append(" @ApiModelProperty(value= \"")
+ .append(column.getWholeComment())
+ .append("\")\n");
+
+
+ // 涓婚敭淇グ
+ if (column.isMainKey()){
+ if (setTableId){
+ entityIm.append("import com.baomidou.mybatisplus.annotations.TableId;").append("\n")
+ .append("import com.baomidou.mybatisplus.enums.IdType;").append("\n");
+ setTableId = false;
+ }
+ if (column.isOnly()){
+ sb.append(" ")
+ .append("@TableId(value = \"")
+ .append(column.getName())
+ .append("\", type = IdType.AUTO)")
+ .append("\n");
+ } else {
+ sb.append(" ")
+ .append("@TableId(value = \"")
+ .append(column.getName())
+ .append("\", type = IdType.INPUT)")
+ .append("\n");
+ }
+
+ }
+
+ // 澶栭敭淇グ
+ if (!Cools.isEmpty(column.getForeignKeyMajor())){
+ entityIm.append("import com.core.common.SpringUtils;\n")
+ .append("import ").append(SYSTEM_MODEL.contains(column.getForeignKey())?systemPackagePath:packagePath).append(".service.").append(column.getForeignKey()).append("Service;\n")
+ .append("import ").append(SYSTEM_MODEL.contains(column.getForeignKey())?systemPackagePath:packagePath).append(".entity.").append(column.getForeignKey()).append(";\n");
+ }
+
+ // 鍛藉悕杞崲娉ㄨВ
+ if (!column.getName().equals(column.getHumpName())){
+ if (setTableField){
+ entityIm.append("import com.baomidou.mybatisplus.annotations.TableField;").append("\n");
+ setTableField = false;
+ }
+ sb.append(" ")
+ .append("@TableField(\"")
+ .append(column.getName())
+ .append("\")")
+ .append("\n");
+ }
+
+ if ("Date".equals(column.getType())){
+ if (setDateTimeFormat){
+ entityIm.append("import org.springframework.format.annotation.DateTimeFormat;").append("\n");
+ setDateTimeFormat = false;
+ }
+ sb.append(" ")
+ .append("@DateTimeFormat(pattern=\"yyyy-MM-dd HH:mm:ss\")")
+ .append("\n");
+ }
+
+ sb.append(" ")
+ .append("private ")
+ .append(column.getType())
+ .append(" ")
+ .append(column.getHumpName())
+ .append(";")
+ .append("\n")
+ .append("\n");
+ }
+
+ // default constructor
+ sb.append(" public ").append(fullEntityName).append("() {}\n\n");
+ // full constructor
+ sb.append(" public ").append(fullEntityName).append("(");
+ for (Column column : columns){
+ if (column.isOnly()){ continue;}
+ sb.append(column.getType()).append(" ").append(column.getHumpName()).append(",");
+ }
+ sb.deleteCharAt(sb.length()-1);
+ sb.append(") {\n");
+ for (Column column : columns){
+ if (column.isPrimaryKey()){ continue;}
+ sb.append(" this.").append(column.getHumpName()).append(" = ").append(column.getHumpName()).append(";\n");
+ }
+ sb.append(" }\n\n");
+ // constructor tips
+ sb.append("// ").append(fullEntityName).append(" ").append(simpleEntityName).append(" = new ").append(fullEntityName).append("(\n");
+ for (int i = 0; i<columns.size(); i++) {
+ if (columns.get(i).isOnly()){ continue;}
+ sb.append("// null");
+ if (i < columns.size()-1){
+ sb.append(",");
+ }
+ sb.append(" // ").append(columns.get(i).getComment()).append(columns.get(i).isNotNull()?"[闈炵┖]":"");
+ if (i < columns.size()-1){
+ sb.append("\n");
+ }
+ }
+ sb.append("\n// );\n\n");
+
+ // get set
+ for (Column column : columns){
+ // 鏃堕棿瀛楁澧炲姞$鏍煎紡鍖�
+ if ("Date".equals(column.getType())){
+ sb.append(" public String get")
+ .append(column.getHumpName().substring(0, 1).toUpperCase()).append(column.getHumpName().substring(1))
+ .append("\\$")
+ .append("(){\n")
+ .append(" if (Cools.isEmpty(this.").append(column.getHumpName()).append(")){\n")
+ .append(" return \"\";\n")
+ .append(" }\n")
+ .append(" return new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\").format(this.")
+ .append(column.getHumpName())
+ .append(");\n")
+ .append(" }\n\n");
+ // 鏋氫妇瀛楁澧炲姞$鏍煎紡鍖�
+ } else if (!Cools.isEmpty(column.getEnums())){
+ sb.append(" public String get")
+ .append(column.getHumpName().substring(0, 1).toUpperCase()).append(column.getHumpName().substring(1))
+ .append("\\$")
+ .append("(){\n")
+ .append(" if (null == this.").append(column.getHumpName()).append("){ return null; }\n")
+ .append(" switch (this.").append(column.getHumpName()).append("){\n");
+ for (Map<String, Object> map : column.getEnums()){
+ for (Map.Entry<String, Object> entry : map.entrySet()){
+ sb.append(" case ").append(entry.getKey()).append(":\n")
+ .append(" return \"").append(entry.getValue()).append("\";\n");
+ }
+ }
+ sb.append(" default:\n")
+ .append(" return String.valueOf(this.").append(column.getHumpName()).append(");\n")
+ .append(" }\n")
+ .append(" }\n\n");
+ }
+
+ // 澶栭敭淇グ
+ if (!Cools.isEmpty(column.getForeignKeyMajor())){
+ sb.append(" public String get").append(column.getHumpName().substring(0, 1).toUpperCase()).append(column.getHumpName().substring(1)).append("\\$").append("(){\n")
+ .append(" ").append(column.getForeignKey()).append("Service service = SpringUtils.getBean(").append(column.getForeignKey()).append("Service.class);\n")
+ .append(" ").append(column.getForeignKey()).append(" ").append(GeneratorUtils.firstCharConvert(column.getForeignKey()))
+ .append(" = service.selectById(this.").append(column.getHumpName()).append(");\n")
+ .append(" if (!Cools.isEmpty(").append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append(")){\n")
+ .append(" return String.valueOf(").append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append(".get").append(column.getForeignKeyMajor()).append("());\n")
+ .append(" }\n")
+ .append(" return null;\n")
+ .append(" }\n\n");
+ }
+
+ }
+ entityImport = entityIm.toString();
+ return sb.toString();
+ }
+
+ /**********************************************************************************************/
+ /*********************************** Controller鍔ㄦ�佸瓧娈� *****************************************/
+ /**********************************************************************************************/
+
+ private String createPrimaryMsg(){
+ String defaultMajor = "id";
+ boolean havePrimary = false;
+ for (Column column: columns){
+ if (column.isPrimaryKey()){
+ defaultMajor = column.getHumpName();
+ havePrimary = true;
+ }
+ }
+ if (!havePrimary) {
+ for (Column column: columns){
+ if (column.isMainKey()){
+ defaultMajor = column.getHumpName();
+ }
+ }
+ }
+ return defaultMajor;
+ }
+
+ private String createMajorMsg(){
+ String defaultMajor = "id";
+ for (Column column: columns){
+ if (column.isPrimaryKey()){
+ defaultMajor = column.getHumpName();
+ }
+ if (column.isMajor()){
+ return column.getHumpName();
+ }
+ }
+ return defaultMajor;
+ }
+
+ /**********************************************************************************************/
+ /*************************************** Xml鍔ㄦ�佸瓧娈� ********************************************/
+ /**********************************************************************************************/
+
+ private String createXmlMsg(){
+ StringBuilder sb = new StringBuilder();
+ for (Column column : columns){
+ sb.append(" ")
+ .append("<")
+ .append(column.isOnly()?"id":"result")
+ .append(" column=\"")
+ .append(column.getName())
+ .append("\" property=\"")
+ .append(column.getHumpName())
+ .append("\" />\n");
+ }
+ return sb.toString();
+ }
+
+ /**********************************************************************************************/
+ /************************************** Html鍔ㄦ�佸瓧娈� *******************************************/
+ /**********************************************************************************************/
+
+ private String createHtmlMsg(){
+ StringBuilder sb = new StringBuilder();
+ for (Column column : columns){
+ if (column.isPrimaryKey()){ continue;}
+ if (!Cools.isEmpty(column.getForeignKeyMajor())){
+ sb.append(" <div class=\"layui-inline\">\n")
+ .append(" <div class=\"layui-input-inline cool-auto-complete\">\n")
+ .append(" <input id=\"").append(column.getHumpName()).append("\"")
+ .append(" class=\"layui-input\" name=\"").append(column.getName()).append("\" type=\"text\" placeholder=\"璇疯緭鍏" autocomplete=\"off\" style=\"display: none\">\n")
+ .append(" <input id=\"").append(column.getHumpName()).append("\\$")
+ .append("\" class=\"layui-input cool-auto-complete-div\" onclick=\"autoShow(this.id)\" type=\"text\" placeholder=\"").append(GeneratorUtils.supportHtmlName(column.getComment())).append("\" onfocus=this.blur()>\n")
+ .append(" <div class=\"cool-auto-complete-window\">\n")
+ .append(" <input class=\"cool-auto-complete-window-input\" data-key=\"").append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append("Query").append("By").append(column.getHumpName()).append("\" onkeyup=\"autoLoad(this.getAttribute('data-key'))\">\n")
+ .append(" <select class=\"cool-auto-complete-window-select\" data-key=\"").append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append("Query").append("By").append(column.getHumpName()).append("Select\" onchange=\"confirmed(this.getAttribute('data-key'))\" multiple=\"multiple\">\n")
+ .append(" </select>\n")
+ .append(" </div>\n")
+ .append(" </div>\n")
+ .append(" </div>\n");
+ }
+ }
+ return sb.toString();
+ }
+
+ private String createHtmlDialogMsg() {
+ StringBuilder sb = new StringBuilder();
+ for (Column column : columns){
+ if (column.isPrimaryKey()) {
+ continue;
+ }
+ sb.append(" <div class=\"layui-form-item\">\n");
+ sb.append(" <label class=\"layui-form-label");
+ if (column.isNotNull()){
+ sb.append(" layui-form-required");
+ }
+ sb.append("\">").append(column.getComment()).append(": </label>\n");
+ sb.append(" <div class=\"layui-input-block");
+ // 鍏宠仈澶栭敭
+ if (!Cools.isEmpty(column.getForeignKeyMajor())){
+ sb.append(" cool-auto-complete");
+ }
+ sb.append("\">\n");
+ // 杈撳叆妗嗙被鍨�
+ if (Cools.isEmpty(column.getEnums())){
+ sb.append(" <input class=\"layui-input\" name=\"").append(column.getHumpName());
+ if ("Date".equals(column.getType())){
+ sb.append("\" id=\"").append(column.getHumpName()).append("\\$");
+ }
+ sb.append("\" placeholder=\"璇疯緭鍏�").append(column.getComment()).append("\"");
+ if (column.isNotNull()){
+ sb.append(" lay-vertype=\"tips\" lay-verify=\"required\"");
+ }
+ // 鍏宠仈澶栭敭
+ if (!Cools.isEmpty(column.getForeignKeyMajor())){
+ sb.append(" style=\"display: none\"");
+ }
+ sb.append(">\n");
+
+ // 鍏宠仈澶栭敭
+ if (!Cools.isEmpty(column.getForeignKeyMajor())){
+ sb.append(" <input id=\"").append(column.getHumpName()).append("\\$").append("\" name=\"").append(column.getHumpName()).append("\\$")
+ .append("\" class=\"layui-input cool-auto-complete-div\" onclick=\"autoShow(this.id)\" type=\"text\" placeholder=\"璇疯緭鍏�").append(column.getComment()).append("\" onfocus=this.blur()>\n");
+ sb.append(" <div class=\"cool-auto-complete-window\">\n")
+ .append(" <input class=\"cool-auto-complete-window-input\" data-key=\"")
+ .append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append("Query").append("By").append(column.getHumpName()).append("\" onkeyup=\"autoLoad(this.getAttribute('data-key'))\">\n")
+ .append(" <select class=\"cool-auto-complete-window-select\" data-key=\"").append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append("Query").append("By").append(column.getHumpName()).append("Select\" onchange=\"confirmed(this.getAttribute('data-key'))\" multiple=\"multiple\">\n")
+ .append(" </select>\n")
+ .append(" </div>\n");
+ }
+ // 鏋氫妇绫诲瀷
+ } else {
+ sb.append(" <select name=\"").append(column.getHumpName()).append("\"");
+ if (column.isNotNull()){
+ sb.append(" lay-vertype=\"tips\" lay-verify=\"required\"");
+ }
+ sb.append(">\n");
+ sb.append(" <option value=\"\">").append("璇烽�夋嫨").append(column.getComment()).append("</option>\n");
+ for (Map<String, Object> map : column.getEnums()){
+ for (Map.Entry<String, Object> entry : map.entrySet()){
+ sb.append(" <option value=\"")
+ .append(entry.getKey())
+ .append("\">")
+ .append(entry.getValue())
+ .append("</option>\n");
+ }
+ }
+ sb.append(" </select>\n");
+ }
+
+ sb.append(" </div>\n");
+ sb.append(" </div>\n");
+ }
+ return sb.toString();
+ }
+
+ private String createJsTableMsg(){
+ StringBuilder sb = new StringBuilder();
+ for (Column column : columns){
+// if (column.isPrimaryKey()){ continue;}
+ sb.append(" ,{field: '");
+ if ("Date".equals(column.getType()) || !Cools.isEmpty(column.getEnums())){
+ // 鏃堕棿銆佹灇涓� 鏍煎紡鍖�
+ sb.append(column.getHumpName()).append("\\$");
+ } else {
+ // 涓婚敭淇グ
+ if (!Cools.isEmpty(column.getForeignKeyMajor())){
+ sb.append(column.getHumpName()).append("\\$");
+ } else {
+ sb.append(column.getHumpName());
+ }
+ }
+ sb.append("', align: 'center',title: '").append(column.getComment()).append("'");
+ // 澶嶉�夋
+ if (column.isCheckBox()){
+ sb.append(", templet:function(row){\n")
+ .append(" var html = \"<input value='")
+ .append(column.getHumpName()).append("' type='checkbox' lay-skin='primary' lay-filter='tableCheckbox' table-index='\"+row.LAY_TABLE_INDEX+\"'\";\n")
+ .append(" if(row.").append(column.getHumpName()).append(" === 'Y'){html += \" checked \";}\n")
+ .append(" html += \">\";\n")
+ .append(" return html;\n")
+ .append(" }");
+ }
+ sb.append("}\n");
+ }
+ return sb.toString();
+ }
+
+ private String createJsFkContent(){
+ StringBuilder sb = new StringBuilder();
+ for (Column column : columns){
+ // 濡傛灉鏈夊叧鑱斿鍋�
+ if (!Cools.isEmpty(column.getForeignKeyMajor())){
+ sb.append(" window.load").append(column.getForeignKey()).append("Sel = function () {").append("\n")
+ .append(" return xmSelect.render({").append("\n")
+ .append(" el: '#").append(GeneratorUtils.firstCharConvert(column.getForeignKey(), true)).append("XmlSel',").append("\n")
+ .append(" autoRow: true,").append("\n")
+ .append(" filterable: true,").append("\n")
+ .append(" remoteSearch: true,").append("\n")
+ .append(" radio: true,").append("\n")
+ .append(" remoteMethod: function (val, cb, show) {").append("\n")
+ .append(" \\$.ajax({").append("\n")
+ .append(" url: baseUrl + \"/").append(GeneratorUtils.firstCharConvert(column.getForeignKey(), true)).append("/all/get/kv\",").append("\n")
+ .append(" headers: {'token': localStorage.getItem('token')},").append("\n")
+ .append(" data: {").append("\n")
+ .append(" condition: val").append("\n")
+ .append(" },").append("\n")
+ .append(" method: 'POST',").append("\n")
+ .append(" success: function (res) {").append("\n")
+ .append(" if (res.code === 200) {").append("\n")
+ .append(" cb(res.data)").append("\n")
+ .append(" } else {").append("\n")
+ .append(" cb([]);").append("\n")
+ .append(" layer.msg(res.msg, {icon: 2});").append("\n")
+ .append(" }").append("\n")
+ .append(" }").append("\n")
+ .append(" });").append("\n")
+ .append(" }").append("\n")
+ .append(" });").append("\n")
+ .append(" }").append("\n")
+ .append("\n");
+ }
+ }
+ return sb.toString();
+ }
+
+ private String createJsDateContent(){
+ StringBuilder sb = new StringBuilder();
+ for (Column column : columns) {
+ if (column.isPrimaryKey()) {
+ continue;
+ }
+ if ("Date".equals(column.getType())){
+ sb.append(" layDate.render({\n")
+ .append(" elem: '#").append(column.getHumpName()).append("\\\\\\\\\\$',\n")
+ .append(" type: 'datetime',\n")
+ .append(" value: data!==undefined?data['").append(column.getHumpName()).append("$'").append("]:null\n")
+ .append(" });\n");
+ }
+ }
+ return sb.toString();
+ }
+
+ private String createJsPrimaryKeyMsg(){
+ StringBuilder sb = new StringBuilder();
+ for (Column column : columns) {
+ if (column.isPrimaryKey()) {
+ sb.append("#").append(column.getHumpName()).append(",");
+ }
+ }
+ if (sb.length() > 1){
+ if (sb.substring(sb.length() - 1).equals(",")) {
+ sb.deleteCharAt(sb.length()-1);
+ }
+ }
+ return sb.toString();
+ }
+
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/constant/SqlOsType.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/constant/SqlOsType.java
new file mode 100644
index 0000000..fd5f924
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/constant/SqlOsType.java
@@ -0,0 +1,9 @@
+package com.zy.asrs.framework.generators.constant;
+
+public enum SqlOsType {
+
+ MYSQL,
+ SQL_SERVER,
+ ;
+
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/domain/Column.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/domain/Column.java
new file mode 100644
index 0000000..926c148
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/domain/Column.java
@@ -0,0 +1,285 @@
+package com.zy.asrs.framework.generators.domain;
+
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.generators.CoolGenerator;
+import com.zy.asrs.framework.generators.constant.SqlOsType;
+import com.zy.asrs.framework.generators.utils.GeneratorUtils;
+
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Created by vincent on 2019-06-18
+ */
+public class Column {
+
+ private String name; // 琛ㄥ瓧娈靛悕
+ private String type; // 绫诲瀷
+ private String comment; // 澶囨敞
+ private String humpName; // 灏忛┘宄�
+ private boolean primaryKey; // 鍞竴涓婚敭
+ private boolean mainKey; // 鏅�氫富閿�
+ private boolean notNull; // 闈炵┖
+ private boolean major; // 涓昏
+ private boolean image; // 鍥剧墖
+ private boolean checkBox; // 澶嶉�夋
+ private String foreignKey; // 澶栧仴瀹炰緥鍚�(澶ч┘宄�,濡俿ys_user ==> User)
+ private String foreignKeyMajor; // 澶栭敭(灏忛┘宄�)
+ private List<Map<String, Object>> enums; // 鏋氫妇鍊�
+ private Integer length; // 瀛楁闀垮害
+
+ public Column(Connection conn, String name, String type, String comment, boolean primaryKey, boolean mainKey, boolean notNull, Integer length, boolean init, SqlOsType sqlOsType) {
+ this.name = name;
+ this.type = type;
+ this.comment = "";
+ if (!Cools.isEmpty(comment)){
+ // 鏋氫妇
+ Pattern pattern1 = Pattern.compile("(.+?)(?=\\{)");
+ Matcher matcher1 = pattern1.matcher(comment);
+ // 澶栭敭
+ Pattern pattern11 = Pattern.compile("(.+?)(?=\\[)");
+ Matcher matcher11 = pattern11.matcher(comment);
+ // 鏋氫妇
+ if (matcher1.find()) {
+ this.comment = matcher1.group();
+ Pattern pattern2 = Pattern.compile("(?<=\\{)(.+?)(?=})");
+ Matcher matcher2 = pattern2.matcher(comment);
+ if (matcher2.find()) {
+ String group = matcher2.group();
+ if (!Cools.isEmpty(group)) {
+ String[] values = group.split(",");
+ this.enums = new ArrayList<>();
+ for (String val : values) {
+ Map<String, Object> map = new HashMap<>();
+ String[] split = val.split(":");
+ map.put(split[0], split[1]);
+ enums.add(map);
+ }
+ }
+ }
+ // 澶栭敭
+ } else if (matcher11.find()){
+ this.comment = matcher11.group();
+ Pattern pattern22 = Pattern.compile("(?<=\\[)(.+?)(?=])");
+ Matcher matcher22 = pattern22.matcher(comment);
+ if (matcher22.find()) {
+ String group = matcher22.group();
+ if (!Cools.isEmpty(group)) {
+ this.foreignKey = GeneratorUtils.getNameSpace(group);
+ List<Column> foreignColumns = new ArrayList<>();
+ if (init) {
+ try {
+ switch (sqlOsType) {
+ case MYSQL:
+ foreignColumns = CoolGenerator.getMysqlColumns(conn, group, false, sqlOsType);
+ break;
+ case SQL_SERVER:
+ foreignColumns = CoolGenerator.getSqlServerColumns(conn, group, false, sqlOsType);
+ break;
+ default:
+ break;
+ }
+
+ } catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+ if (!Cools.isEmpty(foreignColumns)){
+ for (Column column : foreignColumns){
+ if (column.isMajor()){
+ this.foreignKeyMajor = GeneratorUtils.firstCharConvert(column.getHumpName(), false);
+ }
+ }
+ if (Cools.isEmpty(this.foreignKeyMajor)){
+ this.foreignKeyMajor = "Id";
+ }
+ }
+ }
+ }
+ } else {
+ this.comment = comment;
+ }
+ // 涓昏瀛楁
+ if (comment.endsWith("(*)")){
+ this.comment = comment.substring(0, comment.length()-3);
+ this.major = true;
+ }
+ // 鍥剧墖瀛楁
+ if (comment.endsWith("(img)")){
+ this.comment = comment.substring(0, comment.length()-5);
+ this.image = true;
+ }
+ // 澶嶉�夋
+ if (comment.endsWith("(checkbox)")){
+ this.comment = comment.substring(0, comment.length()-10);
+ this.checkBox = true;
+ }
+ }
+// if (primaryKey || mainKey){
+// this.primaryKey = true;
+// } else {
+// this.primaryKey = false;
+// }
+ this.primaryKey = primaryKey;
+ this.mainKey = mainKey;
+ this.notNull = notNull;
+ this.length = length;
+ this.humpName = GeneratorUtils._convert(name);
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(final String name) {
+ this.name = name;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(final String type) {
+ this.type = type;
+ }
+
+ public String getComment() {
+ return comment;
+ }
+
+ public String getWholeComment() {
+ if (!Cools.isEmpty(this.enums)){
+ StringBuilder sb = new StringBuilder(" ");
+ for (Map<String, Object> val : enums){
+ for (Map.Entry<String, Object> entry : val.entrySet()){
+ sb.append(entry.getKey())
+ .append(": ")
+ .append(entry.getValue())
+ .append(" ");
+ }
+ }
+ return comment + sb.toString();
+ }
+ return comment;
+ }
+
+ public void setComment(final String comment) {
+ this.comment = comment;
+ }
+
+ public String getHumpName() {
+ return humpName;
+ }
+
+// public boolean isPrimaryKey() {
+// return primaryKey || mainKey;
+// }
+
+ public boolean isPrimaryKey() {
+ return primaryKey;
+ }
+
+ public boolean isOnly(){
+ return primaryKey;
+ }
+
+ public void setPrimaryKey(boolean primaryKey) {
+ this.primaryKey = primaryKey;
+ }
+
+ public boolean isNotNull() {
+ return notNull;
+ }
+
+ public void setNotNull(final boolean notNull) {
+ this.notNull = notNull;
+ }
+
+ public String getForeignKey() {
+ return foreignKey;
+ }
+
+ public void setForeignKey(final String foreignKey) {
+ this.foreignKey = foreignKey;
+ }
+
+ public String getForeignKeyMajor() {
+ return foreignKeyMajor;
+ }
+
+ public void setForeignKeyMajor(final String foreignKeyMajor) {
+ this.foreignKeyMajor = foreignKeyMajor;
+ }
+
+ public List<Map<String, Object>> getEnums() {
+ return enums;
+ }
+
+ public void setEnums(List<Map<String, Object>> enums) {
+ this.enums = enums;
+ }
+
+ public Integer getLength() {
+ return length;
+ }
+
+ public void setLength(final Integer length) {
+ this.length = length;
+ }
+
+ public boolean isMajor() {
+ return major;
+ }
+
+ public void setMajor(final boolean major) {
+ this.major = major;
+ }
+
+ public boolean isImage() {
+ return image;
+ }
+
+ public void setImage(final boolean image) {
+ this.image = image;
+ }
+
+ public boolean isCheckBox() {
+ return checkBox;
+ }
+
+ public void setCheckBox(boolean checkBox) {
+ this.checkBox = checkBox;
+ }
+
+ public boolean isMainKey() {
+ return mainKey;
+ }
+
+ public void setMainKey(boolean mainKey) {
+ this.mainKey = mainKey;
+ }
+
+ @Override
+ public String toString() {
+ return "Column{" +
+ "name='" + name + '\'' +
+ ", type='" + type + '\'' +
+ ", comment='" + comment + '\'' +
+ ", humpName='" + humpName + '\'' +
+ ", primaryKey=" + primaryKey +
+ ", notNull=" + notNull +
+ ", major=" + major +
+ ", image=" + image +
+ ", foreignKey='" + foreignKey + '\'' +
+ ", foreignKeyMajor='" + foreignKeyMajor + '\'' +
+ ", enums=" + enums +
+ ", length=" + length +
+ '}';
+ }
+
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/utils/GeneratorUtils.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/utils/GeneratorUtils.java
new file mode 100644
index 0000000..e6d364d
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/utils/GeneratorUtils.java
@@ -0,0 +1,149 @@
+package com.zy.asrs.framework.generators.utils;
+
+import com.core.common.Cools;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static java.sql.Types.*;
+
+/**
+ * Created by vincent on 2019-06-18
+ */
+public class GeneratorUtils {
+
+ /**
+ * 涓嬪垝绾� ===>> 椹煎嘲鍛藉悕
+ * @param smallHump 灏忛┘宄板懡鍚�
+ */
+ public static String _convert(String str, boolean smallHump){
+ String[] split = str.split("_");
+ StringBuilder sb = new StringBuilder();
+ for (int i=0;i<split.length;i++){
+ sb.append(i==0&&smallHump?split[i]:split[i].substring(0, 1).toUpperCase()+split[i].substring(1));
+ }
+ return sb.toString();
+ }
+
+ public static String _convert(String str){
+ return _convert(str, true);
+ }
+
+ // sql绫诲瀷 ===>> java绫诲瀷
+ public static String getType(int type){
+ switch (type){
+ case BIT:
+ return "Boolean";
+ case TINYINT:
+ return "Short";
+ case SMALLINT:
+ return "Short";
+ case INTEGER:
+ return "Integer";
+ case BIGINT:
+ return "Long";
+ case DOUBLE:
+ return "Double";
+ case DECIMAL:
+ return "Double";
+ case NCHAR:
+ return "String";
+ case NVARCHAR:
+ return "String";
+ case CHAR:
+ return "String";
+ case VARCHAR:
+ return "String";
+ case DATE:
+ return "Date";
+ case TIMESTAMP:
+ return "Date";
+ case BLOB:
+ return "String";
+ case LONGVARCHAR:
+ return "String";
+ default:
+ return null;
+ }
+ }
+
+ // sql琛ㄥ悕 ===>> 鍘诲墠缂� 澶ч┘宄�
+ public static String getNameSpace(String tableName){
+ String[] strings = tableName.split("_");
+ StringBuilder sb = new StringBuilder();
+ for (int i=1;i<strings.length;i++){
+ if (i!=1){
+ sb.append("_");
+ }
+ sb.append(strings[i]);
+ }
+ return _convert(sb.toString(), false);
+ }
+
+ // htmlDetail 瀛楃閫傞厤
+ public static String supportHtmlName(String comment){
+ if (Cools.isEmpty(comment)){
+ return "";
+ }
+ if (comment.length() == 2){
+ return comment.charAt(0) + "銆�銆�" + comment.charAt(1);
+ } else if (comment.length() == 3){
+ return comment.charAt(0) + " " + comment.charAt(1) + " " +comment.charAt(2);
+ }
+ return comment;
+ }
+
+ /**
+ * 鑾峰彇mysql琛ㄥ瓧娈甸暱搴�
+ */
+ public static Integer getColumnLength(String typeMsg){
+ if (Cools.isEmpty(typeMsg)){
+ return null;
+ }
+ Pattern pattern = Pattern.compile("(?<=\\()(.+?)(?=\\))");
+ Matcher matcher = pattern.matcher(typeMsg);
+ if (matcher.find()){
+ String group = matcher.group();
+ if (group.contains(",")) {
+ group = group.split(",")[0];
+ }
+ return Integer.parseInt(group);
+ }
+ return null;
+ }
+
+ /**
+ * 瀛楃涓查瀛楁瘝澶у皬鍐欒浆鎹�
+ * @param str 瀛楃涓�
+ * @param low true锛氬皬鍐� / false锛氬ぇ鍐�
+ * @return the result
+ */
+ public static String firstCharConvert(String str, boolean low){
+ if (Cools.isEmpty(str)){
+ return "";
+ }
+ String firstChar = str.substring(0, 1);
+ if (low){
+ firstChar = firstChar.toLowerCase();
+ } else {
+ firstChar = firstChar.toUpperCase();
+ }
+ return firstChar + str.substring(1);
+ }
+
+ public static String firstCharConvert(String str){
+ return firstCharConvert(str, true);
+ }
+
+ /** 椹煎嘲杞笅鍒掔嚎 */
+ public static String humpToLine(String str) {
+ Matcher matcher = Pattern.compile("[A-Z]").matcher(str);
+ StringBuffer sb = new StringBuffer();
+ while (matcher.find()) {
+ matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase());
+ }
+ matcher.appendTail(sb);
+ return sb.toString();
+ }
+
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/utils/Algorithm.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/utils/Algorithm.java
new file mode 100644
index 0000000..89da7a9
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/utils/Algorithm.java
@@ -0,0 +1,22 @@
+package com.zy.asrs.framework.utils;
+
+/**
+ * 绠楁硶
+ * Created by vincent on 2023/3/8
+ */
+public class Algorithm {
+
+ /**
+ *
+ * Floyd 寮楁礇浼婂痉绠楁硶
+ *
+ * x | 1 | 2 | 3 | 4
+ * 1 | 0 | 3 | 4 | 2
+ * 2 | 3 | 0 | 0 | 0
+ * 3 | 4 | 0 | 0 | 3
+ * 4 | 2 | 0 | 3 | 0
+ */
+
+
+
+}
diff --git a/zy-asrs-framework/src/main/java/com/zy/asrs/framework/utils/SignUtils.java b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/utils/SignUtils.java
new file mode 100644
index 0000000..5843030
--- /dev/null
+++ b/zy-asrs-framework/src/main/java/com/zy/asrs/framework/utils/SignUtils.java
@@ -0,0 +1,53 @@
+package com.zy.asrs.framework.utils;
+
+import com.core.common.Cools;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import static javax.xml.bind.JAXBIntrospector.getValue;
+
+/**
+ * Created by vincent on 2020-01-06
+ */
+public class SignUtils {
+
+ /**
+ * 鐢熸垚绛惧悕
+ * 锛堣鍒欏涓嬶細
+ * 绗竴姝ワ細
+ * 璁炬墍鏈夊彂閫佹垨鑰呮帴鏀跺埌鐨勬暟鎹负闆嗗悎M锛�
+ * 灏嗛泦鍚圡鍐呴潪绌哄弬鏁板�肩殑鍙傛暟鎸夌収鍙傛暟鍚岮SCII鐮佷粠灏忓埌澶ф帓搴忥紙瀛楀吀搴忥級锛�
+ * 浣跨敤URL閿�煎鐨勬牸寮忥紙鍗砶ey1=value1&key2=value2鈥︼級鎷兼帴鎴愬瓧绗︿覆stringA
+ *
+ * 绗簩姝ワ細
+ * 鍦╯tringA鏈�鍚庢嫾鎺ヤ笂key寰楀埌stringSignTemp瀛楃涓诧紝
+ * 骞跺stringSignTemp杩涜MD5杩愮畻锛屽啀灏嗗緱鍒扮殑瀛楃涓叉墍鏈夊瓧绗﹁浆鎹负澶у啓锛�
+ * 寰楀埌sign鍊約ignValue
+ * 锛�
+ * @param map 鍙傛暟闆嗗悎
+ * @param secret 瀵嗛挜
+ * @return the sign 绛惧悕
+ */
+ public static String sign(Map<String, Object> map, String secret) {
+ List<String> list = new ArrayList<>();
+ for (String key : map.keySet()) {
+ if (!key.equals("sign") && map.get(key) != null) {
+ list.add(key + "=" + getValue(key) + "&");
+ }
+ }
+ int size = list.size();
+ String[] arrayToSort = list.toArray(new String[size]);
+ Arrays.sort(arrayToSort, String.CASE_INSENSITIVE_ORDER);
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < size; i++) {
+ sb.append(arrayToSort[i]);
+ }
+ String stringA = sb.toString();
+ stringA += "key=" + secret;
+ return Cools.md5(stringA).toUpperCase();
+ }
+
+}
diff --git a/zy-asrs-framework/src/main/resources/META-INF/spring.factories b/zy-asrs-framework/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000..73bd6d4
--- /dev/null
+++ b/zy-asrs-framework/src/main/resources/META-INF/spring.factories
@@ -0,0 +1 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.core.config.CoolBaseConfig
\ No newline at end of file
diff --git a/zy-asrs-framework/src/main/resources/templates/Controller.txt b/zy-asrs-framework/src/main/resources/templates/Controller.txt
new file mode 100644
index 0000000..ebe2755
--- /dev/null
+++ b/zy-asrs-framework/src/main/resources/templates/Controller.txt
@@ -0,0 +1,135 @@
+package @{COMPANYNAME}.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.common.DateUtils;
+import @{COMPANYNAME}.entity.@{ENTITYNAME};
+import @{COMPANYNAME}.service.@{ENTITYNAME}Service;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.core.domain.KeyValueVo;
+import @{SYSTEMPACKAGE}.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+public class @{ENTITYNAME}Controller extends BaseController {
+
+ @Autowired
+ private @{ENTITYNAME}Service @{SIMPLEENTITYNAME}Service;
+
+ @RequestMapping(value = "/@{SIMPLEENTITYNAME}/{id}/auth")
+ @ManagerAuth
+ public R get(@PathVariable("id") String id) {
+ return R.ok(@{SIMPLEENTITYNAME}Service.selectById(String.valueOf(id)));
+ }
+
+ @RequestMapping(value = "/@{SIMPLEENTITYNAME}/page/auth")
+ @ManagerAuth
+ public R page(@RequestParam(defaultValue = "1")Integer curr,
+ @RequestParam(defaultValue = "10")Integer limit,
+ @RequestParam(required = false)String orderByField,
+ @RequestParam(required = false)String orderByType,
+ @RequestParam(required = false)String condition,
+ @RequestParam Map<String, Object> param){
+ EntityWrapper<@{ENTITYNAME}> wrapper = new EntityWrapper<>();
+ excludeTrash(param);
+ convert(param, wrapper);
+ allLike(@{ENTITYNAME}.class, param.keySet(), wrapper, condition);
+ if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+ return R.ok(@{SIMPLEENTITYNAME}Service.selectPage(new Page<>(curr, limit), wrapper));
+ }
+
+ private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+ for (Map.Entry<String, Object> entry : map.entrySet()){
+ String val = String.valueOf(entry.getValue());
+ if (val.contains(RANGE_TIME_LINK)){
+ String[] dates = val.split(RANGE_TIME_LINK);
+ wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+ wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+ } else {
+ wrapper.like(entry.getKey(), val);
+ }
+ }
+ }
+
+ @RequestMapping(value = "/@{SIMPLEENTITYNAME}/add/auth")
+ @ManagerAuth
+ public R add(@{ENTITYNAME} @{SIMPLEENTITYNAME}) {
+ @{SIMPLEENTITYNAME}Service.insert(@{SIMPLEENTITYNAME});
+ return R.ok();
+ }
+
+ @RequestMapping(value = "/@{SIMPLEENTITYNAME}/update/auth")
+ @ManagerAuth
+ public R update(@{ENTITYNAME} @{SIMPLEENTITYNAME}){
+ if (Cools.isEmpty(@{SIMPLEENTITYNAME}) || null==@{SIMPLEENTITYNAME}.get@{PRIMARYKEYCOLUMN}()){
+ return R.error();
+ }
+ @{SIMPLEENTITYNAME}Service.updateById(@{SIMPLEENTITYNAME});
+ return R.ok();
+ }
+
+ @RequestMapping(value = "/@{SIMPLEENTITYNAME}/delete/auth")
+ @ManagerAuth
+ public R delete(@RequestParam(value="ids[]") Long[] ids){
+ for (Long id : ids){
+ @{SIMPLEENTITYNAME}Service.deleteById(id);
+ }
+ return R.ok();
+ }
+
+ @RequestMapping(value = "/@{SIMPLEENTITYNAME}/export/auth")
+ @ManagerAuth
+ public R export(@RequestBody JSONObject param){
+ EntityWrapper<@{ENTITYNAME}> wrapper = new EntityWrapper<>();
+ List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+ Map<String, Object> map = excludeTrash(param.getJSONObject("@{SIMPLEENTITYNAME}"));
+ convert(map, wrapper);
+ List<@{ENTITYNAME}> list = @{SIMPLEENTITYNAME}Service.selectList(wrapper);
+ return R.ok(exportSupport(list, fields));
+ }
+
+ @RequestMapping(value = "/@{SIMPLEENTITYNAME}Query/auth")
+ @ManagerAuth
+ public R query(String condition) {
+ EntityWrapper<@{ENTITYNAME}> wrapper = new EntityWrapper<>();
+ wrapper.like("@{MAJORCOLUMN}", condition);
+ Page<@{ENTITYNAME}> page = @{SIMPLEENTITYNAME}Service.selectPage(new Page<>(0, 10), wrapper);
+ List<Map<String, Object>> result = new ArrayList<>();
+ for (@{ENTITYNAME} @{SIMPLEENTITYNAME} : page.getRecords()){
+ Map<String, Object> map = new HashMap<>();
+ map.put("id", @{SIMPLEENTITYNAME}.get@{PRIMARYKEYCOLUMN}());
+ map.put("value", @{SIMPLEENTITYNAME}.get@{MAJORCOLUMN_UP}());
+ result.add(map);
+ }
+ return R.ok(result);
+ }
+
+ @RequestMapping(value = "/@{SIMPLEENTITYNAME}/check/column/auth")
+ @ManagerAuth
+ public R query(@RequestBody JSONObject param) {
+ Wrapper<@{ENTITYNAME}> wrapper = new EntityWrapper<@{ENTITYNAME}>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+ if (null != @{SIMPLEENTITYNAME}Service.selectOne(wrapper)){
+ return R.parse(BaseRes.REPEAT).add(getComment(@{ENTITYNAME}.class, String.valueOf(param.get("key"))));
+ }
+ return R.ok();
+ }
+
+ @RequestMapping("/@{SIMPLEENTITYNAME}/all/get/kv")
+ @ManagerAuth
+ public R getDataKV(@RequestParam(required = false) String condition) {
+ List<KeyValueVo> vos = new ArrayList<>();
+ Wrapper<@{ENTITYNAME}> wrapper = new EntityWrapper<@{ENTITYNAME}>().andNew().like("@{MAJORCOLUMN}", condition).orderBy("create_time", false);
+ @{SIMPLEENTITYNAME}Service.selectPage(new Page<>(1, 30), wrapper).getRecords().forEach(item -> vos.add(new KeyValueVo(String.valueOf(item.get@{MAJORCOLUMN_UP}()), item.get@{PRIMARYKEYCOLUMN}())));
+ return R.ok().add(vos);
+ }
+
+}
diff --git a/zy-asrs-framework/src/main/resources/templates/Entity.txt b/zy-asrs-framework/src/main/resources/templates/Entity.txt
new file mode 100644
index 0000000..69d0b41
--- /dev/null
+++ b/zy-asrs-framework/src/main/resources/templates/Entity.txt
@@ -0,0 +1,16 @@
+package @{COMPANYNAME}.entity;
+
+@{ENTITYIMPORT}
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@Data
+@TableName("@{TABLENAME}")
+public class @{ENTITYNAME} implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+@{ENTITYCONTENT}
+}
diff --git a/zy-asrs-framework/src/main/resources/templates/Html.txt b/zy-asrs-framework/src/main/resources/templates/Html.txt
new file mode 100644
index 0000000..b671f55
--- /dev/null
+++ b/zy-asrs-framework/src/main/resources/templates/Html.txt
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title></title>
+ <meta name="renderer" content="webkit">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+ <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+ <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
+ <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+</head>
+<body>
+
+<div class="layui-fluid">
+ <div class="layui-card">
+ <div class="layui-card-body">
+ <div class="layui-form toolbar" id="search-box">
+ <div class="layui-form-item">
+ <div class="layui-inline">
+ <div class="layui-input-inline">
+ <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">
+ </div>
+ </div>
+ <div class="layui-inline" style="width: 300px">
+ <div class="layui-input-inline">
+ <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+ </div>
+ </div>
+ <div class="layui-inline">
+ <div class="layui-input-inline">
+ <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+ </div>
+ </div>
+ <div class="layui-inline"> 
+ <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+ <i class="layui-icon"></i>鎼滅储
+ </button>
+ <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+ <i class="layui-icon"></i>閲嶇疆
+ </button>
+ </div>
+ </div>
+ </div>
+ <table class="layui-hide" id="@{SIMPLEENTITYNAME}" lay-filter="@{SIMPLEENTITYNAME}"></table>
+ </div>
+ </div>
+</div>
+
+<script type="text/html" id="toolbar">
+ <div class="layui-btn-container">
+ <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+ <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+ <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
+ </div>
+</script>
+
+<script type="text/html" id="operate">
+ <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+ <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+</script>
+
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/@{SIMPLEENTITYNAME}/@{SIMPLEENTITYNAME}.js" charset="utf-8"></script>
+</body>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+ <div id="detail" lay-filter="detail" class="layui-form admin-form model-form">
+ <input name="id" type="hidden">
+ <div class="layui-row">
+ <div class="layui-col-md12">
+@{HTMLDIALOGCONTENT}
+ </div>
+ </div>
+ <hr class="layui-bg-gray">
+ <div class="layui-form-item text-right">
+ <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+ <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+ </div>
+ </div>
+</script>
+</html>
+
diff --git a/zy-asrs-framework/src/main/resources/templates/Js.txt b/zy-asrs-framework/src/main/resources/templates/Js.txt
new file mode 100644
index 0000000..0d00504
--- /dev/null
+++ b/zy-asrs-framework/src/main/resources/templates/Js.txt
@@ -0,0 +1,252 @@
+var pageCurr;
+var pageCount = 0;
+layui.config({
+ base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin', 'xmSelect'], function(){
+ var table = layui.table;
+ var $ = layui.jquery;
+ var layer = layui.layer;
+ var layDate = layui.laydate;
+ var form = layui.form;
+ var admin = layui.admin;
+ var xmSelect = layui.xmSelect;
+
+ // 鏁版嵁娓叉煋
+ tableIns = table.render({
+ elem: '#@{SIMPLEENTITYNAME}',
+ headers: {token: localStorage.getItem('token')},
+ url: baseUrl+'/@{SIMPLEENTITYNAME}/page/auth',
+ page: true,
+ limit: 15,
+ limits: [15, 30, 50, 100, 200, 500],
+ toolbar: '#toolbar',
+ cellMinWidth: 50,
+ height: 'full-120',
+ cols: [[
+ {type: 'checkbox'}
+@{JSTABLECONTENT}
+ ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+ ]],
+ request: {
+ pageName: 'curr',
+ pageSize: 'limit'
+ },
+ parseData: function (res) {
+ return {
+ 'code': res.code,
+ 'msg': res.msg,
+ 'count': res.data.total,
+ 'data': res.data.records
+ }
+ },
+ response: {
+ statusCode: 200
+ },
+ done: function(res, curr, count) {
+ if (res.code === 403) {
+ top.location.href = baseUrl+"/";
+ }
+ pageCurr=curr;pageCount=count;
+ limit();
+ }
+ });
+
+ // 鐩戝惉鎺掑簭浜嬩欢
+ table.on('sort(@{SIMPLEENTITYNAME})', function (obj) {
+ var searchData = {};
+ $.each($('#search-box [name]').serializeArray(), function() {
+ searchData[this.name] = this.value;
+ });
+ searchData['orderByField'] = obj.field;
+ searchData['orderByType'] = obj.type;
+ tableIns.reload({
+ where: searchData,
+ page: {curr: 1}
+ });
+ });
+
+ // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+ table.on('toolbar(@{SIMPLEENTITYNAME})', function (obj) {
+ var checkStatus = table.checkStatus(obj.config.id).data;
+ switch(obj.event) {
+ case 'addData':
+ showEditModel();
+ break;
+ case 'deleteData':
+ if (checkStatus.length === 0) {
+ layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+ return;
+ }
+ del(checkStatus.map(function (d) {
+ return d.@{PRIMARYKEYCOLUMN0};
+ }));
+ break;
+ case 'exportData':
+ admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+ var titles=[];
+ var fields=[];
+ obj.config.cols[0].map(function (col) {
+ if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+ titles.push(col.title);
+ fields.push(col.field);
+ }
+ });
+ var exportData = {};
+ $.each($('#search-box [name]').serializeArray(), function() {
+ exportData[this.name] = this.value;
+ });
+ var param = {
+ '@{SIMPLEENTITYNAME}': exportData,
+ 'fields': fields
+ };
+ $.ajax({
+ url: baseUrl+"/@{SIMPLEENTITYNAME}/export/auth",
+ headers: {'token': localStorage.getItem('token')},
+ data: JSON.stringify(param),
+ dataType:'json',
+ contentType:'application/json;charset=UTF-8',
+ method: 'POST',
+ success: function (res) {
+ layer.closeAll();
+ if (res.code === 200) {
+ table.exportFile(titles,res.data,'xls');
+ } else if (res.code === 403) {
+ top.location.href = baseUrl+"/";
+ } else {
+ layer.msg(res.msg, {icon: 2})
+ }
+ }
+ });
+ });
+ break;
+ }
+ });
+
+ // 鐩戝惉琛屽伐鍏蜂簨浠�
+ table.on('tool(@{SIMPLEENTITYNAME})', function(obj){
+ var data = obj.data;
+ switch (obj.event) {
+ case 'edit':
+ showEditModel(data);
+ break;
+ case "del":
+ del([data.@{PRIMARYKEYCOLUMN0}]);
+ break;
+ }
+ });
+
+ /* 寮圭獥 - 鏂板銆佷慨鏀� */
+ function showEditModel(mData) {
+ admin.open({
+ type: 1,
+ area: '600px',
+ title: (mData ? '淇敼' : '娣诲姞') + '',
+ content: $('#editDialog').html(),
+ success: function (layero, dIndex) {
+ layDateRender(mData);
+ form.val('detail', mData);
+ form.on('submit(editSubmit)', function (data) {
+ var loadIndex = layer.load(2);
+ $.ajax({
+ url: baseUrl+"/@{SIMPLEENTITYNAME}/"+(mData?'update':'add')+"/auth",
+ headers: {'token': localStorage.getItem('token')},
+ data: data.field,
+ method: 'POST',
+ success: function (res) {
+ layer.close(loadIndex);
+ if (res.code === 200){
+ layer.close(dIndex);
+ layer.msg(res.msg, {icon: 1});
+ tableReload();
+ } else if (res.code === 403){
+ top.location.href = baseUrl+"/";
+ }else {
+ layer.msg(res.msg, {icon: 2});
+ }
+ }
+ })
+ return false;
+ });
+ $(layero).children('.layui-layer-content').css('overflow', 'visible');
+ layui.form.render('select');
+ }
+ });
+ }
+
+ /* 鍒犻櫎 */
+ function del(ids) {
+ layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+ skin: 'layui-layer-admin',
+ shade: .1
+ }, function (i) {
+ layer.close(i);
+ var loadIndex = layer.load(2);
+ $.ajax({
+ url: baseUrl+"/@{SIMPLEENTITYNAME}/delete/auth",
+ headers: {'token': localStorage.getItem('token')},
+ data: {ids: ids},
+ method: 'POST',
+ success: function (res) {
+ layer.close(loadIndex);
+ if (res.code === 200){
+ layer.msg(res.msg, {icon: 1});
+ tableReload();
+ } else if (res.code === 403){
+ top.location.href = baseUrl+"/";
+ } else {
+ layer.msg(res.msg, {icon: 2});
+ }
+ }
+ })
+ });
+ }
+
+ // 鎼滅储
+ form.on('submit(search)', function (data) {
+ pageCurr = 1;
+ tableReload(true);
+ });
+
+ // 閲嶇疆
+ form.on('submit(reset)', function (data) {
+ pageCurr = 1;
+ clearFormVal($('#search-box'));
+ tableReload(true);
+ });
+
+ // 鏃堕棿閫夋嫨鍣�
+ function layDateRender(data) {
+ setTimeout(function () {
+ layDate.render({
+ elem: '.layui-laydate-range'
+ ,type: 'datetime'
+ ,range: true
+ });
+@{JSDATECONTENT}
+ }, 300);
+ }
+ layDateRender();
+
+@{JSFOREIGNKEYCONTENT}
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+ parent.layer.closeAll();
+});
+
+function tableReload(search) {
+ if (pageCount === 0 || search) {
+ let searchData = {};
+ $.each($('#search-box [name]').serializeArray(), function() {
+ searchData[this.name] = this.value;
+ });
+ tableIns.reload({
+ where: searchData,
+ page: {curr: pageCurr}
+ });
+ } else {
+ $(".layui-laypage-btn")[0].click();
+ }
+}
diff --git a/zy-asrs-framework/src/main/resources/templates/Mapper.txt b/zy-asrs-framework/src/main/resources/templates/Mapper.txt
new file mode 100644
index 0000000..2188013
--- /dev/null
+++ b/zy-asrs-framework/src/main/resources/templates/Mapper.txt
@@ -0,0 +1,12 @@
+package @{COMPANYNAME}.mapper;
+
+import @{COMPANYNAME}.entity.@{ENTITYNAME};
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface @{ENTITYNAME}Mapper extends BaseMapper<@{ENTITYNAME}> {
+
+}
\ No newline at end of file
diff --git a/zy-asrs-framework/src/main/resources/templates/Service.txt b/zy-asrs-framework/src/main/resources/templates/Service.txt
new file mode 100644
index 0000000..ea76166
--- /dev/null
+++ b/zy-asrs-framework/src/main/resources/templates/Service.txt
@@ -0,0 +1,8 @@
+package @{COMPANYNAME}.service;
+
+import @{COMPANYNAME}.entity.@{ENTITYNAME};
+import com.baomidou.mybatisplus.service.IService;
+
+public interface @{ENTITYNAME}Service extends IService<@{ENTITYNAME}> {
+
+}
\ No newline at end of file
diff --git a/zy-asrs-framework/src/main/resources/templates/ServiceImpl.txt b/zy-asrs-framework/src/main/resources/templates/ServiceImpl.txt
new file mode 100644
index 0000000..732073e
--- /dev/null
+++ b/zy-asrs-framework/src/main/resources/templates/ServiceImpl.txt
@@ -0,0 +1,12 @@
+package @{COMPANYNAME}.service.impl;
+
+import @{COMPANYNAME}.mapper.@{ENTITYNAME}Mapper;
+import @{COMPANYNAME}.entity.@{ENTITYNAME};
+import @{COMPANYNAME}.service.@{ENTITYNAME}Service;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("@{SIMPLEENTITYNAME}Service")
+public class @{ENTITYNAME}ServiceImpl extends ServiceImpl<@{ENTITYNAME}Mapper, @{ENTITYNAME}> implements @{ENTITYNAME}Service {
+
+}
\ No newline at end of file
diff --git a/zy-asrs-framework/src/main/resources/templates/Sql.txt b/zy-asrs-framework/src/main/resources/templates/Sql.txt
new file mode 100644
index 0000000..c11d64d
--- /dev/null
+++ b/zy-asrs-framework/src/main/resources/templates/Sql.txt
@@ -0,0 +1,18 @@
+-- save @{SIMPLEENTITYNAME} record
+-- mysql
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( '@{SIMPLEENTITYNAME}/@{SIMPLEENTITYNAME}.html', '@{SIMPLEENTITYNAME}绠$悊', null , '2', null , '1');
+
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( '@{SIMPLEENTITYNAME}#view', '鏌ヨ', '', '3', '0', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( '@{SIMPLEENTITYNAME}#btn-add', '鏂板', '', '3', '1', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( '@{SIMPLEENTITYNAME}#btn-edit', '缂栬緫', '', '3', '2', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( '@{SIMPLEENTITYNAME}#btn-delete', '鍒犻櫎', '', '3', '3', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( '@{SIMPLEENTITYNAME}#btn-export', '瀵煎嚭', '', '3', '4', '1');
+
+-- sqlserver
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'@{SIMPLEENTITYNAME}/@{SIMPLEENTITYNAME}.html', N'@{SIMPLEENTITYNAME}绠$悊', null, '2', null, '1');
+
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'@{SIMPLEENTITYNAME}#view', N'鏌ヨ', '', '3', '0', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'@{SIMPLEENTITYNAME}#btn-add', N'鏂板', '', '3', '1', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'@{SIMPLEENTITYNAME}#btn-edit', N'缂栬緫', '', '3', '2', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'@{SIMPLEENTITYNAME}#btn-delete', N'鍒犻櫎', '', '3', '3', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'@{SIMPLEENTITYNAME}#btn-export', N'瀵煎嚭', '', '3', '4', '1');
diff --git a/zy-asrs-framework/src/main/resources/templates/Xml.txt b/zy-asrs-framework/src/main/resources/templates/Xml.txt
new file mode 100644
index 0000000..6a8b3e5
--- /dev/null
+++ b/zy-asrs-framework/src/main/resources/templates/Xml.txt
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="@{COMPANYNAME}.mapper.@{ENTITYNAME}Mapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="@{COMPANYNAME}.entity.@{ENTITYNAME}">
+@{XMLCONTENT}
+ </resultMap>
+
+</mapper>
\ No newline at end of file
--
Gitblit v1.9.1