数据流转文档¶
更新日期:2026-01-21
一、完整数据流程¶
阶段 1:导入销售计划¶
项目 |
内容 |
|---|---|
输入 |
Excel 文件(销售计划.xlsx) |
处理 |
解析 Excel → 生成 unique_key → 去重 → 写入 |
输出 |
SalePlan 记录 |
阶段 2:生成合格证批次¶
项目 |
内容 |
|---|---|
输入 |
选中的 SalePlan 记录(按缓急排序) |
处理 |
计算剩余数量 → 按批次分割(≤50台)→ 生成编号范围 |
输出 |
Certificate 记录(一条记录代表一个批次) |
阶段 3:打印合格证¶
项目 |
内容 |
|---|---|
输入 |
选中的 Certificate 记录 |
处理 |
展开编号范围 → 每台生成 PrintLog → 调用打印机 |
输出 |
PrintLog 记录(一台一条) |
阶段 4:同步到 Access(可选)¶
项目 |
内容 |
|---|---|
输入 |
PrintLog 记录 |
处理 |
连接 Access → 写入 SignTb 表 |
输出 |
Access 中的刻印记录 |
二、状态流转¶
Certificate 状态机¶
┌──────────┐ 打印 ┌──────────┐ 刻印 ┌──────────┐
│ 待打印 │ ────────→ │ 已打印 │ ────────→ │ 已刻章 │
└──────────┘ └──────────┘ └──────────┘
PrintLog 状态机¶
┌──────────┐ 打印 ┌──────────┐
│ pending │ ────────→ │ success │
└──────────┘ └──────────┘
│ ↑
↓ 打印失败 │ 重试
┌──────────┐ 重试3次 ┌──────────┐
│ failed │ ──────────→ │ retried │
└──────────┘ └──────────┘
三、编号生成规则¶
产品编号范围格式¶
V + YYYYMM + START + SUFFIX + "---" + END + SUFFIX
示例:V202606121XL---140XL
部分 |
示例 |
说明 |
|---|---|---|
前缀 |
V |
固定为 V |
年月 |
202606 |
4位或6位年月 |
起始序号 |
121 |
起始流水号 |
后缀 |
XL |
可选后缀 |
分隔符 |
--- |
三横线 |
结束序号 |
140 |
结束流水号 |
序号补零规则¶
序号范围 |
格式 |
示例 |
|---|---|---|
< 1000 |
3位补零 |
001 → 999 |
≥ 1000 |
4位原样 |
1000 → 1000 |
四、关键接口¶
CertificateBatchService¶
class CertificateBatchService:
"""合格证批次生成服务"""
def generate_batch_by_urgency(
self,
sale_plan_ids: List[int],
max_batch_size: int = 50
) -> List[Certificate]:
"""
根据缓急生成合格证批次
Args:
sale_plan_ids: 销售计划ID列表(已按缓急排序)
max_batch_size: 单个批次最大数量
Returns:
生成的 Certificate 记录列表
"""
pass
def _get_next_seq_range(self, size: int) -> Tuple[int, int]:
"""获取下一个可用的序号范围"""
pass
CertificatePrintService¶
class CertificatePrintService:
"""合格证打印服务"""
def print_certificate_batch(
self,
certificate_id: int,
printer_name: str = None
) -> List[PrintLog]:
"""
打印批次合格证,生成 PrintLog
Args:
certificate_id: 合格证批次ID
printer_name: 打印机名称
Returns:
生成的 PrintLog 记录列表(每台一条)
"""
pass
def _sync_to_access(self, print_logs: List[PrintLog]) -> None:
"""同步到 Access 铭牌刻印系统"""
pass
AutoNumberService¶
class AutoNumberService:
"""自动编号服务"""
def generate_numbers(self, session: Session, sale_plan_ids: List[int]) -> int:
"""为销售计划批量生成产品编号"""
pass
五、错误处理¶
场景 |
处理方式 |
|---|---|
打印机缺纸 |
弹窗提示,等待用户补充纸张 |
打印机离线 |
弹窗提示,检查连接 |
打印失败 |
自动重试最多3次,间隔2秒 |
Access 连接失败 |
记录日志,不阻塞打印流程 |
数据库写入失败 |
事务回滚,记录错误日志 |
六、变更历史¶
版本 |
日期 |
变更内容 |
|---|---|---|
v7 |
2026-01-21 |
初始版本,定义四阶段数据流程 |