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个按钮权限(查询、创建、更新、删除、导出) - 文档 - 供应商管理模块开发总结 - 数据库初始化脚本
This commit is contained in:
353
yudao-module-asset/SUPPLIER_MANAGEMENT_SUMMARY.md
Normal file
353
yudao-module-asset/SUPPLIER_MANAGEMENT_SUMMARY.md
Normal file
@@ -0,0 +1,353 @@
|
||||
# 供应商管理模块开发总结
|
||||
|
||||
## 📋 需求来源
|
||||
|
||||
根据 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**
|
||||
```json
|
||||
{
|
||||
"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**
|
||||
```json
|
||||
{
|
||||
"code": 0,
|
||||
"data": 1,
|
||||
"msg": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
#### 2. 更新供应商
|
||||
```
|
||||
PUT /asset/supplier/update
|
||||
权限: asset:supplier:update
|
||||
```
|
||||
|
||||
**Request Body**
|
||||
```json
|
||||
{
|
||||
"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**
|
||||
```json
|
||||
{
|
||||
"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**
|
||||
```json
|
||||
{
|
||||
"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
|
||||
Reference in New Issue
Block a user