Files
oneos-backend/DATABASE_CONNECTION_ANALYSIS.md
k kfluous a2e2d5c27e refactor(asset): 优化保养项目设计,使用折中方案
变更内容:
1. 删除 maintainItemId 字段(冗余,无实际作用)
2. 保留 maintainItem 字段(直接存储项目名称)
3. 新增接口:获取已使用的保养项目列表(去重)
4. 前端可使用该接口提供下拉提示,提升用户体验
5. 添加 maintainItem 字段的非空校验

设计思路:
- 不引入保养项目字典表(避免过度设计)
- 通过 DISTINCT 查询提供已使用项目列表
- 用户可以输入新项目,也可以从已有项目中选择
- 后续如需规范化,可平滑升级到字典表方案
2026-03-12 09:54:00 +08:00

240 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数据库连接问题分析报告
## 🔍 问题分析
### 核心问题
**数据库名称不匹配!**
### 详细对比
#### 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 |
|--------|---------------------------|--------------------------|
| 实施难度 | ⭐ 简单 | ⭐⭐ 中等 |
| 配置工作 | 无需额外配置 | 需要创建配置文件 |
| 数据隔离 | 与系统数据混合 | 完全隔离 |
| 微服务架构 | 不符合 | 符合 |
| 维护成本 | 低 | 中 |
| 推荐指数 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
## 🔧 推荐方案
### 短期方案(快速验证)
**使用方案 1oneos_system 数据库**
- 优点:快速验证功能,无需额外配置
- 缺点:不符合微服务架构
### 长期方案(生产部署)
**使用方案 2oneos_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
**状态**: 问题已分析,等待选择方案执行