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

11 KiB
Raw Permalink Blame History

资产管理模块部署 - 方案 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登录服务器

ssh root@47.103.115.36
# 输入密码: Passw0rd2026@ssl

步骤 2创建 SQL 文件

在服务器上执行:

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 容器

# 查看 MySQL 容器
docker ps | grep mysql

# 应该看到类似输出:
# xxxxx   mysql:8.0   ...   oneos-mysql

步骤 4创建数据库

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 脚本

docker exec -i oneos-mysql mysql -uroot -pPassw0rd2026 oneos_asset < /tmp/update-asset.sql

注意: 如果看到 Warning: Using a password on the command line... 是正常的,可以忽略。

步骤 6验证表结构

# 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
# 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备注
# 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 配置文件

在服务器上执行:

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 上传

# 获取 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退出服务器

exit

验证清单

在服务器上完成以下验证:

  • MySQL 容器运行正常
  • oneos_asset 数据库创建成功
  • asset_parking 表存在且包含 9 个新字段
  • asset_vehicle_model 表创建成功
  • asset_vehicle_model_maintain_item 表创建成功
  • Nacos 配置上传成功

🚀 下一步操作

1. 启动应用服务(本地)

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. 验证服务启动

# 检查服务健康状态
curl http://localhost:48080/actuator/health

# 访问 Swagger 文档
open http://localhost:48080/doc.html

3. 执行 API 测试

# 获取登录 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 会失败。解决方法:

-- 检查字段是否存在
SHOW COLUMNS FROM asset_parking LIKE 'principal';

-- 如果不存在,单独添加
ALTER TABLE asset_parking ADD COLUMN principal varchar(50) DEFAULT NULL COMMENT '公司负责人' AFTER name;

Q2: Nacos 连接不上?

检查 Nacos 容器状态:

docker ps | grep nacos
docker logs <nacos_container_id>

Q3: 数据库连接失败?

检查 MySQL 容器状态:

docker ps | grep mysql
docker logs oneos-mysql

创建时间: 2026-03-12 01:40
预计时间: 10-15 分钟
难度: 中等