Files
ONE-OS/scripts/generate_oneos_notice_docx.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

226 lines
8.8 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
"""生成 ONEOS 业务迁移通知 Word 文档(桌面)"""
from pathlib import Path
from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH, WD_LINE_SPACING
from docx.oxml.ns import qn
from docx.shared import Cm, Pt, RGBColor
OUT = Path("/Users/sylvawong/Desktop/ONEOS业务全面迁移通知.docx")
FONT_CN = "PingFang SC"
FONT_CN_FB = "Microsoft YaHei"
ACCENT = RGBColor(0, 82, 155)
def set_run_font(run, size=11, bold=False, color=None, name=None):
run.font.size = Pt(size)
run.font.bold = bold
run.font.name = name or FONT_CN
run._element.rPr.rFonts.set(qn("w:eastAsia"), name or FONT_CN_FB)
if color:
run.font.color.rgb = color
def add_para(doc, text, size=11, bold=False, align=None, space_after=6, color=None):
p = doc.add_paragraph()
if align is not None:
p.alignment = align
p.paragraph_format.space_after = Pt(space_after)
p.paragraph_format.line_spacing_rule = WD_LINE_SPACING.MULTIPLE
p.paragraph_format.line_spacing = 1.35
run = p.add_run(text)
set_run_font(run, size=size, bold=bold, color=color)
return p
def add_heading(doc, text, level=1):
h = doc.add_heading(level=level)
h.clear()
run = h.add_run(text)
sizes = {1: 16, 2: 14, 3: 12}
set_run_font(run, size=sizes.get(level, 12), bold=True, color=ACCENT)
h.paragraph_format.space_before = Pt(14 if level == 1 else 10)
h.paragraph_format.space_after = Pt(8)
return h
def add_bullet(doc, text, level=0):
p = doc.add_paragraph(style="List Bullet")
p.clear()
p.paragraph_format.left_indent = Cm(0.75 + level * 0.5)
p.paragraph_format.space_after = Pt(4)
p.paragraph_format.line_spacing = 1.35
run = p.add_run(text)
set_run_font(run, size=11)
def build():
doc = Document()
sec = doc.sections[0]
sec.page_height = Cm(29.7)
sec.page_width = Cm(21)
sec.left_margin = Cm(2.5)
sec.right_margin = Cm(2.5)
sec.top_margin = Cm(2.2)
sec.bottom_margin = Cm(2.2)
# 标题
t = doc.add_paragraph()
t.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = t.add_run("关于业务全面迁移至 ONEOS 系统的通知")
set_run_font(r, size=22, bold=True, color=ACCENT)
t.paragraph_format.space_after = Pt(16)
add_para(
doc,
"各部门同事:",
size=12,
bold=True,
space_after=8,
)
add_para(
doc,
"为统一业务流程、提升数据准确性与协同效率,公司自 2025年5月25日 起,相关业务全面迁移至 ONEOS 系统执行。"
"请各部门按要求完成系统登录、密码修改及本部门功能模块的日常维护与操作。",
space_after=12,
)
add_heading(doc, "一、系统登录信息", 1)
table = doc.add_table(rows=4, cols=2)
table.style = "Table Grid"
rows_data = [
("项目", "说明"),
("系统地址", "https://oneos.lnh2e.com/"),
("用户名", "姓名拼音"),
("默认密码", "admin123请第一时间修改"),
]
for i, (a, b) in enumerate(rows_data):
row = table.rows[i]
for j, val in enumerate([a, b]):
cell = row.cells[j]
cell.text = ""
p = cell.paragraphs[0]
run = p.add_run(val)
set_run_font(run, size=11, bold=(i == 0 or j == 0))
if i == 0:
run.font.color.rgb = RGBColor(255, 255, 255)
from docx.oxml import OxmlElement
shading = OxmlElement("w:shd")
shading.set(qn("w:fill"), "0052A3")
cell._tc.get_or_add_tcPr().append(shading)
p.paragraph_format.space_after = Pt(2)
doc.add_paragraph()
p_warn = add_para(
doc,
"重要提醒:请大家在第一时间登录并修改默认密码,勿将账号密码告知他人。",
bold=True,
space_after=14,
color=RGBColor(180, 0, 0),
)
add_heading(doc, "二、各部门职责与功能模块", 1)
# 客服
add_heading(doc, "(一)客服服务部", 2)
items_cs = [
"业务管理 → 客户管理:客户信息录入准确;创建合同时须正确关联客户信息。",
"业务管理 → 租赁费用模板:按车型维护各类费用明细,确保模板项目准确。",
"财务管理 → 提车应收款:实收录入准确。",
"业务管理 → 交还车任务:按客户约定交车日期生成交车任务(生成交车任务后,对应区域运维方可收到任务)。",
"业务管理 → 租赁账单:运维交车后,对系统自动生成的租赁账单实收情况进行维护。",
"业务管理 → 交还车任务:在合同下已交车任务操作列点击「查看」→ 按客户要求选择还车车辆 → 点击「还车」并填写预计还车时间,生成还车任务(生成还车任务后,对应区域运维方可收到任务)。",
"财务管理 → 还车应结款:协同客服组、运维组、安全组、能源组完成还车应结款录入。",
"车辆氢费明细:加氢记录录入准确。",
"车辆成本维护:维护各车型日成本(用于租赁账单中车辆成本统计)。",
]
for it in items_cs:
add_bullet(doc, it)
# 运维
add_heading(doc, "(二)运维部", 2)
add_heading(doc, "网页版 ONEOS", 3)
items_ops_web = [
"运维管理 → 车辆业务 → 证照管理:按车辆实际证照维护信息(证照信息须完整,否则影响交车)。",
"运维管理 → 基本数据维护 → 停车场:按业务实际维护停车场信息。",
"运维管理 → 基本数据维护 → 型号参数:按车辆实际维护型号参数。",
"维修站管理 → 维修站信息:按合作情况维护维修站信息。",
"检测服务站 → 检测服务站信息:按合作情况维护检测服务站信息。",
"运维管理 → 车辆管理:新增车辆时导入车辆信息,并同步通知相关人员维护证照信息。",
]
for it in items_ops_web:
add_bullet(doc, it)
add_heading(doc, "微信小程序「小羚羚」", 3)
items_ops_wx = [
"备车:按业务实际完成备车(新系统仅已备车车辆方可交车)。",
"交车:按交车任务执行交车。",
"还车:按还车任务执行还车。",
"异动:按实际提交异动申请并记录异动情况。",
"调拨:按实际提交调拨申请并记录调拨情况。",
"年审:按实际录入年审记录(可多轮保存,全部完成后再点击提交闭环)。",
"故障:按实际填写故障信息(可多轮保存,全部完成后再点击提交闭环)。",
]
for it in items_ops_wx:
add_bullet(doc, it)
# 采购
add_heading(doc, "(三)采购部", 2)
for it in [
"加氢站管理 → 站点信息:维护全部合作加氢站信息(作为氢费账单基础依据)。",
"能源管理 → 能源账户:按实际业务创建客户账户。",
"业务管理 → 保险采购:按实际业务导入保单数据。",
"加氢站管理 → 加氢站打款管理(即将上线):按实际业务导入加氢站打款情况,将自动同步至「加氢站余额管理」。",
]:
add_bullet(doc, it)
# 财务
add_heading(doc, "(四)财务部", 2)
for it in [
"审批中心 → 我的待办:及时处理各类审批任务。",
"能源管理 → 充值单:按实际业务导入客户账户充值数据。",
]:
add_bullet(doc, it)
# 法务
add_heading(doc, "(五)法务部", 2)
add_bullet(doc, "审批中心 → 我的待办:及时处理各类审批任务。")
add_heading(doc, "三、优化迭代与意见反馈", 1)
add_para(
doc,
"各部门此前提出的优化意见均已收到。后续将结合业务紧迫程度分批迭代上线,"
"也欢迎在使用过程中继续提出宝贵建议。",
space_after=8,
)
add_para(doc, "意见与建议反馈方式:", bold=True, space_after=6)
add_bullet(doc, "邮箱wangmian@lingniutech.com")
add_bullet(doc, "钉钉联系数智部:王冕、秦蔚")
doc.add_paragraph()
add_para(
doc,
"请各部门负责人传达至本部门全员,自 5月25日 起严格执行。如有系统操作问题,请优先联系数智部协调处理。",
space_after=20,
)
add_para(doc, "特此通知。", bold=True, space_after=24)
sig = doc.add_paragraph()
sig.alignment = WD_ALIGN_PARAGRAPH.RIGHT
r1 = sig.add_run("数智部\n")
set_run_font(r1, size=12, bold=True)
r2 = sig.add_run("2025年5月24日")
set_run_font(r2, size=12)
doc.save(OUT)
print(f"已生成: {OUT}")
if __name__ == "__main__":
build()