从“给人看的 Excel“到“能入库的规范行“:点检表数据清洗逻辑拆解

Excel转置三大方法:静态粘贴、TRANSPOSE函数与Power Query实战对比 Excel转置(Transpose)是数据结构重塑的基础操作,本质是行列维度的坐标映射,其核心原理在于改变数据在二维表中的索引逻辑。不同实现方式对应不同技术价值:静态粘贴提供零依赖、高稳定性的结果固化;TRANSPOSE函数支持实时联动但易引发引用失效与性能瓶颈;Power Query则通过结构化步骤实现可追溯、可批量、可维护的数据流水线。在BI对接、报表标准化、问卷长宽转换等高频场景中,选错方法将直接导致数据失真、自动化中断或审计失败。本文基于真实企业数据治理经验,系统解析三类转置的技术边界、性能阈值与典 阅读详情

车间每天产出的是纸质点检表的电子版——供人阅读、签字、归档。项目要的是在线可管理的账票:结构稳定、字段整齐、能按设备追溯。这两者之间的落差,就是数据清洗要解决的问题。

本文拆解这套清洗逻辑:它怎么认出表头、履历和点检项目,怎么决定数据装进哪张表,认不出来时又怎么让人知道。相关实现基于AI办公助手程序,连同界面代码约 7,500 行,纯本地离线运行。

一、先定管理目标:四类对象,一套编码

动手解析 Excel 之前,先要回答的是"数据进库以后怎么管"。围绕这个目标,管理上先定了四件事。

一个 Sheet 就是一张点检报表。 点检表的组织单位是"表"而不是"文件":一份 Excel 里有几个 Sheet,数据库里就有几条报表记录,一一对应。

点检项目挂在报表下面。 报表回答"这是哪台设备、哪种频次的哪张表",项目回答"这张表要检哪些点"。层级固定,不会出现没有归属的项目。

修改履历单独留痕。 谁在什么时候改了什么,一行一条单独存,不和报表主体混在一起;"改过几次"能直接查出来,不必翻历史文件。

实际点检数据另表存放。 在线填报后产生的实测值属于业务运行数据,与"表框架"分开管理,清洗只处理后者。

1.1 串起来的是 report_code,不是三个编码

这里有一个容易说错的点,值得先纠正:三张表各有自己的自增主键(check_report_id / check_project_id / change_record_id),但跨表关联一律不走主键,统一走 report_code。

点检项目表里还有 check_code(EIRITEM + 日期 + 编号),修改履历表里还有 change_code——它们各自是"业务编号",用于对外标识和外部系统对接,不承担跨表关联。把三者说成"三个编码各自串联一条线"是错的,真实的连接只有一条:报表是主,项目和履历都靠 report_code 挂上去。

由此形成三条管理口径,后面所有识别规则都往这里对齐:

  • 模板统一:一套表单结构适配多产线、多设备;
  • 口径统一:同名字段在全系统保持同一含义(这条落地时踩过坑,见 5.5.2 的表头污染);
  • 留痕统一:任何改动都能回答是谁、何时、改了什么。

二、清洗的终点与两条硬约束

2.1 三张表的产出关系

表角色关联方式每次清洗产出
dv_check_report点检报表(主表)report_code 是该报表的唯一码;靠 machinery_code 与设备关联每个 Sheet 1 行
dv_check_project_info点检项目report_code 指向报表;另有 machinery_id + machinery_id_type(1 车间 / 2 产线 / 3 设备 / 4 工程)M 行
dv_check_change_record修改履历report_code 指向报表N 行
点检记录表记录实际点检数据—不在清洗范围

完整字段清单见附录 A。

2.2 两个推论

第一,表头字段取不全,设备就关联不上。 machinery_code 是连向设备表的钥匙;钥匙丢了,后面所有数据都挂不上设备。所以表头识别的精度排在所有规则的第一位。

第二,一张点检表只对应一个编码。 多个 Sheet 各自独立成表。该语义已由使用方确认,因此"10 个文件、29 个 Sheet"产出 29 行报表记录属正常语义,不是缺陷。

2.3 两条硬约束

纯本地离线。 清洗链路不调用任何网络或 AI 服务,词典与规则全部在本地。现场环境不能联网,这条没有商量余地。

Excel 不外发。 任何诊断信息都必须在"不泄露业务内容"的前提下,足以定位问题。这条约束直接决定了第八节的设计。

三、难点:不在算法,在表格没有结构约束

点检表由人填写、供人阅读,天然带着大量"便于阅读却不利于解析"的特征。数据库要的是另一种东西:字段固定、类型明确的规范行。中间的翻译就是清洗,难点集中在四条:

  1. 表头位置不固定:可能在第三行、第五行,也可能到第三十二行才进入点检项目区;
  2. 标签和值不在相邻列:实测设备编码的取值位置相对标签偏移 +6 列;
  3. 同一个概念有多种写法:改订内容 / 修订内容 / 变更内容 / 修改履历 / Change Log;
  4. "没有"和"没认出来"长得一样:表里本来没有履历区,和程序没识别出履历区,输出完全相同。

3.1 第四条最要命

它意味着:打开结果表看到空白时,你无法判断是这张表本来就没填,还是程序没看懂。

因此这个模块的设计目标不是"聪明",而是可解释、可诊断——每一步判断都能说明依据,判断错了能被记录下来、被人抓出来。后文所有设计(尤其是第六、八节)都服务于这个目标。

3.2 现场 Excel 的九个实测特征

特征实测表现对解析的影响
多版本同类点检表存在多个排版版本行列位置不能写死
多 Sheet10 个文件共 29 个 Sheet每个 Sheet 独立成一条报表记录
表头漂移第 3 行、第 5 行,甚至第 32 行才进入点检项目区必须先定位表头再取值
合并单元格项目、区分列大量纵向合并空白格要靠向下继承补
标签与值不同列machinery_code 相对标签偏移 +6 列同列右邻取不到值
说明区与图例“点检OK:○ 点检NG:×”、签字栏、备注容易被当作数据行
概念多写法改订内容 / 修订内容 / 变更内容 / 修改履历 / Change Log单一关键词覆盖不全
页脚页码1/3 形式的页码报表名需与页脚拼接
大段空行样例表自带 14~28 行全空行边界容易被空行打断

后两行会在后面反复出现:页码决定报表名能否拼对(5.5.1),空行决定履历边界停在哪(5.5.2)。

四、解法:六步流水线

上传(单文件 / 多文件 / .zip)
   │
   ├─① 读表        header=None 原样读入,跳过名字以 Sheet 开头的页
   ├─② 表头元数据  关键词 + 向右偏移 → line_code / machinery_code / product_no …
   ├─③ 修改履历    找表头行 → 定数据区 → 列映射 → 6 个标准列
   ├─④ 点检项目    三模式探测(日常 / 条件 / 周度)→ 项目 + 基准 + 方法 + 频度
   ├─⑤ 表角色映射  决定哪个 DDL 装哪类数据(语义优先,非位置)
   └─⑥ 导出        一个 xlsx,每个建表语句一张 Sheet(N 张,不固定 3 张)

第①步刻意不做"智能推断":以 header=None 原样读入,避免 pandas 自行认定表头;并跳过名字以 Sheet 开头的页,排除模板附带的空白页。

4.1 失败即空表:一个刻意的选择

①~④ 任一步认不出来,输出空表,但不报错。

目的是让一张坏表不拖垮整批文件。代价很直接——"表里没数据"和"程序没认出来"在结果上无法区分。这个缺口只能靠过程记录补(第八节),这也是为什么记录不是一个可选项。

4.2 第⑤步:表角色映射曾出过一次严重错位

早期实现按位置映射:第 1 张 DDL 装主表、第 2 张装履历、第 3 张装点检项目。而用户实际上传的 DDL 顺序是 report → project_info → change_record,第 2、3 张正好对调——

结果是点检项目和修改履历互相装错表,字段名对不上,两张表同时全空。用户看到的现象就是"点检项目一个内容都没有,修改履历也没有"。

现在改为语义三轮判定:表名关键字 → DDL 字段特征 → 位置兜底,并把判定依据写进过程记录:

dv_check_project_info(idx1) → project_info(依据:表名含 project_info)
t_c(idx2)                   → change_record(依据:字段含 change_content)
x2(idx1)                    → change_record(依据:第 2 张表位置兜底)

五、三层识别:词典、位置、边界

整套识别没有使用任何机器学习,是三层启发式规则叠加的结果。

5.1 第一层:词典

默认配置 DEFAULT_CONFIG 中维护五张词表:

词表作用示例
header_keywords表头字段生产线 / 机械番号 / 制品品番 → line_code / machinery_code / product_no
履历表头(代码内 11 种)定位履历区改订内容 / 修订内容 / 变更履历 / Change Log / Revision
revision_column_keywords履历列年月日 / 担当 / 确认 / 承认
check_item_column_keywords点检项目列点检项目 / 水准 / 方法 / 频度 / № / 区分 / 表示
section_markers.end_markers结束边界签字 / 确认 / 承认 / 批准(项目侧另有 点检者 / 监督者)

匹配方式是去空格后的子串匹配:“点检 项目"也能命中"点检项目”,用于应付人工敲入的不规则空格。

5.2 第二层:位置

值主要靠位置找,而不是靠列名。三处偏移各不相同:

位置向右扫描说明
表头元数据 extract_module1_header1~12 格取得标签右侧第一个非空值
表单键值对 _scan_form_pairs1~5 格扫 25×50 区域,构建"标签 → 值"字典
报表字段兜底 _build_report_data1~15 格兜底扫描,范围最大

偏移量会写进过程记录(如 machinery_code+6)。偏多少,直接反映这张表的排版有多不规矩。

5.3 第三层:边界

场景边界规则
修改履历从表头下第一个非空行开始,遇到第一个整行全空就停;或遇到"签字 / 确认 / 承认 / 批准"(且该格不超过 10 字);都找不到时取起点 +50 行
点检项目遇到"签字"、单元格精确等于结束词、或含"点检者 / 监督者"就停

点检项目侧特别强调"精确等于":若按子串匹配,"目视确认"这类正常内容会被当成结束词,数据区被提前截断。

5.4 为什么不用 AI

四条理由都是工程约束,不是偏好:

  • 离线:现场不能联网;
  • 确定性:同一张表跑两次必须得到相同结果,否则无法回归、无法审计;
  • 可解释:入库数据出问题时要能回答"这个值来自哪个单元格";
  • 可维护:规则写在 JSON 里,换产线改配置而不改代码。

代价是规则的边界就是识别的上限——词表没覆盖的表达一律认不出。这也决定了优化路径:不是换模型,而是把"认不出"变成可枚举、可逐个修掉的问题。

5.5 三个模块的识别细节

5.5.1 表头元数据
扫描前 20 行 × 前 80 列
  命中关键词 → 向右 1..12 格取第一个非空 → 字段值
  字段名含 "code" 的自动转大写
报表名:前 10 行找含「点检表 / 检查表 / 日常点检 / 周点检 / 月度点检 / 日点检」的单元格
       再用正则 \d+/\d+ 抓页脚(如 1/3),拼成「报表名1/3」

具体到某张表:machinery_code 的标签与值相隔 6 列,程序按规则右扫 12 格,在第 6 格取到值,并把 +6 写进记录。

报表行字段有三条来源,优先级 ③ > ② > ①:

序号来源说明
①extract_module1_header关键词 + 向右偏移
②_scan_form_pairs扫描 25×50,“标签 → 右邻 1…5 格”
③场景 JSON 的 search_keywords直接覆盖 ② 的标签映射

这条优先级对排障很实用:改了 header_keywords 却不生效,多半是被场景配置的 search_keywords 覆盖了。这是排查字段缺失的第一步。

5.5.2 修改履历
① 全表扫 11 种履历表头写法 → 记录所有命中的表头行(支持多张履历表)
② 起点:表头行下 4 行内第一个有任意非空值的行
③ 终点:第一个整行全空 / 命中结束词 / 兜底 +50 行
④ 列映射:表头行的关键词 → 6 个标准列(内容 / 日期 / 担当 / 确认 / 承认 / 序号)
⑤ 位置兜底:一个列名都没命中时,按列位置硬套 0..10

第 ⑤ 步是整个模块最危险的设计。 它让程序"总能给出答案",包括错误的答案——它会把"确认"的数据当成"承认"装进库,而且不报错。目前用 W_M2_POSITION_FALLBACK 单独标注,供人工复核。

这里还踩过一个更隐蔽的坑:表头行被当成表单扫描。表头是 改订内容 | 年月日 | 担当,按"标签 → 右邻"取值时,“改订内容"的右邻正好是"年月日”,于是 content 字段取到了 年月日——29 行报表记录全被污染。修法是先划出表头区域,区域内不参与取值;右邻本身还是表头词就继续往右找,找不到宁可留空。

全表扫描并允许多张履历表,是为了适配同一 Sheet 内分段记录多次修订;而边界只认"第一个整行全空",表里本身含大段空行时就容易截早——这条与"删除空行"规则天然冲突,详见第九节。

5.5.3 点检项目:三种模式按固定优先级探测
顺序判定条件提取方式
1前 40 行出现 项目: / 项目:日常表:逐格扫描,序号自增,向下 1~3 行找"点检方法"
2同一行同时出现 表示 与 频度条件表:列映射 + 合并单元格继承,拼成 项目,表示为:X(1/W段取时),频度强制改写为 1/W
3出现 点检项目 表头周度表:按列关键词映射,item_no / check_item_type 向下继承

三种模式的差异不只在触发条件,也在数据组织方式:日常表以 项目: 为锚点逐格扫描,方法常写在项目名下方而非同一行;条件表依赖"表示"与"频度"同行出现,需列映射并用合并单元格继承补全层级,最后把多个字段拼成一句文本;周度表走标准表头映射,用向下继承补偿合并单元格造成的空值。

这里出现的 item_no、check_item_type、check_frequency 是清洗中间列名,入库时还要再映射到 content、judgment_criterion、cycle 等 DDL 字段。

条件表的"强制 1/W"是已知硬编码,后果是无法从数据反推真实周期。这也是后来把条件表固定按周处理的原因(见第六节)。

六、场景与表单类型

场景 = 一套可覆盖 DEFAULT_CONFIG 的配置 + 一个 report_type。界面下拉里的场景,就是 cleaning_scenarios/*.json 的文件名。

场景report_type配置形态
日常点检表1全量(12 个键,可逐项改规则)
周度点检表2精简(只写名字、说明、类型,其余回落默认)
月度点检表3精简
年度点检表4精简
条件点检表2(固定按周)全量(列拼接规则依赖配置)
安全装置点检表3(与月度同号)精简

配置形态的差异有明确理由:周、月、年三张表与日常共用同一套默认提取逻辑,只差一个 report_type;若每种都写全量,以后改默认规则就要改四处,迟早漏改。条件表相反,它的"区分 + 项目 + 表示"拼接逻辑依赖具体配置项,不能靠默认值兜底。

选错场景不会静默通过。 清洗时拿报表名与所选场景比对:报表名含"条件"却选了非条件表、或写"周度"却选了月度,都会记一条 W_SCENARIO_NAME_MISMATCH。比对前先剔除"2026年"这类日期片段,避免把年份误判成年度表。

七、批量处理与失败隔离

  • 输入:单文件、多文件,或一个 .zip(可含子目录);
  • 安全阀:单包 ≤ 500 条目,解压总量 ≤ 512MB,单条目 ≤ 128MB;../ 与绝对路径一律拒绝;
  • 合并:每个文件各自清洗,结果按表纵向 concat(ignore_index);
  • 隔离:某个文件解析失败就跳过,记 E_FILE_FAILED,其余继续;
  • 输出:一个 xlsx,Sheet 数 = 建表语句数,而不是固定 3 张;即使某张表 0 行,也写一张只有表头的 Sheet,保证这一约定永远成立。

八、过程留痕:一份能外发的"体检报告"

Excel 不能外发,过程记录是唯一能被带出去分析的东西。它不装业务内容,只装判断依据。

每次清洗在 output/ 下生成 清洗记录_<时间戳>.md,并覆盖 清洗记录_最新.md,五段结构:

段内容
一、总览文件数、成功数、失败数、ERROR/WARN 数、场景、DDL 顺序、规则开关、每个文件的识别健康分
二、逐文件明细每个 Sheet 的三模块识别过程:表头命中关键词及单元格坐标、字段命中率、位置偏移量;履历的表头行、匹配词、数据区、边界原因;点检项目的判定模式及依据;产出行数;表角色及判定依据
三、结构诊断30×30 类型码结构线框图、行画像、列画像与数据区统计、边界细节、关键词近似匹配、健康分构成
四、问题清单按严重度排列,每条带代码、文件、Sheet、说明
五、机器可读同内容的 JSON,便于脚本统计"哪类识别最常失败"

8.1 结构线框图:不泄露内容也能传递结构

       1  2  3  4  5
  1    T                    ← 标题行
  5    T  T  T  T  T        ← 履历表头行
  7                         ← 让它停下的空行
  8       T  D              ← 边界之后还有数据 → 截早了

不打开原表,光看这张图就能判断"表头占几行、数据区从哪开始、空行断在哪、边界是否截早",而不会看到任何品番、设备名或项目内容。这是保密场景下一个可复用的技巧。

8.2 问题代码:把"猜错了"变成可枚举的条目

18 个代码按类别分八组:

类别代码
表头E_M1_NO_HEADER、W_M1_LOW_HIT_RATE
履历E_M2_NO_HEADER、W_M2_EMPTY、W_M2_POSITION_FALLBACK、I_M2_END_FALLBACK
点检项目E_M3_NO_HEADER、W_M3_EMPTY、W_M3_FORCED_FREQ
边界与一致性W_BOUNDARY_TOO_EARLY、W_HEADER_ROW_DRIFT、W_REPORT_NAME_MISMATCH
表角色I_ROLE_BY_NAME、I_ROLE_BY_FIELDS、I_ROLE_BY_INDEX、W_ROLE_DUPLICATE
配置与场景W_REPORT_TYPE_INVALID、W_SCENARIO_NAME_MISMATCH、W_TABLE_COUNT_LT3
运行与文件E_PARSE_EXCEPTION、E_ENGINE_EXCEPTION、E_INPUT_NOT_FOUND、E_SCHEMA_EMPTY、E_NO_SHEET、E_FILE_FAILED、E_EXPORT_FAILED
质量W_LOW_HEALTH_SCORE、W_TEXT_KEPT_RATIO_HIGH

8.3 健康分:先看哪个文件最可疑

健康分 = 表头字段命中率 × 40
       + 履历有产出 × 20
       + 点检项目有产出 × 25
       + 未使用位置兜底 × 15
(< 60 🔴,60~80 🟡,> 80 🟢)

多文件批量时先看 🔴 的,不必逐个打开表排查。

8.4 脱敏:白名单式,而不是按行放行

保留原文掩码
① 词典词覆盖该格 ≥60% 字符,且该格不是"标签:值"形态(如 改订内容)其余全部:T(长度) / N / D / .
② 关键词近似候选 top3(如 变更内容)
③ 报表名单元格
④ 疑似表头窄行整行保留(默认关闭)

第 ④ 条为什么关掉,有实测依据:日常点检表的"标签行"里天然混着值,开启整行保留后,会把"详见工序一览表"(制品品番的值)、“主冷却电动水泵”(制品名的值)写进记录。结论是任何按行放行的规则都会漏,所以只做单元格级白名单。

每份记录还会给出"原文保留 N/M 格(X%)",超过 30% 就记 W_TEXT_KEPT_RATIO_HIGH,提示外发前须人工复核。上线时做过 619 条原文可追溯复检(凡出现在记录里的原文,必须能追溯到白名单格 / 词典词 / 报表名),无法追溯的为 0 条。

九、最难的七种情况

真正卡住人的不是写代码,而是下面这些判定上的两难。逐条列出应对与代价,因为代价往往比方案更需要提前说清。

情况卡在哪应对代价
履历区"没有"与"没认出来"两种情况输出同样为空表空表照出,但写 E_M2_NO_HEADER / W_M2_EMPTY 与边界原因结果表本身仍看不出区别,必须读记录
位置兜底误判一个列名都没命中时按位置硬套 0…10记 W_M2_POSITION_FALLBACK,列入人工复核兜底仍会产出"看起来正确"的错误数据
表头区被当成表单“改订内容"右邻是"年月日”,content 取到"年月日"先划表头区域,区域内不参与取值;右邻仍是表头词就继续右找表头区域划错时错误向内传导
空行把边界截早样例表自带 14~28 行全空行;删空行规则(R1)开启后履历从 2 行变 7 行R1 默认关闭,记 W_BOUNDARY_TOO_EARLY边界仍需人工确认是否截早
模糊匹配命中多个候选"工程№"与词典"工程名"相似度仅 0.67近似候选只写进记录,不入库、不自动选词表漏项仍要人工补词
表角色错位按位置映射时第 2、3 张 DDL 对调改语义三轮判定,并把依据写进记录表名和字段都不具特征时仍需位置兜底
批量中单表异常一张坏表可能拖垮整批失败隔离,记 E_FILE_FAILED,其余文件继续被跳过的文件需单独重跑

这些情况背后是同一个结论:启发式识别不会主动告诉你"我猜错了",必须自己把猜测依据记下来。

十、怎么证明它是对的

讲逻辑容易,证明逻辑没跑偏才是工程量的主要部分。这套实现用四层验证兜住。

第一层:逐单元格回归。 5 个样例表在改动前后各跑一次,把三张表的每一格(类型 + 值)快照下来逐格比对。规则改动必须做到 diff = 0,只允许出现"有意变更"的字段(例如 report_type 从 1 改成 2)。"看起来对"不算验收。

第二层:真实数据复核。 用客户实际的 10 个文件跑,修复前后对比同一张表的关键列非空计数:

表修复前修复后
dv_check_project_info2 行,content / method 全空9 行,content / method / check_code / cycle_type 各 9 个非空
dv_check_change_record5 行,change_content 全空2 行,change_content / change_time 各 2 个非空
dv_check_report.content年月日作成:2021年07月28日 修订:2023年08…
表头污染单元格290

第三层:多种 DDL 顺序。 同一批数据分别用三种 DDL 顺序(用户真实顺序、原顺序、把表名改成 t_a/t_b/t_c 只保留字段特征)跑,三张表的数据归属必须完全一致。

第四层:端到端。 打包成 exe 后启动、拿到 HTTP 200、关窗口进程退出并释放端口;这些都要有实测输出,而不是"应该没问题"。

十一、效果与局限

这套逻辑已能覆盖日常、周度、月度、年度、条件、安全装置六类表单的常规排版:表头能定位到设备编码,履历与点检项目按各自模式拆成行,批量处理有失败隔离与安全阀,每次清洗都留下一份可外发的诊断记录。

但边界也很清楚:

  • 安全装置点检表挂的是默认词典,没有真实样例,表头写法一旦不同,识别就会偏;
  • 月度、年度场景未用真实月检、年检表验证,目前只是把 report_type 下发对了;
  • 词表未覆盖现场所有表达,"工程№"与"工程名"相似度 0.67 就是一例;
  • 条件表频度被硬编码为 1/W,业务上暂按周处理,无法从数据反推周期;
  • 多 Sheet 即多报表,这是已确认的业务语义,不算缺陷。

十二、接下来怎么做得更好

改进按优先级排定,都是可以落地的具体动作,而不是"引入模型":

级别内容状态
P0让失败可见:自检告警、结构化诊断、静默异常落日志、空表必须带原因已完成
P1魔法数字可配:扫描范围、偏移区间、结束词下沉到场景 JSON,边界改为"连续 N 行无数据才停"进行中
P1条件表周期不再硬编码,按配置推断周 / 月待做
P2标准清洗能力:文件指纹去重、质量报告 Sheet、清洗血缘 manifest、契约测试待做
P2词表扩充与近似候选闭环,把"工程№"这类漏项补回词典待做

十三、三个可迁移的结论

如果把这件事抽象一层,有三条结论对其他"表格转数据"的场景同样成立:

  1. "没数据"和"没认出"必须能被区分。 这是可观测性的起点,也是所有后续优化的前提——分不清这两件事,改规则就是盲改。
  2. 位置兜底是最危险的设计。 它让程序"总能给出答案",包括错的答案。兜底可以有,但必须留下痕迹、必须可被人工推翻。
  3. 按行脱敏不可靠。 只要表里有"标签和值混排"的行,任何按行放行的规则都会漏。要脱敏就做到单元格级白名单,并给出"保留比例"这样的可度量指标。

附录 A:三张表完整字段

A.1 dv_check_report

字段含义类型 / 取值
check_report_id主键bigint,自增
report_code文件编号、业务唯一码varchar(64);格式 check + 年月日 + 序号(000001)
report_name表头名称varchar(64)
line_id / line_code / line_name产线 ID / code / 名称bigint(NOT NULL)/ varchar(64) / varchar(64)(NOT NULL)
engineering_code / engineering_name工程 code / 名称varchar(64)
machinery_code / machinery_name设备番号 / 设备名称varchar(64)
product_no / product_name制品品番 / 品名varchar(64)
report_type报表类型int:1 日、2 周、3 月、4 年
line_type车间树类型int:1 车间、2 产线、3 设备、4 工程
content报表修订内容varchar(255)
recording_method记录方式varchar(300)
object_product对象制品varchar(64)
status启用状态char(1):1 启用、0 停用,默认 1
start_time / end_time启用开始 / 停用结束datetime
chart_show模板显示bigint:1 日、2 周、3 月、4 年、5 折线
sort / del_flag排序 / 删除标志int / char(1):0 存在、2 删除

其余字段是三段签字的 ID 列(report_create_id / report_confirm_id / report_admit_id 等)与 create_by、create_time、update_by、update_time。

两点需要注意:其一,report_code 在 DDL 注释里同时被定义为文件编号,兼有"手编辑、自动生成"两种来源,既是关联键也是对外编号——本文只用它做关联,不从它反解日期。其二,chart_show 在报表侧是"模板显示类型"(含折线),在项目侧却是 0/1 开关,同名不同义,映射时不能混用。

A.2 dv_check_project_info

字段含义类型 / 取值
check_project_id主键bigint,自增
report_code所属报表varchar(255),注释为"统一表头唯一码"
machinery_id / machinery_id_type关联对象 ID / 类型bigint / int:1 车间、2 产线、3 设备、4 工程
content点检项目varchar(255)
judgment_criterion判定标准varchar(255)
method点检方法varchar(255)
cycle_type周期类型int:1=1/始、2=1/终、3=1/值、4=日、5=周、6=月、7=年
cycle周期varchar(255)
input_type录入类型int:1 单选、2 数值、3 文本
option_value选项 / 上下限varchar(255),逗号分隔,格式随 input_type 变化
unit / length / decimals / default_value单位 / 长度 / 小数位 / 默认值varchar / int / int / varchar
important_id / classify_id重点符号 / 分类(备用)varchar(255)
check_code项目自动编码varchar(255),EIRITEM + 日期 + 编号
enable启停int:1 启用、0 停用
need_photo / need_video(含 _num)是否照相 / 录像及数量int:0 停用、1 启用
file_url作业指导书、参考图片varchar(255),逗号分隔的 ID
start_time / end_time生效 / 结束datetime

其余字段是 sort、chart_show(0 不显示 / 1 显示)、remark、del_flag 与审计四件套。

这张表信息量最大,有三处结构需要单独说明:cycle_type 是枚举而 cycle 是文本,两者并存说明周期既要能被机器判定,也要人能读;option_value 用逗号数组承载选项或上下限,单选类型按 [key,value,1,key,value,0] 重复,数值类型则是"下限、预知下限、预知上限、上限"四组符号与数值;need_photo / need_video 说明点检不只填数字,还可能要拍照留证。这三点决定了项目行不能被当成几列普通字符串。

A.3 dv_check_change_record

字段含义类型 / 取值
change_record_id主键bigint,自增
report_code所属报表varchar(64),注释为"标识"
change_time修改日期datetime
change_content修改内容varchar(64)
change_code / change_add修改编号 / 修改定位varchar(200) / varchar(64)
change_create_id / _name / _time担当人及其确认时间bigint / varchar(64) / datetime
change_confirm_id / _name / _time确认人同上
change_admit_id / _name / _time承认人同上
remark / del_flag备注 / 删除标志varchar(64) / char(1):0 存在、2 删除

履历与主表是同一套签字模型:change_create / change_confirm / change_admit 三组人与时间,对应主表的 report_create / report_confirm / report_admit。清洗时定为 6 个标准列,正是为了对齐这套结构:内容 → change_content、日期 → change_time、担当 → change_create_name、确认 → change_confirm_name、承认 → change_admit_name。

A.4 关联与来源

关系连接条件基数
报表 → 项目dv_check_project_info.report_code = dv_check_report.report_code1 : N
报表 → 履历dv_check_change_record.report_code = dv_check_report.report_code1 : N
项目 → 车间树machinery_id + machinery_id_typeN : 1
报表 → 车间树line_id + line_typeN : 1

按字段来源再分一次类:关联键是 report_code、machinery_id / machinery_id_type、line_id,由清洗判定填入;业务填写是表头上的人可读信息(表头名称、制品品番、修订内容、记录方式)与项目内容(项目、判定标准、方法、周期、单位),来自表内文字;系统生成是三个自增主键、check_code、del_flag、status / enable 的默认值以及审计四件套,入库时赋值;签字是两侧的 create / confirm / admit 三组,来自表内签字栏。

附录 B:术语表

术语含义
三大模块表头元数据 / 修改履历 / 点检项目
表角色某个 DDL 表在这次清洗里承担哪种数据(report / change_record / project_info)
场景一套可覆盖默认配置的参数 + 一个 report_type
健康分0~100 的单文件识别质量评分
过程记录每次清洗输出的诊断 Markdown,可外发
位置兜底列名一个都没命中时,按列位置硬套字段
契约测试用固定样例的快照锁住行为,防止规则改动悄悄改变结果
大模型落地避坑指南:RAG、微调与Prompt工程的生产实践 大语言模型(LLM)应用的核心挑战不在理论理解,而在真实业务场景中的确定性交付。RAG并非简单检索+生成,其效果取决于语义过滤、结构校验与可信度熔断等工程化设计;微调常被高估,80%术语问题可通过动态词典注入或后处理映射高效解决;Prompt需从‘艺术调试’转向模块化、可版本化、可AB测试的工程配置。技术价值在于将模糊需求转化为可审计、可监控、可降级的确定性链路。典型应用场景包括客服摘要、智能工单分派、设备故障诊断等强规则、高可用要求的垂直领域。本文聚焦12个已上线项目的共性断点,直击RAG失效、微调漂移、 阅读详情

相关推荐

中小制造企业数字化转型:惠搭ERP“小快轻准”方案详解

ERP系统是企业数字化转型的核心工具,尤其对中小制造企业而言,需要在有限预算下实现高效管理。传统ERP功能堆砌、流程固化,导致员工抵触、数据失真。惠搭ERP遵循“小快轻准”理念,通过模块按需解耦、移动端优先设计,并深度集成钉钉与企业微信,让流程主动驱动人,实现销售、生产、库存、财务全链路在线协同。结合MES八大子系统,支持APS排产、工序报工、质量追溯,帮助企业以低成本快速构建数字化底座。本文从业务挑战、总体架构、核心模块到实施验收,完整解析一套适合中小制造企业的ERP落地路径。

weixin_34389926的博客 581

WPS多维表格「灵感应用」:Vibe Coding重塑企业轻量级数字化

多维表格作为企业数据管理的基础工具,正从静态数据容器演进为动态业务操作系统。其核心升级在于语义化建模能力——通过自然语言理解、跨表关系自动识别与上下文感知渲染,将业务需求直接转化为可运行应用。这种‘Vibe Coding’范式跳过传统低代码的配置门槛,让非技术人员也能基于真实场景快速构建应用,显著降低ERP替代成本与VBA维护负担。在制造业点检、零售库存联动、教育教务分析等强业务耦合场景中,它实现了数据采集、分析、预警、协同的一体化闭环。WPS凭借国产生态渗透力、VBA兼容性与离线可靠性,成为该技术落地的关

weixin_34306593的博客 298

精益为地基:智能工厂从价值流到五层架构的落地路径

智能工厂建设正从设备联网走向精益运营,生产逻辑、精益管理逻辑与软件数据逻辑的脱节,常导致系统上线后难以支撑现场改善。以精益生产为地基,先定义价值流、节拍时间与异常响应机制,再匹配MES、OEE等执行层工具,才能让数字化动作与改善指标形成闭环。从设备层、控制层、执行层到管理层与协同层的五层架构,为流程咬合提供了边界约束;结合数据采集、线平衡计算、安灯事件表等工程实践,可清晰识别瓶颈工序与真实浪费点。实施时以价值流找优先级、以试点产线定节奏、以数据治理保地基,能有效规避APS空转、OEE口径混乱、按灯无标准等典

weixin_34151004的博客 385

新质生产力建模:设备、人、数据三大物理接口与企业约束闭环

新质生产力不是抽象政策概念,而是可量化、可干预的企业级技术经济系统。其核心原理在于设备智能化、人机协同、数据驱动三者动态耦合,技术价值体现为单位研发投入专利转化率、非计划停机下降幅度等真实指标。典型应用场景覆盖制造业技改决策、产线人机交互优化、IoT数据治理等工程实践。本文聚焦‘设备利用率弹性系数’‘认知负荷切换成本’‘数据动能比’等关键热词,揭示如何从ERP、MES、SCADA等真实系统中提取约束变量,构建具备财务、组织、供应链三重防火墙的落地型优化模型。

congbao6525的博客 454

智能制造信息化方案评审指南:从数据流到落地避坑要点

在制造业数字化转型中,信息化方案评审是决定项目成败的关键环节。理解OT与IT融合、数据采集协议、MES与ERP集成等基础概念,是评估方案可落地性的前提。工业互联网环境下,数据流贯通设备层到应用层,需要关注点位命名、采集频率、数据质量规则等细节。技术价值体现在降低集成风险、避免范围蔓延、保障ROI可验证。此类评审常应用于智能制造项目选型、实施规划和技术咨询场景。本文围绕方案架构、数据流、集成边界、实施路径及高频翻车点展开,帮助决策者从架构合理性、数据完整性和执行可行性维度高效审视73页PPT,避开常见陷阱,推

weixin_34221773的博客 413

智能工厂数据管理方案落地指南:从设备联网到数据资产化

智能制造的核心不是自动化设备的堆砌,而是让每一台设备的数据真正流动起来。数据采集是工厂数字化的起点,Modbus TCP、OPC UA等工业协议决定了设备能否被读取,而数据治理与点位规划则直接影响数据能否转化为可用资产。在工业互联网与数字孪生日益普及的今天,企业需要打通从传感器、网关到数据平台、业务看板的完整链路,才能实现OEE、设备稼动率等指标的准确计算与科学决策。设备联网、数据中台、工厂数字化转型等场景都离不开底层数据的互联互通。本文从智能工厂建设方案的实际评审视角出发,拆解设备层、数据层、应用层的落地

weixin_34245749的博客 431

汽车零部件企业数字化转型实战:从订单协同到数据驱动的全链路升级

在制造业数字化转型的背景下,企业资源计划(ERP)和制造执行系统(MES)作为核心系统,是实现生产透明化与流程协同的关键技术。其原理在于通过数据集成与流程自动化,打通从销售、计划、生产到物流的信息流,构建企业级的数字神经中枢。这一技术体系的核心价值在于消除信息孤岛,实现订单全生命周期的实时追踪与敏捷响应,从而显著提升运营效率、降低成本并保障质量。其典型应用场景包括应对主机厂计划波动、实现车间无纸化与防错作业,以及构建端到端的质量追溯体系。本文以汽车零部件行业为具体案例,深入剖析了如何通过构建以订单为主线的数

weixin_30387423的博客 463

装备制造智能工厂MOM系统方案:从MES到落地的关键指南

制造运营管理(MOM)是智能工厂中连接企业计划层与车间控制层的关键系统。它并非MES的简单升级,而是将排产、执行、质量、物料与设备数据纳入统一运营闭环,解决从订单到交付过程中的协同问题。在装备制造这类离散型行业中,APS高级排程与物料齐套校验是保障总装交付的核心能力,QMS质量追溯则需贯通SN、批次与检测记录。MOM的价值不仅在于数据采集,更在于通过接口集成与实时看板驱动异常响应和持续改善。本文围绕智能工厂MOM系统方案,从架构边界、功能模块到实施路径与常见陷阱,提供一套可落地的评估与建设参考。

weixin_34279246的博客 415

AI成本重构实战:从隐性损耗到弹性产能的四大场景路径

AI降本不是简单替代人力,而是对运营成本结构的系统性重构。企业真实成本中,超50%藏在流程断点、决策延迟与沉睡资产等中层和认知层损耗中,传统财务报表难以捕捉。借助AI实现流程断点闭合、决策半径压缩与沉睡资产激活,可将隐性成本显性化、固定成本弹性化、人力成本算力化。本文聚焦客服话术合规率提升、制造OEE优化、财务对账周期压缩、IT告警语义聚合四大高频场景,结合最小可行数据集(MVDS)、人类在环(Human-in-the-Loop)和边缘AI等落地策略,提供可验证、可嵌入、可量化的成本重构方法论。

weixin_34372728的博客 409

数字化工厂规划与建设指南:架构设计、实施路径与避坑要点

数字化工厂是智能制造转型的核心载体,其本质是基于ISA-95五层架构将物理工厂映射为数据模型,实现生产过程透明化与质量可追溯。规划的关键在于厘清MES、WMS、SCADA等系统的业务边界与数据链路,而非盲目选型或追求大屏效果。大量企业投入巨额预算却不见效益,根因常在于忽略边缘层建设、点位语义规范化与数据质量机制。围绕顶层架构设计、现状调研四张表、系统选型12个硬指标等核心方法,梳理从设备联网到MES/WMS上线再到数据可视化的三阶段实施路径,并复盘五大典型的落地避坑场景,提出两周体检法以持续验证数据链路健康

weixin_34248023的博客 365

提示词工程的几个参数

低 temperature + 低 top-p:输出最稳定、最可靠,适合需要准确性和一致性的场景。高 temperature + 高 top-p:输出最多样化、最富有创意,适合需要灵感和探索的场景。Max Length:您可以通过调整max length来控制大模型生成的 token 数。指定 Max Length 有助于防止大模型生成冗长或不相关的响应并控制成本。是一个字符串,可以阻止模型生成 token,指定是控制大模型响应长度和结构的另一种方法。例如,您可以通过添加 “11” 作为。

weixin_44212787的博客 1826

企业核心B端管理系统全解析:从ERP到BI的10大系统选型与集成指南

企业数字化转型离不开核心管理系统的支撑。这些系统基于业务流程自动化、数据整合与分析等基础技术原理,旨在解决运营效率、协同管理与智能决策等关键问题。其技术价值在于通过标准化流程与数据驱动,实现降本增效与风险管控。典型应用场景覆盖了从内部资源规划、生产执行到客户关系、供应链协同等全业务领域。本文聚焦于企业资源计划(ERP)与数据决策系统(BI)等核心系统,深入剖析其功能模块、选型策略与集成实践,为企业构建一体化数字引擎提供清晰路径。

weixin_30753873的博客 338

SKF SimPro Quick 4.8.1发布

发布说明可以在SimPro手册的SKF SimPro Quick应用程序的一般部分下找到(帮助→SKF SimPro快速手册→一般→发布说明)。请删除旧版本,请备份您存储在C:\SKF SimPro xxx\files文件夹中的文件以及所有自定义报告模板和表格。我们很高兴地通知您,我们的轴承应用工程软件SKF SimPro Quick 4.8.1可供下载。将新的安装文件下载到本地计算机后,双击它安装向导将打开(按照说明操作)3.安装后,在本地机器上启动SKF SimPro Expert软件。

小韩的博客 1818

开源MOM平台CI.MOM:从架构到落地的数字工厂实践指南

MES与MOM作为制造运营管理的核心概念,长期主导着车间数字化进程。MES侧重工序执行,而MOM则进一步扩展至质量、设备、物料等多要素协同,实现计划到执行的完整闭环。随着开源理念深入工业软件,企业开始摆脱商业套件的锁定,以更灵活、更低成本的方式构建数字工厂底座。CI.MOM正是这样一款开源MOM平台,依托微服务架构和开放API,支持工单管理、质量追溯、设备监控等核心场景的自主定制与部署。本文从概念原理出发,结合本地部署实操、数据初始化、典型行业适配及开源生态组合,系统梳理实施路径与避坑要点,为中小制造企业评

weixin_34160277的博客 263

RV1106G3的fastboot调试

本文详细描述了在幸狐的Luckfox Pico Ultra硬件平台上,使用官方SDK进行系统优化和YOLOv5s模型部署的过程。首先,硬件板卡使用幸狐的SDK进行EMMC非Fastboot配置时功能正常,但Fastboot配置编译失败,通过修改设备树中的ramdisk大小解决了编译问题,但运行时仍报错。幸狐提供的Fastboot烧录文件可正常运行,表明硬件支持Fastboot。随后,使用官方SDK版本rv1106_rv1103_240813进行编译和调试,发现EMMC Fastboot启动失败,通过修改U-

fzktongyong的博客 2356

PX4实战指南:通过遥控器通道直连实现舵机PWM控制

本文详细介绍了如何通过PX4飞控实现遥控器通道直连控制舵机PWM输出的完整流程。从硬件准备、遥控器配对到PX4参数配置和硬件连接,提供了实战技巧和常见问题解决方案,帮助无人机爱好者快速掌握舵机控制技术。重点讲解了AUX Passthrough模式设置和PWM参数调整等关键步骤。

weixin_29195217的博客 154

基于大模型与AI的泵阀品控溯源系统设计实践

在制造业数字化转型中,质量追溯与品控管理是企业实现精细化管理的关键环节。传统溯源系统往往止步于批次记录与纸质档案,面对复杂工艺链条和售后客诉时,难以快速定位问题根源。随着大模型与人工智能技术的成熟,RAG(检索增强生成)、机器视觉等能力正在重塑工业质检与追溯体系。通过构建从原材料到成品的全链路数据闭环,结合一物一码、时序数据库和智能分析引擎,企业可以实现质量异常自动预警、质检报告自动生成以及自然语言溯源问答。这类方案不仅提升质检效率与准确率,还能将被动记录转化为主动决策,在泵阀等离散制造业中具有广阔应用前景

weixin_34341229的博客 363

Vue3+Element Plus:构建现代化后台管理系统的核心布局实践

本文详细介绍了使用Vue3和Element Plus构建现代化后台管理系统的核心布局实践。从开发环境搭建到核心布局设计,再到动态菜单与路由集成,提供了完整的解决方案和优化技巧。特别适合需要快速开发高效、响应式后台系统的开发者,通过实战案例展示了如何提升开发效率和系统性能。

weixin_28309723的博客 459

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 198

系统-等保三级-CentOS Linux 7合规基线检查 shell脚本

系统-等保三级-CentOS Linux 7合规基线检查 shell脚本

swindy博客 2407

【目标跟踪】基于Kalman滤波实现无人机运动轨迹跟踪附matlab代码

1 简介 在近代控制中,需要对某一特定的运动目标进行跟踪监测,并需要对其下一时间的运动位置,运动方向,速度等信息进行预先估算,才能达到对目标的即时控制.本文简要讨论了用卡尔曼滤波算法对单个目标航迹进行预测,并借助于Matlab仿真工具,对实验的效果进行评估. 2 部分代码 clc; close all; %initial state xo=25; vox=2; %Observations **** % X-Direction Calcula

qq_59747472的博客 4731

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 127

【APM】在Kubernetes中搭建OpenTelemetry+Loki+Tempo+Grafana链路追踪(实战一,Loki日志中查看链路追踪数据)

这对于那些不能直接控制 JVM 启动参数的应用特别有用,比如通过 JNI (Java Native Interface) 调用 JVM 的应用、脚本中嵌入的 JVM 应用,或者一些服务管理工具自动启动的服务。这为用户提供了一个灵活的架构,可以根据需要选择最适合自己的追踪解决方案,或者根据环境(如开发、测试、生产)的不同配置不同的后端。: OpenTelemetry SDK 提供了丰富的特性,如自动追踪上下文传播、手动追踪跨度的创建与关联、标签和事件的添加等,使得追踪数据更加丰富和有用。

CN_Eden 3241

Docker Compose:搭建本地多服务开发环境

从一个 Java API、PostgreSQL 和 Redis 开始,配置服务名、端口、环境变量、健康检查、数据卷和依赖关系。理解 Compose 文件如何被解析、项目如何隔离,以及哪些数据不能依赖“重建容器”保留,能够把个人开发环境整理成团队可复用的启动入口。

m0_62221377的博客 455

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 406

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数据库主键选型指南:BIGINT vs VARCHAR

主键选型关乎数据库性能与架构演进。BIGINT(如雪花算法)在顺序写入、二级索引开销和分布式生成上优势显著,适合高并发核心链路;而传统 VARCHAR UUIDv4 因随机性导致频繁页分裂、存储膨胀,性能堪忧。UUIDv7 通过时间戳有序性实现高效追加写入,结合 BINARY(16) 存储可兼顾性能与安全,成为现代微服务新选择。关键在于:主键应稳定、无业务含义,优先选用趋势递增的紧凑类型,并根据场景合理采用双主键模式或 ULID 等替代方案。

小李同学的博客 300

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: 制造工厂业务场景:当机器要读懂一张手写的点检表
下一篇: 用开源报表工具SpringReport做车间大屏+Excel 导出,我踩过的一些坑,基于最初版本的设计开发
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值