docs: 迁移 spring-ai 通用文档到 rui-docs

从 docs-local 迁移以下文档:

- backend/guides/: AI开发环境配置、Nacos配置、GitNexus指南、OpenCode工作流等

- backend/templates/: Superpowers设计模板、计划模板、审查清单

- backend/config-templates/: 应用配置模板、Nacos配置

- backend/design/: 数据库表结构规划

- backend/specs/: 项目文档治理、MQ统一推送设计

- backend/: 代码分析报告、Feign分析报告、文档治理报告

- frontend/design/: Admin-UI分模块打包设计
This commit is contained in:
2026-06-04 09:31:24 +08:00
parent 2e38c53434
commit 19de7e24ec
36 changed files with 5872 additions and 0 deletions
@@ -0,0 +1,65 @@
# ============================================================================
# 睿核科技 — 通用平台框架 通用 application.yml 模板
# ============================================================================
# 使用方法:
# 复制到新模块的 src/main/resources/application.yml
# 修改 server.port 为模块对应端口
# 本地开发配置见项目根目录 config/application-dev.yml(不提交 git
# ============================================================================
server:
port: XXXX # 模块端口(按规划分配)
shutdown: graceful # 优雅关闭
spring:
application:
name: @artifactId@ # Maven 过滤,自动替换为模块名
profiles:
active: @profiles.active@ # Maven 过滤,默认 dev
lifecycle:
timeout-per-shutdown-phase: 30s # 优雅关闭等待时间
autoconfigure:
exclude:
servlet:
multipart:
max-file-size: 5MB
max-request-size: 10MB
encoding:
charset: UTF-8
enabled: true
force: true
cloud:
openfeign:
circuitbreaker:
enabled: true
nacos:
discovery: # 服务发现(独立环境变量,不依赖 config)
server-addr: ${NACOS_SERVER_ADDR:nacos:8848}
namespace: ${NACOS_NAMESPACE:}
group: ${NACOS_GROUP:DEFAULT_GROUP}
username: ${NACOS_USERNAME:nacos}
password: ${NACOS_PASSWORD:nacos}
config: # 配置中心
server-addr: ${NACOS_SERVER_ADDR:nacos:8848}
namespace: ${NACOS_NAMESPACE:}
group: ${NACOS_GROUP:DEFAULT_GROUP}
username: ${NACOS_USERNAME:nacos}
password: ${NACOS_PASSWORD:nacos}
file-extension: yaml
import-check:
enabled: true
config:
import:
- optional:nacos:${spring.application.name}.${spring.cloud.nacos.config.file-extension:yaml}
- optional:nacos:rui-common.${spring.cloud.nacos.config.file-extension:yaml}
# 无 MyBatis 的模块(gateway)请删除下面这行
- optional:nacos:rui-data.${spring.cloud.nacos.config.file-extension:yaml}
management:
endpoints:
web:
exposure:
include: health
discovery:
enabled: false
@@ -0,0 +1,154 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
通用日志配置,复制到任意模块无需修改
- 自动读取 spring.application.name 作为日志目录名
- 按级别精确分文件:debug / info / warn / error
- 控制台彩色输出,文件不含颜色码
- dev 环境输出 DEBUG,其他环境输出 INFO
-->
<configuration scan="true" scanPeriod="10 seconds">
<!-- 彩色日志转换器 -->
<conversionRule conversionWord="clr" class="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex" class="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx" class="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- 读取 Spring 应用名称,复制到任意模块无需修改 -->
<springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="app"/>
<property name="LOG_PATH" value="logs/${APP_NAME}"/>
<!-- 文件日志格式:含时间、线程、级别、类名、代码行号、消息 -->
<property name="FILE_LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%line - %msg%n"/>
<!-- 控制台彩色日志格式(%clr 根据级别自动着色:ERROR 红、WARN 黄、INFO 绿、DEBUG 蓝、TRACE 青) -->
<property name="CONSOLE_LOG_PATTERN"
value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr([%thread]){faint} %clr(%-5level) %clr(%logger{50}:%line){cyan} %clr(-){faint} %msg%n"/>
<!-- ==================== 控制台输出 ==================== -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- ==================== DEBUG 日志文件 ==================== -->
<!-- 精确匹配 DEBUG 级别,dev 环境下生效 -->
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/debug.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/history/debug/log-debug.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>7</maxHistory>
<totalSizeCap>200MB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- ==================== INFO 日志文件 ==================== -->
<!-- 精确匹配 INFO 级别 -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/info.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/history/info/log-info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>7</maxHistory>
<totalSizeCap>200MB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- ==================== WARN 日志文件 ==================== -->
<!-- 精确匹配 WARN 级别 -->
<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/warn.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/history/warn/log-warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>7</maxHistory>
<totalSizeCap>200MB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- ==================== ERROR 日志文件 ==================== -->
<!-- 精确匹配 ERROR 级别 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/error.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/history/error/log-error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>7</maxHistory>
<totalSizeCap>200MB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- ==================== 特定包日志级别调整 ==================== -->
<logger name="org.apache.catalina.connector.CoyoteAdapter" level="OFF"/>
<logger name="org.apache.seata.config.FileConfiguration" level="OFF"/>
<!-- ==================== 生产环境配置 ==================== -->
<springProfile name="prod">
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="WARN_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</springProfile>
<!-- ==================== 开发环境配置 ==================== -->
<springProfile name="dev">
<logger name="com.baomidou.mybatisplus" level="DEBUG"/>
<logger name="com.rui" level="DEBUG"/>
<root level="DEBUG">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="DEBUG_FILE"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="WARN_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</springProfile>
<!-- ==================== 其他环境默认配置 ==================== -->
<springProfile name="!prod,!dev">
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="WARN_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</springProfile>
</configuration>
@@ -0,0 +1,7 @@
# rui-auth.yaml — 认证中心模块配置
# Data ID: rui-auth.yaml
# Group: DEFAULT_GROUP
# 服务端口:9301(认证中心,所有服务依赖)
server:
port: 9301
@@ -0,0 +1,47 @@
# rui-common.yaml — 所有模块共享
# Data ID: rui-common.yaml
# Group: DEFAULT_GROUP
# 用途: 全局通用配置(Redis、Jackson、JWT、安全白名单)
spring:
rabbitmq:
host: ${RABBITMQ_HOST:192.168.31.210}
port: ${RABBITMQ_PORT:5672}
username: ${RABBITMQ_USERNAME:vifo}
password: ${RABBITMQ_PASSWORD:!QW3e4r2023}
data:
redis:
host: ${REDIS_HOST:192.168.31.210}
port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:123456}
database: 0
timeout: 3000ms
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: -1ms
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
default-property-inclusion: non_null
security:
oauth2:
ignore-urls:
- /entry/**
- /notify/**
- /actuator/**
# MyBatis Plus 全局配置
mybatis-plus:
configuration:
map-underscore-to-camel-case: true
cache-enabled: true
# Feign 服务提供者配置(默认走聚合启动器,独立模式请在各服务配置中覆盖)
feign:
providers:
user: rui-service-starter # 用户服务:默认指向聚合启动器
system: rui-service-starter # 系统服务:默认指向聚合启动器
auth: rui-auth # 认证中心:保持独立
@@ -0,0 +1,74 @@
# rui-data.yaml — 数据库模块共享
# Data ID: rui-data.yaml
# Group: DEFAULT_GROUP
# 用途: 数据源 + MyBatis Plus 配置(仅 DB 模块导入)
spring:
datasource:
url: jdbc:mysql://${DB_HOST:192.168.31.210}:3306/rui_platform?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: ${DB_USERNAME:root}
password: ${DB_PASSWORD:123456}
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 60000
mybatis-plus:
global-config:
db-config:
table-prefix: rui_
id-type: assign_id
logic-delete-field: deleted
logic-delete-value: 1
logic-not-delete-value: 0
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath*:/mapper/**/*.xml
tenant:
mode: IGNORE
tenant-ignore:
- sys_tenant
- user_credential
- system_oauth2_client
# 系统租户也需限制租户隔离的表(即使是系统租户,也只能查自己租户的数据)
system-tenant-table:
- uc_user
- uc_user_detail
- uc_user_role
- uc_user_dept
- uc_user_post
- uc_user_permission
- uc_user_level
- uc_user_level_log
- sys_menu
- sys_role
- sys_role_menu
- sys_role_dept
- sys_dept
- sys_post
- sys_dict_type
- sys_dict_item
- sys_config
- sys_oper_log
- sys_login_log
seata:
enabled: true
tx-service-group: my_tx_group
service:
vgroup-mapping:
my_tx_group: default
data-source-proxy-mode: AT
registry:
type: nacos
nacos:
application: seata-server
server-addr: ${spring.cloud.nacos.config.server-addr}
group : SEATA_GROUP
namespace: cloud
username: ${spring.cloud.nacos.config.username}
password: ${spring.cloud.nacos.config.password}
@@ -0,0 +1,80 @@
# rui-gateway.yaml — 网关路由配置 (Gateway 5.x 格式:server.webflux.routes)
# 说明:默认使用聚合模式(所有业务路由指向 rui-service-starter
# 如需独立微服务模式,取消注释独立路由并注释掉聚合路由
spring:
cloud:
gateway:
server:
webflux:
routes:
- id: rui-auth
uri: lb://rui-auth
predicates:
- Path=/auth/**
filters:
- StripPrefix=0
- id: rui-auth
uri: lb://rui-auth
predicates:
- Path=/oauth2/**
filters:
- StripPrefix=0
- id: rui-service-pay
uri: lb://rui-service-pay
predicates:
- Path=/payment/**
filters:
- StripPrefix=0
# ========== 聚合模式(默认,中小型项目)==========
- id: rui-service-starter
uri: lb://rui-service-starter
predicates:
- Path=/user/**,/system/**
filters:
- StripPrefix=0
- id: rui-cashier
uri: lb://rui-cashier-api
predicates:
- Path=/cashier/**
filters:
- StripPrefix=0
# ========== 独立微服务模式(大型项目)==========
# - id: rui-service-user
# uri: lb://rui-service-user
# predicates:
# - Path=/user/**
# filters:
# - StripPrefix=0
# - id: rui-service-system
# uri: lb://rui-service-system
# predicates:
# - Path=/system/**
# filters:
# - StripPrefix=0
# 灰度发布配置
# 支持按服务配置不同的灰度策略,包括:权重、用户白名单、IP 白名单、强制 Header
grayscale:
# 强制灰度 Header 名称,客户端通过此 Header 强制指定版本
force-header: X-Grayscale-Version
# 灰度规则(Key 为服务名,如 rui-service-user
# 配置示例:
# rules:
# rui-service-user:
# enabled: true
# version: v2
# weight: 10
# user-ids:
# - user001
# ip-ranges:
# - 192.168.1.0/24
management:
endpoints:
web:
exposure:
include: health # 仅暴露 health 端点,其余全部禁止访问
# 服务端口:9300(网关最优先)
server:
port: 9300
@@ -0,0 +1,8 @@
# rui-service-cache.yaml — 缓存服务配置
# Data ID: rui-service-cache.yaml
# Group: DEFAULT_GROUP
# 功能:Redis缓存封装、分布式锁
# 服务端口:9309(缓存服务)
server:
port: 9309
@@ -0,0 +1,8 @@
# rui-service-file.yaml — 文件存储服务配置
# Data ID: rui-service-file.yaml
# Group: DEFAULT_GROUP
# 功能:文件上传、下载、OOS存储、本地存储
# 服务端口:9305(文件服务)
server:
port: 9305
@@ -0,0 +1,8 @@
# rui-service-log.yaml — 日志服务配置
# Data ID: rui-service-log.yaml
# Group: DEFAULT_GROUP
# 功能:日志收集、日志分析、ELK集成
# 服务端口:9310(日志服务)
server:
port: 9310
@@ -0,0 +1,8 @@
# rui-service-monitor.yaml — 监控告警服务配置
# Data ID: rui-service-monitor.yaml
# Group: DEFAULT_GROUP
# 功能:系统监控、性能指标、告警通知
# 服务端口:9311(监控服务)
server:
port: 9311
@@ -0,0 +1,8 @@
# rui-service-msg.yaml — 消息通知服务配置
# Data ID: rui-service-msg.yaml
# Group: DEFAULT_GROUP
# 功能:SMS短信、邮件、站内信、App推送
# 服务端口:9304(消息服务)
server:
port: 9304
@@ -0,0 +1,7 @@
# rui-service-order.yaml — 订单服务配置
# Data ID: rui-service-order.yaml
# Group: DEFAULT_GROUP
# 服务端口:9306(订单服务)
server:
port: 9306
@@ -0,0 +1,60 @@
# rui-service-pay.yaml — 支付服务配置
# Data ID: rui-service-pay.yaml
# Group: DEFAULT_GROUP
# 功能:支付通道、支付回调、对账
# 服务端口:9307(支付服务)
server:
port: 9307
# 支付模块配置
payment:
# 订单超时时间(分钟)
order-timeout: 30
# 分账延迟时间(天)
split-delay-days: 7
# 佣金结算周期
commission-settle-cycle: T+1
# 通知重试次数
notify-max-times: 5
# 通知间隔(秒)
notify-intervals: 15,30,60,300,900
# 渠道配置(示例)
payment:
channels:
alipay:
enabled: true
sandbox: true
app-id: ${ALIPAY_APP_ID:}
private-key: ${ALIPAY_PRIVATE_KEY:}
public-key: ${ALIPAY_PUBLIC_KEY:}
notify-url: http://localhost:9307/payment/notify/alipay
wechat_pay:
enabled: true
sandbox: true
app-id: ${WXPAY_APP_ID:}
mch-id: ${WXPAY_MCH_ID:}
api-v3-key: ${WXPAY_API_V3_KEY:}
notify-url: http://localhost:9307/payment/notify/wechat_pay
# 安全白名单
security:
oauth2:
ignore-urls:
- /payment/entry/**
- /payment/notify/**
# Swagger 文档
springdoc:
swagger-ui:
enabled: true
path: /swagger-ui.html
api-docs:
enabled: true
path: /v3/api-docs
knife4j:
enable: true
setting:
language: zh_cn
@@ -0,0 +1,8 @@
# rui-service-search.yaml — 搜索服务配置
# Data ID: rui-service-search.yaml
# Group: DEFAULT_GROUP
# 功能:Elasticsearch封装、全文检索
# 服务端口:9308(搜索服务)
server:
port: 9308
@@ -0,0 +1,33 @@
# rui-service-system.yaml — 系统服务配置
# Data ID: rui-service-system.yaml
# Group: DEFAULT_GROUP
# 服务端口:9302(系统基础服务)
server:
port: 9302
# 模块管理配置
rui:
modules:
# 全局可用模块列表(系统层面定义有哪些模块可选)
available:
- code: system
name: 系统管理
icon: tabler:settings
- code: user
name: 用户管理
icon: tabler:users
- code: order
name: 订单管理
icon: tabler:shopping-cart
- code: cms
name: 内容管理
icon: tabler:edit
- code: marketing
name: 营销中心
icon: tabler:present
- code: demo
name: 演示中心
icon: tabler:device-desktop
# 默认启用模块(新租户默认开启,逗号分隔)
default-enabled: system,user,demo
@@ -0,0 +1,7 @@
# rui-service-user.yaml — 用户基础信息及等级服务配置
# Data ID: rui-service-user.yaml
# Group: DEFAULT_GROUP
# 服务端口:9303(用户中心服务)
server:
port: 9303