| | |
| | | N2 -->|处置方式:退货1报废2返工3让步接收4降级使用5| N3[已处置7] |
| | | N3 -->|关闭| N4[已关闭8] |
| | | Q8[支撑数据:质检方案·检验指标·缺陷库·指标结果] --- A1 |
| | | Q8H["检验指标的层级可在质检指标页维护·条目类型 所属分组 公式 排序号·只允许两层·删分组级联删子项"] --- Q8 |
| | | A1 -->|出件 generate-from-qc| GATE{出件六道校验·按业务优先级只报第一处} |
| | | A2 -->|出件 generate-from-qc| GATE |
| | | A3 -->|出件 generate-from-qc| GATE |
| | | A4 -->|出件 generate-from-qc| GATE |
| | | GATE -->|000 类型非法| GE0[105_000 qcType 不在 1~4] |
| | | GATE -->|001 单据不存在| GE1[105_001] |
| | | GATE -->|002 未完成检验| GE2[105_002·带当前状态中文名] |
| | | GATE -->|003 未填判定| GE3[105_003·列出四个可选判定] |
| | | GATE -->|005 模板类型不符| GE5[105_005·两边类型中文名都给·前端按 reportType 预过滤] |
| | | GATE -->|006 无可用检验项| GE6[105_006] |
| | | GATE -->|通过·只允许同类型已发布模板| RP[智能质检报告平台 qcreport] |
| | | RP --> RPT[报告模板 qc_report_template·启用0停用1] |
| | | RPT --> RPTV[模板版本 qc_report_template_version·草稿0已发布1已停用2·当前版本不可停用 101_010] |
| | | RPTVSAVE[设计器保存 create 或 update] -->|写入侧闸门·规则101_006 与画布安全101_009 不合格一律不落库| RPTV |
| | | RPTVSAVE -.->|只卡新写入·存量脏画布不回溯核查| CVNOTE[画布校验覆盖三处注入面·tagName 属性名 整段CSS] |
| | | RPTV -->|按已发布版本渲染| RPI[报告实例 qc_report_instance·编号 QR+yyyyMMdd+4位流水·按天独立] |
| | | RPI --> SNAP[冻结 data_snapshot·判定后数据含 PASS FAIL 与合格率] |
| | | RPI --> RHTML[render_html 完整 HTML 文档·出站已剥离事件属性与危险协议] |
| | | RPI --> RREGEN[重新生成 regenerate·冻结快照+同一模板版本重渲·数据与编号不变·并作废已归档PDF] |
| | | RPI --> RPDF[导出PDF 后端调Chromium打印已存HTML·归档 system_storage_attachment·recordType=qc_report_instance] |
| | | RPI --> RUI[报告实例页 /qc/report-instance·菜单挂质量管理 parent_id=5500] |
| | | RUI -->|权限码| RPERM["qc-report:instance:query 查询·:export 导出PDF·:delete 删除·:create 通用出件·:generate 质检单出件(menu 1075416)"] |
| | | RUI -->|反查 businessType=mes_qc_iqc 等表名 + businessId| RBACK[同一张质检单可出多份报告·历史留痕需要·不做重复拦截] |
| | | RUI --> RPREVIEW[详情弹窗·iframe sandbox空属性渲染 render_html·数据快照页签展示冻结 data_snapshot] |
| | | A1 -.->|前端入口·行操作「出报告」仅 status=已完成可见| UIREP[出报告弹窗·IQC IPQC OQC RQC 四页共用] |
| | | A2 -.->|同上| UIREP |
| | | A3 -.->|同上| UIREP |
| | | A4 -.->|同上| UIREP |
| | | UIREP -->|只列 reportType 与本单一致·启用·当前版本已发布且画布非空·避免选中必被拒的组合| UIPICK[用户选模板] |
| | | UIPICK -->|POST generate-from-qc| GATE |
| | | UIREP -->|结果就地展示 reportNo itemCount| UIRES["undecidableCount>0 蓝色信息条(多为过程参数无判定规则·黄色会几乎每单误报)·warnings 与 errors 逐条展示·不落库事后看不到"] |
| | | UIRES -->|查看报告列表| RUI |
| | | RUI -->|路由 query 带入 businessType+businessId 并预填搜索| RBACK |
| | | GATE -->|MesQcReportApi.getQcReportData| MESMAP[MES 四层取数归一·单头 / 判定依据行 max min threshold / 样品 indicator_result / 实测值 result_detail] |
| | | MESMAP --> RCTX[报告上下文 report+inspectionItems·由后端映射器产出·前端不再自己拼] |
| | | RCTX --> RCITEM[检验项=样品×指标交叉展开·全指标进不过滤·多样品时样品号折进 remark] |
| | | RCTX --> RCQC[携带单据原判定 qcResult 数·qcResultText 中文·与引擎判定并存互不覆盖] |
| | | MESMAP -->|分组项 item_type=2 与它的子项按 parent_id 还原两层·归属不看 type 也不看行序| RCTXG |
| | | RCTXG["分组还原·组头行背组名与 formula_text 公式·组内第一行背 span=该组总行数·同组其余行 span=1 且 hidden 让位·合并的是模板 columns 里带 # 的那一列(默认列即检验项目)·合并行数是本单该组实际行数而非主数据子项数·该组本单无子项行则不合并"] --- RCTX |
| | | MESMAP -.->|分组项本单没有属于它的子项 / 组头本单没有行由后端补一行| RCWARN |
| | | MESMAP -.->|指标已删 / 未录实测值(组头锚点行按定义无值·不报) / 样品超 3 个·进 warnings| RCWARN |
| | | RCWARN[warnings 软提示·不落库·事后看不到需自行留痕] --- RCTX |
| | | RCITEM --- RCTX |
| | | RCQC --- RCTX |
| | | RCTX --> RPI |
| | | RCTX --> RUNDEC["undecidableCount 没有判定结论的项数=快照里 result 为空串的项·含无判定规则与待判定两种·不计入合格率分母与报告结论·生成时弹提示不回填"] |
| | | RPT -->|进入设计器并带 templateId·权限 qc-report:template:ai-import| AIIMP[AI导入 qc-report/ai-import/draft] |
| | | AISRC["源文件 扫描件照片·电子版PDF·Word(.docx) Excel(.xlsx)·txt csv"] -->|上传走 system Storage API 取 blobId·绑为 qc_report_template 附件| AIIMP |
| | | AISRC -.->|同一模板重复导入按替换处理·先删旧附件再绑新的·连同 blob 行与磁盘文件一起清| AIIMP |
| | | AISRC -.->|docx 的 Word 页眉页脚读取并以 页眉 页脚 标记并入识别内容·页眉在正文前页脚在正文后·同时进 warnings·扫描件照片不受影响| AIIMP |
| | | AIIMP -->|识别·只产草稿不落库| AIRD[模板草稿 扁平组件+属性清单] |
| | | AIHINT[积木清单每项带 hint 选型说明·来自前端注册表 aiHint·组件选型的唯一真相来源] -.->|选型以 hint 为准·有专门组件就不退用通用组件凑数| AIIMP |
| | | AIIMP -->|表格末行的落款签署行属落款不属数据行·与原件页脚合并且人名日期留空手填·不得自造绑定键| AIRD |
| | | AIIMP -.->|原件列比默认多或表头分两层或样品字段不同时·写进组件的 columns headerSpans fields 三个文本属性覆盖·不换组件| AIRD |
| | | AIKEY[报告可绑定键白名单·由后端 ReportFields 反射生成·不手写] -.->|只禁编造不给可选集合模型只能猜·故全量枚举| AIIMP |
| | | AIRD -->|人工在设计器确认·装配器编译进画布后保存| RPTV |
| | | AIRD -.->|画布上的 ReportHeader ReportFooter 是正文里的抬头落款·与 PDF 每页重复的版式页眉页脚不是一回事| RPTV |
| | | AIIMP -.->|表头某列自己既是列名又是上格·原件里是一格纵向合并跨住上下两层、下层那格在提取文本里写着↑同上| AIRD |
| | | AIIMP -.->|该段标题与列名一字不差才认成纵向合并格、出 rowspan=2 一格且下层跳过该列·不一致就被当成另一层分组标题、结论二字上下各印一遍| AIRD |
| | | RPTVSAVE -.->|设计器画布不跑绑定·组名格的 hidden 占位符会被浏览器当成真 hidden 让整行左移、末列挤成竖排细条| CVNOTE |
| | | RPTVSAVE -.->|自定列不带宽度声明·列宽只能由最小内容宽度倒推·而值是占位符这类不含空格的长串·整表会被撑出纸张、末列挤成竖条| CVWIDTH |
| | | CVWIDTH["故自定列的单元格带 overflow-wrap:anywhere 允许长串折行·默认列有手工宽度声明不加·实测加了反而把检验项目子项挤到 30 余像素、行高翻几倍"] --- RPTVSAVE |