Files
oneos-backend/yudao-module-asset/SUPPLIER_MANAGEMENT_SUMMARY.md
kkfluous 43f2f054e9 feat: 实现供应商管理模块
- 新增供应商管理功能
  - 数据库表:asset_supplier(27个字段)
  - 基本信息:供应商编码、名称、类型、合作状态等
  - 开票信息:税号、开票地址、账号、开户行等
  - 完整的 CRUD 接口

- 后端代码
  - Controller/Service/Mapper/VO/DO 完整实现
  - 支持多条件分页查询
  - 字段验证(手机号、邮箱格式)
  - 供应商编码唯一性约束

- API 接口
  - POST /asset/supplier/create - 创建供应商
  - PUT /asset/supplier/update - 更新供应商
  - DELETE /asset/supplier/delete - 删除供应商
  - GET /asset/supplier/get - 获取供应商详情
  - GET /asset/supplier/page - 分页查询供应商

- 查询功能
  - 供应商编码精确查询
  - 合作状态多选筛选
  - 供应商名称模糊查询
  - 供应商类型多选筛选
  - 区域多选筛选
  - 城市精确查询
  - 创建者筛选

- 菜单和权限
  - 供应商管理菜单
  - 5个按钮权限(查询、创建、更新、删除、导出)

- 文档
  - 供应商管理模块开发总结
  - 数据库初始化脚本
2026-03-12 21:09:06 +08:00

8.9 KiB
Raw Blame History

供应商管理模块开发总结

📋 需求来源

根据 ONE-OS 前端原型 /Users/kkfluous/Projects/ai-coding/ln-oneos/ONE-OS/web端/业务管理/供应商管理*.jsx 进行后端设计开发。

🎯 功能概述

供应商管理模块用于管理企业的各类供应商信息,包括加氢站、充电站、维修站、保险公司、备件供应商等。

核心功能

  • 供应商列表查询(支持多条件筛选)
  • 供应商新增
  • 供应商编辑
  • 供应商查看
  • 供应商删除
  • 🔲 供应商导入(待实现)
  • 🔲 供应商导出(待实现)

📊 数据模型

供应商信息表 (asset_supplier)

基本信息

字段 类型 说明 必填
id BIGINT 主键ID
supplier_code VARCHAR(50) 供应商编码
coop_status VARCHAR(20) 合作状态
supplier_name VARCHAR(100) 供应商名称
type VARCHAR(50) 供应商类型
province VARCHAR(50) 省份
city VARCHAR(50) 城市
address VARCHAR(255) 详细地址
region VARCHAR(20) 区域
contact VARCHAR(50) 联系人
contact_mobile VARCHAR(20) 联系手机
contact_phone VARCHAR(50) 联系电话
email VARCHAR(100) 邮箱
credit_code_or_id VARCHAR(100) 统一社会信用代码/身份证号
remark VARCHAR(500) 备注

开票信息

字段 类型 说明
tax_id VARCHAR(100) 税号
invoice_address VARCHAR(255) 开票地址
invoice_phone VARCHAR(50) 开票电话
account VARCHAR(100) 账号
opening_bank VARCHAR(200) 开户行
mailing_address VARCHAR(255) 邮寄地址

审计字段

字段 类型 说明
creator VARCHAR(64) 创建者
create_time DATETIME 创建时间
updater VARCHAR(64) 更新者
update_time DATETIME 更新时间
deleted BIT(1) 是否删除
tenant_id BIGINT 租户编号

索引设计

  • PRIMARY KEY: id
  • UNIQUE KEY: uk_supplier_code (supplier_code, deleted)
  • INDEX: idx_supplier_name (supplier_name)
  • INDEX: idx_coop_status (coop_status)
  • INDEX: idx_type (type)
  • INDEX: idx_region (region)
  • INDEX: idx_city (city)
  • INDEX: idx_create_time (create_time)
  • INDEX: idx_tenant_id (tenant_id)

🏗️ 代码结构

后端文件清单

yudao-module-asset/yudao-module-asset-server/
├── src/main/java/cn/iocoder/yudao/module/asset/
│   ├── controller/admin/supplier/
│   │   ├── SupplierController.java          # 控制器
│   │   └── vo/
│   │       ├── SupplierBaseVO.java          # 基础 VO
│   │       ├── SupplierSaveReqVO.java       # 创建/更新 Request VO
│   │       ├── SupplierRespVO.java          # 响应 VO
│   │       └── SupplierPageReqVO.java       # 分页查询 Request VO
│   ├── service/supplier/
│   │   ├── SupplierService.java             # Service 接口
│   │   └── SupplierServiceImpl.java         # Service 实现
│   ├── convert/supplier/
│   │   └── SupplierConvert.java             # 对象转换
│   ├── dal/
│   │   ├── dataobject/supplier/
│   │   │   └── SupplierDO.java              # 数据对象
│   │   └── mysql/supplier/
│   │       └── SupplierMapper.java          # Mapper
│   └── enums/
│       └── ErrorCodeConstants.java          # 错误码(已更新)
└── sql/mysql/
    └── supplier.sql                          # 数据库脚本

🔌 API 接口

基础路径

/asset/supplier

接口列表

1. 创建供应商

POST /asset/supplier/create
权限: asset:supplier:create

Request Body

{
  "supplierCode": "GYS-2025-001",
  "coopStatus": "已合作",
  "supplierName": "嘉兴某某加氢站",
  "type": "加氢站",
  "province": "浙江省",
  "city": "嘉兴市",
  "address": "浙江省嘉兴市南湖区科技大道1号",
  "region": "华东",
  "contact": "张三",
  "contactMobile": "13800138001",
  "contactPhone": "0571-88888888",
  "email": "zhangsan@example.com",
  "creditCodeOrId": "91330400MA2XXXXX1",
  "remark": "",
  "taxId": "91330400MA2XXXXX1",
  "invoiceAddress": "浙江省嘉兴市南湖区科技大道1号",
  "invoicePhone": "0571-88888888",
  "account": "6222021234567890123",
  "openingBank": "中国工商银行嘉兴分行",
  "mailingAddress": "浙江省嘉兴市南湖区科技大道1号"
}

Response

{
  "code": 0,
  "data": 1,
  "msg": "操作成功"
}

2. 更新供应商

PUT /asset/supplier/update
权限: asset:supplier:update

Request Body

{
  "id": 1,
  "supplierCode": "GYS-2025-001",
  "coopStatus": "已合作",
  "supplierName": "嘉兴某某加氢站",
  ...
}

3. 删除供应商

DELETE /asset/supplier/delete?id=1
权限: asset:supplier:delete

4. 获取供应商详情

GET /asset/supplier/get?id=1
权限: asset:supplier:query

Response

{
  "code": 0,
  "data": {
    "id": 1,
    "supplierCode": "GYS-2025-001",
    "coopStatus": "已合作",
    "supplierName": "嘉兴某某加氢站",
    "type": "加氢站",
    "province": "浙江省",
    "city": "嘉兴市",
    "address": "浙江省嘉兴市南湖区科技大道1号",
    "region": "华东",
    "contact": "张三",
    "contactMobile": "13800138001",
    "contactPhone": "0571-88888888",
    "email": "zhangsan@example.com",
    "creditCodeOrId": "91330400MA2XXXXX1",
    "remark": "",
    "taxId": "91330400MA2XXXXX1",
    "invoiceAddress": "浙江省嘉兴市南湖区科技大道1号",
    "invoicePhone": "0571-88888888",
    "account": "6222021234567890123",
    "openingBank": "中国工商银行嘉兴分行",
    "mailingAddress": "浙江省嘉兴市南湖区科技大道1号",
    "creator": "admin",
    "createTime": "2025-01-10T09:30:00",
    "updater": "admin",
    "updateTime": "2025-01-10T09:30:00"
  },
  "msg": "操作成功"
}

5. 分页查询供应商

GET /asset/supplier/page
权限: asset:supplier:query

Query Parameters

  • pageNo: 页码(默认 1
  • pageSize: 每页数量(默认 10
  • supplierCode: 供应商编码(精确匹配)
  • coopStatus: 合作状态列表(多选)
  • supplierName: 供应商名称(模糊查询)
  • type: 供应商类型列表(多选)
  • region: 区域列表(多选)
  • city: 城市(精确匹配)
  • creator: 创建者(精确匹配)

Response

{
  "code": 0,
  "data": {
    "list": [...],
    "total": 100
  },
  "msg": "操作成功"
}

📚 字典数据

合作状态 (coop_status)

  • 已合作
  • 终止合作
  • 洽谈中
  • 合约过期

供应商类型 (type)

  • 备件供应商
  • 保险公司
  • 加氢站
  • 充电站
  • 维修站
  • 救援车队
  • 整车厂
  • 其他

区域 (region)

  • 华北
  • 华东
  • 华南
  • 华中
  • 东北
  • 西南
  • 西北

已完成工作

1. 数据库设计

  • 创建 asset_supplier
  • 设计合理的索引
  • 添加菜单和权限配置

2. 后端代码

  • DO (Data Object)
  • Mapper
  • VO (View Object)
  • Convert (对象转换)
  • Service 接口和实现
  • Controller
  • 错误码常量

3. 编译验证

  • Maven 编译通过
  • 无语法错误

4. 数据库初始化

  • 供应商表创建成功27 个字段)
  • 菜单创建成功ID: 5062
  • 5 个按钮权限创建成功

🔲 待完成工作

1. 导入导出功能

  • 🔲 Excel 导入模板设计
  • 🔲 Excel 导入功能实现
  • 🔲 Excel 导出功能实现

2. 数据字典配置

  • 🔲 在系统字典中配置合作状态
  • 🔲 在系统字典中配置供应商类型

3. 前端开发

  • 🔲 供应商列表页面
  • 🔲 供应商新增页面
  • 🔲 供应商编辑页面
  • 🔲 供应商查看页面

4. 测试

  • 🔲 单元测试
  • 🔲 集成测试
  • 🔲 API 接口测试

🎯 使用说明

启动服务

  1. 确保数据库已初始化
  2. 启动 yudao-server 应用
  3. 访问 Swagger 文档: http://localhost:48080/doc.html

API 测试

使用 Postman 或 Swagger UI 测试接口:

  1. 先登录获取 token
  2. 在请求头中添加 Authorization: Bearer {token}
  3. 调用供应商管理接口

📝 注意事项

  1. 供应商编码唯一性: supplier_code 字段有唯一索引,不能重复
  2. 手机号格式验证: 使用正则表达式验证手机号格式
  3. 邮箱格式验证: 使用 @Email 注解验证邮箱格式
  4. 软删除: 使用 deleted 字段实现软删除,不会物理删除数据
  5. 多租户: 支持多租户隔离,通过 tenant_id 字段区分

🔗 相关模块

  • 客户管理模块 (Customer)
  • 车辆管理模块 (Vehicle)
  • 停车场管理模块 (Parking)
  • 车型参数管理模块 (VehicleModel)

开发日期: 2026-03-12 开发人员: AI Assistant 版本: v1.0.0