diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml index 317b368..11ad870 100644 --- a/yudao-dependencies/pom.xml +++ b/yudao-dependencies/pom.xml @@ -628,10 +628,15 @@ org.jeecgframework.jimureport jimureport-spring-boot3-starter-fastjson2 ${jimureport.version} + + + org.jeecgframework.jimureport + jimubi-spring-boot3-starter + ${jimureport.version} - com.alibaba - druid + com.github.jsqlparser + jsqlparser diff --git a/yudao-gateway/src/main/resources/application.yaml b/yudao-gateway/src/main/resources/application.yaml new file mode 100644 index 0000000..b689bb8 --- /dev/null +++ b/yudao-gateway/src/main/resources/application.yaml @@ -0,0 +1,242 @@ +spring: + application: + name: gateway-server + + profiles: + active: local + + main: + allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。 + + config: + import: + - optional:classpath:application-${spring.profiles.active}.yaml # 加载【本地】配置 + - optional:nacos:${spring.application.name}-${spring.profiles.active}.yaml # 加载【Nacos】的配置 + + cloud: + # Spring Cloud Gateway 配置项,对应 GatewayProperties 类 + gateway: + # 路由配置项,对应 RouteDefinition 数组 + routes: + ## system-server 服务 + - id: system-admin-api # 路由的编号 + uri: grayLb://system-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/system/** + filters: + - RewritePath=/admin-api/system/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs + - id: system-app-api # 路由的编号 + uri: grayLb://system-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/app-api/system/** + filters: + - RewritePath=/app-api/system/v3/api-docs, /v3/api-docs + ## infra-server 服务 + - id: infra-admin-api # 路由的编号 + uri: grayLb://infra-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/infra/** + filters: + - RewritePath=/admin-api/infra/v3/api-docs, /v3/api-docs + - id: infra-app-api # 路由的编号 + uri: grayLb://infra-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/app-api/infra/** + filters: + - RewritePath=/app-api/infra/v3/api-docs, /v3/api-docs + - id: infra-spring-boot-admin # 路由的编号(Spring Boot Admin) + uri: grayLb://infra-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin/** + - id: infra-websocket # 路由的编号(WebSocket) + uri: grayLb://infra-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/infra/ws/** + ## member-server 服务 + - id: member-admin-api # 路由的编号 + uri: grayLb://member-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/member/** + filters: + - RewritePath=/admin-api/member/v3/api-docs, /v3/api-docs + - id: member-app-api # 路由的编号 + uri: grayLb://member-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/app-api/member/** + filters: + - RewritePath=/app-api/member/v3/api-docs, /v3/api-docs + ## bpm-server 服务 + - id: bpm-admin-api # 路由的编号 + uri: grayLb://bpm-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/bpm/** + filters: + - RewritePath=/admin-api/bpm/v3/api-docs, /v3/api-docs + ## report-server 服务 + - id: report-admin-api # 路由的编号 + uri: grayLb://report-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/report/** + filters: + - RewritePath=/admin-api/report/v3/api-docs, /v3/api-docs + - id: report-jimu # 路由的编号(积木报表) + uri: grayLb://report-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/jmreport/**, /drag/**, /jimubi/** + ## pay-server 服务 + - id: pay-admin-api # 路由的编号 + uri: grayLb://pay-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/pay/** + filters: + - RewritePath=/admin-api/pay/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs + - id: pay-app-api # 路由的编号 + uri: grayLb://pay-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/app-api/pay/** + filters: + - RewritePath=/app-api/pay/v3/api-docs, /v3/api-docs + ## mp-server 服务 + - id: mp-admin-api # 路由的编号 + uri: grayLb://mp-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/mp/** + filters: + - RewritePath=/admin-api/mp/v3/api-docs, /v3/api-docs + ## product-server 服务 + - id: product-admin-api # 路由的编号 + uri: grayLb://product-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/product/** + filters: + - RewritePath=/admin-api/product/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs + - id: product-app-api # 路由的编号 + uri: grayLb://product-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/app-api/product/** + filters: + - RewritePath=/app-api/product/v3/api-docs, /v3/api-docs + ## promotion-server 服务 + - id: promotion-admin-api # 路由的编号 + uri: grayLb://promotion-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/promotion/** + filters: + - RewritePath=/admin-api/promotion/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs + - id: promotion-app-api # 路由的编号 + uri: grayLb://promotion-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/app-api/promotion/** + filters: + - RewritePath=/app-api/promotion/v3/api-docs, /v3/api-docs + ## trade-server 服务 + - id: trade-admin-api # 路由的编号 + uri: grayLb://trade-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/trade/** + filters: + - RewritePath=/admin-api/trade/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs + - id: trade-app-api # 路由的编号 + uri: grayLb://trade-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/app-api/trade/** + filters: + - RewritePath=/app-api/trade/v3/api-docs, /v3/api-docs + ## statistics-server 服务 + - id: statistics-admin-api # 路由的编号 + uri: grayLb://statistics-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/statistics/** + filters: + - RewritePath=/admin-api/statistics/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs + ## erp-server 服务 + - id: erp-admin-api # 路由的编号 + uri: grayLb://erp-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/erp/** + filters: + - RewritePath=/admin-api/erp/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs + ## crm-server 服务 + - id: crm-admin-api # 路由的编号 + uri: grayLb://crm-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/crm/** + filters: + - RewritePath=/admin-api/crm/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs + ## ai-server 服务 + - id: ai-admin-api # 路由的编号 + uri: grayLb://ai-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/ai/** + filters: + - RewritePath=/admin-api/ai/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs + ## iot-server 服务 + - id: iot-admin-api # 路由的编号 + uri: grayLb://iot-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/iot/** + filters: + - RewritePath=/admin-api/iot/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs + x-forwarded: + prefix-enabled: false # 避免 Swagger 重复带上额外的 /admin-api/system 前缀 + +server: + port: 48080 + +logging: + file: + name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径 + +knife4j: + # 聚合 Swagger 文档,参考 https://doc.xiaominfo.com/docs/action/springcloud-gateway 文档 + gateway: + enabled: true + routes: + - name: system-server + service-name: system-server + url: /admin-api/system/v3/api-docs + - name: infra-server + service-name: infra-server + url: /admin-api/infra/v3/api-docs + - name: member-server + service-name: member-server + url: /admin-api/member/v3/api-docs + - name: bpm-server + service-name: bpm-server + url: /admin-api/bpm/v3/api-docs + - name: pay-server + service-name: pay-server + url: /admin-api/pay/v3/api-docs + - name: mp-server + service-name: mp-server + url: /admin-api/mp/v3/api-docs + - name: product-server + service-name: product-server + url: /admin-api/product/v3/api-docs + - name: promotion-server + service-name: promotion-server + url: /admin-api/promotion/v3/api-docs + - name: trade-server + service-name: trade-server + url: /admin-api/trade/v3/api-docs + - name: statistics-server + service-name: statistics-server + url: /admin-api/statistics/v3/api-docs + - name: erp-server + service-name: erp-server + url: /admin-api/erp/v3/api-docs + - name: crm-server + service-name: crm-server + url: /admin-api/crm/v3/api-docs + - name: ai-server + service-name: ai-server + url: /admin-api/ai/v3/api-docs + - name: iot-server + service-name: iot-server + url: /admin-api/iot/v3/api-docs + +--- #################### 芋道相关配置 #################### + +yudao: + info: + version: 1.0.0 \ No newline at end of file diff --git a/yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/framework/jmreport/config/JmReportConfiguration.java b/yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/framework/jmreport/config/JmReportConfiguration.java index 1946d05..49eaa09 100644 --- a/yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/framework/jmreport/config/JmReportConfiguration.java +++ b/yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/framework/jmreport/config/JmReportConfiguration.java @@ -1,13 +1,15 @@ package cn.iocoder.yudao.module.report.framework.jmreport.config; import cn.iocoder.yudao.framework.security.config.SecurityProperties; -import cn.iocoder.yudao.module.system.api.oauth2.OAuth2TokenApi; +import cn.iocoder.yudao.module.report.framework.jmreport.core.service.JmOnlDragExternalServiceImpl; import cn.iocoder.yudao.module.report.framework.jmreport.core.service.JmReportTokenServiceImpl; +import cn.iocoder.yudao.module.system.api.oauth2.OAuth2TokenApi; import cn.iocoder.yudao.module.system.api.permission.PermissionApi; import org.jeecg.modules.jmreport.api.JmReportTokenServiceI; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; /** * 积木报表的配置类 @@ -19,11 +21,16 @@ import org.springframework.context.annotation.Configuration; public class JmReportConfiguration { @Bean - @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") public JmReportTokenServiceI jmReportTokenService(OAuth2TokenApi oAuth2TokenApi, PermissionApi permissionApi, SecurityProperties securityProperties) { return new JmReportTokenServiceImpl(oAuth2TokenApi, permissionApi, securityProperties); } + @Bean // 暂时注释:可以按需实现后打开 + @Primary + public JmOnlDragExternalServiceImpl jmOnlDragExternalService2() { + return new JmOnlDragExternalServiceImpl(); + } + } diff --git a/yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/framework/jmreport/core/service/JmOnlDragExternalServiceImpl.java b/yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/framework/jmreport/core/service/JmOnlDragExternalServiceImpl.java new file mode 100644 index 0000000..a61a42f --- /dev/null +++ b/yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/framework/jmreport/core/service/JmOnlDragExternalServiceImpl.java @@ -0,0 +1,68 @@ +package cn.iocoder.yudao.module.report.framework.jmreport.core.service; + +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import org.jeecg.modules.drag.service.IOnlDragExternalService; +import org.jeecg.modules.drag.vo.DragDictModel; +import org.jeecg.modules.drag.vo.DragLogDTO; + +import java.util.List; +import java.util.Map; + +/** + * {@link IOnlDragExternalService} 实现类,提供积木仪表盘的查询等功能 + * + * 实现可参考: + * 1. jimureport-example + * 2. JeecgBoot 集成 + * + * @author 芋道源码 + */ +@RequiredArgsConstructor +public class JmOnlDragExternalServiceImpl implements IOnlDragExternalService { + + // ========== DictItem 相关 ========== + + @Override + public Map> getManyDictItems(List codeList, List tableDictList) { + return IOnlDragExternalService.super.getManyDictItems(codeList, tableDictList); + } + + @Override + public List getDictItems(String dictCode) { + return IOnlDragExternalService.super.getDictItems(dictCode); + } + + @Override + public List getTableDictItems(String dictTable, String dictText, String dictCode) { + return IOnlDragExternalService.super.getTableDictItems(dictTable, dictText, dictCode); + } + + @Override + public List getCategoryTreeDictItems(List ids) { + return IOnlDragExternalService.super.getCategoryTreeDictItems(ids); + } + + @Override + public List getUserDictItems(List ids) { + return IOnlDragExternalService.super.getUserDictItems(ids); + } + + @Override + public List getDeptsDictItems(List ids) { + return IOnlDragExternalService.super.getDeptsDictItems(ids); + } + + // ========== Log 相关 ========== + + @Override + public void addLog(DragLogDTO dto) { + IOnlDragExternalService.super.addLog(dto); + } + + @Override + public void addLog(String logMsg, int logType, int operateType) { + IOnlDragExternalService.super.addLog(logMsg, logType, operateType); + } + +} diff --git a/yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/framework/security/config/SecurityConfiguration.java b/yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/framework/security/config/SecurityConfiguration.java index d01f50f..02fda64 100644 --- a/yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/framework/security/config/SecurityConfiguration.java +++ b/yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/framework/security/config/SecurityConfiguration.java @@ -30,6 +30,9 @@ public class SecurityConfiguration { registry.requestMatchers("/druid/**").permitAll(); // 积木报表 registry.requestMatchers("/jmreport/**").permitAll(); + // 积木仪表盘 + registry.requestMatchers("/drag/**").permitAll(); + registry.requestMatchers("/jimubi/**").permitAll(); } };