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>
226 lines
8.8 KiB
Python
226 lines
8.8 KiB
Python
#!/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()
|