From 3370dccc851019541e7c780f2c2115053918d952 Mon Sep 17 00:00:00 2001 From: q1279335527 <1279335527@qq.com> Date: Sat, 26 Apr 2025 09:32:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=8A=A5=E9=94=99=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E6=97=A5=E5=BF=97=E5=8F=8A=E5=AF=B9=E5=BA=94=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E5=8F=98=E9=87=8F=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +- commons/pom.xml | 1 + commons/viewer-common-api/pom.xml | 5 ++ .../common/api/advice/ExceptionAdvice.java | 16 ++++ commons/viewer-common-envvar/pom.xml | 7 ++ .../constants/EnvVarDataTypeConstant.java | 8 ++ .../viewer/common/envvar/dao/EnvVarsDao.java | 10 +++ .../common/envvar/entity/BaseEnvMeta.java | 7 -- .../viewer/common/envvar/entity/EnvVars.java | 22 ++++++ .../envvar/factory/EnvPropSignFactory.java | 73 +++++++++++++++++++ .../common/envvar/service/EnvVarsService.java | 12 +++ .../envvar/service/EnvVarsServiceImpl.java | 52 +++++++++++++ commons/viewer-common-exc/pom.xml | 35 +++++++++ .../exc/CommonExcAutoConfiguration.java | 11 +++ .../common/exc/config/ExcInfoExConfig.java | 43 +++++++++++ .../exc/constant/ExcInfoExConstant.java | 7 ++ .../viewer/common/exc/dao/ExcInfoDao.java | 10 +++ .../viewer/common/exc/entity/ExcEnvVar.java | 25 +++++++ .../viewer/common/exc/entity/ExcInfo.java | 35 +++++++++ .../viewer/common/exc/event/ExcMsgEvent.java | 17 +++++ .../common/exc/exceptions/ExecException.java | 25 +++++++ .../common/exc/listener/ExcInfoListener.java | 32 ++++++++ .../common/exc/service/ExcInfoService.java | 9 +++ .../exc/service/ExcInfoServiceImpl.java | 17 +++++ .../main/resources/META-INF/spring.factories | 1 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../executor/core/base/DataContext.java | 4 +- modules/pom.xml | 5 ++ .../ds/core/factory/ExecutorManager.java | 14 +++- .../ModuleSettingAutoConfiguration.java | 2 +- .../setting/service/EnvVarsServiceImpl.java | 2 +- .../step/executor/SimpleBlockExecutor.java | 14 +++- pom.xml | 5 ++ 33 files changed, 517 insertions(+), 15 deletions(-) create mode 100644 commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/constants/EnvVarDataTypeConstant.java create mode 100644 commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/dao/EnvVarsDao.java delete mode 100644 commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/entity/BaseEnvMeta.java create mode 100644 commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/entity/EnvVars.java create mode 100644 commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/factory/EnvPropSignFactory.java create mode 100644 commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/service/EnvVarsService.java create mode 100644 commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/service/EnvVarsServiceImpl.java create mode 100644 commons/viewer-common-exc/pom.xml create mode 100644 commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/CommonExcAutoConfiguration.java create mode 100644 commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/config/ExcInfoExConfig.java create mode 100644 commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/constant/ExcInfoExConstant.java create mode 100644 commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/dao/ExcInfoDao.java create mode 100644 commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/entity/ExcEnvVar.java create mode 100644 commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/entity/ExcInfo.java create mode 100644 commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/event/ExcMsgEvent.java create mode 100644 commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/exceptions/ExecException.java create mode 100644 commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/listener/ExcInfoListener.java create mode 100644 commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/service/ExcInfoService.java create mode 100644 commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/service/ExcInfoServiceImpl.java create mode 100644 commons/viewer-common-exc/src/main/resources/META-INF/spring.factories create mode 100644 commons/viewer-common-exc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports diff --git a/README.md b/README.md index c01d869..17618a8 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,7 @@ jdk-17 ## 🚀 项目简介 - -Viewer 是一个基于SpringBoot的**零代码API开发平台**,开发者只需通过可视化界面编写MyBatis风格的标准SQL语句,即可快速生成完整的HTTP RESTful API接口,无需编写任何Java业务代码。 +Viewer 是一款基于SpringBoot构建的API敏捷开发平台,突破传统编码范式,提供从SQL到API的一站式数据服务能力。通过可视化SQL工作台,开发者无需编写Java代码即可发布标准RESTful接口,针对查询、大屏场景提供快速迭代方案,助力企业快速构建高性能数据决策系统。 ## ✨ 核心特性 @@ -16,7 +15,7 @@ Viewer 是一个基于SpringBoot的**零代码API开发平台**,开发者只 - **MyBatis SQL支持**:直接使用熟悉的SQL语法开发接口 - **可视化操作**:通过Web界面完成API开发全流程 - **自动生成**:根据SQL自动生成Swagger文档和参数校验 -- **多数据源**:支持MySQL/Oracle/PostgreSQL等主流数据库 +- **多数据源**:支持MySQL/Oracle/PostgreSQL等主流数据库,在一次请求中可跨数据源查询 - **高性能**:基于SpringBoot的轻量级架构 - **实时生效**:支持动态创建、修改API;动态创建、修改数据源。热部署全程无感。 diff --git a/commons/pom.xml b/commons/pom.xml index 995bbd1..8c106d3 100644 --- a/commons/pom.xml +++ b/commons/pom.xml @@ -17,6 +17,7 @@ viewer-common-crud viewer-common-connector viewer-common-envvar + viewer-common-exc diff --git a/commons/viewer-common-api/pom.xml b/commons/viewer-common-api/pom.xml index 435ad01..88440ad 100644 --- a/commons/viewer-common-api/pom.xml +++ b/commons/viewer-common-api/pom.xml @@ -22,6 +22,11 @@ xyz.thoughtset.viewer viewer-common-core + + + xyz.thoughtset.viewer + viewer-common-exc + \ No newline at end of file diff --git a/commons/viewer-common-api/src/main/java/xyz/thoughtset/viewer/common/api/advice/ExceptionAdvice.java b/commons/viewer-common-api/src/main/java/xyz/thoughtset/viewer/common/api/advice/ExceptionAdvice.java index 4994d0d..05601fa 100644 --- a/commons/viewer-common-api/src/main/java/xyz/thoughtset/viewer/common/api/advice/ExceptionAdvice.java +++ b/commons/viewer-common-api/src/main/java/xyz/thoughtset/viewer/common/api/advice/ExceptionAdvice.java @@ -1,12 +1,17 @@ package xyz.thoughtset.viewer.common.api.advice; +import org.apache.catalina.core.ApplicationContext; +import org.springframework.context.ApplicationEventPublisher; import xyz.thoughtset.viewer.common.api.result.Result; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; +import xyz.thoughtset.viewer.common.exc.event.ExcMsgEvent; +import xyz.thoughtset.viewer.common.exc.exceptions.ExecException; +import xyz.thoughtset.viewer.common.exc.service.ExcInfoService; @Slf4j //@RestControllerAdvice(basePackageClasses = { @@ -17,7 +22,18 @@ import org.springframework.web.bind.annotation.RestControllerAdvice; public class ExceptionAdvice { @Autowired private ObjectMapper mapper; + @Autowired + private ExcInfoService excInfoService; + @Autowired + private ApplicationEventPublisher eventPublisher; + @ExceptionHandler({ExecException.class}) + public Result handle(ExecException ex) { + log.error(ex.toString(), ex); + eventPublisher.publishEvent(new ExcMsgEvent(this,ex)); + return Result.failed(ex.getMessage()); + } + @ExceptionHandler({Exception.class}) public Result handle(Exception ex) { log.error(ex.toString(), ex); diff --git a/commons/viewer-common-envvar/pom.xml b/commons/viewer-common-envvar/pom.xml index 94742b9..9473856 100644 --- a/commons/viewer-common-envvar/pom.xml +++ b/commons/viewer-common-envvar/pom.xml @@ -17,4 +17,11 @@ UTF-8 + + + xyz.thoughtset.viewer + viewer-common-crud-core + + + \ No newline at end of file diff --git a/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/constants/EnvVarDataTypeConstant.java b/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/constants/EnvVarDataTypeConstant.java new file mode 100644 index 0000000..845236b --- /dev/null +++ b/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/constants/EnvVarDataTypeConstant.java @@ -0,0 +1,8 @@ +package xyz.thoughtset.viewer.common.envvar.constants; + +public class EnvVarDataTypeConstant { + public static final Integer OBJ = 0; + public static final Integer MAP = 1; + + +} diff --git a/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/dao/EnvVarsDao.java b/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/dao/EnvVarsDao.java new file mode 100644 index 0000000..de8ec23 --- /dev/null +++ b/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/dao/EnvVarsDao.java @@ -0,0 +1,10 @@ +package xyz.thoughtset.viewer.common.envvar.dao; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import xyz.thoughtset.viewer.common.envvar.entity.EnvVars; + +@Mapper +public interface EnvVarsDao extends BaseMapper { +} diff --git a/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/entity/BaseEnvMeta.java b/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/entity/BaseEnvMeta.java deleted file mode 100644 index 374af3b..0000000 --- a/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/entity/BaseEnvMeta.java +++ /dev/null @@ -1,7 +0,0 @@ -package xyz.thoughtset.viewer.common.envvar.entity; - -public class BaseEnvMeta { - - - -} diff --git a/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/entity/EnvVars.java b/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/entity/EnvVars.java new file mode 100644 index 0000000..efdb836 --- /dev/null +++ b/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/entity/EnvVars.java @@ -0,0 +1,22 @@ +package xyz.thoughtset.viewer.common.envvar.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import xyz.thoughtset.viewer.common.core.entity.BaseMeta; +import xyz.thoughtset.viewer.common.crud.core.annotation.ApiCRUDPower; + + +@NoArgsConstructor +@AllArgsConstructor +@Data +@TableName +@ApiCRUDPower(insert = false,update = false,list = true) +public class EnvVars extends BaseMeta { + protected String type; + protected String topic; + protected String payload; + + +} diff --git a/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/factory/EnvPropSignFactory.java b/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/factory/EnvPropSignFactory.java new file mode 100644 index 0000000..f87f7c8 --- /dev/null +++ b/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/factory/EnvPropSignFactory.java @@ -0,0 +1,73 @@ +package xyz.thoughtset.viewer.common.envvar.factory; + +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.annotation.PostConstruct; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; +import org.springframework.core.type.filter.AnnotationTypeFilter; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; +import xyz.thoughtset.viewer.common.envvar.annotation.EnvPropSign; +import xyz.thoughtset.viewer.common.envvar.constants.EnvVarDataTypeConstant; +import xyz.thoughtset.viewer.common.envvar.entity.EnvVars; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +@Component +public class EnvPropSignFactory { + @Value("${scan.package}") + private String scanPackage; + @Autowired + protected ObjectMapper objectMapper; + @Autowired + protected ApplicationContext applicationContext; + + private Map signMap = new HashMap<>(); + + @PostConstruct + public void init() { + // 创建扫描器,false 表示不检查父类 + ClassPathScanningCandidateComponentProvider scanner = + new ClassPathScanningCandidateComponentProvider(false); + scanner.addIncludeFilter(new AnnotationTypeFilter(EnvPropSign.class)); + // 扫描指定包 + Set beanDefinitions = scanner.findCandidateComponents(scanPackage); + for (BeanDefinition beanDefinition : beanDefinitions) { + try { + Class clazz = Class.forName(beanDefinition.getBeanClassName()); + String key = StringUtils.uncapitalize(clazz.getSimpleName()); + signMap.put(key,clazz); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + } + } + + public Class getSignType(String key) { + return signMap.get(key); + } + + public EnvPropSign getSignInfo(String key) { + return (EnvPropSign) signMap.get(key).getAnnotation(EnvPropSign.class); + } + + public Object getTargetData(String key,Object payload) { + Class clazz = getSignType(key); + return objectMapper.convertValue(payload,clazz); + } + + public Object loadData(EnvVars data) { + if (!(EnvVarDataTypeConstant.OBJ.equals(data.getType()))) { + return data.getPayload(); + } + return objectMapper.convertValue(data.getPayload(),getSignType(data.getTopic())); + } + + + +} diff --git a/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/service/EnvVarsService.java b/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/service/EnvVarsService.java new file mode 100644 index 0000000..a2bde5c --- /dev/null +++ b/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/service/EnvVarsService.java @@ -0,0 +1,12 @@ +package xyz.thoughtset.viewer.common.envvar.service; + + +import xyz.thoughtset.viewer.common.crud.core.service.BaseService; +import xyz.thoughtset.viewer.common.envvar.entity.EnvVars; + +public interface EnvVarsService extends BaseService { + + Object loadData(String varId); + T loadSingleData(Class tarType); + +} diff --git a/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/service/EnvVarsServiceImpl.java b/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/service/EnvVarsServiceImpl.java new file mode 100644 index 0000000..ec60728 --- /dev/null +++ b/commons/viewer-common-envvar/src/main/java/xyz/thoughtset/viewer/common/envvar/service/EnvVarsServiceImpl.java @@ -0,0 +1,52 @@ +package xyz.thoughtset.viewer.common.envvar.service; + +import lombok.SneakyThrows; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import xyz.thoughtset.viewer.common.crud.core.service.BaseServiceImpl; +import xyz.thoughtset.viewer.common.envvar.constants.EnvVarDataTypeConstant; +import xyz.thoughtset.viewer.common.envvar.dao.EnvVarsDao; +import xyz.thoughtset.viewer.common.envvar.entity.EnvVars; +import xyz.thoughtset.viewer.common.envvar.factory.EnvPropSignFactory; + +import java.util.LinkedHashMap; + +@Service +@Transactional +public class EnvVarsServiceImpl extends BaseServiceImpl implements EnvVarsService { + private static final String TARGET_DATA_KEY = "payload"; + + @Autowired + private EnvPropSignFactory envSignFactory; + + @SneakyThrows + @Override + public Object saveData(LinkedHashMap baseMap) { + Object targetData = baseMap.remove(TARGET_DATA_KEY); + EnvVars data = convertValue(baseMap); + String topic = data.getTopic(); + if (EnvVarDataTypeConstant.OBJ.equals(data.getType())) { + targetData = envSignFactory.getTargetData(topic, targetData); + } + data.setPayload(mapper.writeValueAsString(targetData)); + if (envSignFactory.getSignInfo(topic).single()){ + data.setId(topic); + } + saveOrUpdate(data); + return data; + } + + @Override + public Object loadData(String varId) { + EnvVars vars = baseMapper.selectById(varId); + return envSignFactory.loadData(vars); + } + + @Override + public T loadSingleData(Class tarType) { +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// queryWrapper.lambda().eq(EnvVars::getTopic,tarType.getSimpleName()); + return (T) loadData(tarType.getSimpleName()); + } +} diff --git a/commons/viewer-common-exc/pom.xml b/commons/viewer-common-exc/pom.xml new file mode 100644 index 0000000..c50ae62 --- /dev/null +++ b/commons/viewer-common-exc/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + xyz.thoughtset.viewer + commons + ${revision} + + + viewer-common-exc + + + 17 + 17 + UTF-8 + + + + + xyz.thoughtset.viewer + viewer-common-core + + + xyz.thoughtset.viewer + viewer-common-crud-core + + + xyz.thoughtset.viewer + viewer-common-envvar + + + + \ No newline at end of file diff --git a/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/CommonExcAutoConfiguration.java b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/CommonExcAutoConfiguration.java new file mode 100644 index 0000000..5b8448a --- /dev/null +++ b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/CommonExcAutoConfiguration.java @@ -0,0 +1,11 @@ +package xyz.thoughtset.viewer.common.exc; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan +@EnableConfigurationProperties +public class CommonExcAutoConfiguration { +} diff --git a/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/config/ExcInfoExConfig.java b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/config/ExcInfoExConfig.java new file mode 100644 index 0000000..eba88b4 --- /dev/null +++ b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/config/ExcInfoExConfig.java @@ -0,0 +1,43 @@ +package xyz.thoughtset.viewer.common.exc.config; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import xyz.thoughtset.viewer.common.exc.constant.ExcInfoExConstant; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + +@Configuration +public class ExcInfoExConfig { + + @Bean + @ConditionalOnMissingBean(name = ExcInfoExConstant.EX_NAME) + public Executor saveExcExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(2); + executor.setMaxPoolSize(16); + executor.setQueueCapacity(128); + executor.setKeepAliveSeconds(60); + executor.setThreadNamePrefix(ExcInfoExConstant.EX_NAME+"-"); // 线程名称前缀 + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + executor.initialize(); + return executor; + } + +// @Bean +// @ConditionalOnMissingBean(name = ExcInfoExConstant.EX_CHECK) +// public Executor countFilePageExecutor() { +// ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); +// executor.setCorePoolSize(1); +// executor.setMaxPoolSize(16); +// executor.setQueueCapacity(128); +// executor.setKeepAliveSeconds(60); +// executor.setThreadNamePrefix(ExcInfoExConstant.EX_CHECK+"-"); // 线程名称前缀 +// executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); +// executor.initialize(); +// return executor; +// } + +} diff --git a/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/constant/ExcInfoExConstant.java b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/constant/ExcInfoExConstant.java new file mode 100644 index 0000000..eca6a30 --- /dev/null +++ b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/constant/ExcInfoExConstant.java @@ -0,0 +1,7 @@ +package xyz.thoughtset.viewer.common.exc.constant; + +public class ExcInfoExConstant { + public static final String EX_NAME = "EXC_EX_NAME"; + public static final String EX_CHECK = "EXC_EX_CHECK"; + +} diff --git a/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/dao/ExcInfoDao.java b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/dao/ExcInfoDao.java new file mode 100644 index 0000000..b4b05f3 --- /dev/null +++ b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/dao/ExcInfoDao.java @@ -0,0 +1,10 @@ +package xyz.thoughtset.viewer.common.exc.dao; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import xyz.thoughtset.viewer.common.exc.entity.ExcInfo; + +@Mapper +public interface ExcInfoDao extends BaseMapper { +} diff --git a/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/entity/ExcEnvVar.java b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/entity/ExcEnvVar.java new file mode 100644 index 0000000..84981bc --- /dev/null +++ b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/entity/ExcEnvVar.java @@ -0,0 +1,25 @@ +package xyz.thoughtset.viewer.common.exc.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import xyz.thoughtset.viewer.common.core.entity.BaseMeta; +import xyz.thoughtset.viewer.common.crud.core.annotation.ApiCRUDPower; +import xyz.thoughtset.viewer.common.envvar.annotation.EnvPropSign; +import xyz.thoughtset.viewer.common.exc.exceptions.ExecException; + +@NoArgsConstructor +@AllArgsConstructor +@Data +@EnvPropSign(single = true) +public class ExcEnvVar { + protected Integer saveNums = -1;//异常条数保存条数 + protected Integer saveTimes = -1;//异常条数保存时长 + protected boolean useSave = true; + + public boolean needCheck() { + return !(-1 == saveNums && -1 == saveTimes); + } + +} diff --git a/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/entity/ExcInfo.java b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/entity/ExcInfo.java new file mode 100644 index 0000000..054681a --- /dev/null +++ b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/entity/ExcInfo.java @@ -0,0 +1,35 @@ +package xyz.thoughtset.viewer.common.exc.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import xyz.thoughtset.viewer.common.core.entity.BaseMeta; +import xyz.thoughtset.viewer.common.crud.core.annotation.ApiCRUDPower; +import xyz.thoughtset.viewer.common.exc.exceptions.ExecException; + +import java.util.Map; + +@NoArgsConstructor +@AllArgsConstructor +@Data +@TableName +@ApiCRUDPower(searchOnly = true,list = true) +public class ExcInfo extends BaseMeta { + protected String funId; + protected String errMsg; + protected String apiId; + protected String blockId; + protected String paramStr; +// protected Integer + + public ExcInfo(Exception exc){ + this.errMsg = exc.getMessage(); + } + + public static ExecException buildAndThrowExc(Exception exc, Map params){ + ExcInfo e = new ExcInfo(exc); + return new ExecException(e); + } + +} diff --git a/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/event/ExcMsgEvent.java b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/event/ExcMsgEvent.java new file mode 100644 index 0000000..5037ab3 --- /dev/null +++ b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/event/ExcMsgEvent.java @@ -0,0 +1,17 @@ +package xyz.thoughtset.viewer.common.exc.event; + +import lombok.Getter; +import org.springframework.context.ApplicationEvent; +import xyz.thoughtset.viewer.common.exc.entity.ExcInfo; +import xyz.thoughtset.viewer.common.exc.exceptions.ExecException; + +@Getter +public class ExcMsgEvent extends ApplicationEvent { + private ExcInfo excInfo; + + public ExcMsgEvent(Object source, ExecException exception) { + super(source); + this.excInfo = exception.getExcInfo(); + } + +} diff --git a/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/exceptions/ExecException.java b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/exceptions/ExecException.java new file mode 100644 index 0000000..ef8c167 --- /dev/null +++ b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/exceptions/ExecException.java @@ -0,0 +1,25 @@ +package xyz.thoughtset.viewer.common.exc.exceptions; + +import lombok.Data; +import xyz.thoughtset.viewer.common.exc.entity.ExcInfo; + +@Data +public class ExecException extends RuntimeException { + protected ExcInfo excInfo; + + + public ExecException(ExcInfo exc){ + super(exc.getErrMsg()); + this.excInfo = exc; + } + + public ExecException addApiId(String apiId){ + excInfo.setApiId(apiId); + return this; + } + public ExecException addBlockId(String blockId){ + excInfo.setBlockId(blockId); + return this; + } + +} diff --git a/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/listener/ExcInfoListener.java b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/listener/ExcInfoListener.java new file mode 100644 index 0000000..b78f34f --- /dev/null +++ b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/listener/ExcInfoListener.java @@ -0,0 +1,32 @@ +package xyz.thoughtset.viewer.common.exc.listener; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; +import xyz.thoughtset.viewer.common.envvar.service.EnvVarsService; +import xyz.thoughtset.viewer.common.exc.constant.ExcInfoExConstant; +import xyz.thoughtset.viewer.common.exc.entity.ExcEnvVar; +import xyz.thoughtset.viewer.common.exc.event.ExcMsgEvent; +import xyz.thoughtset.viewer.common.exc.service.ExcInfoService; + +@Slf4j +@Component +public class ExcInfoListener implements ApplicationListener { + @Autowired + private ExcInfoService excInfoService; + @Autowired + private EnvVarsService envVarsService; + + + @Async(ExcInfoExConstant.EX_NAME) + @Override + public void onApplicationEvent(ExcMsgEvent event) { + ExcEnvVar envVar = envVarsService.loadSingleData(ExcEnvVar.class); + if (!envVar.isUseSave()) {return;} + excInfoService.save(event.getExcInfo()); + if (!envVar.needCheck()) {return;} + } + +} diff --git a/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/service/ExcInfoService.java b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/service/ExcInfoService.java new file mode 100644 index 0000000..76efd84 --- /dev/null +++ b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/service/ExcInfoService.java @@ -0,0 +1,9 @@ +package xyz.thoughtset.viewer.common.exc.service; + + +import xyz.thoughtset.viewer.common.crud.core.service.BaseService; +import xyz.thoughtset.viewer.common.exc.entity.ExcInfo; + +public interface ExcInfoService extends BaseService { + +} diff --git a/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/service/ExcInfoServiceImpl.java b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/service/ExcInfoServiceImpl.java new file mode 100644 index 0000000..670077a --- /dev/null +++ b/commons/viewer-common-exc/src/main/java/xyz/thoughtset/viewer/common/exc/service/ExcInfoServiceImpl.java @@ -0,0 +1,17 @@ +package xyz.thoughtset.viewer.common.exc.service; + +import lombok.SneakyThrows; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import xyz.thoughtset.viewer.common.crud.core.service.BaseServiceImpl; +import xyz.thoughtset.viewer.common.exc.dao.ExcInfoDao; +import xyz.thoughtset.viewer.common.exc.entity.ExcInfo; + +import java.util.LinkedHashMap; + +@Service +public class ExcInfoServiceImpl extends BaseServiceImpl implements ExcInfoService { + + +} diff --git a/commons/viewer-common-exc/src/main/resources/META-INF/spring.factories b/commons/viewer-common-exc/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..87a9284 --- /dev/null +++ b/commons/viewer-common-exc/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=xyz.thoughtset.viewer.common.exc \ No newline at end of file diff --git a/commons/viewer-common-exc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/commons/viewer-common-exc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..57aed7b --- /dev/null +++ b/commons/viewer-common-exc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +xyz.thoughtset.viewer.common.exc.CommonExcAutoConfiguration \ No newline at end of file diff --git a/executor/viewer-executor-core/src/main/java/xyz/thoughtset/viewer/executor/core/base/DataContext.java b/executor/viewer-executor-core/src/main/java/xyz/thoughtset/viewer/executor/core/base/DataContext.java index 449a377..4a4ba49 100644 --- a/executor/viewer-executor-core/src/main/java/xyz/thoughtset/viewer/executor/core/base/DataContext.java +++ b/executor/viewer-executor-core/src/main/java/xyz/thoughtset/viewer/executor/core/base/DataContext.java @@ -7,7 +7,9 @@ import java.util.HashMap; @Data public class DataContext { private HashMap dataMap; - private String nextBodyId; + private String bodyId; + private String apiId; + private String funId; public DataContext() { this.dataMap = new HashMap<>(); diff --git a/modules/pom.xml b/modules/pom.xml index 33dbba3..84f322a 100644 --- a/modules/pom.xml +++ b/modules/pom.xml @@ -34,6 +34,11 @@ xyz.thoughtset.viewer viewer-common-crud-core + + + xyz.thoughtset.viewer + viewer-common-exc + \ No newline at end of file diff --git a/modules/viewer-modules-ds/viewer-modules-ds-core/src/main/java/xyz/thoughtset/viewer/modules/ds/core/factory/ExecutorManager.java b/modules/viewer-modules-ds/viewer-modules-ds-core/src/main/java/xyz/thoughtset/viewer/modules/ds/core/factory/ExecutorManager.java index 6ba51d0..6fae2fa 100644 --- a/modules/viewer-modules-ds/viewer-modules-ds-core/src/main/java/xyz/thoughtset/viewer/modules/ds/core/factory/ExecutorManager.java +++ b/modules/viewer-modules-ds/viewer-modules-ds-core/src/main/java/xyz/thoughtset/viewer/modules/ds/core/factory/ExecutorManager.java @@ -8,6 +8,8 @@ import xyz.thoughtset.viewer.common.connector.entity.bo.Linker; import xyz.thoughtset.viewer.common.connector.linker.ConnBuilder; import xyz.thoughtset.viewer.common.connector.linker.LinkerBuilder; import xyz.thoughtset.viewer.common.connector.linker.LinkerHelper; +import xyz.thoughtset.viewer.common.exc.entity.ExcInfo; +import xyz.thoughtset.viewer.common.exc.exceptions.ExecException; import xyz.thoughtset.viewer.executor.core.base.AbstractExecutor; import xyz.thoughtset.viewer.executor.core.base.DataContext; import xyz.thoughtset.viewer.executor.core.constants.TypeConstants; @@ -55,7 +57,17 @@ public class ExecutorManager { DsConfig dsConfig = dsConfigDao.selectById(queryBody.getDsId()); ConnBuilder connBuilder = connectFactory.findConnBuilder(dsConfig); AbstractExecutor executor = ExecutorRegistry.findExecutor(connBuilder.getDataLinker().getLinkerType()); - return executor.execute(queryBody,paramsMap); + try{ + return executor.execute(queryBody,paramsMap); + }catch (ExecException e){ + throw e; + }catch (Exception e){ + ExecException exc = ExcInfo.buildAndThrowExc(e,paramsMap); + ExcInfo excInfo = exc.getExcInfo(); + excInfo.setFunId(bodyId); + throw exc; + } + } } diff --git a/modules/viewer-modules-setting/src/main/java/xyz/thoughtset/viewer/modules/setting/ModuleSettingAutoConfiguration.java b/modules/viewer-modules-setting/src/main/java/xyz/thoughtset/viewer/modules/setting/ModuleSettingAutoConfiguration.java index fad95ca..2116c2a 100644 --- a/modules/viewer-modules-setting/src/main/java/xyz/thoughtset/viewer/modules/setting/ModuleSettingAutoConfiguration.java +++ b/modules/viewer-modules-setting/src/main/java/xyz/thoughtset/viewer/modules/setting/ModuleSettingAutoConfiguration.java @@ -8,6 +8,6 @@ import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan @EnableConfigurationProperties -@MapperScan(basePackages = "xyz.thoughtset.viewer.modules.setting") +//@MapperScan(basePackages = "xyz.thoughtset.viewer.modules.setting") public class ModuleSettingAutoConfiguration { } diff --git a/modules/viewer-modules-setting/src/main/java/xyz/thoughtset/viewer/modules/setting/service/EnvVarsServiceImpl.java b/modules/viewer-modules-setting/src/main/java/xyz/thoughtset/viewer/modules/setting/service/EnvVarsServiceImpl.java index 1909766..b212c3f 100644 --- a/modules/viewer-modules-setting/src/main/java/xyz/thoughtset/viewer/modules/setting/service/EnvVarsServiceImpl.java +++ b/modules/viewer-modules-setting/src/main/java/xyz/thoughtset/viewer/modules/setting/service/EnvVarsServiceImpl.java @@ -19,7 +19,7 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -@Service +//@Service @Transactional public class EnvVarsServiceImpl extends BaseServiceImpl implements EnvVarsService { private static final String TARGET_DATA_KEY = "payload"; diff --git a/modules/viewer-modules-step/src/main/java/xyz/thoughtset/viewer/modules/step/executor/SimpleBlockExecutor.java b/modules/viewer-modules-step/src/main/java/xyz/thoughtset/viewer/modules/step/executor/SimpleBlockExecutor.java index 0ef8748..710bc8c 100644 --- a/modules/viewer-modules-step/src/main/java/xyz/thoughtset/viewer/modules/step/executor/SimpleBlockExecutor.java +++ b/modules/viewer-modules-step/src/main/java/xyz/thoughtset/viewer/modules/step/executor/SimpleBlockExecutor.java @@ -7,6 +7,8 @@ import org.springframework.expression.spel.support.StandardEvaluationContext; import org.springframework.stereotype.Component; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; +import xyz.thoughtset.viewer.common.exc.entity.ExcInfo; +import xyz.thoughtset.viewer.common.exc.exceptions.ExecException; import xyz.thoughtset.viewer.modules.ds.core.factory.ExecutorManager; import xyz.thoughtset.viewer.modules.step.entity.BlockParam; import xyz.thoughtset.viewer.modules.step.entity.QueryBlock; @@ -28,7 +30,17 @@ public class SimpleBlockExecutor { Map contentMap = new HashMap(params); List blocks = queryBlockService.listByPId(apiId); for (QueryBlock block : blocks) { - Object queryResult = blockQuery(block,contentMap); + Object queryResult; + try{ + queryResult = blockQuery(block,contentMap); + }catch (ExecException e){ + throw e.addApiId(apiId); + }catch (Exception e){ + ExecException exc = ExcInfo.buildAndThrowExc(e,params); + exc.addBlockId(block.getId()); + exc.addApiId(apiId); + throw exc; + } String key = block.getTitle(); Object val = queryResult; if (block.resultWasSingle() && !ObjectUtils.isEmpty(queryResult)){ diff --git a/pom.xml b/pom.xml index 9067546..c06edd1 100644 --- a/pom.xml +++ b/pom.xml @@ -222,6 +222,11 @@ viewer-common-envvar ${revision} + + xyz.thoughtset.viewer + viewer-common-exc + ${revision} + xyz.thoughtset.viewer viewer-modules-ds-http-core -- Gitee