变更内容: 1. 删除 maintainItemId 字段(冗余,无实际作用) 2. 保留 maintainItem 字段(直接存储项目名称) 3. 新增接口:获取已使用的保养项目列表(去重) 4. 前端可使用该接口提供下拉提示,提升用户体验 5. 添加 maintainItem 字段的非空校验 设计思路: - 不引入保养项目字典表(避免过度设计) - 通过 DISTINCT 查询提供已使用项目列表 - 用户可以输入新项目,也可以从已有项目中选择 - 后续如需规范化,可平滑升级到字典表方案
240 lines
6.8 KiB
Markdown
240 lines
6.8 KiB
Markdown
# 数据库连接问题分析报告
|
||
|
||
## 🔍 问题分析
|
||
|
||
### 核心问题
|
||
**数据库名称不匹配!**
|
||
|
||
### 详细对比
|
||
|
||
#### 1. 老项目(已废弃)
|
||
- **项目路径**: `~/.openclaw/workspace/yudao-asset-cloud/`
|
||
- **数据库名称**: `yudao_asset`(单独的资产管理数据库)
|
||
- **连接方式**: 可能是直接 IP 连接或本地开发环境
|
||
- **SQL 脚本**: 针对 `yudao_asset` 数据库设计
|
||
|
||
#### 2. 新项目(当前)
|
||
- **项目路径**: `/Users/kkfluous/Projects/ai-coding/ln-oneos/oneos-backend/`
|
||
- **数据库架构**: 微服务架构,多个数据库
|
||
- `oneos_system` - 系统模块
|
||
- `oneos_infra` - 基础设施模块
|
||
- `oneos_bpm` - 工作流模块
|
||
- **没有 `yudao_asset` 或 `oneos_asset`!**
|
||
- **连接方式**: Docker 容器(oneos-mysql)
|
||
- **部署环境**: Docker Compose 部署在 47.103.115.36
|
||
|
||
### 为什么之前可以连接?
|
||
|
||
**答案:之前的项目和现在的项目不是同一个!**
|
||
|
||
1. **老项目**(yudao-asset-cloud)
|
||
- 独立的资产管理系统
|
||
- 使用独立的 `yudao_asset` 数据库
|
||
- 可能在本地开发环境或测试服务器
|
||
- 已被废弃并删除
|
||
|
||
2. **新项目**(ln-oneos)
|
||
- 完整的 ONE-OS 系统
|
||
- 微服务架构,多个数据库
|
||
- Docker 部署在生产服务器
|
||
- 资产模块需要集成到现有数据库中
|
||
|
||
## 🎯 解决方案
|
||
|
||
### 方案 1:使用 oneos_system 数据库(推荐)
|
||
|
||
**理由**:
|
||
- 系统模块是核心模块
|
||
- 资产管理属于系统基础数据
|
||
- 配置已存在,无需额外配置
|
||
|
||
**操作**:
|
||
```bash
|
||
# 1. 登录服务器
|
||
ssh root@47.103.115.36
|
||
|
||
# 2. 执行 SQL(使用 oneos_system 数据库)
|
||
docker exec -i oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system < /tmp/update-2026-03-12-停车场和车型参数模块.sql
|
||
|
||
# 3. 验证
|
||
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system -e "SHOW TABLES LIKE 'asset_%';"
|
||
```
|
||
|
||
### 方案 2:创建独立的 oneos_asset 数据库
|
||
|
||
**理由**:
|
||
- 资产管理模块独立
|
||
- 便于数据隔离和管理
|
||
- 符合微服务架构
|
||
|
||
**操作**:
|
||
```bash
|
||
# 1. 登录服务器
|
||
ssh root@47.103.115.36
|
||
|
||
# 2. 创建数据库
|
||
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 -e "CREATE DATABASE IF NOT EXISTS oneos_asset DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
||
|
||
# 3. 执行 SQL
|
||
docker exec -i oneos-mysql mysql -uroot -pPassw0rd2026 oneos_asset < /tmp/update-2026-03-12-停车场和车型参数模块.sql
|
||
|
||
# 4. 验证
|
||
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_asset -e "SHOW TABLES LIKE 'asset_%';"
|
||
```
|
||
|
||
**额外配置**:
|
||
需要创建 `asset-server-dev.yaml` 配置文件:
|
||
```yaml
|
||
server:
|
||
port: 48084
|
||
|
||
spring:
|
||
datasource:
|
||
dynamic:
|
||
primary: master
|
||
datasource:
|
||
master:
|
||
url: jdbc:mysql://oneos-mysql:3306/oneos_asset?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
||
username: root
|
||
password: Passw0rd2026
|
||
slave:
|
||
lazy: true
|
||
url: jdbc:mysql://oneos-mysql:3306/oneos_asset?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
||
username: root
|
||
password: Passw0rd2026
|
||
|
||
data:
|
||
redis:
|
||
database: 4
|
||
|
||
cloud:
|
||
nacos:
|
||
discovery:
|
||
namespace: dev
|
||
config:
|
||
namespace: dev
|
||
|
||
yudao:
|
||
info:
|
||
base-package: cn.iocoder.yudao.module.asset
|
||
```
|
||
|
||
## 📊 两种方案对比
|
||
|
||
| 对比项 | 方案 1:使用 oneos_system | 方案 2:创建 oneos_asset |
|
||
|--------|---------------------------|--------------------------|
|
||
| 实施难度 | ⭐ 简单 | ⭐⭐ 中等 |
|
||
| 配置工作 | 无需额外配置 | 需要创建配置文件 |
|
||
| 数据隔离 | 与系统数据混合 | 完全隔离 |
|
||
| 微服务架构 | 不符合 | 符合 |
|
||
| 维护成本 | 低 | 中 |
|
||
| 推荐指数 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
|
||
|
||
## 🔧 推荐方案
|
||
|
||
### 短期方案(快速验证)
|
||
**使用方案 1:oneos_system 数据库**
|
||
- 优点:快速验证功能,无需额外配置
|
||
- 缺点:不符合微服务架构
|
||
|
||
### 长期方案(生产部署)
|
||
**使用方案 2:oneos_asset 数据库**
|
||
- 优点:符合微服务架构,数据隔离
|
||
- 缺点:需要额外配置
|
||
|
||
## 📝 更新后的操作步骤
|
||
|
||
### 步骤 1:选择方案并执行数据库迁移
|
||
|
||
**方案 1(推荐用于快速测试)**:
|
||
```bash
|
||
ssh root@47.103.115.36
|
||
# 上传 SQL 文件后
|
||
docker exec -i oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system < /tmp/update-2026-03-12-停车场和车型参数模块.sql
|
||
```
|
||
|
||
**方案 2(推荐用于生产环境)**:
|
||
```bash
|
||
ssh root@47.103.115.36
|
||
# 创建数据库
|
||
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 -e "CREATE DATABASE IF NOT EXISTS oneos_asset DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
||
# 执行 SQL
|
||
docker exec -i oneos-mysql mysql -uroot -pPassw0rd2026 oneos_asset < /tmp/update-2026-03-12-停车场和车型参数模块.sql
|
||
```
|
||
|
||
### 步骤 2:配置应用(仅方案 2 需要)
|
||
|
||
创建 Nacos 配置:
|
||
```bash
|
||
cd /Users/kkfluous/Projects/ai-coding/ln-oneos/nacos-config
|
||
|
||
# 创建 asset-server-dev.yaml
|
||
cat > asset-server-dev.yaml << 'EOF'
|
||
# 配置内容见上文
|
||
EOF
|
||
|
||
# 上传到 Nacos(如果使用 Nacos)
|
||
# 或者在服务器上手动配置
|
||
```
|
||
|
||
### 步骤 3:启动服务
|
||
|
||
```bash
|
||
cd /Users/kkfluous/Projects/ai-coding/ln-oneos/oneos-backend
|
||
|
||
# 如果使用方案 1,直接启动
|
||
mvn spring-boot:run
|
||
|
||
# 如果使用方案 2,需要先上传配置到 Nacos
|
||
```
|
||
|
||
## 💡 经验教训
|
||
|
||
### 1. 项目迁移要注意数据库架构变化
|
||
- 老项目:单体架构,单一数据库
|
||
- 新项目:微服务架构,多个数据库
|
||
- **不能直接复用老项目的 SQL 脚本!**
|
||
|
||
### 2. 开发前要确认目标环境
|
||
- 数据库名称
|
||
- 数据库架构
|
||
- 部署方式(Docker/本地)
|
||
- 网络环境
|
||
|
||
### 3. 文档要及时更新
|
||
- SQL 脚本中的数据库名称
|
||
- 配置文件中的数据库连接
|
||
- 部署文档中的环境说明
|
||
|
||
## 🎯 下一步操作
|
||
|
||
### 立即执行(推荐方案 1)
|
||
```bash
|
||
# 1. 登录服务器
|
||
ssh root@47.103.115.36
|
||
|
||
# 2. 创建 SQL 文件
|
||
cat > /tmp/update-asset.sql << 'EOF'
|
||
# 复制 sql/update-2026-03-12-停车场和车型参数模块.sql 的内容
|
||
EOF
|
||
|
||
# 3. 执行 SQL
|
||
docker exec -i oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system < /tmp/update-asset.sql
|
||
|
||
# 4. 验证
|
||
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system -e "SHOW TABLES LIKE 'asset_%';"
|
||
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system -e "DESC asset_parking;"
|
||
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_system -e "DESC asset_vehicle_model;"
|
||
```
|
||
|
||
### 后续优化(方案 2)
|
||
1. 创建独立的 oneos_asset 数据库
|
||
2. 配置 asset-server-dev.yaml
|
||
3. 上传配置到 Nacos
|
||
4. 重新部署服务
|
||
|
||
---
|
||
|
||
**创建时间**: 2026-03-12 01:40
|
||
**状态**: 问题已分析,等待选择方案执行
|