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

199 lines
10 KiB
Python
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
"""生成 2026年5月26日 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
from docx.enum.table import WD_TABLE_ALIGNMENT
OUT = Path("/Users/sylvawong/Desktop/ONEOS试运行问题报告_20260526.docx")
OUT_PROJ = Path("/Users/sylvawong/Desktop/CURSOR/ONE-OS/docs/ONEOS试运行问题报告_20260526.docx")
FONT_CN = "PingFang SC"
FONT_CN_FB = "Microsoft YaHei"
ACCENT = RGBColor(0, 82, 155)
GRAY = RGBColor(80, 80, 80)
def set_run_font(run, size=11, bold=False, color=None):
run.font.size = Pt(size)
run.font.bold = bold
run.font.name = FONT_CN
run._element.rPr.rFonts.set(qn("w:eastAsia"), 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 set_cell_text(cell, text, bold=False, size=10):
cell.text = ""
p = cell.paragraphs[0]
run = p.add_run(str(text))
set_run_font(run, size=size, bold=bold)
def add_issue_table(doc, rows):
headers = ["序号", "模块", "问题描述", "影响", "处理状态", "备注/后续"]
table = doc.add_table(rows=1 + len(rows), cols=len(headers))
table.style = "Table Grid"
table.alignment = WD_TABLE_ALIGNMENT.CENTER
for i, h in enumerate(headers):
set_cell_text(table.rows[0].cells[i], h, bold=True, size=10)
for ri, row in enumerate(rows, start=1):
for ci, val in enumerate(row):
set_cell_text(table.rows[ri].cells[ci], val, size=9)
doc.add_paragraph()
def build():
doc = Document()
sec = doc.sections[0]
sec.top_margin = Cm(2.5)
sec.bottom_margin = Cm(2.5)
sec.left_margin = Cm(2.8)
sec.right_margin = Cm(2.8)
title = doc.add_paragraph()
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = title.add_run("ONEOS 系统试运行问题报告")
set_run_font(r, size=20, bold=True, color=ACCENT)
title.paragraph_format.space_after = Pt(6)
sub = doc.add_paragraph()
sub.alignment = WD_ALIGN_PARAGRAPH.CENTER
r2 = sub.add_run("报告日期2026年5月26日  试运行阶段业务全面迁移后首日验证")
set_run_font(r2, size=11, color=GRAY)
sub.paragraph_format.space_after = Pt(18)
add_heading(doc, "一、试运行概述", 1)
add_para(
doc,
"本次为 ONEOS 业务全面迁移上线后的首日试运行,重点验证租赁业务主流程(合同发起→提车应收款→交车→还车→还车应结款)"
"及客服组车辆管理、交车管理等支撑能力。整体主流程可跑通,但迁移数据质量、照片上传机制、"
"权限配置及部分业务规则仍存在需跟进的问题。",
)
add_para(doc, "总体结论:", bold=True, space_after=4)
add_bullet(doc, "租赁业务主链路:基本跑通,存在局部阻塞与体验类问题。")
add_bullet(doc, "权限与路由:财务出纳 404 问题已临时解决,需规范默认工作台权限配置。")
add_bullet(doc, "照片环节:交车/还车均存在上传未即时保存导致照片丢失风险,已提优化需求。")
add_bullet(doc, "迁移数据:车辆状态、停车场、交车数量、还车应结款费用明细等存在批量准确性风险。")
add_heading(doc, "二、租赁业务试运行情况", 1)
add_heading(doc, "2.1 流程验证结论", 2)
flow_rows = [
("1", "租赁合同发起", "流程正常,可顺利完成发起。", "", "通过", ""),
("2", "提车应收款", "整体可走通;个别合同无法生成应收款。", "", "部分异常", "4 辆车合同需排查"),
("3", "交车", "主流程可走通。", "", "通过(有小问题)", "照片上传见 2.3"),
("4", "还车", "主流程可走通。", "", "通过(有小问题)", "照片及迁移展示见 2.3"),
("5", "还车应结款", "流程可走通,数据与展示异常较多。", "", "待处理", "见 2.4"),
]
add_issue_table(doc, flow_rows)
add_heading(doc, "2.2 提车应收款", 2)
add_bullet(doc, "问题:出现一个包含 4 辆车的合同无法正常生成提车应收款。")
add_bullet(doc, "问题:财务出纳账号登录后出现 404。原因为财务出纳未配置工作台权限登录默认路由指向工作台导致。")
add_bullet(doc, "处理:已通过分配权限临时解决;建议统一梳理财务类角色默认路由与菜单权限模板。")
add_heading(doc, "2.3 交车 / 还车", 2)
add_bullet(doc, "共性问题(交车、还车):拍摄照片环节存在「上传后未即时保存」问题;异常返回后已拍照片全部丢失。")
add_bullet(doc, "处理:已提交产品优化需求,建议增加分张即时落库/断点续传能力。")
add_bullet(doc, "还车专项:照片页「交车照片(迁移数据)」部位匹配不一致(如左后方显示为右前方),需开发修复映射关系。")
add_heading(doc, "2.4 还车应结款", 2)
add_bullet(doc, "业务服务组、运维组、能源部办理情况中,人员均错误显示为「黄桂球」。")
add_bullet(doc, "迁移数据问题:运维组下错误迁移了部分费用明细(旧版与新版名称不一致导致误迁)。")
add_bullet(doc, "处理admin 已上线删除功能,可手工处理异常数据;暂缺批量排查迁移数据的工具或规则。")
add_bullet(doc, "逻辑问题:未做还车费用的提车应结款单,错误显示为「审核完成」,需核查状态机与数据校验。")
add_heading(doc, "三、客服组试运行情况", 1)
add_heading(doc, "3.1 车辆管理", 2)
add_bullet(doc, "问题:存在大量停车场未正确匹配或错误标记为「呆滞车」。")
add_bullet(doc, "说明:「呆滞车」状态此前已暂时删除,不应再出现。")
add_bullet(doc, "影响:运维无法正常选择车辆。")
add_bullet(doc, "建议方案:")
add_bullet(doc, "核对所有车辆停车场迁移准确性;排除运营状态为「租赁」外的车辆,检查停车场是否为空,空数据需补全或修正。", level=1)
add_bullet(doc, "在车辆管理增加修改功能(停车场等字段可编辑),需求待提。", level=1)
add_heading(doc, "3.2 交车管理", 2)
add_bullet(doc, "问题:实际交车数量显示不正确,判断为迁移数据问题,需与交车任务/车辆状态数据交叉核对。")
add_heading(doc, "四、问题汇总清单", 1)
all_issues = [
("1", "提车应收款", "4 辆车合同无法生成提车应收款", "", "待排查", "需定位合同/车辆绑定规则"),
("2", "权限", "财务出纳登录 404", "", "已解决", "已分配工作台权限,建议固化模板"),
("3", "交车", "照片上传未即时保存致丢失", "", "已提优化", "产品优化中"),
("4", "还车", "照片上传未即时保存致丢失", "", "已提优化", "同交车"),
("5", "还车", "迁移交车照片部位映射错误", "", "待开发", "左后/右前等错位"),
("6", "还车应结款", "办理人错误显示为黄桂球", "", "待修复", "多部门均受影响"),
("7", "还车应结款", "运维组费用明细误迁移", "", "可手工删", "缺批量排查方案"),
("8", "还车应结款", "无还车费用单却显示审核完成", "", "待修复", "状态逻辑异常"),
("9", "车辆管理", "停车场空/错、呆滞车误标", "", "待处理", "影响运维选车"),
("10", "车辆管理", "缺少停车场等字段修改入口", "", "需求待提", ""),
("11", "交车管理", "实际交车数量不正确", "", "待核对", "迁移数据问题"),
]
add_issue_table(doc, all_issues)
add_heading(doc, "五、后续工作计划(建议)", 1)
plans = [
"【P0】修复还车应结款状态展示异常无费用却审核完成及办理人显示错误。",
"【P0】开展车辆停车场、车辆状态含呆滞车、交车数量迁移数据专项核对与修正。",
"【P1】排查 4 辆车合同无法生成提车应收款的具体原因并修复。",
"【P1】修复还车迁移照片部位映射推进交车/还车照片分张即时保存方案落地。",
"【P1】制定还车应结款迁移数据批量校验规则旧版/新版费用名称映射表 + 异常清单导出)。",
"【P2】车辆管理增加停车场等字段编辑能力统一财务类角色权限与默认路由配置。",
]
for p in plans:
add_bullet(doc, p)
add_heading(doc, "六、附录", 1)
add_para(doc, "本报告依据 2026 年 5 月 26 日试运行现场反馈整理,问题状态随修复进展动态更新。", color=GRAY, size=10)
add_para(doc, "编制试运行项目组   日期2026年5月26日", color=GRAY, size=10)
OUT.parent.mkdir(parents=True, exist_ok=True)
doc.save(OUT)
OUT_PROJ.parent.mkdir(parents=True, exist_ok=True)
doc.save(OUT_PROJ)
print(f"已生成: {OUT}")
print(f"副本: {OUT_PROJ}")
if __name__ == "__main__":
build()