数据模型设计文档

更新日期: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;

五、术语表

术语

说明

订单粒度

一个销售计划订单(可包含多台设备)

批次粒度

一次生成的合格证批次(可包含多台设备)

设备粒度

单台设备(最细粒度,用于铭牌刻印)

产品编号范围

V202606121---140,表示起始121到结束140

合格证号

批次合格证的编号,如 HG-202606-001

unique_key

唯一标识,用于去重和关联


六、变更历史

版本

日期

变更内容

v7

2026-01-21

初始版本,定义三层数据模型