refactor(asset): 优化保养项目设计,使用折中方案

变更内容:
1. 删除 maintainItemId 字段(冗余,无实际作用)
2. 保留 maintainItem 字段(直接存储项目名称)
3. 新增接口:获取已使用的保养项目列表(去重)
4. 前端可使用该接口提供下拉提示,提升用户体验
5. 添加 maintainItem 字段的非空校验

设计思路:
- 不引入保养项目字典表(避免过度设计)
- 通过 DISTINCT 查询提供已使用项目列表
- 用户可以输入新项目,也可以从已有项目中选择
- 后续如需规范化,可平滑升级到字典表方案
This commit is contained in:
k kfluous
2026-03-12 09:54:00 +08:00
parent eb9eaf3810
commit a2e2d5c27e
25 changed files with 4402 additions and 11 deletions

View File

@@ -0,0 +1,239 @@
# 数据库连接问题分析报告
## 🔍 问题分析
### 核心问题
**数据库名称不匹配!**
### 详细对比
#### 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
**状态**: 问题已分析,等待选择方案执行