refactor: de-submodule rlz backend and integrate all source code

Move rlz/ backend from git submodule to first-class source tree.
Includes all RuoYi 3.8.3 backend source, mapper XMLs, SQL scripts,
Dockerfile, and build configs. Also adds frontend enhancements:

- Order management: status filters, refund review, settlement (Issue #14)
- Hospital management: level/description/image fields (Issue #16)
- User management: type filter, userLevel, stats endpoint (Issue #17)
- Dev environment: application-dev.yml for rlz_dev database
- CI/CD: Drone pipeline configuration (.drone.yml)
- Mini program: API config extraction (coupon/utils/config.js)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
renjianbo
2026-05-17 00:20:42 +08:00
parent 482b9ac92f
commit cccc88e2e2
407 changed files with 51828 additions and 939 deletions

291
docs/开发环境方案.md Normal file
View File

@@ -0,0 +1,291 @@
# 瑞来健康 (RLZ) 开发环境方案
> 创建日期2026-05-14
---
## 一、现状诊断
| 问题 | 详情 |
|------|------|
| **代码同步混乱** | 本地 → Gitea → 服务器三处代码,靠手动同步,容易产生冲突 |
| **无环境隔离** | 只有一个服务器、一个数据库 `rlz`,开发和生产共用,数据易污染 |
| **服务器资源紧张** | 2核 CPU7.5GB 内存(仅剩 ~762MB跑不了第二个 Java 实例 |
| **无 CI/CD** | Drone CI 已部署但未配置 `.drone.yml`,每次靠手动构建部署 |
| **移动端 URL 硬编码** | Android / 小程序切换环境需要改代码重新打包 |
### 当前架构
```
┌──────────┐ git push ┌──────────┐ 手动拉取 ┌──────────────┐
│ 本地开发 │ ───────────────→ │ Gitea │ ────────────→ │ 云服务器 │
│ Windows │ │ :3001 │ │ 101.43.95.130│
└──────────┘ └──────────┘ └──────────────┘
┌─────────────────────────┘
┌──────────────┐
│ 腾讯云 CynosDB│
│ MySQL 8 │
│ 数据库: rlz │
└──────────────┘
```
---
## 二、Git 分支策略
```
main (生产)
├── dev (开发主线)
│ ├── feat/xxx (功能分支)
│ ├── fix/xxx (修复分支)
│ └── hotfix/xxx (紧急修复分支)
└── release/xxx (发布候选,可选)
```
### 工作流
| 步骤 | 操作 | 说明 |
|------|------|------|
| 1 | `git checkout dev` | 切换到开发分支 |
| 2 | `git checkout -b feat/xxx` | 创建功能分支 |
| 3 | 本地开发 + 测试 | 本机运行后端连 `rlz_dev` 库 |
| 4 | `git push origin feat/xxx` | 推送功能分支到 Gitea |
| 5 | 创建 PR / merge 到 `dev` | 代码评审后合并 |
| 6 | 在 `dev` 上集成测试 | 服务器可临时部署 `dev` 版本验证 |
| 7 | `dev``main` merge | 测试通过后合并到生产分支 |
| 8 | Drone CI 自动部署 | main 分支 push 后自动构建部署 |
### 初始化命令
```bash
# 在本地项目根目录执行
cd D:/androidPj/rlz
# 创建 dev 分支
git checkout -b dev
git push origin dev
# main 分支保持稳定,后续在 dev 上开发
```
---
## 三、环境划分
由于服务器内存仅剩 762MB不适合在服务器上同时跑两套 Java 后端。采用 **本地开发 + 远程数据库** 模式。
| 环境 | 后端位置 | 数据库 | Redis | 用途 |
|------|----------|--------|-------|------|
| **本地开发** | 本机运行 IDE/Maven | 云 MySQL 新库 `rlz_dev` | 本机 Docker 或服务器 Redis | 日常开发调试 |
| **服务器生产** | Docker `rlz-backend:8039` | 云 MySQL `rlz` | Docker `rlz-redis:6379` | 正式对外服务 |
### 数据库隔离
在腾讯云 CynosDB 上创建独立开发库:
```sql
-- 创建开发数据库
CREATE DATABASE rlz_dev DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 从生产库复制表结构(不含数据)
-- 方式一:用 mysqldump 导出结构
-- mysqldump -h gz-cynosdbmysql-grp-d26pzce5.sql.tencentcdb.com -P 24936 -u root -p \
-- --no-data rlz | mysql -h ... -u root -p rlz_dev
-- 方式二:运行项目的 SQL 初始化脚本
-- mysql -h ... -u root -p rlz_dev < rlz/sql/ry_20220625.sql
-- mysql -h ... -u root -p rlz_dev < rlz/sql/quartz.sql
```
---
## 四、后端 Spring Profile 配置
确保本地开发和生产环境配置分离:
### application-dev.yml本地开发用
```yaml
# 本地开发 profile
spring:
datasource:
druid:
master:
url: jdbc:mysql://gz-cynosdbmysql-grp-d26pzce5.sql.tencentcdb.com:24936/rlz_dev?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: ${MYSQL_PASSWORD}
redis:
host: 101.43.95.130 # 开发时可连服务器 Redis或本地启动
port: 6379
server:
port: 8039
```
### application-docker.yml服务器生产用
```yaml
# Docker 生产环境 - 通过环境变量注入
spring:
datasource:
druid:
master:
url: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE}?...
redis:
host: ${REDIS_HOST:redis}
port: ${REDIS_PORT:6379}
server:
port: ${SERVER_PORT:8039}
```
### 本地启动命令
```bash
# Windows 本地开发
cd D:\androidPj\rlz\rlz
mvn spring-boot:run -Dspring-boot.run.profiles=dev
# 或指定密码
mvn spring-boot:run -Dspring-boot.run.profiles=dev -Dspring-boot.run.arguments=--MYSQL_PASSWORD=你的密码
```
---
## 五、Drone CI 自动部署
服务器已运行 Drone Server (端口 3002) 和 Drone Runner只需创建 `.drone.yml`
### .drone.yml 配置
```yaml
kind: pipeline
type: docker
name: rlz-deploy
trigger:
branch:
- main # 只有 main 分支 push 才触发部署
event:
- push
steps:
- name: build-backend
image: maven:3.8-openjdk-8
commands:
- cd rlz
- mvn clean package -DskipTests
- name: docker-build-push
image: docker:latest
volumes:
- name: docker_sock
path: /var/run/docker.sock
commands:
- cd rlz
- docker build -t rlz-backend:latest .
- cd ..
- docker compose up -d --build
volumes:
- name: docker_sock
host:
path: /var/run/docker.sock
```
> 注意:需要在 Gitea → Drone 中激活 `admin/rlz` 仓库,并将上述配置推送到仓库。
---
## 六、移动端 API 地址管理
### Android (peizhen)
`app/build.gradle` 中配置 BuildConfig
```groovy
android {
buildTypes {
debug {
buildConfigField "String", "API_BASE_URL", '"http://192.168.x.x:8039"'
}
release {
buildConfigField "String", "API_BASE_URL", '"http://101.43.95.130:8039"'
}
}
}
```
代码中统一使用 `BuildConfig.API_BASE_URL`,不再硬编码。
### 微信小程序 (coupon)
`utils/` 下创建 `config.js`
```javascript
// config.js - 切换环境只需改这里
const config = {
// 开发环境(本地后端)
// baseUrl: 'http://192.168.x.x:8039',
// 生产环境
baseUrl: 'http://101.43.95.130:8039',
}
module.exports = config
```
所有请求统一引用 `config.baseUrl`
---
## 七、完整开发流程
### 日常开发流程
```
1. git checkout dev && git pull
2. 本地启动后端 (dev profile → rlz_dev 库)
3. Android Studio 用 debug 构建 → 指向本地后端
4. 微信开发者工具 → 改 config.js baseUrl 指本地
5. 开发 + 本地测试
6. git add/commit/push 到 dev 分支
7. 需要发布时dev merge 到 main触发 Drone 自动部署
```
### 紧急修复流程
```
1. git checkout main
2. git checkout -b hotfix/xxx
3. 修复 → 本地验证
4. merge 到 main触发部署
5. merge 回 dev保持 dev 同步)
```
---
## 八、改进执行清单
| 序号 | 任务 | 优先级 | 说明 |
|------|------|--------|------|
| 1 | 创建 `dev` 分支并推送 | **高** | 开发和生产代码分离 |
| 2 | 云 MySQL 创建 `rlz_dev` 库 | **高** | 数据隔离,避免污染生产 |
| 3 | 确认 `application-dev.yml` 配置 | **高** | 指向 `rlz_dev` 库 |
| 4 | 配置 Drone CI `.drone.yml` | **高** | 自动化部署,不再手动 |
| 5 | Android 添加 BuildConfig | **中** | debug/release 自动切换 API 地址 |
| 6 | 小程序抽离 `config.js` | **中** | 切换环境不改业务代码 |
| 7 | 服务器添加 Drone webhook | **中** | Gitea push 自动触发构建 |
| 8 | 编写本地开发启动脚本 | 低 | 一键启动本地环境 |
---
## 九、注意事项
1. **云数据库密码** 需保密,不要提交到 Git 仓库,使用环境变量或 `.env` 文件(已被 `.gitignore` 忽略)
2. **服务器内存有限**762MB 可用),不要在服务器上跑开发环境
3. **数据库备份** — 在对 `rlz` 生产库做结构变更前,务必先备份
4. **Android 签名**`ruilaizi.jks` 不要提交到 Git已在 `.gitignore`