数据模型设计文档¶
更新日期:2026-01-21 版本:v7
一、核心设计理念¶
数据粒度原则¶
SalePlan (销售计划)
↓ 一条记录 = 一个订单(多台设备)
Certificate (合格证批次)
↓ 一条记录 = 一个批次(多台设备)
PrintLog (打印日志/铭牌刻印)
↓ 一条记录 = 单台设备(展开后一台一条)
Access (铭牌刻印系统)
↓ 读取 PrintLog 中需要刻印的单台记录
为什么这样设计?¶
层级 |
表 |
粒度 |
用途 |
|---|---|---|---|
订单层 |
SalePlan |
一个订单 |
销售计划管理、合同跟踪 |
批次层 |
Certificate |
一个批次(多台) |
合格证生成、批次打印 |
设备层 |
PrintLog |
单台设备 |
铭牌刻印、追溯 |
系统层 |
Access |
单台设备 |
旧系统兼容 |
二、表结构说明¶
2.1 SalePlan(销售计划表)¶
职责:存储从 Excel 导入的原始销售计划数据,按订单粒度管理。
字段 |
类型 |
说明 |
|---|---|---|
id |
INTEGER |
主键 |
unique_key |
TEXT |
唯一键(用于去重) |
contract_no |
TEXT |
合同编号 |
sales_order_no |
TEXT |
销售订单号 |
production_order_no |
TEXT |
生产令号 |
plan_date |
TEXT |
计划日期 |
customer |
TEXT |
客户 |
project_name |
TEXT |
项目名称 |
product_name |
TEXT |
产品名称 |
product_model |
TEXT |
产品型号 |
product_spec |
TEXT |
规格(口径) |
quantity |
INTEGER |
数量(总台数) |
unit_price |
REAL |
单价 |
total_price |
REAL |
总价 |
business_dept |
TEXT |
业务部门 |
supply_type |
TEXT |
供应类型 |
execution_status |
TEXT |
执行状态 |
production_status |
TEXT |
生产状态 |
关键索引:
索引名 |
字段 |
用途 |
|---|---|---|
idx_sale_plan_production_order_no |
production_order_no |
生产令号查询 |
idx_sale_plan_sales_order_no |
sales_order_no |
销售订单查询 |
idx_sale_plan_product_model |
product_model |
产品型号查询 |
idx_sale_plan_customer |
customer |
客户查询 |
idx_sale_plan_plan_date |
plan_date |
日期范围查询 |
2.2 Certificate(合格证批次表)¶
职责:存储生成的合格证批次记录,按批次粒度管理。
字段 |
类型 |
说明 |
|---|---|---|
id |
INTEGER |
主键 |
sale_plan_id |
INTEGER |
关联销售计划ID |
unique_key |
TEXT |
唯一键(继承自SalePlan) |
product_code_prefix |
TEXT |
产品编号前缀(默认"V") |
product_code_ym |
TEXT |
产品编号年月(如"202606") |
product_code_seq_start |
INTEGER |
起始序号 |
product_code_seq_end |
INTEGER |
结束序号 |
product_code_range |
TEXT |
产品编号范围(如"V202606121---140") |
quantity |
INTEGER |
批次数量 |
certificate_no |
TEXT |
合格证号 |
issue_date |
TEXT |
发证日期 |
print_status |
TEXT |
打印状态(待打印/已打印) |
engrave_status |
TEXT |
刻章状态(待刻章/已刻章) |
fati_material |
TEXT |
阀体材质 |
fagan_material |
TEXT |
阀杆材质 |
qibijian_material |
TEXT |
启闭件材质 |
working_temp |
TEXT |
工作温度 |
working_medium |
TEXT |
工作介质 |
test_standard |
TEXT |
检验标准 |
关键索引:
索引名 |
字段 |
用途 |
|---|---|---|
idx_certificate_certificate_no |
certificate_no |
合格证号查询 |
idx_certificate_print_status |
print_status |
打印状态筛选 |
idx_certificate_sale_plan_id |
sale_plan_id |
关联查询 |
idx_certificate_product_model |
product_model |
产品型号查询 |
2.3 PrintLog(打印日志表)¶
职责:存储单台设备的打印记录,对齐 VBA Access SignTb 的 51 个字段。
字段 |
类型 |
说明 |
|---|---|---|
id |
INTEGER |
主键 |
certificate_id |
INTEGER |
关联合格证批次ID |
SN |
TEXT |
单台出厂编号 |
ChanPinMingCheng |
TEXT |
产品名称 |
ChanPinXingHao |
TEXT |
产品型号 |
DN |
TEXT |
口径 |
PN |
TEXT |
压力 |
ShiYongJieZhi |
TEXT |
适用介质 |
ShiYongWenDu |
TEXT |
适用温度 |
FaTiCaiZhi |
TEXT |
阀体材质 |
FaGanCaiZhi |
TEXT |
阀杆材质 |
QiBiJianCaiZhi |
TEXT |
启闭件材质 |
Sign_XingHao |
BOOLEAN |
是否刻型号 |
Sign_DN |
BOOLEAN |
是否刻口径 |
Sign_PN |
BOOLEAN |
是否刻压力 |
Sign_SN |
BOOLEAN |
是否刻编号 |
status |
TEXT |
打印状态 |
print_time |
DATETIME |
打印时间 |
printer_name |
TEXT |
打印机名称 |
三、数据流转¶
3.1 流程图¶
┌─────────────────────────────────────────────────────────────────┐
│ Excel 导入 │
│ 销售计划.xlsx(一个订单多台) │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ SalePlan 表(计划) │
│ 一条记录 = 一个订单 │
│ • quantity = 50 │
└─────────────────────────────────────────────────────────────────┘
↓ 根据缓急生成
┌─────────────────────────────────────────────────────────────────┐
│ Certificate 表(合格证批次) │
│ 一条记录 = 一个批次(多台) │
│ • product_code_range = "V202606121---140" │
│ • quantity = 20 │
│ • print_status = "待打印" │
└─────────────────────────────────────────────────────────────────┘
↓ 打印时展开
┌─────────────────────────────────────────────────────────────────┐
│ PrintLog 表(打印日志) │
│ 一条记录 = 单台设备 │
│ • SN = "V202606121"(第1台) │
│ • SN = "V202606122"(第2台) │
│ • ... │
└─────────────────────────────────────────────────────────────────┘
↓ 同步(可选)
┌─────────────────────────────────────────────────────────────────┐
│ Access 数据库(铭牌刻印系统) │
│ 读取 PrintLog 中需要刻印的记录 │
└─────────────────────────────────────────────────────────────────┘
3.2 代码示例¶
# 1. 根据缓急生成 Certificate 批次
certificates = batch_service.generate_batch_by_urgency(
plan_ids, max_batch_size=50
)
# 2. 打印时展开为 PrintLog
print_logs = print_service.print_certificate_batch(
certificate_id, printer_name
)
# 3. 同步到 Access(可选)
sync_service.sync_to_access(print_logs)
四、查询示例¶
4.1 按打印状态统计¶
SELECT
print_status AS 打印状态,
COUNT(*) AS 批次数量,
SUM(quantity) AS 总台数
FROM certificates
GROUP BY print_status;
4.2 查询待打印的合格证¶
SELECT
certificate_no AS 合格证号,
customer AS 客户,
product_model AS 产品型号,
quantity AS 数量,
product_code_range AS 产品编号范围
FROM certificates
WHERE print_status = '待打印';
4.3 关联销售计划查询¶
SELECT
c.certificate_no AS 合格证号,
c.print_status AS 打印状态,
sp.contract_no AS 合同编号,
sp.customer AS 客户
FROM certificates c
LEFT JOIN sale_plans sp ON c.sale_plan_id = sp.id;
五、术语表¶
术语 |
说明 |
|---|---|
订单粒度 |
一个销售计划订单(可包含多台设备) |
批次粒度 |
一次生成的合格证批次(可包含多台设备) |
设备粒度 |
单台设备(最细粒度,用于铭牌刻印) |
产品编号范围 |
如 |
合格证号 |
批次合格证的编号,如 |
unique_key |
唯一标识,用于去重和关联 |
六、变更历史¶
版本 |
日期 |
变更内容 |
|---|---|---|
v7 |
2026-01-21 |
初始版本,定义三层数据模型 |