zhangjf
|
797feff8c2
|
feat: fund-gateway增加/fund context path
修改内容:
1. fund-gateway/application.yml:
- 所有路由Path添加/fund前缀
- StripPrefix从1改为2(剥离/fund和模块名两级)
- 例:/fund/sys/... -> 转发到 /api/v1/sys/...
2. 前端API配置:
- fund-admin/src/api/request.ts: baseURL改为'/fund'
- fund-mobile/src/api/request.ts: baseURL改为'/fund'
3. Nginx部署脚本:
- 添加/fund/路径代理配置
- 保留/api/代理兼容旧版
API调用示例:
- 旧版:/sys/auth/login
- 新版:/fund/sys/auth/login
网关路由:
- /fund/sys/** -> lb://fund-sys/api/v1/sys/**
- /fund/cust/** -> lb://fund-cust/api/v1/cust/**
- ...
|
2026-02-22 22:24:20 +08:00 |
|
zhangjf
|
961b669b16
|
docs: 更新部署运维文档,添加启动脚本与日志配置说明
更新内容:
- 5.2.1 日志配置:添加logback-spring.xml关键配置
- APP_NAME使用app.instance.name区分多实例
- LOG_PATTERN直接配置避免shell解析问题
- 多实例日志隔离示例
- 5.2.2 启动脚本配置:新增章节
- start.sh核心逻辑说明
- 关键参数说明表
- 单实例/多实例启动示例
- 5.2.3 ELK日志收集:章节号调整
- 版本更新:v2.0 -> v2.1
|
2026-02-22 21:20:29 +08:00 |
|
zhangjf
|
69556c047a
|
feat: 日志目录使用INSTANCE_NAME区分多实例
问题:多实例部署时,APP_NAME相同导致日志互相覆盖
- 实例1: fund-sys (普通租户)
- 实例2: fund-sys-vip (VIP租户)
- 日志都写入 /datacfs/applogs/fund-sys/ ❌
修改:
- start.sh:
- 添加 -Dapp.instance.name=${INSTANCE_NAME} 参数
- 日志目录改为 ${LOG_HOME}/${INSTANCE_NAME}
- logback-spring.xml (9个服务):
- APP_NAME source改为 app.instance.name
- 默认值保持服务名用于fallback
效果:
- 实例1: /datacfs/applogs/fund-sys/info.log
- 实例2: /datacfs/applogs/fund-sys-vip/info.log ✅
|
2026-02-22 21:14:48 +08:00 |
|
zhangjf
|
480bd796f4
|
refactor: 将LOG_HOME移至env.properties统一管理
- env.properties: 添加LOG_HOME配置项
- start.sh: LOG_HOME从环境变量读取,提供默认值fallback
优势:
- 日志路径集中配置,便于统一修改
- 不同环境可配置不同日志目录
- 启动脚本无需修改即可适应不同环境
|
2026-02-22 21:02:33 +08:00 |
|
zhangjf
|
88bb3193e5
|
fix: 修复日志路径重复问题
问题:LOG_HOME已包含服务名,logback又加APP_NAME导致重复
- start.sh: LOG_HOME="/datacfs/applogs/${INSTANCE_NAME}"
- logback: ${LOG_PATH}/${APP_NAME}/info.log
- 结果: /datacfs/applogs/fund-gateway/fund-gateway/info.log
修复:
- start.sh: LOG_HOME改为"/datacfs/applogs"(不含服务名)
- logback会自动添加APP_NAME子目录
- 结果: /datacfs/applogs/fund-gateway/info.log
多租户场景:
- 通过传入不同的logging.file.path区分实例日志
- 如 -Dlogging.file.path=/datacfs/applogs/fund-sys-vip001
|
2026-02-22 20:58:09 +08:00 |
|
zhangjf
|
ca1d0edd56
|
fix: 移除启动命令中的日志格式参数,避免shell解析错误
问题:
- LOG_PATTERN包含特殊字符(百分号、方括号等)
- 通过-D参数传递导致shell解析错误
修改:
- start.sh: 移除LOG_LEVEL_ROOT/LOG_LEVEL_APP/LOG_PATTERN参数
只保留logging.file.path用于指定日志目录
- logback-spring.xml: 日志格式改为直接配置
使用<property>而非<springProperty>
- env.properties: 更新注释说明日志配置由logback管理
优势:
- 启动命令简洁,无特殊字符解析问题
- 日志配置统一在logback-spring.xml管理
- 避免shell注入风险
|
2026-02-22 20:52:46 +08:00 |
|
zhangjf
|
1f30315a2f
|
refactor: 将conf目录加入classpath,移除spring.config.location参数
- start.sh:
- ClassPath改为 lib/*:conf
- 移除CONFIG_OPTS参数
- Spring Boot自动从classpath加载配置文件
优势:
- 启动命令更简洁
- 配置文件作为classpath资源自动加载
- 符合Spring Boot标准做法
|
2026-02-22 20:37:20 +08:00 |
|
zhangjf
|
2184dce6a8
|
refactor: 优化打包结构,主JAR放入lib目录并带版本号
- pom.xml: 移除finalName配置,JAR保留版本号
- assembly.xml: 主JAR放入lib目录(useProjectArtifact=true)
- start.sh: 简化启动逻辑
- ClassPath统一为 lib/*
- 无需单独匹配主JAR文件名
- 只需配置MAIN_CLASS即可启动
优势:
- 主JAR带版本号便于版本识别和升级
- 所有JAR统一放lib目录,结构清晰
- 启动脚本更简洁,无需APP_NAME匹配JAR
|
2026-02-22 20:30:28 +08:00 |
|
zhangjf
|
a4aa4b4156
|
feat: 优化打包方式为普通JAR+依赖分离
- pom.xml:
- 添加finalName配置去除版本号
- maven-jar-plugin排除资源文件
- 禁用spring-boot-maven-plugin repackage
- 各服务移除冗余的plugin配置
- assembly.xml:
- 主JAR放根目录(仅服务代码)
- lib目录放依赖JAR
- start.sh:
- 支持java -cp classpath模式启动
- 从service.properties读取MAIN_CLASS
- 向后兼容fat jar模式
- service.properties:
- 所有服务添加MAIN_CLASS配置
优势:
- 主JAR从131MB缩小到103KB
- 多服务部署可共享lib目录
- 资源文件外置便于修改
|
2026-02-22 20:22:27 +08:00 |
|
zhangjf
|
b8044c3769
|
fix: 修复Assembly打包与启动脚本JAR查找问题
- assembly.xml: 主JAR放到根目录,移除lib目录
- Spring Boot fat jar已包含所有依赖
- 避免依赖JAR冗余和混淆
- start.sh: 优化JAR文件查找逻辑
- 优先查找根目录: ${APP_HOME}/${APP_NAME}.jar
- fallback到lib目录(向后兼容)
- 添加JAR_FILE到启动日志输出
|
2026-02-22 20:03:29 +08:00 |
|
zhangjf
|
151f780900
|
chore: 添加deploy目录到gitignore
|
2026-02-22 19:46:37 +08:00 |
|
zhangjf
|
8190887de8
|
feat: 数据库脚本优化、前端部署脚本、租户ID支持
- 数据库脚本优化
- 新增01_create_user.sql创建fundsp用户
- 新增02_grant_user.sql授权脚本
- 新增fund_exp_init.sql、fund_receipt_init.sql
- 修复SQL脚本与实体类一致性
- 密码更新为fundSP@123
- 前端部署脚本
- 新增build-frontend.sh前端构建脚本
- 新增deploy-frontend-nginx.sh Nginx部署脚本
- 打包输出到deploy目录
- 租户ID支持
- fund-admin/fund-mobile支持query参数读取tid
- 新增tenant.ts store管理租户状态
- 请求拦截器添加X-Tenant-Id header
- 启动脚本修复
- 修复INSTANCE_NAME变量替换问题
- 更新所有service.properties配置
- 配置更新
- 更新所有服务数据库密码
- 更新docker-compose.yml配置
|
2026-02-22 19:45:52 +08:00 |
|
zhangjf
|
84a14b118b
|
docs: 架构设计文档v1.6,新增单机部署配置章节
- 新增 6.3 单机部署配置章节
- 6.3.1 配置文件架构:统一配置+个性化配置分离
- 6.3.2 统一配置 env.properties
- 6.3.3 个性化配置 service.properties
- 6.3.4 打包目录结构
- 6.3.5 多租户部署配置示例
- 6.3.6 日志配置集中化
- 6.3.7 脚本加载逻辑
|
2026-02-22 16:21:06 +08:00 |
|
zhangjf
|
7909daf8a4
|
docs: 更新架构文档,添加单机部署配置总结
- Agents.md v1.1: 新增配置文件分离架构说明
- 统一配置 env.properties(所有服务共用)
- 个性化配置 service.properties(每服务独立)
- 配置加载顺序说明
- 打包目录结构
- 日志配置集中化
- 多租户部署配置示例
- 单机部署文档 v2.2: 同步更新配置说明
- 添加配置文件架构章节
- 添加多租户部署示例
- 更新打包结构说明
|
2026-02-22 16:16:53 +08:00 |
|
zhangjf
|
1225d8387e
|
feat: 配置文件分离为统一配置和个性化配置
- 新增service.properties:每个服务独立的个性化配置
- APP_NAME: 服务名称
- INSTANCE_NAME: 实例名称(多租户场景)
- TENANT_ID: 租户标识
- env.properties:所有服务共用的统一配置
- Nacos/Redis/日志等公共参数
- 加载顺序:先env.properties,后service.properties(个性化覆盖统一)
- 更新assembly.xml:service.properties打包到conf目录
- 更新启动脚本:统一使用load_properties函数加载配置
|
2026-02-22 16:10:03 +08:00 |
|
zhangjf
|
dd8de5d96e
|
refactor: APP_NAME从JAR文件自动推断
- APP_NAME不再写在env.properties,而是从lib/*.jar自动推断
- env.properties只保留INSTANCE_NAME和TENANT_ID(多租户场景使用)
- 所有脚本(start.sh/stop.sh/status.sh)统一从JAR文件获取APP_NAME
- 避免打包后所有服务的env.properties都一样导致APP_NAME冲突
|
2026-02-22 15:59:53 +08:00 |
|
zhangjf
|
3e73b6c086
|
feat: 脚本支持多租户实例部署
- env.properties新增APP_NAME、INSTANCE_NAME、TENANT_ID配置
- APP_NAME: 服务名称(对应JAR文件名)
- INSTANCE_NAME: 实例名称(区分多租户实例,用于日志目录和PID文件)
- TENANT_ID: 租户标识(用于Nacos元数据路由)
- start.sh传递spring.application.name和TENANT_ID参数
- stop.sh和status.sh同步支持INSTANCE_NAME
|
2026-02-22 15:46:09 +08:00 |
|
zhangjf
|
faded43266
|
refactor: 统一日志配置到logback-spring.xml
- logback-spring.xml从环境变量读取日志级别和格式
- 移除各服务application.yml中的logging配置
- env.properties添加LOG_PATH、LOG_LEVEL_ROOT、LOG_LEVEL_APP参数
- 启动脚本start.sh传递日志相关JVM参数
- assembly.xml将env.properties打包到conf目录
|
2026-02-22 15:36:04 +08:00 |
|
zhangjf
|
cb0affa2cf
|
refactor: 补充env.properties配置参数覆盖
- 新增Redis连接池配置参数
- 新增Hikari连接池公共配置参数
- 新增Sentinel配置参数
- 新增网关限流配置参数
- 新增腾讯云COS配置参数
- 新增文件上传配置参数
- 各服务application.yml引用对应环境变量
|
2026-02-22 15:25:17 +08:00 |
|
zhangjf
|
2557cac757
|
refactor: 统一配置参数到env.properties
- 更新env.properties,添加Nacos/Redis/日志/多租户等公共配置
- 各服务application.yml使用环境变量引用公共配置
- 数据库配置保持独立,不纳入统一配置
|
2026-02-22 15:19:48 +08:00 |
|
zhangjf
|
072fe267bb
|
chore: 删除废弃的server-deploy目录
脚本已统一迁移到项目根目录scripts/
|
2026-02-22 15:09:36 +08:00 |
|
zhangjf
|
dfce5b0566
|
refactor: 统一脚本管理,优化Assembly打包配置
- 将各服务脚本统一到项目根目录scripts目录
- Assembly配置引用根目录scripts,避免重复
- 脚本自动从目录名推断服务名称
- 排除docker相关配置文件(application-docker.yml)
- 新增env.properties环境变量配置模板
- 更新单机部署文档至v2.1
|
2026-02-22 14:43:41 +08:00 |
|
zhangjf
|
7a3fcb3ed7
|
feat: 使用Maven Assembly实现标准化打包
主要更新:
- 每个服务打包为独立tar.gz,包含bin/lib/conf目录
- bin目录:启动/停止/重启/状态脚本
- lib目录:服务JAR包及所有依赖
- conf目录:配置文件(application.yml等)
新增文件:
- 各模块src/main/assembly/assembly.xml配置
- 各模块src/main/scripts启动脚本
- server-deploy/scripts一键管理脚本
- server-deploy/assembly/assembly.xml模板
更新文档:
- 单机部署文档v2.0,说明assembly打包方式
|
2026-02-22 14:04:57 +08:00 |
|
zhangjf
|
734dafe975
|
docs: 新增单机部署文档和服务部署脚本
包含内容:
- 单机部署文档(环境安装、数据库初始化、服务部署指南)
- 9个微服务的启动/停止/重启脚本
- 一键启动/停止/重启所有服务脚本
- 服务状态查看脚本
- 日志统一存放在/datacfs/applogs/服务名称目录
|
2026-02-22 13:48:23 +08:00 |
|
zhangjf
|
fa0a356d08
|
docs: 更新部署运维文档至v2.0
主要更新内容:
- 新增Docker Compose部署章节
- 更新服务端口配置(Gateway:8000, fund-sys:8100等)
- 新增多租户混合负载模式说明
- 更新Prometheus+Grafana监控体系配置
- 新增链路追踪日志格式(TraceId+SpanId)
- 更新环境变量配置
- 新增访问地址汇总和默认账号信息
|
2026-02-22 13:30:21 +08:00 |
|
zhangjf
|
04ffcd804a
|
docs: 新增项目开发规范文档 Agents.md
包含以下规范内容:
- 项目概述与技术栈
- 项目结构规范
- 命名规范
- 数据库设计规范
- API设计规范
- 多租户规范
- 链路追踪规范
- Token认证规范
- 日志规范
- 异常处理规范
- Git提交规范
- 代码规范
- 配置规范
- 常见问题处理
|
2026-02-20 20:55:53 +08:00 |
|
zhangjf
|
4154b94206
|
fix: 修复Gateway路由配置错误
fund-cust 路由路径配置错误,修正为 /cust/**
|
2026-02-20 19:08:49 +08:00 |
|
zhangjf
|
44e7efdfc0
|
fix: Gateway Token验证修复
1. Gateway Redis database 改为 0(与业务服务一致)
2. TokenInfo 添加 @JsonIgnoreProperties(ignoreUnknown = true)
3. TokenInfo.isExpired() 添加 @JsonIgnore 避免序列化
4. isExpired() 方法增加 null 检查
|
2026-02-20 18:52:54 +08:00 |
|
zhangjf
|
52c926dcd6
|
fix: Gateway添加Nacos服务发现依赖,修复负载均衡器配置
1. fund-gateway pom.xml 添加 spring-cloud-starter-alibaba-nacos-discovery 依赖
2. TenantLoadBalancerAutoConfig 使用 @LoadBalancerClients 注解配置
3. TenantAwareLoadBalancer 增加 serviceId null 检查
|
2026-02-20 18:43:38 +08:00 |
|
zhangjf
|
a78ccaeae5
|
fix: NacosMetadataConfig添加@ConditionalOnBean避免Gateway加载失败
NacosMetadataConfig仅在Registration bean存在时生效,
解决Gateway等不需要服务注册的场景无法启动的问题
|
2026-02-20 18:15:20 +08:00 |
|
zhangjf
|
4af7d712cd
|
fix: Gateway不扫描fund-common避免依赖冲突
|
2026-02-20 18:04:30 +08:00 |
|
zhangjf
|
ef46844bfd
|
fix: 修复服务启动配置问题
- 所有业务服务添加scanBasePackages扫描fund-common
- Gateway添加ReactiveRedisConfig提供ReactiveRedisTemplate
- Gateway排除Servlet相关类和RedisService(需要非响应式RedisTemplate)
- 解决Bean名称冲突(ReactiveRedisConfig)
|
2026-02-20 17:53:12 +08:00 |
|
zhangjf
|
a6716da742
|
docs: 问题清单新增问题11-ContextInterceptor响应头未设置traceId和spanId
|
2026-02-20 16:51:23 +08:00 |
|
zhangjf
|
2c7d304408
|
fix: 修复ContextInterceptor响应头未设置traceId和spanId的问题
- 新增HEADER_SPAN_ID常量
- preHandle中生成SpanId并设置到响应头
- response.setHeader(HEADER_TRACE_ID, traceId)
- response.setHeader(HEADER_SPAN_ID, spanId)
|
2026-02-20 11:52:00 +08:00 |
|
zhangjf
|
9b3b3538c8
|
feat: API响应头增加traceId和spanId,日志记录spanId作为索引
- TraceContextHolder新增SpanId支持(16位短ID)
- ContextInterceptor在响应头返回X-Trace-Id和X-Span-Id
- 日志格式增加spanId:[traceId][spanId]
- JSON日志增加spanId字段用于ELK采集
- 日志输出示例:[abc123][def456] trace info
|
2026-02-20 11:48:09 +08:00 |
|
zhangjf
|
61c6e573df
|
feat: OpenFeign请求增加来源服务标记
- FeignChainInterceptor新增X-Source-Service和X-Request-Time请求头
- ContextInterceptor提取并记录请求来源服务、计算链路耗时
- 日志格式: [Trace] sourceService -> targetService | traceId=xxx | chainTime=xxxms | path=xxx
|
2026-02-20 11:36:47 +08:00 |
|
zhangjf
|
a8450d181f
|
refactor: 移除X-Tenant-Group相关代码
- TenantGatewayFilter简化为仅记录日志
- 移除application.yml和application-docker.yml中的tenant-group-header配置
|
2026-02-20 11:27:21 +08:00 |
|
zhangjf
|
f3b7576bf1
|
refactor: Token认证从JWT改为UUID+Redis方案
- fund-common: 新增TokenInfo和TokenService类
- fund-sys: AuthServiceImpl改用TokenService,移除JwtUtil
- fund-gateway: 新增TokenAuthFilter和ReactiveTokenService
- 移除JWT依赖,支持主动登出和强制踢下线功能
|
2026-02-20 11:23:32 +08:00 |
|
zhangjf
|
eeea69d512
|
chore: 清理日志文件和更新Maven配置
|
2026-02-20 11:04:16 +08:00 |
|
zhangjf
|
e2007d8b09
|
chore: 从Git追踪中移除target和.vscode目录
|
2026-02-20 11:02:45 +08:00 |
|
zhangjf
|
f292a8746f
|
chore: 更新.gitignore忽略.mvn目录
|
2026-02-20 11:00:31 +08:00 |
|
zhangjf
|
b256989a7e
|
chore: 添加.gitignore忽略文件
|
2026-02-20 10:56:01 +08:00 |
|
zhangjf
|
480c052ff1
|
feat: Docker容器化部署配置
- 添加所有后端服务的application-docker.yml配置文件
- 添加前端fund-admin和fund-mobile的Dockerfile和nginx配置
- 更新docker-compose.yml添加前端服务
- 添加.dockerignore优化构建
- 添加deploy.sh一键部署脚本
|
2026-02-20 10:13:52 +08:00 |
|
zhangjf
|
47703e40c4
|
feat: 移动端完善与操作日志审计功能
1. 移动端fund-mobile完善:
- 新增项目列表页面 (project/List.vue)
- 新增客户列表页面 (customer/List.vue)
- 新增统一API文件 (api/index.ts)
- 更新路由配置,新增项目和客户路由
- 首页增加项目和客户快捷入口
2. 操作日志审计功能:
- OperationLog实体类: 操作日志数据模型
- OperationLogMapper: MyBatis-Plus Mapper
- OperationLogService: 日志服务接口和实现
- OperationLogController: 日志查询API
- OperationLogAspect: AOP切面自动记录操作日志
- 支持异步保存,只记录写操作(增删改)
3. 操作日志功能特性:
- 自动拦截Controller层方法
- 记录用户ID、用户名、操作描述、请求参数
- 记录IP、UserAgent、操作时间、耗时
- 支持成功/失败状态记录
- 支持分页查询和历史日志清理
|
2026-02-20 09:16:00 +08:00 |
|
zhangjf
|
eafb783e2b
|
feat: 定时任务与账期逾期管理功能
1. 定时任务框架:
- 使用Spring @Scheduled实现定时任务(替代XXL-JOB简化部署)
- @EnableScheduling启用定时任务
- 条件配置: fund.schedule.enabled
2. 定时任务列表:
- 逾期状态更新: 每天凌晨1点执行
- 逾期提醒通知: 每天上午9点执行
- 账期预警提醒: 每周一上午10点执行
3. 账期管理API:
- GET /upcoming-due: 获取即将到期应收款列表
- 支持指定天数内到期的应收款查询
4. 服务层增强:
- ReceivableService.getUpcomingDueList(): 查询即将到期应收款
- ReceivableServiceImpl: 完整实现逾期状态更新逻辑
|
2026-02-20 09:06:40 +08:00 |
|
zhangjf
|
06efab9596
|
feat: 支出和应收款模块新增Excel导出功能
后端:
- fund-exp: 新增ExpenseExcel导出实体、导出接口和listExpenses方法
- fund-receipt: 新增ReceivableExcel导出实体、导出接口和listReceivables方法
前端:
- fund-admin: 支出管理页面新增导出按钮
- fund-admin: 应收款管理页面新增导出按钮
- fund-admin: 新增exportExpense和exportReceivable API
|
2026-02-20 08:36:20 +08:00 |
|
zhangjf
|
ad4176ae8a
|
docs: 更新移动端技术栈为 Vue3 + Vite5 + Vant4
- 架构设计文档:更新前端架构说明和接入层架构图
- 需求文档:更新移动端技术栈描述
- 功能清单:更新移动端模块技术栈
- 移除 UniApp 跨端架构,改为独立的 H5 移动端应用
|
2026-02-20 08:19:46 +08:00 |
|
zhangjf
|
15e7ed6f1b
|
feat: 所有服务统一配置多租户负载均衡,清理无效配置
1. 业务服务配置(fund-cust/proj/req/exp/receipt)
- 添加 Nacos metadata.tenant-id 配置
- 添加 tenant.routing 配置
- 移除无效的 feign.fund-sys.url 配置
2. 共享服务配置(fund-report/file)
- 添加 tenant.routing.enabled: false
- 共享服务不需要租户路由
3. Gateway 配置清理
- 移除过时的 tenant-group-header 配置
- 移除过时的 group-separator 配置
4. 删除 Docker 配置文件
- 删除 fund-sys/application-docker.yml
- 删除 fund-gateway/application-docker.yml
配置规范:
业务服务: tenant.routing.enabled=true, metadata.tenant-id=${TENANT_ID:}
共享服务: tenant.routing.enabled=false
|
2026-02-19 21:46:11 +08:00 |
|
zhangjf
|
8233ff8040
|
feat: 支持多租户专属实例(逗号分隔的租户ID列表)
功能增强:
- TENANT_ID 支持逗号分隔的多个租户 ID
- 一个实例可以服务多个指定租户
实例类型:
共享实例: TENANT_ID = "" (空)
单租户专属: TENANT_ID = "VIP_001"
多租户专属: TENANT_ID = "VIP_001,VIP_002,VIP_003"
路由逻辑:
1. 解析实例 metadata.tenant-id 为租户列表
2. 检查请求 tenantId 是否在列表中
3. 匹配成功 → 专属实例
4. 匹配失败 → 回退共享实例
使用场景:
- 大客户独占实例(单租户)
- 多个小客户共享一个实例(多租户)
- 普通客户使用公共实例(共享)
|
2026-02-19 21:39:30 +08:00 |
|
zhangjf
|
5a2154c1a1
|
refactor: 简化路由逻辑,直接使用 tenantId 匹配实例
问题:tenantGroup 是 tenantId 的简单转换,造成冗余
tenantGroup = "TENANT_" + tenantId.toUpperCase()
解决方案:
1. 直接使用 tenantId 匹配实例
- 移除 tenantGroup 概念
- 负载均衡器直接匹配 metadata.tenant-id
2. 简化配置
- JWT 只需 tenantId 一个字段
- 实例元数据只有 tenant-id
3. 前端简化
- 请求头只需 X-Tenant-Id
- 不再需要 X-Tenant-Group
路由规则:
共享实例: metadata.tenant-id = "" (空)
VIP实例: metadata.tenant-id = "VIP_001"
匹配逻辑: 找到匹配实例 → VIP专属,找不到 → 共享实例
|
2026-02-19 21:33:51 +08:00 |
|