合格证清单表 → SalePlan 模型 字段映射分析

一、数据来源

  • 文件: temp/excel/202603合格证清单表.xlsx

  • 工作表: 合格证_2026

  • 总行数: 2516(含表头)

  • 表头行: 第1行

  • 总列数: 150

二、需要排除的行

以下关键词匹配的行将被跳过(共约845行):

  • 小计合计 - 汇总行

  • 年度计划 - 标题/说明行

  • 查询无重复编号 - 辅助信息行

  • 最后刷新时间 - 元数据行

  • 自产执行状态未发货 - 状态标签行

  • 蓝字代表黄色代表蓝色代表 - 图例行

  • 是否发货重点 - 说明行

有效数据行: 1670

三、动态列检测结果

通过检查1670条有效数据行,共有 87 列有数据,63 列完全为空。

3.1 核心数据区(前43列)

Excel列号

Excel表头

有效示例值

说明

是否导入模型

1

订货日期

2025-11-28 00:00:00

合格证清单的订货日期(datetime)

✅ 导入 plan_date(备选,列33更精确优先)

2

订货单位

湖北海岸山科技有限公司

合格证清单的客户名称

✅ 导入 customer(备选,列34更精确优先)

3

产品名称

减压阀

合格证实际打印的产品名称,与销售计划导出名称可能不一致

✅ 导入 cert_product_name(合格证打印版)

4

产品型号

ZJHP-40P

合格证实际打印的产品型号,与销售计划导出型号可能不一致

✅ 导入 cert_product_model(合格证打印版)

5

产品规格

DN25

合格证实际打印的规格,与销售计划导出规格可能不一致

✅ 导入 cert_product_spec(合格证打印版)

6

数量

1

需要打印的合格证数量(int)

✅ 导入 quantity

7

产品编号

V2512115Y-115Y

出厂产品编号,编号规则:V+YYMM+流水号+产品类型后缀,有起止编号区间

✅ 导入 product_code

8

工作温度℃

100

合格证打印的温度,打印后从模板回填

❌ 不入模型,仅回填到certificate_remarks

9

发证日期

2026-02-02 14:55:13

合格证逐个打印完毕后最后一台的时间,回填到excel

❌ 不入模型,可存certificate_remarks

10

生产令号

编号:027

这是同一订单在销售计划中的原始顺序号,不是生产令号。真正的生产令号在列71(子项目)

✅ 导入 production_order_no(作为顺序追踪号)

11

供货商

★外购

供货方式:生产(无后缀)、外购(Y)、维修类(XL)、供应(G)

✅ 导入 supply_type(需解析前缀)

12

备注

(长文本)

合格证历史记录+备注

❌ 不入模型,存certificate_remarks

13

装配试压人员/是否已发货

2026 2月 已发货

发货状态,可通过超链接查询最后出现的销售计划表,根据字体色/背景色判断是否发货

✅ 导入 execution_status(需解析)

14

工作介质

水等

合格证打印后从模板回填

❌ 不入模型,存certificate_remarks

15

试压标准

GB/T 4213-2008

试压标准号,打印后从模板回填

✅ 导入 test_standard

16

技术要求

(长文本)

多字段拼接的复合文本(含设备位号/子项目/产品编号/种类/重量等),用于方便查看,实际导入意义不大

❌ 不导入,各字段已单独录入

17

备注

(空)

从销售计划读取的原始备注

❌ 不导入(通常为空)

18

营销部要货计划单号

202511_No0260

格式为YYYYMM_No+四位计划单号,销售模型中仅存YYMM_四位计划单号

✅ 导入 plan_no(需去掉前缀年份和No)

19

试压报告超链接存放地址列1

(文件路径)

超链接地址

❌ 不导入

20

试压报告超链接存放地址列2

(文件路径)

超链接地址

❌ 不导入

21

质保书超链接存放地址列1

(文件路径)

超链接地址

❌ 不导入

23

质保书超链接存放地址列3

(文件路径)

超链接地址

❌ 不导入

24

销售计划行号

3136

销售计划的原始行号(int)

✅ 导入 sale_plan_row(辅助追踪)

25

是否发货重点

(空)

标记列

❌ 不导入(通常为空)

26

黄色代表外购

自产

自产/外购标记

✅ 辅助判断 supply_type

27

蓝色代表已回

(空)

外购返回标记

❌ 不导入(通常为空)

28

蓝字代表已发

已发货

基本可认定是否发货

✅ 辅助判断 execution_status

29

导入时间

最后刷新时间:2026-02-11

数据刷新时间

❌ 不导入(元数据)

30

项目名称

105所核电项目

项目名称

✅ 导入 project_name

31

项目单位

(空)

项目单位

✅ 导入 project_unit

32

种类

(空)

种类

✅ 导入 category

33

订货日期(重复)

2025-11-28

销售计划导出的原始数据备份-订货日期,数据更精确

✅ 导入 plan_date(优先于列1)

34

订 货 单 位(重复)

湖北海岸山科技有限公司

销售计划导出的原始数据备份-订货单位,数据更精确

✅ 导入 customer(优先于列2)

35

产品名称(重复)

减压阀

销售计划导出的原始数据备份-产品名称,合同原始值

✅ 导入 product_name(合同原始版)

36

产 品 型 号(重复)

ZJHP-40P

销售计划导出的原始数据备份-产品型号,合同原始值

✅ 导入 product_model(合同原始版)

37

规格(重复)

DN25

销售计划导出的原始数据备份-规格,合同原始值

✅ 导入 product_spec(合同原始版)

38

数量(重复)

1900-01-01(错误日期)

销售计划导出的原始数据备份-数量,格式异常(数值被错误读为日期)

❌ 不导入(列6已获取,且格式异常)

39

外购产品移交单开单日期

(空)

外购相关

❌ 不导入(多为空白)

40

外购产品移交单号

(空)

外购相关

❌ 不导入(多为空白)

41

计划交货期

2025-12-30

计划交货日期

✅ 导入 planned_delivery_date

43

合同号

HAS-CG-20251102

合同号

✅ 导入 contract_no

3.2 后续有数据列(44-149列)

Excel列号

Excel表头

有效示例值

说明

是否导入模型

44

跟单表入库日期

(空)

跟单相关

❌ 不导入(多为空白)

45

A045

(空)

无效列

❌ 不导入

47

ID_Row

2

行ID

❌ 不导入

48

产品名称

V2512115Y-115Y

另一个产品编号(表头命名有误)

❌ 不导入

49

产品型号3

(空)

第三版产品型号

❌ 不导入

50

产品规格(mm)

1900-03-20(错误日期)

规格,数值被错误读取为日期格式

❌ 不导入

53

阀体材质

【未填写材质】

材质信息,用于制作质保书时读取零件材料牌号

❌ 不导入(多为未填写)

54

阀杆材质

【未填写材质】

材质信息,用于制作质保书时读取零件材料牌号

❌ 不导入(多为未填写)

55

启闭件材质

【未填写材质】

材质信息,用于制作质保书时读取零件材料牌号

❌ 不导入(多为未填写)

63

手轮

(日志记录)

操作日志

❌ 不导入

66

产品位号@销售计划

_编号:0007

产品位号

❌ 不导入(有列70设备位号)

67

业务归口@销售计划

夏磊

业务归口(人员名)

✅ 导入 business_dept

69

技术要求

接管:¢114*16

未拼接的原始技术要求纯文本

✅ 导入 tech_requirements(优先使用此列)

70

设备位号

【空白】

计划日期≥2025-01-01时记录的是销售订单号

✅ 导入 equipment_code(注意语义变化)

71

子项目

【空白】

计划日期≥2025-01-01时记录的是真正的生产令号

✅ 导入 production_order_no(覆盖列10的值)

72

产品编号

_编号:0007

初次导入时用种类+序号拼接的产品编号

❌ 不导入(列7已有)

73

种类

【空白】

销售计划的种类:不计价、来料修复等

✅ 导入 category(备选)

74

重量

序号:0010_0010

按批次给每台产品的序号,考虑了台数

✅ 导入 weight(需解析数字)

75

序号

编号:007

每行的序号,不考虑数量字段台数

❌ 不导入

76-86

subaddress/screentip/...

(超链接相关)

超链接元数据

❌ 不导入

95

修改后的自动编号为:备注

(空)

备注

❌ 不导入

96

A096

(复合信息串)

销售信息某些字段的原始拼接字符串,曾用于回查销售计划表

❌ 不导入(可后期拼接)

97-105

A097~A105

(散列数据)

散列数据

❌ 不导入

118

A118

(空)

未知

❌ 不导入

120

A120

A26R00002

编号

❌ 不导入

121

A121

(空)

未知

❌ 不导入

123-124

A123~A124

(空)

未知

❌ 不导入

149

装配试压人员/是否已发货(重复)

(空)

重复列

❌ 不导入

四、Excel列 → SalePlan模型字段 最终映射

4.1 直接映射

Excel列号

Excel表头

SalePlan模型字段

优先级

说明

1

订货日期

plan_date

1

合格证清单的订货日期(备选,列33优先)

2

订货单位

customer

1

合格证清单的客户名称(备选,列34优先)

3

产品名称

cert_product_name

0

合格证实际打印版(可能与销售计划不一致)

4

产品型号

cert_product_model

0

合格证实际打印版(NOT NULL,跳过空值行)

5

产品规格

cert_product_spec

0

合格证实际打印版

6

数量

quantity

0

需打印的合格证数量

7

产品编号

product_code

0

出厂产品编号(V+YYMM+流水号+后缀)

15

试压标准

test_standard

0

合格证打印后回填

18

营销部要货计划单号

plan_no

1

需解析:去掉前两位年份和"No"

24

销售计划行号

sale_plan_row

2

辅助追踪字段

30

项目名称

project_name

0

项目名称

31

项目单位

project_unit

1

项目单位

32

种类

category

0

种类(首选)

33

订货日期(重复)

plan_date

-1

销售计划原始数据,数据更精确,优先于列1

34

订 货 单 位(重复)

customer

-1

销售计划原始数据,数据更精确,优先于列2

35

产品名称(重复)

product_name

0

销售计划原始产品名称(合同原始版)

36

产 品 型 号(重复)

product_model

0

销售计划原始产品型号(合同原始版)

37

规格(重复)

product_spec

0

销售计划原始规格(合同原始版)

41

计划交货期

planned_delivery_date

0

计划交货日期

43

合同号

contract_no

0

合同号

67

业务归口@销售计划

business_dept

1

业务归口人员

69

技术要求(纯文本)

tech_requirements

0

优先使用此列的纯文本技术要求

70

设备位号

equipment_code

0

2025年后记录的是销售订单号

73

种类

category

2

种类(备选,列32优先)

74

重量

weight

1

需解析数字

4.2 需要特殊处理/条件覆盖的映射

Excel列号

Excel表头

处理方式

目标字段

说明

10

生产令号

直接映射为追踪号

production_order_no

这是销售计划原始顺序号,不是真正的生产令号

71

子项目

覆盖列10的值

production_order_no

真正的生产令号(2025年后有效)

11

供货商

解析前缀映射

supply_type

★外购→外购, ★待图生产→待图生产, ★自产→自产

26

黄色代表外购

辅助判断

supply_type

当列11无有效值时使用

13

装配试压人员/是否已发货

解析状态

execution_status

提取"已发货"/"未发货"

28

蓝字代表已发

辅助判断

execution_status

当列13无有效值时使用

8

工作温度℃

合并到备注

certificate_remarks

格式:"工作温度: {值}℃"

14

工作介质

合并到备注

certificate_remarks

格式:"工作介质: {值}"

9

发证日期

合并到备注

certificate_remarks

格式:"发证日期: {值}"

12

备注

合并到备注

certificate_remarks

格式:"备注: {值}"

4.3 不导入的列分类

类别

列号

原因

超链接地址

19, 20, 21, 23

文件路径超链接

超链接元数据

76-86

subaddress/screentip等

重复列(销售计划备份,格式异常)

38

数量被错误读为日期格式

备用备注

17

通常为空

复合文本拼接

16

多字段拼接文本,各字段已单独录入

辅助标记(常空)

25, 27, 39, 40

多为空白

元数据

29, 47

导入时间、行ID

内部ID/重复信息

48, 49, 50

命名有误或格式异常

材质(未填写)

53, 54, 55

多为"【未填写材质】"

操作日志

63

手轮操作记录

产品位号

66

有列70设备位号

拼接产品编号

72

列7已有正式产品编号

序号(不考虑台数)

75

仅行序号

散列/辅助数据

95, 96, 97-105, 118, 120, 121, 123-124

复合信息串或散列数据

重复列

149

与列13相同

无效/空列

44, 45, 其余未列出的空列

无有效数据

五、小计行排除策略

小计行的特征:

  1. 前几列中某个单元格包含"小计"文字

  2. 大部分列(除了汇总列)为空

  3. 产品型号(第4列)通常为空或为特殊值

排除方法:在读取数据后,按以下规则过滤:

  • 扫描每行前5列,如果任一列包含"小计"/"合计"关键词,跳过该行

  • 同时跳过包含"查询无重复编号"/"最后刷新时间"/"年度计划"等关键词的行

  • 同时跳过产品型号(第4列)为空的行

六、建议的白名单列

基于以上分析,以下是导入 SalePlan 模型时应读取的 Excel 列:

# 直接映射列(列号 → 模型字段)
CERT_LIST_COLUMN_MAPPING = {
    1:  "plan_date",               # 订货日期
    2:  "customer",                # 订货单位
    3:  "product_name",            # 产品名称(合格证打印版)
    4:  "product_model",           # 产品型号(合格证打印版,NOT NULL)
    5:  "product_spec",            # 产品规格(合格证打印版)
    6:  "quantity",                # 数量
    7:  "product_code",            # 产品编号
    10: "production_order_no",     # 销售计划原始顺序号(列71会覆盖)
    15: "test_standard",           # 试压标准
    18: "plan_no",                 # 营销部要货计划单号(需解析)
    24: "sale_plan_row",           # 销售计划行号(辅助)
    30: "project_name",            # 项目名称
    31: "project_unit",            # 项目单位
    32: "category",                # 种类(首选)
    41: "planned_delivery_date",   # 计划交货期
    43: "contract_no",             # 合同号
    67: "business_dept",           # 业务归口
    69: "tech_requirements",       # 技术要求(纯文本,优先使用)
    70: "equipment_code",          # 设备位号(2025年后为销售订单号)
    73: "category_alt",            # 种类(备选)
    74: "weight_raw",              # 重量(需解析数字)
}

# 特殊处理列(需要解析/合并到备注或辅助字段)
SPECIAL_COLUMNS = {
    8:  "working_temp",            # 工作温度 → certificate_remarks
    9:  "cert_issue_date",         # 发证日期 → certificate_remarks
    11: "supply_source",           # 供货商 → supply_type(解析前缀)
    12: "cert_remarks_raw",        # 备注 → certificate_remarks
    13: "execution_status_raw",    # 装配试压人员/是否已发货 → execution_status
    14: "working_medium",          # 工作介质 → certificate_remarks
    26: "supply_type_indicator",   # 黄色代表外购 → supply_type(备选)
    28: "execution_status_indicator",  # 蓝字代表已发 → execution_status(备选)
    71: "true_production_order_no",    # 真正的生产令号 → 覆盖 production_order_no
}

关键处理逻辑

  1. 两组产品字段区分

    • 列3-5(合格证实际打印版)→ cert_product_name/model/spec

    • 列35-37(销售计划原始值备份)→ product_name/model/spec

    • SalePlan模型使用逻辑:优先取 cert_product_*,为空则回退到 product_*

  2. plan_date/customer 优先级:列33-34(销售计划备份,数据更精确)> 列1-2

  3. production_order_no 覆盖:先取列10的值,如果列71有值则覆盖

  4. supply_type 解析:列11优先,解析★前缀;列26备选,"自产"/"外购"

  5. execution_status 解析:列13优先,提取"已发货"/"未发货";列28备选

  6. certificate_remarks 拼接:合并列8(工作温度)、列14(工作介质)、列9(发证日期)、列12(备注)

  7. plan_no 解析:从"202511_No0260"提取"2511_0260"

  8. category 优先级:列32 > 列73

  9. tech_requirements 优先级:列69(纯文本) > 列16(复合文本)

七、与 SalesPlan 导入脚本的关系

import_sales_plan.py 从销售计划Excel导入数据,而 import_cert_list.py 从合格证清单导入数据。两者的区别:

方面

销售计划导入

合格证清单导入

数据来源

销售计划工作簿

合格证清单表

产品名称/型号/规格

销售计划原始版 → product_name/model/spec

列35-37(销售计划备份)→ product_name/model/spec,列3-5(合格证打印版)→ cert_product_name/model/spec

产品编号

无(由编号规则生成)

已分配的出厂编号

生产令号

原始值

列10=顺序号, 列71=真实生产令号

设备位号

原始值

2025年后实际存的是销售订单号

合格证信息

工作温度/介质/发证日期/备注等

发货状态

可能有

装配试压人员/是否已发货列