refactor(asset): 优化保养项目设计,使用折中方案
变更内容: 1. 删除 maintainItemId 字段(冗余,无实际作用) 2. 保留 maintainItem 字段(直接存储项目名称) 3. 新增接口:获取已使用的保养项目列表(去重) 4. 前端可使用该接口提供下拉提示,提升用户体验 5. 添加 maintainItem 字段的非空校验 设计思路: - 不引入保养项目字典表(避免过度设计) - 通过 DISTINCT 查询提供已使用项目列表 - 用户可以输入新项目,也可以从已有项目中选择 - 后续如需规范化,可平滑升级到字典表方案
This commit is contained in:
362
DEPLOY_MANUAL_GUIDE.md
Normal file
362
DEPLOY_MANUAL_GUIDE.md
Normal file
@@ -0,0 +1,362 @@
|
||||
# 资产管理模块部署 - 方案 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 分钟
|
||||
**难度**: ⭐⭐ 中等
|
||||
Reference in New Issue
Block a user