mirror of
https://gitee.com/ssssssss-team/magic-api.git
synced 2026-06-08 18:03:23 +08:00
适配magic-script 1.8.0
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
package org.ssssssss.magicapi.elasticsearch;
|
||||
|
||||
import org.elasticsearch.client.RestClient;
|
||||
import org.ssssssss.magicapi.core.config.MagicModule;
|
||||
import org.ssssssss.magicapi.core.annotation.MagicModule;
|
||||
import org.ssssssss.script.annotation.Comment;
|
||||
|
||||
public class ElasticSearchModule implements MagicModule {
|
||||
@MagicModule("elasticsearch")
|
||||
public class ElasticSearchModule {
|
||||
|
||||
private static final String DOC = "_doc";
|
||||
|
||||
@@ -22,9 +23,4 @@ public class ElasticSearchModule implements MagicModule {
|
||||
public ElasticSearchIndex index(String indexName){
|
||||
return new ElasticSearchIndex(this.restClient, indexName, DOC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getModuleName() {
|
||||
return "elasticsearch";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,14 +9,15 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||
import org.ssssssss.magicapi.core.config.Constants;
|
||||
import org.ssssssss.magicapi.core.config.MagicModule;
|
||||
import org.ssssssss.magicapi.core.annotation.MagicModule;
|
||||
import org.ssssssss.script.convert.ClassImplicitConvert;
|
||||
import org.ssssssss.script.functions.DynamicAttribute;
|
||||
import org.ssssssss.script.reflection.JavaInvoker;
|
||||
import org.ssssssss.script.reflection.JavaReflection;
|
||||
import org.ssssssss.script.runtime.Variables;
|
||||
|
||||
import java.beans.Transient;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -24,7 +25,8 @@ import java.util.Map;
|
||||
*
|
||||
* @author mxd
|
||||
*/
|
||||
public class MongoModule extends HashMap<String, MongoModule.MongoDataBaseGetter> implements MagicModule, ClassImplicitConvert {
|
||||
@MagicModule("mongo")
|
||||
public class MongoModule implements ClassImplicitConvert, DynamicAttribute<MongoModule.MongoDataBaseGetter, MongoModule.MongoDataBaseGetter> {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(MongoModule.class);
|
||||
|
||||
@@ -54,23 +56,19 @@ public class MongoModule extends HashMap<String, MongoModule.MongoDataBaseGetter
|
||||
}
|
||||
|
||||
@Override
|
||||
public MongoDataBaseGetter get(Object databaseName) {
|
||||
@Transient
|
||||
public MongoDataBaseGetter getDynamicAttribute(String databaseName) {
|
||||
try {
|
||||
if (databaseName == null) {
|
||||
return null;
|
||||
}
|
||||
MongoDatabase database = (MongoDatabase) invoker.invoke0(factory, null, new Object[]{databaseName.toString()});
|
||||
MongoDatabase database = (MongoDatabase) invoker.invoke0(factory, null, new Object[]{databaseName});
|
||||
return new MongoDataBaseGetter(database);
|
||||
} catch (Throwable e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getModuleName() {
|
||||
return "mongo";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean support(Class<?> from, Class<?> to) {
|
||||
return Map.class.isAssignableFrom(from) && (Bson.class.isAssignableFrom(to));
|
||||
@@ -81,7 +79,7 @@ public class MongoModule extends HashMap<String, MongoModule.MongoDataBaseGetter
|
||||
return new Document((Map<String, Object>) source);
|
||||
}
|
||||
|
||||
public static class MongoDataBaseGetter extends HashMap<String, MongoCollection<Document>> {
|
||||
public static class MongoDataBaseGetter implements DynamicAttribute<MongoCollection<Document>, MongoCollection<Document>> {
|
||||
|
||||
MongoDatabase database;
|
||||
|
||||
@@ -90,8 +88,9 @@ public class MongoModule extends HashMap<String, MongoModule.MongoDataBaseGetter
|
||||
}
|
||||
|
||||
@Override
|
||||
public MongoCollection<Document> get(Object key) {
|
||||
return database.getCollection(key.toString());
|
||||
@Transient
|
||||
public MongoCollection<Document> getDynamicAttribute(String key) {
|
||||
return database.getCollection(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package org.ssssssss.magicapi.redis;
|
||||
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||
import org.springframework.data.redis.core.RedisCallback;
|
||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||
import org.ssssssss.magicapi.core.config.MagicModule;
|
||||
import org.ssssssss.magicapi.core.annotation.MagicModule;
|
||||
import org.ssssssss.script.functions.DynamicMethod;
|
||||
|
||||
import java.util.*;
|
||||
@@ -13,7 +13,8 @@ import java.util.*;
|
||||
*
|
||||
* @author mxd
|
||||
*/
|
||||
public class RedisModule implements MagicModule, DynamicMethod {
|
||||
@MagicModule("redis")
|
||||
public class RedisModule implements DynamicMethod {
|
||||
|
||||
private final StringRedisTemplate redisTemplate;
|
||||
|
||||
@@ -21,11 +22,6 @@ public class RedisModule implements MagicModule, DynamicMethod {
|
||||
this.redisTemplate = new StringRedisTemplate(connectionFactory);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getModuleName() {
|
||||
return "redis";
|
||||
}
|
||||
|
||||
/**
|
||||
* 序列化
|
||||
*/
|
||||
|
||||
@@ -17,7 +17,6 @@ import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.http.converter.HttpMessageConverter;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
@@ -34,6 +33,7 @@ import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry
|
||||
import org.ssssssss.magicapi.backup.service.MagicBackupService;
|
||||
import org.ssssssss.magicapi.backup.service.MagicDatabaseBackupService;
|
||||
import org.ssssssss.magicapi.backup.web.MagicBackupController;
|
||||
import org.ssssssss.magicapi.core.annotation.MagicModule;
|
||||
import org.ssssssss.magicapi.core.config.*;
|
||||
import org.ssssssss.magicapi.core.exception.MagicAPIException;
|
||||
import org.ssssssss.magicapi.core.handler.MagicCoordinationHandler;
|
||||
@@ -128,8 +128,6 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketCon
|
||||
|
||||
private final ObjectProvider<DataSourceEncryptProvider> dataSourceEncryptProvider;
|
||||
|
||||
private final Environment environment;
|
||||
|
||||
private final MagicCorsFilter magicCorsFilter = new MagicCorsFilter();
|
||||
|
||||
private final MagicAPIProperties properties;
|
||||
@@ -146,9 +144,6 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketCon
|
||||
@Lazy
|
||||
private RequestMappingHandlerMapping requestMappingHandlerMapping;
|
||||
|
||||
@Autowired(required = false)
|
||||
private MultipartResolver multipartResolver;
|
||||
|
||||
private DefaultAuthorizationInterceptor defaultAuthorizationInterceptor;
|
||||
|
||||
public MagicAPIAutoConfiguration(MagicAPIProperties properties,
|
||||
@@ -162,7 +157,6 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketCon
|
||||
ObjectProvider<DataSourceEncryptProvider> dataSourceEncryptProvider,
|
||||
ObjectProvider<List<MagicDynamicRegistry<? extends MagicEntity>>> magicDynamicRegistriesProvider,
|
||||
ObjectProvider<List<MagicResourceStorage<? extends MagicEntity>>> magicResourceStoragesProvider,
|
||||
Environment environment,
|
||||
ApplicationContext applicationContext
|
||||
) {
|
||||
this.properties = properties;
|
||||
@@ -176,7 +170,6 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketCon
|
||||
this.dataSourceEncryptProvider = dataSourceEncryptProvider;
|
||||
this.magicDynamicRegistriesProvider = magicDynamicRegistriesProvider;
|
||||
this.magicResourceStoragesProvider = magicResourceStoragesProvider;
|
||||
this.environment = environment;
|
||||
this.applicationContext = applicationContext;
|
||||
}
|
||||
|
||||
@@ -267,10 +260,7 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketCon
|
||||
/**
|
||||
* 注册模块、类型扩展
|
||||
*/
|
||||
private void setupMagicModules(ResultProvider resultProvider,
|
||||
List<MagicModule> magicModules,
|
||||
List<ExtensionMethod> extensionMethods,
|
||||
List<LanguageProvider> languageProviders) {
|
||||
private void setupMagicModules(List<ExtensionMethod> extensionMethods, List<LanguageProvider> languageProviders) {
|
||||
// 设置脚本import时 class加载策略
|
||||
MagicResourceLoader.setClassLoader((className) -> {
|
||||
try {
|
||||
@@ -301,15 +291,10 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketCon
|
||||
logger.info("注册模块:{} -> {}", "log", Logger.class);
|
||||
MagicResourceLoader.addModule("log", new DynamicModuleImport(Logger.class, context -> LoggerFactory.getLogger(Objects.toString(context.getScriptName(), "Unknown"))));
|
||||
List<String> importModules = properties.getAutoImportModuleList();
|
||||
logger.info("注册模块:{} -> {}", "env", EnvModule.class);
|
||||
MagicResourceLoader.addModule("env", new EnvModule(environment));
|
||||
logger.info("注册模块:{} -> {}", "request", RequestModule.class);
|
||||
MagicResourceLoader.addModule("request", new RequestModule(multipartResolver));
|
||||
logger.info("注册模块:{} -> {}", "response", ResponseModule.class);
|
||||
MagicResourceLoader.addModule("response", new ResponseModule(resultProvider));
|
||||
magicModules.forEach(module -> {
|
||||
logger.info("注册模块:{} -> {}", module.getModuleName(), module.getClass());
|
||||
MagicResourceLoader.addModule(module.getModuleName(), module);
|
||||
applicationContext.getBeansWithAnnotation(MagicModule.class).values().forEach(module -> {
|
||||
String moduleName = module.getClass().getAnnotation(MagicModule.class).value();
|
||||
logger.info("注册模块:{} -> {}", moduleName, module.getClass());
|
||||
MagicResourceLoader.addModule(moduleName, module);
|
||||
});
|
||||
MagicResourceLoader.getModuleNames().stream().filter(importModules::contains).forEach(moduleName -> {
|
||||
logger.info("自动导入模块:{}", moduleName);
|
||||
@@ -326,8 +311,7 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketCon
|
||||
}
|
||||
|
||||
@Bean
|
||||
public MagicConfiguration magicConfiguration(List<MagicModule> magicModules,
|
||||
List<LanguageProvider> languageProviders,
|
||||
public MagicConfiguration magicConfiguration(List<LanguageProvider> languageProviders,
|
||||
org.ssssssss.magicapi.core.resource.Resource magicResource,
|
||||
ResultProvider resultProvider,
|
||||
MagicResourceService magicResourceService,
|
||||
@@ -345,7 +329,7 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketCon
|
||||
Constants.RESPONSE_CODE_INVALID = responseCodeConfig.getInvalid();
|
||||
Constants.RESPONSE_CODE_EXCEPTION = responseCodeConfig.getException();
|
||||
// 设置模块和扩展方法
|
||||
setupMagicModules(resultProvider, magicModules, extensionMethodsProvider.getIfAvailable(Collections::emptyList), languageProviders);
|
||||
setupMagicModules(extensionMethodsProvider.getIfAvailable(Collections::emptyList), languageProviders);
|
||||
MagicConfiguration configuration = new MagicConfiguration();
|
||||
configuration.setMagicAPIService(magicAPIService);
|
||||
configuration.setMagicNotifyService(magicNotifyService);
|
||||
|
||||
@@ -71,12 +71,4 @@ public class MagicDynamicRegistryConfiguration {
|
||||
return new DataSourceMagicDynamicRegistry(dataSourceInfoMagicResourceStorage, magicDynamicDataSource);
|
||||
}
|
||||
|
||||
/**
|
||||
* 注入结果构建方法
|
||||
*/
|
||||
@Bean
|
||||
@ConditionalOnMissingBean(ResultProvider.class)
|
||||
public ResultProvider resultProvider() {
|
||||
return new DefaultResultProvider(properties.getResponse());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,12 +8,15 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.converter.StringHttpMessageConverter;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import org.springframework.web.multipart.MultipartResolver;
|
||||
import org.ssssssss.magicapi.core.config.Cache;
|
||||
import org.ssssssss.magicapi.core.config.MagicAPIProperties;
|
||||
import org.ssssssss.magicapi.core.config.Page;
|
||||
import org.ssssssss.magicapi.core.interceptor.DefaultResultProvider;
|
||||
import org.ssssssss.magicapi.core.interceptor.ResultProvider;
|
||||
import org.ssssssss.magicapi.core.model.Options;
|
||||
import org.ssssssss.magicapi.datasource.model.MagicDynamicDataSource;
|
||||
@@ -31,6 +34,9 @@ import org.ssssssss.magicapi.modules.db.provider.ColumnMapperProvider;
|
||||
import org.ssssssss.magicapi.modules.db.provider.DefaultPageProvider;
|
||||
import org.ssssssss.magicapi.modules.db.provider.PageProvider;
|
||||
import org.ssssssss.magicapi.modules.http.HttpModule;
|
||||
import org.ssssssss.magicapi.modules.servlet.RequestModule;
|
||||
import org.ssssssss.magicapi.modules.servlet.ResponseModule;
|
||||
import org.ssssssss.magicapi.modules.spring.EnvModule;
|
||||
import org.ssssssss.script.MagicResourceLoader;
|
||||
import org.ssssssss.script.functions.DynamicModuleImport;
|
||||
|
||||
@@ -67,15 +73,23 @@ public class MagicModuleConfiguration {
|
||||
*/
|
||||
private final ObjectProvider<List<ColumnMapperProvider>> columnMapperProvidersProvider;
|
||||
|
||||
private final Environment environment;
|
||||
|
||||
@Autowired(required = false)
|
||||
private MultipartResolver multipartResolver;
|
||||
|
||||
public MagicModuleConfiguration(MagicAPIProperties properties,
|
||||
ObjectProvider<List<SQLInterceptor>> sqlInterceptorsProvider,
|
||||
ObjectProvider<List<NamedTableInterceptor>> namedTableInterceptorsProvider,
|
||||
ObjectProvider<List<Dialect>> dialectsProvider, ObjectProvider<List<ColumnMapperProvider>> columnMapperProvidersProvider) {
|
||||
ObjectProvider<List<Dialect>> dialectsProvider,
|
||||
ObjectProvider<List<ColumnMapperProvider>> columnMapperProvidersProvider,
|
||||
Environment environment) {
|
||||
this.properties = properties;
|
||||
this.sqlInterceptorsProvider = sqlInterceptorsProvider;
|
||||
this.namedTableInterceptorsProvider = namedTableInterceptorsProvider;
|
||||
this.dialectsProvider = dialectsProvider;
|
||||
this.columnMapperProvidersProvider = columnMapperProvidersProvider;
|
||||
this.environment = environment;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -145,7 +159,7 @@ public class MagicModuleConfiguration {
|
||||
sqlModule.setDialectAdapter(dialectAdapter);
|
||||
sqlModule.setLogicDeleteColumn(properties.getCrud().getLogicDeleteColumn());
|
||||
sqlModule.setLogicDeleteValue(properties.getCrud().getLogicDeleteValue());
|
||||
MagicResourceLoader.addModule(sqlModule.getModuleName(), new DynamicModuleImport(SQLModule.class, context -> {
|
||||
MagicResourceLoader.addModule("db", new DynamicModuleImport(SQLModule.class, context -> {
|
||||
String dataSourceKey = context.getString(Options.DEFAULT_DATA_SOURCE.getValue());
|
||||
if (StringUtils.isEmpty(dataSourceKey)) return sqlModule;
|
||||
SQLModule newSqlModule = sqlModule.cloneSQLModule();
|
||||
@@ -166,6 +180,34 @@ public class MagicModuleConfiguration {
|
||||
return new HttpModule(createRestTemplate());
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public EnvModule magicEnvModule(){
|
||||
return new EnvModule(environment);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public RequestModule magicRequestModule(){
|
||||
return new RequestModule(multipartResolver);
|
||||
}
|
||||
|
||||
/**
|
||||
* 注入结果构建方法
|
||||
*/
|
||||
@Bean
|
||||
@ConditionalOnMissingBean(ResultProvider.class)
|
||||
public ResultProvider resultProvider() {
|
||||
return new DefaultResultProvider(properties.getResponse());
|
||||
}
|
||||
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public ResponseModule magicResponseModule(ResultProvider resultProvider){
|
||||
return new ResponseModule(resultProvider);
|
||||
}
|
||||
|
||||
private RestTemplate createRestTemplate() {
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
restTemplate.getMessageConverters().add(new StringHttpMessageConverter(StandardCharsets.UTF_8) {
|
||||
@@ -180,4 +222,5 @@ public class MagicModuleConfiguration {
|
||||
});
|
||||
return restTemplate;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package org.ssssssss.magicapi.core.annotation;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
/**
|
||||
* 模块,主要用于import指令,import时根据模块名获取当前类如:<code>import assert</code>;
|
||||
*
|
||||
* @author mxd
|
||||
*/
|
||||
@Target({ElementType.TYPE})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface MagicModule {
|
||||
|
||||
/**
|
||||
* 模块名
|
||||
*/
|
||||
String value();
|
||||
}
|
||||
@@ -1,4 +1,6 @@
|
||||
package org.ssssssss.magicapi.core.config;
|
||||
package org.ssssssss.magicapi.core.annotation;
|
||||
|
||||
import org.ssssssss.magicapi.core.config.MessageType;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.ssssssss.magicapi.core.config;
|
||||
package org.ssssssss.magicapi.core.annotation;
|
||||
|
||||
import org.ssssssss.magicapi.core.interceptor.Authorization;
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
package org.ssssssss.magicapi.core.config;
|
||||
|
||||
import org.ssssssss.script.annotation.UnableCall;
|
||||
|
||||
/**
|
||||
* 模块,主要用于import指令,import时根据模块名获取当前类如:<code>import assert</code>;
|
||||
*
|
||||
* @author mxd
|
||||
*/
|
||||
public interface MagicModule {
|
||||
|
||||
/**
|
||||
* 获取模块名
|
||||
*
|
||||
* @return 返回模块名称
|
||||
*/
|
||||
@UnableCall
|
||||
String getModuleName();
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
package org.ssssssss.magicapi.core.handler;
|
||||
|
||||
import org.ssssssss.magicapi.core.config.Message;
|
||||
import org.ssssssss.magicapi.core.annotation.Message;
|
||||
import org.ssssssss.magicapi.core.config.MessageType;
|
||||
import org.ssssssss.magicapi.core.config.WebSocketSessionManager;
|
||||
import org.ssssssss.magicapi.core.config.Constants;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package org.ssssssss.magicapi.core.handler;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.ssssssss.magicapi.core.config.Message;
|
||||
import org.ssssssss.magicapi.core.annotation.Message;
|
||||
import org.ssssssss.magicapi.core.config.MessageType;
|
||||
import org.ssssssss.magicapi.core.config.WebSocketSessionManager;
|
||||
import org.ssssssss.magicapi.core.context.MagicConsoleSession;
|
||||
|
||||
@@ -6,7 +6,7 @@ import org.springframework.web.socket.CloseStatus;
|
||||
import org.springframework.web.socket.TextMessage;
|
||||
import org.springframework.web.socket.WebSocketSession;
|
||||
import org.springframework.web.socket.handler.TextWebSocketHandler;
|
||||
import org.ssssssss.magicapi.core.config.Message;
|
||||
import org.ssssssss.magicapi.core.annotation.Message;
|
||||
import org.ssssssss.magicapi.core.config.MessageType;
|
||||
import org.ssssssss.magicapi.core.config.WebSocketSessionManager;
|
||||
import org.ssssssss.magicapi.core.event.EventAction;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package org.ssssssss.magicapi.core.handler;
|
||||
|
||||
import org.ssssssss.magicapi.core.config.Message;
|
||||
import org.ssssssss.magicapi.core.annotation.Message;
|
||||
import org.ssssssss.magicapi.core.config.MessageType;
|
||||
import org.ssssssss.magicapi.core.config.WebSocketSessionManager;
|
||||
import org.ssssssss.magicapi.core.exception.MagicLoginException;
|
||||
|
||||
@@ -4,10 +4,9 @@ import org.springframework.web.method.HandlerMethod;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
import org.ssssssss.magicapi.core.config.Constants;
|
||||
import org.ssssssss.magicapi.core.config.MagicCorsFilter;
|
||||
import org.ssssssss.magicapi.core.config.Valid;
|
||||
import org.ssssssss.magicapi.core.annotation.Valid;
|
||||
import org.ssssssss.magicapi.core.web.MagicController;
|
||||
import org.ssssssss.magicapi.core.exception.MagicLoginException;
|
||||
import org.ssssssss.magicapi.core.interceptor.AuthorizationInterceptor;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package org.ssssssss.magicapi.core.model;
|
||||
|
||||
import org.ssssssss.script.annotation.UnableCall;
|
||||
|
||||
import java.beans.Transient;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -21,7 +20,7 @@ public class Attributes<T> {
|
||||
* @param key key
|
||||
* @param value value
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setAttribute(String key, T value) {
|
||||
properties.put(key, value);
|
||||
}
|
||||
@@ -31,17 +30,17 @@ public class Attributes<T> {
|
||||
*
|
||||
* @param key key
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public Object getAttribute(String key) {
|
||||
return properties.get(key);
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public Map<String, T> getProperties() {
|
||||
return properties;
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setProperties(Map<String, T> properties) {
|
||||
this.properties = properties;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package org.ssssssss.magicapi.core.service;
|
||||
|
||||
import org.ssssssss.magicapi.core.config.MagicModule;
|
||||
import org.ssssssss.magicapi.core.annotation.MagicModule;
|
||||
import org.ssssssss.magicapi.core.model.*;
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -12,7 +12,7 @@ import java.util.Map;
|
||||
/**
|
||||
* API调用接口
|
||||
*/
|
||||
public interface MagicAPIService extends MagicModule {
|
||||
public interface MagicAPIService {
|
||||
|
||||
/**
|
||||
* 执行MagicAPI中的接口,原始内容,不包含code以及message信息
|
||||
|
||||
@@ -10,6 +10,7 @@ import org.springframework.http.MediaType;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import org.ssssssss.magicapi.core.annotation.MagicModule;
|
||||
import org.ssssssss.magicapi.core.config.Constants;
|
||||
import org.ssssssss.magicapi.core.config.JsonCodeConstants;
|
||||
import org.ssssssss.magicapi.core.config.WebSocketSessionManager;
|
||||
@@ -35,6 +36,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
@MagicModule("magic")
|
||||
public class DefaultMagicAPIService implements MagicAPIService, JsonCodeConstants {
|
||||
|
||||
private final static Logger logger = LoggerFactory.getLogger(DefaultMagicAPIService.class);
|
||||
@@ -204,11 +206,6 @@ public class DefaultMagicAPIService implements MagicAPIService, JsonCodeConstant
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getModuleName() {
|
||||
return "magic";
|
||||
}
|
||||
|
||||
private boolean processWebSocketSendMessage(String clientId, String content) {
|
||||
WebSocketSessionManager.sendByClientId(clientId, content);
|
||||
return true;
|
||||
|
||||
@@ -5,7 +5,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.ssssssss.magicapi.core.config.Constants;
|
||||
import org.ssssssss.magicapi.core.config.JsonCodeConstants;
|
||||
import org.ssssssss.magicapi.core.config.MagicConfiguration;
|
||||
import org.ssssssss.magicapi.core.config.Valid;
|
||||
import org.ssssssss.magicapi.core.annotation.Valid;
|
||||
import org.ssssssss.magicapi.core.model.*;
|
||||
import org.ssssssss.magicapi.core.exception.InvalidArgumentException;
|
||||
import org.ssssssss.magicapi.core.exception.MagicLoginException;
|
||||
|
||||
@@ -13,7 +13,7 @@ import org.springframework.web.multipart.MultipartFile;
|
||||
import org.ssssssss.magicapi.core.config.Constants;
|
||||
import org.ssssssss.magicapi.core.config.MagicAPIProperties;
|
||||
import org.ssssssss.magicapi.core.config.MagicConfiguration;
|
||||
import org.ssssssss.magicapi.core.config.Valid;
|
||||
import org.ssssssss.magicapi.core.annotation.Valid;
|
||||
import org.ssssssss.magicapi.core.model.*;
|
||||
import org.ssssssss.magicapi.core.exception.MagicLoginException;
|
||||
import org.ssssssss.magicapi.core.interceptor.Authorization;
|
||||
|
||||
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.ssssssss.magicapi.core.config.Constants;
|
||||
import org.ssssssss.magicapi.core.config.MagicConfiguration;
|
||||
import org.ssssssss.magicapi.core.config.Valid;
|
||||
import org.ssssssss.magicapi.core.annotation.Valid;
|
||||
import org.ssssssss.magicapi.core.config.WebSocketSessionManager;
|
||||
import org.ssssssss.magicapi.core.context.CookieContext;
|
||||
import org.ssssssss.magicapi.core.context.RequestContext;
|
||||
|
||||
@@ -6,7 +6,7 @@ import org.springframework.jdbc.support.GeneratedKeyHolder;
|
||||
import org.ssssssss.magicapi.modules.db.dialect.DialectAdapter;
|
||||
import org.ssssssss.magicapi.datasource.model.MagicDynamicDataSource;
|
||||
import org.ssssssss.magicapi.datasource.model.MagicDynamicDataSource.DataSourceNode;
|
||||
import org.ssssssss.magicapi.core.config.MagicModule;
|
||||
import org.ssssssss.magicapi.core.annotation.MagicModule;
|
||||
import org.ssssssss.magicapi.core.context.RequestContext;
|
||||
import org.ssssssss.magicapi.core.context.RequestEntity;
|
||||
import org.ssssssss.magicapi.modules.db.cache.SqlCache;
|
||||
@@ -19,11 +19,12 @@ import org.ssssssss.magicapi.modules.db.table.NamedTable;
|
||||
import org.ssssssss.magicapi.core.interceptor.ResultProvider;
|
||||
import org.ssssssss.magicapi.utils.ScriptManager;
|
||||
import org.ssssssss.script.annotation.Comment;
|
||||
import org.ssssssss.script.annotation.UnableCall;
|
||||
import org.ssssssss.script.functions.DynamicAttribute;
|
||||
import org.ssssssss.script.parsing.ast.statement.ClassConverter;
|
||||
import org.ssssssss.script.reflection.JavaReflection;
|
||||
import org.ssssssss.script.runtime.RuntimeContext;
|
||||
|
||||
import java.beans.Transient;
|
||||
import java.lang.reflect.Field;
|
||||
import java.sql.*;
|
||||
import java.util.*;
|
||||
@@ -36,8 +37,8 @@ import java.util.stream.Stream;
|
||||
*
|
||||
* @author mxd
|
||||
*/
|
||||
public class SQLModule extends HashMap<String, SQLModule> implements MagicModule {
|
||||
|
||||
@MagicModule("db")
|
||||
public class SQLModule implements DynamicAttribute<SQLModule, SQLModule> {
|
||||
static {
|
||||
try {
|
||||
Field[] fields = Types.class.getFields();
|
||||
@@ -86,32 +87,32 @@ public class SQLModule extends HashMap<String, SQLModule> implements MagicModule
|
||||
this.dynamicDataSource = dynamicDataSource;
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setPageProvider(PageProvider pageProvider) {
|
||||
this.pageProvider = pageProvider;
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setResultProvider(ResultProvider resultProvider) {
|
||||
this.resultProvider = resultProvider;
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setColumnMapperProvider(ColumnMapperAdapter columnMapperAdapter) {
|
||||
this.columnMapperAdapter = columnMapperAdapter;
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setDialectAdapter(DialectAdapter dialectAdapter) {
|
||||
this.dialectAdapter = dialectAdapter;
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setColumnMapRowMapper(RowMapper<Map<String, Object>> columnMapRowMapper) {
|
||||
this.columnMapRowMapper = columnMapRowMapper;
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setRowMapColumnMapper(Function<String, String> rowMapColumnMapper) {
|
||||
this.rowMapColumnMapper = rowMapColumnMapper;
|
||||
}
|
||||
@@ -120,17 +121,17 @@ public class SQLModule extends HashMap<String, SQLModule> implements MagicModule
|
||||
this.dynamicDataSource = dynamicDataSource;
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setSqlInterceptors(List<SQLInterceptor> sqlInterceptors) {
|
||||
this.sqlInterceptors = sqlInterceptors;
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setNamedTableInterceptors(List<NamedTableInterceptor> namedTableInterceptors) {
|
||||
this.namedTableInterceptors = namedTableInterceptors;
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setDataSourceNode(DataSourceNode dataSourceNode) {
|
||||
this.dataSourceNode = dataSourceNode;
|
||||
}
|
||||
@@ -151,22 +152,22 @@ public class SQLModule extends HashMap<String, SQLModule> implements MagicModule
|
||||
this.ttl = ttl;
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public String getLogicDeleteColumn() {
|
||||
return logicDeleteColumn;
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setLogicDeleteColumn(String logicDeleteColumn) {
|
||||
this.logicDeleteColumn = logicDeleteColumn;
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public String getLogicDeleteValue() {
|
||||
return logicDeleteValue;
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setLogicDeleteValue(String logicDeleteValue) {
|
||||
this.logicDeleteValue = logicDeleteValue;
|
||||
}
|
||||
@@ -175,12 +176,12 @@ public class SQLModule extends HashMap<String, SQLModule> implements MagicModule
|
||||
return sqlCache;
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setSqlCache(SqlCache sqlCache) {
|
||||
this.sqlCache = sqlCache;
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public SQLModule cloneSQLModule() {
|
||||
SQLModule sqlModule = new SQLModule();
|
||||
sqlModule.setDynamicDataSource(this.dynamicDataSource);
|
||||
@@ -289,21 +290,23 @@ public class SQLModule extends HashMap<String, SQLModule> implements MagicModule
|
||||
return sqlModule;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 数据源切换
|
||||
*/
|
||||
@Override
|
||||
public SQLModule get(Object key) {
|
||||
@Transient
|
||||
public SQLModule getDynamicAttribute(String key) {
|
||||
SQLModule sqlModule = cloneSQLModule();
|
||||
if (key == null) {
|
||||
sqlModule.setDataSourceNode(dynamicDataSource.getDataSource());
|
||||
} else {
|
||||
sqlModule.setDataSourceNode(dynamicDataSource.getDataSource(key.toString()));
|
||||
sqlModule.setDataSourceNode(dynamicDataSource.getDataSource(key));
|
||||
}
|
||||
return sqlModule;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询List
|
||||
*/
|
||||
@@ -323,7 +326,7 @@ public class SQLModule extends HashMap<String, SQLModule> implements MagicModule
|
||||
return select(new BoundSql(runtimeContext, sqlOrXml, params, this));
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public List<Map<String, Object>> select(BoundSql boundSql) {
|
||||
assertDatasourceNotNull();
|
||||
return boundSql.execute(this.sqlInterceptors, () -> queryForList(boundSql));
|
||||
@@ -362,7 +365,7 @@ public class SQLModule extends HashMap<String, SQLModule> implements MagicModule
|
||||
return update(new BoundSql(runtimeContext, sqlOrXml, params, this));
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public int update(BoundSql boundSql) {
|
||||
assertDatasourceNotNull();
|
||||
RequestEntity requestEntity = RequestContext.getRequestEntity();
|
||||
@@ -482,7 +485,7 @@ public class SQLModule extends HashMap<String, SQLModule> implements MagicModule
|
||||
return Arrays.stream(values).sum();
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public Object insert(BoundSql boundSql, String primary) {
|
||||
MagicKeyHolder keyHolder = new MagicKeyHolder(primary);
|
||||
RequestEntity requestEntity = RequestContext.getRequestEntity();
|
||||
@@ -538,13 +541,13 @@ public class SQLModule extends HashMap<String, SQLModule> implements MagicModule
|
||||
return page(boundSql, new Page(limit, offset));
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public Object page(BoundSql boundSql) {
|
||||
Page page = pageProvider.getPage(boundSql.getRuntimeContext());
|
||||
return page(boundSql, page);
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public String getDataSourceName() {
|
||||
return this.dataSourceNode == null ? "unknown" : dataSourceNode.getName();
|
||||
}
|
||||
@@ -586,7 +589,7 @@ public class SQLModule extends HashMap<String, SQLModule> implements MagicModule
|
||||
return resultProvider.buildPageResult(requestEntity, page, count, list);
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public Object page(BoundSql boundSql, Page page) {
|
||||
assertDatasourceNotNull();
|
||||
Dialect dialect = dataSourceNode.getDialect(dialectAdapter);
|
||||
@@ -614,7 +617,7 @@ public class SQLModule extends HashMap<String, SQLModule> implements MagicModule
|
||||
return selectInt(new BoundSql(runtimeContext, sqlOrXml, params, this));
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public Integer selectInt(BoundSql boundSql) {
|
||||
assertDatasourceNotNull();
|
||||
return boundSql.execute(this.sqlInterceptors, () -> dataSourceNode.getJdbcTemplate().query(boundSql.getSql(), new SingleRowResultSetExtractor<>(Integer.class), boundSql.getParameters()));
|
||||
@@ -639,7 +642,7 @@ public class SQLModule extends HashMap<String, SQLModule> implements MagicModule
|
||||
return selectOne(new BoundSql(runtimeContext, sqlOrXml, params, this));
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Transient
|
||||
public Map<String, Object> selectOne(BoundSql boundSql) {
|
||||
assertDatasourceNotNull();
|
||||
return boundSql.execute(this.sqlInterceptors, () -> {
|
||||
@@ -682,12 +685,6 @@ public class SQLModule extends HashMap<String, SQLModule> implements MagicModule
|
||||
return boundSql.copy(pageSql);
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
@Override
|
||||
public String getModuleName() {
|
||||
return "db";
|
||||
}
|
||||
|
||||
static class MagicKeyHolder extends GeneratedKeyHolder {
|
||||
|
||||
private final boolean useGeneratedKeys;
|
||||
|
||||
@@ -11,9 +11,9 @@ import org.ssssssss.magicapi.modules.db.SQLModule;
|
||||
import org.ssssssss.magicapi.modules.db.model.Page;
|
||||
import org.ssssssss.magicapi.modules.db.model.SqlMode;
|
||||
import org.ssssssss.script.annotation.Comment;
|
||||
import org.ssssssss.script.annotation.UnableCall;
|
||||
import org.ssssssss.script.runtime.RuntimeContext;
|
||||
|
||||
import java.beans.Transient;
|
||||
import java.io.Serializable;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
@@ -515,7 +515,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
*
|
||||
* @return 表名
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public String getTableName() {
|
||||
return tableName;
|
||||
}
|
||||
@@ -525,7 +525,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
*
|
||||
* @param tableName 表名
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setTableName(String tableName) {
|
||||
this.tableName = tableName;
|
||||
}
|
||||
@@ -533,7 +533,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
/**
|
||||
* 获取SQL模块
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public SQLModule getSqlModule() {
|
||||
return sqlModule;
|
||||
}
|
||||
@@ -541,7 +541,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
/**
|
||||
* 获取主键列
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public String getPrimary() {
|
||||
return primary;
|
||||
}
|
||||
@@ -549,7 +549,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
/**
|
||||
* 获取逻辑删除列
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public String getLogicDeleteColumn() {
|
||||
return logicDeleteColumn;
|
||||
}
|
||||
@@ -557,7 +557,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
/**
|
||||
* 获取逻辑删除值
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public Object getLogicDeleteValue() {
|
||||
return logicDeleteValue;
|
||||
}
|
||||
@@ -565,7 +565,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
/**
|
||||
* 获取设置的columns
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public Map<String, Object> getColumns() {
|
||||
return columns;
|
||||
}
|
||||
@@ -573,7 +573,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
/**
|
||||
* 设置columns
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setColumns(Map<String, Object> columns) {
|
||||
this.columns = columns;
|
||||
}
|
||||
@@ -581,7 +581,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
/**
|
||||
* 获取设置的fields
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public List<String> getFields() {
|
||||
return fields;
|
||||
}
|
||||
@@ -589,7 +589,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
/**
|
||||
* 设置 fields
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setFields(List<String> fields) {
|
||||
this.fields = fields;
|
||||
}
|
||||
@@ -597,7 +597,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
/**
|
||||
* 获取设置的group
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public List<String> getGroups() {
|
||||
return groups;
|
||||
}
|
||||
@@ -605,7 +605,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
/**
|
||||
* 设置 group
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setGroups(List<String> groups) {
|
||||
this.groups = groups;
|
||||
}
|
||||
@@ -613,7 +613,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
/**
|
||||
* 获取设置的order
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public List<String> getOrders() {
|
||||
return orders;
|
||||
}
|
||||
@@ -621,7 +621,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
/**
|
||||
* 设置 order
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setOrders(List<String> orders) {
|
||||
this.orders = orders;
|
||||
}
|
||||
@@ -629,7 +629,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
/**
|
||||
* 获取设置的排除的列
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public Set<String> getExcludeColumns() {
|
||||
return excludeColumns;
|
||||
}
|
||||
@@ -637,7 +637,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
/**
|
||||
* 设置排除的列
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setExcludeColumns(Set<String> excludeColumns) {
|
||||
this.excludeColumns = excludeColumns;
|
||||
}
|
||||
@@ -647,7 +647,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public Object getDefaultPrimaryValue() {
|
||||
return defaultPrimaryValue;
|
||||
}
|
||||
@@ -655,7 +655,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
/**
|
||||
* 是否设逻辑了逻辑删除
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public boolean isUseLogic() {
|
||||
return useLogic;
|
||||
}
|
||||
@@ -663,7 +663,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
/**
|
||||
* 设置是否使用逻辑删除
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setUseLogic(boolean useLogic) {
|
||||
this.useLogic = useLogic;
|
||||
}
|
||||
@@ -671,7 +671,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
/**
|
||||
* 获取是否不过滤空参数
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public boolean isWithBlank() {
|
||||
return withBlank;
|
||||
}
|
||||
@@ -679,7 +679,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
/**
|
||||
* 设置是否不过滤空参数
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public void setWithBlank(boolean withBlank) {
|
||||
this.withBlank = withBlank;
|
||||
}
|
||||
@@ -687,7 +687,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
/**
|
||||
* 获取where
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public Where getWhere() {
|
||||
return where;
|
||||
}
|
||||
@@ -695,7 +695,7 @@ public class NamedTable extends Attributes<Object> {
|
||||
/**
|
||||
* 获取RequestEntity
|
||||
*/
|
||||
@UnableCall
|
||||
@Transient
|
||||
public RequestEntity getRequestEntity() {
|
||||
return RequestContext.getRequestEntity();
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import org.springframework.http.*;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import org.ssssssss.magicapi.core.config.MagicModule;
|
||||
import org.ssssssss.magicapi.core.annotation.MagicModule;
|
||||
import org.ssssssss.script.annotation.Comment;
|
||||
|
||||
import java.util.HashMap;
|
||||
@@ -19,7 +19,8 @@ import java.util.stream.Collectors;
|
||||
* @author mxd
|
||||
* @since 1.1.0
|
||||
*/
|
||||
public class HttpModule implements MagicModule {
|
||||
@MagicModule("http")
|
||||
public class HttpModule {
|
||||
|
||||
private final RestTemplate template;
|
||||
private final HttpHeaders httpHeaders = new HttpHeaders();
|
||||
@@ -41,11 +42,6 @@ public class HttpModule implements MagicModule {
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getModuleName() {
|
||||
return "http";
|
||||
}
|
||||
|
||||
@Comment("创建连接")
|
||||
public HttpModule connect(@Comment(name = "url", value = "目标URL") String url) {
|
||||
return new HttpModule(template, url);
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.ssssssss.magicapi.modules.servlet;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import org.springframework.web.multipart.MultipartRequest;
|
||||
import org.springframework.web.multipart.MultipartResolver;
|
||||
import org.ssssssss.magicapi.core.annotation.MagicModule;
|
||||
import org.ssssssss.script.annotation.Comment;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
@@ -17,6 +18,7 @@ import java.util.stream.Collectors;
|
||||
*
|
||||
* @author mxd
|
||||
*/
|
||||
@MagicModule("request")
|
||||
public class RequestModule {
|
||||
|
||||
private static MultipartResolver resolver;
|
||||
|
||||
@@ -7,6 +7,7 @@ import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.context.request.RequestAttributes;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
import org.ssssssss.magicapi.core.annotation.MagicModule;
|
||||
import org.ssssssss.magicapi.core.context.RequestContext;
|
||||
import org.ssssssss.magicapi.core.interceptor.ResultProvider;
|
||||
import org.ssssssss.script.annotation.Comment;
|
||||
@@ -26,6 +27,7 @@ import java.util.Map;
|
||||
*
|
||||
* @author mxd
|
||||
*/
|
||||
@MagicModule("response")
|
||||
public class ResponseModule {
|
||||
|
||||
private final ResultProvider resultProvider;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package org.ssssssss.magicapi.modules.spring;
|
||||
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.ssssssss.magicapi.core.config.MagicModule;
|
||||
import org.ssssssss.magicapi.core.annotation.MagicModule;
|
||||
import org.ssssssss.script.annotation.Comment;
|
||||
|
||||
/**
|
||||
@@ -9,24 +9,20 @@ import org.ssssssss.script.annotation.Comment;
|
||||
*
|
||||
* @author mxd
|
||||
*/
|
||||
public class EnvModule implements MagicModule {
|
||||
@MagicModule("env")
|
||||
public class EnvModule {
|
||||
|
||||
private final Environment environment;
|
||||
|
||||
public EnvModule(Environment environment) {
|
||||
this.environment = environment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getModuleName() {
|
||||
return "env";
|
||||
}
|
||||
|
||||
@Comment("获取配置")
|
||||
public String get(@Comment(name = "key", value = "配置项") String key) {
|
||||
return environment.getProperty(key);
|
||||
}
|
||||
|
||||
public EnvModule(Environment environment) {
|
||||
this.environment = environment;
|
||||
}
|
||||
|
||||
@Comment("获取配置")
|
||||
public String get(@Comment(name = "key", value = "配置项") String key,
|
||||
@Comment(name = "defaultValue", value = "未配置时的默认值") String defaultValue) {
|
||||
|
||||
2
pom.xml
2
pom.xml
@@ -30,7 +30,7 @@
|
||||
</scm>
|
||||
<properties>
|
||||
<spring-boot.version>2.4.5</spring-boot.version>
|
||||
<magic-script.version>1.6.4</magic-script.version>
|
||||
<magic-script.version>1.8.0</magic-script.version>
|
||||
<commons-compress.version>1.21</commons-compress.version>
|
||||
<commons-io.version>2.7</commons-io.version>
|
||||
<commons-text.version>1.6</commons-text.version>
|
||||
|
||||
Reference in New Issue
Block a user