refactor(asset): 优化保养项目设计,使用折中方案
变更内容: 1. 删除 maintainItemId 字段(冗余,无实际作用) 2. 保留 maintainItem 字段(直接存储项目名称) 3. 新增接口:获取已使用的保养项目列表(去重) 4. 前端可使用该接口提供下拉提示,提升用户体验 5. 添加 maintainItem 字段的非空校验 设计思路: - 不引入保养项目字典表(避免过度设计) - 通过 DISTINCT 查询提供已使用项目列表 - 用户可以输入新项目,也可以从已有项目中选择 - 后续如需规范化,可平滑升级到字典表方案
This commit is contained in:
222
DATABASE_MIGRATION_MANUAL.md
Normal file
222
DATABASE_MIGRATION_MANUAL.md
Normal file
@@ -0,0 +1,222 @@
|
||||
# 数据库迁移 - 手动操作指南
|
||||
|
||||
## 问题说明
|
||||
- 本地无法直接连接到远程数据库(IP 白名单限制)
|
||||
- SSH 密码认证失败(需要配置 SSH 密钥)
|
||||
- 配置使用 Docker 容器名 `oneos-mysql`
|
||||
|
||||
## 解决方案
|
||||
|
||||
### 方案 1:在服务器上手动执行(推荐)
|
||||
|
||||
#### 步骤 1:登录服务器
|
||||
```bash
|
||||
# 使用密码登录(需要手动输入密码)
|
||||
ssh root@47.103.115.36
|
||||
# 密码: Passw0rd2026@ssl
|
||||
```
|
||||
|
||||
#### 步骤 2:上传 SQL 文件
|
||||
在本地执行:
|
||||
```bash
|
||||
# 方式 1:使用 scp(需要手动输入密码)
|
||||
scp sql/update-2026-03-12-停车场和车型参数模块.sql root@47.103.115.36:/tmp/
|
||||
|
||||
# 方式 2:复制文件内容,在服务器上创建
|
||||
# 复制 sql/update-2026-03-12-停车场和车型参数模块.sql 的内容
|
||||
# 在服务器上执行:
|
||||
cat > /tmp/update-asset.sql << 'EOF'
|
||||
# 粘贴 SQL 内容
|
||||
EOF
|
||||
```
|
||||
|
||||
#### 步骤 3:在服务器上执行 SQL
|
||||
```bash
|
||||
# 登录服务器后执行
|
||||
|
||||
# 1. 检查 MySQL 容器
|
||||
docker ps | grep mysql
|
||||
|
||||
# 2. 查看数据库列表
|
||||
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 -e "SHOW DATABASES;"
|
||||
|
||||
# 3. 确认使用哪个数据库(可能是 oneos_system 或其他)
|
||||
# 根据配置,系统使用多个数据库:
|
||||
# - oneos_system (系统模块)
|
||||
# - oneos_infra (基础设施)
|
||||
# - oneos_bpm (工作流)
|
||||
|
||||
# 4. 执行 SQL 脚本(假设使用 oneos_system)
|
||||
docker exec -i oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system < /tmp/update-2026-03-12-停车场和车型参数模块.sql
|
||||
|
||||
# 5. 验证表结构
|
||||
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system -e "SHOW TABLES LIKE 'asset_%';"
|
||||
|
||||
# 6. 查看停车场表结构
|
||||
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system -e "DESC asset_parking;"
|
||||
|
||||
# 7. 查看车型参数表结构
|
||||
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system -e "DESC asset_vehicle_model;"
|
||||
|
||||
# 8. 查看车型维保项目关联表
|
||||
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system -e "DESC asset_vehicle_model_maintain_item;"
|
||||
```
|
||||
|
||||
### 方案 2:配置 SSH 密钥(一次性配置)
|
||||
|
||||
#### 步骤 1:生成 SSH 密钥(如果没有)
|
||||
```bash
|
||||
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
|
||||
```
|
||||
|
||||
#### 步骤 2:复制公钥到服务器
|
||||
```bash
|
||||
ssh-copy-id root@47.103.115.36
|
||||
# 输入密码: Passw0rd2026@ssl
|
||||
```
|
||||
|
||||
#### 步骤 3:测试免密登录
|
||||
```bash
|
||||
ssh root@47.103.115.36
|
||||
```
|
||||
|
||||
#### 步骤 4:执行自动化脚本
|
||||
配置好 SSH 密钥后,可以使用自动化脚本:
|
||||
```bash
|
||||
cd /Users/kkfluous/Projects/ai-coding/ln-oneos/oneos-backend
|
||||
|
||||
# 上传 SQL
|
||||
scp sql/update-2026-03-12-停车场和车型参数模块.sql root@47.103.115.36:/tmp/
|
||||
|
||||
# 执行 SQL
|
||||
ssh root@47.103.115.36 "docker exec -i oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system < /tmp/update-2026-03-12-停车场和车型参数模块.sql"
|
||||
|
||||
# 验证
|
||||
ssh root@47.103.115.36 "docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system -e 'SHOW TABLES LIKE \"asset_%\";'"
|
||||
```
|
||||
|
||||
### 方案 3:使用数据库管理工具
|
||||
|
||||
#### 工具选择
|
||||
- Navicat
|
||||
- DBeaver
|
||||
- MySQL Workbench
|
||||
- DataGrip
|
||||
|
||||
#### 连接信息
|
||||
由于使用 Docker 容器,需要:
|
||||
1. SSH 隧道连接到服务器
|
||||
2. 通过 Docker 端口映射访问 MySQL
|
||||
|
||||
#### SSH 隧道方式
|
||||
```bash
|
||||
# 建立 SSH 隧道
|
||||
ssh -L 3307:localhost:3306 root@47.103.115.36
|
||||
|
||||
# 然后在数据库工具中连接
|
||||
# Host: localhost
|
||||
# Port: 3307
|
||||
# User: root
|
||||
# Password: Passw0rd2026
|
||||
# Database: oneos_system
|
||||
```
|
||||
|
||||
## SQL 文件内容
|
||||
|
||||
文件位置:`sql/update-2026-03-12-停车场和车型参数模块.sql`
|
||||
|
||||
包含内容:
|
||||
1. 停车场表结构完善(9 个新字段)
|
||||
2. 车型参数表创建(18 个字段)
|
||||
3. 车型维保项目关联表创建(9 个字段)
|
||||
|
||||
## 验证清单
|
||||
|
||||
执行 SQL 后,验证以下内容:
|
||||
|
||||
### 1. 表是否创建成功
|
||||
```sql
|
||||
SHOW TABLES LIKE 'asset_%';
|
||||
```
|
||||
预期结果:
|
||||
- asset_parking
|
||||
- asset_vehicle_model
|
||||
- asset_vehicle_model_maintain_item
|
||||
|
||||
### 2. 停车场表字段
|
||||
```sql
|
||||
DESC asset_parking;
|
||||
```
|
||||
检查是否包含:
|
||||
- principal(公司负责人)
|
||||
- contact_name(联系人)
|
||||
- contact_phone(联系电话)
|
||||
- parked_amount(已停车辆数)
|
||||
- stock_area(库存区域)
|
||||
- unusual_action_city(异动城市)
|
||||
- longitude(经度)
|
||||
- latitude(纬度)
|
||||
- remark(备注)
|
||||
|
||||
### 3. 车型参数表字段
|
||||
```sql
|
||||
DESC asset_vehicle_model;
|
||||
```
|
||||
检查是否包含:
|
||||
- brand(品牌)
|
||||
- model(车型)
|
||||
- model_code(车型编号)
|
||||
- model_name(车型名称)
|
||||
- hydrogen_capacity(氢瓶容量)
|
||||
- reserve_electricity(储电量)
|
||||
- 等 18 个字段
|
||||
|
||||
### 4. 车型维保项目关联表字段
|
||||
```sql
|
||||
DESC asset_vehicle_model_maintain_item;
|
||||
```
|
||||
检查是否包含:
|
||||
- vehicle_model_id(车型ID)
|
||||
- maintain_item(保养项目)
|
||||
- maintain_content(保养内容)
|
||||
- materials_expenses(材料费)
|
||||
- hour_fee(工时费)
|
||||
- kilometer_cycle(公里周期)
|
||||
- time_cycle(时间周期)
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q1: 找不到数据库
|
||||
**问题**: `ERROR 1049 (42000): Unknown database 'yudao_asset'`
|
||||
|
||||
**解决**:
|
||||
- 检查实际使用的数据库名称
|
||||
- 可能是 `oneos_system`、`oneos_infra` 或其他
|
||||
- 查看 Nacos 配置确认数据库名
|
||||
|
||||
### Q2: 表已存在
|
||||
**问题**: `ERROR 1050 (42S01): Table 'asset_parking' already exists`
|
||||
|
||||
**解决**:
|
||||
- 如果是 ALTER TABLE 失败,检查字段是否已存在
|
||||
- 如果是 CREATE TABLE 失败,表示表已创建,跳过即可
|
||||
|
||||
### Q3: 权限不足
|
||||
**问题**: `ERROR 1142 (42000): CREATE command denied`
|
||||
|
||||
**解决**:
|
||||
- 确认使用 root 用户
|
||||
- 检查密码是否正确
|
||||
- 确认用户有 CREATE、ALTER 权限
|
||||
|
||||
## 下一步
|
||||
|
||||
数据库迁移完成后:
|
||||
1. 启动应用服务
|
||||
2. 执行 API 测试
|
||||
3. 验证功能正常
|
||||
|
||||
---
|
||||
|
||||
**创建时间**: 2026-03-12 01:35
|
||||
**状态**: 等待手动执行
|
||||
Reference in New Issue
Block a user