Bläddra i källkod

git提交索引补全

Huanyi 12 timmar sedan
förälder
incheckning
b98b266b2f
100 ändrade filer med 5159 tillägg och 0 borttagningar
  1. 18 0
      .editorconfig
  2. 53 0
      .gitignore
  3. 21 0
      LICENSE
  4. 189 0
      README.md
  5. 530 0
      pom.xml
  6. 29 0
      ruoyi-api/pom.xml
  7. 77 0
      ruoyi-api/ruoyi-api-bom/pom.xml
  8. 28 0
      ruoyi-api/ruoyi-api-resource/pom.xml
  9. 40 0
      ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteFileService.java
  10. 59 0
      ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteFileServiceMock.java
  11. 21 0
      ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMailService.java
  12. 26 0
      ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageService.java
  13. 47 0
      ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageServiceStub.java
  14. 14 0
      ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteSmsConfigService.java
  15. 145 0
      ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteSmsService.java
  16. 49 0
      ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/domain/RemoteFile.java
  17. 36 0
      ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/domain/RemoteSms.java
  18. 28 0
      ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/domain/RemoteSmsConfig.java
  19. 33 0
      ruoyi-api/ruoyi-api-system/pom.xml
  20. 21 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteAreaStationService.java
  21. 20 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteClientService.java
  22. 107 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteConfigService.java
  23. 26 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteDataScopeService.java
  24. 46 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteDeptService.java
  25. 31 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteDictService.java
  26. 27 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteLogService.java
  27. 28 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemotePermissionService.java
  28. 21 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemotePostService.java
  29. 21 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteRoleService.java
  30. 52 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteSocialService.java
  31. 16 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteStoreService.java
  32. 45 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteTaskAssigneeService.java
  33. 5 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteTenantCatergoriesService.java
  34. 31 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteTenantService.java
  35. 190 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java
  36. 71 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/SysUserOnline.java
  37. 89 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteLogininforBo.java
  38. 119 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteOperLogBo.java
  39. 129 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteSocialBo.java
  40. 56 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteTaskAssigneeBo.java
  41. 129 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteUserBo.java
  42. 24 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteAreaStationVo.java
  43. 70 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteClientVo.java
  44. 37 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteDeptVo.java
  45. 76 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteDictDataVo.java
  46. 46 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteDictTypeVo.java
  47. 135 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteSocialVo.java
  48. 18 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteStoreVo.java
  49. 104 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteTaskAssigneeVo.java
  50. 91 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteTenantVo.java
  51. 73 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteUserVo.java
  52. 151 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/model/LoginUser.java
  53. 46 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/model/PostDTO.java
  54. 42 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/model/RoleDTO.java
  55. 27 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/model/XcxLoginUser.java
  56. 35 0
      ruoyi-api/ruoyi-api-workflow/pom.xml
  57. 106 0
      ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java
  58. 83 0
      ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowServiceMock.java
  59. 76 0
      ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/domain/RemoteCompleteTask.java
  60. 30 0
      ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/domain/RemoteFlowCopy.java
  61. 45 0
      ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/domain/RemoteFlowInstanceBizExt.java
  62. 64 0
      ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/domain/RemoteStartProcess.java
  63. 30 0
      ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/domain/RemoteStartProcessReturn.java
  64. 41 0
      ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/event/ProcessDeleteEvent.java
  65. 77 0
      ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/event/ProcessEvent.java
  66. 76 0
      ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/event/ProcessTaskEvent.java
  67. 21 0
      ruoyi-api/yingpaipay-api-archieves/pom.xml
  68. 17 0
      ruoyi-api/yingpaipay-api-archieves/src/main/java/org/dromara/api/RemoteCustomerService.java
  69. 11 0
      ruoyi-api/yingpaipay-api-archieves/src/main/java/org/dromara/api/RemotePetService.java
  70. 22 0
      ruoyi-api/yingpaipay-api-archieves/src/main/java/org/dromara/api/domain/vo/RemoteCustomerVo.java
  71. 27 0
      ruoyi-api/yingpaipay-api-archieves/src/main/java/org/dromara/api/domain/vo/RemotePetVo.java
  72. 26 0
      ruoyi-api/yingpaipay-api-fulfiller/pom.xml
  73. 5 0
      ruoyi-api/yingpaipay-api-fulfiller/src/main/java/org/dromara/fulfiller/api/RemoteAuditService.java
  74. 57 0
      ruoyi-api/yingpaipay-api-fulfiller/src/main/java/org/dromara/fulfiller/api/RemoteFulfillerService.java
  75. 9 0
      ruoyi-api/yingpaipay-api-fulfiller/src/main/java/org/dromara/fulfiller/api/RemoteLogService.java
  76. 27 0
      ruoyi-api/yingpaipay-api-fulfiller/src/main/java/org/dromara/fulfiller/api/domain/vo/RemoteFulfillerVo.java
  77. 18 0
      ruoyi-api/yingpaipay-api-fulfiller/src/main/java/org/dromara/fulfiller/api/domain/vo/RemoteLogVo.java
  78. 49 0
      ruoyi-api/yingpaipay-api-fulfiller/src/main/java/org/dromara/fulfiller/api/model/FulfillerLoginUser.java
  79. 21 0
      ruoyi-api/yingpaipay-api-order/pom.xml
  80. 6 0
      ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/RemoteOrderService.java
  81. 16 0
      ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/RemoteSubOrderLogService.java
  82. 40 0
      ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/RemoteSubOrderService.java
  83. 18 0
      ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/domain/vo/RemoteSubOrderLogCountVo.java
  84. 18 0
      ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/domain/vo/RemoteSubOrderLogListVo.java
  85. 41 0
      ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/domain/vo/RemoteSubOrderVo.java
  86. 27 0
      ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/enums/OrderAppealAuditStatusEnum.java
  87. 17 0
      ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/enums/OrderLogActionerTypeEnum.java
  88. 20 0
      ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/enums/OrderLogFulfillerStepEnum.java
  89. 22 0
      ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/enums/OrderLogSystemStepEnum.java
  90. 17 0
      ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/enums/OrderLogTypeEnum.java
  91. 34 0
      ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/enums/OrderServiceFlagEnum.java
  92. 40 0
      ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/enums/OrderStatusEnum.java
  93. 27 0
      ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/enums/OrderTypeEnum.java
  94. 24 0
      ruoyi-api/yingpaipay-api-service/pom.xml
  95. 26 0
      ruoyi-api/yingpaipay-api-service/src/main/java/org/dromara/service/api/RemoteStoreServiceService.java
  96. 27 0
      ruoyi-api/yingpaipay-api-service/src/main/java/org/dromara/service/api/RemoteSysServiceService.java
  97. 18 0
      ruoyi-api/yingpaipay-api-service/src/main/java/org/dromara/service/api/domain/bo/RemoteStoreServiceBo.java
  98. 31 0
      ruoyi-api/yingpaipay-api-service/src/main/java/org/dromara/service/api/domain/vo/RemoteSysServiceVo.java
  99. 27 0
      ruoyi-api/yingpaipay-api-service/src/main/java/org/dromara/service/api/enums/ServiceModeEnum.java
  100. 27 0
      ruoyi-auth/Dockerfile

+ 18 - 0
.editorconfig

@@ -0,0 +1,18 @@
+# http://editorconfig.org
+root = true
+
+# 空格替代Tab缩进在各种编辑工具下效果一致
+[*]
+indent_style = space
+indent_size = 4
+charset = utf-8
+end_of_line = lf
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.{json,yml,yaml}]
+indent_size = 2
+
+[*.md]
+insert_final_newline = false
+trim_trailing_whitespace = false

+ 53 - 0
.gitignore

@@ -0,0 +1,53 @@
+######################################################################
+# Build Tools
+
+.gradle
+/build/
+!gradle/wrapper/gradle-wrapper.jar
+
+target/
+!.mvn/wrapper/maven-wrapper.jar
+
+######################################################################
+# IDE
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### JRebel ###
+rebel.xml
+### NetBeans ###
+nbproject/private/
+build/*
+nbbuild/
+nbdist/
+.nb-gradle/
+
+######################################################################
+# Others
+*.log
+*.log.gz
+*.xml.versionsBackup
+*.swp
+
+!*/build/*.java
+!*/build/*.html
+!*/build/*.xml
+
+.flattened-pom.xml
+
+ruoyi-visual/ruoyi-nacos/src/main/resources/application.properties
+
+logs
+.vscode

+ 21 - 0
LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 RuoYi-Cloud-Plus
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 189 - 0
README.md

@@ -0,0 +1,189 @@
+<img src="https://foruda.gitee.com/images/1679673780944866919/d908a86f_1766278.png" width="56%" height="56%">
+<div style="height: 10px; clear: both;"></div>
+
+- - -
+## 平台简介
+
+[![码云Gitee](https://gitee.com/dromara/RuoYi-Cloud-Plus/badge/star.svg?theme=blue)](https://gitee.com/dromara/RuoYi-Cloud-Plus)
+[![GitHub](https://img.shields.io/github/stars/dromara/RuoYi-Cloud-Plus.svg?style=social&label=Stars)](https://github.com/dromara/RuoYi-Cloud-Plus)
+[![Star](https://gitcode.com/dromara/RuoYi-Cloud-Plus/star/badge.svg)](https://gitcode.com/dromara/RuoYi-Cloud-Plus)
+[![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://gitee.com/dromara/RuoYi-Cloud-Plus/blob/2.X/LICENSE)
+<br>
+[![RuoYi-Cloud-Plus](https://img.shields.io/badge/RuoYi_Cloud_Plus-2.5.3-success.svg)](https://gitee.com/dromara/RuoYi-Cloud-Plus)
+[![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.5-blue.svg)]()
+[![JDK-17](https://img.shields.io/badge/JDK-17-green.svg)]()
+[![JDK-21](https://img.shields.io/badge/JDK-21-green.svg)]()
+
+> Dromara RuoYi-Cloud-Plus `微服务通用权限管理系统` 重写 RuoYi-Cloud 全方位升级(不兼容原框架)
+
+> 项目代码、文档 均开源免费可商用 遵循开源协议在项目中保留开源协议文件即可<br>
+活到老写到老 为兴趣而开源 为学习而开源 为让大家真正可以学到技术而开源
+
+> 系统演示: [传送门](https://plus-doc.dromara.org/#/common/demo_system)
+
+> 官方前端项目地址: [gitee](https://gitee.com/JavaLionLi/plus-ui) - [github](https://github.com/JavaLionLi/plus-ui) - [gitcode](https://gitcode.com/dromara/plus-ui)<br>
+> 成员前端项目地址: 基于vben5 [ruoyi-plus-vben5](https://gitee.com/dapppp/ruoyi-plus-vben5)<br>
+> 成员前端项目地址: 基于soybean [ruoyi-plus-soybean](https://gitee.com/xlsea/ruoyi-plus-soybean)<br>
+> 成员项目地址: 删除多租户与工作流 [RuoYi-Vue-Plus-Single](https://gitee.com/ColorDreams/RuoYi-Vue-Plus-Single)<br>
+
+> 文档地址: [plus-doc](https://plus-doc.dromara.org) 国内加速: [plus-doc.top](https://plus-doc.top)
+
+## 赞助商
+
+MaxKey 业界领先单点登录产品 - https://gitee.com/dromara/MaxKey <br>
+CCFlow 驰聘低代码-流程-表单 - https://gitee.com/opencc/RuoYi-JFlow <br>
+数舵科技 软件定制开发APP小程序等 - https://www.shuduokeji.com/ <br>
+引迈信息 软件开发平台 - https://www.jnpfsoft.com/index.html?from=plus-doc <br>
+Mall4J 高质量Java商城系统 - https://www.mall4j.com/cn/?statId=11 <br>
+aizuda flowlong 工作流 - https://gitee.com/aizuda/flowlong <br>
+Ruoyi-Plus-Uniapp - https://ruoyi.plus <br>
+Topiam IAM/IDaaS身份管理平台 - https://www.topiam.cn/ <br>
+
+[如何成为赞助商 加群联系作者详谈 每日PV2500-3000 IP1700-2500](https://plus-doc.dromara.org/#/common/add_group)
+
+# 本框架与RuoYi的功能差异
+
+| 功能          | 本框架                                                                                                               | RuoYi                                                                              |
+|-------------|-------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|
+| 前端项目        | 采用 Vue3 + TS + ElementPlus 重写                                                                                     | 基于Vue2/Vue3 + JS                                                                   | 
+| 后端项目结构      | 采用插件化 + 扩展包形式 结构解耦 易于扩展                                                                                           | 模块相互注入耦合严重难以扩展                                                                     | 
+| 后端代码风格      | 严格遵守Alibaba规范与项目统一配置的代码格式化                                                                                        | 代码书写与常规结构不同阅读障碍大                                                                   |
+| 分布式注册中心     | 采用 Alibaba Nacos 源码集成便于调试扩展与二次开发 框架还为其增加了各种监控                                                                     | 采用 Alibaba Nacos 自行搭建纯官方版本不可靠                                                      | 
+| 分布式配置中心     | 采用 Alibaba Nacos 源码集成便于调试扩展与二次开发 框架还为其增加了各种监控                                                                     | 采用 Alibaba Nacos 自行搭建纯官方版本不可靠                                                      | 
+| 服务网关        | 采用 SpringCloud Gateway 框架扩展了多种功能<br/>例如:内网鉴权、请求体缓存、跨域配置、请求响应日志等                                                   | 采用 SpringCloud Gateway 功能单一                                                        | 
+| 负载均衡        | 采用 SpringCloud Loadbalancer 扩展支持了开发团队路由 便于多团队开发调试                                                                 | 采用 SpringCloud Loadbalancer 功能单一                                                   |
+| RPC远程调用     | 采用 全新 Apache Dubbo 3.X 历史悠远不用多说                                                                                   | 采用 feign 功能有限编写方式 网络波动大 不稳定                                                        | 
+| 分布式限流熔断     | 采用 Alibaba Sentinel 源码集成便于调试扩展与二次开发 框架还为其增加了各种监控                                                                  | 采用 Alibaba Sentinel 自行搭建纯官方版本不可靠                                                   | 
+| 分布式事务       | 采用 Alibaba Seata 源码集成对接了Nacos与各种监控 简化了搭建部署流程                                                                      | 采用 Alibaba Seata 自行搭建纯官方版本 搭建繁琐与Nacos不挂钩 代码内使用方式怪异等                                |
+| Web容器       | 采用 Undertow 基于 XNIO 的高性能容器                                                                                        | 采用 Tomcat                                                                          |
+| 权限认证        | 采用 Sa-Token、Jwt 静态使用功能齐全 低耦合 高扩展                                                                                  | Spring Security 配置繁琐扩展性极差                                                          |
+| 权限注解        | 采用 Sa-Token 支持注解 登录校验、角色校验、权限校验、二级认证校验、HttpBasic校验、忽略校验<br/>角色与权限校验支持多种条件 如 `AND` `OR` 或 `权限 OR 角色` 等复杂表达式        | 只支持是否存在匹配                                                                          |
+| 关系数据库支持     | 原生支持 MySQL、Oracle、PostgreSQL、SQLServer<br/>可同时使用异构切换(支持其他 mybatis-plus 支持的所有数据库 只需要增加jdbc依赖即可使用 达梦金仓等均有成功案例)      | 支持 Mysql、Oracle 不支持同时使用、不支持异构切换                                                    |
+| 缓存数据库       | 支持 Redis 5-7 支持大部分新功能特性 如 分布式限流、分布式队列                                                                             | Redis 简单 get set 支持                                                                |
+| Redis客户端    | 采用 Redisson Redis官方推荐 基于Netty的客户端工具<br/>支持Redis 90%以上的命令 底层优化规避很多不正确的用法 例如: keys被转换为scan<br/>支持单机、哨兵、单主集群、多主集群等模式 | Lettuce + RedisTemplate 支持模式少 工具使用繁琐<br/>连接池采用 common-pool Bug多经常性出问题              |
+| 缓存注解        | 采用 Spring-Cache 注解 对其扩展了实现支持了更多功能<br/>例如 过期时间 最大空闲时间 组最大长度等 只需一个注解即可完成数据自动缓存                                      | 需手动编写Redis代码逻辑                                                                     |
+| ORM框架       | 采用 Mybatis-Plus 基于对象几乎不用写SQL全java操作 功能强大插件众多<br/>例如多租户插件 分页插件 乐观锁插件等等                                             | 采用 Mybatis 基于XML需要手写SQL                                                            |
+| SQL监控       | 采用 p6spy 可输出完整SQL与执行时间监控                                                                                          | log输出 需手动拼接sql与参数无法快速查看调试问题                                                        |
+| 数据分页        | 采用 Mybatis-Plus 分页插件<br/>框架对其进行了扩展 对象化分页对象 支持多种方式传参 支持前端多排序 复杂排序                                                  | 采用 PageHelper 仅支持单查询分页 参数只能从param传 只能单排序 功能扩展性差 体验不好                               |
+| 数据权限        | 采用 Mybatis-Plus 插件 自行分析拼接SQL 无感式过滤<br/>只需为Mapper设置好注解条件 支持多种自定义 不限于部门角色                                           | 采用 注解+aop 实现 基于部门角色 生成的sql兼容性差 不支持其他业务扩展<br/>生成sql后需手动拼接到具体业务sql上 对于多个Mapper查询不起作用 |
+| 数据脱敏        | 采用 注解 + jackson 序列化期间脱敏 支持不同模块不同的脱敏条件<br/>支持多种策略 如身份证、手机号、地址、邮箱、银行卡等 可自行扩展                                        | 无                                                                                  |
+| 数据加解密       | 采用 注解 + mybatis 拦截器 对存取数据期间自动加解密<br/>支持多种策略 如BASE64、AES、RSA、SM2、SM4等                                              | 无                                                                                  |
+| 数据翻译        | 采用 注解 + jackson 序列化期间动态修改数据 数据进行翻译<br/>支持多种模式: `映射翻译` `直接翻译` `其他扩展条件翻译` 接口化两步即可完成自定义扩展 内置多种翻译实现                   | 无                                                                                  |
+| 多数据源框架      | 采用 dynamic-datasource 支持市面大部分数据库<br/>通过yml配置即可动态管理异构不同种类的数据库 也可通过前端页面添加数据源<br/>支持spel表达式从请求头参数等条件切换数据源            | 基于 druid 手动编写代码配置数据源 配置繁琐 支持性差                                                     |
+| 多数据源事务      | 采用 dynamic-datasource 支持多数据源不同种类的数据库事务回滚                                                                          | 不支持                                                                                |
+| 数据库连接池      | 采用 HikariCP Spring官方内置连接池 配置简单 以性能与稳定性闻名天下                                                                        | 采用 druid bug众多 社区维护差 活跃度低 配置众多繁琐性能一般                                               |
+| 数据库主键       | 采用 雪花ID 基于时间戳的 有序增长 唯一ID 再也不用为分库分表 数据合并主键冲突重复而发愁                                                                  | 采用 数据库自增ID 支持数据量有限 不支持多数据源主键唯一                                                     |
+| WebSocket协议 | 基于 Spring 封装的 WebSocket 协议 扩展了Token鉴权与分布式会话同步 不再只是基于单机的废物                                                         | 无                                                                                  |
+| SSE推送       | 采用 Spring SSE 实现 扩展了Token鉴权与分布式会话同步                                                                               | 无                                                                                  |
+| 序列化         | 采用 Jackson Spring官方内置序列化 靠谱!!!                                                                                    | 采用 fastjson bugjson 远近闻名                                                           | 
+| 分布式幂等       | 参考美团GTIS防重系统简化实现(细节可看文档)                                                                                          | 手动编写注解基于aop实现                                                                      |
+| 分布式任务调度     | 采用 SnailJob 天生支持分布式 统一的管理中心 支持多种数据库 支持分片重试DAG任务流等                                                                 | 采用 Quartz 基于数据库锁性能差 集群需要做很多配置与改造                                                   | 
+| 分布式日志中心     | 采用 ELK 业界成熟解决方案 实时收集所有服务的运行日志 快速发现定位问题                                                                            | 无                                                                                  | 
+| 分布式搜索引擎     | 采用 ElasticSearch、Easy-Es 以 Mybatis-Plus 方式操作 ElasticSearch                                                        | 无                                                                                  | 
+| 分布式消息队列     | 采用 支持 Kafka、RocketMQ、RabbitMQ 各种 延迟消息 事务消息 流消息                                                                    | 无                                                                                  | 
+| 分布式消息总线     | 采用 SpringCloud Bus 实现事件总线 跨服务通知 支持 Kafka、RocketMQ、RabbitMQ                                                        | 无                                                                                  |
+| 分库分表功能      | 采用 Apache Sharding-Proxy 代理服务无入侵支持分库分表 只需编写分库分表规则即可                                                               | 无                                                                                  |
+| 文件存储        | 采用 Minio 分布式文件存储 天生支持多机、多硬盘、多分片、多副本存储<br/>支持权限管理 安全可靠 文件可加密存储                                                     | 采用 本机文件存储 文件裸漏 易丢失泄漏 不支持集群有单点效应                                                    |
+| 云存储         | 采用 AWS S3 协议客户端 支持 七牛、阿里、腾讯 等一切支持S3协议的厂家                                                                          | 不支持                                                                                |
+| 短信          | 支持 阿里、腾讯 只需在yml配置好厂家密钥即可使用 接口化支持扩展其他厂家                                                                            | 不支持                                                                                |
+| 邮件          | 采用 mail-api 通用协议支持大部分邮件厂商                                                                                         | 不支持                                                                                |
+| 接口文档        | 采用 SpringDoc、javadoc 无注解零入侵基于java注释<br/>只需把注释写好 无需再写一大堆的文档注解了                                                     | 采用 Springfox 已停止维护 需要编写大量的注解来支持文档生成                                                | 
+| 校验框架        | 采用 Validation 支持注解与工具类校验 注解支持国际化                                                                                  | 仅支持注解 且注解不支持国际化                                                                    |
+| Excel框架     | 采用 FastExcel(原Alibaba EasyExcel) 基于插件化<br/>框架对其增加了很多功能 例如 自动合并相同内容 自动排列布局 字典翻译等                                   | 基于 POI 手写实现 功能有限 复杂 扩展性差                                                           |
+| 工作流支持       | 支持各种复杂审批 转办 委派 加减签 会签 或签 票签 等功能                                                                                   | 无                                                                                  |
+| 工具类框架       | 采用 Hutool、Lombok 上百种工具覆盖90%的使用需求 基于注解自动生成 get set 等简化框架大量代码                                                       | 手写工具稳定性差易出问题 工具数量有限 代码臃肿需自己手写 get set 等                                            | 
+| 服务监控框架      | 采用 SpringBoot-Admin 基于SpringBoot官方 actuator 探针机制<br/>实时监控服务状态 框架还为其扩展了在线日志查看监控                                    | 无                                                                                  | 
+| 全方位监控报警     | 采用 Prometheus、Grafana 多样化采集 多模板大屏展示 实时报警监控 提供详细的搭建文档                                                              | 无                                                                                  | 
+| 链路追踪        | 采用 Apache SkyWalking 还在为请求不知道去哪了 到哪出了问题而烦恼吗<br/>用了它即可实时查看请求经过的每一处每一个节点                                            | 无                                                                                  |
+| 代码生成器       | 只需设计好表结构 一键生成所有crud代码与页面<br/>降低80%的开发量 把精力都投入到业务设计上<br/>框架为其适配MP、SpringDoc规范化代码 同时支持动态多数据源代码生成                    | 代码生成原生结构 只支持单数据源生成                                                                 |
+| 部署方式        | 支持 Docker 编排 一键搭建所有环境 让开发人员从此不再为搭建环境而烦恼                                                                           | 原生jar部署 其他环境需手动下载安装 自行搭建                                                           | 
+| 项目路径修改      | 提供详细的修改方案文档 并为其做了一些改动 非常简单即可修改成自己想要的                                                                              | 需要做很多改造 文档说明有限                                                                     |
+| 国际化         | 基于请求头动态返回不同语种的文本内容 开发难度低 有对应的工具类 支持大部分注解内容国际化                                                                     | 只提供基础功能 其他需自行编写扩展                                                                  |
+| 代码单例测试      | 提供单例测试 使用方式编写方法与maven多环境单测插件                                                                                      | 只提供基础功能 其他需自行编写扩展                                                                  |
+| Demo案例      | 提供框架功能的实际使用案例 单独一个模块提供了很多很全                                                                                       | 无                                                                                  |
+
+## 本框架与RuoYi的业务差异
+
+| 业务     | 功能说明                                    | 本框架 | RuoYi            |
+|--------|-----------------------------------------|-----|------------------|
+| 租户管理   | 系统内租户的管理 如:租户套餐、过期时间、用户数量、企业信息等         | 支持  | 无                |
+| 租户套餐管理 | 系统内租户所能使用的套餐管理 如:套餐内所包含的菜单等             | 支持  | 无                |
+| 用户管理   | 用户的管理配置 如:新增用户、分配用户所属部门、角色、岗位等          | 支持  | 支持               |
+| 部门管理   | 配置系统组织机构(公司、部门、小组) 树结构展现支持数据权限          | 支持  | 支持               |
+| 岗位管理   | 配置系统用户所属担任职务                            | 支持  | 支持               |
+| 菜单管理   | 配置系统菜单、操作权限、按钮权限标识等                     | 支持  | 支持               |
+| 角色管理   | 角色菜单权限分配、设置角色按机构进行数据范围权限划分              | 支持  | 支持               |
+| 字典管理   | 对系统中经常使用的一些较为固定的数据进行维护                  | 支持  | 支持               |
+| 参数管理   | 对系统动态配置常用参数                             | 支持  | 支持               |
+| 通知公告   | 系统通知公告信息发布维护                            | 支持  | 支持               |
+| 操作日志   | 系统正常操作日志记录和查询 系统异常信息日志记录和查询             | 支持  | 支持               |
+| 登录日志   | 系统登录日志记录查询包含登录异常                        | 支持  | 支持               |
+| 文件管理   | 系统文件展示、上传、下载、删除等管理                      | 支持  | 无                |
+| 文件配置管理 | 系统文件上传、下载所需要的配置信息动态添加、修改、删除等管理          | 支持  | 无                |
+| 在线用户管理 | 已登录系统的在线用户信息监控与强制踢出操作                   | 支持  | 支持               |
+| 定时任务   | 运行报表、任务管理(添加、修改、删除)、日志管理、执行器管理等         | 支持  | 仅支持任务与日志管理       |
+| 代码生成   | 多数据源前后端代码的生成(java、html、xml、sql)支持CRUD下载 | 支持  | 仅支持单数据源          |
+| 系统接口   | 根据业务代码自动生成相关的api接口文档                    | 支持  | 支持               |
+| 服务监控   | 监视集群系统CPU、内存、磁盘、堆栈、在线日志、Spring相关配置等     | 支持  | 仅支持单机CPU、内存、磁盘监控 |
+| 缓存监控   | 对系统的缓存信息查询,命令统计等。                       | 支持  | 支持               |
+| 使用案例   | 系统的一些功能案例                               | 支持  | 不支持              |
+
+## 参考文档
+
+使用框架前请仔细阅读文档重点注意事项
+<br>
+>[初始化项目 必看](https://plus-doc.dromara.org/#/ruoyi-cloud-plus/quickstart/init)
+>>[https://plus-doc.dromara.org/#/ruoyi-cloud-plus/quickstart/init](https://plus-doc.dromara.org/#/ruoyi-cloud-plus/quickstart/init)
+>
+>[专栏与视频 入门必看](https://plus-doc.dromara.org/#/common/column)
+>>[https://plus-doc.dromara.org/#/common/column](https://plus-doc.dromara.org/#/common/column)
+>
+>[部署项目 必看](https://plus-doc.dromara.org/#/ruoyi-cloud-plus/quickstart/deploy)
+>>[https://plus-doc.dromara.org/#/ruoyi-cloud-plus/quickstart/deploy](https://plus-doc.dromara.org/#/ruoyi-cloud-plus/quickstart/deploy)
+>
+>[如何加群](https://plus-doc.dromara.org/#/common/add_group)
+>>[https://plus-doc.dromara.org/#/common/add_group](https://plus-doc.dromara.org/#/common/add_group)
+>
+>[参考文档 Wiki](https://plus-doc.dromara.org)
+>>[https://plus-doc.dromara.org](https://plus-doc.dromara.org)
+
+
+## 软件架构图
+
+![Plus部署架构图](https://foruda.gitee.com/images/1678980131147747524/5c2d5a5c_1766278.png "Plus部署架构图.png")
+
+## 贡献代码
+
+[参与贡献的方式 https://plus-doc.dromara.org/#/common/contribution](https://plus-doc.dromara.org/#/common/contribution)
+
+## 捐献作者
+
+作者为兼职做开源,平时还需要工作,如果帮到了您可以请作者吃个盒饭  
+<img src="https://foruda.gitee.com/images/1678975784848381069/d8661ed9_1766278.png" width="300px" height="450px" />
+<img src="https://foruda.gitee.com/images/1678975801230205215/6f96229d_1766278.png" width="300px" height="450px" />
+
+## 演示图例
+
+|                                                                                            |                                                                                            |
+|--------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|
+| ![输入图片说明](https://foruda.gitee.com/images/1680077524361362822/270bb429_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680077619939771291/989bf9b6_1766278.png "屏幕截图") |
+| ![输入图片说明](https://foruda.gitee.com/images/1680077681751513929/1c27c5bd_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680077721559267315/74d63e23_1766278.png "屏幕截图") |
+| ![输入图片说明](https://foruda.gitee.com/images/1680077765638904515/1b75d4a6_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680078026375951297/eded7a4b_1766278.png "屏幕截图") |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078237104531207/0eb1b6a7_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680078254306078709/5931e22f_1766278.png "屏幕截图") |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078287971528493/0b9af60a_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680078308138770249/8d3b6696_1766278.png "屏幕截图") |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078352553634393/db5ef880_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680078378238393374/601e4357_1766278.png "屏幕截图") |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078414983206024/2aae27c1_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680078446738419874/ecce7d59_1766278.png "屏幕截图") |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078475971341775/149e8634_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680078491666717143/3fadece7_1766278.png "屏幕截图") |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078558863188826/fb8ced2a_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680078574561685461/ae68a0b2_1766278.png "屏幕截图") |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078594932772013/9d8bfec6_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680078626493093532/fcfe4ff6_1766278.png "屏幕截图") |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078643608812515/0295bd4f_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680078685196286463/d7612c81_1766278.png "屏幕截图") |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078703877318597/56fce0bc_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680078716586545643/b6dbd68f_1766278.png "屏幕截图") |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078734103217688/eb1e6aa6_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680078759131415480/73c525d8_1766278.png "屏幕截图") |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078779416197879/75e3ed02_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680078802329118061/77e10915_1766278.png "屏幕截图") |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078893627848351/34a1c342_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680078928175016986/f126ec4a_1766278.png "屏幕截图") |
+| ![输入图片说明](https://foruda.gitee.com/images/1680078941718318363/b68a0f72_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680078963175518631/3bb769a1_1766278.png "屏幕截图") |
+| ![输入图片说明](https://foruda.gitee.com/images/1735829153637063344/3c21fd4c_1419627.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1735829181303499815/4522cefa_1419627.png "屏幕截图") |
+| ![输入图片说明](https://foruda.gitee.com/images/1735829377205259767/76a705d7_1419627.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1722959592856812900/e2d0d342_1419627.png "屏幕截图") |
+| ![输入图片说明](https://foruda.gitee.com/images/1680079274333484664/4dfdc7c0_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680079290467458224/d6715fcf_1766278.png "屏幕截图") |
+
+

+ 530 - 0
pom.xml

@@ -0,0 +1,530 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.dromara</groupId>
+    <artifactId>pet-system</artifactId>
+    <version>${revision}</version>
+
+
+    <properties>
+        <revision>2.5.3</revision>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <java.version>17</java.version>
+        <spring-boot.version>3.5.9</spring-boot.version>
+        <spring-cloud.version>2025.0.1</spring-cloud.version>
+        <spring-boot-admin.version>3.5.6</spring-boot-admin.version>
+        <mybatis.version>3.5.19</mybatis.version>
+        <mybatis-plus.version>3.5.16</mybatis-plus.version>
+        <p6spy.version>3.9.1</p6spy.version>
+        <dynamic-ds.version>4.3.1</dynamic-ds.version>
+        <velocity.version>2.3</velocity.version>
+        <swagger.core.version>2.2.41</swagger.core.version>
+        <springdoc.version>2.8.15</springdoc.version>
+        <therapi-javadoc.version>0.15.0</therapi-javadoc.version>
+        <fastexcel.version>1.3.0</fastexcel.version>
+        <hutool.version>5.8.43</hutool.version>
+        <redisson.version>3.52.0</redisson.version>
+        <lock4j.version>2.2.7</lock4j.version>
+        <snailjob.version>1.9.0</snailjob.version>
+        <satoken.version>1.44.0</satoken.version>
+        <lombok.version>1.18.42</lombok.version>
+        <logstash.version>7.4</logstash.version>
+        <easy-es.version>3.0.1</easy-es.version>
+        <elasticsearch-client.version>7.17.28</elasticsearch-client.version>
+        <skywalking-toolkit.version>9.5.0</skywalking-toolkit.version>
+        <bouncycastle.version>1.80</bouncycastle.version>
+        <mapstruct-plus.version>1.5.0</mapstruct-plus.version>
+        <mapstruct-plus.lombok.version>0.2.0</mapstruct-plus.lombok.version>
+        <justauth.version>1.16.7</justauth.version>
+        <!-- 离线IP地址定位库 -->
+        <ip2region.version>3.3.2</ip2region.version>
+        <!-- 临时修复 fastjson 漏洞 -->
+        <fastjson.version>1.2.83</fastjson.version>
+        <!-- OSS 配置 -->
+        <aws.sdk.version>2.28.22</aws.sdk.version>
+        <!-- SMS 配置 -->
+        <sms4j.version>3.3.4</sms4j.version>
+        <!-- 面向运行时的D-ORM依赖 -->
+        <anyline.version>8.7.3-20251210</anyline.version>
+        <!-- 工作流配置 -->
+        <warm-flow.version>1.8.4</warm-flow.version>
+        <!-- mq配置 -->
+        <rocketmq.version>2.3.4</rocketmq.version>
+
+        <!-- 插件版本 -->
+        <maven-compiler-plugin.version>3.14.0</maven-compiler-plugin.version>
+        <maven-surefire-plugin.version>3.5.3</maven-surefire-plugin.version>
+        <flatten-maven-plugin.version>1.3.0</flatten-maven-plugin.version>
+        <!-- 打包默认跳过测试 -->
+        <skipTests>true</skipTests>
+    </properties>
+
+    <profiles>
+        <profile>
+            <id>Huanyi</id>
+            <properties>
+                <profiles.active>dev</profiles.active>
+                <nacos.server>127.0.0.1:8848</nacos.server>
+                <nacos.discovery.group>DEFAULT_GROUP</nacos.discovery.group>
+                <nacos.config.group>DEFAULT_GROUP</nacos.config.group>
+                <nacos.username>nacos</nacos.username>
+                <nacos.password>nacos</nacos.password>
+                <logstash.address>127.0.0.1:4560</logstash.address>
+                <discovery.ip>127.0.0.1</discovery.ip>
+                <nacos.ip>127.0.0.1</nacos.ip>
+            </properties>
+        </profile>
+        <profile>
+            <id>Production</id>
+            <properties>
+                <profiles.active>prod</profiles.active>
+                <nacos.server>127.0.0.1:8848</nacos.server>
+                <nacos.discovery.group>DEFAULT_GROUP</nacos.discovery.group>
+                <nacos.config.group>DEFAULT_GROUP</nacos.config.group>
+                <nacos.username>nacos</nacos.username>
+                <nacos.password>nacos</nacos.password>
+                <logstash.address>127.0.0.1:4560</logstash.address>
+                <discovery.ip>127.0.0.1</discovery.ip>
+                <nacos.ip>127.0.0.1</nacos.ip>
+            </properties>
+        </profile>
+    </profiles>
+
+    <!-- 依赖声明 -->
+    <dependencyManagement>
+        <dependencies>
+
+            <!-- SpringCloud 微服务 -->
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-dependencies</artifactId>
+                <version>${spring-cloud.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+
+            <!-- SpringCloud Alibaba 微服务 -->
+            <dependency>
+                <groupId>org.dromara</groupId>
+                <artifactId>ruoyi-common-alibaba-bom</artifactId>
+                <version>${revision}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+
+            <!-- SpringBoot 依赖配置 -->
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>${spring-boot.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+
+            <!-- hutool 的依赖配置-->
+            <dependency>
+                <groupId>cn.hutool</groupId>
+                <artifactId>hutool-bom</artifactId>
+                <version>${hutool.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+
+            <!-- common 的依赖配置-->
+            <dependency>
+                <groupId>org.dromara</groupId>
+                <artifactId>ruoyi-common-bom</artifactId>
+                <version>${revision}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+
+            <!-- api 的依赖配置-->
+            <dependency>
+                <groupId>org.dromara</groupId>
+                <artifactId>ruoyi-api-bom</artifactId>
+                <version>${revision}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+
+            <dependency>
+                <groupId>cn.dev33</groupId>
+                <artifactId>sa-token-core</artifactId>
+                <version>${satoken.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>cn.dev33</groupId>
+                <artifactId>sa-token-spring-boot3-starter</artifactId>
+                <version>${satoken.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.mybatis</groupId>
+                <artifactId>mybatis</artifactId>
+                <version>${mybatis.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>com.baomidou</groupId>
+                <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
+                <version>${mybatis-plus.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>com.baomidou</groupId>
+                <artifactId>mybatis-plus-jsqlparser</artifactId>
+                <version>${mybatis-plus.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>com.baomidou</groupId>
+                <artifactId>mybatis-plus-annotation</artifactId>
+                <version>${mybatis-plus.version}</version>
+            </dependency>
+            <!-- sql性能分析插件 -->
+            <dependency>
+                <groupId>p6spy</groupId>
+                <artifactId>p6spy</artifactId>
+                <version>${p6spy.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>io.swagger.core.v3</groupId>
+                <artifactId>swagger-annotations</artifactId>
+                <version>${swagger.core.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.springdoc</groupId>
+                <artifactId>springdoc-openapi-starter-webmvc-api</artifactId>
+                <version>${springdoc.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>com.github.therapi</groupId>
+                <artifactId>therapi-runtime-javadoc</artifactId>
+                <version>${therapi-javadoc.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.projectlombok</groupId>
+                <artifactId>lombok</artifactId>
+                <version>${lombok.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>cn.idev.excel</groupId>
+                <artifactId>fastexcel</artifactId>
+                <version>${fastexcel.version}</version>
+            </dependency>
+
+            <!-- 代码生成使用模板 -->
+            <dependency>
+                <groupId>org.apache.velocity</groupId>
+                <artifactId>velocity-engine-core</artifactId>
+                <version>${velocity.version}</version>
+            </dependency>
+
+            <!--redisson-->
+            <dependency>
+                <groupId>org.redisson</groupId>
+                <artifactId>redisson-spring-boot-starter</artifactId>
+                <version>${redisson.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>com.baomidou</groupId>
+                <artifactId>lock4j-redisson-spring-boot-starter</artifactId>
+                <version>${lock4j.version}</version>
+            </dependency>
+
+            <!--  SnailJob Client -->
+            <dependency>
+                <groupId>com.aizuda</groupId>
+                <artifactId>snail-job-client-starter</artifactId>
+                <version>${snailjob.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.aizuda</groupId>
+                <artifactId>snail-job-client-job-core</artifactId>
+                <version>${snailjob.version}</version>
+            </dependency>
+
+            <!-- 加密包引入 -->
+            <dependency>
+                <groupId>org.bouncycastle</groupId>
+                <artifactId>bcprov-jdk15to18</artifactId>
+                <version>${bouncycastle.version}</version>
+            </dependency>
+
+            <!-- logstash -->
+            <dependency>
+                <groupId>net.logstash.logback</groupId>
+                <artifactId>logstash-logback-encoder</artifactId>
+                <version>${logstash.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.dromara.easy-es</groupId>
+                <artifactId>easy-es-boot-starter</artifactId>
+                <version>${easy-es.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>co.elastic.clients</groupId>
+                <artifactId>elasticsearch-java</artifactId>
+                <version>${elasticsearch-client.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.elasticsearch.client</groupId>
+                <artifactId>elasticsearch-rest-client</artifactId>
+                <version>${elasticsearch-client.version}</version>
+            </dependency>
+
+            <!-- skywalking 整合 logback -->
+            <dependency>
+                <groupId>org.apache.skywalking</groupId>
+                <artifactId>apm-toolkit-logback-1.x</artifactId>
+                <version>${skywalking-toolkit.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.skywalking</groupId>
+                <artifactId>apm-toolkit-trace</artifactId>
+                <version>${skywalking-toolkit.version}</version>
+            </dependency>
+
+            <!--  AWS SDK for Java 2.x  -->
+            <dependency>
+                <groupId>software.amazon.awssdk</groupId>
+                <artifactId>s3</artifactId>
+                <version>${aws.sdk.version}</version>
+            </dependency>
+            <!-- 客户端的性能增强传输管理器 -->
+            <dependency>
+                <groupId>software.amazon.awssdk</groupId>
+                <artifactId>s3-transfer-manager</artifactId>
+                <version>${aws.sdk.version}</version>
+            </dependency>
+            <!-- 适用于 Netty 的客户端 -->
+            <dependency>
+                <groupId>software.amazon.awssdk</groupId>
+                <artifactId>netty-nio-client</artifactId>
+                <version>${aws.sdk.version}</version>
+            </dependency>
+
+            <!--短信sms4j-->
+            <dependency>
+                <groupId>org.dromara.sms4j</groupId>
+                <artifactId>sms4j-spring-boot-starter</artifactId>
+                <version>${sms4j.version}</version>
+            </dependency>
+
+            <!-- JustAuth 的依赖配置-->
+            <dependency>
+                <groupId>me.zhyd.oauth</groupId>
+                <artifactId>JustAuth</artifactId>
+                <version>${justauth.version}</version>
+            </dependency>
+
+            <!-- 离线IP地址定位库 ip2region -->
+            <dependency>
+                <groupId>org.lionsoul</groupId>
+                <artifactId>ip2region</artifactId>
+                <version>${ip2region.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>com.alibaba</groupId>
+                <artifactId>fastjson</artifactId>
+                <version>${fastjson.version}</version>
+            </dependency>
+
+            <!-- dubbo 专用 -->
+            <dependency>
+                <groupId>redis.clients</groupId>
+                <artifactId>jedis</artifactId>
+                <version>5.1.0</version>
+            </dependency>
+
+            <dependency>
+                <groupId>io.github.linpeilie</groupId>
+                <artifactId>mapstruct-plus-spring-boot-starter</artifactId>
+                <version>${mapstruct-plus.version}</version>
+            </dependency>
+
+            <!--消息队列-->
+            <dependency>
+                <groupId>org.apache.rocketmq</groupId>
+                <artifactId>rocketmq-spring-boot-starter</artifactId>
+                <version>${rocketmq.version}</version>
+            </dependency>
+
+            <!-- Warm-Flow国产工作流引擎, 在线文档:http://warm-flow.cn/ -->
+            <dependency>
+                <groupId>org.dromara.warm</groupId>
+                <artifactId>warm-flow-mybatis-plus-sb3-starter</artifactId>
+                <version>${warm-flow.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.dromara.warm</groupId>
+                <artifactId>warm-flow-plugin-ui-sb-web</artifactId>
+                <version>${warm-flow.version}</version>
+            </dependency>
+
+        </dependencies>
+    </dependencyManagement>
+
+    <modules>
+        <module>ruoyi-auth</module>
+        <module>ruoyi-gateway</module>
+        <module>ruoyi-visual</module>
+        <module>ruoyi-modules</module>
+        <module>ruoyi-api</module>
+        <module>ruoyi-common</module>
+        <module>ruoyi-example</module>
+    </modules>
+    <packaging>pom</packaging>
+
+    <dependencies>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>${maven-compiler-plugin.version}</version>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                    <encoding>${project.build.sourceEncoding}</encoding>
+                    <annotationProcessorPaths>
+                        <path>
+                            <groupId>com.github.therapi</groupId>
+                            <artifactId>therapi-runtime-javadoc-scribe</artifactId>
+                            <version>0.15.0</version>
+                        </path>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                            <version>${lombok.version}</version>
+                        </path>
+                        <path>
+                            <groupId>org.springframework.boot</groupId>
+                            <artifactId>spring-boot-configuration-processor</artifactId>
+                            <version>${spring-boot.version}</version>
+                        </path>
+                        <path>
+                            <groupId>io.github.linpeilie</groupId>
+                            <artifactId>mapstruct-plus-processor</artifactId>
+                            <version>${mapstruct-plus.version}</version>
+                        </path>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok-mapstruct-binding</artifactId>
+                            <version>${mapstruct-plus.lombok.version}</version>
+                        </path>
+                    </annotationProcessorPaths>
+                    <compilerArgs>
+                        <arg>-parameters</arg>
+                    </compilerArgs>
+                </configuration>
+            </plugin>
+            <!-- 单元测试使用 -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>${maven-surefire-plugin.version}</version>
+                <configuration>
+                    <argLine>-Dfile.encoding=UTF-8</argLine>
+                    <!-- 根据打包环境执行对应的@Tag测试方法 -->
+                    <groups>${profiles.active}</groups>
+                    <!-- 排除标签 -->
+                    <excludedGroups>exclude</excludedGroups>
+                </configuration>
+            </plugin>
+            <!-- 统一版本号管理 -->
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>flatten-maven-plugin</artifactId>
+                <version>${flatten-maven-plugin.version}</version>
+                <configuration>
+                    <updatePomFile>true</updatePomFile>
+                    <flattenMode>resolveCiFriendliesOnly</flattenMode>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>flatten</id>
+                        <phase>process-resources</phase>
+                        <goals>
+                            <goal>flatten</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>flatten.clean</id>
+                        <phase>clean</phase>
+                        <goals>
+                            <goal>clean</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <!-- 关闭过滤 -->
+                <filtering>false</filtering>
+            </resource>
+            <resource>
+                <directory>src/main/webapp/</directory>
+            </resource>
+            <resource>
+                <directory>src/main/resources</directory>
+                <!-- 引入所有 匹配文件进行过滤 -->
+                <includes>
+                    <include>application*</include>
+                    <include>bootstrap*</include>
+                    <include>logback*</include>
+                </includes>
+                <!-- 启用过滤 即该资源中的变量将会被过滤器中的值替换 -->
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+    </build>
+
+    <repositories>
+        <repository>
+            <id>public</id>
+            <name>huawei nexus</name>
+            <url>https://mirrors.huaweicloud.com/repository/maven/</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+        </repository>
+    </repositories>
+
+    <pluginRepositories>
+        <pluginRepository>
+            <id>public</id>
+            <name>huawei nexus</name>
+            <url>https://mirrors.huaweicloud.com/repository/maven/</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </pluginRepository>
+    </pluginRepositories>
+
+</project>
+

+ 29 - 0
ruoyi-api/pom.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>org.dromara</groupId>
+        <artifactId>pet-system</artifactId>
+        <version>${revision}</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <modules>
+        <module>ruoyi-api-bom</module>
+        <module>ruoyi-api-system</module>
+        <module>ruoyi-api-resource</module>
+        <module>ruoyi-api-workflow</module>
+        <module>yingpaipay-api-service</module>
+        <module>yingpaipay-api-archieves</module>
+        <module>yingpaipay-api-fulfiller</module>
+        <module>yingpaipay-api-order</module>
+    </modules>
+
+    <artifactId>ruoyi-api</artifactId>
+    <packaging>pom</packaging>
+
+    <description>
+        ruoyi-api系统接口
+    </description>
+
+</project>

+ 77 - 0
ruoyi-api/ruoyi-api-bom/pom.xml

@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.dromara</groupId>
+    <artifactId>ruoyi-api-bom</artifactId>
+    <packaging>pom</packaging>
+    <version>${revision}</version>
+
+    <description>
+        ruoyi-api-bom api依赖项
+    </description>
+
+    <properties>
+        <revision>2.5.3</revision>
+    </properties>
+
+    <dependencyManagement>
+        <dependencies>
+            <!-- 系统接口 -->
+            <dependency>
+                <groupId>org.dromara</groupId>
+                <artifactId>ruoyi-api-system</artifactId>
+                <version>${revision}</version>
+            </dependency>
+
+            <!-- 资源服务接口 -->
+            <dependency>
+                <groupId>org.dromara</groupId>
+                <artifactId>ruoyi-api-resource</artifactId>
+                <version>${revision}</version>
+            </dependency>
+
+            <!-- workflow接口 -->
+            <dependency>
+                <groupId>org.dromara</groupId>
+                <artifactId>ruoyi-api-workflow</artifactId>
+                <version>${revision}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.dromara</groupId>
+                <artifactId>yingpaipay-api-service</artifactId>
+                <version>${revision}</version>
+            </dependency>
+
+            <!-- 履约者服务接口 -->
+            <dependency>
+                <groupId>org.dromara</groupId>
+                <artifactId>yingpaipay-api-fulfiller</artifactId>
+                <version>${revision}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.dromara</groupId>
+                <artifactId>yingpaipay-api-archieves</artifactId>
+                <version>${revision}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.dromara</groupId>
+                <artifactId>yingpaipay-api-fulfiller</artifactId>
+                <version>${revision}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.dromara</groupId>
+                <artifactId>yingpaipay-api-order</artifactId>
+                <version>${revision}</version>
+            </dependency>
+
+        </dependencies>
+    </dependencyManagement>
+</project>

+ 28 - 0
ruoyi-api/ruoyi-api-resource/pom.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>org.dromara</groupId>
+        <artifactId>ruoyi-api</artifactId>
+        <version>${revision}</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ruoyi-api-resource</artifactId>
+
+    <description>
+        ruoyi-api-resource 资源服务接口模块
+    </description>
+
+    <dependencies>
+
+        <!-- RuoYi Common Core-->
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-core</artifactId>
+        </dependency>
+
+    </dependencies>
+
+</project>

+ 40 - 0
ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteFileService.java

@@ -0,0 +1,40 @@
+package org.dromara.resource.api;
+
+import org.dromara.common.core.exception.ServiceException;
+import org.dromara.resource.api.domain.RemoteFile;
+
+import java.util.List;
+
+/**
+ * 文件服务
+ *
+ * @author Lion Li
+ */
+public interface RemoteFileService {
+
+    /**
+     * 上传文件
+     *
+     * @param file 文件信息
+     * @return 结果
+     */
+    RemoteFile upload(String name, String originalFilename, String contentType, byte[] file) throws ServiceException;
+
+    /**
+     * 通过ossId查询对应的url
+     *
+     * @param ossIds ossId串逗号分隔
+     * @return url串逗号分隔
+     */
+    String selectUrlByIds(String ossIds);
+
+    /**
+     * 通过ossId查询列表
+     *
+     * @param ossIds ossId串逗号分隔
+     * @return 列表
+     */
+    List<RemoteFile> selectByIds(String ossIds);
+
+    List<RemoteFile> selectByIds(List<Long> ossIds);
+}

+ 59 - 0
ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteFileServiceMock.java

@@ -0,0 +1,59 @@
+package org.dromara.resource.api;
+
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.resource.api.domain.RemoteFile;
+
+import java.util.List;
+
+/**
+ * 文件服务(降级处理)
+ *
+ * @author Lion Li
+ */
+@Slf4j
+public class RemoteFileServiceMock implements RemoteFileService {
+
+    /**
+     * 上传文件
+     *
+     * @param file 文件信息
+     * @return 结果
+     */
+    @Override
+    public RemoteFile upload(String name, String originalFilename, String contentType, byte[] file) {
+        log.warn("服务调用异常 -> 降级处理");
+        return null;
+    }
+
+    /**
+     * 通过ossId查询对应的url
+     *
+     * @param ossIds ossId串逗号分隔
+     * @return url串逗号分隔
+     */
+    @Override
+    public String selectUrlByIds(String ossIds) {
+        log.warn("服务调用异常 -> 降级处理");
+        return StringUtils.EMPTY;
+    }
+
+    /**
+     * 通过ossId查询列表
+     *
+     * @param ossIds ossId串逗号分隔
+     * @return 列表
+     */
+    @Override
+    public List<RemoteFile> selectByIds(String ossIds) {
+        log.warn("服务调用异常 -> 降级处理");
+        return List.of();
+    }
+
+    @Override
+    public List<RemoteFile> selectByIds(List<Long> ossIds) {
+        log.warn("服务调用异常 -> 降级处理");
+        return List.of();
+    }
+
+}

+ 21 - 0
ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMailService.java

@@ -0,0 +1,21 @@
+package org.dromara.resource.api;
+
+import org.dromara.common.core.exception.ServiceException;
+
+/**
+ * 邮件服务
+ *
+ * @author Lion Li
+ */
+public interface RemoteMailService {
+
+    /**
+     * 发送邮件
+     *
+     * @param to      接收人
+     * @param subject 标题
+     * @param text    内容
+     */
+    void send(String to, String subject, String text) throws ServiceException;
+
+}

+ 26 - 0
ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageService.java

@@ -0,0 +1,26 @@
+package org.dromara.resource.api;
+
+import java.util.List;
+
+/**
+ * 消息服务
+ *
+ * @author Lion Li
+ */
+public interface RemoteMessageService {
+
+    /**
+     * 发送消息
+     *
+     * @param sessionKey session主键 一般为用户id
+     * @param message    消息文本
+     */
+    void publishMessage(List<Long> sessionKey, String message);
+
+    /**
+     * 发布订阅的消息(群发)
+     *
+     * @param message 消息内容
+     */
+    void publishAll(String message);
+}

+ 47 - 0
ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageServiceStub.java

@@ -0,0 +1,47 @@
+package org.dromara.resource.api;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+/**
+ * 消息服务
+ *
+ * @author Lion Li
+ */
+@Slf4j
+@RequiredArgsConstructor
+public class RemoteMessageServiceStub implements RemoteMessageService {
+
+    private final RemoteMessageService remoteMessageService;
+
+    /**
+     * 发送消息
+     *
+     * @param sessionKey session主键 一般为用户id
+     * @param message    消息文本
+     */
+    @Override
+    public void publishMessage(List<Long> sessionKey, String message) {
+        try {
+            remoteMessageService.publishMessage(sessionKey, message);
+        } catch (Exception e) {
+            log.warn("推送功能未开启或服务未找到");
+        }
+    }
+
+    /**
+     * 发布订阅的消息(群发)
+     *
+     * @param message 消息内容
+     */
+    @Override
+    public void publishAll(String message) {
+        try {
+            remoteMessageService.publishAll(message);
+        } catch (Exception e) {
+            log.warn("推送功能未开启或服务未找到");
+        }
+    }
+}

+ 14 - 0
ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteSmsConfigService.java

@@ -0,0 +1,14 @@
+package org.dromara.resource.api;
+
+import org.dromara.resource.api.domain.RemoteSmsConfig;
+
+import java.util.List;
+
+public interface RemoteSmsConfigService {
+
+    RemoteSmsConfig getSingleConfig();
+
+    List<RemoteSmsConfig> getConfigList();
+
+    RemoteSmsConfig getConfigById(String id);
+}

+ 145 - 0
ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteSmsService.java

@@ -0,0 +1,145 @@
+package org.dromara.resource.api;
+
+import org.dromara.resource.api.domain.RemoteSms;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+
+/**
+ * 短信服务
+ *
+ * @author Feng
+ */
+public interface RemoteSmsService {
+
+    /**
+     * 同步方法:发送固定消息模板短信
+     *
+     * @param phone   目标手机号
+     * @param message 短信内容
+     * @return 封装了短信发送结果的 RemoteSms 对象
+     */
+    RemoteSms sendMessage(String phone, String message);
+
+    /**
+     * 同步方法:发送固定消息模板多模板参数短信
+     *
+     * @param phone    目标手机号
+     * @param messages 短信模板参数,使用 LinkedHashMap 以保持参数顺序
+     * @return 封装了短信发送结果的 RemoteSms 对象
+     */
+    RemoteSms sendMessage(String phone, LinkedHashMap<String, String> messages);
+
+    /**
+     * 同步方法:使用自定义模板发送短信
+     *
+     * @param phone      目标手机号
+     * @param templateId 短信模板ID
+     * @param messages   短信模板参数,使用 LinkedHashMap 以保持参数顺序
+     * @return 封装了短信发送结果的 RemoteSms 对象
+     */
+    RemoteSms sendMessage(String phone, String templateId, LinkedHashMap<String, String> messages);
+
+    /**
+     * 同步方法:群发固定模板短信
+     *
+     * @param phones  目标手机号列表(1~1000)
+     * @param message 短信内容
+     * @return 封装了短信发送结果的 RemoteSms 对象
+     */
+    RemoteSms messageTexting(List<String> phones, String message);
+
+    /**
+     * 同步方法:使用自定义模板群发短信
+     *
+     * @param phones     目标手机号列表(1~1000)(1~1000)
+     * @param templateId 短信模板ID
+     * @param messages   短信模板参数,使用 LinkedHashMap 以保持参数顺序
+     * @return 封装了短信发送结果的 RemoteSms 对象
+     */
+    RemoteSms messageTexting(List<String> phones, String templateId, LinkedHashMap<String, String> messages);
+
+    /**
+     * 异步方法:发送固定消息模板短信
+     *
+     * @param phone   目标手机号
+     * @param message 短信内容
+     */
+    void sendMessageAsync(String phone, String message);
+
+    /**
+     * 异步方法:使用自定义模板发送短信
+     *
+     * @param phone      目标手机号
+     * @param templateId 短信模板ID
+     * @param messages   短信模板参数,使用 LinkedHashMap 以保持参数顺序
+     */
+    void sendMessageAsync(String phone, String templateId, LinkedHashMap<String, String> messages);
+
+    /**
+     * 延迟发送:发送固定消息模板短信
+     *
+     * @param phone       目标手机号
+     * @param message     短信内容
+     * @param delayedTime 延迟发送时间(毫秒)
+     */
+    void delayMessage(String phone, String message, Long delayedTime);
+
+    /**
+     * 延迟发送:使用自定义模板发送定时短信
+     *
+     * @param phone       目标手机号
+     * @param templateId  短信模板ID
+     * @param messages    短信模板参数,使用 LinkedHashMap 以保持参数顺序
+     * @param delayedTime 延迟发送时间(毫秒)
+     */
+    void delayMessage(String phone, String templateId, LinkedHashMap<String, String> messages, Long delayedTime);
+
+    /**
+     * 延迟群发:群发延迟短信
+     *
+     * @param phones      目标手机号列表(1~1000)
+     * @param message     短信内容
+     * @param delayedTime 延迟发送时间(毫秒)
+     */
+    void delayMessageTexting(List<String> phones, String message, Long delayedTime);
+
+    /**
+     * 延迟群发:使用自定义模板发送群体延迟短信
+     *
+     * @param phones      目标手机号列表(1~1000)
+     * @param templateId  短信模板ID
+     * @param messages    短信模板参数,使用 LinkedHashMap 以保持参数顺序
+     * @param delayedTime 延迟发送时间(毫秒)
+     */
+    void delayMessageTexting(List<String> phones, String templateId, LinkedHashMap<String, String> messages, Long delayedTime);
+
+    /**
+     * 加入黑名单
+     *
+     * @param phone 手机号
+     */
+    void addBlacklist(String phone);
+
+    /**
+     * 加入黑名单
+     *
+     * @param phones 手机号列表
+     */
+    void addBlacklist(List<String> phones);
+
+    /**
+     * 移除黑名单
+     *
+     * @param phone 手机号
+     */
+    void removeBlacklist(String phone);
+
+    /**
+     * 移除黑名单
+     *
+     * @param phones 手机号
+     */
+    void removeBlacklist(List<String> phones);
+
+}

+ 49 - 0
ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/domain/RemoteFile.java

@@ -0,0 +1,49 @@
+package org.dromara.resource.api.domain;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 文件信息
+ *
+ * @author ruoyi
+ */
+@Data
+public class RemoteFile implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * oss主键
+     */
+    private Long ossId;
+
+    /**
+     * 文件名称
+     */
+    private String name;
+
+    /**
+     * 文件地址
+     */
+    private String url;
+
+    /**
+     * 原名
+     */
+    private String originalName;
+
+    /**
+     * 文件后缀名
+     */
+    private String fileSuffix;
+
+    /**
+     * 扩展字段
+     */
+    private String ext1;
+
+}

+ 36 - 0
ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/domain/RemoteSms.java

@@ -0,0 +1,36 @@
+package org.dromara.resource.api.domain;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 文件信息
+ *
+ * @author ruoyi
+ */
+@Data
+public class RemoteSms implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 是否成功
+     */
+    private Boolean success;
+
+    /**
+     * 配置标识名 如未配置取对应渠道名例如 Alibaba
+     */
+    private String configId;
+
+    /**
+     * 厂商原返回体
+     * <p>
+     * 可自行转换为 SDK 对应的 SendSmsResponse
+     */
+    private String response;
+
+}

+ 28 - 0
ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/domain/RemoteSmsConfig.java

@@ -0,0 +1,28 @@
+package org.dromara.resource.api.domain;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class RemoteSmsConfig implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private String configId;
+
+    private String supplier;
+
+    private String accessKeyId;
+
+    private String accessKeySecret;
+
+    private String signature;
+
+    private Integer maximum;
+
+    private String sdkAppId;
+
+}

+ 33 - 0
ruoyi-api/ruoyi-api-system/pom.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>org.dromara</groupId>
+        <artifactId>ruoyi-api</artifactId>
+        <version>${revision}</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ruoyi-api-system</artifactId>
+
+    <description>
+        ruoyi-api-system系统接口模块
+    </description>
+
+    <dependencies>
+
+        <!-- RuoYi Common Core-->
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-excel</artifactId>
+        </dependency>
+
+    </dependencies>
+
+</project>

+ 21 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteAreaStationService.java

@@ -0,0 +1,21 @@
+package org.dromara.system.api;
+
+import org.dromara.system.api.domain.vo.RemoteAreaStationVo;
+
+import java.util.List;
+
+public interface RemoteAreaStationService {
+    String selectNameById(Long id);
+
+    /**
+     * 查询子级区域/站点列表
+     *
+     * @param parentId 父级ID,null则查询顶级
+     * @return 子级列表
+     */
+    List<RemoteAreaStationVo> listByParentId(Long parentId);
+
+    List<Long> listByUserId(Long userId);
+
+    List<RemoteAreaStationVo> listAll();
+}

+ 20 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteClientService.java

@@ -0,0 +1,20 @@
+package org.dromara.system.api;
+
+import org.dromara.system.api.domain.vo.RemoteClientVo;
+
+/**
+ * 客户端服务
+ *
+ * @author Michelle.Chung
+ */
+public interface RemoteClientService {
+
+    /**
+     * 根据客户端id获取客户端详情
+     *
+     * @param clientId 客户端id
+     * @return 客户端对象
+     */
+    RemoteClientVo queryByClientId(String clientId);
+
+}

+ 107 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteConfigService.java

@@ -0,0 +1,107 @@
+package org.dromara.system.api;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.lang.Dict;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 配置服务
+ *
+ * @author Michelle.Chung
+ */
+public interface RemoteConfigService {
+
+    /**
+     * 获取注册开关
+     * @param tenantId 租户id
+     * @return true开启,false关闭
+     */
+    boolean selectRegisterEnabled(String tenantId);
+
+    /**
+     * 根据参数 key 获取参数值
+     *
+     * @param configKey 参数 key
+     * @return 参数值
+     */
+    String getConfigValue(String configKey);
+
+    /**
+     * 根据参数 key 获取布尔值
+     *
+     * @param configKey 参数 key
+     * @return Boolean 值
+     */
+    default Boolean getConfigBool(String configKey) {
+        return Convert.toBool(getConfigValue(configKey));
+    }
+
+    /**
+     * 根据参数 key 获取整数值
+     *
+     * @param configKey 参数 key
+     * @return Integer 值
+     */
+    default Integer getConfigInt(String configKey) {
+        return Convert.toInt(getConfigValue(configKey));
+    }
+
+    /**
+     * 根据参数 key 获取长整型值
+     *
+     * @param configKey 参数 key
+     * @return Long 值
+     */
+    default Long getConfigLong(String configKey) {
+        return Convert.toLong(getConfigValue(configKey));
+    }
+
+    /**
+     * 根据参数 key 获取 BigDecimal 值
+     *
+     * @param configKey 参数 key
+     * @return BigDecimal 值
+     */
+    default BigDecimal getConfigDecimal(String configKey) {
+        return Convert.toBigDecimal(getConfigValue(configKey));
+    }
+
+    /**
+     * 根据参数 key 获取 Map 类型的配置
+     *
+     * @param configKey 参数 key
+     * @return Dict 对象,如果配置为空或无法解析,返回空 Dict
+     */
+    Dict getConfigMap(String configKey);
+
+    /**
+     * 根据参数 key 获取 Map 类型的配置列表
+     *
+     * @param configKey 参数 key
+     * @return Dict 列表,如果配置为空或无法解析,返回空列表
+     */
+    List<Dict> getConfigArrayMap(String configKey);
+
+    /**
+     * 根据参数 key 获取指定类型的配置对象
+     *
+     * @param configKey 参数 key
+     * @param clazz     目标对象类型
+     * @param <T>       目标对象泛型
+     * @return 对象实例,如果配置为空或无法解析,返回 null
+     */
+    <T> T getConfigObject(String configKey, Class<T> clazz);
+
+    /**
+     * 根据参数 key 获取指定类型的配置列表
+     *
+     * @param configKey 参数 key
+     * @param clazz     目标元素类型
+     * @param <T>       元素类型泛型
+     * @return 指定类型列表,如果配置为空或无法解析,返回空列表
+     */
+    <T> List<T> getConfigArray(String configKey, Class<T> clazz);
+
+}

+ 26 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteDataScopeService.java

@@ -0,0 +1,26 @@
+package org.dromara.system.api;
+
+/**
+ * 数据权限服务
+ *
+ * @author Lion Li
+ */
+public interface RemoteDataScopeService {
+
+    /**
+     * 获取角色自定义权限语句
+     *
+     * @param roleId 角色ID
+     * @return 返回角色的自定义权限语句,如果没有找到则返回 null
+     */
+    String getRoleCustom(Long roleId);
+
+    /**
+     * 获取部门和下级权限语句
+     *
+     * @param deptId 部门ID
+     * @return 返回部门及其下级的权限语句,如果没有找到则返回 null
+     */
+    String getDeptAndChild(Long deptId);
+
+}

+ 46 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteDeptService.java

@@ -0,0 +1,46 @@
+package org.dromara.system.api;
+
+import org.dromara.system.api.domain.vo.RemoteDeptVo;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 部门服务
+ *
+ * @author Lion Li
+ */
+public interface RemoteDeptService {
+
+    /**
+     * 通过部门ID查询部门名称
+     *
+     * @param deptIds 部门ID串逗号分隔
+     * @return 部门名称串逗号分隔
+     */
+    String selectDeptNameByIds(String deptIds);
+
+    /**
+     * 根据部门ID查询部门负责人
+     *
+     * @param deptId 部门ID,用于指定需要查询的部门
+     * @return 返回该部门的负责人ID
+     */
+    Long selectDeptLeaderById(Long deptId);
+
+    /**
+     * 查询部门
+     *
+     * @return 部门列表
+     */
+    List<RemoteDeptVo> selectDeptsByList();
+
+    /**
+     * 根据部门 ID 列表查询部门名称映射关系
+     *
+     * @param deptIds 部门 ID 列表
+     * @return Map,其中 key 为部门 ID,value 为对应的部门名称
+     */
+    Map<Long, String> selectDeptNamesByIds(List<Long> deptIds);
+
+}

+ 31 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteDictService.java

@@ -0,0 +1,31 @@
+package org.dromara.system.api;
+
+import org.dromara.system.api.domain.vo.RemoteDictDataVo;
+import org.dromara.system.api.domain.vo.RemoteDictTypeVo;
+
+import java.util.List;
+
+/**
+ * 字典服务
+ *
+ * @author Lion Li
+ */
+public interface RemoteDictService {
+
+    /**
+     * 根据字典类型查询信息
+     *
+     * @param dictType 字典类型
+     * @return 字典类型
+     */
+    RemoteDictTypeVo selectDictTypeByType(String dictType);
+
+    /**
+     * 根据字典类型查询字典数据
+     *
+     * @param dictType 字典类型
+     * @return 字典数据集合信息
+     */
+    List<RemoteDictDataVo> selectDictDataByType(String dictType);
+
+}

+ 27 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteLogService.java

@@ -0,0 +1,27 @@
+package org.dromara.system.api;
+
+import org.dromara.system.api.domain.bo.RemoteLogininforBo;
+import org.dromara.system.api.domain.bo.RemoteOperLogBo;
+
+/**
+ * 日志服务
+ *
+ * @author Lion Li
+ */
+public interface RemoteLogService {
+
+    /**
+     * 保存系统日志
+     *
+     * @param sysOperLog 日志实体
+     */
+    void saveLog(RemoteOperLogBo sysOperLog);
+
+    /**
+     * 保存访问记录
+     *
+     * @param sysLogininfor 访问实体
+     */
+    void saveLogininfor(RemoteLogininforBo sysLogininfor);
+
+}

+ 28 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemotePermissionService.java

@@ -0,0 +1,28 @@
+package org.dromara.system.api;
+
+import java.util.Set;
+
+/**
+ * 用户权限处理
+ *
+ * @author Lion Li
+ */
+public interface RemotePermissionService {
+
+    /**
+     * 获取角色数据权限
+     *
+     * @param userId  用户id
+     * @return 角色权限信息
+     */
+    Set<String> getRolePermission(Long userId);
+
+    /**
+     * 获取菜单数据权限
+     *
+     * @param userId  用户id
+     * @return 菜单权限信息
+     */
+    Set<String> getMenuPermission(Long userId);
+
+}

+ 21 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemotePostService.java

@@ -0,0 +1,21 @@
+package org.dromara.system.api;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 岗位服务
+ *
+ * @author Lion Li
+ */
+public interface RemotePostService {
+
+    /**
+     * 根据岗位 ID 列表查询岗位名称映射关系
+     *
+     * @param postIds 岗位 ID 列表
+     * @return Map,其中 key 为岗位 ID,value 为对应的岗位名称
+     */
+    Map<Long, String> selectPostNamesByIds(List<Long> postIds);
+
+}

+ 21 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteRoleService.java

@@ -0,0 +1,21 @@
+package org.dromara.system.api;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 角色服务
+ *
+ * @author Lion Li
+ */
+public interface RemoteRoleService {
+
+    /**
+     * 根据角色 ID 列表查询角色名称映射关系
+     *
+     * @param roleIds 角色 ID 列表
+     * @return Map,其中 key 为角色 ID,value 为对应的角色名称
+     */
+    Map<Long, String> selectRoleNamesByIds(List<Long> roleIds);
+
+}

+ 52 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteSocialService.java

@@ -0,0 +1,52 @@
+package org.dromara.system.api;
+
+import org.dromara.system.api.domain.bo.RemoteSocialBo;
+import org.dromara.system.api.domain.vo.RemoteSocialVo;
+
+import java.util.List;
+
+/**
+ * 社会化关系服务
+ *
+ * @author Michelle.Chung
+ */
+public interface RemoteSocialService {
+
+    /**
+     * 根据 authId 查询用户授权信息
+     *
+     * @param authId 认证id
+     * @return 授权信息
+     */
+    List<RemoteSocialVo> selectByAuthId(String authId);
+
+    /**
+     * 查询列表
+     *
+     * @param bo 社会化关系业务对象
+     */
+    List<RemoteSocialVo> queryList(RemoteSocialBo bo);
+
+    /**
+     * 保存社会化关系
+     *
+     * @param bo 社会化关系业务对象
+     */
+    void insertByBo(RemoteSocialBo bo);
+
+    /**
+     * 更新社会化关系
+     *
+     * @param bo 社会化关系业务对象
+     */
+    void updateByBo(RemoteSocialBo bo);
+
+    /**
+     * 删除社会化关系
+     *
+     * @param socialId 社会化关系ID
+     * @return 结果
+     */
+    Boolean deleteWithValidById(Long socialId);
+
+}

+ 16 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteStoreService.java

@@ -0,0 +1,16 @@
+package org.dromara.system.api;
+
+import org.dromara.system.api.domain.vo.RemoteStoreVo;
+
+import java.util.List;
+
+public interface RemoteStoreService {
+    String getNameById(Long id);
+
+    List<RemoteStoreVo> getByIds(List<Long> storeIds);
+
+    List<Long> selectIdsByName(String name);
+
+    boolean expire();
+
+}

+ 45 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteTaskAssigneeService.java

@@ -0,0 +1,45 @@
+package org.dromara.system.api;
+
+import org.dromara.system.api.domain.bo.RemoteTaskAssigneeBo;
+import org.dromara.system.api.domain.vo.RemoteTaskAssigneeVo;
+
+/**
+ * 工作流设计器获取任务执行人
+ *
+ * @author Lion Li
+ */
+public interface RemoteTaskAssigneeService {
+
+    /**
+     * 查询角色并返回任务指派的列表,支持分页
+     *
+     * @param taskQuery 查询条件
+     * @return 办理人
+     */
+    RemoteTaskAssigneeVo selectRolesByTaskAssigneeList(RemoteTaskAssigneeBo taskQuery);
+
+    /**
+     * 查询岗位并返回任务指派的列表,支持分页
+     *
+     * @param taskQuery 查询条件
+     * @return 办理人
+     */
+    RemoteTaskAssigneeVo selectPostsByTaskAssigneeList(RemoteTaskAssigneeBo taskQuery);
+
+    /**
+     * 查询部门并返回任务指派的列表,支持分页
+     *
+     * @param taskQuery 查询条件
+     * @return 办理人
+     */
+    RemoteTaskAssigneeVo selectDeptsByTaskAssigneeList(RemoteTaskAssigneeBo taskQuery);
+
+    /**
+     * 查询用户并返回任务指派的列表,支持分页
+     *
+     * @param taskQuery 查询条件
+     * @return 办理人
+     */
+    RemoteTaskAssigneeVo selectUsersByTaskAssigneeList(RemoteTaskAssigneeBo taskQuery);
+
+}

+ 5 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteTenantCatergoriesService.java

@@ -0,0 +1,5 @@
+package org.dromara.system.api;
+
+public interface RemoteTenantCatergoriesService {
+    String getNameById(Long id);
+}

+ 31 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteTenantService.java

@@ -0,0 +1,31 @@
+package org.dromara.system.api;
+
+
+import org.dromara.system.api.domain.vo.RemoteTenantVo;
+
+import java.util.List;
+
+/**
+ * 租户服务
+ *
+ * @author zhujie
+ */
+public interface RemoteTenantService {
+
+    /**
+     * 根据租户id获取租户详情
+     * @param tenantId 租户id
+     * @return 结果
+     */
+    RemoteTenantVo queryByTenantId(String tenantId);
+
+    /**
+     * 获取租户列表
+     * @return 结果
+     */
+    List<RemoteTenantVo> queryList();
+
+    String queryNameByTenantId(String tenantId);
+
+    List<String> selectTenantIdsByName(String name);
+}

+ 190 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java

@@ -0,0 +1,190 @@
+package org.dromara.system.api;
+
+import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.exception.user.UserException;
+import org.dromara.system.api.domain.bo.RemoteUserBo;
+import org.dromara.system.api.domain.vo.RemoteUserVo;
+import org.dromara.system.api.model.LoginUser;
+import org.dromara.system.api.model.XcxLoginUser;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 用户服务
+ *
+ * @author Lion Li
+ */
+public interface RemoteUserService {
+
+    /**
+     * 通过用户名查询用户信息
+     *
+     * @param username 用户名
+     * @param tenantId 租户id
+     * @return 结果
+     */
+    LoginUser getUserInfo(String username, String tenantId, Integer platformId) throws UserException;
+
+    /**
+     * 通过用户id查询用户信息
+     *
+     * @param userId   用户id
+     * @param tenantId 租户id
+     * @return 结果
+     */
+    LoginUser getUserInfo(Long userId, String tenantId) throws UserException;
+
+    /**
+     * 通过手机号查询用户信息
+     *
+     * @param phonenumber 手机号
+     * @param tenantId    租户id
+     * @return 结果
+     */
+    LoginUser getUserInfoByPhonenumber(String phonenumber, String tenantId) throws UserException;
+
+    /**
+     * 通过邮箱查询用户信息
+     *
+     * @param email    邮箱
+     * @param tenantId 租户id
+     * @return 结果
+     */
+    LoginUser getUserInfoByEmail(String email, String tenantId) throws UserException;
+
+    /**
+     * 通过openid查询用户信息
+     *
+     * @param openid openid
+     * @return 结果
+     */
+    XcxLoginUser getUserInfoByOpenid(String openid) throws UserException;
+
+    /**
+     * 注册用户信息
+     *
+     * @param remoteUserBo 用户信息
+     * @return 结果
+     */
+    Boolean registerUserInfo(RemoteUserBo remoteUserBo) throws UserException, ServiceException;
+
+    /**
+     * 直接创建用户(不检查注册开关,用于后台审核通过等场景)
+     *
+     * @param remoteUserBo 用户信息
+     * @return 创建后的用户ID
+     */
+    Long createUser(RemoteUserBo remoteUserBo) throws UserException, ServiceException;
+
+    /**
+     * 通过userId查询用户账户
+     *
+     * @param userId 用户id
+     * @return 结果
+     */
+    String selectUserNameById(Long userId);
+
+    /**
+     * 通过用户ID查询用户昵称
+     *
+     * @param userId 用户id
+     * @return 结果
+     */
+    String selectNicknameById(Long userId);
+
+    /**
+     * 通过用户ID查询用户账户
+     *
+     * @param userIds 用户ID 多个用逗号隔开
+     * @return 用户名称
+     */
+    String selectNicknameByIds(String userIds);
+
+    /**
+     * 通过用户ID查询用户手机号
+     *
+     * @param userId 用户id
+     * @return 用户手机号
+     */
+    String selectPhonenumberById(Long userId);
+
+    /**
+     * 通过用户ID查询用户邮箱
+     *
+     * @param userId 用户id
+     * @return 用户邮箱
+     */
+    String selectEmailById(Long userId);
+
+    /**
+     * 更新用户信息
+     *
+     * @param userId 用户ID
+     * @param ip     IP地址
+     */
+    void recordLoginInfo(Long userId, String ip);
+
+    /**
+     * 通过用户ID查询用户列表
+     *
+     * @param userIds 用户ids
+     * @return 用户列表
+     */
+    List<RemoteUserVo> selectListByIds(List<Long> userIds);
+
+    /**
+     * 通过角色ID查询用户ID
+     *
+     * @param roleIds 角色ids
+     * @return 用户ids
+     */
+    List<Long> selectUserIdsByRoleIds(List<Long> roleIds);
+
+    /**
+     * 通过角色ID查询用户
+     *
+     * @param roleIds 角色ids
+     * @return 用户
+     */
+    List<RemoteUserVo> selectUsersByRoleIds(List<Long> roleIds);
+
+    /**
+     * 通过部门ID查询用户
+     *
+     * @param deptIds 部门ids
+     * @return 用户
+     */
+    List<RemoteUserVo> selectUsersByDeptIds(List<Long> deptIds);
+
+    /**
+     * 通过岗位ID查询用户
+     *
+     * @param postIds 岗位ids
+     * @return 用户
+     */
+    List<RemoteUserVo> selectUsersByPostIds(List<Long> postIds);
+
+    /**
+     * 根据用户 ID 列表查询用户名称映射关系
+     *
+     * @param userIds 用户 ID 列表
+     * @return Map,其中 key 为用户 ID,value 为对应的用户名称
+     */
+    Map<Long, String> selectUserNamesByIds(List<Long> userIds);
+
+    /**
+     * 重置用户密码(密码需已BCrypt加密)
+     *
+     * @param userId   用户ID
+     * @param password BCrypt加密后的密码
+     * @return 结果
+     */
+    int resetUserPwd(Long userId, String password);
+
+    List<Long> selectUserIdsByName(String username);
+
+    List<RemoteUserVo> getByIds(List<Long> userIds);
+
+    List<RemoteUserVo> selectListByName(String username);
+}

+ 71 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/SysUserOnline.java

@@ -0,0 +1,71 @@
+package org.dromara.system.api.domain;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 当前在线会话
+ *
+ * @author Lion Li
+ */
+@Data
+@NoArgsConstructor
+public class SysUserOnline implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 会话编号
+     */
+    private String tokenId;
+
+    /**
+     * 部门名称
+     */
+    private String deptName;
+
+    /**
+     * 用户名称
+     */
+    private String userName;
+
+    /**
+     * 客户端
+     */
+    private String clientKey;
+
+    /**
+     * 设备类型
+     */
+    private String deviceType;
+
+    /**
+     * 登录IP地址
+     */
+    private String ipaddr;
+
+    /**
+     * 登录地址
+     */
+    private String loginLocation;
+
+    /**
+     * 浏览器类型
+     */
+    private String browser;
+
+    /**
+     * 操作系统
+     */
+    private String os;
+
+    /**
+     * 登录时间
+     */
+    private Long loginTime;
+
+}

+ 89 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteLogininforBo.java

@@ -0,0 +1,89 @@
+package org.dromara.system.api.domain.bo;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 系统访问记录表 sys_logininfor
+ *
+ * @author Lion Li
+ */
+@Data
+@NoArgsConstructor
+public class RemoteLogininforBo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 访问ID
+     */
+    private Long infoId;
+
+    /**
+     * 租户编号
+     */
+    private String tenantId;
+
+    /**
+     * 用户账号
+     */
+    private String userName;
+
+    /**
+     * 客户端
+     */
+    private String clientKey;
+
+    /**
+     * 设备类型
+     */
+    private String deviceType;
+
+    /**
+     * 登录IP地址
+     */
+    private String ipaddr;
+
+    /**
+     * 登录地点
+     */
+    private String loginLocation;
+
+    /**
+     * 浏览器类型
+     */
+    private String browser;
+
+    /**
+     * 操作系统
+     */
+    private String os;
+
+    /**
+     * 登录状态(0成功 1失败)
+     */
+    private String status;
+
+    /**
+     * 提示消息
+     */
+    private String msg;
+
+    /**
+     * 访问时间
+     */
+    private Date loginTime;
+
+    /**
+     * 请求参数
+     */
+    private Map<String, Object> params = new HashMap<>();
+
+}

+ 119 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteOperLogBo.java

@@ -0,0 +1,119 @@
+package org.dromara.system.api.domain.bo;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 操作日志记录表 oper_log
+ *
+ * @author Lion Li
+ */
+@Data
+@NoArgsConstructor
+public class RemoteOperLogBo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 日志主键
+     */
+    private Long operId;
+
+    /**
+     * 租户编号
+     */
+    private String tenantId;
+
+    /**
+     * 模块标题
+     */
+    private String title;
+
+    /**
+     * 业务类型(0其它 1新增 2修改 3删除)
+     */
+    private Integer businessType;
+
+    /**
+     * 方法名称
+     */
+    private String method;
+
+    /**
+     * 请求方式
+     */
+    private String requestMethod;
+
+    /**
+     * 操作类别(0其它 1后台用户 2手机端用户)
+     */
+    private Integer operatorType;
+
+    /**
+     * 操作人员
+     */
+    private String operName;
+
+    /**
+     * 部门名称
+     */
+    private String deptName;
+
+    /**
+     * 请求URL
+     */
+    private String operUrl;
+
+    /**
+     * 主机地址
+     */
+    private String operIp;
+
+    /**
+     * 操作地点
+     */
+    private String operLocation;
+
+    /**
+     * 请求参数
+     */
+    private String operParam;
+
+    /**
+     * 返回参数
+     */
+    private String jsonResult;
+
+    /**
+     * 操作状态(0正常 1异常)
+     */
+    private Integer status;
+
+    /**
+     * 错误消息
+     */
+    private String errorMsg;
+
+    /**
+     * 操作时间
+     */
+    private Date operTime;
+
+    /**
+     * 消耗时间
+     */
+    private Long costTime;
+
+    /**
+     * 请求参数
+     */
+    private Map<String, Object> params = new HashMap<>();
+
+}

+ 129 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteSocialBo.java

@@ -0,0 +1,129 @@
+package org.dromara.system.api.domain.bo;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 社会化关系业务对象 sys_social
+ *
+ * @author Michelle.Chung
+ */
+@Data
+@NoArgsConstructor
+public class RemoteSocialBo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1L;
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 的唯一ID
+     */
+    private String authId;
+
+    /**
+     * 用户来源
+     */
+    private String source;
+
+    /**
+     * 用户的授权令牌
+     */
+    private String accessToken;
+
+    /**
+     * 用户的授权令牌的有效期,部分平台可能没有
+     */
+    private int expireIn;
+
+    /**
+     * 刷新令牌,部分平台可能没有
+     */
+    private String refreshToken;
+
+    /**
+     * 平台唯一id
+     */
+    private String openId;
+
+    /**
+     * 用户的 ID
+     */
+    private Long userId;
+
+    /**
+     * 平台的授权信息,部分平台可能没有
+     */
+    private String accessCode;
+
+    /**
+     * 用户的 unionid
+     */
+    private String unionId;
+
+    /**
+     * 授予的权限,部分平台可能没有
+     */
+    private String scope;
+
+    /**
+     * 授权的第三方账号
+     */
+    private String userName;
+
+    /**
+     * 授权的第三方昵称
+     */
+    private String nickName;
+
+    /**
+     * 授权的第三方邮箱
+     */
+    private String email;
+
+    /**
+     * 授权的第三方头像地址
+     */
+    private String avatar;
+
+    /**
+     * 个别平台的授权信息,部分平台可能没有
+     */
+    private String tokenType;
+
+    /**
+     * id token,部分平台可能没有
+     */
+    private String idToken;
+
+    /**
+     * 小米平台用户的附带属性,部分平台可能没有
+     */
+    private String macAlgorithm;
+
+    /**
+     * 小米平台用户的附带属性,部分平台可能没有
+     */
+    private String macKey;
+
+    /**
+     * 用户的授权code,部分平台可能没有
+     */
+    private String code;
+
+    /**
+     * Twitter平台用户的附带属性,部分平台可能没有
+     */
+    private String oauthToken;
+
+    /**
+     * Twitter平台用户的附带属性,部分平台可能没有
+     */
+    private String oauthTokenSecret;
+
+}

+ 56 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteTaskAssigneeBo.java

@@ -0,0 +1,56 @@
+package org.dromara.system.api.domain.bo;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 任务受让人
+ *
+ * @author AprilWind
+ */
+@Data
+@NoArgsConstructor
+public class RemoteTaskAssigneeBo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 权限编码
+     */
+    private String handlerCode;
+
+    /**
+     * 权限名称
+     */
+    private String handlerName;
+
+    /**
+     * 权限分组
+     */
+    private String groupId;
+
+    /**
+     * 开始时间
+     */
+    private String beginTime;
+
+    /**
+     * 结束时间
+     */
+    private String endTime;
+
+    /**
+     * 当前页
+     */
+    private Integer pageNum = 1;
+
+    /**
+     * 每页显示条数
+     */
+    private Integer pageSize = 10;
+
+}

+ 129 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteUserBo.java

@@ -0,0 +1,129 @@
+package org.dromara.system.api.domain.bo;
+
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.dromara.common.core.constant.SystemConstants;
+import org.dromara.common.core.xss.Xss;
+
+import jakarta.validation.constraints.Email;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Size;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 用户信息业务对象 sys_user
+ *
+ * @author Michelle.Chung
+ */
+@Data
+@NoArgsConstructor
+public class RemoteUserBo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户ID
+     */
+    private Long userId;
+
+    /**
+     * 租户ID
+     */
+    private String tenantId;
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+
+    /**
+     * 用户账号
+     */
+    @Xss(message = "用户账号不能包含脚本字符")
+    @NotBlank(message = "用户账号不能为空")
+    @Size(min = 0, max = 30, message = "用户账号长度不能超过{max}个字符")
+    private String userName;
+
+    /**
+     * 用户昵称
+     */
+    @Xss(message = "用户昵称不能包含脚本字符")
+    @Size(min = 0, max = 30, message = "用户昵称长度不能超过{max}个字符")
+    private String nickName;
+
+    /**
+     * 用户类型(sys_user系统用户)
+     */
+    private String userType;
+
+    /**
+     * 用户邮箱
+     */
+    @Email(message = "邮箱格式不正确")
+    @Size(min = 0, max = 50, message = "邮箱长度不能超过{max}个字符")
+    private String email;
+
+    /**
+     * 手机号码
+     */
+    private String phonenumber;
+
+    /**
+     * 用户性别(0男 1女 2未知)
+     */
+    private String sex;
+
+    /**
+     * 头像地址
+     */
+    private Long avatar;
+
+    /**
+     * 密码
+     */
+    private String password;
+
+    /**
+     * 账号状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 最后登录IP
+     */
+    private String loginIp;
+
+    /**
+     * 最后登录时间
+     */
+    private Date loginDate;
+
+    /**
+     * 平台ID
+     */
+    private Integer platformId;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 数据权限 当前角色ID
+     */
+    private Long roleId;
+
+    public RemoteUserBo(Long userId) {
+        this.userId = userId;
+    }
+
+    public boolean isSuperAdmin() {
+        return SystemConstants.SUPER_ADMIN_ID.equals(this.userId);
+    }
+
+}

+ 24 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteAreaStationVo.java

@@ -0,0 +1,24 @@
+package org.dromara.system.api.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 区域站点远程调用VO
+ *
+ * @author steelwei
+ */
+@Data
+public class RemoteAreaStationVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+    private String name;
+    private Long parentId;
+    private Integer type;
+    private Integer status;
+}

+ 70 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteClientVo.java

@@ -0,0 +1,70 @@
+package org.dromara.system.api.domain.vo;
+
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+
+/**
+ * 授权管理视图对象 sys_client
+ *
+ * @author Michelle.Chung
+ */
+@Data
+public class RemoteClientVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    private Long id;
+
+    /**
+     * 客户端id
+     */
+    private String clientId;
+
+    /**
+     * 客户端key
+     */
+    private String clientKey;
+
+    /**
+     * 客户端秘钥
+     */
+    private String clientSecret;
+
+    /**
+     * 授权类型
+     */
+    private List<String> grantTypeList;
+
+    /**
+     * 授权类型
+     */
+    private String grantType;
+
+    /**
+     * 设备类型
+     */
+    private String deviceType;
+
+    /**
+     * token活跃超时时间
+     */
+    private Long activeTimeout;
+
+    /**
+     * token固定超时时间
+     */
+    private Long timeout;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+
+}

+ 37 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteDeptVo.java

@@ -0,0 +1,37 @@
+package org.dromara.system.api.domain.vo;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 部门
+ *
+ * @author AprilWind
+ */
+
+@Data
+@NoArgsConstructor
+public class RemoteDeptVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+
+    /**
+     * 父部门ID
+     */
+    private Long parentId;
+
+    /**
+     * 部门名称
+     */
+    private String deptName;
+
+}

+ 76 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteDictDataVo.java

@@ -0,0 +1,76 @@
+package org.dromara.system.api.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 字典数据视图对象 sys_dict_data
+ *
+ * @author Michelle.Chung
+ */
+@Data
+public class RemoteDictDataVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 字典编码
+     */
+    private Long dictCode;
+
+    /**
+     * 字典排序
+     */
+    private Integer dictSort;
+
+    /**
+     * 字典标签
+     */
+    private String dictLabel;
+
+    /**
+     * 字典键值
+     */
+    private String dictValue;
+
+    /**
+     * 字典类型
+     */
+    private String dictType;
+
+    /**
+     * 样式属性(其他样式扩展)
+     */
+    private String cssClass;
+
+    /**
+     * 表格回显样式
+     */
+    private String listClass;
+
+    /**
+     * 是否默认(Y是 N否)
+     */
+    private String isDefault;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+}

+ 46 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteDictTypeVo.java

@@ -0,0 +1,46 @@
+package org.dromara.system.api.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 字典类型视图对象 sys_dict_type
+ *
+ * @author Michelle.Chung
+ */
+@Data
+public class RemoteDictTypeVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 字典主键
+     */
+    private Long dictId;
+
+    /**
+     * 字典名称
+     */
+    private String dictName;
+
+    /**
+     * 字典类型
+     */
+    private String dictType;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+}

+ 135 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteSocialVo.java

@@ -0,0 +1,135 @@
+package org.dromara.system.api.domain.vo;
+
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+
+
+/**
+ * 社会化关系视图对象 sys_social
+ *
+ * @author thiszhc
+ */
+@Data
+public class RemoteSocialVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 用户ID
+     */
+    private Long userId;
+
+    /**
+     * 租户ID
+     */
+    private String tenantId;
+
+    /**
+     * 认证唯一ID
+     */
+    private String authId;
+
+    /**
+     * 用户来源
+     */
+    private String source;
+
+    /**
+     * 用户的授权令牌
+     */
+    private String accessToken;
+
+    /**
+     * 用户的授权令牌的有效期,部分平台可能没有
+     */
+    private int expireIn;
+
+    /**
+     * 刷新令牌,部分平台可能没有
+     */
+    private String refreshToken;
+
+    /**
+     * 用户的 open id
+     */
+    private String openId;
+
+    /**
+     * 授权的第三方账号
+     */
+    private String userName;
+
+    /**
+     * 授权的第三方昵称
+     */
+    private String nickName;
+
+    /**
+     * 授权的第三方邮箱
+     */
+    private String email;
+
+    /**
+     * 授权的第三方头像地址
+     */
+    private String avatar;
+
+
+    /**
+     * 平台的授权信息,部分平台可能没有
+     */
+    private String accessCode;
+
+    /**
+     * 用户的 unionid
+     */
+    private String unionId;
+
+    /**
+     * 授予的权限,部分平台可能没有
+     */
+    private String scope;
+
+    /**
+     * 个别平台的授权信息,部分平台可能没有
+     */
+    private String tokenType;
+
+    /**
+     * id token,部分平台可能没有
+     */
+    private String idToken;
+
+    /**
+     * 小米平台用户的附带属性,部分平台可能没有
+     */
+    private String macAlgorithm;
+
+    /**
+     * 小米平台用户的附带属性,部分平台可能没有
+     */
+    private String macKey;
+
+    /**
+     * 用户的授权code,部分平台可能没有
+     */
+    private String code;
+
+    /**
+     * Twitter平台用户的附带属性,部分平台可能没有
+     */
+    private String oauthToken;
+
+    /**
+     * Twitter平台用户的附带属性,部分平台可能没有
+     */
+    private String oauthTokenSecret;
+
+}

+ 18 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteStoreVo.java

@@ -0,0 +1,18 @@
+package org.dromara.system.api.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class RemoteStoreVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    private String name;
+
+}

+ 104 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteTaskAssigneeVo.java

@@ -0,0 +1,104 @@
+package org.dromara.system.api.domain.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * 任务受让人
+ *
+ * @author AprilWind
+ */
+@Data
+@NoArgsConstructor
+public class RemoteTaskAssigneeVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 总大小
+     */
+    private Long total = 0L;
+
+    /**
+     *
+     */
+    private List<TaskHandler> list;
+
+    public RemoteTaskAssigneeVo(Long total, List<TaskHandler> list) {
+        this.total = total;
+        this.list = list;
+    }
+
+    /**
+     * 将源列表转换为 TaskHandler 列表
+     *
+     * @param <T>              通用类型
+     * @param sourceList       待转换的源列表
+     * @param storageId        提取 storageId 的函数
+     * @param handlerCode      提取 handlerCode 的函数
+     * @param handlerName      提取 handlerName 的函数
+     * @param groupName        提取 groupName 的函数
+     * @param createTimeMapper 提取 createTime 的函数
+     * @return 转换后的 TaskHandler 列表
+     */
+    public static <T> List<TaskHandler> convertToHandlerList(
+        List<T> sourceList,
+        Function<T, String> storageId,
+        Function<T, String> handlerCode,
+        Function<T, String> handlerName,
+        Function<T, String> groupName,
+        Function<T, Date> createTimeMapper) {
+        return sourceList.stream()
+            .map(item -> new TaskHandler(
+                storageId.apply(item),
+                handlerCode.apply(item),
+                handlerName.apply(item),
+                groupName.apply(item),
+                createTimeMapper.apply(item)
+            )).collect(Collectors.toList());
+    }
+
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class TaskHandler implements Serializable {
+
+        @Serial
+        private static final long serialVersionUID = 1L;
+
+        /**
+         * 主键
+         */
+        private String storageId;
+
+        /**
+         * 权限编码
+         */
+        private String handlerCode;
+
+        /**
+         * 权限名称
+         */
+        private String handlerName;
+
+        /**
+         * 权限分组
+         */
+        private String groupName;
+
+        /**
+         * 创建时间
+         */
+        private Date createTime;
+    }
+
+}

+ 91 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteTenantVo.java

@@ -0,0 +1,91 @@
+package org.dromara.system.api.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 租户视图对象
+ *
+ * @author zhujie
+ */
+@Data
+public class RemoteTenantVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    private Long id;
+
+    /**
+     * 租户编号
+     */
+    private String tenantId;
+
+    /**
+     * 联系人
+     */
+    private String contactUserName;
+
+    /**
+     * 联系电话
+     */
+    private String contactPhone;
+
+    /**
+     * 企业名称
+     */
+    private String companyName;
+
+    /**
+     * 统一社会信用代码
+     */
+    private String licenseNumber;
+
+    /**
+     * 地址
+     */
+    private String address;
+
+    /**
+     * 域名
+     */
+    private String domain;
+
+    /**
+     * 企业简介
+     */
+    private String intro;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 租户套餐编号
+     */
+    private Long packageId;
+
+    /**
+     * 过期时间
+     */
+    private Date expireTime;
+
+    /**
+     * 用户数量(-1不限制)
+     */
+    private Long accountCount;
+
+    /**
+     * 租户状态(0正常 1停用)
+     */
+    private String status;
+
+}

+ 73 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteUserVo.java

@@ -0,0 +1,73 @@
+package org.dromara.system.api.domain.vo;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 用户
+ *
+ * @author Michelle.Chung
+ */
+@Data
+@NoArgsConstructor
+public class RemoteUserVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户ID
+     */
+    private Long userId;
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+
+    /**
+     * 用户账号
+     */
+    private String userName;
+
+    /**
+     * 用户昵称
+     */
+    private String nickName;
+
+    /**
+     * 用户类型(sys_user系统用户)
+     */
+    private String userType;
+
+    /**
+     * 用户邮箱
+     */
+    private String email;
+
+    /**
+     * 手机号码
+     */
+    private String phonenumber;
+
+    /**
+     * 用户性别(0男 1女 2未知)
+     */
+    private String sex;
+
+    /**
+     * 账号状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+}

+ 151 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/model/LoginUser.java

@@ -0,0 +1,151 @@
+package org.dromara.system.api.model;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 用户信息
+ *
+ * @author ruoyi
+ */
+@Data
+@NoArgsConstructor
+public class LoginUser implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 租户ID
+     */
+    private String tenantId;
+
+    /**
+     * 用户ID
+     */
+    private Long userId;
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+
+    /**
+     * 部门类别编码
+     */
+    private String deptCategory;
+
+    /**
+     * 部门名
+     */
+    private String deptName;
+
+    /**
+     * 用户唯一标识
+     */
+    private String token;
+
+    /**
+     * 用户类型
+     */
+    private String userType;
+
+    /**
+     * 登录时间
+     */
+    private Long loginTime;
+
+    /**
+     * 过期时间
+     */
+    private Long expireTime;
+
+    /**
+     * 登录IP地址
+     */
+    private String ipaddr;
+
+    /**
+     * 登录地点
+     */
+    private String loginLocation;
+
+    /**
+     * 浏览器类型
+     */
+    private String browser;
+
+    /**
+     * 操作系统
+     */
+    private String os;
+
+    /**
+     * 菜单权限
+     */
+    private Set<String> menuPermission;
+
+    /**
+     * 角色权限
+     */
+    private Set<String> rolePermission;
+
+    /**
+     * 用户名
+     */
+    private String username;
+
+    /**
+     * 用户昵称
+     */
+    private String nickname;
+
+    /**
+     * 密码
+     */
+    private String password;
+
+    /**
+     * 角色对象
+     */
+    private List<RoleDTO> roles;
+
+    /**
+     * 岗位对象
+     */
+    private List<PostDTO> posts;
+
+    /**
+     * 数据权限 当前角色ID
+     */
+    private Long roleId;
+
+    /**
+     * 客户端
+     */
+    private String clientKey;
+
+    /**
+     * 设备类型
+     */
+    private String deviceType;
+
+    /**
+     * 获取登录id
+     */
+    public String getLoginId() {
+        if (userType == null) {
+            throw new IllegalArgumentException("用户类型不能为空");
+        }
+        if (userId == null) {
+            throw new IllegalArgumentException("用户ID不能为空");
+        }
+        return userType + ":" + userId;
+    }
+
+}

+ 46 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/model/PostDTO.java

@@ -0,0 +1,46 @@
+package org.dromara.system.api.model;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 岗位
+ *
+ * @author AprilWind
+ */
+@Data
+@NoArgsConstructor
+public class PostDTO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 岗位ID
+     */
+    private Long postId;
+
+    /**
+     * 部门id
+     */
+    private Long deptId;
+
+    /**
+     * 岗位编码
+     */
+    private String postCode;
+
+    /**
+     * 岗位名称
+     */
+    private String postName;
+
+    /**
+     * 岗位类别编码
+     */
+    private String postCategory;
+
+}

+ 42 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/model/RoleDTO.java

@@ -0,0 +1,42 @@
+package org.dromara.system.api.model;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 角色
+ *
+ * @author Lion Li
+ */
+
+@Data
+@NoArgsConstructor
+public class RoleDTO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 角色ID
+     */
+    private Long roleId;
+
+    /**
+     * 角色名称
+     */
+    private String roleName;
+
+    /**
+     * 角色权限
+     */
+    private String roleKey;
+
+    /**
+     * 数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限 5:仅本人数据权限 6:部门及以下或本人数据权限)
+     */
+    private String dataScope;
+
+}

+ 27 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/model/XcxLoginUser.java

@@ -0,0 +1,27 @@
+package org.dromara.system.api.model;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+
+/**
+ * 小程序登录用户身份权限
+ *
+ * @author Lion Li
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+public class XcxLoginUser extends LoginUser {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * openid
+     */
+    private String openid;
+
+}

+ 35 - 0
ruoyi-api/ruoyi-api-workflow/pom.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>org.dromara</groupId>
+        <artifactId>ruoyi-api</artifactId>
+        <version>${revision}</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ruoyi-api-workflow</artifactId>
+
+    <description>
+        ruoyi-api-workflow 工作流接口模块
+    </description>
+
+    <dependencies>
+
+        <!-- RuoYi Common Core-->
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-core</artifactId>
+        </dependency>
+
+        <!-- 非必需模块 如果需要跟工作流同步数据 则需要在对应服务内引入bus模块 如果只是调用工作流api则不需要 -->
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-bus</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+    </dependencies>
+
+</project>

+ 106 - 0
ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java

@@ -0,0 +1,106 @@
+package org.dromara.workflow.api;
+
+import org.dromara.workflow.api.domain.RemoteCompleteTask;
+import org.dromara.workflow.api.domain.RemoteStartProcess;
+import org.dromara.workflow.api.domain.RemoteStartProcessReturn;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 通用 工作流服务
+ *
+ * @Author ZETA
+ * @Date 2024/6/3
+ */
+public interface RemoteWorkflowService {
+
+    /**
+     * 运行中的实例 删除程实例,删除历史记录,删除业务与流程关联信息
+     *
+     * @param businessIds 业务id
+     * @return 结果
+     */
+    boolean deleteInstance(List<String> businessIds);
+
+    /**
+     * 获取当前流程状态
+     *
+     * @param taskId 任务id
+     * @return 状态
+     */
+    String getBusinessStatusByTaskId(Long taskId);
+
+    /**
+     * 获取当前流程状态
+     *
+     * @param businessId 业务id
+     * @return 状态
+     */
+    String getBusinessStatus(String businessId);
+
+    /**
+     * 设置流程变量
+     *
+     * @param instanceId 流程实例id
+     * @param variable   流程变量
+     */
+    void setVariable(Long instanceId, Map<String, Object> variable);
+
+    /**
+     * 获取流程变量
+     *
+     * @param instanceId 流程实例id
+     */
+    Map<String, Object> instanceVariable(Long instanceId);
+
+    /**
+     * 按照业务id查询流程实例id
+     *
+     * @param businessId 业务id
+     * @return 结果
+     */
+    Long getInstanceIdByBusinessId(String businessId);
+
+    /**
+     * 新增租户流程定义
+     *
+     * @param tenantId 租户id
+     */
+    void syncDef(String tenantId);
+
+    /**
+     * 启动流程
+     *
+     * @param startProcess 参数
+     * @return 结果
+     */
+    RemoteStartProcessReturn startWorkFlow(RemoteStartProcess startProcess);
+
+    /**
+     * 办理任务
+     *
+     * @param completeTask 参数
+     * @return 结果
+     */
+    boolean completeTask(RemoteCompleteTask completeTask);
+
+
+    /**
+     * 办理任务
+     *
+     * @param taskId  任务ID
+     * @param message 办理意见
+     * @return 结果
+     */
+    boolean completeTask(Long taskId, String message);
+
+    /**
+     * 启动流程并办理第一个任务
+     *
+     * @param startProcess 参数
+     * @return 结果
+     */
+    boolean startCompleteTask(RemoteStartProcess startProcess);
+
+}

+ 83 - 0
ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowServiceMock.java

@@ -0,0 +1,83 @@
+package org.dromara.workflow.api;
+
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.workflow.api.domain.RemoteCompleteTask;
+import org.dromara.workflow.api.domain.RemoteStartProcess;
+import org.dromara.workflow.api.domain.RemoteStartProcessReturn;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 工作流服务(降级处理)
+ *
+ * @author Lion Li
+ */
+@Slf4j
+public class RemoteWorkflowServiceMock implements RemoteWorkflowService {
+
+    @Override
+    public boolean deleteInstance(List<String> businessIds) {
+        log.warn("服务调用异常 -> 降级处理");
+        return false;
+    }
+
+    @Override
+    public String getBusinessStatusByTaskId(Long taskId) {
+        log.warn("服务调用异常 -> 降级处理");
+        return null;
+    }
+
+    @Override
+    public String getBusinessStatus(String businessId) {
+        log.warn("服务调用异常 -> 降级处理");
+        return null;
+    }
+
+    @Override
+    public void setVariable(Long instanceId, Map<String, Object> variable) {
+        log.warn("服务调用异常 -> 降级处理");
+    }
+
+    @Override
+    public Map<String, Object> instanceVariable(Long instanceId) {
+        log.warn("服务调用异常 -> 降级处理");
+        return null;
+    }
+
+    @Override
+    public Long getInstanceIdByBusinessId(String businessId) {
+        log.warn("服务调用异常 -> 降级处理");
+        return null;
+    }
+
+    @Override
+    public void syncDef(String tenantId) {
+        log.warn("服务调用异常 -> 降级处理");
+    }
+
+    @Override
+    public RemoteStartProcessReturn startWorkFlow(RemoteStartProcess startProcess) {
+        log.warn("服务调用异常 -> 降级处理");
+        return null;
+    }
+
+    @Override
+    public boolean completeTask(RemoteCompleteTask completeTask) {
+        log.warn("服务调用异常 -> 降级处理");
+        return false;
+    }
+
+    @Override
+    public boolean completeTask(Long taskId, String message) {
+        log.warn("服务调用异常 -> 降级处理");
+        return false;
+    }
+
+    @Override
+    public boolean startCompleteTask(RemoteStartProcess startProcess) {
+        log.warn("服务调用异常 -> 降级处理");
+        return false;
+    }
+
+}

+ 76 - 0
ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/domain/RemoteCompleteTask.java

@@ -0,0 +1,76 @@
+package org.dromara.workflow.api.domain;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * 办理任务请求对象
+ *
+ * @author may
+ */
+@Data
+public class RemoteCompleteTask implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 任务id
+     */
+    private Long taskId;
+
+    /**
+     * 附件id
+     */
+    private String fileId;
+
+    /**
+     * 抄送人员
+     */
+    private List<RemoteFlowCopy> flowCopyList;
+
+    /**
+     * 消息类型
+     */
+    private List<String> messageType;
+
+    /**
+     * 办理意见
+     */
+    private String message;
+
+    /**
+     * 消息通知
+     */
+    private String notice;
+
+    /**
+     * 办理人(可不填 用于覆盖当前节点办理人)
+     */
+    private String handler;
+
+    /**
+     * 流程变量
+     */
+    private Map<String, Object> variables;
+
+    /**
+     * 扩展变量(此处为逗号分隔的ossId)
+     */
+    private String ext;
+
+    public Map<String, Object> getVariables() {
+        if (variables == null) {
+            return new HashMap<>(16);
+        }
+        variables.entrySet().removeIf(entry -> Objects.isNull(entry.getValue()));
+        return variables;
+    }
+
+}

+ 30 - 0
ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/domain/RemoteFlowCopy.java

@@ -0,0 +1,30 @@
+package org.dromara.workflow.api.domain;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+/**
+ * 抄送
+ *
+ * @author may
+ */
+@Data
+public class RemoteFlowCopy implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 用户名称
+     */
+    private String userName;
+
+}

+ 45 - 0
ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/domain/RemoteFlowInstanceBizExt.java

@@ -0,0 +1,45 @@
+package org.dromara.workflow.api.domain;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 流程实例业务扩展对象
+ *
+ * @author may
+ * @date 2025-08-05
+ */
+@Data
+public class RemoteFlowInstanceBizExt implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 流程实例ID
+     */
+    private Long instanceId;
+
+    /**
+     * 业务ID
+     */
+    private String businessId;
+
+    /**
+     * 业务编码
+     */
+    private String businessCode;
+
+    /**
+     * 业务标题
+     */
+    private String businessTitle;
+
+}

+ 64 - 0
ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/domain/RemoteStartProcess.java

@@ -0,0 +1,64 @@
+package org.dromara.workflow.api.domain;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * 启动流程对象
+ *
+ * @author may
+ */
+@Data
+public class RemoteStartProcess implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 业务唯一值id
+     */
+    private String businessId;
+
+    /**
+     * 流程定义编码
+     */
+    private String flowCode;
+
+    /**
+     * 办理人(可不填 用于覆盖当前节点办理人)
+     */
+    private String handler;
+
+    /**
+     * 流程变量,前端会提交一个元素{'entity': {业务详情数据对象}}
+     */
+    private Map<String, Object> variables;
+
+    /**
+     * 流程业务扩展信息
+     */
+    private RemoteFlowInstanceBizExt bizExt;
+
+    public Map<String, Object> getVariables() {
+        if (variables == null) {
+            return new HashMap<>(16);
+        }
+        variables.entrySet().removeIf(entry -> Objects.isNull(entry.getValue()));
+        return variables;
+    }
+
+    public RemoteFlowInstanceBizExt getBizExt() {
+        if (ObjectUtil.isNull(bizExt)) {
+            bizExt = new RemoteFlowInstanceBizExt();
+        }
+        return bizExt;
+    }
+
+}

+ 30 - 0
ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/domain/RemoteStartProcessReturn.java

@@ -0,0 +1,30 @@
+package org.dromara.workflow.api.domain;
+
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 启动流程返回对象
+ *
+ * @author Lion Li
+ */
+@Data
+public class RemoteStartProcessReturn implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 流程实例id
+     */
+    private Long processInstanceId;
+
+    /**
+     * 任务id
+     */
+    private Long taskId;
+
+}

+ 41 - 0
ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/event/ProcessDeleteEvent.java

@@ -0,0 +1,41 @@
+package org.dromara.workflow.api.event;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.core.utils.SpringUtils;
+import org.springframework.cloud.bus.event.RemoteApplicationEvent;
+
+import java.io.Serial;
+
+/**
+ * 删除流程监听
+ *
+ * @author AprilWind
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ProcessDeleteEvent extends RemoteApplicationEvent {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 租户ID
+     */
+    private String tenantId;
+
+    /**
+     * 流程定义编码
+     */
+    private String flowCode;
+
+    /**
+     * 业务id
+     */
+    private String businessId;
+
+    public ProcessDeleteEvent() {
+        super(new Object(), SpringUtils.getApplicationName(), DEFAULT_DESTINATION_FACTORY.getDestination(null));
+    }
+
+}

+ 77 - 0
ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/event/ProcessEvent.java

@@ -0,0 +1,77 @@
+package org.dromara.workflow.api.event;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.core.utils.SpringUtils;
+import org.springframework.cloud.bus.event.RemoteApplicationEvent;
+
+import java.io.Serial;
+import java.util.Map;
+
+/**
+ * 总体流程监听
+ *
+ * @author may
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ProcessEvent extends RemoteApplicationEvent {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 租户ID
+     */
+    private String tenantId;
+
+    /**
+     * 流程定义编码
+     */
+    private String flowCode;
+
+    /**
+     * 实例id
+     */
+    private Long instanceId;
+
+    /**
+     * 业务id
+     */
+    private String businessId;
+
+    /**
+     * 节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)
+     */
+    private Integer nodeType;
+
+    /**
+     * 流程节点编码
+     */
+    private String nodeCode;
+
+    /**
+     * 流程节点名称
+     */
+    private String nodeName;
+
+    /**
+     * 流程状态
+     */
+    private String status;
+
+    /**
+     * 办理参数
+     */
+    private Map<String, Object> params;
+
+    /**
+     * 当为true时为申请人节点办理
+     */
+    private Boolean submit;
+
+    public ProcessEvent() {
+        super(new Object(), SpringUtils.getApplicationName(), DEFAULT_DESTINATION_FACTORY.getDestination(null));
+    }
+
+}

+ 76 - 0
ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/event/ProcessTaskEvent.java

@@ -0,0 +1,76 @@
+package org.dromara.workflow.api.event;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.core.utils.SpringUtils;
+import org.springframework.cloud.bus.event.RemoteApplicationEvent;
+
+import java.io.Serial;
+import java.util.Map;
+
+/**
+ * 流程任务监听
+ *
+ * @author may
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ProcessTaskEvent extends RemoteApplicationEvent {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 租户ID
+     */
+    private String tenantId;
+
+    /**
+     * 流程定义编码
+     */
+    private String flowCode;
+
+    /**
+     * 节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)
+     */
+    private Integer nodeType;
+
+    /**
+     * 流程节点编码
+     */
+    private String nodeCode;
+
+    /**
+     * 流程节点名称
+     */
+    private String nodeName;
+
+    /**
+     * 任务id
+     */
+    private Long taskId;
+
+    /**
+     * 实例id
+     */
+    private Long instanceId;
+
+    /**
+     * 业务id
+     */
+    private String businessId;
+
+    /**
+     * 流程状态
+     */
+    private String status;
+
+    /**
+     * 办理参数
+     */
+    private Map<String, Object> params;
+
+    public ProcessTaskEvent() {
+        super(new Object(), SpringUtils.getApplicationName(), DEFAULT_DESTINATION_FACTORY.getDestination(null));
+    }
+}

+ 21 - 0
ruoyi-api/yingpaipay-api-archieves/pom.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.dromara</groupId>
+        <artifactId>ruoyi-api</artifactId>
+        <version>${revision}</version>
+    </parent>
+
+    <artifactId>yingpaipay-api-archieves</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>

+ 17 - 0
ruoyi-api/yingpaipay-api-archieves/src/main/java/org/dromara/api/RemoteCustomerService.java

@@ -0,0 +1,17 @@
+package org.dromara.api;
+
+import org.dromara.api.domain.vo.RemoteCustomerVo;
+
+import java.util.List;
+
+public interface RemoteCustomerService {
+    List<Long> selectIdsByName(String name);
+
+    String selectNameById(Long id);
+
+    List<RemoteCustomerVo> getByIds(List<Long> customerIds);
+
+    List<RemoteCustomerVo> selectListByName(String name);
+
+    List<Long> getIdsByNameAndPhone(String content);
+}

+ 11 - 0
ruoyi-api/yingpaipay-api-archieves/src/main/java/org/dromara/api/RemotePetService.java

@@ -0,0 +1,11 @@
+package org.dromara.api;
+
+import org.dromara.api.domain.vo.RemotePetVo;
+
+import java.util.List;
+
+public interface RemotePetService {
+    List<RemotePetVo> getByIds(List<Long> petIds);
+
+    List<RemotePetVo> getByCustomerIds(List<Long> customerIds);
+}

+ 22 - 0
ruoyi-api/yingpaipay-api-archieves/src/main/java/org/dromara/api/domain/vo/RemoteCustomerVo.java

@@ -0,0 +1,22 @@
+package org.dromara.api.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class RemoteCustomerVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    private String name;
+
+    private String address;
+
+    private String phone;
+
+}

+ 27 - 0
ruoyi-api/yingpaipay-api-archieves/src/main/java/org/dromara/api/domain/vo/RemotePetVo.java

@@ -0,0 +1,27 @@
+package org.dromara.api.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+public class RemotePetVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    private String name;
+
+    private String breed;
+
+    private Long avatar;
+
+    private Long customerId;
+
+    private BigDecimal weight;
+
+}

+ 26 - 0
ruoyi-api/yingpaipay-api-fulfiller/pom.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.dromara</groupId>
+        <artifactId>ruoyi-api</artifactId>
+        <version>${revision}</version>
+    </parent>
+
+    <artifactId>yingpaipay-api-fulfiller</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+        <!-- RuoYi Common Core-->
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-core</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>

+ 5 - 0
ruoyi-api/yingpaipay-api-fulfiller/src/main/java/org/dromara/fulfiller/api/RemoteAuditService.java

@@ -0,0 +1,5 @@
+package org.dromara.fulfiller.api;
+
+public interface RemoteAuditService {
+    long countUnderReview();
+}

+ 57 - 0
ruoyi-api/yingpaipay-api-fulfiller/src/main/java/org/dromara/fulfiller/api/RemoteFulfillerService.java

@@ -0,0 +1,57 @@
+package org.dromara.fulfiller.api;
+
+import org.dromara.common.core.exception.user.UserException;
+import org.dromara.fulfiller.api.domain.vo.RemoteFulfillerVo;
+import org.dromara.fulfiller.api.model.FulfillerLoginUser;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 履约者服务接口
+ *
+ * @author steelwei
+ */
+public interface RemoteFulfillerService {
+
+    /**
+     * 根据手机号查询履约者登录信息
+     *
+     * @param phone 手机号
+     * @return 履约者登录信息
+     * @throws UserException 用户异常
+     */
+    FulfillerLoginUser getFulfillerByPhone(String phone) throws UserException;
+
+    /**
+     * 根据ID查询履约者登录信息
+     *
+     * @param id 履约者ID
+     * @return 履约者登录信息
+     * @throws UserException 用户异常
+     */
+    FulfillerLoginUser getFulfillerById(Long id) throws UserException;
+
+    List<RemoteFulfillerVo> getByIds(List<Long> fulfillerIds);
+
+    boolean settlement(Long fulfiller, Long price, String orderCode, Long orderId);
+
+    String getNameById(Long id);
+
+    boolean taskLevelPoints();
+
+    RemoteFulfillerVo getById(Long id);
+
+    List<RemoteFulfillerVo> listAll();
+
+    Long count();
+
+    List<Long> listIdsByName(String fulfillerName);
+
+    /**
+     * 从所有履约者的 serviceTypes 中批量删除指定服务ID @Author: Antigravity
+     *
+     * @param serviceIds 待删除的服务ID集合
+     */
+    boolean removeServiceIds(Collection<Long> serviceIds);
+}

+ 9 - 0
ruoyi-api/yingpaipay-api-fulfiller/src/main/java/org/dromara/fulfiller/api/RemoteLogService.java

@@ -0,0 +1,9 @@
+package org.dromara.fulfiller.api;
+
+import org.dromara.fulfiller.api.domain.vo.RemoteLogVo;
+
+import java.util.List;
+
+public interface RemoteLogService {
+    List<RemoteLogVo> getListByUserId(Long userId);
+}

+ 27 - 0
ruoyi-api/yingpaipay-api-fulfiller/src/main/java/org/dromara/fulfiller/api/domain/vo/RemoteFulfillerVo.java

@@ -0,0 +1,27 @@
+package org.dromara.fulfiller.api.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class RemoteFulfillerVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    private String name;
+
+    private String status;
+
+    private Long site;
+
+    private Date createTime;
+
+    private String phone;
+
+}

+ 18 - 0
ruoyi-api/yingpaipay-api-fulfiller/src/main/java/org/dromara/fulfiller/api/domain/vo/RemoteLogVo.java

@@ -0,0 +1,18 @@
+package org.dromara.fulfiller.api.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class RemoteLogVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long subOrderId;
+
+    private String type;
+
+}

+ 49 - 0
ruoyi-api/yingpaipay-api-fulfiller/src/main/java/org/dromara/fulfiller/api/model/FulfillerLoginUser.java

@@ -0,0 +1,49 @@
+package org.dromara.fulfiller.api.model;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 履约者登录用户信息
+ *
+ * @author steelwei
+ */
+@Data
+public class FulfillerLoginUser implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 履约者ID
+     */
+    private Long id;
+
+    /**
+     * 手机号
+     */
+    private String phone;
+
+    /**
+     * 密码(BCrypt加密)
+     */
+    private String password;
+
+    /**
+     * 姓名
+     */
+    private String name;
+
+    /**
+     * 状态 (resting:休息, busy:接单中, disabled:禁用)
+     */
+    private String status;
+
+    /**
+     * 租户ID
+     */
+    private String tenantId;
+
+}

+ 21 - 0
ruoyi-api/yingpaipay-api-order/pom.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.dromara</groupId>
+        <artifactId>ruoyi-api</artifactId>
+        <version>${revision}</version>
+    </parent>
+
+    <artifactId>yingpaipay-api-order</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>

+ 6 - 0
ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/RemoteOrderService.java

@@ -0,0 +1,6 @@
+package org.dromara.order.api;
+
+public interface RemoteOrderService {
+    String getCodeById(Long id);
+
+}

+ 16 - 0
ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/RemoteSubOrderLogService.java

@@ -0,0 +1,16 @@
+package org.dromara.order.api;
+
+import org.dromara.order.api.domain.vo.RemoteSubOrderLogCountVo;
+import org.dromara.order.api.domain.vo.RemoteSubOrderLogListVo;
+
+import java.util.List;
+
+public interface RemoteSubOrderLogService {
+    RemoteSubOrderLogCountVo getCountByFulfillerId(Long fulfillerId);
+
+    int countOnTimeByFulfillerId(Long id);
+
+    long countCompletedLastMonthByFulfiller(Long id);
+
+    List<RemoteSubOrderLogListVo> listAllRecieved();
+}

+ 40 - 0
ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/RemoteSubOrderService.java

@@ -0,0 +1,40 @@
+package org.dromara.order.api;
+
+import org.dromara.order.api.domain.vo.RemoteSubOrderVo;
+
+import java.util.Date;
+import java.util.List;
+
+public interface RemoteSubOrderService {
+    List<Long> getIdsByCode(String code);
+
+    RemoteSubOrderVo getIdByCode(String code);
+
+    List<RemoteSubOrderVo> getByIds(List<Long> orderIds);
+
+    List<RemoteSubOrderVo> selectByFulfillerIds(List<Long> fulfillerIds);
+
+    RemoteSubOrderVo getById(Long orderId);
+
+    List<Long> getCustomerIdsByTenantId(String tenantId);
+
+    List<Long> getPetIdsByTenantId(String tenantId);
+
+    List<RemoteSubOrderVo> getByStoreIds(List<Long> storeIds);
+
+    long balanceOnPending(Long userId);
+
+    List<RemoteSubOrderVo> selectByCustomerIds(List<Long> customerIds);
+
+    String getCodeById(Long id);
+
+    long countCompletedThisMonthByFulfiller(Long id);
+
+    List<RemoteSubOrderVo> listAfterDate(Date time);
+
+    List<RemoteSubOrderVo> listAll();
+
+    List<RemoteSubOrderVo> listAfterDateEnableTenant(Date firstDayOfMonth, String tenantId);
+
+    boolean timeoutCancel();
+}

+ 18 - 0
ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/domain/vo/RemoteSubOrderLogCountVo.java

@@ -0,0 +1,18 @@
+package org.dromara.order.api.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class RemoteSubOrderLogCountVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Integer total;
+
+    private Integer reject;
+
+}

+ 18 - 0
ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/domain/vo/RemoteSubOrderLogListVo.java

@@ -0,0 +1,18 @@
+package org.dromara.order.api.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class RemoteSubOrderLogListVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    private Long fulfiller;
+
+}

+ 41 - 0
ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/domain/vo/RemoteSubOrderVo.java

@@ -0,0 +1,41 @@
+package org.dromara.order.api.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class RemoteSubOrderVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    private String tenantId;
+
+    private String code;
+
+    private Long fulfiller;
+
+    private Date serviceTime;
+
+    private Long store;
+
+    private Long customer;
+
+    private Long price;
+
+    private Date createTime;
+
+    private Long service;
+
+    private Integer status;
+
+    private Long pet;
+
+    private Long storeSite;
+
+}

+ 27 - 0
ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/enums/OrderAppealAuditStatusEnum.java

@@ -0,0 +1,27 @@
+package org.dromara.order.api.enums;
+
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public enum OrderAppealAuditStatusEnum {
+
+    PENDING(0, "未审核", "info"),
+    PASS(1, "通过", "success"),
+    REJECT(2, "驳回", "danger");
+
+    private final Integer value;
+    private final String label;
+    private final String style;
+
+    public static boolean isPass(int status) {
+        return PASS.value.equals(status);
+    }
+
+    public static boolean isReject(int status) {
+        return REJECT.value.equals(status);
+    }
+}
+

+ 17 - 0
ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/enums/OrderLogActionerTypeEnum.java

@@ -0,0 +1,17 @@
+package org.dromara.order.api.enums;
+
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public enum OrderLogActionerTypeEnum {
+
+    SYS_USER(0, "系统用户"),
+    FULFILLER(1, "履约者"),
+    ;
+    private final Integer value;
+    private final String label;
+
+}

+ 20 - 0
ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/enums/OrderLogFulfillerStepEnum.java

@@ -0,0 +1,20 @@
+package org.dromara.order.api.enums;
+
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public enum OrderLogFulfillerStepEnum {
+
+    REJECT(-2, "已拒绝", "履约者 %s 拒绝接单,原因: %s"),
+    CANCEL(-1, "已取消", "履约者 %s 取消订单,原因: %s"),
+    RECIEVED(0, "已接单", "履约者 %s 已确认接单,准备前往服务地点"),
+    COMPLETED(99, "订单完成", "用户/商家已确认,服务圆满结束"),
+    ;
+    private final Integer step;
+    private final String title;
+    private final String content;
+
+}

+ 22 - 0
ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/enums/OrderLogSystemStepEnum.java

@@ -0,0 +1,22 @@
+package org.dromara.order.api.enums;
+
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public enum OrderLogSystemStepEnum {
+
+    CREATE_ORDER(0, "订单创建", "商户提交订单"),
+    DISPATCH(1, "系统派单", "指派给 %s"),
+    RECIEVED(2, "接单成功", "履约者已确认接单"),
+    ARRIVED(3, "到达服务点", "履约者已打卡"),
+    FINISH(4, "订单完成", "履约者已完成"),
+    CANCEL(5, "订单取消", "%s 取消订单,原因: %s"),
+    CLOSE(6, "订单关闭", "%s 关闭订单,原因: %s"),
+    ;
+    private final Integer step;
+    private final String title;
+    private final String content;
+}

+ 17 - 0
ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/enums/OrderLogTypeEnum.java

@@ -0,0 +1,17 @@
+package org.dromara.order.api.enums;
+
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public enum OrderLogTypeEnum {
+
+    ORDER(0, "订单日志"),
+    FULFILLER(1, "服务进度"),
+    ;
+    private final Integer value;
+    private final String label;
+
+}

+ 34 - 0
ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/enums/OrderServiceFlagEnum.java

@@ -0,0 +1,34 @@
+package org.dromara.order.api.enums;
+
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 订单服务标志枚举
+ *
+ * @author Antigravity
+ */
+@Getter
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public enum OrderServiceFlagEnum {
+
+    /**
+     * 不能完成(不能接着发送服务变更请求)
+     */
+    CANNOT_FINISH_NO_APPEAL(0, "不能完成(不能接着发送服务变更请求)"),
+
+    /**
+     * 可以完成
+     */
+    CAN_FINISH(1, "可以完成"),
+
+    /**
+     * 不能完成(可以接着发送服务变更请求)
+     */
+    CANNOT_FINISH_CAN_APPEAL(2, "不能完成(可以接着发送服务变更请求)");
+
+    private final Integer value;
+    private final String description;
+
+}

+ 40 - 0
ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/enums/OrderStatusEnum.java

@@ -0,0 +1,40 @@
+package org.dromara.order.api.enums;
+
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Arrays;
+import java.util.List;
+
+@Getter
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public enum OrderStatusEnum {
+
+    PENDING_DISPATCH(0, "待派单", "#f56c6c"),
+    PENDING_ACCEPT(1, "待接单", "#e6a23c"),
+    PENDING_SERVICE(2, "待服务", "#49a3ff"),
+    IN_SERVICE(3, "服务中", "#49a3ff"),
+    COMPLETED(4, "已完成", "#67c23a"),
+    CANCELLED(5, "已取消", "#909399"),
+    REJECTED(6, "已拒绝", "#f56c6c"),
+    CLOSED(7, "已关闭", "#909399"),
+    ;
+
+    private final Integer value;
+    private final String label;
+    private final String color;
+
+    public static List<OrderStatusEnum> list() {
+        return Arrays.asList(values());
+    }
+
+    public static String getLabel(Integer status) {
+        for (OrderStatusEnum value : values()) {
+            if (value.value.equals(status)) {
+                return value.label;
+            }
+        }
+        return "";
+    }
+}

+ 27 - 0
ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/enums/OrderTypeEnum.java

@@ -0,0 +1,27 @@
+package org.dromara.order.api.enums;
+
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public enum OrderTypeEnum {
+
+    ROUNDTRIPPING_PICK(0, "往返接送/接"),
+    ROUNDTRIPPING_SEND(1, "往返接送/送"),
+    PICK(2, "单程接(到店)"),
+    SEND(3, "单程送(回家)"),
+    ;
+    private final Integer value;
+    private final String label;
+
+    public static String getLabel(Integer type) {
+        for (OrderTypeEnum value : values()) {
+            if (value.value.equals(type)) {
+                return value.getLabel();
+            }
+        }
+        return null;
+    }
+}

+ 24 - 0
ruoyi-api/yingpaipay-api-service/pom.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.dromara</groupId>
+        <artifactId>ruoyi-api</artifactId>
+        <version>${revision}</version>
+    </parent>
+
+    <artifactId>yingpaipay-api-service</artifactId>
+
+    <dependencies>
+
+        <!-- RuoYi Common Core-->
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-core</artifactId>
+        </dependency>
+
+    </dependencies>
+
+</project>

+ 26 - 0
ruoyi-api/yingpaipay-api-service/src/main/java/org/dromara/service/api/RemoteStoreServiceService.java

@@ -0,0 +1,26 @@
+package org.dromara.service.api;
+
+import java.util.List;
+import java.util.Map;
+
+public interface RemoteStoreServiceService {
+    boolean insertBatch(Long storeId, List<Long> serviceIds, boolean cleanFlag);
+
+    Map<Long, List<Long>> getByIds(List<Long> storeIds);
+
+    /**
+     * 根据服务类型获取可以提供该服务的门店ID列表
+     * @param serviceId 服务类型ID
+     * @return 门店ID列表
+     * @Author: Antigravity
+     */
+    List<Long> getStoreIdsByServiceId(Long serviceId);
+
+    /**
+     * 根据门店ID列表获取所有关联的服务ID集合(去重)
+     * @param storeIds 门店ID列表
+     * @return 服务ID列表(去重)
+     * @Author: Antigravity
+     */
+    List<Long> getServiceIdsByStoreIds(List<Long> storeIds);
+}

+ 27 - 0
ruoyi-api/yingpaipay-api-service/src/main/java/org/dromara/service/api/RemoteSysServiceService.java

@@ -0,0 +1,27 @@
+package org.dromara.service.api;
+
+import org.dromara.service.api.domain.vo.RemoteSysServiceVo;
+
+import java.util.List;
+
+/**
+ * 服务项目远程服务接口(Dubbo)
+ *
+ * @author steelwei
+ */
+public interface RemoteSysServiceService {
+
+    /**
+     * 查询所有服务项目列表(id + name)
+     */
+    List<RemoteSysServiceVo> listAll();
+
+    /**
+     * 根据服务ID列表查询服务名称列表
+     *
+     * @param ids 服务ID列表
+     * @return 服务名称列表(保持顺序)
+     */
+    List<String> selectNamesByIds(List<Long> ids);
+
+}

+ 18 - 0
ruoyi-api/yingpaipay-api-service/src/main/java/org/dromara/service/api/domain/bo/RemoteStoreServiceBo.java

@@ -0,0 +1,18 @@
+package org.dromara.service.api.domain.bo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class RemoteStoreServiceBo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long storeId;
+
+    private Long serviceId;
+
+}

+ 31 - 0
ruoyi-api/yingpaipay-api-service/src/main/java/org/dromara/service/api/domain/vo/RemoteSysServiceVo.java

@@ -0,0 +1,31 @@
+package org.dromara.service.api.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 远程服务项目VO(供跨模块Dubbo调用)
+ *
+ * @author steelwei
+ */
+@Data
+public class RemoteSysServiceVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 服务ID
+     */
+    private Long id;
+
+    /**
+     * 服务名称
+     */
+    private String name;
+
+    private Integer mode;
+
+}

+ 27 - 0
ruoyi-api/yingpaipay-api-service/src/main/java/org/dromara/service/api/enums/ServiceModeEnum.java

@@ -0,0 +1,27 @@
+package org.dromara.service.api.enums;
+
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Arrays;
+import java.util.List;
+
+@Getter
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public enum ServiceModeEnum {
+
+//    ONEWAY_SINGLETRIP(0, "单程/单次"),
+    SERVICE(0, "服务订单"),
+//    ROUNDTRIP_RETURNTRIP(1, "往返/双程"),
+    PICK_UP(1, "接送订单"),
+    ;
+
+    private final Integer value;
+    private final String label;
+
+    public static List<ServiceModeEnum> list() {
+        return Arrays.stream(values()).toList();
+    }
+
+}

+ 27 - 0
ruoyi-auth/Dockerfile

@@ -0,0 +1,27 @@
+# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
+FROM bellsoft/liberica-openjdk-rocky:17.0.16-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.8-cds
+#FROM findepi/graalvm:java17-native
+
+LABEL maintainer="Lion Li"
+
+RUN mkdir -p /ruoyi/auth/logs  \
+    /ruoyi/auth/temp  \
+    /ruoyi/skywalking/agent
+
+WORKDIR /ruoyi/auth
+
+ENV SERVER_PORT=9210 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
+
+EXPOSE ${SERVER_PORT}
+
+ADD ./target/ruoyi-auth.jar ./app.jar
+
+SHELL ["/bin/bash", "-c"]
+
+ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
+           #-Dskywalking.agent.service_name=ruoyi-auth \
+           #-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \
+           -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
+           -jar app.jar
+

Vissa filer visades inte eftersom för många filer har ändrats