| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485 |
- # -*- coding: utf-8 -*-
- """生成投标技术方案的总体架构类配图(8 张)。"""
- import sys
- sys.path.insert(0, __file__.rsplit("\\", 1)[0] if "\\" in __file__ else ".")
- sys.stdout.reconfigure(encoding="utf-8", errors="replace")
- from _bid_fig_kit import C, Fig, row
- # ==================================================================== 图1
- def fig_otd_blueprint():
- f = Fig("Ai-DOP 制造业数据智能运营平台 OTD 端到端总体业务蓝图",
- w=13.6, h=10.4,
- sub="以销售订单为主线,贯通 S0~S9 全流程;下层数据中台完成「采—存—治—用」,上层实现指标测量、智能诊断与改善闭环")
- # --- S0 运营建模(基座)
- f.panel(3, 90, 94, 9.0, "S0 运营建模(主数据与流程标准化)", tone="gray")
- s0 = row(6, 87.4, 20.5, 4.6, 4, 2.6,
- ["客户/供应商主数据", "物料主数据\n(18位统一编码)",
- "工艺主数据\n(标准工序库·工艺路线)", "订单模板与流程SOP"], f,
- tone="gray", fs=8.4)
- # --- OTD 业务主线
- f.panel(3, 79, 94, 22.0, "OTD 业务主线(订单接收 → 产品交付)", tone="blue")
- r1 = row(6, 75.6, 13.6, 5.0, 6, 2.2,
- ["销售订单接收\nS1", "订单评审\n交期评估 S1", "交付承诺与\n全流程跟踪 S1",
- "主生产计划\n产能平衡 S2", "作业计划下达\nS2", "物料需求计划\nMRP S3"], f,
- tone="blue", fs=8.4)
- r2 = row(6, 66.4, 13.6, 5.0, 6, 2.2,
- ["采购申请\n采购订单 S3", "供应商交货\n执行 S4", "来料检验IQC\n入库 S5",
- "生产执行\n过程检验 S6", "成品入库\nFQC 检验 S7", "销售发货\n交付客户 S1/S7"], f,
- tone="green", fs=8.4)
- f.chain(r1)
- f.chain(r2)
- wrap_y = 68.5
- f.arrow(r1[5]["b"], (r1[5]["c"][0], wrap_y), style="-")
- f.arrow((r1[5]["c"][0], wrap_y), (r2[0]["c"][0], wrap_y), style="-")
- f.arrow((r2[0]["c"][0], wrap_y), r2[0]["t"])
- f.note(6, 58.8, "变更管理:节点进度滞后 10% / 30% 或确认无法按期交付 → 自动预警 → 交付变更审批 → 与客户协商新交期并同步订单状态",
- fs=8.0, color="#404040")
- # --- S8 异常监控
- f.panel(3, 55.5, 94, 9.5, "S8 全流程异常监控", tone="orange")
- s8 = row(6, 52.4, 20.5, 5.0, 4, 2.6,
- ["异常识别与提报\n(系统自动 / 人工)", "分级响应\n一般·重要·紧急(≤1h)",
- "处理闭环\n措施与结果录入", "AI 智能体集群\n7×24 感知与预警驱动"], f,
- tone="orange", fs=8.4)
- f.chain(s8)
- # --- S9 运营绩效
- f.panel(3, 44.5, 94, 11.0, "S9 运营绩效指标测量与智能运营", tone="purple")
- s9 = row(6, 41.0, 16.2, 5.4, 5, 2.5,
- ["KPI 定义与日批计算\nOTD·OEE·交付率·合格率·周转",
- "九宫格智慧运营看板\n部门看板 · L1–L4 下钻",
- "运营问题诊断\n7 维根因溯源",
- "改善闭环\n建档·派单·跟踪·复盘",
- "ChatBI 智能报表\n自然语言问数"], f, tone="purple", fs=8.2)
- f.chain(s9[:4])
- f.arrow(s9[1]["b"], (s9[4]["c"][0], s9[1]["b"][1] - 1.6), style="-", dashed=True)
- f.arrow((s9[4]["c"][0], s9[1]["b"][1] - 1.6), s9[4]["b"], dashed=True)
- # --- 数据中台
- f.panel(3, 32.5, 94, 11.5, "数据中台(采 · 存 · 治 · 用)", tone="teal")
- dt = row(6, 28.8, 16.2, 5.0, 5, 2.5,
- ["STG 贴源层\n原样落地", "STD 标准层\n清洗·编码统一", "DWD 明细宽表\n主题化关联",
- "DWS / KPI 指标层\n日批聚合", "应用消费\n看板·诊断·ChatBI"], f,
- tone="teal", fs=8.2)
- f.chain(dt)
- f.note(6, 22.2, "数据治理:字段标准化、空值过滤、异常值标记、编码统一;数据质量准确率 ≥ 98%,主数据与单据状态同步延迟 ≤ 5 分钟",
- fs=8.0, color="#404040")
- # --- 系统集成
- f.panel(3, 20.0, 94, 17.5,
- "系统集成层(多源异构接入采集 ↑ 入站 · 业务结果 ↓ 出站回写)", tone="red")
- src = row(6, 16.6, 13.6, 4.4, 6, 2.2,
- ["ERP", "MES", "QMS / IQC", "SRM / 供应商门户", "WMS / 仓储", "CRM · TMS · OA"], f,
- tone="red", fs=8.6)
- f.note(6, 10.0,
- "接入方式:数据库直连 · HTTP-API · WebService · FTP 文件 · MQ 消息 · 物联网网关(6 种) | "
- "同步模式:定时同步 + 实时同步",
- fs=8.2, color="#404040")
- f.note(6, 6.6,
- "出站回写:统一 Outbox 事务表 → API 推送 → 回执核对 → 失败重试 / 断点续传,不重复入库、不丢数据",
- fs=8.2, color="#404040")
- f.note(6, 3.2,
- "移动端应用:生产执行 · 仓储物流 · 质量管理 · 协同决策(订单进度、供应商协同、决策看板与下钻)",
- fs=8.2, color="#404040")
- return f.save("fig_otd_blueprint")
- # ==================================================================== 图2
- def fig_application():
- f = Fig("应用架构", w=13.0, h=9.2,
- sub="五层分域架构:接入展现 — 业务应用 — 领域服务 — 数据服务 — 集成适配,横向贯穿安全与运维两大支撑体系")
- f.panel(3, 88, 78, 11.0, "① 接入与展现层", tone="blue")
- row(6, 84.6, 16.6, 5.2, 4, 2.6,
- ["PC 门户\nVue3 + Element Plus", "管理层大屏\n九宫格 / 部门看板",
- "移动端应用\n生产·仓储·质量·决策", "ChatBI 对话入口\n浮窗 / 独立页"], f,
- tone="blue", fs=8.4)
- f.panel(3, 75.5, 78, 15.0, "② 业务应用层(S0~S9)", tone="green")
- row(6, 72.1, 10.6, 4.8, 6, 1.9,
- ["S0 运营建模", "S1 产销协同", "S2 制造协同", "S3 供应协同",
- "S4 采购执行", "S5 物料仓储"], f, tone="green", fs=8.2)
- row(6, 65.7, 10.6, 4.8, 6, 1.9,
- ["S6 生产执行", "S7 成品仓储", "S8 异常监控", "S9 指标看板",
- "运营诊断", "改善闭环"], f, tone="green", fs=8.2)
- f.panel(3, 59.0, 78, 14.0, "③ 领域服务层(可复用业务能力)", tone="purple")
- row(6, 55.6, 13.6, 5.0, 5, 2.2,
- ["订单与交付\n评审·承诺·跟踪", "计划与排程\nMPS·MRP·产能",
- "采购与供应\n申请·订单·交货", "质量与追溯\nIQC·IPQC·FQC",
- "指标与诊断\nKPI·根因·改善"], f, tone="purple", fs=8.2)
- row(6, 49.1, 13.6, 4.0, 5, 2.2,
- ["工作流与审批", "消息与预警", "报表与导出", "任务调度", "多租户与权限"], f,
- tone="purple", fs=8.2)
- f.panel(3, 43.5, 78, 12.5, "④ 数据服务层(数据中台)", tone="teal")
- row(6, 40.1, 13.6, 5.0, 5, 2.2,
- ["贴源 STG", "标准 STD", "明细宽表 DWD", "指标 DWS / KPI", "主数据 MDM"], f,
- tone="teal", fs=8.4)
- f.note(6, 33.4, "数据治理:标准化 · 去重 · 空值过滤 · 异常标记 · 编码统一 · 血缘与质量稽核",
- fs=8.2, color="#404040")
- f.panel(3, 29.5, 78, 14.0, "⑤ 集成适配层", tone="red")
- row(6, 26.1, 10.6, 4.6, 6, 1.9,
- ["DB 直连", "HTTP-API", "WebService", "FTP 文件", "MQ 消息", "IoT 网关"], f,
- tone="red", fs=8.4)
- row(6, 20.2, 16.6, 4.6, 4, 2.6,
- ["可视化通道配置", "定时 / 实时调度", "同步监控与告警", "Outbox 出站回写"], f,
- tone="red", fs=8.4)
- f.panel(3, 14.0, 78, 13.0, "外部业务系统", tone="gray")
- row(6, 10.6, 10.6, 4.6, 6, 1.9,
- ["ERP", "MES", "QMS", "SRM", "WMS", "CRM / TMS / OA"], f,
- tone="gray", fs=8.6)
- f.note(6, 3.6, "工业互联网平台:OAuth2.0 单点登录(SSO),员工一次登录即可访问 Ai-DOP",
- fs=8.4, color="#404040")
- # 右侧纵向支撑体系
- f.box(83, 88, 6.5, 87.0, "安\n全\n体\n系\n\n数\n据\n·\n应\n用\n·\n网\n络\n·\n审\n计",
- tone="blue_d", fs=8.8)
- f.box(90.5, 88, 6.5, 87.0, "运\n维\n体\n系\n\n监\n控\n·\n日\n志\n·\n备\n份\n·\n扩\n容",
- tone="gold", fs=8.8)
- f.crop(0)
- return f.save("fig_application")
- # ==================================================================== 图3
- def fig_data():
- f = Fig("数据架构:数据中台「采—存—治—用」", w=13.4, h=7.4,
- sub="统一数据底座支撑 KPI 测量、智能诊断、BI 可视化与 AI 应用;主数据「一处修改、全系统同步」")
- f.panel(3, 90, 17, 56, "采(多源采集)", tone="red")
- row(5, 85.5, 13, 6.0, 1, 0, ["ERP\n主数据·订单·库存"], f, tone="red", fs=8.4)
- row(5, 78.0, 13, 6.0, 1, 0, ["MES\n工单·工序·设备"], f, tone="red", fs=8.4)
- row(5, 70.5, 13, 6.0, 1, 0, ["QMS\nIQC·IPQC·FQC"], f, tone="red", fs=8.4)
- row(5, 63.0, 13, 6.0, 1, 0, ["SRM / WMS\n交货·出入库"], f, tone="red", fs=8.4)
- row(5, 55.5, 13, 6.0, 1, 0, ["CRM·TMS·OA·IoT"], f, tone="red", fs=8.4)
- f.note(5, 46.0, "直连 / API /\nWebService /\nFTP / MQ /\nIoT 网关", fs=8.2)
- f.panel(22, 90, 34, 56, "存 + 治(分层建模与治理)", tone="teal")
- a = f.box(24.5, 85.5, 29, 6.0, "STG 贴源层 原样落地 · 不做业务改写", tone="teal", fs=8.6)
- b = f.box(24.5, 76.5, 29, 6.0, "STD 标准层 字段标准化 · 编码统一 · 空值过滤 · 异常标记",
- tone="teal", fs=8.0)
- c = f.box(24.5, 67.5, 29, 6.0, "DWD 明细宽表 按订单主线主题化关联", tone="teal", fs=8.6)
- d = f.box(24.5, 58.5, 29, 6.0, "DWS / KPI 指标层 日批聚合 · L1–L4 分层指标",
- tone="teal", fs=8.4)
- for x, y in zip([a, b, c], [b, c, d]):
- f.arrow(x["b"], y["t"])
- f.obox(24.5, 49.5, 14, 6.0, "MDM 主数据\n客户·供应商·物料·工艺", tone="teal", fs=8.0)
- f.obox(39.5, 49.5, 14, 6.0, "元数据 · 血缘\n质量稽核规则", tone="teal", fs=8.0)
- f.note(24.5, 40.5, "质量目标:数据准确率 ≥ 98%;主数据与单据状态同步延迟 ≤ 5 分钟(异常 ≤ 15 分钟)",
- fs=8.2, color="#404040")
- f.panel(57, 90, 40, 56, "用(数据消费)", tone="purple")
- u1 = f.box(59.5, 85.5, 16.5, 6.0, "九宫格智慧运营看板", tone="purple", fs=8.6)
- u2 = f.box(78, 85.5, 16.5, 6.0, "部门看板 / 自助下钻", tone="purple", fs=8.6)
- u3 = f.box(59.5, 76.5, 16.5, 6.0, "运营问题诊断", tone="purple", fs=8.6)
- u4 = f.box(78, 76.5, 16.5, 6.0, "改善闭环与效果验证", tone="purple", fs=8.4)
- u5 = f.box(59.5, 67.5, 16.5, 6.0, "ChatBI 智能报表", tone="purple", fs=8.6)
- u6 = f.box(78, 67.5, 16.5, 6.0, "S8 异常预警与 AI 智能体", tone="purple", fs=8.0)
- f.box(59.5, 58.5, 35, 6.0, "Outbox 出站回写 → ERP / MES 等业务系统", tone="orange", fs=8.6)
- f.note(59.5, 49.0,
- "KPI 示例口径:\n"
- "· 产销协同 OTD 交付率 = 按时交付订单数 / 总订单数 × 100%\n"
- "· 生产执行 OEE = 可用率 × 表现率 × 质量率 × 100%\n"
- "· 采购供应 供应商交付率 = 按时交付批数 / 总采购批数 × 100%\n"
- "· 质量 成品合格率 = 合格成品数 / 总生产数 × 100%\n"
- "· 库存周转 库存周转天数 = 库存数量 / 日均用量",
- fs=8.0, color="#404040", va="top")
- f.arrow((20.0, 60), (24.0, 60), lw=1.6)
- f.arrow((54.0, 60), (58.5, 60), lw=1.6)
- f.crop(30)
- return f.save("fig_data")
- # ==================================================================== 图4
- def fig_tech():
- f = Fig("技术架构", w=13.0, h=7.6,
- sub="主流开源技术栈 + 容器化部署;前后端分离、服务可水平扩展、支持信创环境适配")
- f.panel(3, 91, 94, 12.5, "客户端", tone="blue")
- row(6, 87.6, 21.5, 5.4, 4, 2.4,
- ["浏览器\nChrome / Edge / 国产浏览器", "移动端\n企业微信 / 钉钉 / H5",
- "大屏终端\n看板一体机", "开放 API 调用方"], f, tone="blue", fs=8.2)
- f.note(6, 80.6, "HTTPS / TLS 1.2+", fs=8.2)
- f.panel(3, 77.5, 94, 8.0, "接入层", tone="gray")
- row(6, 74.6, 21.5, 4.6, 4, 2.4,
- ["Nginx 反向代理 · 负载均衡", "API 网关 · 统一鉴权限流",
- "OAuth2.0 / JWT · SSO", "静态资源 CDN / 缓存"], f, tone="gray", fs=8.2)
- f.panel(3, 68.5, 94, 15.0, "应用层", tone="green")
- row(6, 65.2, 13.6, 5.4, 6, 2.2,
- ["前端\nVue 3 + TypeScript\nElement Plus · ECharts",
- "后端\n.NET 8 + Admin.NET\n分层架构",
- "ORM\nSqlSugar\n多库适配",
- "工作流\n审批流引擎",
- "任务调度\n日批 / 定时同步",
- "集成执行器\nDB Pull · API Push"], f, tone="green", fs=7.8)
- row(6, 57.4, 21.5, 4.6, 4, 2.4,
- ["多租户隔离", "RBAC 权限与数据权限", "操作 / 登录审计日志", "AI 能力接入(LLM)"], f,
- tone="green", fs=8.2)
- f.panel(3, 52.0, 94, 13.5, "数据层", tone="teal")
- row(6, 48.6, 17.4, 5.4, 5, 2.4,
- ["MySQL 8\n业务库", "MySQL 8\n数据中台库(MDP)",
- "Redis\n缓存 · 会话 · 分布式锁", "对象存储 / 文件服务\n附件·标签·报表",
- "SQL Server / 达梦\n源库只读适配"], f, tone="teal", fs=8.0)
- f.note(6, 41.6, "读写分离与索引优化;大表分区与归档;备份策略:全量日备 + 增量,异地留存",
- fs=8.2, color="#404040")
- f.panel(3, 38.5, 94, 12.0, "运行与部署", tone="orange")
- row(6, 35.2, 17.4, 5.4, 5, 2.4,
- ["Docker 容器化", "Docker Compose /\nK8s 编排", "多环境\n开发·测试·UAT·生产",
- "CI/CD 流水线", "灰度发布与回滚"], f, tone="orange", fs=8.0)
- f.note(6, 28.2, "可用性目标:全年 ≥ 99%;关键组件高可用部署;重大故障力争 48 小时内恢复",
- fs=8.2, color="#404040")
- f.panel(3, 25.0, 94, 14.5, "监控 · 安全 · 运维", tone="red")
- row(6, 21.6, 13.6, 5.0, 6, 2.2,
- ["应用与接口监控", "同步任务监控告警", "集中日志检索",
- "数据加密与脱敏", "漏洞扫描与补丁", "备份恢复演练"], f, tone="red", fs=8.0)
- f.note(6, 14.6,
- "性能目标:常规页面与查询 ≤ 30 秒,复杂查询 / 多图联动 ≤ 60 秒,接口成功率 ≥ 99%;"
- "约 1000 人在线、400 人并发;超大导出与 AI 任务按异步任务处理",
- fs=8.2, color="#404040")
- f.crop(7)
- return f.save("fig_tech")
- # ==================================================================== 图5
- def fig_integration():
- f = Fig("系统集成与接口架构", w=13.2, h=7.2,
- sub="6 种接入方式 × 定时/实时双模式;可视化配置新增一套第三方系统 ≤ 4 小时,无需大量编码")
- f.panel(3, 90, 21, 74, "源系统", tone="gray")
- names = ["ERP\n主数据·订单·库存·财务", "MES\n工单·工序·设备·报工",
- "QMS\n来料·过程·成品检验", "SRM / 供应商门户\n交货计划·发货单",
- "WMS\n出入库·库存·盘点", "CRM · TMS · OA · IoT"]
- srcs = []
- for i, t in enumerate(names):
- srcs.append(f.box(5.5, 85.5 - i * 11.5, 16, 7.6, t, tone="gray", fs=7.8))
- f.panel(26, 90, 30, 74, "集成通道(采集与治理)", tone="red")
- ways = f.box(28.5, 85.5, 25, 12.0,
- "接入方式(6 种)\n数据库直连 · HTTP-API · WebService\nFTP 文件 · MQ 消息 · 物联网网关",
- tone="red", fs=8.2)
- mode = f.box(28.5, 71.0, 25, 8.0, "同步模式\n定时同步(夜间批量) · 实时同步", tone="red", fs=8.4)
- cfg = f.box(28.5, 60.5, 25, 8.0, "可视化通道配置\n数据源 · 实体映射 · 调度策略", tone="red", fs=8.2)
- cln = f.box(28.5, 50.0, 25, 9.5,
- "清洗与标准化\n字段标准化 · 空值过滤\n异常值标记 · 编码统一", tone="red", fs=8.2)
- mon = f.box(28.5, 37.5, 25, 9.5,
- "监控与容错\n同步日志 · 异常告警\n断点续传 · 重试去重", tone="red", fs=8.2)
- for a, b in zip([ways, mode, cfg, cln], [mode, cfg, cln, mon]):
- f.arrow(a["b"], b["t"])
- for s in srcs:
- f.arrow(s["r"], (27.6, s["r"][1]), lw=0.9)
- f.panel(58, 90, 18, 74, "统一数据底座", tone="teal")
- st = [f.box(60, 85.5, 14, 8.0, "STG 贴源", tone="teal", fs=8.8),
- f.box(60, 74.5, 14, 8.0, "STD 标准", tone="teal", fs=8.8),
- f.box(60, 63.5, 14, 8.0, "DWD 宽表", tone="teal", fs=8.8),
- f.box(60, 52.5, 14, 8.0, "DWS / KPI", tone="teal", fs=8.8)]
- for a, b in zip(st, st[1:]):
- f.arrow(a["b"], b["t"])
- f.arrow(mon["r"], (59.2, mon["r"][1]), lw=1.4)
- f.box(60, 40.0, 14, 9.5, "mdp_outbox\n出站事务表", tone="orange", fs=8.4)
- f.panel(78, 90, 19, 74, "上层应用 / 回写", tone="purple")
- ups = ["九宫格看板", "部门看板与下钻", "运营问题诊断", "改善闭环",
- "ChatBI 智能报表", "S8 异常预警"]
- for i, t in enumerate(ups):
- f.box(80, 85.5 - i * 8.0, 15, 6.0, t, tone="purple", fs=8.4)
- f.arrow(st[3]["r"], (79.2, st[3]["r"][1]), lw=1.4)
- ob = f.box(80, 37.0, 15, 8.5, "API 推送回写\nERP / MES 回执核对", tone="orange", fs=8.2)
- f.arrow((74.2, 35.2), ob["l"], lw=1.4)
- f.note(4, 13.5,
- "性能与适配指标:实时同步业务数据变更推送时延 ≤ 2–5 秒;夜间批量 1000 万条明细传输 + 清洗转换 ≤ 30 分钟;"
- "网络中断恢复后自动断点续传,不重复入库、不丢失数据;\n"
- "适配主流国产及通用 ERP / MES / WMS;凭据加密托管,前端不明文展示密钥;"
- "外部系统超时或不可用导致的延迟不计入本平台性能指标。",
- fs=8.4, color="#404040", va="top")
- f.crop(2)
- return f.save("fig_integration")
- # ==================================================================== 图6
- def fig_diagnosis():
- f = Fig("智能诊断与分析架构", w=13.2, h=7.0,
- sub="以销售订单为主线贯通全链路;实时类问题识别 ≤ 3 分钟,周期类问题每日定时分析;支持 7 个维度根因下钻")
- f.panel(3, 90, 94, 15.0, "① 端到端数据链路(以销售订单为主线)", tone="blue")
- ch = row(5.5, 86.6, 10.6, 5.6, 8, 1.4,
- ["需求预测", "销售订单", "采购计划", "来料入库",
- "车间生产", "半成品流转", "成品入库", "发货配送"], f, tone="blue", fs=8.2)
- f.chain(ch)
- f.note(5.5, 78.6, "断点识别:任一节点缺失前序单据、状态未流转或时间倒挂,即判定为链路断点",
- fs=8.2, color="#404040")
- f.panel(3, 74.0, 46, 26.0, "② 异常识别(规则 + 模型)", tone="orange")
- ex = ["断点\n单据链中断", "滞后\n节点超时效", "损耗\n物料/工时异常",
- "供需失衡\n计划与产能错配", "库存积压\n呆滞与周转恶化", "交付延期\nOTD 未达标",
- "产能浪费\n设备与人效低", "物流低效\n发运与配送滞后"]
- for i, t in enumerate(ex):
- f.box(5.5 + (i % 4) * 10.6, 70.6 - (i // 4) * 8.6, 9.4, 6.6, t,
- tone="orange", fs=7.8)
- f.note(5.5, 53.0,
- "实时类(缺料 · 生产停滞 · 发货延迟)识别延迟 ≤ 3 分钟\n"
- "周期类(库存积压 · 供需失衡 · 产能利用率)每日定时执行分析",
- fs=8.2, color="#404040", va="top")
- f.panel(51, 74.0, 46, 26.0, "③ 根因溯源(7 维下钻)", tone="purple")
- dims = ["订单", "物料", "供应商", "产线", "仓库", "时间段", "人员"]
- for i, t in enumerate(dims):
- f.box(53.5 + (i % 4) * 10.6, 70.6 - (i // 4) * 8.6, 9.4, 6.6, t,
- tone="purple", fs=9.4)
- f.box(85.3, 62.0, 9.4, 6.6, "多维关联\n算法", tone="purple", fs=8.0)
- f.note(53.5, 53.0,
- "从指标 → 明细单据 → 责任维度逐级下钻,每条结论均可追溯到订单主线或指标编码,保留证据快照",
- fs=8.2, color="#404040", va="top")
- f.panel(3, 46.0, 94, 16.0, "④ 诊断输出与改善闭环", tone="green")
- out = row(5.5, 42.6, 16.6, 6.6, 5, 2.6,
- ["运营诊断报告\n结论·根因·证据", "改善策略建议\n可落地措施清单",
- "问题建档\n生成改善任务", "整改派单与跟踪\n责任人·行动项·进度",
- "效果量化复盘\n基线 vs 当前 KPI"], f, tone="green", fs=8.0)
- f.chain(out)
- f.note(5.5, 33.0,
- "闭环规则:改善单必须关联诊断问题或指标编码,保证端到端可追溯;效果验证须保留基线值、目标值与验证结论;"
- "复盘通过后沉淀为标准化管控规则并回写运营建模(S0)。",
- fs=8.2, color="#404040", va="top")
- f.panel(3, 26.0, 94, 12.0, "⑤ 支撑能力", tone="teal")
- row(5.5, 22.6, 16.6, 5.6, 5, 2.6,
- ["统一数据抽取\nSTG→STD→DWD", "指标计算引擎\n日批 + 触发式",
- "阈值与规则库\n可配置", "AI 智能体集群\n7×24 感知预警",
- "ChatBI\n自然语言追问"], f, tone="teal", fs=8.0)
- f.crop(11)
- return f.save("fig_diagnosis")
- # ==================================================================== 图7
- def fig_kanban():
- f = Fig("九宫格智慧运营看板与指标下钻结构", w=12.4, h=7.4,
- sub="管理层一屏总览 → 部门看板 → 指标下钻 → 明细证据 → 诊断改善,五级贯通")
- f.panel(3, 90, 45, 72, "九宫格智慧运营看板(管理层大屏)", tone="blue")
- grid = [("S1 产销协同", "OTD 交付率"), ("S2 制造协同", "计划达成率"),
- ("S3 供应协同", "物料齐套率"), ("S4 采购执行", "供应商交付率"),
- ("S5 物料仓储", "库存周转天数"), ("S6 生产执行", "设备 OEE"),
- ("S7 成品仓储", "成品合格率"), ("S8 异常监控", "异常闭环率"),
- ("S9 运营指标", "综合运营指数")]
- for i, (m, k) in enumerate(grid):
- f.box(5.5 + (i % 3) * 13.8, 85.5 - (i // 3) * 18.0, 12.6, 15.0,
- f"{m}\n\n{k}\n\n● 红 / 黄 / 绿", tone="blue", fs=8.2)
- f.note(5.5, 30.5,
- "红黄绿状态由指标阈值判定;点击任一格子进入对应部门看板或模块详情看板;\n"
- "顶栏统一展示异常预警摘要与待办改善任务数。",
- fs=8.2, color="#404040", va="top")
- f.panel(50, 90, 22, 72, "部门看板", tone="green")
- dept = [("生产部", "工单进度\n设备 OEE\n工序瓶颈分析"),
- ("采购部", "供应商交付排行\n物料齐套率\n逾期订单"),
- ("质量部", "各环节不合格率\n成品与半成品不良率")]
- for i, (d, k) in enumerate(dept):
- f.box(52.5, 85.5 - i * 19.5, 17, 16.5, f"{d}\n\n{k}", tone="green", fs=8.2)
- f.note(52.5, 30.5, "按角色与数据权限\n分发;空数据友好提示", fs=8.2, va="top")
- f.panel(74, 90, 23, 72, "指标下钻与自助分析", tone="purple")
- lv = [("L1", "模块级核心 KPI"), ("L2", "维度分解指标"),
- ("L3", "过程 / 工序级指标"), ("L4", "单据 · 批次明细")]
- boxes = []
- for i, (l, t) in enumerate(lv):
- boxes.append(f.box(76.5, 85.5 - i * 11.0, 18, 8.0, f"{l} {t}",
- tone="purple", fs=8.6))
- for a, b in zip(boxes, boxes[1:]):
- f.arrow(a["b"], b["t"])
- f.box(76.5, 41.5, 18, 8.0, "进入运营问题诊断", tone="orange", fs=8.8)
- f.arrow(boxes[3]["b"], (85.5, 41.5))
- f.note(76.5, 30.5,
- "支持按时间、产品、客户、\n供应商等条件自助筛选;\n"
- "示例:成品合格率 → 某工序\n不合格明细。",
- fs=8.2, va="top")
- f.crop(14)
- return f.save("fig_kanban")
- # ==================================================================== 图8
- def fig_closedloop():
- f = Fig("异常发现 → 诊断 → 改善 → 验证 闭环管理逻辑", w=12.6, h=6.6,
- sub="PDCA 闭环:任何一次异常都必须走完「发现—定位—整改—验证—固化」,未验证通过不得关闭")
- steps = [
- ("① 发现\n异常识别与提报", "orange",
- "系统自动触发 / 人工提报\n实时类 ≤ 3 分钟"),
- ("② 定级\n分级响应", "orange",
- "一般 · 重要 · 紧急\n紧急异常 ≤ 1 小时响应"),
- ("③ 诊断\n根因溯源", "purple",
- "7 维下钻取证\n输出运营诊断报告"),
- ("④ 建档\n改善任务生成", "green",
- "关联指标与诊断结论\n明确目标值与期限"),
- ("⑤ 派单\n责任人与行动项", "green",
- "复用平台审批流\n进入责任人待办"),
- ("⑥ 执行\n过程跟踪", "green",
- "行动项状态更新\n进度可视、超期提醒"),
- ("⑦ 验证\n效果量化复盘", "blue",
- "基线值 vs 当前 KPI\n未达标退回继续改善"),
- ("⑧ 固化\n标准规则沉淀", "blue",
- "回写 S0 运营建模\n形成 SOP 与管控规则"),
- ]
- xs = [4, 28, 52, 76]
- ys = [82, 50]
- nodes = []
- for i, (t, tone, desc) in enumerate(steps):
- x, y = xs[i % 4], ys[i // 4]
- n = f.box(x, y, 20, 13.0, t, tone=tone, fs=9.6)
- f.note(x + 10, y - 16.0, desc, fs=8.2, ha="center", color="#404040")
- nodes.append(n)
- for i in range(3):
- f.arrow(nodes[i]["r"], nodes[i + 1]["l"], lw=1.4)
- f.arrow(nodes[i + 4]["r"], nodes[i + 5]["l"], lw=1.4)
- f.arrow(nodes[3]["b"], (nodes[3]["c"][0], 62.0), style="-", lw=1.4)
- f.arrow((nodes[3]["c"][0], 62.0), (nodes[4]["c"][0], 62.0), style="-", lw=1.4)
- f.arrow((nodes[4]["c"][0], 62.0), nodes[4]["t"], lw=1.4)
- # 回环:沿左侧外缘回到 ①,避免与 ④→⑤ 折线共用同一列
- lx = 1.6
- f.arrow(nodes[7]["b"], (nodes[7]["c"][0], 26.0), style="-", lw=1.4, dashed=True)
- f.arrow((nodes[7]["c"][0], 26.0), (lx, 26.0), style="-", lw=1.4, dashed=True)
- f.arrow((lx, 26.0), (lx, 88.5), style="-", lw=1.4, dashed=True)
- f.arrow((lx, 88.5), (nodes[0]["c"][0], 88.5), style="-", lw=1.4, dashed=True)
- f.arrow((nodes[0]["c"][0], 88.5), nodes[0]["t"], lw=1.4, dashed=True)
- f.note(52, 23.0, "持续治理:规则固化后回到监控环节,形成螺旋上升的运营改善循环",
- fs=8.6, ha="center", color="#404040")
- f.panel(4, 18.0, 92, 13.0, "闭环刚性约束", tone="gray")
- f.note(6, 14.0,
- "· 改善单必须关联诊断问题或指标编码,端到端可追溯 · 派单复用平台审批流,不另建孤立任务系统\n"
- "· 效果验证须保留基线值、目标值与验证结论 · 验证未通过的改善单不得关闭,自动退回继续改善\n"
- "· 所有异常与改善记录留痕,支持按周期统计闭环率与平均闭环时长",
- fs=8.4, color="#404040", va="top")
- f.crop(2)
- return f.save("fig_closedloop")
- if __name__ == "__main__":
- print("生成技术方案配图:")
- fig_otd_blueprint()
- fig_application()
- fig_data()
- fig_tech()
- fig_integration()
- fig_diagnosis()
- fig_kanban()
- fig_closedloop()
- print("完成。")
|