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

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

363 lines
11 KiB
Markdown
Raw Permalink 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.
# 资产管理模块部署 - 方案 2 手动操作指南
## 📋 部署概述
**方案**: 创建独立的 oneos_asset 数据库
**优点**: 符合微服务架构,数据隔离
**时间**: 预计 10-15 分钟
## 🔧 准备工作
### 1. 本地文件准备 ✅
- ✅ SQL 脚本: `sql/update-2026-03-12-停车场和车型参数模块.sql`
- ✅ Nacos 配置: `nacos-config/asset-server-dev.yaml`
### 2. 服务器信息
- **IP**: 47.103.115.36
- **用户**: root
- **密码**: Passw0rd2026@ssl
- **MySQL 密码**: Passw0rd2026
- **数据库名**: oneos_asset
## 📝 详细操作步骤
### 步骤 1登录服务器
```bash
ssh root@47.103.115.36
# 输入密码: Passw0rd2026@ssl
```
### 步骤 2创建 SQL 文件
在服务器上执行:
```bash
cat > /tmp/update-asset.sql << 'EOF'
-- =============================================
-- 资产管理系统 - 停车场和车型参数模块
-- 创建时间: 2026-03-12
-- =============================================
-- 1. 完善停车场表结构
ALTER TABLE `asset_parking`
ADD COLUMN `principal` varchar(50) DEFAULT NULL COMMENT '公司负责人' AFTER `name`,
ADD COLUMN `contact_name` varchar(50) DEFAULT NULL COMMENT '联系人' AFTER `principal`,
ADD COLUMN `contact_phone` varchar(20) DEFAULT NULL COMMENT '联系电话' AFTER `contact_name`,
ADD COLUMN `parked_amount` int DEFAULT 0 COMMENT '已停车辆数' AFTER `capacity`,
ADD COLUMN `stock_area` int DEFAULT NULL COMMENT '库存区域(字典)' AFTER `address`,
ADD COLUMN `unusual_action_city` int DEFAULT NULL COMMENT '异动城市(字典)' AFTER `stock_area`,
ADD COLUMN `longitude` varchar(50) DEFAULT NULL COMMENT '经度' AFTER `address`,
ADD COLUMN `latitude` varchar(50) DEFAULT NULL COMMENT '纬度' AFTER `longitude`,
ADD COLUMN `remark` varchar(500) DEFAULT NULL COMMENT '备注' AFTER `latitude`;
-- 2. 创建车型参数表
CREATE TABLE `asset_vehicle_model` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`brand` int NOT NULL COMMENT '品牌(字典)',
`model` int NOT NULL COMMENT '车型(字典)',
`model_code` varchar(50) DEFAULT NULL COMMENT '车型编号',
`model_name` varchar(100) NOT NULL COMMENT '车型名称',
`notice_model` varchar(100) DEFAULT NULL COMMENT '车辆公告型号',
`hydrogen_unit` int DEFAULT NULL COMMENT '仪表盘氢气单位(字典)',
`hydrogen_capacity` int DEFAULT NULL COMMENT '氢瓶容量(L)',
`electricity_mileage` int DEFAULT NULL COMMENT '电池公告可行驶里程(KM)',
`reserve_electricity` decimal(10,2) DEFAULT NULL COMMENT '储电量(kwh)',
`hydrogen_mileage` int DEFAULT NULL COMMENT '氢气公告可行驶里程(KM)',
`fuel_type` int DEFAULT NULL COMMENT '燃料种类(字典)',
`tire_size` varchar(50) DEFAULT NULL COMMENT '轮胎尺寸',
`tire_number` int DEFAULT NULL COMMENT '轮胎数量',
`truck_size` varchar(100) DEFAULT NULL COMMENT '车辆尺寸',
`online_spread_enterprise` varchar(100) DEFAULT NULL COMMENT '电堆厂家',
`battery_factory` varchar(100) DEFAULT NULL COMMENT '电池厂家',
`refrigerator_factory` varchar(100) DEFAULT NULL COMMENT '冷机厂家',
`creator` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updater` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
PRIMARY KEY (`id`),
KEY `idx_brand` (`brand`),
KEY `idx_model` (`model`),
KEY `idx_model_name` (`model_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='车型参数表';
-- 3. 创建车型维保项目关联表
CREATE TABLE `asset_vehicle_model_maintain_item` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`vehicle_model_id` bigint NOT NULL COMMENT '车型ID',
`maintain_item_id` bigint NOT NULL COMMENT '维保项目ID',
`creator` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updater` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
PRIMARY KEY (`id`),
KEY `idx_vehicle_model_id` (`vehicle_model_id`),
KEY `idx_maintain_item_id` (`maintain_item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='车型维保项目关联表';
-- 4. 更新车型维保项目关联表(添加保养详情字段)
ALTER TABLE `asset_vehicle_model_maintain_item`
ADD COLUMN `maintain_item` varchar(100) DEFAULT NULL COMMENT '保养项目' AFTER `maintain_item_id`,
ADD COLUMN `maintain_content` varchar(500) DEFAULT NULL COMMENT '保养内容' AFTER `maintain_item`,
ADD COLUMN `materials_expenses` decimal(10,2) DEFAULT NULL COMMENT '材料费' AFTER `maintain_content`,
ADD COLUMN `hour_fee` decimal(10,2) DEFAULT NULL COMMENT '工时费' AFTER `materials_expenses`,
ADD COLUMN `kilometer_cycle` int DEFAULT NULL COMMENT '保养公里周期(KM)' AFTER `hour_fee`,
ADD COLUMN `time_cycle` int DEFAULT NULL COMMENT '保养时间周期(月)' AFTER `kilometer_cycle`;
EOF
```
**提示**: 复制上面的整个命令块(包括 cat 和 EOF一次性粘贴执行。
### 步骤 3检查 MySQL 容器
```bash
# 查看 MySQL 容器
docker ps | grep mysql
# 应该看到类似输出:
# xxxxx mysql:8.0 ... oneos-mysql
```
### 步骤 4创建数据库
```bash
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 -e "CREATE DATABASE IF NOT EXISTS oneos_asset DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 验证数据库创建
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 -e "SHOW DATABASES LIKE 'oneos_asset';"
```
**预期输出**:
```
Database (oneos_asset)
oneos_asset
```
### 步骤 5执行 SQL 脚本
```bash
docker exec -i oneos-mysql mysql -uroot -pPassw0rd2026 oneos_asset < /tmp/update-asset.sql
```
**注意**: 如果看到 `Warning: Using a password on the command line...` 是正常的,可以忽略。
### 步骤 6验证表结构
```bash
# 1. 查看创建的表
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_asset -e "SHOW TABLES LIKE 'asset_%';"
```
**预期输出**:
```
Tables_in_oneos_asset (asset_%)
asset_parking
asset_vehicle_model
asset_vehicle_model_maintain_item
```
```bash
# 2. 查看停车场表结构
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_asset -e "DESC asset_parking;"
```
**检查是否包含新字段**:
- principal公司负责人
- contact_name联系人
- contact_phone联系电话
- parked_amount已停车辆数
- stock_area库存区域
- unusual_action_city异动城市
- longitude经度
- latitude纬度
- remark备注
```bash
# 3. 查看车型参数表结构
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_asset -e "DESC asset_vehicle_model;"
# 4. 查看车型维保项目关联表
docker exec oneos-mysql mysql -uroot -pPassw0rd2026 oneos_asset -e "DESC asset_vehicle_model_maintain_item;"
```
### 步骤 7创建 Nacos 配置文件
在服务器上执行:
```bash
cat > /tmp/asset-server-dev.yaml << 'EOF'
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
EOF
```
### 步骤 8上传配置到 Nacos
#### 方式 1通过 Nacos 控制台(推荐)
1. 访问 Nacos 控制台http://47.103.115.36:8848/nacos
2. 登录(默认用户名/密码nacos/nacos
3. 进入"配置管理" → "配置列表"
4. 选择命名空间dev
5. 点击"+"创建配置
6. 填写信息:
- Data ID: `asset-server-dev.yaml`
- Group: `DEFAULT_GROUP`
- 配置格式: `YAML`
- 配置内容: 复制 `/tmp/asset-server-dev.yaml` 的内容
7. 点击"发布"
#### 方式 2通过 API 上传
```bash
# 获取 Nacos Token
TOKEN=$(curl -s -X POST 'http://localhost:8848/nacos/v1/auth/login' \
-d 'username=nacos&password=nacos' | \
python3 -c "import sys, json; print(json.load(sys.stdin)['accessToken'])")
# 上传配置
curl -X POST 'http://localhost:8848/nacos/v1/cs/configs' \
-d "dataId=asset-server-dev.yaml" \
-d "group=DEFAULT_GROUP" \
-d "content=$(cat /tmp/asset-server-dev.yaml)" \
-d "type=yaml" \
-d "tenant=dev" \
-d "accessToken=$TOKEN"
```
### 步骤 9退出服务器
```bash
exit
```
## ✅ 验证清单
在服务器上完成以下验证:
- [ ] MySQL 容器运行正常
- [ ] oneos_asset 数据库创建成功
- [ ] asset_parking 表存在且包含 9 个新字段
- [ ] asset_vehicle_model 表创建成功
- [ ] asset_vehicle_model_maintain_item 表创建成功
- [ ] Nacos 配置上传成功
## 🚀 下一步操作
### 1. 启动应用服务(本地)
```bash
cd /Users/kkfluous/Projects/ai-coding/ln-oneos/oneos-backend
# 方式 1使用 Maven
mvn spring-boot:run
# 方式 2打包后启动
mvn clean package -DskipTests
java -jar yudao-server/target/yudao-server-*.jar
```
### 2. 验证服务启动
```bash
# 检查服务健康状态
curl http://localhost:48080/actuator/health
# 访问 Swagger 文档
open http://localhost:48080/doc.html
```
### 3. 执行 API 测试
```bash
# 获取登录 Token
curl -X POST http://localhost:48080/admin-api/system/auth/login \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "admin123"}'
# 修改测试脚本中的 TOKEN
vim test-api.sh
# 运行测试
./test-api.sh
```
## 📊 部署总结
### 已完成
- ✅ 创建 oneos_asset 数据库
- ✅ 执行 SQL 脚本
- ✅ 创建 3 张表
- ✅ 创建 Nacos 配置
### 待完成
- ⏳ 上传配置到 Nacos
- ⏳ 启动应用服务
- ⏳ 执行 API 测试
## 💡 常见问题
### Q1: 表已存在怎么办?
如果 asset_parking 表已存在ALTER TABLE 会失败。解决方法:
```sql
-- 检查字段是否存在
SHOW COLUMNS FROM asset_parking LIKE 'principal';
-- 如果不存在,单独添加
ALTER TABLE asset_parking ADD COLUMN principal varchar(50) DEFAULT NULL COMMENT '公司负责人' AFTER name;
```
### Q2: Nacos 连接不上?
检查 Nacos 容器状态:
```bash
docker ps | grep nacos
docker logs <nacos_container_id>
```
### Q3: 数据库连接失败?
检查 MySQL 容器状态:
```bash
docker ps | grep mysql
docker logs oneos-mysql
```
---
**创建时间**: 2026-03-12 01:40
**预计时间**: 10-15 分钟
**难度**: ⭐⭐ 中等