Sfoglia il codice sorgente

Merge branch 'dev-lengfaqiang'

# Conflicts:
#	sckw-modules/sckw-example/src/main/resources/bootstrap-dev.yml
#	sckw-modules/sckw-file/src/main/resouces/bootstrap-dev.yml
lengfaqiang 2 anni fa
parent
commit
5c01cec433
43 ha cambiato i file con 1957 aggiunte e 697 eliminazioni
  1. 43 43
      README.md
  2. 64 0
      pom.xml
  3. 28 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/config/com/sckw/core/web/config/GlobalTransactionalConfig.java
  4. 14 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/constant/HttpStatus.java
  5. 101 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/exceptionHandler/CustomBlockExceptionHandler.java
  6. 0 5
      sckw-common/sckw-common-excel/pom.xml
  7. 35 0
      sckw-modules-api/sckw-file-api/src/main/java/com/sckw/file/api/Fallback/FileApiFeignServiceFallback.java
  8. 4 1
      sckw-modules-api/sckw-file-api/src/main/java/com/sckw/file/api/dubbo/FileApiDubboService.java
  9. 11 0
      sckw-modules/sckw-example/pom.xml
  10. 7 1
      sckw-modules/sckw-example/src/main/java/com/sckw/example/ExampleApplication.java
  11. 137 131
      sckw-modules/sckw-example/src/main/java/com/sckw/example/controller/FileApiController.java
  12. 175 130
      sckw-modules/sckw-example/src/main/java/com/sckw/example/controller/SysUserController.java
  13. 31 31
      sckw-modules/sckw-example/src/main/java/com/sckw/example/dao/SysUserDao.java
  14. 0 24
      sckw-modules/sckw-example/src/main/java/com/sckw/example/dubbo/FileServiceImpl.java
  15. 36 36
      sckw-modules/sckw-example/src/main/java/com/sckw/example/service/SysUserService.java
  16. 1 1
      sckw-modules/sckw-example/src/main/resources/banner.txt
  17. 95 1
      sckw-modules/sckw-example/src/main/resources/bootstrap-dev.yml
  18. 150 0
      sckw-modules/sckw-example/src/main/resources/bootstrap-local.yml
  19. 2 2
      sckw-modules/sckw-example/src/main/resources/bootstrap.yml
  20. 22 0
      sckw-modules/sckw-file/pom.xml
  21. 1 0
      sckw-modules/sckw-file/src/main/java/com/sckw/file/FileApplication.java
  22. 11 9
      sckw-modules/sckw-file/src/main/java/com/sckw/file/common/enums/FileEnum.java
  23. 9 9
      sckw-modules/sckw-file/src/main/java/com/sckw/file/controller/FileApiController.java
  24. 48 0
      sckw-modules/sckw-file/src/main/java/com/sckw/file/dao/KwsFileInfoDao.java
  25. 85 0
      sckw-modules/sckw-file/src/main/java/com/sckw/file/model/FileInfo.java
  26. 53 18
      sckw-modules/sckw-file/src/main/java/com/sckw/file/service/FileService.java
  27. 15 0
      sckw-modules/sckw-file/src/main/java/com/sckw/file/service/dubbo/RemoteUserService1Impl.java
  28. 13 0
      sckw-modules/sckw-file/src/main/java/com/sckw/file/service/feign/FileApiFeignServiceImpl.java
  29. 249 8
      sckw-modules/sckw-file/src/main/java/com/sckw/file/utils/FileUtils.java
  30. 0 27
      sckw-modules/sckw-file/src/main/resouces/bootstrap.yml
  31. 5 0
      sckw-modules/sckw-file/src/main/resources/banner.txt
  32. 151 0
      sckw-modules/sckw-file/src/main/resources/bootstrap-dev.yml
  33. 167 0
      sckw-modules/sckw-file/src/main/resources/bootstrap-local.yml
  34. 10 0
      sckw-modules/sckw-file/src/main/resources/bootstrap.yml
  35. 45 0
      sckw-modules/sckw-file/src/main/resources/logback-spring.xml
  36. 136 0
      sckw-modules/sckw-file/src/main/resources/mapper/KwsFileInfoDao.xml
  37. 1 1
      sckw-modules/sckw-message/src/main/resources/bootstrap.yml
  38. 1 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/SystemApplication.java
  39. 0 130
      sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/SysUserController.java
  40. 0 23
      sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/TestController.java
  41. 0 31
      sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/SysUserDao.java
  42. 0 34
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/SysUserService.java
  43. 1 1
      sckw-modules/sckw-system/src/main/resources/bootstrap.yml

+ 43 - 43
README.md

@@ -17,49 +17,49 @@
 
 ## 技术栈
 
-| 功能          | 本框架                                                                                                     |
-|-------------|---------------------------------------------------------------------------------------------------------|
-| 前端项目        | 基于vue3 + Element UI                                                                                     
-| 后端项目结构      | 采用插件化 + 扩展包形式 结构解耦 易于扩展                                                                                 |
-| *后端代码风格     | 严格遵守Alibaba规范与项目统一配置的代码格式化                                                                              |
-| *分布式注册/配置中心 | 采用 Alibaba Nacos 源码集成便于调试扩展与二次开发 框架还为其增加了各种监控                                                           |
-| *服务网关       | 采用 SpringCloud Gateway 框架扩展了多种功能例如:内网鉴权、请求体缓存、跨域配置、请求响应日志等                                              |
-| *负载均衡       | 采用 SpringCloud Loadbalancer 扩展支持了开发团队路由 便于多团队开发调试                                                       |
-| *RPC远程调用    | 采用 全新 Apache Dubbo 3.X + OpenFeign                                                                      |
-| 分布式限流熔断     | 采用 Alibaba Sentinel 源码集成便于调试扩展与二次开发 框架还为其增加了各种监控                                                        |
-| 分布式事务       | 采用 Alibaba Seata 源码集成对接了Nacos与各种监控 简化了搭建部署流程                                                            |                                                                        |
-| 权限认证        | 采用 Sa-Token、Jwt 静态使用功能齐全 低耦合 高扩展                                                                        |
-| 权限注解        | 采用 Sa-Token 支持注解 登录校验、角色校验、权限校验、二级认证校验、HttpBasic校验、忽略校验角色与权限校验支持多种条件 如 `AND` `OR` 或 `权限 OR 角色` 等复杂表达式   |
-| *关系数据库      | 使用 MySQL                                                                                                |                                    
-| *缓存数据库      | 支持 Redis 5-7 支持大部分新功能特性 如 分布式限流、分布式队列                                                                   |                                      
+| 功能          | 本框架                                                                                                    |
+|-------------|--------------------------------------------------------------------------------------------------------|
+| 前端项目        | 基于vue3 + Element UI                                                                                    
+| 后端项目结构      | 采用插件化 + 扩展包形式 结构解耦 易于扩展                                                                                |
+| *后端代码风格     | 严格遵守Alibaba规范与项目统一配置的代码格式化                                                                             |
+| *分布式注册/配置中心 | 采用 Alibaba Nacos 源码集成便于调试扩展与二次开发 框架还为其增加了各种监控                                                          |
+| *服务网关       | 采用 SpringCloud Gateway 框架扩展了多种功能例如:内网鉴权、请求体缓存、跨域配置、请求响应日志等                                             |
+| *负载均衡       | 采用 SpringCloud Loadbalancer 扩展支持了开发团队路由 便于多团队开发调试                                                      |
+| *RPC远程调用    | 采用 全新 Apache Dubbo 3.X + OpenFeign                                                                     |
+| 分布式限流熔断     | 采用 Alibaba Sentinel 源码集成便于调试扩展与二次开发 框架还为其增加了各种监控                                                       |
+| 分布式事务       | 采用 Alibaba Seata 源码集成对接了Nacos与各种监控 简化了搭建部署流程                                                           |                                                                        |
+| 权限认证        | 采用 Sa-Token、Jwt 静态使用功能齐全 低耦合 高扩展                                                                       |
+| 权限注解        | 采用 Sa-Token 支持注解 登录校验、角色校验、权限校验、二级认证校验、HttpBasic校验、忽略校验角色与权限校验支持多种条件 如 `AND` `OR` 或 `权限 OR 角色` 等复杂表达式  |
+| *关系数据库      | 使用 MySQL                                                                                               |                                    
+| *缓存数据库      | 支持 Redis 5-7 支持大部分新功能特性 如 分布式限流、分布式队列                                                                  |                                      
 | *Redis客户端   | 采用 Redisson Redis官方推荐 基于Netty的客户端工具支持Redis 90%以上的命令 底层优化规避很多不正确的用法 例如: keys被转换为scan支持单机、哨兵、单主集群、多主集群等模式 |                       |
-| *ORM框架      | 采用 Mybatis-Plus 基于对象几乎不用写SQL全java操作 功能强大插件众多例如多租户插件 分页插件 乐观锁插件等等                                        |
-| *数据分页       | 采用 Mybatis-Plus 分页插件框架对其进行了扩展 对象化分页对象 支持多种方式传参 支持前端多排序 复杂排序                                             |
-| 数据权限        | 采用 Mybatis-Plus 插件 自行分析拼接SQL 无感式过滤只需为Mapper设置好注解条件 支持多种自定义 不限于部门角色                                      |
-| *数据脱敏       | 采用 注解 + jackson 序列化期间脱敏 支持不同模块不同的脱敏条件支持多种策略 如身份证、手机号、地址、邮箱、银行卡等 可自行扩展                                   |
-| 数据加解密       | 采用 注解 + mybatis 拦截器 对存取数据期间自动加解密支持多种策略 如BASE64、AES、RSA、SM2、SM4等                                         |         |
-| *多数据源框架     | 采用 dynamic-datasource 支持世面大部分数据库通过yml配置即可动态管理异构不同种类的数据库 也可通过前端页面添加数据源支持spel表达式从请求头参数等条件切换数据源            |
-| *多数据源事务     | 采用 dynamic-datasource 支持多数据源不同种类的数据库事务回滚                                                                |
-| 数据库连接池      | 采用 HikariCP Spring官方内置连接池 配置简单 以性能与稳定性闻名天下/Druid                                                        |
-| *数据库主键      | 采用 雪花ID 基于时间戳的 有序增长 唯一ID 再也不用为分库分表 数据合并主键冲突重复而发愁                                                        |
-| 服务端与前端消息通信  | 援用现有mqtt                                                                                                |
-| *序列化         | 采用 Jackson Spring官方内置序列化 靠谱!!!                                                                          |
-| 分布式任务调度     | 采用 Xxl-Job 天生支持分布式 统一的管理中心                                                                              |
-| 分布式日志中心     | 采用 ELK 业界成熟解决方案 实时收集所有服务的运行日志 快速发现定位问题                                                                  |
-| 分布式搜索引擎     | 采用 ElasticSearch以 Mybatis-Plus 方式操作 ElasticSearch                                                       |
-| *分布式消息队列    | 采用 SpringCloud-Stream + RabbitMQ                                                                        |
-| *文件存储       | 采用 Minio 分布式文件存储 天生支持多机、多硬盘、多分片、多副本存储支持权限管理 安全可靠 文件可加密存储(采用的aliyun-oss)                                 |
-| *短信         | 使用 spring-cloud-alicloud-sms                                                                            |
-| 短链接         | 购买现成产品                                                                                                  |
-| 接口文档        | 援用现有接口文档系统                                                                                              |
-| 校验框架        | 采用 Validation 支持注解与工具类校验 注解支持国际化                                                                        |
-| *Excel框架     | 采用 Alibaba EasyExcel 基于插件化框架对其增加了很多功能 例如 自动合并相同内容 自动排列布局 字典翻译等                                          |
-| *工具类框架       | 采用 Hutool、Lombok 上百种工具覆盖90%的使用需求 基于注解自动生成 get set 等简化框架大量代码                                             |
-| 服务监控框架      | 采用 SpringBoot-Admin 基于SpringBoot官方 actuator 探针机制实时监控服务状态 框架还为其扩展了在线日志查看监控                               |
-| 全方位监控报警     | 采用 Prometheus、Grafana 多样化采集 多模板大屏展示 实时报警监控 提供详细的搭建文档                                                    |
-| 链路追踪        | 采用 Apache SkyWalking 还在为请求不知道去哪了 到哪出了问题而烦恼吗用了它即可实时查看请求经过的每一处每一个节点                                       |
-| 部署方式        | 支持 Docker 编排 一键搭建所有环境 让开发人员从此不再为搭建环境而烦恼                                                                 |
-| 国际化         | 基于请求头动态返回不同语种的文本内容 开发难度低 有对应的工具类 支持大部分注解内容国际化                                                           |
+| *ORM框架      | 采用 Mybatis-Plus 基于对象几乎不用写SQL全java操作 功能强大插件众多例如多租户插件 分页插件 乐观锁插件等等                                       |
+| *数据分页       | 采用 Mybatis-Plus 分页插件框架对其进行了扩展 对象化分页对象 支持多种方式传参 支持前端多排序 复杂排序                                            |
+| 数据权限        | 采用 Mybatis-Plus 插件 自行分析拼接SQL 无感式过滤只需为Mapper设置好注解条件 支持多种自定义 不限于部门角色                                     |
+| *数据脱敏       | 采用 注解 + jackson 序列化期间脱敏 支持不同模块不同的脱敏条件支持多种策略 如身份证、手机号、地址、邮箱、银行卡等 可自行扩展                                  |
+| 数据加解密       | 采用 注解 + mybatis 拦截器 对存取数据期间自动加解密支持多种策略 如BASE64、AES、RSA、SM2、SM4等                                        |         |
+| *多数据源框架     | 采用 dynamic-datasource 支持世面大部分数据库通过yml配置即可动态管理异构不同种类的数据库 也可通过前端页面添加数据源支持spel表达式从请求头参数等条件切换数据源           |
+| *多数据源事务     | 采用 dynamic-datasource 支持多数据源不同种类的数据库事务回滚                                                               |
+| 数据库连接池      | 采用 HikariCP Spring官方内置连接池 配置简单 以性能与稳定性闻名天下/Druid                                                       |
+| *数据库主键      | 采用 雪花ID 基于时间戳的 有序增长 唯一ID 再也不用为分库分表 数据合并主键冲突重复而发愁                                                       |
+| 服务端与前端消息通信  | 援用现有mqtt                                                                                               |
+| *序列化         | 采用 Jackson Spring官方内置序列化 靠谱!!!                                                                         |
+| 分布式任务调度     | 采用 Xxl-Job 天生支持分布式 统一的管理中心                                                                             |
+| 分布式日志中心     | 采用 ELK 业界成熟解决方案 实时收集所有服务的运行日志 快速发现定位问题                                                                 |
+| 分布式搜索引擎     | 采用 ElasticSearch以 Mybatis-Plus 方式操作 ElasticSearch                                                      |
+| *分布式消息队列    | 采用 SpringCloud-Stream + RabbitMQ                                                                       |
+| *文件存储       | 采用 Minio 分布式文件存储 天生支持多机、多硬盘、多分片、多副本存储支持权限管理 安全可靠 文件可加密存储(采用的aliyun-oss)                                |
+| *短信         | 使用 spring-cloud-alicloud-sms                                                                           |
+| 短链接         | 购买现成产品                                                                                                 |
+| 接口文档        | 沿用现有接口文档系统                                                                                             |
+| 校验框架        | 采用 Validation 支持注解与工具类校验 注解支持国际化                                                                       |
+| *Excel框架     | 采用 Alibaba EasyExcel 基于插件化框架对其增加了很多功能 例如 自动合并相同内容 自动排列布局 字典翻译等                                         |
+| *工具类框架       | 采用 Hutool、Lombok 上百种工具覆盖90%的使用需求 基于注解自动生成 get set 等简化框架大量代码                                            |
+| 服务监控框架      | 采用 SpringBoot-Admin 基于SpringBoot官方 actuator 探针机制实时监控服务状态 框架还为其扩展了在线日志查看监控                              |
+| 全方位监控报警     | 采用 Prometheus、Grafana 多样化采集 多模板大屏展示 实时报警监控 提供详细的搭建文档                                                   |
+| 链路追踪        | 采用 Apache SkyWalking 还在为请求不知道去哪了 到哪出了问题而烦恼吗用了它即可实时查看请求经过的每一处每一个节点                                      |
+| 部署方式        | 支持 Docker 编排 一键搭建所有环境 让开发人员从此不再为搭建环境而烦恼                                                                |
+| 国际化         | 基于请求头动态返回不同语种的文本内容 开发难度低 有对应的工具类 支持大部分注解内容国际化                                                          |
 
 ## 系统模块
 
@@ -96,7 +96,7 @@ sckw-service-platform
 │       └── sckw-common-log                     // 日志记录
 │       └── sckw-common-redis                   // 缓存服务
 │       └── sckw-common-message                 // 消息推送服务
-│       └── sckw-common-resource                // 资源包
+│       └── sckw-common-remote                  // 资源包
 │       └── sckw-common-sidecar                 // 多语言微服务异构
 │       └── sckw-common-stream                  // 消息驱动服务
 ~~~

+ 64 - 0
pom.xml

@@ -81,7 +81,18 @@
                 <version>${dubbo.version}</version>
                 <type>pom</type>
                 <scope>import</scope>
+                <exclusions>
+                    <exclusion>
+                        <groupId>com.alibaba</groupId>
+                        <artifactId>hessian-lite</artifactId>
+                    </exclusion>
+                </exclusions>
             </dependency>
+<!--&lt;!&ndash;            处理序列化问题&ndash;&gt;-->
+<!--            <dependency>-->
+<!--                <groupId>com.caucho</groupId>-->
+<!--                <artifactId>hessian</artifactId>-->
+<!--            </dependency>-->
             <!--redisson-->
             <dependency>
                 <groupId>org.redisson</groupId>
@@ -129,6 +140,20 @@
     </dependencyManagement>
 
     <dependencies>
+
+        <!--alibaba oss-->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alicloud-oss</artifactId>
+            <version>2.2.0.RELEASE</version>
+        </dependency>
+        <!--jdk9+ 以上需要手动添加-->
+        <dependency>
+            <groupId>javax.xml.bind</groupId>
+            <artifactId>jaxb-api</artifactId>
+            <version>2.3.1</version>
+        </dependency>
+
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-loadbalancer</artifactId>
@@ -158,6 +183,45 @@
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
         </dependency>
+        <!--SpringCloud-sentinel集成-->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
+        </dependency>
+        <!-- Sentinel Datasource Nacos 持久化存储-->
+        <dependency>
+            <groupId>com.alibaba.csp</groupId>
+            <artifactId>sentinel-datasource-nacos</artifactId>
+<!--            <version>1.8.0</version>-->
+        </dependency>
+        <!-- 注意一定要引入对版本,要引入spring-cloud版本seata,而不是springboot版本的seata-->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
+            <!-- 排除掉springcloud默认的seata版本,以免版本不一致出现问题-->
+            <exclusions>
+                <exclusion>
+                    <groupId>io.seata</groupId>
+                    <artifactId>seata-spring-boot-starter</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>io.seata</groupId>
+                    <artifactId>seata-all</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <!-- 上面排除掉了springcloud默认seata版本,此处引入和seata-server版本对应的seata包-->
+        <dependency>
+            <groupId>io.seata</groupId>
+            <artifactId>seata-spring-boot-starter</artifactId>
+            <version>1.6.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.tomcat.embed</groupId>
+            <artifactId>tomcat-embed-core</artifactId>
+            <version>10.1.7</version>
+        </dependency>
     </dependencies>
     <build>
         <plugins>

+ 28 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/config/com/sckw/core/web/config/GlobalTransactionalConfig.java

@@ -0,0 +1,28 @@
+package com.sckw.core.web.config.com.sckw.core.web.config;
+
+import io.seata.spring.annotation.AspectTransactionalInterceptor;
+import org.springframework.aop.Advisor;
+import org.springframework.aop.aspectj.AspectJExpressionPointcut;
+import org.springframework.aop.support.DefaultPointcutAdvisor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author lfdc
+ * @description 全局事务bean
+ * @date 2023/6/15 0015
+ */
+@Component
+public class GlobalTransactionalConfig {
+    @Bean
+    public AspectTransactionalInterceptor aspectTransactionalInterceptor () {
+        return new AspectTransactionalInterceptor();
+    }
+
+    @Bean
+    public Advisor txAdviceAdvisor(AspectTransactionalInterceptor aspectTransactionalInterceptor ) {
+        AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
+        pointcut.setExpression("配置切点表达式使全局事务拦截器生效");
+        return new DefaultPointcutAdvisor(pointcut, aspectTransactionalInterceptor);
+    }
+}

+ 14 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/constant/HttpStatus.java

@@ -38,6 +38,20 @@ public class HttpStatus {
     public static final int CODE_60607 = 60607;
     public static final int CODE_60608 = 60608;
     public static final int CODE_60609 = 60609;
+    /**sentinel异常code定义*/
+    public static final int CODE_60701 = 60701;
+    public static final int CODE_60801 = 60801;
+    public static final int CODE_60901 = 60901;
+    public static final int CODE_601001 = 601001;
+    public static final int CODE_601101 = 601101;
+    public static final int CODE_601201 = 601201;
+
+    public static final String FLOW_EXCEPTION_ERROR_MESSAGE = "您的访问过于频繁,请稍后重试";
+    public static final String DEGRADE_EXCEPTION_ERROR_MESSAGE = "调用服务响应异常,请稍后重试";
+    public static final String PARAM_FLOW_EXCEPTION_ERROR_MESSAGE = "您对热点参数访问过于频繁,请稍后重试";
+    public static final String SYSTEM_BLOCK_EXCEPTION_ERROR_MESSAGE = "已触碰系统的红线规则,请检查访问参数";
+    public static final String AUTHORITY_EXCEPTION_ERROR_MESSAGE = "授权规则检测不同,请检查访问参数";
+    public static final String OTHER_EXCEPTION_ERROR_MESSAGE = "非法访问,请稍后重试";
 
     /**版本号和接口版本不对称状态码*/
     public static final int VERSION_NOT_NEWEST_CODE = 60700;

+ 101 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/exceptionHandler/CustomBlockExceptionHandler.java

@@ -0,0 +1,101 @@
+package com.sckw.core.web.exceptionHandler;
+
+import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.BlockExceptionHandler;
+import com.alibaba.csp.sentinel.slots.block.BlockException;
+import com.alibaba.csp.sentinel.slots.block.authority.AuthorityException;
+import com.alibaba.csp.sentinel.slots.block.degrade.DegradeException;
+import com.alibaba.csp.sentinel.slots.block.flow.FlowException;
+import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowException;
+import com.alibaba.csp.sentinel.slots.system.SystemBlockException;
+import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.response.HttpResult;
+import jakarta.annotation.PostConstruct;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author lfdc
+ * @version 1.0
+ * @className CustomBlockExceptionHandler
+ * @description 自定义sentinel异常Handler
+ * @company sckw
+ * @date 2023-06-08 09:06:59
+ */
+@Slf4j
+@Configuration
+public class CustomBlockExceptionHandler implements BlockExceptionHandler {
+    HttpResult httpResult = null;
+    @Override
+    public void handle(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse, BlockException e) throws Exception {
+        log.info("urlBlock.......................");
+        //不同的异常返回不同的提示语
+        //FlowException  //限流异常
+        //DegradeException  //降级异常
+        //ParamFlowException //参数限流异常
+        //SystemBlockException //系统负载异常
+        //AuthorityException //授权异常
+        boolean einstanceof;
+        if (e instanceof FlowException) {
+            httpResult.setCode(HttpStatus.CODE_60701);
+            httpResult.setMsg(HttpStatus.FLOW_EXCEPTION_ERROR_MESSAGE);
+
+        } else if (e instanceof DegradeException) {
+            httpResult.setCode(HttpStatus.CODE_60801);
+            httpResult.setMsg(HttpStatus.DEGRADE_EXCEPTION_ERROR_MESSAGE);
+
+        } else if (e instanceof ParamFlowException) {
+            httpResult.setCode(HttpStatus.CODE_60901);
+            httpResult.setMsg(HttpStatus.PARAM_FLOW_EXCEPTION_ERROR_MESSAGE);
+
+        } else if (e instanceof SystemBlockException) {
+            httpResult.setCode(HttpStatus.CODE_601001);
+            httpResult.setMsg(HttpStatus.SYSTEM_BLOCK_EXCEPTION_ERROR_MESSAGE);
+        } else if (e instanceof AuthorityException) {
+            httpResult.setCode(HttpStatus.CODE_601101);
+            httpResult.setMsg(HttpStatus.AUTHORITY_EXCEPTION_ERROR_MESSAGE);
+        } else {
+            //其他规则
+            httpResult.setCode(HttpStatus.CODE_601201);
+            httpResult.setMsg(HttpStatus.OTHER_EXCEPTION_ERROR_MESSAGE);
+        }
+    }
+
+    public static HttpResult sentinelFlowBlock(BlockException ex){
+        log.info("flowException ERROR:{}",ex.getRule(),ex);
+        return HttpResult.error(HttpStatus.CODE_60701, HttpStatus.FLOW_EXCEPTION_ERROR_MESSAGE);
+    }
+
+    public static HttpResult sentinelDegradeBlock(BlockException ex){
+//        log.info("sentinelDegradeDemo进入熔断");
+        log.info("degradeException ERROR:{}",ex.getRule(),ex);
+        return HttpResult.error(HttpStatus.CODE_60801, HttpStatus.DEGRADE_EXCEPTION_ERROR_MESSAGE);
+    }
+
+    public static HttpResult sentinelParamFlowBlock(BlockException ex){
+        log.info("paramFlowException ERROR:{}",ex.getRule(),ex);
+        return HttpResult.error(HttpStatus.CODE_60901, HttpStatus.PARAM_FLOW_EXCEPTION_ERROR_MESSAGE);
+    }
+
+    public static HttpResult sentinelSystemBlock(BlockException ex){
+        log.info("systemException ERROR:{}",ex.getRule(),ex);
+        return HttpResult.error(HttpStatus.CODE_601001, HttpStatus.SYSTEM_BLOCK_EXCEPTION_ERROR_MESSAGE);
+    }
+
+    public static HttpResult sentinelAuthorityBlock(BlockException ex){
+        log.info("authorityException ERROR:{}",ex.getRule(),ex);
+        return HttpResult.error(HttpStatus.CODE_601101,HttpStatus.AUTHORITY_EXCEPTION_ERROR_MESSAGE);
+    }
+
+
+    public static HttpResult sentinelOtherBlock(BlockException ex){
+        log.info("otherException ERROR:{}",ex.getRule(),ex);
+        return HttpResult.error(HttpStatus.CODE_601201, HttpStatus.OTHER_EXCEPTION_ERROR_MESSAGE);
+    }
+
+    @PostConstruct
+    public void init() {
+        new CustomBlockExceptionHandler();
+    }
+}

+ 0 - 5
sckw-common/sckw-common-excel/pom.xml

@@ -66,11 +66,6 @@
             <groupId>org.springframework</groupId>
             <artifactId>spring-web</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.apache.tomcat.embed</groupId>
-            <artifactId>tomcat-embed-core</artifactId>
-            <version>10.1.7</version>
-        </dependency>
         <dependency>
             <groupId>commons-io</groupId>
             <artifactId>commons-io</artifactId>

+ 35 - 0
sckw-modules-api/sckw-file-api/src/main/java/com/sckw/file/api/Fallback/FileApiFeignServiceFallback.java

@@ -0,0 +1,35 @@
+//package com.sckw.file.api.Fallback;
+//
+//import com.sckw.core.web.response.HttpResult;
+//import com.sckw.file.api.feign.FileApiFeignService;
+//import org.springframework.stereotype.Component;
+//import org.springframework.web.multipart.MultipartFile;
+//
+//import java.util.Map;
+//
+///**
+// * @author lfdc
+// * @version 1.0
+// * @className FileApiFeignServiceFallback
+// * @description 降级
+// * @company sckw
+// * @date 2023-06-06 16:06:48
+// */
+//@Component
+//public class FileApiFeignServiceFallback implements FileApiFeignService {
+//
+//    @Override
+//    public HttpResult fileFeignUpload(MultipartFile file) {
+//        return new HttpResult();
+//    }
+//
+//    @Override
+//    public String fileFeignDemo(String userName) {
+//        return "fileFeignDemo";
+//    }
+//
+//    @Override
+//    public String fileFeignDemo1(Map<String, String> map) {
+//        return "fileFeignDemo1";
+//    }
+//}

+ 4 - 1
sckw-modules-api/sckw-file-api/src/main/java/com/sckw/file/api/dubbo/FileApiDubboService.java

@@ -1,6 +1,7 @@
 package com.sckw.file.api.dubbo;
 
 import com.sckw.core.web.response.HttpResult;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * @author lfdc
@@ -12,5 +13,7 @@ import com.sckw.core.web.response.HttpResult;
  */
 public interface FileApiDubboService {
 
-    HttpResult fileUpload(String contentType, String oFileName, byte[] bytes);
+    HttpResult fileUpload(String str, byte[] fileByte);
+
+    HttpResult fileUploadTodubbo(MultipartFile file);
 }

+ 11 - 0
sckw-modules/sckw-example/pom.xml

@@ -121,4 +121,15 @@
 
 
     </dependencies>
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/java</directory>
+                <includes>
+                    <include>**/*.xml</include>
+                </includes>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+    </build>
 </project>

+ 7 - 1
sckw-modules/sckw-example/src/main/java/com/sckw/example/ExampleApplication.java

@@ -15,6 +15,12 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
 public class ExampleApplication {
 
     public static void main(String[] args) {
-        SpringApplication.run(ExampleApplication.class, args);
+        // 关闭nacos日志
+        System.setProperty("nacos.logging.default.config.enabled", "false");
+        try {
+            SpringApplication.run(ExampleApplication.class, args);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
     }
 }

+ 137 - 131
sckw-modules/sckw-example/src/main/java/com/sckw/example/controller/FileApiController.java

@@ -1,131 +1,137 @@
-package com.sckw.example.controller;
-
-import com.sckw.core.web.response.HttpResult;
-import com.sckw.example.service.FileService;
-import com.sckw.file.api.dubbo.FileApiDubboService;
-import com.sckw.file.api.feign.FileApiFeignService;
-import lombok.AllArgsConstructor;
-import org.apache.dubbo.config.annotation.DubboReference;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author lfdc
- * @version 1.0
- * @className FileApiController
- * @description alibaba-oss测试用例
- * z
- * @company sckw
- * @date 2023-06-02 16:06:43
- */
-@RestController
-@RequestMapping("/file")
-@AllArgsConstructor
-public class FileApiController {
-
-    @Autowired
-    private FileApiFeignService fileApiFeignService;
-
-    @DubboReference(version = "2.0.0", group = "design", check = false)
-    private FileApiDubboService fileApiDubboService;
-
-    @Autowired
-    private FileService fileService;
-
-    /**
-     * 上传文件至OSS
-     *
-     * @param file
-     * @return
-     */
-    @RequestMapping(value = "/fileUpload", method = RequestMethod.POST)
-    public HttpResult fileUpload(@RequestParam("file") MultipartFile file) {
-        //获取上传文件
-        String url = fileService.uploadFile(file);
-        return HttpResult.ok(url);
-
-    }
-
-    /**
-     * OSS下载文件/获取文件地址
-     *
-     * @return
-     */
-    @GetMapping("/fileDownload")
-    public HttpResult fileDownload() {
-        String fileName = "测试=JPEG.webp";
-        //获取上传文件
-        String url = fileService.fileDownload(fileName);
-        return HttpResult.ok(url);
-    }
-
-
-    /**
-     * 基于feign调用
-     *
-     * @param file
-     * @return
-     */
-    @RequestMapping (value = "/fileFeignUpload",method = RequestMethod.POST)
-    public HttpResult fileFeignUpload(@RequestParam("file") MultipartFile file) {
-        //example 服务 调用 file服务提供的feign接口
-        HttpResult result = fileApiFeignService.fileFeignUpload(file);
-        return result;
-    }
-
-    /**
-     * 基于feign调用
-     *
-     * @param
-     * @return
-     */
-    @RequestMapping (value = "/fileFeignDemo",method = RequestMethod.GET)
-    //@RequestParam("file") MultipartFile file
-    public String fileFeignDemo() {
-        //example 服务 调用 file服务提供的feign接口
-        return fileApiFeignService.fileFeignDemo("userName");
-    }
-
-    /**
-     * 基于feign调用
-     *
-     * @param
-     * @return
-     */
-    @RequestMapping (value = "/fileFeignDemo1",method = RequestMethod.POST)
-    public String fileFeignDemo1() {
-       Map<String, String> map = new HashMap<>();
-        map.put("123","456");
-        map.put("asd","asd");
-        return fileApiFeignService.fileFeignDemo1(map);
-    }
-
-
-    /**
-     * 基于dubbo调用
-     *
-     * @param file
-     * @return
-     */
-    @GetMapping("fileDubboUpload")
-    public HttpResult fileDubboUpload(@RequestParam("file") MultipartFile file) throws IOException {
-        // 调用 file服务提供的dubbo接口
-        //需要将文件转换成byte否则为空
-        //获取文件类型
-        String contentType = file.getContentType();
-        //获取上传文件的原始文件名
-        String oFileName = file.getOriginalFilename();
-        //把文件转化成byte[]
-        byte[] bytes = file.getBytes();
-
-        HttpResult result = fileApiDubboService.fileUpload(contentType,oFileName,bytes);
-        return result;
-    }
-
-
-}
+//package com.sckw.example.controller;
+//
+//import com.sckw.core.web.response.HttpResult;
+//import com.sckw.example.service.FileService;
+//import com.sckw.file.api.dubbo.FileApiDubboService;
+//import com.sckw.file.api.feign.FileApiFeignService;
+//import lombok.AllArgsConstructor;
+//import org.apache.dubbo.config.annotation.DubboReference;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.web.bind.annotation.*;
+//import org.springframework.web.multipart.MultipartFile;
+//
+//import java.io.IOException;
+//import java.util.HashMap;
+//import java.util.Map;
+//
+///**
+// * @author lfdc
+// * @version 1.0
+// * @className FileApiController
+// * @description alibaba-oss测试用例
+// * z
+// * @company sckw
+// * @date 2023-06-02 16:06:43
+// */
+//@RestController
+//@RequestMapping("/file")
+//@AllArgsConstructor
+//public class FileApiController {
+//
+//    @Autowired
+//    private FileApiFeignService fileApiFeignService;
+//
+//    @DubboReference(version = "2.0.0", group = "design", check = false)
+//    private FileApiDubboService fileApiDubboService;
+//
+//    @Autowired
+//    private FileService fileService;
+//
+//    /**
+//     * 上传文件至OSS
+//     *
+//     * @param file
+//     * @return
+//     */
+//    @RequestMapping(value = "/fileUpload", method = RequestMethod.POST)
+//    public HttpResult fileUpload(@RequestParam("file") MultipartFile file) {
+//        //获取上传文件
+//        String url = fileService.uploadFile(file);
+//        return HttpResult.ok(url);
+//
+//    }
+//
+//    /**
+//     * OSS下载文件/获取文件地址
+//     *
+//     * @return
+//     */
+//    @GetMapping("/fileDownload")
+//    public HttpResult fileDownload() {
+//        String fileName = "测试=JPEG.webp";
+//        //获取上传文件
+//        String url = fileService.fileDownload(fileName);
+//        return HttpResult.ok(url);
+//    }
+//
+//
+//    /**
+//     * 基于feign调用
+//     *
+//     * @param file
+//     * @return
+//     */
+//    @RequestMapping(value = "/fileFeignUpload", method = RequestMethod.POST)
+//    public HttpResult fileFeignUpload(@RequestParam("file") MultipartFile file) {
+//        //example 服务 调用 file服务提供的feign接口
+//        HttpResult result = fileApiFeignService.fileFeignUpload(file);
+//        return result;
+//    }
+//
+//    /**
+//     * 基于feign调用
+//     *
+//     * @param
+//     * @return
+//     */
+//    @RequestMapping(value = "/fileFeignDemo", method = RequestMethod.GET)
+//    //@RequestParam("file") MultipartFile file
+//    public String fileFeignDemo() {
+//        //example 服务 调用 file服务提供的feign接口
+//        return fileApiFeignService.fileFeignDemo("userName");
+//    }
+//
+//    /**
+//     * 基于feign调用
+//     *
+//     * @param
+//     * @return
+//     */
+//    @RequestMapping(value = "/fileFeignDemo1", method = RequestMethod.POST)
+//    public String fileFeignDemo1() {
+//        Map<String, String> map = new HashMap<>();
+//        map.put("123", "456");
+//        map.put("asd", "asd");
+//        return fileApiFeignService.fileFeignDemo1(map);
+//    }
+//
+//
+//    /**
+//     * 基于dubbo调用
+//     *
+//     * @param file
+//     * @return
+//     */
+//    @GetMapping("/fileDubboUpload")
+//    public HttpResult fileDubboUpload(@RequestParam("file") MultipartFile file) throws IOException {
+//        // 调用 file服务提供的dubbo接口
+//        //需要将文件转换成byte否则为空
+//        //获取文件类型
+//        String contentType = file.getContentType();
+//        //获取上传文件的原始文件名
+//        String oFileName = file.getOriginalFilename();
+//        //把文件转化成byte[]
+//        byte[] bytes = file.getBytes();
+////        BigDecimal fileSize = FileUtils.getFileSize(file, "KB");
+////        FileInfo fileInfo = new FileInf0;
+////        fileInfo.setOriginalName(oFileName);
+////        //获取文件后缀
+////        fileInfo.setFileSuffix(FilenameUtils.getExtension(oFileName));
+////        fileInfo.setFileSize(StringUtils.isBlank(fileSize) ? new BigDecimal("0") : fileSize);
+////        HttpResult result = fileApiDubboService.fileUpload(JSONObject.toJSONString(fileInfo), bytes);
+//        HttpResult result = fileApiDubboService.fileUploadTodubbo(file);
+//        return result;
+//    }
+//
+//
+//}

+ 175 - 130
sckw-modules/sckw-example/src/main/java/com/sckw/example/controller/SysUserController.java

@@ -1,130 +1,175 @@
-package com.sckw.example.controller;
-
-import cn.hutool.core.lang.UUID;
-import com.alibaba.fastjson2.JSON;
-import com.sckw.core.model.page.PageResult;
-import com.sckw.core.web.response.HttpResult;
-import com.sckw.example.model.SysUser;
-import com.sckw.example.model.TestSensitive;
-import com.sckw.example.service.SysUserService;
-import com.sckw.stream.enums.SmsCodeEnum;
-import com.sckw.stream.model.SckwMessage;
-import com.sckw.stream.model.SckwSms;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.redisson.api.RBucket;
-import org.redisson.api.RedissonClient;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cloud.stream.function.StreamBridge;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Slf4j
-@AllArgsConstructor
-@RestController
-@RequestMapping("/")
-public class SysUserController {
-
-    @Autowired
-    SysUserService sysUserService;
-
-    @Autowired
-    RedissonClient redissonClient;
-
-    /*@Autowired
-    RedisService redisService;*/
-
-    @GetMapping("index")
-    public Object test(){
-        Map result = new HashMap();
-        result.put("user", System.currentTimeMillis());
-        result.put("datatime", System.currentTimeMillis());
-        result.put("database", "redis");
-
-        RBucket<Object> mytest = redissonClient.getBucket("mytest");
-        mytest.set("value");
-        System.out.println(mytest.get());//value
-        mytest.set("value2");
-        System.out.println(mytest.get());//value2
-        boolean b = mytest.compareAndSet("value2", result); //true
-        System.out.println(mytest.get());//value3
-        Object resultObj = mytest.get();
-
-        /*result.put("type", "spring boot");
-        redisService.setCacheMap("value2", result);
-        resultObj = redisService.getCacheMap("value2");*/
-
-        return String.valueOf(resultObj);
-    }
-
-    //@Override
-    public String getUserInfo(String account) {
-        return account + String.valueOf(new Date());
-    }
-
-    @PostMapping("findByAccount")
-    public HttpResult findByAccount(HashMap params) {
-        List<SysUser> data = sysUserService.findByAccount(params);
-        return HttpResult.ok(data);
-    }
-
-    @PostMapping("findPage")
-    public HttpResult findPage(Map<String, Object> params) {
-        PageResult pageResult = sysUserService.findPage(params);
-        return HttpResult.ok(pageResult);
-    }
-
-    @GetMapping("/testSensitive")
-    public HttpResult testSensitive() {
-        TestSensitive testSensitive = new TestSensitive();
-        testSensitive.setIdCard("210397198608215431");
-        testSensitive.setPhone("17640125371");
-        testSensitive.setAddress("北京市朝阳区某某四合院1203室");
-        testSensitive.setEmail("17640125371@163.com");
-        testSensitive.setBankCard("6226456952351452853");
-        return HttpResult.ok(testSensitive);
-    }
-
-    @Resource
-    private StreamBridge streamBridge;
-
-    @GetMapping("/pushMesg")
-    public HttpResult pushMesg() {
-        String uuid = UUID.fastUUID().toString();
-        SckwSms sckwSms = new SckwSms();
-        sckwSms.setTelephone("17358629955");
-        sckwSms.setSignName("矿拉拉");
-        sckwSms.setTemplateCode(SmsCodeEnum.VERIFICATION_CODE);
-        sckwSms.setParams(new HashMap(){{put("code", "123456");}});
-        streamBridge.send("sckw-sms", JSON.toJSONString(sckwSms));
-
-
-        SckwMessage message = new SckwMessage();
-        //person.setName(String.valueOf(System.currentTimeMillis()));
-        message.setMsgUrl("---");
-        message.setPushType("====");
-        message.setClientId("111111111111111");
-        streamBridge.send("sckw-message", JSON.toJSONString(message));
-
-        return HttpResult.ok(uuid);
-    }
-
-    @GetMapping("/pushSms")
-    public HttpResult pushSms() {
-        TestSensitive testSensitive = new TestSensitive();
-        testSensitive.setIdCard("210397198608215431");
-        testSensitive.setPhone("17640125371");
-        testSensitive.setAddress("北京市朝阳区某某四合院1203室");
-        testSensitive.setEmail("17640125371@163.com");
-        testSensitive.setBankCard("6226456952351452853");
-        return HttpResult.ok(testSensitive);
-    }
-}
+//package com.sckw.example.controller;
+//
+//import cn.hutool.core.lang.UUID;
+//import com.alibaba.csp.sentinel.annotation.SentinelResource;
+//import com.alibaba.fastjson2.JSON;
+//import com.sckw.core.model.page.PageResult;
+//import com.sckw.core.web.exceptionHandler.CustomBlockExceptionHandler;
+//import com.sckw.core.web.response.HttpResult;
+//import com.sckw.example.model.SysUser;
+//import com.sckw.example.model.TestSensitive;
+//import com.sckw.example.service.SysUserService;
+//import com.sckw.stream.enums.SmsCodeEnum;
+//import com.sckw.stream.model.SckwMessage;
+//import com.sckw.stream.model.SckwSms;
+//import lombok.AllArgsConstructor;
+//import lombok.extern.slf4j.Slf4j;
+//import org.redisson.api.RBucket;
+//import org.redisson.api.RedissonClient;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.cloud.stream.function.StreamBridge;
+//import org.springframework.web.bind.annotation.*;
+//
+//import javax.annotation.Resource;
+//import java.util.Date;
+//import java.util.HashMap;
+//import java.util.List;
+//import java.util.Map;
+//
+//@Slf4j
+//@AllArgsConstructor
+//@RestController
+//@RequestMapping("/")
+//public class SysUserController {
+//
+//    @Autowired
+//    SysUserService sysUserService;
+//
+//    @Autowired
+//    RedissonClient redissonClient;
+//
+//    /*@Autowired
+//    RedisService redisService;*/
+//
+//    @GetMapping("index")
+//    public Object test(){
+//        Map result = new HashMap();
+//        result.put("user", System.currentTimeMillis());
+//        result.put("datatime", System.currentTimeMillis());
+//        result.put("database", "redis");
+//
+//        RBucket<Object> mytest = redissonClient.getBucket("mytest");
+//        mytest.set("value");
+//        System.out.println(mytest.get());//value
+//        mytest.set("value2");
+//        System.out.println(mytest.get());//value2
+//        boolean b = mytest.compareAndSet("value2", result); //true
+//        System.out.println(mytest.get());//value3
+//        Object resultObj = mytest.get();
+//
+//        /*result.put("type", "spring boot");
+//        redisService.setCacheMap("value2", result);
+//        resultObj = redisService.getCacheMap("value2");*/
+//
+//        return String.valueOf(resultObj);
+//    }
+//
+//    //@Override
+//    public String getUserInfo(String account) {
+//        return account + String.valueOf(new Date());
+//    }
+//
+//    @PostMapping("findByAccount")
+//    public HttpResult findByAccount(HashMap params) {
+//        List<SysUser> data = sysUserService.findByAccount(params);
+//        return HttpResult.ok(data);
+//    }
+//
+//    @PostMapping("findPage")
+//    public HttpResult findPage(Map<String, Object> params) {
+//        PageResult pageResult = sysUserService.findPage(params);
+//        return HttpResult.ok(pageResult);
+//    }
+//
+//
+//    /**
+//     * 限流测试示例
+//     * @return
+//     */
+//    //value将该方法定义为sentinel的资源,blockHandlerClass指明流控处理的类,blockHandler是流控时调用的方法。
+//    //这里需要注意处理异常的方法必须是静态方法添加static, 并需要添加sentinel的异常参数BlockException。
+//    @RequestMapping(value = "sentinelFlowDemo", method = RequestMethod.GET)
+//    @SentinelResource(value = "sentinelFlowDemo", blockHandlerClass = CustomBlockExceptionHandler.class, blockHandler = "sentinelFlowBlock")
+//    public HttpResult sentinelFlowDemo() {
+//        return HttpResult.ok("sentinelFlowDemo正常返回");
+//    }
+//
+//    /**
+//     * 熔断测试示例
+//     * @param id
+//     * @return
+//     */
+//    @RequestMapping(value = "sentinelDegradeDemo", method = RequestMethod.GET)
+//    @SentinelResource(value = "sentinelDegradeDemo", blockHandlerClass = SysUserController.class, blockHandler = "sentinelDegradeBlock")
+//    public HttpResult sentinelDegradeDemo(@RequestParam("id") String id) {
+//        if ("2".equals(id)){
+//            try {
+//                Thread.sleep(5000);
+//            } catch (InterruptedException e) {
+//                throw new RuntimeException(e);
+//            }
+//        }
+//        return HttpResult.ok("sentinelDegradeDemo正常返回");
+//    }
+//
+////    /**
+////     * 分布式事务示例
+////     * @return
+////     */
+////    @GlobalTransactional
+////    @RequestMapping(value = "/globalTransactionalDemo", method = RequestMethod.GET)
+////    public HttpResult globalTransactionalDemo() {
+////        return HttpResult.ok("globalTransactionalDemo");
+////    }
+//
+//
+//
+//
+//
+//
+//    @GetMapping("/testSensitive")
+//    public HttpResult testSensitive() {
+//        TestSensitive testSensitive = new TestSensitive();
+//        testSensitive.setIdCard("210397198608215431");
+//        testSensitive.setPhone("17640125371");
+//        testSensitive.setAddress("北京市朝阳区某某四合院1203室");
+//        testSensitive.setEmail("17640125371@163.com");
+//        testSensitive.setBankCard("6226456952351452853");
+//        return HttpResult.ok(testSensitive);
+//    }
+//
+//    @Resource
+//    private StreamBridge streamBridge;
+//
+//    @GetMapping("/pushMesg")
+//    public HttpResult pushMesg() {
+//        String uuid = UUID.fastUUID().toString();
+//        SckwSms sckwSms = new SckwSms();
+//        sckwSms.setTelephone("17358629955");
+//        sckwSms.setSignName("矿拉拉");
+//        sckwSms.setTemplateCode(SmsCodeEnum.VERIFICATION_CODE);
+//        sckwSms.setParams(new HashMap(){{put("code", "123456");}});
+//        streamBridge.send("sckw-sms", JSON.toJSONString(sckwSms));
+//
+//
+//        SckwMessage message = new SckwMessage();
+//        //person.setName(String.valueOf(System.currentTimeMillis()));
+//        message.setMsgUrl("---");
+//        message.setPushType("====");
+//        message.setClientId("111111111111111");
+//        streamBridge.send("sckw-message", JSON.toJSONString(message));
+//
+//        return HttpResult.ok(uuid);
+//    }
+//
+//    @GetMapping("/pushSms")
+//    public HttpResult pushSms() {
+//        TestSensitive testSensitive = new TestSensitive();
+//        testSensitive.setIdCard("210397198608215431");
+//        testSensitive.setPhone("17640125371");
+//        testSensitive.setAddress("北京市朝阳区某某四合院1203室");
+//        testSensitive.setEmail("17640125371@163.com");
+//        testSensitive.setBankCard("6226456952351452853");
+//        return HttpResult.ok(testSensitive);
+//    }
+//}

+ 31 - 31
sckw-modules/sckw-example/src/main/java/com/sckw/example/dao/SysUserDao.java

@@ -1,31 +1,31 @@
-package com.sckw.example.dao;
-
-import com.baomidou.dynamic.datasource.annotation.DS;
-import com.sckw.example.model.SysUser;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Select;
-import java.util.List;
-import java.util.Map;
-
-@Mapper
-public interface SysUserDao {
-
-    /**
-     * 账号查询用户信息
-     * @param params {account:账号, systemType:系统类别}
-     * @return
-     */
-    @DS("slave_1")
-    SysUser findByAccount(Map params);
-
-    @DS("master")
-    @Select("SELECT * FROM user limit 1")
-    List<SysUser> findUserByAccount(String account);
-
-    @DS("slave_1")
-    @Select("SELECT * FROM sys_user limit 10")
-    List<Map> findUserByAccount1(String account);
-
-    @DS("slave_1")
-    List<Map<String, Object>> findPage(Map<String, Object> params);
-}
+//package com.sckw.example.dao;
+//
+//import com.baomidou.dynamic.datasource.annotation.DS;
+//import com.sckw.example.model.SysUser;
+//import org.apache.ibatis.annotations.Mapper;
+//import org.apache.ibatis.annotations.Select;
+//import java.util.List;
+//import java.util.Map;
+//
+//@Mapper
+//public interface SysUserDao {
+//
+//    /**
+//     * 账号查询用户信息
+//     * @param params {account:账号, systemType:系统类别}
+//     * @return
+//     */
+//    @DS("slave_1")
+//    SysUser findByAccount(Map params);
+//
+//    @DS("master")
+//    @Select("SELECT * FROM user limit 1")
+//    List<SysUser> findUserByAccount(String account);
+//
+//    @DS("slave_1")
+//    @Select("SELECT * FROM sys_user limit 10")
+//    List<Map> findUserByAccount1(String account);
+//
+//    @DS("slave_1")
+//    List<Map<String, Object>> findPage(Map<String, Object> params);
+//}

+ 0 - 24
sckw-modules/sckw-example/src/main/java/com/sckw/example/dubbo/FileServiceImpl.java

@@ -1,24 +0,0 @@
-package com.sckw.example.dubbo;
-
-import com.sckw.core.web.response.HttpResult;
-import com.sckw.file.api.dubbo.FileApiDubboService;
-import org.apache.dubbo.config.annotation.DubboService;
-
-/**
- * @author lfdc
- * @version 1.0
- * @className FileServiceImpl
- * @description 实现File的dubbo实现类
- * @company sckw
- * @date 2023-06-06 10:06:31
- */
-@DubboService(group = "design", version = "2.0.0")
-public class FileServiceImpl implements FileApiDubboService {
-
-
-    @Override
-    public HttpResult fileUpload(String contentType, String oFileName, byte[] bytes) {
-        System.out.println("文件类型"+contentType+"文件名称"+oFileName+"文件输出流"+bytes);
-        return HttpResult.ok();
-    }
-}

+ 36 - 36
sckw-modules/sckw-example/src/main/java/com/sckw/example/service/SysUserService.java

@@ -1,36 +1,36 @@
-package com.sckw.example.service;
-
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import com.sckw.core.model.page.PageHelperUtil;
-import com.sckw.core.model.page.PageResult;
-import com.sckw.example.dao.SysUserDao;
-import com.sckw.example.model.SysUser;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Slf4j
-@Service
-public class SysUserService {
-
-    @Autowired
-    SysUserDao sysUserDao;
-
-    public List<SysUser> findByAccount(HashMap params) {
-        SysUser sysUser = sysUserDao.findByAccount(params);
-        return new ArrayList<>(){{add(sysUser);}};
-    }
-
-    public PageResult findPage(Map<String, Object> params) {
-        // 设置分页参数
-        PageHelper.startPage(PageResult.getPageNum(params), PageResult.getPageSize(params));
-        List<Map<String, Object>> list = sysUserDao.findPage(params);
-        PageResult pageResult = PageHelperUtil.getPageResult(new PageInfo(list));
-        return pageResult;
-    }
-}
+//package com.sckw.example.service;
+//
+//import com.github.pagehelper.PageHelper;
+//import com.github.pagehelper.PageInfo;
+//import com.sckw.core.model.page.PageHelperUtil;
+//import com.sckw.core.model.page.PageResult;
+//import com.sckw.example.dao.SysUserDao;
+//import com.sckw.example.model.SysUser;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.stereotype.Service;
+//import java.util.ArrayList;
+//import java.util.HashMap;
+//import java.util.List;
+//import java.util.Map;
+//
+//@Slf4j
+//@Service
+//public class SysUserService {
+//
+//    @Autowired
+//    SysUserDao sysUserDao;
+//
+//    public List<SysUser> findByAccount(HashMap params) {
+//        SysUser sysUser = sysUserDao.findByAccount(params);
+//        return new ArrayList<>(){{add(sysUser);}};
+//    }
+//
+//    public PageResult findPage(Map<String, Object> params) {
+//        // 设置分页参数
+//        PageHelper.startPage(PageResult.getPageNum(params), PageResult.getPageSize(params));
+//        List<Map<String, Object>> list = sysUserDao.findPage(params);
+//        PageResult pageResult = PageHelperUtil.getPageResult(new PageInfo(list));
+//        return pageResult;
+//    }
+//}

+ 1 - 1
sckw-modules/sckw-file/src/main/resouces/banner.txt → sckw-modules/sckw-example/src/main/resources/banner.txt

@@ -1,5 +1,5 @@
 ====================================================================================================================
 
-                    欢迎使用 [sckw-file] 开物供应链服务平台-文件服务 - Powered By https://www.xxxx.com
+                    欢迎使用 [sckw-example] 开物供应链服务平台-示例服务 - Powered By https://www.xxxx.com
 
 ====================================================================================================================

+ 95 - 1
sckw-modules/sckw-example/src/main/resources/bootstrap-dev.yml

@@ -6,8 +6,14 @@ spring:
         server-addr: 10.10.10.230:8848
         # 命名空间
         namespace: sckw-service-platform-dev
+        # nacos用户名
+        username: nacos
+        # nacos密码
+        password: nacos
         # 共享配置
         group: sckw-service-platform
+        # 权重 1-100 数值越大权重越大分配的流量就越大,通常结合权重负载均衡策略
+#        weight: 100
       config:
         # 配置中心地址
         server-addr: 10.10.10.230:8848
@@ -19,6 +25,7 @@ spring:
         group: sckw-service-platform
     function:
       definition: sckwSms;sckwMessage
+        enabled: true
     stream:
       binders:
         defaultRabbit:
@@ -61,8 +68,94 @@ spring:
   data:
     mongodb:
       uri: mongodb://sckw:Yy123...@10.10.10.230:27017/sckw?authSource=admin&authMechanism=SCRAM-SHA-1
+      binders:
+        defaultRabbit:
+          type: rabbit
+          environment:
+            spring:
+              rabbitmq:
+                virtual-host: /
+                host: 39.104.134.114
+                port: 5672
+                username: wph
+                password: Yy123...
+# sentinel降级配置
+    sentinel:
+      transport:
+        client-ip: ${spring.cloud.client.ip-address} # 获取本机IP地址
+        port: 8719  #默认8719端口,如果被占用会向上扫描。
+        #控制台地址
+#        dashboard: 47.108.162.14:19527
+        dashboard: 127.0.0.1:19527
+      log:
+        #日志路径
+        dir: logs/sentinel
+        # 默认将调用链路收敛,导致链路流控效果无效
+        web-context-unify: false
+        #持久化nacos配置中
+      datasource:
+#        sentinel-rule: # 唯一名称可自定义
+        #限流
+        flow:
+          nacos:
+            # 设置Nacos的连接地址、命名空间和Group ID
+            namespace:  sckw-service-platform-dev
+            server-addr:  ${spring.cloud.nacos.discovery.server-addr}
+#            username: ${spring.cloud.nacos.discovery.username}
+#            password: ${spring.cloud.nacos.discovery.password}
+            # 设置Nacos中配置文件的命名规则
+#            data-id:  ${spring.application.name}-sentinel-flow-rules
+            data-id:  sckw-example-sentinel-flow-rules
+            group-id: SENTINEL_GROUP
+            data-type: json
+            # 必填的重要字段,指定当前规则类型是"限流"
+            rule-type: flow
+        #熔断
+        degrade:
+          nacos:
+#            namespace:  sckw-service-platform-dev
+            server-addr: ${spring.cloud.nacos.discovery.server-addr}
+#            data-id: ${spring.application.name}-sentinel-degrade-rules
+            data-id: sckw-example-sentinel-degrade-rules
+            group-id: SENTINEL_GROUP
+            #熔断
+            rule-type: degrade
+      #取消慢加载
+      eager: true
+  datasource:
+    dynamic:
+      seata: true
+seata:
+  # seata 服务分组,要与服务端nacos-config.txt中service.vgroup_mapping的后缀对应
+  tx-service-group: example-seata-service-group
+  service:
+    vgroup-mapping:
+      example-seata-service-group: default
+  registry:
+    # 指定nacos作为注册中心
+    type: nacos
+    nacos:
+      server-addr: 127.0.0.1:8848
+#      server-addr: 47.108.162.14:8848
+      namespace: sckw-service-platform-dev
+#      group: SEATA_GROUP
+      group: sckw-service-platform
+
+  config:
+    # 指定nacos作为配置中心
+    type: nacos
+    nacos:
+      server-addr: 127.0.0.1:8848
+#      server-addr: 47.108.162.14:8848
+      namespace: sckw-service-platform-dev
+#      group: SEATA_GROUP
+      group: sckw-service-platform
+  application-id: ${spring.application.name}
+# 支持feign对sentinel支持
+#feign:
+#  sentinel:
+#    enabled: true
 
-# dubbo
 dubbo:
   application:
     # 此处没有延用spring.application.name是因为当前项目本身也会注册到nacos中,如果dubbo也延用相同的名称,在nacos服务里会看到注册的producer-server服务数为2
@@ -70,6 +163,7 @@ dubbo:
   protocol:
     name: dubbo
     port: -1
+    prefer-serialization: java
   registry:
     # 配置dubbo的注册中心为nacos
     address: nacos://${spring.cloud.nacos.discovery.server-addr}

+ 150 - 0
sckw-modules/sckw-example/src/main/resources/bootstrap-local.yml

@@ -0,0 +1,150 @@
+spring:
+  rabbitmq:
+    username: admin
+    password: admin
+    host: 10.10.10.138
+    port: 5672
+    virtual-host: /
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        #        server-addr: 47.108.162.14:8848
+        server-addr: 127.0.0.1:8848
+        # 命名空间
+        namespace: sckw-service-platform-dev
+        # nacos用户名
+        username: nacos
+        # nacos密码
+        password: nacos
+        # 共享配置
+        group: sckw-service-platform
+        # 权重 1-100 数值越大权重越大分配的流量就越大,通常结合权重负载均衡策略
+      #        weight: 100
+      config:
+        # 配置中心地址
+        #        server-addr: 47.108.162.14:8848
+        server-addr: 127.0.0.1:8848
+        # 配置文件格式
+        file-extension: yaml
+        # 命名空间
+        namespace: sckw-service-platform-dev
+        # 共享配置
+        group: sckw-service-platform
+        enabled: true
+    stream:
+      bindings:
+        sckwSms-out-0:
+          destination: sckw-sms
+          content-type: application/json
+          default-binder: defaultRabbit
+          group: sckw
+        sckwMessage-out-0:
+          destination: sckw-message
+          content-type: application/json
+          default-binder: defaultRabbit
+          group: sckw
+      binders:
+        defaultRabbit:
+          type: rabbit
+          environment:
+            spring:
+              rabbitmq:
+                virtual-host: /
+                host: 39.104.134.114
+                port: 5672
+                username: wph
+                password: Yy123...
+    # sentinel降级配置
+    sentinel:
+      transport:
+        client-ip: ${spring.cloud.client.ip-address} # 获取本机IP地址
+        port: 8719  #默认8719端口,如果被占用会向上扫描。
+        #控制台地址
+        #dashboard: 47.108.162.14:19527
+        dashboard: 127.0.0.1:19527
+      log:
+        #日志路径
+        dir: logs/sentinel
+        # 默认将调用链路收敛,导致链路流控效果无效
+        web-context-unify: false
+        #持久化nacos配置中
+      datasource:
+        #sentinel-rule: # 唯一名称可自定义
+        #限流
+        flow:
+          nacos:
+            # 设置Nacos的连接地址、命名空间和Group ID
+            namespace:  sckw-service-platform-dev
+            server-addr:  ${spring.cloud.nacos.discovery.server-addr}
+            # username: ${spring.cloud.nacos.discovery.username}
+            # password: ${spring.cloud.nacos.discovery.password}
+            # 设置Nacos中配置文件的命名规则
+            # data-id:  ${spring.application.name}-sentinel-flow-rules
+            data-id:  sckw-example-sentinel-flow-rules
+            group-id: SENTINEL_GROUP
+            data-type: json
+            # 必填的重要字段,指定当前规则类型是"限流"
+            rule-type: flow
+        #熔断
+        degrade:
+          nacos:
+            namespace:  sckw-service-platform-dev
+            server-addr: ${spring.cloud.nacos.discovery.server-addr}
+            #data-id: ${spring.application.name}-sentinel-degrade-rules
+            data-id: sckw-example-sentinel-degrade-rules
+            group-id: SENTINEL_GROUP
+            #熔断
+            rule-type: degrade
+      #取消慢加载
+      eager: true
+  datasource:
+    dynamic:
+      seata: true
+seata:
+  # seata 服务分组,要与服务端nacos-config.txt中service.vgroup_mapping的后缀对应
+  # 事务分组名称,要和服务端对应
+  tx-service-group: example-seata-group
+  service:
+    vgroup-mapping:
+      # key是事务分组名称 value要和服务端的机房名称保持一致
+      example-seata-group: default
+  registry:
+    # 指定nacos作为注册中心
+    type: nacos
+    nacos:
+      server-addr: ${spring.cloud.nacos.discovery.server-addr}
+      #server-addr: 47.108.162.14:8848
+      namespace: ${spring.cloud.nacos.discovery.namespace}
+      #      group: SEATA_GROUP
+      group: ${spring.cloud.nacos.discovery.group}
+  config:
+    # 指定nacos作为配置中心
+    type: nacos
+    nacos:
+      server-addr: ${spring.cloud.nacos.discovery.server-addr}
+      #server-addr: 47.108.162.14:8848
+      namespace: ${spring.cloud.nacos.discovery.namespace}
+      group: ${spring.cloud.nacos.discovery.group}
+  application-id: ${spring.application.name}
+#  application-id: sckw-seata-file
+# 支持feign对sentinel支持
+#feign:
+#  sentinel:
+#    enabled: true
+
+dubbo:
+  application:
+    # 此处没有延用spring.application.name是因为当前项目本身也会注册到nacos中,如果dubbo也延用相同的名称,在nacos服务里会看到注册的producer-server服务数为2
+    name: example-dubbo-server
+  protocol:
+    name: dubbo
+    port: -1
+    prefer-serialization: java
+  registry:
+    # 配置dubbo的注册中心为nacos
+    address: nacos://${spring.cloud.nacos.discovery.server-addr}
+    group: ${spring.cloud.nacos.config.group}
+    protocol: nacos
+    #use-as-config-center: false
+    #use-as-metadata-center: false

+ 2 - 2
sckw-modules/sckw-example/src/main/resources/bootstrap.yml

@@ -1,10 +1,10 @@
 server:
-  port: 10300
+  port: 10301
 
 spring:
   application:
     name: sckw-example
   profiles:
-    active: ${DEPLOY_MODE:dev}
+    active: ${DEPLOY_MODE:local}
   main:
     allow-bean-definition-overriding: true

+ 22 - 0
sckw-modules/sckw-file/pom.xml

@@ -29,6 +29,11 @@
             <artifactId>sckw-common-remote</artifactId>
             <version>1.0.0</version>
         </dependency>
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-common-core</artifactId>
+            <version>1.0.0</version>
+        </dependency>
         <dependency>
             <groupId>com.sckw</groupId>
             <artifactId>sckw-common-datasource</artifactId>
@@ -39,6 +44,11 @@
             <artifactId>sckw-common-redis</artifactId>
             <version>1.0.0</version>
         </dependency>
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-common-excel</artifactId>
+            <version>1.0.0</version>
+        </dependency>
 
         <dependency>
             <groupId>com.sckw</groupId>
@@ -82,6 +92,18 @@
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-bootstrap</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>3.0.5</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-common-excel</artifactId>
+            <version>1.0.0</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
 </project>

+ 1 - 0
sckw-modules/sckw-file/src/main/java/com/sckw/file/FileApplication.java

@@ -15,6 +15,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
  * @company sckw
  * @date 2023-06-02 17:06:43
  */
+//@MapperScan("com.sckw.file.*.mapper")
 @EnableDubbo
 @EnableFeignClients({"com.sckw.*.api.feign"})
 @EnableDiscoveryClient

+ 11 - 9
sckw-modules/sckw-file/src/main/java/com/sckw/file/common/enums/FileEnum.java

@@ -29,15 +29,17 @@ public enum FileEnum {
     /**
      * 文件存储地址
      */
-    DOCUMENT_ADDRESS("5","/excel", "文件存储地址"),;
-//    /**
-//     * 腾讯云的 OSS
-//     */
-//    TENCENT(4, RegionTencent.values()),
-//    /**
-//     * 百度云的OSS
-//     */
-//    BAIDU(5, RegionBaiDu.values()),
+    DOCUMENT_ADDRESS("5","/excel", "文件存储地址"),
+
+    /**
+     * 文件存储方式-上传oss
+     */
+    FILE_STORE_TYPE_OSS("OSS","OSS","上传OSS"),
+    /**
+     文件存储方式-上传七牛云
+     *
+     */
+    FILE_STORE_TYPE_ALIYUN("kodo","qiniuyun","上传七牛云");
 
     private final String fileType;
     private final String fileAddress;

+ 9 - 9
sckw-modules/sckw-file/src/main/java/com/sckw/file/controller/FileApiController.java

@@ -1,5 +1,6 @@
 package com.sckw.file.controller;
 
+import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.file.service.FileService;
 import lombok.AllArgsConstructor;
@@ -36,9 +37,13 @@ public class FileApiController {
      */
     @RequestMapping(value = "/fileUpload", method = RequestMethod.POST)
     public HttpResult fileUpload(@RequestParam("file") MultipartFile file) {
-        //获取上传文件
-//        String url = fileService.uploadFile(file);
-        return fileService.uploadFile(file);
+        try {
+            //获取上传文件
+            return fileService.uploadFile(file);
+        } catch (Exception e) {
+            log.error("文件上传失败:{}",e.getMessage(),e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE,e.getMessage());
+        }
 
     }
 
@@ -51,21 +56,18 @@ public class FileApiController {
     @RequestMapping(value = "/fileFeignUpload", method = RequestMethod.POST)
     public HttpResult fileFeignUpload(@RequestParam("file") MultipartFile file) {
         //获取上传文件
-//        String url = fileService.uploadFile(file);
         return fileService.uploadFile(file);
 
     }
 
     /**
-     * 上传文件至OSS
-     *
+     * 批量上传文件至OSS
      * @param file
      * @return
      */
     @RequestMapping(value = "/fileUploadList", method = RequestMethod.POST)
     public HttpResult uploadFileList(@RequestParam("file") MultipartFile[] file) {
         //获取上传文件
-//        String url = fileService.uploadFile(file);
         return fileService.uploadFileList(file);
 
     }
@@ -76,8 +78,6 @@ public class FileApiController {
      */
     @GetMapping("/fileDownload")
     public HttpResult fileDownload() {
-//        String fileName = "https://kaiwu-saas.oss-cn-chengdu.aliyuncs.com/kll/uploads/20230605/146288830649995264测试=JPEG.webp";
-//        String fileName = "https://kaiwu-saas.oss-cn-chengdu.aliyuncs.com/kll/uploads/20230605/146325493677821952598454132.jpg";
         String fileName = "https://kaiwu-saas.oss-cn-chengdu.aliyuncs.com/kll/uploads/20230605/14633197602917990420230605demo.txt";
         //获取上传文件
         fileService.fileDownload(fileName);

+ 48 - 0
sckw-modules/sckw-file/src/main/java/com/sckw/file/dao/KwsFileInfoDao.java

@@ -0,0 +1,48 @@
+package com.sckw.file.dao;
+
+import com.sckw.file.model.FileInfo;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author lfdc
+ * @version 1.0
+ * @className KwsFileInfoDao
+ * @description
+ * @company sckw
+ * @date 2023-06-12 17:06:00
+ */
+@Mapper
+public interface KwsFileInfoDao {
+
+    /**
+     * 新增
+     * @param record
+     * @return
+     */
+    int insert(FileInfo record);
+
+    /**
+     * 更新
+     * @param record
+     * @return
+     */
+    int update(FileInfo record);
+
+    /**
+     * 详情查询
+     * @param id
+     * @return
+     */
+    FileInfo selectByKey(Long id);
+
+    /**
+     * 查询
+     * @param params
+     * @return
+     * @throws Exception
+     */
+    List<FileInfo> findList(Map<String, Object> params);
+}

+ 85 - 0
sckw-modules/sckw-file/src/main/java/com/sckw/file/model/FileInfo.java

@@ -0,0 +1,85 @@
+package com.sckw.file.model;
+
+import com.sckw.core.model.base.BaseModel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author lfdc
+ * @version 1.0
+ * @className KwfFileInfo
+ * @description 文件do
+ * @company sckw
+ * @date 2023-06-08 15:06:24
+ */
+
+@Data
+public class FileInfo extends BaseModel {
+
+    private static final long serialVersionUID = 8295075842951977226L;
+
+    private Long id;
+    /**
+     * 文件存储方式(OSS)
+     */
+    private String type;
+
+    /**
+     * 文件原名称
+     */
+    private String originalName;
+
+    /**
+     * 文件新名称
+     */
+    private String fileName;
+
+    /**
+     * 文件名md5加密
+     */
+    private String md5;
+
+    /**
+     * 文件后缀
+     */
+    private String fileSuffix;
+
+    /**
+     * 文件大小(kb)
+     */
+    private BigDecimal fileSize;
+    /**
+     * 文件服务器存储相对路径
+     */
+    private String filePath;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 状态:0正常/1锁定
+     */
+//    private String status = "0";
+    /**
+     * 创建人
+     */
+//    private String createBy;
+    /**
+     * 创建时间
+     */
+//    private LocalDateTime createTime;
+    /**
+     * 更新人
+     */
+//    private String updateBy;
+    /**
+     * 更新时间
+     */
+//    private LocalDateTime updateTime;
+    /**
+     * 删除标识(0正常/1删除)
+     */
+//    private Integer delFlag = 0;
+
+}

+ 53 - 18
sckw-modules/sckw-file/src/main/java/com/sckw/file/service/FileService.java

@@ -1,20 +1,27 @@
 package com.sckw.file.service;
 
 
+import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.excel.common.NumberConstant;
 import com.sckw.file.common.enums.FileEnum;
+import com.sckw.file.dao.KwsFileInfoDao;
+import com.sckw.file.model.FileInfo;
 import com.sckw.file.utils.FileUtils;
 import jakarta.servlet.http.HttpServletResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FilenameUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
-import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.math.BigDecimal;
 import java.util.*;
 
 
@@ -26,40 +33,68 @@ import java.util.*;
  * @company sckw
  * @date 2023-06-02 16:06:46
  */
+@Slf4j
 @Service
 public class FileService {
+
+    @Autowired
+    KwsFileInfoDao fileInfoDao;
+
     /**
      * 上传文件至OSS
      *
      * @param file
      * @return
      */
-    public HttpResult uploadFile(@RequestParam("file") MultipartFile file) {
+    public HttpResult uploadFile(MultipartFile file) {
         HttpResult result = new HttpResult();
-        List<Map<String,Object>> resultList=new ArrayList<>();
+        List<Map<String, Object>> resultList = new ArrayList<>();
         result.setCode(HttpStatus.SUCCESS_CODE);
         boolean isEmpty = file.isEmpty();
         if (isEmpty) {
             result.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);
-            result.setMsg("上传请选择文件");
+            result.setMsg("上传请不要选择空文件");
+            return result;
         }
+        //获取文件类型
+        String contentType = file.getContentType();
+        //获取上传文件的原始文件名
+        String oFileName = file.getOriginalFilename();
         //文件大小
-        String fileSize = FileUtils.getFileSize(file);
-        //文件名称
-        String originalFilename = file.getOriginalFilename();
-        String url = FileUtils.uploadFile(file, FileEnum.DOCUMENT_ADDRESS);
+        BigDecimal fileSize = FileUtils.getFileSize(file, "KB");
+        FileInfo fileInfo = new FileInfo();
+        fileInfo.setOriginalName(oFileName);
+        //获取文件后缀
+        fileInfo.setFileSuffix(FilenameUtils.getExtension(oFileName));
+        fileInfo.setFileSize(StringUtils.isBlank(fileSize) ? new BigDecimal("0") : fileSize);
+        Map<String, String> infoMap = FileUtils.uploadFileByInfo(file, FileEnum.DOCUMENT_ADDRESS);
+//        Map<String, String> infoMap=new HashMap<>();
+//        infoMap.put("fileName","fileName");
+//        infoMap.put("fileMd5","fileMd5");
+//        infoMap.put("filePath","filePath");
+//        infoMap.put("fileKey","fileKey");
+        fileInfo.setId(new IdWorker(1).nextId());
+        fileInfo.setType(FileEnum.FILE_STORE_TYPE_OSS.getFileType());
+        fileInfo.setFileName(infoMap.get("fileName"));
+        fileInfo.setMd5(infoMap.get("fileMd5"));
+        fileInfo.setFilePath(infoMap.get("filePath"));
+        fileInfo.setCreateTime(new Date());
+        fileInfo.setUpdateTime(new Date());
+        fileInfo.setStatus(0);
+        fileInfo.setDelFlag(0);
+        fileInfo.setCreateBy(1L);
+        fileInfo.setUpdateBy(1L);
+        fileInfoDao.insert(fileInfo);
         //上传至oss文件地址
-        if (StringUtils.isNotBlank(url)){
-            String oosUrl = url;
+        if (StringUtils.isNotBlank(infoMap.get("filePath"))) {
             result.setCode(HttpStatus.SUCCESS_CODE);
             result.setMsg("上传成功");
-
-            Map<String, Object> map = new HashMap<>();
-            map.put("fileKey",url);
-            map.put("fileName",originalFilename);
+            Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN);
+            map.put("fileKey", infoMap.get("fileMd5"));
+            map.put("fileName", infoMap.get("fileName"));
             resultList.add(map);
             result.setData(resultList);
-        }else {
+        } else {
             result.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);
             result.setMsg("上传请选择文件");
         }
@@ -74,7 +109,7 @@ public class FileService {
      * @return
      */
     @Async
-    public HttpResult uploadFileList( MultipartFile[] file) {
+    public HttpResult uploadFileList(MultipartFile[] file) {
         HttpResult result = new HttpResult();
         List<Map<String, Object>> resultList = new ArrayList<>();
         if (!ObjectUtils.isEmpty(file) && file.length > 0) {
@@ -122,8 +157,8 @@ public class FileService {
      */
     public void fileDownload(String fileName) {
         HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
-//        FileUtils.downloadByUrl(response,fileName);
-        FileUtils.downOSSFile(fileName,response);
+        FileUtils.downloadByUrl(response,fileName);
+        FileUtils.downOSSFile(fileName, response);
 //        FileUtils.downloadByFileName(fileName);
     }
 }

+ 15 - 0
sckw-modules/sckw-file/src/main/java/com/sckw/file/service/dubbo/RemoteUserService1Impl.java

@@ -0,0 +1,15 @@
+package com.sckw.file.service.dubbo;
+
+import com.sckw.system.api.RemoteUserService;
+import org.apache.dubbo.config.annotation.DubboService;
+
+import java.util.Date;
+
+@DubboService(group = "design", version = "2.0.0")
+public class RemoteUserService1Impl implements RemoteUserService {
+
+    @Override
+    public String getUserInfoV1(String account) {
+        return "getUserInfoV1:"+new Date() +account;
+    }
+}

+ 13 - 0
sckw-modules/sckw-file/src/main/java/com/sckw/file/service/feign/FileApiFeignServiceImpl.java

@@ -0,0 +1,13 @@
+package com.sckw.file.service.feign;
+
+/**
+ * @author lfdc
+ * @version 1.0
+ * @className FileApiFeignServiceImpl
+ * @description file文件feign实现类
+ * @company sckw
+ * @date 2023-06-06 10:06:52
+ */
+public class FileApiFeignServiceImpl {
+
+}

+ 249 - 8
sckw-modules/sckw-file/src/main/java/com/sckw/file/utils/FileUtils.java

@@ -1,28 +1,31 @@
 package com.sckw.file.utils;
 
 import cn.hutool.core.date.DateTime;
-import com.aliyun.oss.ClientException;
-import com.aliyun.oss.OSS;
-import com.aliyun.oss.OSSClientBuilder;
-import com.aliyun.oss.OSSException;
+import com.aliyun.oss.*;
 import com.aliyun.oss.model.*;
 import com.sckw.core.utils.IdWorker;
+import com.sckw.core.utils.PasswordUtils;
 import com.sckw.core.utils.StringUtils;
+import com.sckw.excel.common.NumberConstant;
 import com.sckw.file.common.enums.AliyunOssFileTypeEnum;
 import com.sckw.file.common.enums.FileEnum;
 import jakarta.annotation.PostConstruct;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FilenameUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.*;
+import java.math.BigDecimal;
 import java.net.URL;
 import java.net.URLEncoder;
 import java.text.DecimalFormat;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * @author lfdc
@@ -86,6 +89,69 @@ public class FileUtils {
         bucketName = this.oss_bucketName;
     }
 
+    /**
+     * 获取指定文件或文件夹的后缀名
+     * @param fileName 文件名称
+     * @return
+     */
+    public static String getFileSuffix(String fileName) {
+        return fileName.substring(fileName.lastIndexOf("."));//例如:abc.png  截取后:.png
+    }
+
+
+    /**
+     * 文件上传
+     *
+     * @param file     文件
+     * @param fileEnum 上传使用的枚举
+     * @return
+     */
+    public static Map<String, String> uploadFileByInfo(MultipartFile file, FileEnum fileEnum) {
+        Map<String, String> infoMap = new HashMap<>();
+        try {
+            //创建OSSClient实例
+            defalutOSS();
+            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
+            //容器不存在,就创建
+            if (!ossClient.doesBucketExist(bucketName)) {
+                ossClient.createBucket(bucketName);
+                CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
+                createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
+                ossClient.createBucket(createBucketRequest);
+            }
+            //上传文件流
+            InputStream inputStream = file.getInputStream();
+            String fileName = FilenameUtils.getBaseName(file.getOriginalFilename());
+            //生成随机唯一值,使用uuid,添加到文件名称里面 改成使用加密
+//            fileName = PasswordUtils.md5(fileName);
+            fileName = PasswordUtils.md5(fileName);
+            String fileSuffix = FileUtils.getFileSuffix(file.getOriginalFilename());
+            //不带后缀
+            infoMap.put("fileMd5", fileName);
+            infoMap.put("fileName", fileName + fileSuffix);
+            //按照当前日期,创建文件夹,上传到创建文件夹里面
+            //2021/02/02/01.jpg
+            String timeUrl = new DateTime().toString("yyyyMMdd");
+            fileName = timeUrl + "/" + fileName;
+            String filePath = BASE_DIR + fileName+fileSuffix;
+            //调用方法实现上传
+            ossClient.putObject(bucketName, filePath, inputStream);
+            //上传后的文件地址
+//            String url1 = getUrl(ossClient, bucketName, filePath);
+            //关闭OSSClient。
+            ossClient.shutdown();
+            //上传之后文件路径
+            //https://yygh-atguigu.oss-cn-beijing.aliyuncs.com/01.jpg
+            String url = "https://" + bucketName + "." + endpoint + "/" + filePath;
+            //返回 上传文件地址
+            infoMap.put("filePath", url);
+        } catch (IOException e) {
+            e.printStackTrace();
+            log.error("oss-upload-file-error:{}", e.getMessage(), e);
+           throw new RuntimeException("oss-upload-file-error:"+e.getMessage());
+        }
+        return infoMap;
+    }
 
     /**
      * 上传文件
@@ -114,7 +180,8 @@ public class FileUtils {
             String fileName = file.getOriginalFilename();
             //生成随机唯一值,使用uuid,添加到文件名称里面
             long uuid = new IdWorker(1).nextId();
-            fileName = String.valueOf(uuid) + fileName;
+//            fileName = String.valueOf(uuid) + fileName;
+            fileName = PasswordUtils.md5(fileName);
             //按照当前日期,创建文件夹,上传到创建文件夹里面
             //2021/02/02/01.jpgossClient = {OSSClient@13049}
             String timeUrl = new DateTime().toString("yyyyMMdd");
@@ -177,6 +244,35 @@ public class FileUtils {
         return fileSizeString;
     }
 
+    /**
+     * 获取文件上传大小
+     *
+     * @param file
+     * @return
+     */
+    public static BigDecimal getFileSize(MultipartFile file, String type) {
+        long size = file.getSize();
+//        DecimalFormat df = new DecimalFormat("#.00");
+        BigDecimal bigDecimal = new BigDecimal(NumberConstant.ZERO);
+        switch (type) {
+            case "B":
+                bigDecimal = new BigDecimal((double) size);
+                break;
+            case "KB":
+                bigDecimal = new BigDecimal((double) size / 1024);
+                break;
+            case "MB":
+                bigDecimal = new BigDecimal((double) size / 1048576);
+                break;
+            case "GB":
+                bigDecimal = new BigDecimal((double) size / 1073741824);
+                break;
+            default:
+                throw new RuntimeException("file size error");
+        }
+        return bigDecimal;
+    }
+
     /**
      * 获得阿里云OSS客户端对象
      *
@@ -257,7 +353,8 @@ public class FileUtils {
      * 通过文件名字下载
      *
      * @param response response
-     * @param fileName 文件名字,带后缀,例子:postman.txt 文件全路径 https://kaiwu-saas.oss-cn-chengdu.aliyuncs.com/kll/uploads/20230605/146325493677821952598454132.txt
+     * @param fileName 文件名字,带后缀,例子:postman.txt
+     *                 文件全路径 https://kaiwu-saas.oss-cn-chengdu.aliyuncs.com/kll/uploads/20230605/146325493677821952598454132.txt
      */
     public static void downloadByFileName(HttpServletResponse response, String fileName) {
         defalutOSS();
@@ -266,7 +363,7 @@ public class FileUtils {
         String contentType = ossObject.getObjectMetadata().getContentType();
         String contentType1 = getContentType(fileName);
         System.out.println("contentType:" + contentType);
-        System.out.println("contentType1:" + contentType1);
+//        System.out.println("contentType1:" + contentType1);
         //设置响应内容类型,当设置了ContentType为“image/jpg”时,浏览器可以直接显示图片;
         response.setContentType(contentType);
         BufferedInputStream in = new BufferedInputStream(ossObject.getObjectContent());
@@ -466,7 +563,7 @@ public class FileUtils {
      */
     public static String getUrl(OSS ossClient, String bucketName, String key) {
         //设置URl过期时间为99年:3600L*1000*24*365*99
-        Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 99);
+        Date expiration = new Date( System.currentTimeMillis()+ 3600L * 1000 * 24 * 365 * 99);
         GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, key);
         generatePresignedUrlRequest.setExpiration(expiration);
         URL url = ossClient.generatePresignedUrl(generatePresignedUrlRequest);
@@ -568,6 +665,40 @@ public class FileUtils {
         downloadByFileName(response, url);
     }
 
+    /**
+     * @Title:downloadToFile
+     * @Description: 下载文件到本地
+     * @param @param ossFilePath oss上的文件路径(全路径)
+     * @param @param newFilePath 本地文件路径 (全路径)
+     * @return void    返回类型
+     */
+    public static void downloadToFile(String endPoint, String accessKeyId, String accessKeySecret, String bucketName, String ossFilePath, String newFilePath){
+        //实例化OSSClient对象
+        OSSClient ossClient = (OSSClient) new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret);
+        try {
+            // 指定路径如果没有则创建并添加
+            File file = new File(newFilePath);
+            //获取父目录
+            File fileParent = file.getParentFile();
+            //判断是否存在
+            if (!fileParent.exists()) {
+                // 创建父目录文件
+                fileParent.mkdirs();
+            }
+            file.createNewFile();
+            // 下载Object到本地文件,并保存到指定的本地路径中。如果指定的本地文件存在会覆盖,不存在则新建。
+            // 如果未指定本地路径,则下载后的文件默认保存到示例程序所属项目对应本地路径中。
+            ossClient.getObject(new GetObjectRequest(bucketName, ossFilePath), new File(newFilePath));
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            if (ossClient != null) {
+                ossClient.shutdown();
+            }
+        }
+    }
+
     /**
      * 判断文件是否存在
      *
@@ -602,6 +733,116 @@ public class FileUtils {
         return split[split.length - 1];
     }
 
+    /**
+     * 字符串转成file文件
+     *
+     * @param text
+     * @param file
+     * @return
+     */
+    public static File stringByFile(String text, File file) {
+        if (file.exists()) {
+            file.delete();
+        }
+        BufferedReader br = null;
+        BufferedWriter bw = null;
+        try {
+            br = new BufferedReader(new StringReader(text));
+            bw = new BufferedWriter(new FileWriter(file));
+            char[] buf = new char[1024 * 64];          //字符缓冲区
+            int len;
+            while ((len = br.read(buf)) != -1) {
+                bw.write(buf, 0, len);
+            }
+            bw.flush();
+            br.close();
+            bw.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return file;
+    }
+
+    /**
+     * file转byte
+     */
+    public static byte[] file2byte(File file) {
+        byte[] buffer = null;
+        try {
+            FileInputStream fis = new FileInputStream(file);
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            byte[] b = new byte[1024];
+            int n;
+            while ((n = fis.read(b)) != -1) {
+                bos.write(b, 0, n);
+            }
+            fis.close();
+            bos.close();
+            buffer = bos.toByteArray();
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return buffer;
+    }
+
+    /**
+     * byte 转file
+     */
+    public static File byte2File(byte[] buf, String filePath, String fileName) {
+        BufferedOutputStream bos = null;
+        FileOutputStream fos = null;
+        File file = null;
+        try {
+            File dir = new File(filePath);
+            if (!dir.exists() && dir.isDirectory()) {
+                dir.mkdirs();
+            }
+            file = new File(filePath + File.separator + fileName);
+            fos = new FileOutputStream(file);
+            bos = new BufferedOutputStream(fos);
+            bos.write(buf);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (bos != null) {
+                try {
+                    bos.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (fos != null) {
+                try {
+                    fos.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return file;
+    }
+
+    /**
+     * multipartFile转File
+     **/
+    public static File multipartFile2File(MultipartFile multipartFile) {
+        File file = null;
+        if (multipartFile != null) {
+            try {
+                file = File.createTempFile("tmp", null);
+                multipartFile.transferTo(file);
+                System.gc();
+                file.deleteOnExit();
+            } catch (Exception e) {
+                e.printStackTrace();
+                log.warn("multipartFile转File发生异常:" + e);
+            }
+        }
+        return file;
+    }
+
 
     // 测试
     public static void main(String[] args) throws FileNotFoundException {

+ 0 - 27
sckw-modules/sckw-file/src/main/resouces/bootstrap.yml

@@ -1,27 +0,0 @@
-server:
-  port: 10050
-
-spring:
-  application:
-    name: sckw-file
-  profiles:
-    active: ${DEPLOY_MODE:dev}
-  main:
-    allow-bean-definition-overriding: true
-# Spring
-dubbo:
-  application:
-    name: file-dubbo-server
-    # 该配置在producer-server中是没有的,但是在consumer这里要配置一下
-    # 如果不配置这个QOS的端口,它会延用dubbo自动生成的端口,在启动的时候,QOS注册就会提示该端口已经被使用的错误
-    # 虽然启动时有打印端口已经被使用的错误,但是依旧可以正常启动服务,并且dubbo也可以正常调用,但是为了解决启动报错还是加上这个端口
-    # 这个也是apache官方给出的解决方案,这个端口不能给-1,它不会自动找到一个可用的端口,给-1会报错,端口1-65535自己选择一个
-    qos-port: 3334
-  protocol:
-    name: dubbo
-    # port为-1表示自动找一个可用的端口
-    port: -1
-  registry:
-    address: nacos://${spring.cloud.nacos.discovery.server-addr}
-    group: ${spring.cloud.nacos.config.group}
-    protocol: nacos

+ 5 - 0
sckw-modules/sckw-file/src/main/resources/banner.txt

@@ -0,0 +1,5 @@
+====================================================================================================================
+
+                    欢迎使用 [sckw-example] 开物供应链服务平台-文件服务 - Powered By https://www.xxxx.com
+
+====================================================================================================================

+ 151 - 0
sckw-modules/sckw-file/src/main/resources/bootstrap-dev.yml

@@ -0,0 +1,151 @@
+spring:
+  rabbitmq:
+    username: admin
+    password: admin
+    host: 10.10.10.138
+    port: 5672
+    virtual-host: /
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: 10.10.10.230:8848
+        # 命名空间
+        namespace: sckw-service-platform-dev
+        # nacos用户名
+#        username: nacos
+        # nacos密码
+#        password: nacos
+        # 共享配置
+        group: sckw-service-platform
+        # 权重 1-100 数值越大权重越大分配的流量就越大,通常结合权重负载均衡策略
+      #        weight: 100
+      config:
+        # 配置中心地址
+        server-addr: 10.10.10.230:8848
+        # 配置文件格式
+        file-extension: yaml
+        # 命名空间
+        namespace: sckw-service-platform-dev
+        # 共享配置
+        group: sckw-service-platform
+        enabled: true
+    stream:
+      bindings:
+        sckwSms-out-0:
+          destination: sckw-sms
+          content-type: application/json
+          default-binder: defaultRabbit
+          group: sckw
+        sckwMessage-out-0:
+          destination: sckw-message
+          content-type: application/json
+          default-binder: defaultRabbit
+          group: sckw
+      binders:
+        defaultRabbit:
+          type: rabbit
+          environment:
+            spring:
+              rabbitmq:
+                virtual-host: /
+                host: 39.104.134.114
+                port: 5672
+                username: wph
+                password: Yy123...
+    # sentinel降级配置
+    sentinel:
+      transport:
+        client-ip: ${spring.cloud.client.ip-address} # 获取本机IP地址
+        port: 8719  #默认8719端口,如果被占用会向上扫描。
+        #控制台地址
+        dashboard: 10.10.10.230:19527
+      log:
+        #日志路径
+        dir: logs/sentinel
+        # 默认将调用链路收敛,导致链路流控效果无效
+        web-context-unify: false
+        #持久化nacos配置中
+      datasource:
+        #sentinel-rule: # 唯一名称可自定义
+        #限流
+        flow:
+          nacos:
+            # 设置Nacos的连接地址、命名空间和Group ID
+            namespace:  sckw-service-platform-dev
+            server-addr:  ${spring.cloud.nacos.discovery.server-addr}
+            # username: ${spring.cloud.nacos.discovery.username}
+            # password: ${spring.cloud.nacos.discovery.password}
+            # 设置Nacos中配置文件的命名规则
+            #            data-id:  ${spring.application.name}-sentinel-flow-rules
+            data-id:  sckw-file-sentinel-flow-rules
+            group-id: SENTINEL_GROUP
+            data-type: json
+            # 必填的重要字段,指定当前规则类型是"限流"
+            rule-type: flow
+        #熔断
+        degrade:
+          nacos:
+            namespace:  sckw-service-platform-dev
+            server-addr: ${spring.cloud.nacos.discovery.server-addr}
+            #data-id: ${spring.application.name}-sentinel-degrade-rules
+            data-id: sckw-file-sentinel-degrade-rules
+            group-id: SENTINEL_GROUP
+            #熔断
+            rule-type: degrade
+      #取消慢加载
+      eager: true
+  datasource:
+    dynamic:
+      seata: true
+seata:
+  # seata 服务分组,要与服务端nacos-config.txt中service.vgroup_mapping的后缀对应
+  # 事务分组名称,要和服务端对应
+  tx-service-group: file-seata-group
+  service:
+    vgroup-mapping:
+      # key是事务分组名称 value要和服务端的机房名称保持一致
+      file-seata-group: default
+  registry:
+    # 指定nacos作为注册中心
+    type: nacos
+    nacos:
+      server-addr: ${spring.cloud.nacos.discovery.server-addr}
+      namespace: ${spring.cloud.nacos.discovery.namespace}
+      #group: SEATA_GROUP为默认分组
+      group: ${spring.cloud.nacos.discovery.group}
+  config:
+    # 指定nacos作为配置中心
+    type: nacos
+    nacos:
+      server-addr: ${spring.cloud.nacos.discovery.server-addr}
+      #server-addr: 47.108.162.14:8848
+      namespace: ${spring.cloud.nacos.discovery.namespace}
+      group: ${spring.cloud.nacos.discovery.group}
+  application-id: ${spring.application.name}
+# 支持feign对sentinel支持
+#feign:
+#  sentinel:
+#    enabled: true
+
+dubbo:
+  application:
+    # 此处没有延用spring.application.name是因为当前项目本身也会注册到nacos中,如果dubbo也延用相同的名称,在nacos服务里会看到注册的producer-server服务数为2
+    name: file-dubbo-server
+  protocol:
+    name: dubbo
+    port: -1
+    prefer-serialization: java
+  registry:
+    # 配置dubbo的注册中心为nacos
+    address: nacos://${spring.cloud.nacos.discovery.server-addr}
+    group: ${spring.cloud.nacos.config.group}
+    protocol: nacos
+    #use-as-config-center: false
+    #use-as-metadata-center: false
+aliyun:
+  oss:
+    endpoint: oss-cn-chengdu.aliyuncs.com
+    accessKeyId: LTAI5tPEbubCGq5Rdwygbz4Q
+    secret: 7mQLWMaBJeZPRV1SRGogctYGXwppjQ
+    bucket: kaiwu-saas

+ 167 - 0
sckw-modules/sckw-file/src/main/resources/bootstrap-local.yml

@@ -0,0 +1,167 @@
+spring:
+  rabbitmq:
+    username: admin
+    password: admin
+    host: 10.10.10.138
+    port: 5672
+    virtual-host: /
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+#        server-addr: 47.108.162.14:8848
+        server-addr: 127.0.0.1:8848
+        # 命名空间
+        namespace: sckw-service-platform-dev
+        # nacos用户名
+        username: nacos
+        # nacos密码
+        password: nacos
+        # 共享配置
+        group: sckw-service-platform
+        # 权重 1-100 数值越大权重越大分配的流量就越大,通常结合权重负载均衡策略
+      #        weight: 100
+      config:
+        # 配置中心地址
+#        server-addr: 47.108.162.14:8848
+        server-addr: 127.0.0.1:8848
+        # 配置文件格式
+        file-extension: yaml
+        # 命名空间
+        namespace: sckw-service-platform-dev
+        # 共享配置
+        group: sckw-service-platform
+        enabled: true
+    stream:
+      bindings:
+        sckwSms-out-0:
+          destination: sckw-sms
+          content-type: application/json
+          default-binder: defaultRabbit
+          group: sckw
+        sckwMessage-out-0:
+          destination: sckw-message
+          content-type: application/json
+          default-binder: defaultRabbit
+          group: sckw
+      binders:
+        defaultRabbit:
+          type: rabbit
+          environment:
+            spring:
+              rabbitmq:
+                virtual-host: /
+                host: 39.104.134.114
+                port: 5672
+                username: wph
+                password: Yy123...
+    # sentinel降级配置
+    sentinel:
+      transport:
+        client-ip: ${spring.cloud.client.ip-address} # 获取本机IP地址
+        port: 8719  #默认8719端口,如果被占用会向上扫描。
+        #控制台地址
+        #dashboard: 47.108.162.14:19527
+        dashboard: 127.0.0.1:19527
+      log:
+        #日志路径
+        dir: logs/sentinel
+        # 默认将调用链路收敛,导致链路流控效果无效
+        web-context-unify: false
+        #持久化nacos配置中
+      datasource:
+        #sentinel-rule: # 唯一名称可自定义
+        #限流
+        flow:
+          nacos:
+            # 设置Nacos的连接地址、命名空间和Group ID
+            namespace:  sckw-service-platform-dev
+            server-addr:  ${spring.cloud.nacos.discovery.server-addr}
+            # username: ${spring.cloud.nacos.discovery.username}
+            # password: ${spring.cloud.nacos.discovery.password}
+            # 设置Nacos中配置文件的命名规则
+            #            data-id:  ${spring.application.name}-sentinel-flow-rules
+            data-id:  sckw-file-sentinel-flow-rules
+            group-id: SENTINEL_GROUP
+            data-type: json
+            # 必填的重要字段,指定当前规则类型是"限流"
+            rule-type: flow
+        #熔断
+        degrade:
+          nacos:
+            namespace:  sckw-service-platform-dev
+            server-addr: ${spring.cloud.nacos.discovery.server-addr}
+            #data-id: ${spring.application.name}-sentinel-degrade-rules
+            data-id: sckw-file-sentinel-degrade-rules
+            group-id: SENTINEL_GROUP
+            #熔断
+            rule-type: degrade
+      #取消慢加载
+      eager: true
+  datasource:
+    dynamic:
+      seata: true
+#sfs:
+#  nacos:
+#    server-addr: 127.0.0.1:8848
+#    namespace: 967df0d8-156b-441a-a5ab-615b4a865168
+#    group: MY_GROUP
+#
+#    nacos:
+#      server-addr: ${sfs.nacos.server-addr}
+#      namespace: ${sfs.nacos.namespace}
+#      group: ${sfs.nacos.group}
+
+seata:
+  # seata 服务分组,要与服务端nacos-config.txt中service.vgroup_mapping的后缀对应
+  # 事务分组名称,要和服务端对应
+  tx-service-group: file-seata-group
+  service:
+    vgroup-mapping:
+      # key是事务分组名称 value要和服务端的机房名称保持一致
+      file-seata-group: default
+  registry:
+    # 指定nacos作为注册中心
+    type: nacos
+    nacos:
+      server-addr: ${spring.cloud.nacos.discovery.server-addr}
+      #server-addr: 47.108.162.14:8848
+      namespace: ${spring.cloud.nacos.discovery.namespace}
+      #      group: SEATA_GROUP
+      group: ${spring.cloud.nacos.discovery.group}
+  config:
+    # 指定nacos作为配置中心
+    type: nacos
+    nacos:
+      server-addr: ${spring.cloud.nacos.discovery.server-addr}
+      #server-addr: 47.108.162.14:8848
+      namespace: ${spring.cloud.nacos.discovery.namespace}
+      group: ${spring.cloud.nacos.discovery.group}
+  application-id: ${spring.application.name}
+#  application-id: sckw-seata-file
+# 支持feign对sentinel支持
+#feign:
+#  sentinel:
+#    enabled: true
+
+dubbo:
+  application:
+    # 此处没有延用spring.application.name是因为当前项目本身也会注册到nacos中,如果dubbo也延用相同的名称,在nacos服务里会看到注册的producer-server服务数为2
+    name: file-dubbo-server
+  protocol:
+    name: dubbo
+    port: -1
+    prefer-serialization: java
+  registry:
+    # 配置dubbo的注册中心为nacos
+    address: nacos://${spring.cloud.nacos.discovery.server-addr}
+    group: ${spring.cloud.nacos.config.group}
+    protocol: nacos
+    #use-as-config-center: false
+    #use-as-metadata-center: false
+aliyun:
+  oss:
+    endpoint: oss-cn-chengdu.aliyuncs.com
+    accessKeyId: LTAI5tPEbubCGq5Rdwygbz4Q
+    secret: 7mQLWMaBJeZPRV1SRGogctYGXwppjQ
+    bucket: kaiwu-saas

+ 10 - 0
sckw-modules/sckw-file/src/main/resources/bootstrap.yml

@@ -0,0 +1,10 @@
+server:
+  port: 10050
+
+spring:
+  application:
+    name: sckw-file
+  profiles:
+    active: ${DEPLOY_MODE:dev}
+  main:
+    allow-bean-definition-overriding: true

+ 45 - 0
sckw-modules/sckw-file/src/main/resources/logback-spring.xml

@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+说明:
+    1. 文件的命名和加载顺序有关
+       logback.xml早于application.yml加载,logback-spring.xml晚于application.yml加载
+       如果logback配置需要使用application.yml中的属性,需要命名为logback-spring.xml
+    2. logback使用application.yml中的属性
+       使用springProperty才可使用application.yml中的值 可以设置默认值
+-->
+<configuration debug="false">
+    <springProperty scope="context" name="applicationName" source="spring.application.name" defaultValue="service"/>
+
+    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
+    <property name="LOG_HOME" value="/tmp/log/${applicationName}" />
+    <!-- 控制台输出 -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <!-- 按照每天生成日志文件 -->
+    <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${LOG_HOME}/${applicationName}.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <!--日志文件输出的文件名-->
+            <FileNamePattern>${LOG_HOME}/${applicationName}-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
+            <!--日志文件保留天数-->
+            <MaxHistory>30</MaxHistory>
+            <MaxFileSize>1024MB</MaxFileSize>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <!-- 日志输出级别 -->
+    <root level="INFO">
+        <appender-ref ref="STDOUT" />
+        <appender-ref ref="FILE" />
+    </root>
+
+</configuration>

+ 136 - 0
sckw-modules/sckw-file/src/main/resources/mapper/KwsFileInfoDao.xml

@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sckw.file.dao.KwsFileInfoDao">
+    <resultMap id="BaseResultMap" type="com.sckw.file.model.FileInfo">
+        <id column="id" jdbcType="BIGINT" property="id" />
+        <result column="type" jdbcType="VARCHAR" property="type" />
+        <result column="original_name" jdbcType="VARCHAR" property="originalName" />
+        <result column="file_name" jdbcType="VARCHAR" property="fileName" />
+        <result column="md5" jdbcType="VARCHAR" property="md5" />
+        <result column="file_suffix" jdbcType="BIGINT" property="fileSuffix" />
+        <result column="file_size" jdbcType="DECIMAL" property="fileSize" />
+        <result column="file_path" jdbcType="INTEGER" property="filePath" />
+        <result column="remark" jdbcType="INTEGER" property="remark" />
+        <result column="status" jdbcType="INTEGER" property="status" />
+        <result column="create_by" jdbcType="VARCHAR" property="createBy" />
+        <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+        <result column="update_by" jdbcType="VARCHAR" property="updateBy" />
+        <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+        <result column="del_flag" jdbcType="INTEGER" property="delFlag" />
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id, type, original_name, file_name, md5, file_suffix, file_size, file_path, remark, status,
+    create_by, create_time, update_by, update_time, del_flag
+    </sql>
+    <update id="update"></update>
+
+    <select id="selectByKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List" />
+        from kwf_file_info
+        where id = #{id,jdbcType=BIGINT}
+    </select>
+    <select id="findList" resultType="com.sckw.file.model.FileInfo">
+
+    </select>
+
+    <insert id="insert" parameterType="com.sckw.file.model.FileInfo">
+        insert into sckw_file.kwf_file_info
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">
+                id,
+            </if>
+            <if test="type != null">
+                type,
+            </if>
+            <if test="originalName != null">
+                original_name,
+            </if>
+            <if test="fileName != null">
+                file_name,
+            </if>
+            <if test="md5 != null">
+                md5,
+            </if>
+            <if test="fileSuffix != null">
+                file_suffix,
+            </if>
+            <if test="fileSize != null">
+                file_size,
+            </if>
+            <if test="filePath != null">
+                file_path,
+            </if>
+            <if test="remark != null">
+                remark,
+            </if>
+            <if test="status != null">
+                status,
+            </if>
+            <if test="createBy != null">
+                create_by,
+            </if>
+            <if test="createTime != null">
+                create_time,
+            </if>
+            <if test="updateBy != null">
+                update_by,
+            </if>
+            <if test="updateTime != null">
+                update_time,
+            </if>
+            <if test="delFlag != null">
+                del_flag,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">
+                #{id,jdbcType=BIGINT},
+            </if>
+            <if test="type != null">
+                #{type,jdbcType=INTEGER},
+            </if>
+            <if test="originalName != null">
+                #{originalName,jdbcType=VARCHAR},
+            </if>
+            <if test="fileName != null">
+                #{fileName,jdbcType=VARCHAR},
+            </if>
+            <if test="md5 != null">
+                #{md5,jdbcType=VARCHAR},
+            </if>
+            <if test="fileSuffix != null">
+                #{fileSuffix,jdbcType=VARCHAR},
+            </if>
+            <if test="fileSize != null">
+                #{fileSize,jdbcType=DECIMAL},
+            </if>
+            <if test="filePath != null">
+                #{filePath,jdbcType=VARCHAR},
+            </if>
+            <if test="remark != null">
+                #{remark,jdbcType=VARCHAR},
+            </if>
+            <if test="status != null">
+                #{status,jdbcType=INTEGER},
+            </if>
+            <if test="createBy != null">
+                #{createBy,jdbcType=BIGINT},
+            </if>
+            <if test="createTime != null">
+                #{createTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="updateBy != null">
+                #{updateBy,jdbcType=BIGINT},
+            </if>
+            <if test="updateTime != null">
+                #{updateTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="delFlag != null">
+                #{delFlag,jdbcType=INTEGER},
+            </if>
+        </trim>
+    </insert>
+
+</mapper>

+ 1 - 1
sckw-modules/sckw-message/src/main/resources/bootstrap.yml

@@ -5,7 +5,7 @@ spring:
   application:
     name: sckw-message
   profiles:
-    active: ${DEPLOY_MODE:dev}
+    active: ${DEPLOY_MODE:local}
   main:
     allow-bean-definition-overriding: true
 # Spring

+ 1 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/SystemApplication.java

@@ -10,6 +10,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
 @EnableFeignClients({"com.sckw.*.api.feign"})
 @EnableDiscoveryClient
 @SpringBootApplication
+//@MapperScan("com.system.*.mapper")
 public class SystemApplication {
 
     public static void main(String[] args) {

+ 0 - 130
sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/SysUserController.java

@@ -1,130 +0,0 @@
-package com.sckw.system.controller;
-
-import cn.hutool.core.lang.UUID;
-import com.alibaba.fastjson2.JSON;
-import com.sckw.core.model.page.PageResult;
-import com.sckw.core.web.response.HttpResult;
-import com.sckw.stream.enums.SmsCodeEnum;
-import com.sckw.stream.model.SckwMessage;
-import com.sckw.stream.model.SckwSms;
-import com.sckw.system.model.SysUser;
-import com.sckw.system.model.TestSensitive;
-import com.sckw.system.service.SysUserService;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.redisson.api.RBucket;
-import org.redisson.api.RedissonClient;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cloud.stream.function.StreamBridge;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Slf4j
-@AllArgsConstructor
-@RestController
-@RequestMapping("/")
-public class SysUserController {
-
-    @Autowired
-    SysUserService sysUserService;
-
-    @Resource
-    RedissonClient redissonClient;
-
-    /*@Autowired
-    RedisService redisService;*/
-
-    @GetMapping("index")
-    public Object test(){
-        Map result = new HashMap();
-        result.put("user", System.currentTimeMillis());
-        result.put("datatime", System.currentTimeMillis());
-        result.put("database", "redis");
-
-        RBucket<Object> mytest = redissonClient.getBucket("mytest");
-        mytest.set("value");
-        System.out.println(mytest.get());//value
-        mytest.set("value2");
-        System.out.println(mytest.get());//value2
-        boolean b = mytest.compareAndSet("value2", result); //true
-        System.out.println(mytest.get());//value3
-        Object resultObj = mytest.get();
-
-        /*result.put("type", "spring boot");
-        redisService.setCacheMap("value2", result);
-        resultObj = redisService.getCacheMap("value2");*/
-
-        return String.valueOf(resultObj);
-    }
-
-    //@Override
-    public String getUserInfo(String account) {
-        return account + String.valueOf(new Date());
-    }
-
-    @PostMapping("findByAccount")
-    public HttpResult findByAccount(HashMap params) {
-        List<SysUser> data = sysUserService.findByAccount(params);
-        return HttpResult.ok(data);
-    }
-
-    @PostMapping("findPage")
-    public HttpResult findPage(Map<String, Object> params) {
-        PageResult pageResult = sysUserService.findPage(params);
-        return HttpResult.ok(pageResult);
-    }
-
-    @GetMapping("/testSensitive")
-    public HttpResult testSensitive() {
-        TestSensitive testSensitive = new TestSensitive();
-        testSensitive.setIdCard("210397198608215431");
-        testSensitive.setPhone("17640125371");
-        testSensitive.setAddress("北京市朝阳区某某四合院1203室");
-        testSensitive.setEmail("17640125371@163.com");
-        testSensitive.setBankCard("6226456952351452853");
-        return HttpResult.ok(testSensitive);
-    }
-
-    @Resource
-    private StreamBridge streamBridge;
-
-    @GetMapping("/pushMesg")
-    public HttpResult pushMesg() {
-        String uuid = UUID.fastUUID().toString();
-        SckwSms sckwSms = new SckwSms();
-        sckwSms.setTelephone("17358629955");
-        sckwSms.setSignName("矿拉拉");
-        sckwSms.setTemplateCode(SmsCodeEnum.VERIFICATION_CODE);
-        sckwSms.setParams(new HashMap(){{put("code", "123456");}});
-        streamBridge.send("sckw-sms", JSON.toJSONString(sckwSms));
-
-
-        SckwMessage message = new SckwMessage();
-        //person.setName(String.valueOf(System.currentTimeMillis()));
-        message.setMsgUrl("---");
-        message.setPushType("====");
-        message.setClientId("111111111111111");
-        streamBridge.send("sckw-message", JSON.toJSONString(message));
-
-        return HttpResult.ok(uuid);
-    }
-
-    @GetMapping("/pushSms")
-    public HttpResult pushSms() {
-        TestSensitive testSensitive = new TestSensitive();
-        testSensitive.setIdCard("210397198608215431");
-        testSensitive.setPhone("17640125371");
-        testSensitive.setAddress("北京市朝阳区某某四合院1203室");
-        testSensitive.setEmail("17640125371@163.com");
-        testSensitive.setBankCard("6226456952351452853");
-        return HttpResult.ok(testSensitive);
-    }
-}

+ 0 - 23
sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/TestController.java

@@ -1,23 +0,0 @@
-package com.sckw.system.controller;
-
-import com.sckw.core.web.response.HttpResult;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @Author xucaiqin
- * @date 2023-06-02 17:30:32
- */
-@Slf4j
-@AllArgsConstructor
-@RestController
-@RequestMapping("/")
-public class TestController {
-    @GetMapping("get")
-    public HttpResult findByAccount(String account) {
-        return HttpResult.ok(account);
-    }
-}

+ 0 - 31
sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/SysUserDao.java

@@ -1,31 +0,0 @@
-package com.sckw.system.dao;
-
-import com.baomidou.dynamic.datasource.annotation.DS;
-import com.sckw.system.model.SysUser;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Select;
-import java.util.List;
-import java.util.Map;
-
-@Mapper
-public interface SysUserDao {
-
-    /**
-     * 账号查询用户信息
-     * @param params {account:账号, systemType:系统类别}
-     * @return
-//     */
-    @DS("slave_1")
-    SysUser findByAccount(Map params);
-
-    @DS("master")
-    @Select("SELECT * FROM user limit 1")
-    List<SysUser> findUserByAccount(String account);
-
-    @DS("slave_1")
-    @Select("SELECT * FROM sys_user limit 10")
-    List<Map> findUserByAccount1(String account);
-
-    @DS("slave_1")
-    List<Map<String, Object>> findPage(Map<String, Object> params);
-}

+ 0 - 34
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/SysUserService.java

@@ -1,34 +0,0 @@
-package com.sckw.system.service;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import com.sckw.core.model.page.PageHelperUtil;
-import com.sckw.core.model.page.PageResult;
-import com.sckw.system.dao.SysUserDao;
-import com.sckw.system.model.SysUser;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Service
-public class SysUserService {
-
-    @Autowired
-    SysUserDao sysUserDao;
-
-    public List<SysUser> findByAccount(HashMap params) {
-        SysUser sysUser = sysUserDao.findByAccount(params);
-        return new ArrayList<>(){{add(sysUser);}};
-    }
-
-    public PageResult findPage(Map<String, Object> params) {
-        // 设置分页参数
-        PageHelper.startPage(PageResult.getPageNum(params), PageResult.getPageSize(params));
-        List<Map<String, Object>> list = sysUserDao.findPage(params);
-        PageResult pageResult = PageHelperUtil.getPageResult(new PageInfo(list));
-        return pageResult;
-    }
-}

+ 1 - 1
sckw-modules/sckw-system/src/main/resources/bootstrap.yml

@@ -5,6 +5,6 @@ spring:
   application:
     name: sckw-system
   profiles:
-    active: ${DEPLOY_MODE:dev}
+    active: ${DEPLOY_MODE:local}
   main:
     allow-bean-definition-overriding: true