上传源代码版本

This commit is contained in:
Im-Jenisson
2026-06-01 16:30:29 +08:00
commit b2a9b7d3c2
462 changed files with 104365 additions and 0 deletions

270
袋牌模块设计文档.md Normal file
View File

@@ -0,0 +1,270 @@
# 袋牌模块设计文档
## 1. 模块概述
袋牌模块是一个用于在业务流程中对"袋牌"进行统一管理的系统组件,包括袋牌的生成、启用、停用,以及袋牌与尾程运单号的关联,以支持分拣、装箱、交接、追踪等业务场景。
### 1.1 设计目标
- 提供统一的袋牌生成能力,支持单个或批量生成
- 支持袋牌的生命周期管理(生成、打开、关闭)
- 支持袋牌与尾程运单号的关联
- 确保袋牌的唯一性和完整性
- 保持与系统其他模块的一致性
### 1.2 适用场景
- 物流分拣中心的袋牌管理
- 仓库装箱操作中的袋牌追踪
- 运输过程中的袋牌交接
- 尾程配送的袋牌关联
## 2. 系统架构
### 2.1 架构层次
袋牌模块采用分层架构设计,与系统其他模块保持一致:
```
┌─────────────────────┐
│ CONTROLLER层 │ // 控制器层处理HTTP请求
├─────────────────────┤
│ BLL层 │ // 业务逻辑层,实现核心业务逻辑
├─────────────────────┤
│ DAL层 │ // 数据访问层,处理数据库操作
├─────────────────────┤
│ MDL层 │ // 数据模型层,定义数据结构
└─────────────────────┘
```
### 2.2 核心组件
| 组件名称 | 所在文件 | 功能描述 |
|---------|---------|----------|
| BagTagEntity | MDL/Models/BagTagEntity.cs | 袋牌实体模型 |
| BagTagWaybillEntity | MDL/Models/BagTagWaybillEntity.cs | 袋牌与尾程运单号关联实体模型 |
| IBagTagRepository | DAL/Interfaces/IBagTagRepository.cs | 袋牌数据访问接口 |
| BagTagRepository | DAL/Repositories/BagTagRepository.cs | 袋牌数据访问实现 |
| IBagTagService | BLL/Interfaces/IBagTagService.cs | 袋牌业务逻辑接口 |
| BagTagService | BLL/Services/BagTagService.cs | 袋牌业务逻辑实现 |
| BagTagController | CONTROLLER/Controllers/BagTagController.cs | 袋牌API控制器 |
## 3. 数据模型设计
### 3.1 袋牌实体BagTagEntity
| 字段名称 | 数据类型 | 长度 | 约束 | 描述 |
|---------|---------|------|------|------|
| Id | int | - | 主键,自增 | 袋牌ID |
| TagNumber | string | 100 | 非空,唯一 | 袋牌号 |
| ChannelName | string | 50 | 非空 | 渠道商名称 |
| Status | string | 20 | 默认"Generated" | 状态Generated, Opened, Closed |
| CreatedAt | DateTime | - | 默认当前时间 | 创建时间 |
| OpenedAt | DateTime | - | 可空 | 打开时间 |
| ClosedAt | DateTime | - | 可空 | 关闭时间 |
### 3.2 袋牌与尾程运单号关联实体BagTagWaybillEntity
| 字段名称 | 数据类型 | 长度 | 约束 | 描述 |
|---------|---------|------|------|------|
| Id | int | - | 主键,自增 | 关联ID |
| TagNumber | string | 100 | 非空 | 袋牌号 |
| FinalMileTrackingNumber | string | 100 | 非空 | 尾程运单号 |
| CreatedAt | DateTime | - | 默认当前时间 | 创建时间 |
| Creator | string | 50 | 非空 | 创建人 |
| Remark | string | 200 | 可空 | 备注 |
### 3.3 请求模型BagTagRequest
| 模型名称 | 字段名称 | 数据类型 | 描述 |
|---------|---------|---------|------|
| GenerateBagTagsRequest | ChannelName | string | 渠道商名称 |
| GenerateBagTagsRequest | Count | int | 生成数量默认1 |
| OpenBagTagRequest | TagNumber | string | 袋牌号 |
| CloseBagTagRequest | TagNumber | string | 袋牌号 |
| AssociateWaybillRequest | TagNumber | string | 袋牌号 |
| AssociateWaybillRequest | FinalMileTrackingNumber | string | 尾程运单号 |
## 4. 业务逻辑设计
### 4.1 袋牌生成
- **功能**:根据渠道商名称和数量生成袋牌号
- **流程**
1. 接收生成请求(渠道商名称、数量)
2. 生成时间戳(精确到秒)
3. 循环生成指定数量的袋牌号
4. 每个袋牌号由渠道商名称(大写)+ 时间戳 + 序号组成
5. 将生成的袋牌保存到数据库
6. 返回生成的袋牌号列表
### 4.2 袋牌打开
- **功能**:将袋牌状态设置为"打开"
- **流程**
1. 接收打开请求(袋牌号)
2. 验证袋牌是否存在
3. 验证袋牌状态是否为"Generated"
4. 更新袋牌状态为"Opened"
5. 记录打开时间
6. 返回操作结果
### 4.3 袋牌关闭
- **功能**:将袋牌状态设置为"关闭"
- **流程**
1. 接收关闭请求(袋牌号)
2. 验证袋牌是否存在
3. 验证袋牌状态是否为"Opened"
4. 更新袋牌状态为"Closed"
5. 记录关闭时间
6. 返回操作结果
### 4.4 尾程运单号关联
- **功能**:将尾程运单号与袋牌建立关联
- **流程**
1. 接收关联请求(袋牌号、尾程运单号)
2. 验证袋牌是否存在
3. 验证袋牌状态是否为"Opened"
4. 创建关联记录
5. 保存到数据库
6. 返回操作结果
## 5. 数据库设计
### 5.1 袋牌表bag_tags
```sql
CREATE TABLE IF NOT EXISTS `bag_tags` (
`Id` INT(11) NOT NULL AUTO_INCREMENT,
`TagNumber` VARCHAR(100) NOT NULL COMMENT '袋牌号',
`ChannelName` VARCHAR(50) NOT NULL COMMENT '渠道商名称',
`Status` VARCHAR(20) DEFAULT 'Generated' COMMENT '状态Generated, Opened, Closed',
`CreatedAt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`OpenedAt` DATETIME DEFAULT NULL COMMENT '打开时间',
`ClosedAt` DATETIME DEFAULT NULL COMMENT '关闭时间',
PRIMARY KEY (`Id`),
UNIQUE KEY `UK_TagNumber` (`TagNumber`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='袋牌表';
```
### 5.2 袋牌与尾程运单号关联表bag_tag_waybills
```sql
CREATE TABLE IF NOT EXISTS `bag_tag_waybills` (
`Id` INT(11) NOT NULL AUTO_INCREMENT,
`TagNumber` VARCHAR(100) NOT NULL COMMENT '袋牌号',
`FinalMileTrackingNumber` VARCHAR(100) NOT NULL COMMENT '尾程运单号',
`CreatedAt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`Creator` VARCHAR(50) NOT NULL COMMENT '创建人',
`Remark` VARCHAR(200) NULL COMMENT '备注',
PRIMARY KEY (`Id`),
KEY `IX_TagNumber` (`TagNumber`),
KEY `IX_FinalMileTrackingNumber` (`FinalMileTrackingNumber`),
CONSTRAINT `FK_bag_tag_waybills_bag_tags` FOREIGN KEY (`TagNumber`) REFERENCES `bag_tags` (`TagNumber`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='袋牌与尾程运单号关联表';
```
## 6. 实现细节
### 6.1 技术栈
- 语言C#
- 框架ASP.NET Core
- 数据库MySQL
- ORMSqlSugar
- 依赖注入Microsoft.Extensions.DependencyInjection
### 6.2 核心实现
#### 6.2.1 袋牌生成实现
袋牌生成采用"渠道商名称+时间戳+序号"的格式,确保袋牌号的唯一性:
```csharp
var timestamp = DateTime.Now.ToString("yyyyMMddHHmmss");
var serialNumber = i.ToString("D4");
var tagNumber = $"{channelName.ToUpper()}{timestamp}{serialNumber}";
```
#### 6.2.2 状态管理实现
袋牌状态流转:
- 生成时:状态为"Generated"
- 打开后:状态变为"Opened",记录打开时间
- 关闭后:状态变为"Closed",记录关闭时间
#### 6.2.3 关联逻辑实现
只有状态为"Opened"的袋牌才能关联尾程运单号,确保业务逻辑的正确性:
```csharp
if (tag.Status != "Opened")
{
return false;
}
```
### 6.3 依赖注入配置
袋牌模块的依赖注入配置在Program.cs中
```csharp
builder.Services.AddScoped<IBagTagRepository, BagTagRepository>();
builder.Services.AddScoped<IBagTagService, BagTagService>();
```
## 7. 扩展性设计
### 7.1 数据模型扩展
- 支持在BagTagEntity中添加自定义字段
- 支持在BagTagWaybillEntity中添加关联信息
### 7.2 业务逻辑扩展
- 支持添加新的袋牌状态
- 支持添加袋牌的额外属性和验证规则
- 支持扩展袋牌生成的命名规则
### 7.3 接口扩展
- 支持添加新的API接口
- 支持添加袋牌的批量操作接口
- 支持添加袋牌的查询和统计接口
## 8. 代码结构
```
src/
├── MDL/
│ └── Models/
│ ├── BagTagEntity.cs // 袋牌实体模型
│ ├── BagTagWaybillEntity.cs // 袋牌与尾程运单号关联实体模型
│ └── BagTagRequest.cs // 袋牌相关的请求模型
├── DAL/
│ ├── Interfaces/
│ │ └── IBagTagRepository.cs // 袋牌数据访问接口
│ └── Repositories/
│ └── BagTagRepository.cs // 袋牌数据访问实现
├── BLL/
│ ├── Interfaces/
│ │ └── IBagTagService.cs // 袋牌业务逻辑接口
│ └── Services/
│ └── BagTagService.cs // 袋牌业务逻辑实现
└── CONTROLLER/
└── Controllers/
└── BagTagController.cs // 袋牌API控制器
```
## 9. 总结
袋牌模块通过分层架构设计,实现了袋牌的全生命周期管理和与尾程运单号的关联功能。该模块设计合理、结构清晰、扩展性强,能够满足物流业务中对袋牌管理的各种需求。
- **数据一致性**:与系统其他模块保持一致的命名规范和数据结构
- **业务完整性**:实现了袋牌从生成到关闭的完整生命周期管理
- **系统集成性**:与系统其他模块无缝集成,共享相同的技术栈和架构
- **可扩展性**:设计考虑了未来的功能扩展和业务变化
袋牌模块的实现为物流业务中的袋牌管理提供了一个可靠、高效的解决方案,支持各种业务场景的需求。