ソースを参照

代码格式化

mxd 4 年 前
コミット
7f9d302d2b
59 ファイル変更786 行追加809 行削除
  1. 4 4
      src/main/java/org/ssssssss/magicapi/adapter/resource/KeyValueResource.java
  2. 8 8
      src/main/java/org/ssssssss/magicapi/adapter/resource/ZipResource.java
  3. 122 122
      src/main/java/org/ssssssss/magicapi/cache/DefaultSqlCache.java
  4. 8 8
      src/main/java/org/ssssssss/magicapi/config/MagicDynamicDataSource.java
  5. 3 7
      src/main/java/org/ssssssss/magicapi/config/MagicFunctionManager.java
  6. 14 14
      src/main/java/org/ssssssss/magicapi/context/CookieContext.java
  7. 8 8
      src/main/java/org/ssssssss/magicapi/context/HeaderContext.java
  8. 7 7
      src/main/java/org/ssssssss/magicapi/context/RequestContext.java
  9. 15 15
      src/main/java/org/ssssssss/magicapi/context/SessionContext.java
  10. 1 1
      src/main/java/org/ssssssss/magicapi/dialect/ClickhouseDialect.java
  11. 11 11
      src/main/java/org/ssssssss/magicapi/dialect/DB2Dialect.java
  12. 14 14
      src/main/java/org/ssssssss/magicapi/dialect/Dialect.java
  13. 12 12
      src/main/java/org/ssssssss/magicapi/dialect/DmDialect.java
  14. 10 10
      src/main/java/org/ssssssss/magicapi/dialect/MySQLDialect.java
  15. 12 12
      src/main/java/org/ssssssss/magicapi/dialect/OracleDialect.java
  16. 10 10
      src/main/java/org/ssssssss/magicapi/dialect/PostgreSQLDialect.java
  17. 49 49
      src/main/java/org/ssssssss/magicapi/dialect/SQLServer2005Dialect.java
  18. 10 10
      src/main/java/org/ssssssss/magicapi/dialect/SQLServerDialect.java
  19. 7 7
      src/main/java/org/ssssssss/magicapi/exception/MagicAPIException.java
  20. 1 1
      src/main/java/org/ssssssss/magicapi/exception/MagicLoginException.java
  21. 1 1
      src/main/java/org/ssssssss/magicapi/exception/MagicServiceException.java
  22. 2 2
      src/main/java/org/ssssssss/magicapi/logging/Log4j2LoggerContext.java
  23. 34 33
      src/main/java/org/ssssssss/magicapi/logging/Log4jLoggerContext.java
  24. 3 3
      src/main/java/org/ssssssss/magicapi/logging/LogInfo.java
  25. 1 1
      src/main/java/org/ssssssss/magicapi/logging/LogbackLoggerContext.java
  26. 4 4
      src/main/java/org/ssssssss/magicapi/logging/LoggerManager.java
  27. 14 11
      src/main/java/org/ssssssss/magicapi/logging/MagicLoggerContext.java
  28. 1 1
      src/main/java/org/ssssssss/magicapi/model/BaseDefinition.java
  29. 1 1
      src/main/java/org/ssssssss/magicapi/model/Header.java
  30. 92 92
      src/main/java/org/ssssssss/magicapi/model/JsonBean.java
  31. 1 1
      src/main/java/org/ssssssss/magicapi/model/MagicEntity.java
  32. 20 20
      src/main/java/org/ssssssss/magicapi/model/Page.java
  33. 33 33
      src/main/java/org/ssssssss/magicapi/model/PageResult.java
  34. 1 1
      src/main/java/org/ssssssss/magicapi/model/Parameter.java
  35. 1 1
      src/main/java/org/ssssssss/magicapi/model/Path.java
  36. 3 5
      src/main/java/org/ssssssss/magicapi/model/RequestEntity.java
  37. 2 2
      src/main/java/org/ssssssss/magicapi/model/TreeNode.java
  38. 6 7
      src/main/java/org/ssssssss/magicapi/modules/BoundSql.java
  39. 7 16
      src/main/java/org/ssssssss/magicapi/modules/HttpModule.java
  40. 1 3
      src/main/java/org/ssssssss/magicapi/modules/MongoModule.java
  41. 9 8
      src/main/java/org/ssssssss/magicapi/modules/RedisModule.java
  42. 15 15
      src/main/java/org/ssssssss/magicapi/modules/RequestModule.java
  43. 13 13
      src/main/java/org/ssssssss/magicapi/modules/ResponseModule.java
  44. 13 13
      src/main/java/org/ssssssss/magicapi/modules/SQLModule.java
  45. 3 5
      src/main/java/org/ssssssss/magicapi/modules/Transaction.java
  46. 3 3
      src/main/java/org/ssssssss/magicapi/modules/table/NamedTable.java
  47. 31 31
      src/main/java/org/ssssssss/magicapi/modules/table/Where.java
  48. 4 4
      src/main/java/org/ssssssss/magicapi/provider/LanguageProvider.java
  49. 8 6
      src/main/java/org/ssssssss/magicapi/provider/MagicAPIService.java
  50. 4 4
      src/main/java/org/ssssssss/magicapi/provider/PageProvider.java
  51. 5 13
      src/main/java/org/ssssssss/magicapi/provider/StoreServiceProvider.java
  52. 8 12
      src/main/java/org/ssssssss/magicapi/provider/impl/DefaultGroupServiceProvider.java
  53. 42 42
      src/main/java/org/ssssssss/magicapi/provider/impl/DefaultPageProvider.java
  54. 3 2
      src/main/java/org/ssssssss/magicapi/provider/impl/JSR223LanguageProvider.java
  55. 38 38
      src/main/java/org/ssssssss/magicapi/utils/Assert.java
  56. 5 5
      src/main/java/org/ssssssss/magicapi/utils/IoUtils.java
  57. 1 0
      src/main/java/org/ssssssss/magicapi/utils/JsonUtils.java
  58. 24 24
      src/main/java/org/ssssssss/magicapi/utils/MD5Utils.java
  59. 3 3
      src/main/java/org/ssssssss/magicapi/utils/PatternUtils.java

+ 4 - 4
src/main/java/org/ssssssss/magicapi/adapter/resource/KeyValueResource.java

@@ -50,10 +50,10 @@ public abstract class KeyValueResource implements Resource {
 
 	@Override
 	public final boolean renameTo(Resource resource) {
-		if(readonly()){
+		if (readonly()) {
 			return false;
 		}
-		if(resource.getAbsolutePath().equalsIgnoreCase(this.getAbsolutePath())){
+		if (resource.getAbsolutePath().equalsIgnoreCase(this.getAbsolutePath())) {
 			return true;
 		}
 		if (!(resource instanceof KeyValueResource)) {
@@ -74,10 +74,10 @@ public abstract class KeyValueResource implements Resource {
 
 	@Override
 	public boolean delete() {
-		if(readonly()){
+		if (readonly()) {
 			return false;
 		}
-		if(isDirectory()){
+		if (isDirectory()) {
 			return this.keys().stream().allMatch(this::deleteByKey);
 		}
 		return deleteByKey(getAbsolutePath());

+ 8 - 8
src/main/java/org/ssssssss/magicapi/adapter/resource/ZipResource.java

@@ -23,7 +23,7 @@ public class ZipResource implements Resource {
 
 	public ZipResource(InputStream is) throws IOException {
 		cachedContent = new HashMap<>();
-		try (ZipArchiveInputStream zis = new ZipArchiveInputStream (is)) {
+		try (ZipArchiveInputStream zis = new ZipArchiveInputStream(is)) {
 			ArchiveEntry entry;
 			byte[] buf = new byte[4096];
 			int len = -1;
@@ -37,7 +37,7 @@ public class ZipResource implements Resource {
 		}
 	}
 
-	ZipResource(String name, Map<String, byte[]> cachedContent,Resource parent) {
+	ZipResource(String name, Map<String, byte[]> cachedContent, Resource parent) {
 		this.path = name;
 		this.cachedContent = cachedContent;
 		this.parent = parent;
@@ -60,12 +60,12 @@ public class ZipResource implements Resource {
 
 	@Override
 	public Resource getResource(String name) {
-		return new ZipResource(this.path + name, this.cachedContent,this);
+		return new ZipResource(this.path + name, this.cachedContent, this);
 	}
 
 	@Override
 	public Resource getDirectory(String name) {
-		return new ZipResource(this.path + name + "/", this.cachedContent,this);
+		return new ZipResource(this.path + name + "/", this.cachedContent, this);
 	}
 
 	@Override
@@ -97,18 +97,18 @@ public class ZipResource implements Resource {
 	public List<Resource> dirs() {
 		int len = this.path.length();
 		return this.cachedContent.keySet().stream()
-				.filter(it -> it.endsWith("/")  && it.startsWith(this.path) && it.indexOf("/",len + 1) == it.length() - 1)
-				.map(it -> this.getDirectory(it.substring(len,it.length() - 1)))
+				.filter(it -> it.endsWith("/") && it.startsWith(this.path) && it.indexOf("/", len + 1) == it.length() - 1)
+				.map(it -> this.getDirectory(it.substring(len, it.length() - 1)))
 				.collect(Collectors.toList());
 	}
 
 
 	@Override
 	public List<Resource> files(String suffix) {
-		if(isDirectory()){
+		if (isDirectory()) {
 			int len = this.path.length();
 			return this.cachedContent.keySet().stream()
-					.filter(it -> it.startsWith(this.path) && it.endsWith(suffix) && it.indexOf("/",len) == -1)
+					.filter(it -> it.startsWith(this.path) && it.endsWith(suffix) && it.indexOf("/", len) == -1)
 					.map(it -> this.getResource(it.substring(len)))
 					.collect(Collectors.toList());
 		}

+ 122 - 122
src/main/java/org/ssssssss/magicapi/cache/DefaultSqlCache.java

@@ -7,127 +7,127 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 public class DefaultSqlCache extends LinkedHashMap<String, DefaultSqlCache.ExpireNode<Object>> implements SqlCache {
 
-    private final String separator = ":";
-
-    private final int capacity;
-
-    private final long expire;
-
-    private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
-
-    public DefaultSqlCache(int capacity, long expire) {
-        super((int) Math.ceil(capacity / 0.75) + 1, 0.75f, true);
-        // 容量
-        this.capacity = capacity;
-        // 固定过期时间
-        this.expire = expire;
-    }
-
-    @Override
-    public void put(String name, String key, Object value) {
-        // 封装成过期时间节点
-        put(name, key, value, this.expire);
-    }
-
-    @Override
-    public void put(String name, String key, Object value, long ttl) {
-        long expireTime = ttl > 0 ? (System.currentTimeMillis() + ttl) :
-                (this.expire > -1 ? System.currentTimeMillis() + this.expire : Long.MAX_VALUE);
-        lock.writeLock().lock();
-        try {
-            // 封装成过期时间节点
-            put(name + separator + key, new ExpireNode<>(expireTime, value));
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    @Override
-    public Object get(String name, String key) {
-        key = name + separator + key;
-        lock.readLock().lock();
-        ExpireNode<Object> expireNode;
-        try {
-            expireNode = super.get(key);
-        } finally {
-            lock.readLock().unlock();
-        }
-        if (expireNode == null) {
-            return null;
-        }
-        // 惰性删除过期的
+	private final String separator = ":";
+
+	private final int capacity;
+
+	private final long expire;
+
+	private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
+
+	public DefaultSqlCache(int capacity, long expire) {
+		super((int) Math.ceil(capacity / 0.75) + 1, 0.75f, true);
+		// 容量
+		this.capacity = capacity;
+		// 固定过期时间
+		this.expire = expire;
+	}
+
+	@Override
+	public void put(String name, String key, Object value) {
+		// 封装成过期时间节点
+		put(name, key, value, this.expire);
+	}
+
+	@Override
+	public void put(String name, String key, Object value, long ttl) {
+		long expireTime = ttl > 0 ? (System.currentTimeMillis() + ttl) :
+				(this.expire > -1 ? System.currentTimeMillis() + this.expire : Long.MAX_VALUE);
+		lock.writeLock().lock();
+		try {
+			// 封装成过期时间节点
+			put(name + separator + key, new ExpireNode<>(expireTime, value));
+		} finally {
+			lock.writeLock().unlock();
+		}
+	}
+
+	@Override
+	public Object get(String name, String key) {
+		key = name + separator + key;
+		lock.readLock().lock();
+		ExpireNode<Object> expireNode;
+		try {
+			expireNode = super.get(key);
+		} finally {
+			lock.readLock().unlock();
+		}
+		if (expireNode == null) {
+			return null;
+		}
+		// 惰性删除过期的
 //        if (this.expire > -1L && expireNode.expire < System.currentTimeMillis()) {
-        if (expireNode.expire < System.currentTimeMillis()) {
-            try {
-                lock.writeLock().lock();
-                super.remove(key);
-            } finally {
-                lock.writeLock().unlock();
-            }
-            return null;
-        }
-        return expireNode.value;
-    }
-
-    @Override
-    public void delete(String name) {
-        try {
-            lock.writeLock().lock();
-            Iterator<Map.Entry<String, ExpireNode<Object>>> iterator = super.entrySet().iterator();
-            String prefix = name + separator;
-            // 清除所有key前缀为name + separator的缓存
-            while (iterator.hasNext()) {
-                Map.Entry<String, ExpireNode<Object>> entry = iterator.next();
-                if (entry.getKey().startsWith(prefix)) {
-                    iterator.remove();
-                }
-            }
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-
-    @Override
-    protected boolean removeEldestEntry(Map.Entry<String, ExpireNode<Object>> eldest) {
-        if (this.expire > -1L && size() > capacity) {
-            clean();
-        }
-        // lru淘汰
-        return size() > this.capacity;
-    }
-
-    /**
-     * 清理已过期的数据
-     */
-    private void clean() {
-        try {
-            lock.writeLock().lock();
-            Iterator<Map.Entry<String, ExpireNode<Object>>> iterator = super.entrySet().iterator();
-            long now = System.currentTimeMillis();
-            while (iterator.hasNext()) {
-                Map.Entry<String, ExpireNode<Object>> next = iterator.next();
-                // 判断是否过期
-                if (next.getValue().expire < now) {
-                    iterator.remove();
-                }
-            }
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-
-    /**
-     * 过期时间节点
-     */
-    static class ExpireNode<V> {
-        long expire;
-        V value;
-
-        ExpireNode(long expire, V value) {
-            this.expire = expire;
-            this.value = value;
-        }
-    }
+		if (expireNode.expire < System.currentTimeMillis()) {
+			try {
+				lock.writeLock().lock();
+				super.remove(key);
+			} finally {
+				lock.writeLock().unlock();
+			}
+			return null;
+		}
+		return expireNode.value;
+	}
+
+	@Override
+	public void delete(String name) {
+		try {
+			lock.writeLock().lock();
+			Iterator<Map.Entry<String, ExpireNode<Object>>> iterator = super.entrySet().iterator();
+			String prefix = name + separator;
+			// 清除所有key前缀为name + separator的缓存
+			while (iterator.hasNext()) {
+				Map.Entry<String, ExpireNode<Object>> entry = iterator.next();
+				if (entry.getKey().startsWith(prefix)) {
+					iterator.remove();
+				}
+			}
+		} finally {
+			lock.writeLock().unlock();
+		}
+	}
+
+
+	@Override
+	protected boolean removeEldestEntry(Map.Entry<String, ExpireNode<Object>> eldest) {
+		if (this.expire > -1L && size() > capacity) {
+			clean();
+		}
+		// lru淘汰
+		return size() > this.capacity;
+	}
+
+	/**
+	 * 清理已过期的数据
+	 */
+	private void clean() {
+		try {
+			lock.writeLock().lock();
+			Iterator<Map.Entry<String, ExpireNode<Object>>> iterator = super.entrySet().iterator();
+			long now = System.currentTimeMillis();
+			while (iterator.hasNext()) {
+				Map.Entry<String, ExpireNode<Object>> next = iterator.next();
+				// 判断是否过期
+				if (next.getValue().expire < now) {
+					iterator.remove();
+				}
+			}
+		} finally {
+			lock.writeLock().unlock();
+		}
+	}
+
+
+	/**
+	 * 过期时间节点
+	 */
+	static class ExpireNode<V> {
+		long expire;
+		V value;
+
+		ExpireNode(long expire, V value) {
+			this.expire = expire;
+			this.value = value;
+		}
+	}
 }

+ 8 - 8
src/main/java/org/ssssssss/magicapi/config/MagicDynamicDataSource.java

@@ -112,6 +112,14 @@ public class MagicDynamicDataSource {
 		return dataSourceNode;
 	}
 
+	public void setDefault(DataSource dataSource) {
+		put(dataSource);
+	}
+
+	public void add(String dataSourceKey, DataSource dataSource) {
+		put(dataSourceKey, dataSource);
+	}
+
 	public static class DataSourceNode {
 
 		private final String id;
@@ -183,12 +191,4 @@ public class MagicDynamicDataSource {
 			return dialect;
 		}
 	}
-
-	public void setDefault(DataSource dataSource) {
-		put(dataSource);
-	}
-
-	public void add(String dataSourceKey, DataSource dataSource) {
-		put(dataSourceKey, dataSource);
-	}
 }

+ 3 - 7
src/main/java/org/ssssssss/magicapi/config/MagicFunctionManager.java

@@ -22,16 +22,12 @@ import java.util.stream.Collectors;
 
 public class MagicFunctionManager {
 
+	private static final Logger logger = LoggerFactory.getLogger(MagicFunctionManager.class);
 	private static Map<String, FunctionInfo> mappings = new ConcurrentHashMap<>();
-
 	private GroupServiceProvider groupServiceProvider;
-
 	private FunctionServiceProvider functionServiceProvider;
-
 	private TreeNode<Group> groups;
 
-	private static final Logger logger = LoggerFactory.getLogger(MagicFunctionManager.class);
-
 	public MagicFunctionManager(GroupServiceProvider groupServiceProvider, FunctionServiceProvider functionServiceProvider) {
 		this.groupServiceProvider = groupServiceProvider;
 		this.functionServiceProvider = functionServiceProvider;
@@ -110,7 +106,7 @@ public class MagicFunctionManager {
 		FunctionInfo oldFunctionInfo = mappings.get(functionInfo.getId());
 		if (oldFunctionInfo != null) {
 			// 完全一致时不用注册
-			if(functionInfo.equals(oldFunctionInfo)){
+			if (functionInfo.equals(oldFunctionInfo)) {
 				return;
 			}
 			// 如果路径不一致,则需要取消注册
@@ -126,7 +122,7 @@ public class MagicFunctionManager {
 		logger.info("注册函数:[{}:{}]", functionInfo.getName(), path);
 	}
 
-	public Collection<FunctionInfo> getFunctionInfos(){
+	public Collection<FunctionInfo> getFunctionInfos() {
 		return mappings.values();
 	}
 

+ 14 - 14
src/main/java/org/ssssssss/magicapi/context/CookieContext.java

@@ -7,21 +7,21 @@ import java.util.HashMap;
 /**
  * Cookie Context 用于脚本中获取cookie信息
  */
-public class CookieContext extends HashMap<String,String> {
+public class CookieContext extends HashMap<String, String> {
 
-    private final Cookie[] cookies;
+	private final Cookie[] cookies;
 
-    public CookieContext(HttpServletRequest request){
-        this.cookies = request.getCookies();
-    }
+	public CookieContext(HttpServletRequest request) {
+		this.cookies = request.getCookies();
+	}
 
-    @Override
-    public String get(Object key) {
-        for (Cookie cookie : cookies) {
-            if (cookie.getName().equalsIgnoreCase("" + key)) {
-                return cookie.getValue();
-            }
-        }
-        return null;
-    }
+	@Override
+	public String get(Object key) {
+		for (Cookie cookie : cookies) {
+			if (cookie.getName().equalsIgnoreCase("" + key)) {
+				return cookie.getValue();
+			}
+		}
+		return null;
+	}
 }

+ 8 - 8
src/main/java/org/ssssssss/magicapi/context/HeaderContext.java

@@ -8,14 +8,14 @@ import java.util.Map;
  */
 public class HeaderContext extends HashMap<String, Object> {
 
-    private final Map<String, Object> headers;
+	private final Map<String, Object> headers;
 
-    public HeaderContext(Map<String, Object> headers) {
-        this.headers = headers;
-    }
+	public HeaderContext(Map<String, Object> headers) {
+		this.headers = headers;
+	}
 
-    @Override
-    public Object get(Object key) {
-        return headers.get(key);
-    }
+	@Override
+	public Object get(Object key) {
+		return headers.get(key);
+	}
 }

+ 7 - 7
src/main/java/org/ssssssss/magicapi/context/RequestContext.java

@@ -7,21 +7,21 @@ public class RequestContext {
 
 	private static final ThreadLocal<RequestAttribute> REQUEST_ATTRIBUTE_THREAD_LOCAL = new InheritableThreadLocal<>();
 
-	public static void setRequestAttribute(HttpServletRequest request,HttpServletResponse response){
+	public static void setRequestAttribute(HttpServletRequest request, HttpServletResponse response) {
 		REQUEST_ATTRIBUTE_THREAD_LOCAL.set(new RequestAttribute(request, response));
 	}
-	
-	public static HttpServletRequest getHttpServletRequest(){
+
+	public static HttpServletRequest getHttpServletRequest() {
 		RequestAttribute requestAttribute = REQUEST_ATTRIBUTE_THREAD_LOCAL.get();
-		return  requestAttribute == null ? null : requestAttribute.request;
+		return requestAttribute == null ? null : requestAttribute.request;
 	}
 
-	public static HttpServletResponse getHttpServletResponse(){
+	public static HttpServletResponse getHttpServletResponse() {
 		RequestAttribute requestAttribute = REQUEST_ATTRIBUTE_THREAD_LOCAL.get();
-		return  requestAttribute == null ? null : requestAttribute.response;
+		return requestAttribute == null ? null : requestAttribute.response;
 	}
 
-	public static void remove(){
+	public static void remove() {
 		REQUEST_ATTRIBUTE_THREAD_LOCAL.remove();
 	}
 

+ 15 - 15
src/main/java/org/ssssssss/magicapi/context/SessionContext.java

@@ -6,23 +6,23 @@ import java.util.HashMap;
 /**
  * Session Context 用于脚本中获取Session信息
  */
-public class SessionContext extends HashMap<String,Object> {
+public class SessionContext extends HashMap<String, Object> {
 
-    private final HttpSession session;
+	private final HttpSession session;
 
-    public SessionContext(HttpSession session){
-        this.session = session;
-    }
+	public SessionContext(HttpSession session) {
+		this.session = session;
+	}
 
-    @Override
-    public Object get(Object key) {
-        return session != null ? session.getAttribute(key.toString()) : null;
-    }
+	@Override
+	public Object get(Object key) {
+		return session != null ? session.getAttribute(key.toString()) : null;
+	}
 
-    @Override
-    public Object put(String key, Object value) {
-        Object oldValue = session.getAttribute(key);
-        session.setAttribute(key,value);
-        return oldValue;
-    }
+	@Override
+	public Object put(String key, Object value) {
+		Object oldValue = session.getAttribute(key);
+		session.setAttribute(key, value);
+		return oldValue;
+	}
 }

+ 1 - 1
src/main/java/org/ssssssss/magicapi/dialect/ClickhouseDialect.java

@@ -1,6 +1,6 @@
 package org.ssssssss.magicapi.dialect;
 
-public class ClickhouseDialect extends MySQLDialect{
+public class ClickhouseDialect extends MySQLDialect {
 
 	@Override
 	public boolean match(String jdbcUrl) {

+ 11 - 11
src/main/java/org/ssssssss/magicapi/dialect/DB2Dialect.java

@@ -4,16 +4,16 @@ package org.ssssssss.magicapi.dialect;
 import org.ssssssss.magicapi.modules.BoundSql;
 
 public class DB2Dialect implements Dialect {
-    @Override
-    public boolean match(String jdbcUrl) {
-        return jdbcUrl.contains(":db2:");
-    }
+	@Override
+	public boolean match(String jdbcUrl) {
+		return jdbcUrl.contains(":db2:");
+	}
 
-    @Override
-    public String getPageSql(String sql, BoundSql boundSql, long offset, long limit) {
-        boundSql.addParameter(offset + 1);
-        boundSql.addParameter(offset + limit);
-        return "SELECT * FROM (SELECT TMP_PAGE.*,ROWNUMBER() OVER() AS ROW_ID FROM ( " + sql +
-                " ) AS TMP_PAGE) TMP_PAGE WHERE ROW_ID BETWEEN ? AND ?";
-    }
+	@Override
+	public String getPageSql(String sql, BoundSql boundSql, long offset, long limit) {
+		boundSql.addParameter(offset + 1);
+		boundSql.addParameter(offset + limit);
+		return "SELECT * FROM (SELECT TMP_PAGE.*,ROWNUMBER() OVER() AS ROW_ID FROM ( " + sql +
+				" ) AS TMP_PAGE) TMP_PAGE WHERE ROW_ID BETWEEN ? AND ?";
+	}
 }

+ 14 - 14
src/main/java/org/ssssssss/magicapi/dialect/Dialect.java

@@ -5,20 +5,20 @@ import org.ssssssss.magicapi.modules.BoundSql;
 
 public interface Dialect {
 
-    /**
-     * 根据jdbcUrl匹配
-     */
-    boolean match(String jdbcUrl);
+	/**
+	 * 根据jdbcUrl匹配
+	 */
+	boolean match(String jdbcUrl);
 
-    /**
-     * 获取查总数的sql
-     */
-    default String getCountSql(String sql) {
-        return "select count(1) from (" + sql + ") count_";
-    }
+	/**
+	 * 获取查总数的sql
+	 */
+	default String getCountSql(String sql) {
+		return "select count(1) from (" + sql + ") count_";
+	}
 
-    /**
-     * 获取分页sql
-     */
-    String getPageSql(String sql, BoundSql boundSql, long offset, long limit);
+	/**
+	 * 获取分页sql
+	 */
+	String getPageSql(String sql, BoundSql boundSql, long offset, long limit);
 }

+ 12 - 12
src/main/java/org/ssssssss/magicapi/dialect/DmDialect.java

@@ -9,18 +9,18 @@ import org.ssssssss.magicapi.modules.BoundSql;
  **/
 public class DmDialect implements Dialect {
 
-    @Override
-    public boolean match(String jdbcUrl) {
-        return jdbcUrl.contains(":dm:");
-    }
+	@Override
+	public boolean match(String jdbcUrl) {
+		return jdbcUrl.contains(":dm:");
+	}
 
-    @Override
-    public String getPageSql(String sql, BoundSql boundSql, long offset, long limit) {
-        limit = (offset >= 1) ? (offset + limit) : limit;
-        boundSql.addParameter(limit);
-        boundSql.addParameter(offset);
-        return "SELECT * FROM ( SELECT TMP.*, ROWNUM ROW_ID FROM ( " +
-                sql + " ) TMP WHERE ROWNUM <= ? ) WHERE ROW_ID > ?";
-    }
+	@Override
+	public String getPageSql(String sql, BoundSql boundSql, long offset, long limit) {
+		limit = (offset >= 1) ? (offset + limit) : limit;
+		boundSql.addParameter(limit);
+		boundSql.addParameter(offset);
+		return "SELECT * FROM ( SELECT TMP.*, ROWNUM ROW_ID FROM ( " +
+				sql + " ) TMP WHERE ROWNUM <= ? ) WHERE ROW_ID > ?";
+	}
 }
 

+ 10 - 10
src/main/java/org/ssssssss/magicapi/dialect/MySQLDialect.java

@@ -5,15 +5,15 @@ import org.ssssssss.magicapi.modules.BoundSql;
 
 public class MySQLDialect implements Dialect {
 
-    @Override
-    public boolean match(String jdbcUrl) {
-        return jdbcUrl.contains(":mysql:") || jdbcUrl.contains(":mariadb:") || jdbcUrl.contains(":cobar:");
-    }
+	@Override
+	public boolean match(String jdbcUrl) {
+		return jdbcUrl.contains(":mysql:") || jdbcUrl.contains(":mariadb:") || jdbcUrl.contains(":cobar:");
+	}
 
-    @Override
-    public String getPageSql(String sql, BoundSql boundSql, long offset, long limit) {
-        boundSql.addParameter(offset);
-        boundSql.addParameter(limit);
-        return sql + " limit ?,?";
-    }
+	@Override
+	public String getPageSql(String sql, BoundSql boundSql, long offset, long limit) {
+		boundSql.addParameter(offset);
+		boundSql.addParameter(limit);
+		return sql + " limit ?,?";
+	}
 }

+ 12 - 12
src/main/java/org/ssssssss/magicapi/dialect/OracleDialect.java

@@ -5,17 +5,17 @@ import org.ssssssss.magicapi.modules.BoundSql;
 
 public class OracleDialect implements Dialect {
 
-    @Override
-    public boolean match(String jdbcUrl) {
-        return jdbcUrl.contains(":oracle:");
-    }
+	@Override
+	public boolean match(String jdbcUrl) {
+		return jdbcUrl.contains(":oracle:");
+	}
 
-    @Override
-    public String getPageSql(String sql, BoundSql boundSql, long offset, long limit) {
-        limit = (offset >= 1) ? (offset + limit) : limit;
-        boundSql.addParameter(limit);
-        boundSql.addParameter(offset);
-        return "SELECT * FROM ( SELECT TMP.*, ROWNUM ROW_ID FROM ( " +
-                sql + " ) TMP WHERE ROWNUM <= ? ) WHERE ROW_ID > ?";
-    }
+	@Override
+	public String getPageSql(String sql, BoundSql boundSql, long offset, long limit) {
+		limit = (offset >= 1) ? (offset + limit) : limit;
+		boundSql.addParameter(limit);
+		boundSql.addParameter(offset);
+		return "SELECT * FROM ( SELECT TMP.*, ROWNUM ROW_ID FROM ( " +
+				sql + " ) TMP WHERE ROWNUM <= ? ) WHERE ROW_ID > ?";
+	}
 }

+ 10 - 10
src/main/java/org/ssssssss/magicapi/dialect/PostgreSQLDialect.java

@@ -4,15 +4,15 @@ package org.ssssssss.magicapi.dialect;
 import org.ssssssss.magicapi.modules.BoundSql;
 
 public class PostgreSQLDialect implements Dialect {
-    @Override
-    public boolean match(String jdbcUrl) {
-        return jdbcUrl.contains(":postgresql:");
-    }
+	@Override
+	public boolean match(String jdbcUrl) {
+		return jdbcUrl.contains(":postgresql:");
+	}
 
-    @Override
-    public String getPageSql(String sql, BoundSql boundSql, long offset, long limit) {
-        boundSql.addParameter(limit);
-        boundSql.addParameter(offset);
-        return sql + " limit ? offset ?";
-    }
+	@Override
+	public String getPageSql(String sql, BoundSql boundSql, long offset, long limit) {
+		boundSql.addParameter(limit);
+		boundSql.addParameter(offset);
+		return sql + " limit ? offset ?";
+	}
 }

+ 49 - 49
src/main/java/org/ssssssss/magicapi/dialect/SQLServer2005Dialect.java

@@ -4,58 +4,58 @@ import org.apache.commons.lang3.StringUtils;
 import org.ssssssss.magicapi.modules.BoundSql;
 
 public class SQLServer2005Dialect implements Dialect {
-    @Override
-    public boolean match(String jdbcUrl) {
-        return jdbcUrl.contains(":sqlserver:");
-    }
+	@Override
+	public boolean match(String jdbcUrl) {
+		return jdbcUrl.contains(":sqlserver:");
+	}
 
-    @Override
-    public String getPageSql(String sql, BoundSql boundSql, long offset, long limit) {
-        StringBuilder pagingBuilder = new StringBuilder();
-        String orderby = getOrderByPart(sql);
-        String distinctStr = "";
+	@Override
+	public String getPageSql(String sql, BoundSql boundSql, long offset, long limit) {
+		StringBuilder pagingBuilder = new StringBuilder();
+		String orderby = getOrderByPart(sql);
+		String distinctStr = "";
 
-        String loweredString = sql.toLowerCase();
-        String sqlPartString = sql;
-        if (loweredString.trim().startsWith("select")) {
-            int index = 6;
-            if (loweredString.startsWith("select distinct")) {
-                distinctStr = "DISTINCT ";
-                index = 15;
-            }
-            sqlPartString = sqlPartString.substring(index);
-        }
-        pagingBuilder.append(sqlPartString);
+		String loweredString = sql.toLowerCase();
+		String sqlPartString = sql;
+		if (loweredString.trim().startsWith("select")) {
+			int index = 6;
+			if (loweredString.startsWith("select distinct")) {
+				distinctStr = "DISTINCT ";
+				index = 15;
+			}
+			sqlPartString = sqlPartString.substring(index);
+		}
+		pagingBuilder.append(sqlPartString);
 
-        // if no ORDER BY is specified use fake ORDER BY field to avoid errors
-        if (StringUtils.isEmpty(orderby)) {
-            orderby = "ORDER BY CURRENT_TIMESTAMP";
-        }
+		// if no ORDER BY is specified use fake ORDER BY field to avoid errors
+		if (StringUtils.isEmpty(orderby)) {
+			orderby = "ORDER BY CURRENT_TIMESTAMP";
+		}
 
-        StringBuilder result = new StringBuilder();
-        result.append("WITH query AS (SELECT ")
-                .append(distinctStr)
-                .append("TOP 100 PERCENT ")
-                .append(" ROW_NUMBER() OVER (")
-                .append(orderby)
-                .append(") as __row_number__, ")
-                .append(pagingBuilder)
-                .append(") SELECT * FROM query WHERE __row_number__ BETWEEN ? AND ?")
-                .append(" ORDER BY __row_number__");
-        boundSql.addParameter(offset + 1);
-        boundSql.addParameter(offset + limit);
-        return result.toString();
-    }
+		StringBuilder result = new StringBuilder();
+		result.append("WITH query AS (SELECT ")
+				.append(distinctStr)
+				.append("TOP 100 PERCENT ")
+				.append(" ROW_NUMBER() OVER (")
+				.append(orderby)
+				.append(") as __row_number__, ")
+				.append(pagingBuilder)
+				.append(") SELECT * FROM query WHERE __row_number__ BETWEEN ? AND ?")
+				.append(" ORDER BY __row_number__");
+		boundSql.addParameter(offset + 1);
+		boundSql.addParameter(offset + limit);
+		return result.toString();
+	}
 
-    private String getOrderByPart(String sql) {
-        String loweredString = sql.toLowerCase();
-        int orderByIndex = loweredString.indexOf("order by");
-        if (orderByIndex != -1) {
-            // if we find a new "order by" then we need to ignore
-            // the previous one since it was probably used for a subquery
-            return sql.substring(orderByIndex);
-        } else {
-            return "";
-        }
-    }
+	private String getOrderByPart(String sql) {
+		String loweredString = sql.toLowerCase();
+		int orderByIndex = loweredString.indexOf("order by");
+		if (orderByIndex != -1) {
+			// if we find a new "order by" then we need to ignore
+			// the previous one since it was probably used for a subquery
+			return sql.substring(orderByIndex);
+		} else {
+			return "";
+		}
+	}
 }

+ 10 - 10
src/main/java/org/ssssssss/magicapi/dialect/SQLServerDialect.java

@@ -4,15 +4,15 @@ package org.ssssssss.magicapi.dialect;
 import org.ssssssss.magicapi.modules.BoundSql;
 
 public class SQLServerDialect implements Dialect {
-    @Override
-    public boolean match(String jdbcUrl) {
-        return jdbcUrl.contains(":sqlserver2012:");
-    }
+	@Override
+	public boolean match(String jdbcUrl) {
+		return jdbcUrl.contains(":sqlserver2012:");
+	}
 
-    @Override
-    public String getPageSql(String sql, BoundSql boundSql, long offset, long limit) {
-        boundSql.addParameter(offset);
-        boundSql.addParameter(limit);
-        return sql + " OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
-    }
+	@Override
+	public String getPageSql(String sql, BoundSql boundSql, long offset, long limit) {
+		boundSql.addParameter(offset);
+		boundSql.addParameter(limit);
+		return sql + " OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
+	}
 }

+ 7 - 7
src/main/java/org/ssssssss/magicapi/exception/MagicAPIException.java

@@ -1,12 +1,12 @@
 package org.ssssssss.magicapi.exception;
 
-public class MagicAPIException extends RuntimeException{
+public class MagicAPIException extends RuntimeException {
 
-    public MagicAPIException(String message) {
-        super(message);
-    }
+	public MagicAPIException(String message) {
+		super(message);
+	}
 
-    public MagicAPIException(String message, Throwable cause) {
-        super(message, cause);
-    }
+	public MagicAPIException(String message, Throwable cause) {
+		super(message, cause);
+	}
 }

+ 1 - 1
src/main/java/org/ssssssss/magicapi/exception/MagicLoginException.java

@@ -1,6 +1,6 @@
 package org.ssssssss.magicapi.exception;
 
-public class MagicLoginException extends Exception{
+public class MagicLoginException extends Exception {
 
 	public MagicLoginException(String message) {
 		super(message);

+ 1 - 1
src/main/java/org/ssssssss/magicapi/exception/MagicServiceException.java

@@ -1,6 +1,6 @@
 package org.ssssssss.magicapi.exception;
 
-public class MagicServiceException extends RuntimeException{
+public class MagicServiceException extends RuntimeException {
 
 	public MagicServiceException(String message) {
 		super(message);

+ 2 - 2
src/main/java/org/ssssssss/magicapi/logging/Log4j2LoggerContext.java

@@ -18,7 +18,7 @@ import java.nio.charset.StandardCharsets;
 /**
  * 对接Log4j2
  */
-public class Log4j2LoggerContext implements MagicLoggerContext{
+public class Log4j2LoggerContext implements MagicLoggerContext {
 
 	@Override
 	public void generateAppender() {
@@ -49,7 +49,7 @@ public class Log4j2LoggerContext implements MagicLoggerContext{
 			logInfo.setLevel(event.getLevel().name().toLowerCase());
 			logInfo.setMessage(event.getMessage().getFormattedMessage());
 			ThrowableProxy throwableProxy = event.getThrownProxy();
-			if(throwableProxy != null){
+			if (throwableProxy != null) {
 				logInfo.setThrowable(throwableProxy.getThrowable());
 			}
 			MagicLoggerContext.println(logInfo);

+ 34 - 33
src/main/java/org/ssssssss/magicapi/logging/Log4jLoggerContext.java

@@ -12,37 +12,38 @@ import org.apache.log4j.spi.ThrowableInformation;
  * 对接Log4j
  */
 public class Log4jLoggerContext implements MagicLoggerContext {
-    @Override
-    public void generateAppender() {
-        RootLogger logger = (RootLogger) LogManager.getRootLogger();
-        PatternLayout patternLayout = new PatternLayout("%d %p [%c] - %m%n");
-        MagicLog4jAppender magicLog4jAppender = new MagicLog4jAppender();
-        magicLog4jAppender.setLayout(patternLayout);
-        logger.addAppender(magicLog4jAppender);
-    }
-     static class MagicLog4jAppender extends AppenderSkeleton {
-
-
-         @Override
-         protected void append(LoggingEvent event) {
-             LogInfo logInfo = new LogInfo();
-             logInfo.setLevel(event.getLevel().toString().toLowerCase());
-             logInfo.setMessage(String.valueOf(event.getMessage()));
-             ThrowableInformation throwableInformation = event.getThrowableInformation();
-             if (throwableInformation != null) {
-                 logInfo.setThrowable(throwableInformation.getThrowable());
-            }
-            MagicLoggerContext.println(logInfo);
-        }
-
-        @Override
-        public void close() {
-
-        }
-
-        @Override
-        public boolean requiresLayout() {
-            return false;
-        }
-    }
+	@Override
+	public void generateAppender() {
+		RootLogger logger = (RootLogger) LogManager.getRootLogger();
+		PatternLayout patternLayout = new PatternLayout("%d %p [%c] - %m%n");
+		MagicLog4jAppender magicLog4jAppender = new MagicLog4jAppender();
+		magicLog4jAppender.setLayout(patternLayout);
+		logger.addAppender(magicLog4jAppender);
+	}
+
+	static class MagicLog4jAppender extends AppenderSkeleton {
+
+
+		@Override
+		protected void append(LoggingEvent event) {
+			LogInfo logInfo = new LogInfo();
+			logInfo.setLevel(event.getLevel().toString().toLowerCase());
+			logInfo.setMessage(String.valueOf(event.getMessage()));
+			ThrowableInformation throwableInformation = event.getThrowableInformation();
+			if (throwableInformation != null) {
+				logInfo.setThrowable(throwableInformation.getThrowable());
+			}
+			MagicLoggerContext.println(logInfo);
+		}
+
+		@Override
+		public void close() {
+
+		}
+
+		@Override
+		public boolean requiresLayout() {
+			return false;
+		}
+	}
 }

+ 3 - 3
src/main/java/org/ssssssss/magicapi/logging/LogInfo.java

@@ -45,12 +45,12 @@ public class LogInfo {
 	}
 
 	public void setThrowable(Throwable throwable) {
-		if(throwable != null){
+		if (throwable != null) {
 			try (StringWriter writer = new StringWriter();
-				PrintWriter printWriter = new PrintWriter(writer)){
+				 PrintWriter printWriter = new PrintWriter(writer)) {
 				throwable.printStackTrace(printWriter);
 				this.throwable = writer.toString();
-			} catch (IOException ignored){
+			} catch (IOException ignored) {
 
 			}
 		}

+ 1 - 1
src/main/java/org/ssssssss/magicapi/logging/LogbackLoggerContext.java

@@ -10,7 +10,7 @@ import org.slf4j.LoggerFactory;
 /**
  * 对接Logback
  */
-public class LogbackLoggerContext implements MagicLoggerContext{
+public class LogbackLoggerContext implements MagicLoggerContext {
 
 	@Override
 	public void generateAppender() {

+ 4 - 4
src/main/java/org/ssssssss/magicapi/logging/LoggerManager.java

@@ -18,16 +18,16 @@ public class LoggerManager {
 		ILoggerFactory loggerFactory = LoggerFactory.getILoggerFactory();
 		String loggerFactoryClassName = loggerFactory.getClass().getName();
 		MagicLoggerContext magicLoggerContext = null;
-		if ("ch.qos.logback.classic.LoggerContext".equalsIgnoreCase(loggerFactoryClassName)) {	//logback
+		if ("ch.qos.logback.classic.LoggerContext".equalsIgnoreCase(loggerFactoryClassName)) {    //logback
 			magicLoggerContext = new LogbackLoggerContext();
-		}else if("org.apache.logging.slf4j.Log4jLoggerFactory".equalsIgnoreCase(loggerFactoryClassName)){	//log4j2
+		} else if ("org.apache.logging.slf4j.Log4jLoggerFactory".equalsIgnoreCase(loggerFactoryClassName)) {    //log4j2
 			magicLoggerContext = new Log4j2LoggerContext();
-		}else if ("org.slf4j.impl.Log4jLoggerFactory".equalsIgnoreCase(loggerFactoryClassName)) {	//log4j 1
+		} else if ("org.slf4j.impl.Log4jLoggerFactory".equalsIgnoreCase(loggerFactoryClassName)) {    //log4j 1
 			magicLoggerContext = new Log4jLoggerContext();
 		}
 		if (magicLoggerContext == null) {
 			logger.error("无法识别LoggerContext:{}", loggerFactoryClassName);
-		}else{
+		} else {
 			magicLoggerContext.generateAppender();
 		}
 		return magicLoggerContext;

+ 14 - 11
src/main/java/org/ssssssss/magicapi/logging/MagicLoggerContext.java

@@ -18,22 +18,24 @@ public interface MagicLoggerContext {
 
 	/**
 	 * 创建sseEmitter推送
-	 * @param sessionId	会话id
+	 *
+	 * @param sessionId 会话id
 	 */
-	static SseEmitter createEmitter(String sessionId){
+	static SseEmitter createEmitter(String sessionId) {
 		SseEmitter sseEmitter = new SseEmitter(0L);
-		emitterMap.put(sessionId,sseEmitter);
+		emitterMap.put(sessionId, sseEmitter);
 		return sseEmitter;
 	}
 
 	/**
 	 * 删除会话
-	 * @param sessionId	会话id
+	 *
+	 * @param sessionId 会话id
 	 */
-	static void remove(String sessionId){
+	static void remove(String sessionId) {
 		SseEmitter sseEmitter = emitterMap.remove(sessionId);
 		SESSION.remove();
-		if(sseEmitter != null){
+		if (sseEmitter != null) {
 			try {
 				sseEmitter.send(SseEmitter.event().data(sessionId).name("close"));
 			} catch (IOException ignored) {
@@ -44,20 +46,21 @@ public interface MagicLoggerContext {
 
 	/**
 	 * 打印日志
+	 *
 	 * @param logInfo 日志信息
 	 */
-	static void println(LogInfo logInfo){
+	static void println(LogInfo logInfo) {
 		// 获取SessionId
 		MagicScriptContext context = MagicScriptContext.get();
 		String sessionId;
-		if(context instanceof MagicScriptDebugContext){
+		if (context instanceof MagicScriptDebugContext) {
 			sessionId = ((MagicScriptDebugContext) context).getId();
-		}else{
+		} else {
 			sessionId = SESSION.get();
 		}
-		if(sessionId != null){
+		if (sessionId != null) {
 			SseEmitter sseEmitter = emitterMap.get(sessionId);
-			if(sseEmitter != null){
+			if (sseEmitter != null) {
 				try {
 					// 推送日志事件
 					sseEmitter.send(SseEmitter.event().data(logInfo).name("log"));

+ 1 - 1
src/main/java/org/ssssssss/magicapi/model/BaseDefinition.java

@@ -95,7 +95,7 @@ public class BaseDefinition {
 	}
 
 	public DataType getDataType() {
-		return dataType;
+		return dataType == null ? DataType.String : dataType;
 	}
 
 	public void setDataType(DataType dataType) {

+ 1 - 1
src/main/java/org/ssssssss/magicapi/model/Header.java

@@ -1,6 +1,6 @@
 package org.ssssssss.magicapi.model;
 
-public class Header extends BaseDefinition{
+public class Header extends BaseDefinition {
 
 	public Header() {
 	}

+ 92 - 92
src/main/java/org/ssssssss/magicapi/model/JsonBean.java

@@ -5,96 +5,96 @@ package org.ssssssss.magicapi.model;
  */
 public class JsonBean<T> {
 
-    /**
-     * 状态码
-     */
-    private int code = 1;
-
-    /**
-     * 状态说明
-     */
-    private String message = "success";
-
-    /**
-     * 实际数据
-     */
-    private T data;
-
-    /**
-     * 服务器时间
-     */
-    private long timestamp = System.currentTimeMillis();
-
-    private Integer executeTime;
-
-    public JsonBean(int code, String message) {
-        this.code = code;
-        this.message = message;
-    }
-
-    public JsonBean(int code, String message, T data, Integer executeTime) {
-        this(code, message, data);
-        this.executeTime = executeTime;
-    }
-
-    public JsonBean(int code, String message, T data) {
-        this.code = code;
-        this.message = message;
-        this.data = data;
-    }
-
-    public JsonBean() {
-    }
-
-    public JsonBean(JsonCode jsonCode) {
-        this(jsonCode, null);
-    }
-
-    public JsonBean(JsonCode jsonCode, T data) {
-        this(jsonCode.getCode(), jsonCode.getMessage(), data);
-    }
-
-    public JsonBean(T data) {
-        this.data = data;
-    }
-
-    public int getCode() {
-        return code;
-    }
-
-    public void setCode(int code) {
-        this.code = code;
-    }
-
-    public String getMessage() {
-        return message;
-    }
-
-    public void setMessage(String message) {
-        this.message = message;
-    }
-
-    public T getData() {
-        return data;
-    }
-
-    public void setData(T data) {
-        this.data = data;
-    }
-
-    public long getTimestamp() {
-        return timestamp;
-    }
-
-    public void setTimestamp(long timestamp) {
-        this.timestamp = timestamp;
-    }
-
-    public Integer getExecuteTime() {
-        return executeTime;
-    }
-
-    public void setExecuteTime(Integer executeTime) {
-        this.executeTime = executeTime;
-    }
+	/**
+	 * 状态码
+	 */
+	private int code = 1;
+
+	/**
+	 * 状态说明
+	 */
+	private String message = "success";
+
+	/**
+	 * 实际数据
+	 */
+	private T data;
+
+	/**
+	 * 服务器时间
+	 */
+	private long timestamp = System.currentTimeMillis();
+
+	private Integer executeTime;
+
+	public JsonBean(int code, String message) {
+		this.code = code;
+		this.message = message;
+	}
+
+	public JsonBean(int code, String message, T data, Integer executeTime) {
+		this(code, message, data);
+		this.executeTime = executeTime;
+	}
+
+	public JsonBean(int code, String message, T data) {
+		this.code = code;
+		this.message = message;
+		this.data = data;
+	}
+
+	public JsonBean() {
+	}
+
+	public JsonBean(JsonCode jsonCode) {
+		this(jsonCode, null);
+	}
+
+	public JsonBean(JsonCode jsonCode, T data) {
+		this(jsonCode.getCode(), jsonCode.getMessage(), data);
+	}
+
+	public JsonBean(T data) {
+		this.data = data;
+	}
+
+	public int getCode() {
+		return code;
+	}
+
+	public void setCode(int code) {
+		this.code = code;
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+
+	public T getData() {
+		return data;
+	}
+
+	public void setData(T data) {
+		this.data = data;
+	}
+
+	public long getTimestamp() {
+		return timestamp;
+	}
+
+	public void setTimestamp(long timestamp) {
+		this.timestamp = timestamp;
+	}
+
+	public Integer getExecuteTime() {
+		return executeTime;
+	}
+
+	public void setExecuteTime(Integer executeTime) {
+		this.executeTime = executeTime;
+	}
 }

+ 1 - 1
src/main/java/org/ssssssss/magicapi/model/MagicEntity.java

@@ -1,6 +1,6 @@
 package org.ssssssss.magicapi.model;
 
-public class MagicEntity implements Cloneable{
+public class MagicEntity implements Cloneable {
 
 	protected String id;
 

+ 20 - 20
src/main/java/org/ssssssss/magicapi/model/Page.java

@@ -5,31 +5,31 @@ package org.ssssssss.magicapi.model;
  */
 public class Page {
 
-    private long limit;
+	private long limit;
 
-    private long offset;
+	private long offset;
 
-    public Page() {
-    }
+	public Page() {
+	}
 
-    public Page(long limit, long offset) {
-        this.limit = limit;
-        this.offset = offset;
-    }
+	public Page(long limit, long offset) {
+		this.limit = limit;
+		this.offset = offset;
+	}
 
-    public long getLimit() {
-        return limit;
-    }
+	public long getLimit() {
+		return limit;
+	}
 
-    public void setLimit(long limit) {
-        this.limit = limit;
-    }
+	public void setLimit(long limit) {
+		this.limit = limit;
+	}
 
-    public long getOffset() {
-        return offset;
-    }
+	public long getOffset() {
+		return offset;
+	}
 
-    public void setOffset(long offset) {
-        this.offset = offset;
-    }
+	public void setOffset(long offset) {
+		this.offset = offset;
+	}
 }

+ 33 - 33
src/main/java/org/ssssssss/magicapi/model/PageResult.java

@@ -7,37 +7,37 @@ import java.util.List;
  */
 public class PageResult<T> {
 
-    /**
-     * 总条数
-     */
-    private long total;
-
-    /**
-     * 数据项
-     */
-    private List<T> list;
-
-    public PageResult(long total, List<T> list) {
-        this.total = total;
-        this.list = list;
-    }
-
-    public PageResult() {
-    }
-
-    public long getTotal() {
-        return total;
-    }
-
-    public void setTotal(long total) {
-        this.total = total;
-    }
-
-    public List<T> getList() {
-        return list;
-    }
-
-    public void setList(List<T> list) {
-        this.list = list;
-    }
+	/**
+	 * 总条数
+	 */
+	private long total;
+
+	/**
+	 * 数据项
+	 */
+	private List<T> list;
+
+	public PageResult(long total, List<T> list) {
+		this.total = total;
+		this.list = list;
+	}
+
+	public PageResult() {
+	}
+
+	public long getTotal() {
+		return total;
+	}
+
+	public void setTotal(long total) {
+		this.total = total;
+	}
+
+	public List<T> getList() {
+		return list;
+	}
+
+	public void setList(List<T> list) {
+		this.list = list;
+	}
 }

+ 1 - 1
src/main/java/org/ssssssss/magicapi/model/Parameter.java

@@ -1,6 +1,6 @@
 package org.ssssssss.magicapi.model;
 
-public class Parameter extends BaseDefinition{
+public class Parameter extends BaseDefinition {
 
 	public Parameter() {
 	}

+ 1 - 1
src/main/java/org/ssssssss/magicapi/model/Path.java

@@ -1,6 +1,6 @@
 package org.ssssssss.magicapi.model;
 
-public class Path extends BaseDefinition{
+public class Path extends BaseDefinition {
 
 	public Path() {
 	}

+ 3 - 5
src/main/java/org/ssssssss/magicapi/model/RequestEntity.java

@@ -20,13 +20,10 @@ public class RequestEntity {
 	private final Map<String, Object> parameters;
 
 	private final Map<String, Object> pathVariables;
-
+	private final Long requestTime = System.currentTimeMillis();
 	private MagicScriptContext magicScriptContext;
-
 	private Map<String, Object> headers;
 
-	private final Long requestTime = System.currentTimeMillis();
-
 	private RequestEntity() {
 		this.request = null;
 		this.response = null;
@@ -42,7 +39,8 @@ public class RequestEntity {
 		this.requestedFromTest = requestedFromTest;
 		this.parameters = parameters;
 		this.pathVariables = pathVariables;
-		this.apiInfo = MappingHandlerMapping.getMappingApiInfo(request);
+		ApiInfo info = MappingHandlerMapping.getMappingApiInfo(request);
+		this.apiInfo = info != null ? info.copy() : null;
 	}
 
 	public static RequestEntity empty() {

+ 2 - 2
src/main/java/org/ssssssss/magicapi/model/TreeNode.java

@@ -34,7 +34,7 @@ public class TreeNode<T> {
 	}
 
 
-	public TreeNode<T> findTreeNode(Function<T, Boolean> mapping){
+	public TreeNode<T> findTreeNode(Function<T, Boolean> mapping) {
 		return findTreeNode(this.children, mapping);
 	}
 
@@ -44,7 +44,7 @@ public class TreeNode<T> {
 				return child;
 			}
 			TreeNode<T> node = findTreeNode(child.children, mapping);
-			if(node != null){
+			if (node != null) {
 				return node;
 			}
 		}

+ 6 - 7
src/main/java/org/ssssssss/magicapi/modules/BoundSql.java

@@ -121,13 +121,6 @@ public class BoundSql {
 		this.sql = sql;
 	}
 
-	/**
-	 * 设置要执行的参数
-	 */
-	public void setParameters(List<Object> parameters) {
-		this.parameters = parameters;
-	}
-
 	/**
 	 * 获取要执行的参数
 	 */
@@ -135,6 +128,12 @@ public class BoundSql {
 		return parameters.toArray();
 	}
 
+	/**
+	 * 设置要执行的参数
+	 */
+	public void setParameters(List<Object> parameters) {
+		this.parameters = parameters;
+	}
 
 	/**
 	 * 获取缓存值

+ 7 - 16
src/main/java/org/ssssssss/magicapi/modules/HttpModule.java

@@ -14,31 +14,22 @@ import java.util.stream.Collectors;
 
 /**
  * http 模块
+ *
  * @since 1.1.0
  */
 public class HttpModule implements MagicModule {
 
 	private final RestTemplate template;
-
-	private String url;
-
 	private final HttpHeaders httpHeaders = new HttpHeaders();
-
-	private HttpMethod method = HttpMethod.GET;
-
-	private HttpEntity<Object> entity = null;
-
-	private Object requestBody;
-
 	private final Class<?> responseType = Object.class;
-
 	private final MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
-
 	private final MultiValueMap<String, Object> data = new LinkedMultiValueMap<>();
-
 	private final Map<String, ?> variables = new HashMap<>();
-
-	private ResponseEntity<Object>  responseEntity;
+	private String url;
+	private HttpMethod method = HttpMethod.GET;
+	private HttpEntity<Object> entity = null;
+	private Object requestBody;
+	private ResponseEntity<Object> responseEntity;
 
 	public HttpModule(RestTemplate template) {
 		this.template = template;
@@ -99,7 +90,7 @@ public class HttpModule implements MagicModule {
 	}
 
 	@Comment("自定义`HttpEntity`")
-	public HttpModule entity(@Comment("`HttpEntity`")HttpEntity<Object> entity) {
+	public HttpModule entity(@Comment("`HttpEntity`") HttpEntity<Object> entity) {
 		this.entity = entity;
 		return this;
 	}

+ 1 - 3
src/main/java/org/ssssssss/magicapi/modules/MongoModule.java

@@ -22,10 +22,8 @@ public class MongoModule extends HashMap<String, Object> implements MagicModule
 	private static final Logger logger = LoggerFactory.getLogger(MongoModule.class);
 
 	private final MongoTemplate mongoTemplate;
-
-	private JavaInvoker<Method> invoker;
-
 	private final JavaInvoker<Method> mongoDbFactoryInvoker;
+	private JavaInvoker<Method> invoker;
 
 	public MongoModule(MongoTemplate mongoTemplate) {
 		this.mongoTemplate = mongoTemplate;

+ 9 - 8
src/main/java/org/ssssssss/magicapi/modules/RedisModule.java

@@ -14,22 +14,22 @@ import java.util.List;
  */
 public class RedisModule implements MagicModule, DynamicMethod {
 
-	@Override
-	public String getModuleName() {
-		return "redis";
-	}
-
 	private final StringRedisTemplate redisTemplate;
 
 	public RedisModule(RedisConnectionFactory connectionFactory) {
 		this.redisTemplate = new StringRedisTemplate(connectionFactory);
 	}
 
+	@Override
+	public String getModuleName() {
+		return "redis";
+	}
+
 	/**
 	 * 序列化
 	 */
 	private byte[] serializer(Object value) {
-		if(value == null || value instanceof String){
+		if (value == null || value instanceof String) {
 			return redisTemplate.getStringSerializer().serialize((String) value);
 		}
 		return serializer(value.toString());
@@ -58,8 +58,9 @@ public class RedisModule implements MagicModule, DynamicMethod {
 
 	/**
 	 * 执行命令
-	 * @param methodName	命令名称
-	 * @param parameters	命令参数
+	 *
+	 * @param methodName 命令名称
+	 * @param parameters 命令参数
 	 */
 	@Override
 	public Object execute(String methodName, List<Object> parameters) {

+ 15 - 15
src/main/java/org/ssssssss/magicapi/modules/RequestModule.java

@@ -39,6 +39,21 @@ public class RequestModule {
 		return request == null ? null : request.getFiles(name);
 	}
 
+	/**
+	 * 获取原生HttpServletRequest对象
+	 */
+	public static HttpServletRequest get() {
+		return RequestContext.getHttpServletRequest();
+	}
+
+	private static MultipartRequest getMultipartHttpServletRequest() {
+		HttpServletRequest request = get();
+		if (request != null && request.getContentType() != null && request.getContentType().toLowerCase().startsWith("multipart/")) {
+			return WebUtils.getNativeRequest(request, MultipartRequest.class);
+		}
+		return null;
+	}
+
 	/**
 	 * 根据参数名获取参数值集合
 	 *
@@ -69,19 +84,4 @@ public class RequestModule {
 		return null;
 	}
 
-	/**
-	 * 获取原生HttpServletRequest对象
-	 */
-	public static HttpServletRequest get() {
-		return RequestContext.getHttpServletRequest();
-	}
-
-	private static MultipartRequest getMultipartHttpServletRequest() {
-		HttpServletRequest request = get();
-		if (request != null && request.getContentType() != null && request.getContentType().toLowerCase().startsWith("multipart/")) {
-			return WebUtils.getNativeRequest(request, MultipartRequest.class);
-		}
-		return null;
-	}
-
 }

+ 13 - 13
src/main/java/org/ssssssss/magicapi/modules/ResponseModule.java

@@ -29,6 +29,19 @@ public class ResponseModule {
 		this.resultProvider = resultProvider;
 	}
 
+	/**
+	 * 文件下载
+	 *
+	 * @param value    文件内容
+	 * @param filename 文件名
+	 */
+	@Comment("文件下载")
+	public static ResponseEntity<?> download(@Comment("文件内容,如`byte[]`") Object value, @Comment("文件名") String filename) throws UnsupportedEncodingException {
+		return ResponseEntity.ok().contentType(MediaType.APPLICATION_OCTET_STREAM)
+				.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + URLEncoder.encode(filename, "UTF-8"))
+				.body(value);
+	}
+
 	/**
 	 * 自行构建分页结果
 	 *
@@ -181,19 +194,6 @@ public class ResponseModule {
 		return ResponseEntity.ok().header(HttpHeaders.CONTENT_TYPE, mime).body(value);
 	}
 
-	/**
-	 * 文件下载
-	 *
-	 * @param value    文件内容
-	 * @param filename 文件名
-	 */
-	@Comment("文件下载")
-	public static ResponseEntity<?> download(@Comment("文件内容,如`byte[]`") Object value, @Comment("文件名") String filename) throws UnsupportedEncodingException {
-		return ResponseEntity.ok().contentType(MediaType.APPLICATION_OCTET_STREAM)
-				.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + URLEncoder.encode(filename, "UTF-8"))
-				.body(value);
-	}
-
 	public static class NullValue {
 		static final NullValue INSTANCE = new NullValue();
 	}

+ 13 - 13
src/main/java/org/ssssssss/magicapi/modules/SQLModule.java

@@ -109,35 +109,35 @@ public class SQLModule extends HashMap<String, SQLModule> implements MagicModule
 		this.sqlInterceptors = sqlInterceptors;
 	}
 
-	@UnableCall
-	public void setSqlCache(SqlCache sqlCache) {
-		this.sqlCache = sqlCache;
-	}
-
 	private void setDataSourceNode(DataSourceNode dataSourceNode) {
 		this.dataSourceNode = dataSourceNode;
 	}
 
-	private void setCacheName(String cacheName) {
-		this.cacheName = cacheName;
-	}
-
-	private void setTtl(long ttl) {
-		this.ttl = ttl;
-	}
-
 	protected String getCacheName() {
 		return cacheName;
 	}
 
+	private void setCacheName(String cacheName) {
+		this.cacheName = cacheName;
+	}
+
 	protected long getTtl() {
 		return ttl;
 	}
 
+	private void setTtl(long ttl) {
+		this.ttl = ttl;
+	}
+
 	protected SqlCache getSqlCache() {
 		return sqlCache;
 	}
 
+	@UnableCall
+	public void setSqlCache(SqlCache sqlCache) {
+		this.sqlCache = sqlCache;
+	}
+
 	@UnableCall
 	private SQLModule cloneSQLModule() {
 		SQLModule sqlModule = new SQLModule();

+ 3 - 5
src/main/java/org/ssssssss/magicapi/modules/Transaction.java

@@ -11,12 +11,10 @@ import org.ssssssss.script.annotation.Comment;
  */
 public class Transaction {
 
+	private static final TransactionDefinition TRANSACTION_DEFINITION = new DefaultTransactionDefinition();
 	private final DataSourceTransactionManager dataSourceTransactionManager;
-
 	private final TransactionStatus transactionStatus;
 
-	private static final TransactionDefinition TRANSACTION_DEFINITION = new DefaultTransactionDefinition();
-
 	public Transaction(DataSourceTransactionManager dataSourceTransactionManager) {
 		this.dataSourceTransactionManager = dataSourceTransactionManager;
 		this.transactionStatus = dataSourceTransactionManager.getTransaction(TRANSACTION_DEFINITION);
@@ -26,7 +24,7 @@ public class Transaction {
 	 * 回滚事务
 	 */
 	@Comment("回滚事务")
-	public void rollback(){
+	public void rollback() {
 		this.dataSourceTransactionManager.rollback(this.transactionStatus);
 	}
 
@@ -34,7 +32,7 @@ public class Transaction {
 	 * 提交事务
 	 */
 	@Comment("提交事务")
-	public void commit(){
+	public void commit() {
 		this.dataSourceTransactionManager.commit(this.transactionStatus);
 	}
 }

+ 3 - 3
src/main/java/org/ssssssss/magicapi/modules/table/NamedTable.java

@@ -104,7 +104,7 @@ public class NamedTable {
 	}
 
 	@Comment("拼接`group by`")
-	public NamedTable groupBy(@Comment("要分组的列") String ... columns) {
+	public NamedTable groupBy(@Comment("要分组的列") String... columns) {
 		this.groups.addAll(Arrays.asList(columns));
 		return this;
 	}
@@ -196,11 +196,11 @@ public class NamedTable {
 			builder.append(where.getSql());
 			params.addAll(where.getParams());
 		}
-		if(!orders.isEmpty()){
+		if (!orders.isEmpty()) {
 			builder.append(" order by ");
 			builder.append(String.join(",", orders));
 		}
-		if(!groups.isEmpty()){
+		if (!groups.isEmpty()) {
 			builder.append(" group by ");
 			builder.append(String.join(",", groups));
 		}

+ 31 - 31
src/main/java/org/ssssssss/magicapi/modules/table/Where.java

@@ -51,16 +51,16 @@ public class Where {
 			if ("and".equalsIgnoreCase(token) || "or".equalsIgnoreCase(token)) {
 				tokens.remove(size - 1);
 				size--;
-			}else {
+			} else {
 				break;
 			}
 		}
-		while(size > 0){
+		while (size > 0) {
 			String token = tokens.get(0);
 			if ("and".equalsIgnoreCase(token) || "or".equalsIgnoreCase(token)) {
 				tokens.remove(0);
 				size--;
-			}else {
+			} else {
 				break;
 			}
 		}
@@ -83,41 +83,41 @@ public class Where {
 	}
 
 	@Comment("过滤`null`的参数")
-	public Where notNull(){
+	public Where notNull() {
 		return notNull(true);
 	}
 
 	@Comment("过滤`blank`的参数")
-	public Where notBlank(){
+	public Where notBlank() {
 		return notBlank(true);
 	}
 
 	@Comment("是否过滤`null`的参数")
-	public Where notNull(boolean flag){
+	public Where notNull(boolean flag) {
 		this.notNull = flag;
 		return this;
 	}
 
 	@Comment("是否过滤`blank`的参数")
-	public Where notBlank(boolean flag){
+	public Where notBlank(boolean flag) {
 		this.notNull = flag;
 		return this;
 	}
 
-	boolean filterNullAndBlank(Object value){
-		if(notNull && value == null){
+	boolean filterNullAndBlank(Object value) {
+		if (notNull && value == null) {
 			return false;
 		}
 		return !notBlank || !StringUtils.isEmpty(Objects.toString(value, ""));
 	}
 
 	@Comment("等于`=`,如:`eq('name', '老王') ---> name = '老王'`")
-	public Where eq(@Comment("数据库中的列名") String column, @Comment("值")Object value) {
+	public Where eq(@Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		return eq(true, column, value);
 	}
 
 	@Comment("等于`=`,如:`eq('name', '老王') ---> name = '老王'`")
-	public Where eq(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值")Object value) {
+	public Where eq(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		if (condition && filterNullAndBlank(value)) {
 			tokens.add(column);
 			if (value == null) {
@@ -132,12 +132,12 @@ public class Where {
 	}
 
 	@Comment("不等于`<>`,如:`ne('name', '老王') ---> name <> '老王'`")
-	public Where ne(@Comment("数据库中的列名") String column, @Comment("值")Object value) {
+	public Where ne(@Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		return ne(true, column, value);
 	}
 
 	@Comment("不等于`<>`,如:`ne('name', '老王') ---> name <> '老王'`")
-	public Where ne(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值")Object value) {
+	public Where ne(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		if (condition && filterNullAndBlank(value)) {
 			append(column);
 			if (value == null) {
@@ -152,7 +152,7 @@ public class Where {
 	}
 
 	private Where append(boolean append, String column, String condition, Object value) {
-		if (append  && filterNullAndBlank(value)) {
+		if (append && filterNullAndBlank(value)) {
 			append(column);
 			append(condition);
 			appendAnd();
@@ -162,52 +162,52 @@ public class Where {
 	}
 
 	@Comment("小于`<`,如:`lt('age', 18) ---> age < 18")
-	public Where lt(@Comment("数据库中的列名") String column, @Comment("值")Object value) {
+	public Where lt(@Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		return lt(true, column, value);
 	}
 
 	@Comment("小于`<`,如:`lt('age', 18) ---> age < 18")
-	public Where lt(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值")Object value) {
+	public Where lt(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		return append(condition, column, " < ?", value);
 	}
 
 	@Comment("小于等于`<=`,如:`lte('age', 18) ---> age <= 18")
-	public Where lte(@Comment("数据库中的列名") String column, @Comment("值")Object value) {
+	public Where lte(@Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		return lte(true, column, value);
 	}
 
 	@Comment("小于等于`<=`,如:`lte('age', 18) ---> age <= 18")
-	public Where lte(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值")Object value) {
+	public Where lte(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		return append(condition, column, " <= ?", value);
 	}
 
 	@Comment("大于`>`,如:`get('age', 18) ---> age > 18")
-	public Where gt(@Comment("数据库中的列名") String column, @Comment("值")Object value) {
+	public Where gt(@Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		return gt(true, column, value);
 	}
 
 	@Comment("大于`>`,如:`get('age', 18) ---> age > 18")
-	public Where gt(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值")Object value) {
+	public Where gt(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		return append(condition, column, " > ?", value);
 	}
 
 	@Comment("大于等于`>=`,如:`get('age', 18) ---> age >= 18")
-	public Where gte(@Comment("数据库中的列名") String column, @Comment("值")Object value) {
+	public Where gte(@Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		return gte(true, column, value);
 	}
 
 	@Comment("大于等于`>=`,如:`get('age', 18) ---> age >= 18")
-	public Where gte(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值")Object value) {
+	public Where gte(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		return append(condition, column, " >= ?", value);
 	}
 
 	@Comment("`in`,如:`in('age', [1,2,3]) ---> age in (1,2,3)")
-	public Where in(@Comment("数据库中的列名") String column, @Comment("值")Object value) {
+	public Where in(@Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		return in(true, column, value);
 	}
 
 	@Comment("`in`,如:`in('age', [1,2,3]) ---> age in (1,2,3)")
-	public Where in(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值")Object value) {
+	public Where in(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		if (condition && value != null) {
 			List<Object> objects = StreamExtension.arrayLikeToList(value);
 			if (objects.size() > 0) {
@@ -223,12 +223,12 @@ public class Where {
 	}
 
 	@Comment("`not in`,如:`notIn('age', [1,2,3]) ---> age not in (1,2,3)")
-	public Where notIn(@Comment("数据库中的列名") String column, @Comment("值")Object value) {
+	public Where notIn(@Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		return notIn(true, column, value);
 	}
 
 	@Comment("`not in`,如:`notIn('age', [1,2,3]) ---> age not in (1,2,3)")
-	public Where notIn(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值")Object value) {
+	public Where notIn(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		if (condition && value != null) {
 			List<Object> objects = StreamExtension.arrayLikeToList(value);
 			if (objects.size() > 0) {
@@ -244,22 +244,22 @@ public class Where {
 	}
 
 	@Comment("`like`,如:`like('name', '%王%') ---> name like '%王%'")
-	public Where like(@Comment("数据库中的列名") String column, @Comment("值")Object value) {
+	public Where like(@Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		return like(true, column, value);
 	}
 
 	@Comment("`like`,如:`like('name', '%王%') ---> name like '%王%'")
-	public Where like(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值")Object value) {
+	public Where like(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		return append(condition, column, "like ?", value);
 	}
 
 	@Comment("`not like`,如:`notLike('name', '%王%') ---> name not like '%王%'")
-	public Where notLike(@Comment("数据库中的列名") String column, @Comment("值")Object value) {
+	public Where notLike(@Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		return notLike(true, column, value);
 	}
 
 	@Comment("`not like` ,如:`notLike('name', '%王%') ---> name not like '%王%'")
-	public Where notLike(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值")Object value) {
+	public Where notLike(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		return append(condition, column, "not like ?", value);
 	}
 
@@ -340,7 +340,7 @@ public class Where {
 	}
 
 	@Comment("拼接`group by`")
-	public Where groupBy(@Comment("要分组的列") String ... columns) {
+	public Where groupBy(@Comment("要分组的列") String... columns) {
 		this.namedTable.groupBy(columns);
 		return this;
 	}

+ 4 - 4
src/main/java/org/ssssssss/magicapi/provider/LanguageProvider.java

@@ -1,6 +1,5 @@
 package org.ssssssss.magicapi.provider;
 
-import javax.script.ScriptException;
 import java.util.Map;
 
 public interface LanguageProvider {
@@ -12,9 +11,10 @@ public interface LanguageProvider {
 
 	/**
 	 * 执行具体脚本
+	 *
 	 * @param languageName 语言类型
-	 * @param script	脚本内容
-	 * @param context	当前环境中的变量信息
+	 * @param script       脚本内容
+	 * @param context      当前环境中的变量信息
 	 */
-	Object execute(String languageName,String script, Map<String, Object> context) throws Exception;
+	Object execute(String languageName, String script, Map<String, Object> context) throws Exception;
 }

+ 8 - 6
src/main/java/org/ssssssss/magicapi/provider/MagicAPIService.java

@@ -11,17 +11,19 @@ public interface MagicAPIService extends MagicModule {
 
 	/**
 	 * 执行MagicAPI中的接口,原始内容,不包含code以及message信息
-	 * @param method	请求方法
-	 * @param path	请求路径
+	 *
+	 * @param method  请求方法
+	 * @param path    请求路径
 	 * @param context 请求上下文,主要给脚本中使用
 	 */
-	public Object execute(String method, String path, Map<String,Object> context);
+	public Object execute(String method, String path, Map<String, Object> context);
 
 	/**
 	 * 执行MagicAPI中的接口,带code和message信息
-	 * @param method	请求方法
-	 * @param path	请求路径
+	 *
+	 * @param method  请求方法
+	 * @param path    请求路径
 	 * @param context 请求上下文,主要给脚本中使用
 	 */
-	Object call(String method, String path, Map<String,Object> context);
+	Object call(String method, String path, Map<String, Object> context);
 }

+ 4 - 4
src/main/java/org/ssssssss/magicapi/provider/PageProvider.java

@@ -8,8 +8,8 @@ import org.ssssssss.script.MagicScriptContext;
  */
 public interface PageProvider {
 
-    /**
-     * 从请求中获取分页对象
-     */
-    public Page getPage(MagicScriptContext context);
+	/**
+	 * 从请求中获取分页对象
+	 */
+	public Page getPage(MagicScriptContext context);
 }

+ 5 - 13
src/main/java/org/ssssssss/magicapi/provider/StoreServiceProvider.java

@@ -13,23 +13,15 @@ import java.util.stream.Collectors;
 
 public abstract class StoreServiceProvider<T extends MagicEntity> {
 
-	String separatorWithCRLF = "\r\n================================\r\n";
-
-	String separatorWithLF = "\n================================\n";
-
+	private static Logger logger = LoggerFactory.getLogger(StoreServiceProvider.class);
 	protected Resource workspace;
-
 	protected Resource backupResource;
-
 	protected Map<String, Resource> mappings = new HashMap<>();
-
 	protected Map<String, T> infos = new HashMap<>();
-
 	protected GroupServiceProvider groupServiceProvider;
-
 	protected Class<T> clazz;
-
-	private static Logger logger = LoggerFactory.getLogger(StoreServiceProvider.class);
+	String separatorWithCRLF = "\r\n================================\r\n";
+	String separatorWithLF = "\n================================\n";
 
 	public StoreServiceProvider(Class<T> clazz, Resource workspace, GroupServiceProvider groupServiceProvider) {
 		this.clazz = clazz;
@@ -154,7 +146,7 @@ public abstract class StoreServiceProvider<T extends MagicEntity> {
 	/**
 	 * 重新加载分组
 	 */
-	public void reload(String groupId){
+	public void reload(String groupId) {
 		Resource dest = groupServiceProvider.getGroupResource(groupId);
 		dest.files(".ms").forEach(r -> {
 			T info = deserialize(r.read());
@@ -265,7 +257,7 @@ public abstract class StoreServiceProvider<T extends MagicEntity> {
 		String content = new String(data, StandardCharsets.UTF_8);
 		String separator = separatorWithCRLF;
 		int index = content.indexOf(separator);
-		if(index == -1){
+		if (index == -1) {
 			separator = separatorWithLF;
 			index = content.indexOf(separatorWithLF);
 		}

+ 8 - 12
src/main/java/org/ssssssss/magicapi/provider/impl/DefaultGroupServiceProvider.java

@@ -14,15 +14,11 @@ import java.util.stream.Collectors;
 
 public class DefaultGroupServiceProvider implements GroupServiceProvider {
 
-	private Map<String, Group> cacheApiTree = new HashMap<>();
-
-	private Map<String, Group> cacheFunctionTree = new HashMap<>();
-
 	private final Map<String, Resource> mappings = new HashMap<>();
-
 	private final Resource workspace;
-
 	private final String metabase = "group.json";
+	private Map<String, Group> cacheApiTree = new HashMap<>();
+	private Map<String, Group> cacheFunctionTree = new HashMap<>();
 
 	public DefaultGroupServiceProvider(Resource workspace) {
 		this.workspace = workspace;
@@ -30,7 +26,7 @@ public class DefaultGroupServiceProvider implements GroupServiceProvider {
 
 	@Override
 	public boolean insert(Group group) {
-		if(StringUtils.isBlank(group.getId())){
+		if (StringUtils.isBlank(group.getId())) {
 			group.setId(UUID.randomUUID().toString().replace("-", ""));
 		}
 		Resource directory = this.getGroupResource(group.getParentId());
@@ -53,9 +49,9 @@ public class DefaultGroupServiceProvider implements GroupServiceProvider {
 	public boolean update(Group group) {
 		Resource oldResource = this.getGroupResource(group.getId());
 		Resource newResource = this.getGroupResource(group.getParentId());
-		newResource = newResource == null ? getGroupResource(group.getType(),group.getName()) : newResource.getDirectory(group.getName());
+		newResource = newResource == null ? getGroupResource(group.getType(), group.getName()) : newResource.getDirectory(group.getName());
 		// 重命名或移动目录
-		if(oldResource.renameTo(newResource)){
+		if (oldResource.renameTo(newResource)) {
 			Resource target = newResource.getResource(metabase);
 			if (target.write(JsonUtils.toJsonString(group))) {
 				mappings.put(group.getId(), target);
@@ -74,8 +70,8 @@ public class DefaultGroupServiceProvider implements GroupServiceProvider {
 	@Override
 	public boolean exists(Group group) {
 		Resource resource = getGroupResource(group.getParentId());
-		if(resource == null){
-			return getGroupResource(group.getType(),group.getName()).exists();
+		if (resource == null) {
+			return getGroupResource(group.getType(), group.getName()).exists();
 		}
 		return resource.getDirectory(group.getName()).exists();
 	}
@@ -87,7 +83,7 @@ public class DefaultGroupServiceProvider implements GroupServiceProvider {
 
 	@Override
 	public Group readGroup(Resource resource) {
-		return JsonUtils.readValue(resource.read(),Group.class);
+		return JsonUtils.readValue(resource.read(), Group.class);
 	}
 
 	@Override

+ 42 - 42
src/main/java/org/ssssssss/magicapi/provider/impl/DefaultPageProvider.java

@@ -10,46 +10,46 @@ import org.ssssssss.script.MagicScriptContext;
  */
 public class DefaultPageProvider implements PageProvider {
 
-    /**
-     * page参数名
-     */
-    private final String pageName;
-
-    /**
-     * pageSize参数名
-     */
-    private final String pageSize;
-
-    /**
-     * 默认分页大小
-     */
-    private long defaultPageSize = 10;
-
-    /**
-     * 默认页数
-     */
-    private long defaultPage = 1;
-
-    public DefaultPageProvider(String pageName, String pageSize) {
-        this.pageName = pageName;
-        this.pageSize = pageSize;
-    }
-
-    public DefaultPageProvider(String pageName, String pageSize, long defaultPage, long defaultPageSize) {
-        this.pageName = pageName;
-        this.pageSize = pageSize;
-        this.defaultPageSize = defaultPageSize;
-        this.defaultPage = defaultPage;
-    }
-
-
-    @Override
-    public Page getPage(MagicScriptContext context) {
-        // 从Request中提取page以及pageSize
-        long page = NumberUtils.toLong(context.getString(this.pageName), this.defaultPage);
-        long pageSize = NumberUtils.toLong(context.getString(this.pageSize), this.defaultPageSize);
-        // 计算limit以及offset
-        return new Page(pageSize,(page - 1) * pageSize);
-
-    }
+	/**
+	 * page参数名
+	 */
+	private final String pageName;
+
+	/**
+	 * pageSize参数名
+	 */
+	private final String pageSize;
+
+	/**
+	 * 默认分页大小
+	 */
+	private long defaultPageSize = 10;
+
+	/**
+	 * 默认页数
+	 */
+	private long defaultPage = 1;
+
+	public DefaultPageProvider(String pageName, String pageSize) {
+		this.pageName = pageName;
+		this.pageSize = pageSize;
+	}
+
+	public DefaultPageProvider(String pageName, String pageSize, long defaultPage, long defaultPageSize) {
+		this.pageName = pageName;
+		this.pageSize = pageSize;
+		this.defaultPageSize = defaultPageSize;
+		this.defaultPage = defaultPage;
+	}
+
+
+	@Override
+	public Page getPage(MagicScriptContext context) {
+		// 从Request中提取page以及pageSize
+		long page = NumberUtils.toLong(context.getString(this.pageName), this.defaultPage);
+		long pageSize = NumberUtils.toLong(context.getString(this.pageSize), this.defaultPageSize);
+		// 计算limit以及offset
+		return new Page(pageSize, (page - 1) * pageSize);
+
+	}
 }

+ 3 - 2
src/main/java/org/ssssssss/magicapi/provider/impl/JSR223LanguageProvider.java

@@ -3,7 +3,8 @@ package org.ssssssss.magicapi.provider.impl;
 import org.ssssssss.magicapi.provider.LanguageProvider;
 import org.ssssssss.magicapi.script.ScriptManager;
 
-import javax.script.*;
+import javax.script.ScriptEngineManager;
+import javax.script.SimpleBindings;
 import java.util.Map;
 
 public class JSR223LanguageProvider implements LanguageProvider {
@@ -17,7 +18,7 @@ public class JSR223LanguageProvider implements LanguageProvider {
 
 	@Override
 	public Object execute(String languageName, String script, Map<String, Object> context) throws Exception {
-		return ScriptManager.compile(languageName,script).eval(new SimpleBindings(context));
+		return ScriptManager.compile(languageName, script).eval(new SimpleBindings(context));
 	}
 
 }

+ 38 - 38
src/main/java/org/ssssssss/magicapi/utils/Assert.java

@@ -8,43 +8,43 @@ import org.ssssssss.magicapi.exception.MagicAPIException;
  */
 public class Assert {
 
-    /**
-     * 断言值不能为空
-     */
-    public static void isNotNull(Object value, String message) {
-        if (value == null) {
-            throw new MagicAPIException(message);
-        }
-    }
-
-    /**
-     * 验证值必须是true
-     */
-    public static void isTrue(boolean value, String message) {
-        if (!value) {
-            throw new MagicAPIException(message);
-        }
-    }
-
-
-    /**
-     * 断言值不能为空字符串
-     */
-    public static void isNotBlank(String value, String message) {
-        if (StringUtils.isBlank(value)) {
-            throw new MagicAPIException(message);
-        }
-    }
-
-    /**
-     * 断言值不能为空字符串
-     */
-    public static void isNotBlanks(String message, String... values) {
-        if (values != null) {
-            for (String value : values) {
-                isNotBlank(value, message);
-            }
-        }
-    }
+	/**
+	 * 断言值不能为空
+	 */
+	public static void isNotNull(Object value, String message) {
+		if (value == null) {
+			throw new MagicAPIException(message);
+		}
+	}
+
+	/**
+	 * 验证值必须是true
+	 */
+	public static void isTrue(boolean value, String message) {
+		if (!value) {
+			throw new MagicAPIException(message);
+		}
+	}
+
+
+	/**
+	 * 断言值不能为空字符串
+	 */
+	public static void isNotBlank(String value, String message) {
+		if (StringUtils.isBlank(value)) {
+			throw new MagicAPIException(message);
+		}
+	}
+
+	/**
+	 * 断言值不能为空字符串
+	 */
+	public static void isNotBlanks(String message, String... values) {
+		if (values != null) {
+			for (String value : values) {
+				isNotBlank(value, message);
+			}
+		}
+	}
 
 }

+ 5 - 5
src/main/java/org/ssssssss/magicapi/utils/IoUtils.java

@@ -16,7 +16,7 @@ public class IoUtils {
 
 	private static Pattern FILE_NAME_PATTERN = Pattern.compile("^[\\u4e00-\\u9fa5_a-zA-Z0-9]+$");
 
-	public static boolean validateFileName(String name){
+	public static boolean validateFileName(String name) {
 		return FILE_NAME_PATTERN.matcher(name).matches();
 	}
 
@@ -59,7 +59,7 @@ public class IoUtils {
 		try {
 			return Files.readAllBytes(file.toPath());
 		} catch (IOException e) {
-			logger.error("读取文件失败",e);
+			logger.error("读取文件失败", e);
 			return new byte[0];
 		}
 	}
@@ -78,7 +78,7 @@ public class IoUtils {
 			}
 			return baos.toByteArray();
 		} catch (IOException e) {
-			logger.error("读取InputStream失败",e);
+			logger.error("读取InputStream失败", e);
 			return new byte[0];
 		}
 	}
@@ -97,7 +97,7 @@ public class IoUtils {
 			}
 			return result.toString();
 		} catch (IOException e) {
-			logger.error("读取InputStream失败",e);
+			logger.error("读取InputStream失败", e);
 			return "";
 		}
 	}
@@ -107,7 +107,7 @@ public class IoUtils {
 			Files.write(file.toPath(), bytes);
 			return true;
 		} catch (IOException e) {
-			logger.error("写文件失败",e);
+			logger.error("写文件失败", e);
 			return false;
 		}
 	}

+ 1 - 0
src/main/java/org/ssssssss/magicapi/utils/JsonUtils.java

@@ -55,6 +55,7 @@ public class JsonUtils {
 			return null;
 		}
 	}
+
 	public static <T> T readValue(byte[] bytes, JavaType javaType) {
 		try {
 			return mapper.readValue(bytes, javaType);

+ 24 - 24
src/main/java/org/ssssssss/magicapi/utils/MD5Utils.java

@@ -9,30 +9,30 @@ import java.security.MessageDigest;
  */
 public class MD5Utils {
 
-    private static final char[] HEX_CHARS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+	private static final char[] HEX_CHARS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
 
-    /**
-     * MD5加密
-     */
-    public static String encrypt(String value){
-        return encrypt(value.getBytes());
-    }
+	/**
+	 * MD5加密
+	 */
+	public static String encrypt(String value) {
+		return encrypt(value.getBytes());
+	}
 
-    /**
-     * MD5加密
-     */
-    public static String encrypt(byte[] value){
-        try {
-            byte[] bytes = MessageDigest.getInstance("MD5").digest(value);
-            char[] chars = new char[32];
-            for (int i = 0; i < chars.length; i = i + 2) {
-                byte b = bytes[i / 2];
-                chars[i] = HEX_CHARS[(b >>> 0x4) & 0xf];
-                chars[i + 1] = HEX_CHARS[b & 0xf];
-            }
-            return new String(chars);
-        } catch (Exception e) {
-            throw new MagicAPIException("md5 encrypt error",e);
-        }
-    }
+	/**
+	 * MD5加密
+	 */
+	public static String encrypt(byte[] value) {
+		try {
+			byte[] bytes = MessageDigest.getInstance("MD5").digest(value);
+			char[] chars = new char[32];
+			for (int i = 0; i < chars.length; i = i + 2) {
+				byte b = bytes[i / 2];
+				chars[i] = HEX_CHARS[(b >>> 0x4) & 0xf];
+				chars[i + 1] = HEX_CHARS[b & 0xf];
+			}
+			return new String(chars);
+		} catch (Exception e) {
+			throw new MagicAPIException("md5 encrypt error", e);
+		}
+	}
 }

+ 3 - 3
src/main/java/org/ssssssss/magicapi/utils/PatternUtils.java

@@ -8,11 +8,11 @@ public class PatternUtils {
 
 	private static final Map<String, Pattern> cachedPatterns = new ConcurrentHashMap<>();
 
-	public static boolean match(String content,String regex){
+	public static boolean match(String content, String regex) {
 		Pattern pattern = cachedPatterns.get(regex);
-		if(pattern == null){
+		if (pattern == null) {
 			pattern = Pattern.compile(regex);
-			cachedPatterns.put(regex,pattern);
+			cachedPatterns.put(regex, pattern);
 		}
 		return pattern.matcher(content).find();
 	}