Files
ONE-OS/scripts/generate_lingniu_cyberpunk_ppt.py
王冕 a27e3b8e43 feat: sync full workspace including web modules, docs, and configurations to Gitea
Optimized the root .gitignore to exclude virtual environments, node modules,
and temp folders to ensure clean and lightweight version tracking.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-09 18:12:25 +08:00

373 lines
14 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""羚牛数智中心建设规划 — 赛博朋克风格 PPT"""
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.shapes import MSO_SHAPE
OUT = "/Users/sylvawong/Desktop/羚牛数智中心建设规划_赛博朋克.pptx"
# 赛博朋克配色
BG_DARK = RGBColor(6, 10, 28)
BG_PANEL = RGBColor(12, 18, 48)
CYAN = RGBColor(0, 245, 255)
MAGENTA = RGBColor(255, 0, 140)
PURPLE = RGBColor(140, 80, 255)
GOLD = RGBColor(255, 210, 60)
WHITE = RGBColor(235, 245, 255)
SILVER = RGBColor(160, 180, 210)
DIM = RGBColor(90, 110, 150)
SLIDE_W = Inches(13.333)
SLIDE_H = Inches(7.5)
def set_bg(slide, color=BG_DARK):
slide.background.fill.solid()
slide.background.fill.fore_color.rgb = color
def add_glow_bar(slide, left, top, width, height, color):
sh = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, left, top, width, height)
sh.fill.solid()
sh.fill.fore_color.rgb = color
sh.line.fill.background()
return sh
def add_corner_accents(slide):
add_glow_bar(slide, Inches(0), Inches(0), Inches(0.12), SLIDE_H, CYAN)
add_glow_bar(slide, SLIDE_W - Inches(0.08), Inches(0), Inches(0.08), SLIDE_H, MAGENTA)
add_glow_bar(slide, Inches(0), SLIDE_H - Inches(0.06), SLIDE_W, Inches(0.06), PURPLE)
def add_header(slide, title, subtitle=None):
add_corner_accents(slide)
add_glow_bar(slide, Inches(0.8), Inches(1.05), Inches(3.5), Pt(4), CYAN)
tb = slide.shapes.add_textbox(Inches(0.8), Inches(0.45), Inches(11.5), Inches(0.9))
p = tb.text_frame.paragraphs[0]
p.text = title
p.font.size = Pt(32)
p.font.bold = True
p.font.color.rgb = WHITE
if subtitle:
tb2 = slide.shapes.add_textbox(Inches(0.8), Inches(1.15), Inches(11), Inches(0.5))
p2 = tb2.text_frame.paragraphs[0]
p2.text = subtitle
p2.font.size = Pt(14)
p2.font.color.rgb = CYAN
def add_bullets(slide, items, top=Inches(1.6), left=Inches(0.9), width=Inches(11.2)):
tb = slide.shapes.add_textbox(left, top, width, Inches(5.2))
tf = tb.text_frame
tf.word_wrap = True
for i, (text, accent) in enumerate(items):
p = tf.paragraphs[0] if i == 0 else tf.add_paragraph()
p.text = "" + text
p.font.size = Pt(16 if len(text) < 80 else 14)
p.font.color.rgb = accent if accent else SILVER
p.space_after = Pt(10)
p.level = 0
def add_cards(slide, cards, top=Inches(1.7)):
n = len(cards)
gap = Inches(0.25)
w = (Inches(11.5) - gap * (n - 1)) / n
for i, (title, body, color) in enumerate(cards):
left = Inches(0.8) + (w + gap) * i
panel = slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, left, top, w, Inches(4.8))
panel.fill.solid()
panel.fill.fore_color.rgb = BG_PANEL
panel.line.color.rgb = color
panel.line.width = Pt(1.5)
tb = slide.shapes.add_textbox(left + Inches(0.2), top + Inches(0.25), w - Inches(0.4), Inches(4.3))
tf = tb.text_frame
tf.word_wrap = True
p0 = tf.paragraphs[0]
p0.text = title
p0.font.size = Pt(18)
p0.font.bold = True
p0.font.color.rgb = color
p1 = tf.add_paragraph()
p1.text = body
p1.font.size = Pt(12)
p1.font.color.rgb = SILVER
p1.space_before = Pt(12)
def slide_title(prs):
slide = prs.slides.add_slide(prs.slide_layouts[6])
set_bg(slide)
add_corner_accents(slide)
# 装饰线网格感
for x in range(3):
add_glow_bar(slide, Inches(0.5 + x * 4), Inches(2.2), Inches(0.02), Inches(3), RGBColor(30, 50, 90))
add_glow_bar(slide, Inches(1.2), Inches(3.8), Inches(10.8), Pt(2), MAGENTA)
tb = slide.shapes.add_textbox(Inches(0.9), Inches(1.8), Inches(11.5), Inches(1.2))
p = tb.text_frame.paragraphs[0]
p.text = "羚牛数智中心"
p.font.size = Pt(48)
p.font.bold = True
p.font.color.rgb = CYAN
p.alignment = PP_ALIGN.CENTER
tb2 = slide.shapes.add_textbox(Inches(0.9), Inches(2.9), Inches(11.5), Inches(0.8))
p2 = tb2.text_frame.paragraphs[0]
p2.text = "建设规划报告"
p2.font.size = Pt(36)
p2.font.color.rgb = WHITE
p2.alignment = PP_ALIGN.CENTER
tb3 = slide.shapes.add_textbox(Inches(0.9), Inches(4.2), Inches(11.5), Inches(0.6))
p3 = tb3.text_frame.paragraphs[0]
p3.text = "LINGNIU DIGITAL INTELLIGENCE CENTER · V1.0"
p3.font.size = Pt(14)
p3.font.color.rgb = MAGENTA
p3.alignment = PP_ALIGN.CENTER
tb4 = slide.shapes.add_textbox(Inches(0.9), Inches(5.2), Inches(11.5), Inches(0.8))
p4 = tb4.text_frame.paragraphs[0]
p4.text = "羚牛氢能 One OS · 氢能交通的商业操作系统"
p4.font.size = Pt(16)
p4.font.color.rgb = GOLD
p4.alignment = PP_ALIGN.CENTER
def build(prs):
# 1 背景
s = prs.slides.add_slide(prs.slide_layouts[6])
set_bg(s)
add_header(s, "一、报告背景与目标", "REPORT BACKGROUND & OBJECTIVES")
add_bullets(
s,
[
("业务规模扩大,人工台账与分散系统模式难以为继", None),
("数据分散 · 流程依赖人工 · 单点建设难复用 · 多能源场景难支撑", MAGENTA),
("建设统一「数智中心」是稳定运营与战略发展的必然选择", CYAN),
],
)
# 2 痛点
s = prs.slides.add_slide(prs.slide_layouts[6])
set_bg(s)
add_header(s, "现状痛点", "CURRENT CHALLENGES")
add_cards(
s,
[
("数据孤岛", "业务数据分散\n难以形成统一视图", CYAN),
("流程非标", "依赖人工经验\n标准化与可追溯不足", MAGENTA),
("重复建设", "单点需求驱动\n难以复用与扩展", PURPLE),
("复杂场景", "多能源多业务并行\n现有模式难支撑", GOLD),
],
)
# 3 要解决的问题
s = prs.slides.add_slide(prs.slide_layouts[6])
set_bg(s)
add_header(s, "数智中心要解决的问题", "PROBLEMS TO SOLVE")
add_cards(
s,
[
(
"当前必须解决",
"手工台账与人工对账比例高\n业务系统割裂,资产/能源/运维无法贯通\n任务分配追踪依赖人工\n管理决策缺乏数据支撑",
CYAN,
),
(
"未来必须应对",
"业务体量扩大后人效下降\n多能源多业务管理复杂度上升\n无统一平台则系统不可持续\nAI 无法在非标准数据上有效落地",
MAGENTA,
),
],
top=Inches(1.65),
)
# 4 四大目标
s = prs.slides.add_slide(prs.slide_layouts[6])
set_bg(s)
add_header(s, "四大建设目标", "CORE OBJECTIVES")
add_cards(
s,
[
("稳定运行", "解决手工台账与流程混乱\n支撑当前业务稳定运行", CYAN),
("持续演进", "架构灵活支持未来5年发展\n具备扩展能力", MAGENTA),
("数据资产", "数据可沉淀、可复用、可变现\n以平台与数据为核心", PURPLE),
("对内对外", "内部降本增效\n对外输出 SaaS 能力", GOLD),
],
)
# 5 战略定位
s = prs.slides.add_slide(prs.slide_layouts[6])
set_bg(s)
add_header(s, "二、战略定位", "STRATEGIC POSITIONING")
add_bullets(
s,
[
("数智中心是羚牛未来 35 年最核心的数字基础设施与能力中枢", CYAN),
("不是单一 IT 项目,而是公司长期战略资产", WHITE),
("构建「羚牛氢能 One OS」— 面向氢能交通的一体化商业操作系统", GOLD),
("核心产品:小羚羚 — 统一运营平台与服务终端", MAGENTA),
],
top=Inches(1.7),
)
# 6 三步走总览
s = prs.slides.add_slide(prs.slide_layouts[6])
set_bg(s)
add_header(s, "战略阶段:三步走", "THREE-PHASE ROADMAP")
add_cards(
s,
[
("Phase 01", "统一 · 标准 · 稳定\n业务在线 · 数据留痕\n筑牢数据底座", CYAN),
("Phase 02", "平台化 · 复用 · 协同\n用数据驱动管理\n降本增效可复制", MAGENTA),
("Phase 03", "智能化 · 开放 · 商业化\nAI 深度驱动生态\n利润中心转型", GOLD),
],
top=Inches(1.75),
)
# 7 Phase 1
s = prs.slides.add_slide(prs.slide_layouts[6])
set_bg(s)
add_header(s, "Phase 01 · 统一 · 标准 · 稳定", "FOUNDATION")
add_bullets(
s,
[
("全面迁移至线上平台:业务在线、数据留痕、流程可控", CYAN),
("统一:构建统一运营平台与统一服务终端(小羚羚),打破系统孤岛", None),
("标准建立标准化数据结构、业务流程、接口规范AI 辅助", None),
("稳定:高可用、安全合规,支撑日常业务连续运行", None),
("此阶段不追求先进功能,而为数字化与智能化筑牢底座", DIM),
],
)
# 8 Phase 2
s = prs.slides.add_slide(prs.slide_layouts[6])
set_bg(s)
add_header(s, "Phase 02 · 平台化 · 复用 · 协同", "PLATFORM")
add_bullets(
s,
[
("从「有数据」走向「用数据」— 业务可复制、管理可量化、决策有依据", MAGENTA),
("平台化:任务调度、能源管理、资产视图等抽象为平台服务", None),
("复用:避免重复建设,新业务快速接入,降低边际成本", None),
("协同:打通资产设备、能源、运维、服务,跨部门高效协作", None),
("核心价值:降本增效,为规模化扩张提供可复制的运营模板", GOLD),
],
)
# 9 Phase 3
s = prs.slides.add_slide(prs.slide_layouts[6])
set_bg(s)
add_header(s, "Phase 03 · 智能化 · 开放 · 商业化", "INTELLIGENCE & ECOSYSTEM")
add_bullets(
s,
[
("构建 AI 深度驱动、多方参与、商业闭环的绿色智能生态平台", GOLD),
("智能化AI 从辅助走向决策,运维/调度/安全/财务自主优化", None),
("开放:通过 API、SaaS 向能源企业、物流商、装备商输出能力", None),
("商业化:平台+服务+数据多元收入,成本中心 → 利润中心", CYAN),
("成为氢能交通领域的「操作系统提供商」", MAGENTA),
],
)
# 10 演进逻辑
s = prs.slides.add_slide(prs.slide_layouts[6])
set_bg(s)
add_header(s, "演进逻辑", "EVOLUTION LOGIC")
add_cards(
s,
[
("信息化", "解决「有没有」\n从 0 到 1", CYAN),
("数字化", "解决「好不好」\n从 1 到 N", MAGENTA),
("智能化", "解决「赚不赚」\n从 N 到 ∞", GOLD),
],
top=Inches(2.0),
)
tb = s.shapes.add_textbox(Inches(0.8), Inches(5.5), Inches(11.5), Inches(0.8))
p = tb.text_frame.paragraphs[0]
p.text = "成本中心 ──▶ 利润中心 · 数字基础设施驱动绿色交通变革"
p.font.size = Pt(18)
p.font.color.rgb = WHITE
p.alignment = PP_ALIGN.CENTER
# 11 建设方案
s = prs.slides.add_slide(prs.slide_layouts[6])
set_bg(s)
add_header(s, "三、整体建设方案", "IMPLEMENTATION")
add_bullets(
s,
[
("分阶段实施 — 按业务节奏推进,避免一次性重投入", CYAN),
("基础优先 — 系统能力先于智能能力", None),
("核心内控 — 需求、架构、数据由内部掌控", None),
("敏捷迭代 — MVP 验证,快速反馈,持续优化", None),
],
top=Inches(1.65),
)
# 12 1+N+X
s = prs.slides.add_slide(prs.slide_layouts[6])
set_bg(s)
add_header(s, "「1 + N + X」核心理念", "ARCHITECTURE PHILOSOPHY")
add_cards(
s,
[
("1", "以车辆/设备/能源资产\n为唯一主键\n贯穿全生命周期", CYAN),
("N", "覆盖电、氢、充换氢\n储能等多能源形态", MAGENTA),
("X", "运营、物流、金融\nESG、碳管理、智能调度", GOLD),
],
top=Inches(1.85),
)
add_bullets(
s,
[
("一车/一设备看全局 · 一个平台管到底 · 一套能力可复用、可扩展、可对外输出", WHITE),
],
top=Inches(5.6),
)
# 13 封底
s = prs.slides.add_slide(prs.slide_layouts[6])
set_bg(s)
add_corner_accents(s)
add_glow_bar(s, Inches(2), Inches(3.2), Inches(9.3), Pt(3), CYAN)
tb = s.shapes.add_textbox(Inches(0.9), Inches(2.5), Inches(11.5), Inches(1.5))
p = tb.text_frame.paragraphs[0]
p.text = "羚牛氢能 One OS"
p.font.size = Pt(44)
p.font.bold = True
p.font.color.rgb = CYAN
p.alignment = PP_ALIGN.CENTER
tb2 = s.shapes.add_textbox(Inches(0.9), Inches(3.8), Inches(11.5), Inches(1))
p2 = tb2.text_frame.paragraphs[0]
p2.text = "连接产业各方 · 驱动绿色交通变革"
p2.font.size = Pt(20)
p2.font.color.rgb = WHITE
p2.alignment = PP_ALIGN.CENTER
tb3 = s.shapes.add_textbox(Inches(0.9), Inches(5.0), Inches(11.5), Inches(0.6))
p3 = tb3.text_frame.paragraphs[0]
p3.text = "数智中心 · 氢能交通商业操作系统"
p3.font.size = Pt(14)
p3.font.color.rgb = MAGENTA
p3.alignment = PP_ALIGN.CENTER
def main():
prs = Presentation()
prs.slide_width = SLIDE_W
prs.slide_height = SLIDE_H
slide_title(prs)
build(prs)
prs.save(OUT)
print(f"已生成: {OUT}")
print(f"{len(prs.slides)}")
if __name__ == "__main__":
main()