1004 lines
43 KiB
Python
1004 lines
43 KiB
Python
#!/usr/bin/env python
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
生成完整详细的产品需求文档(PRD)
|
||
"""
|
||
from docx import Document
|
||
from docx.shared import Pt, Inches, RGBColor
|
||
from docx.enum.text import WD_ALIGN_PARAGRAPH
|
||
from datetime import datetime
|
||
|
||
def add_section_title(doc, text, level=1):
|
||
"""添加章节标题"""
|
||
heading = doc.add_heading(text, level=level)
|
||
return heading
|
||
|
||
def add_formatted_paragraph(doc, text, bold=False, indent=False):
|
||
"""添加格式化的段落"""
|
||
p = doc.add_paragraph()
|
||
if indent:
|
||
p.paragraph_format.left_indent = Inches(0.5)
|
||
run = p.add_run(text)
|
||
if bold:
|
||
run.bold = True
|
||
return p
|
||
|
||
def add_bullet_list(doc, items, indent=0):
|
||
"""添加项目符号列表"""
|
||
for item in items:
|
||
p = doc.add_paragraph(item, style='List Bullet')
|
||
if indent > 0:
|
||
p.paragraph_format.left_indent = Inches(indent * 0.5)
|
||
|
||
def add_numbered_list(doc, items, indent=0):
|
||
"""添加编号列表"""
|
||
for i, item in enumerate(items, 1):
|
||
p = doc.add_paragraph(f"{i}. {item}", style='List Number')
|
||
if indent > 0:
|
||
p.paragraph_format.left_indent = Inches(indent * 0.5)
|
||
|
||
def generate_detailed_prd():
|
||
"""生成详细的产品需求文档"""
|
||
doc = Document()
|
||
|
||
# 设置文档样式
|
||
style = doc.styles['Normal']
|
||
font = style.font
|
||
font.name = '宋体'
|
||
font.size = Pt(12)
|
||
|
||
# ========== 文档头部 ==========
|
||
title = doc.add_heading('OA系统产品需求文档(PRD)', 0)
|
||
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||
|
||
doc.add_paragraph(f'版本号:v1.0')
|
||
doc.add_paragraph(f'编制日期:{datetime.now().strftime("%Y年%m月%d日")}')
|
||
doc.add_paragraph('编制人:产品经理')
|
||
doc.add_paragraph('文档说明:本文档基于《OA系统功能定制方案》整理,详细描述了OA系统的功能需求、业务流程、数据规则等内容。')
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 1. 文档概述 ==========
|
||
add_section_title(doc, '1. 文档概述', 1)
|
||
|
||
add_section_title(doc, '1.1 项目背景', 2)
|
||
doc.add_paragraph('随着公司业务发展,项目管理流程日趋复杂,需要一套完整的OA系统来支撑从商机立项到项目完成、财务结算的全流程管理。系统需支持项目过程跟踪、状态管理、产值统计与回款管理等核心业务。')
|
||
|
||
add_section_title(doc, '1.2 项目目标', 2)
|
||
add_bullet_list(doc, [
|
||
'实现项目全生命周期在线管理,从立项到回款全流程数字化',
|
||
'建立项目状态可视化跟踪机制,实时掌握项目进展',
|
||
'支持产值与财务数据统计,为管理决策提供数据支撑',
|
||
'建立规范的审核流程,确保关键环节可追溯',
|
||
'支持PC端与移动端,提升使用便捷性'
|
||
])
|
||
|
||
add_section_title(doc, '1.3 适用范围', 2)
|
||
doc.add_paragraph('本需求文档适用于OA系统的开发、测试、验收等各阶段,供产品、开发、测试、设计等相关人员参考。')
|
||
|
||
add_section_title(doc, '1.4 术语定义', 2)
|
||
terms = [
|
||
('项目编号', '项目的唯一标识符,格式:年份+序号,如25-1表示2025年第1个项目'),
|
||
('启动编号', '项目启动单的唯一标识,格式:立项编号+项目类型+启动序号,如25-3-2-4'),
|
||
('结算类项目', '指结算审计、概算编制及审核、清单控制价编制及审核类型项目,需提交初稿、对账、最终成果'),
|
||
('执业者', '参与项目执行的执业工程师'),
|
||
('产值', '根据项目进度和任务完成情况计算的产值金额')
|
||
]
|
||
for term, definition in terms:
|
||
p = doc.add_paragraph()
|
||
p.add_run(term + ':').bold = True
|
||
p.add_run(definition)
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 2. 总体需求 ==========
|
||
add_section_title(doc, '2. 总体需求', 1)
|
||
|
||
add_section_title(doc, '2.1 管理要求', 2)
|
||
doc.add_paragraph('系统需围绕项目全生命周期管理,满足以下管理要求:')
|
||
add_bullet_list(doc, [
|
||
'可视化流程管理:所有业务流程需清晰展示,支持流程节点可视化',
|
||
'状态跟踪:项目各阶段状态需实时更新,支持状态查询与统计',
|
||
'审核留痕:所有审核环节需记录审核人、审核时间、审核意见等信息',
|
||
'数据统计:支持项目、产值、财务等多维度数据统计与分析',
|
||
'权限控制:不同角色人员只能访问和操作权限范围内的功能'
|
||
])
|
||
|
||
add_section_title(doc, '2.2 业务流程', 2)
|
||
doc.add_paragraph('系统需支持完整的业务流程:')
|
||
doc.add_paragraph('理想流程:立项 → 投标 → 签合同 → 启动 → 成果提交 → 回款')
|
||
doc.add_paragraph('实际业务中,可能存在不投标或直接启动的情况,系统需支持以下场景:')
|
||
add_bullet_list(doc, [
|
||
'立项后直接启动(不投标、不签合同)',
|
||
'立项后仅投标,不签合同即启动',
|
||
'立项后直接签合同启动(不投标)'
|
||
])
|
||
doc.add_paragraph('注:所有项目状态需在系统中明确标识,支持按状态进行查询和统计。')
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 3. 功能需求 ==========
|
||
add_section_title(doc, '3. 功能需求', 1)
|
||
|
||
doc.add_paragraph('系统功能分为五大板块,详细需求如下:')
|
||
|
||
# 3.1 商机(立项)管理
|
||
add_section_title(doc, '3.1 商机(立项)管理', 2)
|
||
|
||
add_section_title(doc, '3.1.1 功能概述', 3)
|
||
doc.add_paragraph('商机(立项)管理模块用于管理项目的前期立项工作,包括项目立项申请、投标管理、合同管理及项目查询功能。')
|
||
doc.add_paragraph('主流程:立项 → 经营管理部审核 → 总经理审核')
|
||
|
||
add_section_title(doc, '3.1.2 立项功能', 3)
|
||
doc.add_paragraph('功能描述:商务人员在线提交项目立项申请表单,经经营管理部和总经理依次审核通过后,项目正式立项。')
|
||
|
||
add_formatted_paragraph(doc, '表单字段(需参考原型图):', bold=True)
|
||
add_bullet_list(doc, [
|
||
'项目编号(系统自动生成,不可编辑)',
|
||
'项目名称(必填)',
|
||
'客户名称(必填)',
|
||
'服务内容(下拉选择,必填)',
|
||
'项目类型(必填)',
|
||
'预计金额(必填)',
|
||
'立项日期(必填)',
|
||
'申请人(自动带出当前登录用户)',
|
||
'备注(可选)',
|
||
'附件(可选,支持多个文件上传)'
|
||
])
|
||
|
||
add_formatted_paragraph(doc, '业务规则:', bold=True)
|
||
|
||
p = doc.add_paragraph()
|
||
p.add_run('1. 项目编号生成规则:').bold = True
|
||
p.add_run('年份(2位)+ 序号(自动累计),格式:YY-N。')
|
||
doc.add_paragraph(' • 示例:2025年第1个项目,编号为25-1')
|
||
doc.add_paragraph(' • 当年新增项目,年份不变,序号依次累加')
|
||
doc.add_paragraph(' • 系统需确保编号唯一性,不允许重复')
|
||
|
||
p = doc.add_paragraph()
|
||
p.add_run('2. 服务内容选择:').bold = True
|
||
p.add_run('下拉选择,支持以下选项:')
|
||
add_numbered_list(doc, [
|
||
'结算审计、概算编制及审核、清单控制价编制及审核',
|
||
'工程咨询',
|
||
'跟踪审计',
|
||
'项目管理',
|
||
'工程监理'
|
||
], indent=1)
|
||
|
||
p = doc.add_paragraph()
|
||
p.add_run('3. 结算类项目说明:').bold = True
|
||
p.add_run('结算审计、概算编制及审核、清单控制价编制及审核类型项目统称为结算类项目。')
|
||
doc.add_paragraph(' • 结算类项目包含子项:计量、计价、对账、出报告')
|
||
doc.add_paragraph(' • 结算类项目在成果管理中需提交:初稿、对账、最终成果')
|
||
doc.add_paragraph(' • 其他类型项目可直接提交最终成果')
|
||
|
||
add_formatted_paragraph(doc, '审核流程:', bold=True)
|
||
doc.add_paragraph('1. 申请人提交立项申请后,状态变为"待审核"')
|
||
doc.add_paragraph('2. 经营管理部审核(通过/驳回),审核通过后流转至总经理')
|
||
doc.add_paragraph('3. 总经理审核(通过/驳回),审核通过后项目状态变为"已立项"')
|
||
doc.add_paragraph('4. 审核驳回时需填写驳回原因,申请人可修改后重新提交')
|
||
|
||
add_section_title(doc, '3.1.3 投标功能', 3)
|
||
doc.add_paragraph('功能描述:申请人可修改已立项项目的状态为"投标中",并可上传投标相关附件。')
|
||
add_bullet_list(doc, [
|
||
'仅已立项状态的项目可进行投标操作',
|
||
'支持上传投标文件、投标书等相关附件',
|
||
'状态更新为"投标中"后,可继续流转至"已中标"状态',
|
||
'投标为可选环节,不是所有项目都需要'
|
||
])
|
||
|
||
add_section_title(doc, '3.1.4 合同管理', 3)
|
||
doc.add_paragraph('功能描述:申请人可修改项目状态为"已签合同",并上传合同附件。')
|
||
add_bullet_list(doc, [
|
||
'支持上传合同扫描件、电子合同等附件',
|
||
'合同金额需与立项金额对比,差异过大时给出提醒',
|
||
'状态更新为"已签合同"后,方可进行项目启动操作',
|
||
'合同为可选环节,但通常需要合同才能启动项目'
|
||
])
|
||
|
||
add_section_title(doc, '3.1.5 项目查询', 3)
|
||
doc.add_paragraph('功能描述:提供项目查询功能,支持多条件组合查询。')
|
||
|
||
add_formatted_paragraph(doc, '查询条件:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'项目编号(精确/模糊查询)',
|
||
'项目名称(模糊查询)',
|
||
'服务内容(下拉选择)',
|
||
'项目状态(多选:已立项、投标中、已中标、已签合同、已启动等)',
|
||
'立项日期范围',
|
||
'客户名称(模糊查询)'
|
||
])
|
||
|
||
add_formatted_paragraph(doc, '查询结果展示:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'项目编号',
|
||
'项目名称',
|
||
'客户名称',
|
||
'服务内容',
|
||
'项目状态',
|
||
'预计金额',
|
||
'立项日期',
|
||
'申请人'
|
||
])
|
||
doc.add_paragraph('查询结果支持分页展示,支持导出Excel功能。')
|
||
|
||
doc.add_page_break()
|
||
|
||
# 3.2 项目过程管理
|
||
add_section_title(doc, '3.2 项目过程管理', 2)
|
||
|
||
add_section_title(doc, '3.2.1 功能概述', 3)
|
||
doc.add_paragraph('项目过程管理模块用于管理项目启动后的执行过程,包括项目启动、成果管理、进度查询等功能。')
|
||
|
||
add_section_title(doc, '3.2.2 项目启动', 3)
|
||
doc.add_paragraph('功能描述:商务人员查询已立项项目,选择项目进行启动操作,或直接新建启动单(可关联已立项项目)。')
|
||
|
||
add_formatted_paragraph(doc, '启动方式:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'方式一:从已立项项目中选择,点击"启动"按钮,系统自动关联立项信息',
|
||
'方式二:直接新建启动单,可手动关联已立项项目'
|
||
])
|
||
|
||
add_formatted_paragraph(doc, '表单字段(需参考原型图):', bold=True)
|
||
add_bullet_list(doc, [
|
||
'启动编号(系统自动生成)',
|
||
'关联立项项目(下拉选择,必填)',
|
||
'启动日期(必填)',
|
||
'项目类型(从关联项目自动带出,可修改)',
|
||
'负责人(必填)',
|
||
'执业工程师分配(可多选,必填)',
|
||
'工作内容分配(多选,必填)',
|
||
'预计完成日期(必填)',
|
||
'备注(可选)'
|
||
])
|
||
|
||
add_formatted_paragraph(doc, '业务规则:', bold=True)
|
||
|
||
p = doc.add_paragraph()
|
||
p.add_run('1. 数据关联:').bold = True
|
||
add_bullet_list(doc, [
|
||
'启动单与立项单据自动关联',
|
||
'立项项目的基本信息(项目编号、名称、客户、服务内容等)自动导入到启动单',
|
||
'支持查看关联的立项单据详情'
|
||
], indent=1)
|
||
|
||
p = doc.add_paragraph()
|
||
p.add_run('2. 人员分配:').bold = True
|
||
p.add_run('启动工作可指派给多人,每个执业工程师可分配不同的工作内容。')
|
||
|
||
p = doc.add_paragraph()
|
||
p.add_run('3. 多次启动:').bold = True
|
||
p.add_run('同一个项目可以多次启动,每次启动产生独立的启动单。')
|
||
doc.add_paragraph(' • 示例:一个项目可能分阶段启动,每个阶段一个启动单')
|
||
|
||
p = doc.add_paragraph()
|
||
p.add_run('4. 工作内容分配:').bold = True
|
||
p.add_run('分配给执业工程师的工作内容,属于主表"服务内容"下的子项,可多选。')
|
||
doc.add_paragraph(' 对应关系如下:')
|
||
|
||
work_items = [
|
||
('结算审计、概算编制及审核、清单控制价编制及审核', ['计量', '计价', '对账', '出报告']),
|
||
('工程咨询', ['文本', '估算', '出报告']),
|
||
('跟踪审计', ['现场跟踪', '进度款审核']),
|
||
('项目管理', ['项目协助甲方报批报建', '项目实施过程中管控']),
|
||
('工程监理', ['现场跟踪', '进度审核'])
|
||
]
|
||
|
||
for main_item, sub_items in work_items:
|
||
p = doc.add_paragraph(f' • {main_item}:', style='List Bullet')
|
||
p.paragraph_format.left_indent = Inches(0.5)
|
||
p.add_run('、'.join(sub_items))
|
||
|
||
p = doc.add_paragraph()
|
||
p.add_run('5. 启动编号生成规则:').bold = True
|
||
p.add_run('立项编号 + 项目类型数字 + 启动序号')
|
||
doc.add_paragraph(' • 格式:立项编号-类型-序号')
|
||
doc.add_paragraph(' • 示例:25-3-2-4')
|
||
doc.add_paragraph(' - 25-3:表示25年第3个项目')
|
||
doc.add_paragraph(' - 2:表示项目类型为工程咨询(类型编号待定)')
|
||
doc.add_paragraph(' - 4:表示该项目的第4次启动')
|
||
|
||
p = doc.add_paragraph()
|
||
p.add_run('6. 费用计算公式:').bold = True
|
||
doc.add_paragraph(' 各项目类型按以下标准文件计算费用:')
|
||
|
||
formulas = [
|
||
('工程咨询', '依据鄂价房字[2001]107号文计算 × 折扣率'),
|
||
('工程造价', '依据鄂价工服规[2012]149号文计算 × 折扣率'),
|
||
('工程监理', '依据发改价格[2007]670号文计算 × 专业调整系数 × 工程复杂程度调整系数 × 高程调整系数 × 折扣率'),
|
||
('工程设计', '依据计价格[2002]10号文计算 × 折扣率'),
|
||
('工程代建', '依据财建[2016]504号文计算 × 折扣率'),
|
||
('招标代理', '依据鄂建文〔2023〕35号文计算 × 折扣率')
|
||
]
|
||
|
||
for item_type, formula in formulas:
|
||
p = doc.add_paragraph(f' • {item_type}:{formula}')
|
||
|
||
add_formatted_paragraph(doc, '审核流程:', bold=True)
|
||
doc.add_paragraph('1. 申请人提交启动申请后,状态变为"待审核"')
|
||
doc.add_paragraph('2. 经营管理部审核(通过/驳回)')
|
||
doc.add_paragraph('3. 总经理审核(通过/驳回),审核通过后状态变为"已启动"')
|
||
doc.add_paragraph('4. 审核通过后,系统自动通知被分配的执业工程师')
|
||
|
||
add_section_title(doc, '3.2.3 成果管理', 3)
|
||
doc.add_paragraph('功能描述:执业工程师查询分配给自己的已启动项目,提交项目成果,经审核后完成成果确认。')
|
||
|
||
add_formatted_paragraph(doc, '成果类型:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'结算类项目需提交:初稿、对账、最终成果',
|
||
'其他类型项目:根据项目进度直接提交最终成果'
|
||
])
|
||
|
||
add_formatted_paragraph(doc, '提交流程:', bold=True)
|
||
doc.add_paragraph('1. 执业工程师查询已启动且分配给自己的项目')
|
||
doc.add_paragraph('2. 选择项目,修改项目信息状态(如:初稿已完成、对账中、最终成果已完成等)')
|
||
doc.add_paragraph('3. 上传成果附件(可选,但建议上传)')
|
||
doc.add_paragraph('4. 填写完成信息(完成时间、完成情况等)')
|
||
doc.add_paragraph('5. 提交审核')
|
||
|
||
add_formatted_paragraph(doc, '审核流程:', bold=True)
|
||
doc.add_paragraph('1. 初稿/对账审核:多人同时提交成果后,由组长审核,再由领导(王总)审核')
|
||
doc.add_paragraph('2. 最终成果审核:多人同时提交正式成果后,由组长审核,再由领导(王总、戚总)审核')
|
||
doc.add_paragraph('3. 审核通过后,项目状态更新,系统记录审核信息')
|
||
|
||
add_formatted_paragraph(doc, '业务规则:', bold=True)
|
||
|
||
p = doc.add_paragraph()
|
||
p.add_run('1. 对账金额提醒:').bold = True
|
||
p.add_run('对账后会有正式报告金额。如初稿金额与对账金额差距过大(如超过20%或设定阈值),系统需给出提醒。')
|
||
|
||
p = doc.add_paragraph()
|
||
p.add_run('2. 多人协作:').bold = True
|
||
p.add_run('同一项目多人同时提交成果时,需等待所有人员提交完成后,才进入组长审核环节。')
|
||
|
||
p = doc.add_paragraph()
|
||
p.add_run('3. 附件管理:').bold = True
|
||
p.add_run('支持上传多种格式文件(PDF、Word、Excel、图片等),文件大小限制需在系统配置中设定。')
|
||
|
||
add_section_title(doc, '3.2.4 项目进度查询', 3)
|
||
doc.add_paragraph('功能描述:提供项目进度查询功能,实时查看正在执行中的项目信息。')
|
||
|
||
add_formatted_paragraph(doc, '查询条件:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'项目名称(模糊查询)',
|
||
'客户名称(模糊查询)',
|
||
'执业者(下拉选择)',
|
||
'项目状态(多选)',
|
||
'服务内容(下拉选择)',
|
||
'启动日期范围'
|
||
])
|
||
|
||
add_formatted_paragraph(doc, '查询结果展示:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'项目编号',
|
||
'项目名称',
|
||
'客户名称',
|
||
'服务内容',
|
||
'负责人',
|
||
'执业者',
|
||
'启动日期',
|
||
'预计完成日期',
|
||
'当前状态',
|
||
'完成进度(百分比)'
|
||
])
|
||
doc.add_paragraph('支持按状态、完成进度等维度进行排序。')
|
||
|
||
doc.add_page_break()
|
||
|
||
# 3.3 财务管理
|
||
add_section_title(doc, '3.3 财务管理', 2)
|
||
|
||
add_section_title(doc, '3.3.1 功能概述', 3)
|
||
doc.add_paragraph('财务管理模块用于管理项目的财务流程,包括开票请款、回款管理、请款流程等功能。')
|
||
doc.add_paragraph('主流程:开票请款 → 回款')
|
||
|
||
add_section_title(doc, '3.3.2 回款流程', 3)
|
||
doc.add_paragraph('功能描述:商务人员查询符合条件的项目,申请开票,财务开票后记录回款信息。')
|
||
|
||
add_formatted_paragraph(doc, '申请条件:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'项目状态为"已签合同",或',
|
||
'项目状态为"已提交正式成果"'
|
||
])
|
||
|
||
add_formatted_paragraph(doc, '申请流程:', bold=True)
|
||
doc.add_paragraph('1. 商务人员查询符合条件的项目')
|
||
doc.add_paragraph('2. 选择项目,提交开票申请表单(表单字段待定)')
|
||
doc.add_paragraph('3. 财务人员审核开票申请')
|
||
doc.add_paragraph('4. 财务开票后,上传开票附件(可选),填写开票金额')
|
||
doc.add_paragraph('5. 系统自动更新单据状态为"已开票"')
|
||
doc.add_paragraph('6. 收到款项后,商务或财务人员录入回款金额或改变订单状态')
|
||
doc.add_paragraph('7. 订单状态变为"已回款"')
|
||
|
||
add_formatted_paragraph(doc, '表单字段(待定):', bold=True)
|
||
add_bullet_list(doc, [
|
||
'项目信息(自动带出)',
|
||
'申请开票金额',
|
||
'申请日期',
|
||
'开票类型',
|
||
'开票金额(财务填写)',
|
||
'开票日期(财务填写)',
|
||
'回款金额',
|
||
'回款日期',
|
||
'备注'
|
||
])
|
||
|
||
add_section_title(doc, '3.3.3 请款流程', 3)
|
||
doc.add_paragraph('功能描述:商务人员提交请款申请,经审核后由出纳放款。')
|
||
|
||
add_formatted_paragraph(doc, '申请流程:', bold=True)
|
||
doc.add_paragraph('1. 商务人员在线提交请款申请表单(表单字段待定)')
|
||
doc.add_paragraph('2. 总经理审核(通过/驳回)')
|
||
doc.add_paragraph('3. 审核通过后,出纳根据申请放款')
|
||
doc.add_paragraph('4. 出纳点击订单状态,状态变为"已付款"')
|
||
|
||
add_formatted_paragraph(doc, '表单字段(待定):', bold=True)
|
||
add_bullet_list(doc, [
|
||
'请款项目信息',
|
||
'请款金额',
|
||
'请款事由',
|
||
'请款日期',
|
||
'收款单位',
|
||
'收款账号',
|
||
'备注'
|
||
])
|
||
|
||
doc.add_page_break()
|
||
|
||
# 3.4 报表管理
|
||
add_section_title(doc, '3.4 报表管理', 2)
|
||
|
||
add_section_title(doc, '3.4.1 功能概述', 3)
|
||
doc.add_paragraph('报表管理模块提供各类数据统计报表,支持项目、产值、财务等多维度数据查询与导出。')
|
||
|
||
add_section_title(doc, '3.4.2 项目报表', 3)
|
||
|
||
add_section_title(doc, '3.4.2.1 项目明细表', 4)
|
||
doc.add_paragraph('功能描述:展示项目从立项到回款的所有明细信息。')
|
||
|
||
add_formatted_paragraph(doc, '报表字段:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'项目编号',
|
||
'项目名称',
|
||
'客户名称',
|
||
'服务内容',
|
||
'项目类型',
|
||
'负责人',
|
||
'执业者(多个)',
|
||
'立项日期',
|
||
'启动日期',
|
||
'完成日期',
|
||
'项目状态',
|
||
'立项金额',
|
||
'合同金额',
|
||
'开票金额',
|
||
'回款金额',
|
||
'备注'
|
||
])
|
||
|
||
add_formatted_paragraph(doc, '功能特性:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'支持按项目状态、负责人、时间范围等条件筛选',
|
||
'支持导出Excel格式',
|
||
'支持按字段排序',
|
||
'支持分页展示'
|
||
])
|
||
|
||
add_section_title(doc, '3.4.2.2 项目汇总表', 4)
|
||
doc.add_paragraph('功能描述:按项目状态、负责人等维度汇总项目数量。')
|
||
|
||
add_formatted_paragraph(doc, '汇总维度:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'按项目状态汇总(立项、投标中、已中标、已签合同、已启动、已完成等)',
|
||
'按负责人汇总项目数量',
|
||
'按服务内容汇总项目数量',
|
||
'按时间维度汇总(按月、按季度、按年)'
|
||
])
|
||
|
||
add_formatted_paragraph(doc, '展示内容:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'汇总维度(状态/负责人/服务内容/时间)',
|
||
'项目数量',
|
||
'总金额',
|
||
'占比(可选)'
|
||
])
|
||
|
||
add_section_title(doc, '3.4.3 产值报表', 3)
|
||
|
||
add_section_title(doc, '3.4.3.1 产值明细表', 4)
|
||
doc.add_paragraph('功能描述:根据项目过程信息,计算每个项目对应到执业者的完成产值明细。')
|
||
|
||
add_formatted_paragraph(doc, '报表字段:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'项目编号',
|
||
'项目名称',
|
||
'执业者',
|
||
'工作内容',
|
||
'工作内容完成状态',
|
||
'产值比例',
|
||
'项目总金额',
|
||
'计算产值',
|
||
'完成时间'
|
||
])
|
||
|
||
add_formatted_paragraph(doc, '产值计算公式:', bold=True)
|
||
doc.add_paragraph('产值 = 项目金额 × 该工作内容的产值比例')
|
||
|
||
p = doc.add_paragraph()
|
||
p.add_run('各服务类型的产值比例分配如下:').bold = True
|
||
|
||
output_ratios = [
|
||
('结算审计、概算编制及审核、清单控制价编制及审核', [('计量', '30%'), ('计价', '30%'), ('对账', '10%'), ('出报告', '30%')]),
|
||
('工程咨询', [('文本', '30%'), ('估算', '20%'), ('出报告', '50%')]),
|
||
('跟踪审计', [('现场跟踪', '60%'), ('进度款审核', '40%')]),
|
||
('项目管理', [('项目协助甲方报批报建', '40%'), ('项目实施过程中管控', '60%')]),
|
||
('工程监理', [('现场跟踪', '60%'), ('进度审核', '40%')])
|
||
]
|
||
|
||
for main_type, ratios in output_ratios:
|
||
p = doc.add_paragraph(f' • {main_type}:')
|
||
for work_item, ratio in ratios:
|
||
doc.add_paragraph(f' - {work_item}:{ratio}')
|
||
|
||
add_formatted_paragraph(doc, '计算规则:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'产值计算基于工作内容完成状态',
|
||
'工作内容完成后,按比例计算产值',
|
||
'支持按完成时间统计产值',
|
||
'产值明细支持导出Excel'
|
||
])
|
||
|
||
add_section_title(doc, '3.4.3.2 产值汇总表', 4)
|
||
doc.add_paragraph('功能描述:按执业者统计指定时间段的产值完成情况。')
|
||
|
||
add_formatted_paragraph(doc, '汇总维度:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'按执业者汇总',
|
||
'按时间段汇总(支持选择起始日期和结束日期)',
|
||
'按项目类型汇总(可选)'
|
||
])
|
||
|
||
add_formatted_paragraph(doc, '展示内容:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'执业者姓名',
|
||
'时间段',
|
||
'完成项目数量',
|
||
'总产值',
|
||
'平均项目产值',
|
||
'产值排名(可选)'
|
||
])
|
||
|
||
add_section_title(doc, '3.4.4 财务报表', 3)
|
||
|
||
add_section_title(doc, '3.4.4.1 应收账款汇总表', 4)
|
||
doc.add_paragraph('功能描述:按客户单位汇总应收账款。')
|
||
|
||
add_formatted_paragraph(doc, '报表字段:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'客户单位',
|
||
'项目数量',
|
||
'应收账款总额',
|
||
'已开票金额',
|
||
'已回款金额',
|
||
'未回款金额',
|
||
'账龄(可选)'
|
||
])
|
||
|
||
add_section_title(doc, '3.4.4.2 应收账款明细表', 4)
|
||
doc.add_paragraph('功能描述:按客户单位汇总显示多个项目的应收账款明细。')
|
||
|
||
add_formatted_paragraph(doc, '报表字段:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'客户单位',
|
||
'项目编号',
|
||
'项目名称',
|
||
'合同金额',
|
||
'开票金额',
|
||
'回款金额',
|
||
'未回款金额',
|
||
'开票日期',
|
||
'最后回款日期',
|
||
'账龄'
|
||
])
|
||
|
||
add_section_title(doc, '3.4.4.3 应付账款明细表', 4)
|
||
doc.add_paragraph('功能描述:对应请款申请,展示应付账款明细。')
|
||
|
||
add_formatted_paragraph(doc, '报表字段:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'请款编号',
|
||
'请款日期',
|
||
'请款项目',
|
||
'请款金额',
|
||
'请款事由',
|
||
'收款单位',
|
||
'审核状态',
|
||
'付款状态',
|
||
'付款日期',
|
||
'备注'
|
||
])
|
||
|
||
add_section_title(doc, '3.4.4.4 应付账款汇总表', 4)
|
||
doc.add_paragraph('功能描述:汇总所有请款金额。')
|
||
|
||
add_formatted_paragraph(doc, '汇总维度:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'按时间维度汇总(按月、按季度、按年)',
|
||
'按审核状态汇总',
|
||
'按付款状态汇总'
|
||
])
|
||
|
||
add_formatted_paragraph(doc, '展示内容:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'时间段',
|
||
'请款总金额',
|
||
'已审核金额',
|
||
'已付款金额',
|
||
'待付款金额',
|
||
'请款单数量'
|
||
])
|
||
|
||
doc.add_page_break()
|
||
|
||
# 3.5 系统设置
|
||
add_section_title(doc, '3.5 系统设置', 2)
|
||
|
||
add_section_title(doc, '3.5.1 企业组织架构管理', 3)
|
||
doc.add_paragraph('功能描述:支持自定义企业组织架构,建立部门层级关系。')
|
||
|
||
add_formatted_paragraph(doc, '功能特性:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'支持多级部门结构',
|
||
'支持部门名称、编码、负责人设置',
|
||
'支持部门排序、启用/禁用',
|
||
'支持部门删除(需检查是否有人员关联)'
|
||
])
|
||
|
||
add_formatted_paragraph(doc, '示例组织架构:', bold=True)
|
||
doc.add_paragraph('公司名')
|
||
doc.add_paragraph(' ├── 商务部')
|
||
doc.add_paragraph(' │ ├── 业务一部')
|
||
doc.add_paragraph(' │ ├── 业务二部')
|
||
doc.add_paragraph(' │ └── 业务三部')
|
||
doc.add_paragraph(' ├── 行政部')
|
||
doc.add_paragraph(' └── 财务部')
|
||
|
||
add_section_title(doc, '3.5.2 账号管理', 3)
|
||
doc.add_paragraph('功能描述:管理系统用户账号,包括账号创建、角色分配、权限设置等。')
|
||
|
||
add_formatted_paragraph(doc, '账号属性:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'账号(用户名,唯一标识)',
|
||
'密码(加密存储)',
|
||
'姓名',
|
||
'部门(关联组织架构)',
|
||
'职位',
|
||
'手机号',
|
||
'邮箱',
|
||
'角色(部门负责人/员工)',
|
||
'状态(启用/禁用)'
|
||
])
|
||
|
||
add_formatted_paragraph(doc, '角色权限:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'部门负责人:可审核本部门员工提交的工作资料',
|
||
'员工:可提交工作资料,由直属部门领导审核',
|
||
'执业人员:只能查看和操作成果管理相关功能,专注提交业务成果及查询',
|
||
'财务人员:可查看发票及请款相关功能',
|
||
'总经理:拥有所有审核权限',
|
||
'系统管理员:拥有所有功能权限'
|
||
])
|
||
|
||
add_formatted_paragraph(doc, '权限管理:', bold=True)
|
||
doc.add_paragraph('系统需支持基于角色的权限控制(RBAC),可设定账号可查看和操作的功能模块。')
|
||
doc.add_paragraph('权限配置包括:')
|
||
add_numbered_list(doc, [
|
||
'功能模块权限(立项管理、过程管理、财务管理、报表管理等)',
|
||
'操作权限(查看、新增、编辑、删除、审核等)',
|
||
'数据权限(可查看的数据范围,如仅本部门数据)'
|
||
])
|
||
|
||
add_section_title(doc, '3.5.3 系统版本', 3)
|
||
doc.add_paragraph('系统需同时支持PC版和手机版,提供不同的使用体验。')
|
||
|
||
add_formatted_paragraph(doc, 'PC版功能:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'完整的功能操作(资料提交、附件上传、报表查询等)',
|
||
'大屏展示,适合详细数据查看和复杂操作',
|
||
'支持批量操作、数据导出等高级功能',
|
||
'支持文件上传、下载等文件管理功能'
|
||
])
|
||
|
||
add_formatted_paragraph(doc, '手机版功能:', bold=True)
|
||
add_bullet_list(doc, [
|
||
'流程节点审核(快速审核,支持通过/驳回)',
|
||
'简单报表查询(关键数据展示)',
|
||
'提醒通知功能(审核待办提醒、工作通知)',
|
||
'消息推送(支持推送审核待办、流程进展等消息)',
|
||
'移动端优化界面,适配手机屏幕'
|
||
])
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 4. 非功能需求 ==========
|
||
add_section_title(doc, '4. 非功能需求', 1)
|
||
|
||
add_section_title(doc, '4.1 性能要求', 2)
|
||
add_bullet_list(doc, [
|
||
'系统响应时间:常规操作响应时间不超过2秒,复杂查询不超过5秒',
|
||
'并发用户数:支持至少50个用户同时在线使用',
|
||
'数据容量:支持至少10万条项目记录',
|
||
'报表查询:大数据量报表查询支持分页,避免页面卡顿'
|
||
])
|
||
|
||
add_section_title(doc, '4.2 安全性要求', 2)
|
||
add_bullet_list(doc, [
|
||
'用户密码需加密存储,支持密码复杂度要求',
|
||
'数据传输采用HTTPS协议加密',
|
||
'操作日志记录:关键操作(新增、修改、删除、审核)需记录操作日志',
|
||
'权限控制:严格按角色和权限控制数据访问范围',
|
||
'防止SQL注入、XSS等安全漏洞'
|
||
])
|
||
|
||
add_section_title(doc, '4.3 可用性要求', 2)
|
||
add_bullet_list(doc, [
|
||
'系统可用性:99%以上(排除计划内维护时间)',
|
||
'数据备份:每日自动备份,支持数据恢复',
|
||
'异常处理:友好的错误提示信息',
|
||
'浏览器兼容:支持Chrome、Edge、Firefox等主流浏览器'
|
||
])
|
||
|
||
add_section_title(doc, '4.4 可维护性要求', 2)
|
||
add_bullet_list(doc, [
|
||
'代码规范:遵循开发规范,代码注释完整',
|
||
'日志记录:关键操作和异常需记录日志,便于问题排查',
|
||
'配置管理:系统参数、计算公式等可配置化',
|
||
'文档完善:提供技术文档、用户手册等'
|
||
])
|
||
|
||
add_section_title(doc, '4.5 用户体验要求', 2)
|
||
add_bullet_list(doc, [
|
||
'界面友好:界面简洁清晰,操作流程顺畅',
|
||
'响应式设计:PC端和移动端界面适配良好',
|
||
'操作提示:关键操作有确认提示,避免误操作',
|
||
'数据校验:输入数据实时校验,及时提示错误',
|
||
'帮助文档:提供操作帮助和说明'
|
||
])
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 5. 数据字典 ==========
|
||
add_section_title(doc, '5. 数据字典', 1)
|
||
|
||
add_section_title(doc, '5.1 核心数据表', 2)
|
||
|
||
doc.add_paragraph('主要数据表及其字段说明:')
|
||
|
||
add_section_title(doc, '5.1.1 项目立项表(project_initiation)', 3)
|
||
fields = [
|
||
('项目编号', 'project_no', 'VARCHAR(50)', '主键,系统生成,格式:YY-N'),
|
||
('项目名称', 'project_name', 'VARCHAR(200)', '必填'),
|
||
('客户名称', 'customer_name', 'VARCHAR(200)', '必填'),
|
||
('服务内容', 'service_content', 'VARCHAR(100)', '下拉选择'),
|
||
('项目类型', 'project_type', 'VARCHAR(50)', '必填'),
|
||
('预计金额', 'estimated_amount', 'DECIMAL(18,2)', '必填'),
|
||
('立项日期', 'initiation_date', 'DATE', '必填'),
|
||
('申请人', 'applicant', 'VARCHAR(50)', '关联用户表'),
|
||
('项目状态', 'project_status', 'VARCHAR(50)', '已立项/投标中/已中标/已签合同/已启动等'),
|
||
('备注', 'remark', 'TEXT', '可选'),
|
||
('创建时间', 'create_time', 'DATETIME', '系统生成'),
|
||
('更新时间', 'update_time', 'DATETIME', '系统生成')
|
||
]
|
||
|
||
table = doc.add_table(rows=1, cols=4)
|
||
table.style = 'Light Grid Accent 1'
|
||
hdr_cells = table.rows[0].cells
|
||
hdr_cells[0].text = '字段说明'
|
||
hdr_cells[1].text = '字段名'
|
||
hdr_cells[2].text = '数据类型'
|
||
hdr_cells[3].text = '说明'
|
||
|
||
for desc, name, dtype, remark in fields:
|
||
row_cells = table.add_row().cells
|
||
row_cells[0].text = desc
|
||
row_cells[1].text = name
|
||
row_cells[2].text = dtype
|
||
row_cells[3].text = remark
|
||
|
||
add_section_title(doc, '5.1.2 项目启动表(project_startup)', 3)
|
||
fields2 = [
|
||
('启动编号', 'startup_no', 'VARCHAR(50)', '主键,系统生成'),
|
||
('关联项目编号', 'project_no', 'VARCHAR(50)', '外键,关联项目立项表'),
|
||
('启动日期', 'startup_date', 'DATE', '必填'),
|
||
('负责人', 'manager', 'VARCHAR(50)', '关联用户表'),
|
||
('预计完成日期', 'expected_complete_date', 'DATE', '必填'),
|
||
('启动状态', 'startup_status', 'VARCHAR(50)', '待审核/已启动/已完成等'),
|
||
('备注', 'remark', 'TEXT', '可选'),
|
||
('创建时间', 'create_time', 'DATETIME', '系统生成'),
|
||
('更新时间', 'update_time', 'DATETIME', '系统生成')
|
||
]
|
||
|
||
table2 = doc.add_table(rows=1, cols=4)
|
||
table2.style = 'Light Grid Accent 1'
|
||
hdr_cells2 = table2.rows[0].cells
|
||
hdr_cells2[0].text = '字段说明'
|
||
hdr_cells2[1].text = '字段名'
|
||
hdr_cells2[2].text = '数据类型'
|
||
hdr_cells2[3].text = '说明'
|
||
|
||
for desc, name, dtype, remark in fields2:
|
||
row_cells = table2.add_row().cells
|
||
row_cells[0].text = desc
|
||
row_cells[1].text = name
|
||
row_cells[2].text = dtype
|
||
row_cells[3].text = remark
|
||
|
||
doc.add_paragraph('注:详细的数据表结构需在数据库设计阶段进一步完善。')
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 6. 接口规范 ==========
|
||
add_section_title(doc, '6. 接口规范(概要)', 1)
|
||
doc.add_paragraph('系统需提供RESTful API接口,支持前后端分离架构。主要接口包括:')
|
||
|
||
add_section_title(doc, '6.1 项目相关接口', 2)
|
||
add_bullet_list(doc, [
|
||
'POST /api/project/initiation - 提交立项申请',
|
||
'GET /api/project/list - 查询项目列表',
|
||
'GET /api/project/{id} - 查询项目详情',
|
||
'PUT /api/project/{id}/status - 更新项目状态',
|
||
'POST /api/project/startup - 提交启动申请'
|
||
])
|
||
|
||
add_section_title(doc, '6.2 审核相关接口', 2)
|
||
add_bullet_list(doc, [
|
||
'POST /api/approval/submit - 提交审核',
|
||
'GET /api/approval/pending - 查询待审核列表',
|
||
'POST /api/approval/{id}/approve - 审核通过',
|
||
'POST /api/approval/{id}/reject - 审核驳回'
|
||
])
|
||
|
||
add_section_title(doc, '6.3 报表相关接口', 2)
|
||
add_bullet_list(doc, [
|
||
'GET /api/report/project/detail - 项目明细表',
|
||
'GET /api/report/project/summary - 项目汇总表',
|
||
'GET /api/report/output/detail - 产值明细表',
|
||
'GET /api/report/output/summary - 产值汇总表',
|
||
'GET /api/report/finance/receivable - 应收账款报表',
|
||
'GET /api/report/finance/payable - 应付账款报表'
|
||
])
|
||
|
||
doc.add_paragraph('注:详细的接口规范需在接口设计文档中详细说明,包括请求参数、响应格式、错误码等。')
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 7. 验收标准 ==========
|
||
add_section_title(doc, '7. 验收标准', 1)
|
||
|
||
add_section_title(doc, '7.1 功能验收', 2)
|
||
doc.add_paragraph('所有功能模块需满足以下验收标准:')
|
||
add_numbered_list(doc, [
|
||
'功能完整:所有需求文档中描述的功能均需实现',
|
||
'业务流程正确:各业务流程流转正确,状态更新准确',
|
||
'数据准确性:编号生成、数据计算、数据关联等准确无误',
|
||
'权限控制有效:各角色权限控制正确,数据隔离有效',
|
||
'异常处理完善:异常情况有合理的提示和处理'
|
||
])
|
||
|
||
add_section_title(doc, '7.2 性能验收', 2)
|
||
add_numbered_list(doc, [
|
||
'常规操作响应时间不超过2秒',
|
||
'复杂查询响应时间不超过5秒',
|
||
'支持50个用户同时在线使用',
|
||
'报表导出功能正常,大数据量下不超时'
|
||
])
|
||
|
||
add_section_title(doc, '7.3 兼容性验收', 2)
|
||
add_numbered_list(doc, [
|
||
'PC端支持Chrome、Edge、Firefox等主流浏览器',
|
||
'移动端支持iOS和Android系统',
|
||
'界面在不同分辨率下显示正常',
|
||
'响应式设计在不同设备上适配良好'
|
||
])
|
||
|
||
add_section_title(doc, '7.4 安全验收', 2)
|
||
add_numbered_list(doc, [
|
||
'用户密码加密存储',
|
||
'数据传输采用HTTPS',
|
||
'操作日志记录完整',
|
||
'SQL注入、XSS等安全漏洞测试通过'
|
||
])
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 8. 项目计划 ==========
|
||
add_section_title(doc, '8. 项目计划(示例)', 1)
|
||
|
||
add_section_title(doc, '8.1 里程碑', 2)
|
||
milestones = [
|
||
('M1', '需求评审完成', '需求文档评审通过,确认需求范围', '待定'),
|
||
('M2', '原型与交互确认', '完成原型设计,确认交互流程', '待定'),
|
||
('M3', '数据库设计完成', '完成数据库设计,确认表结构', '待定'),
|
||
('M4', '接口设计完成', '完成接口设计文档,确认接口规范', '待定'),
|
||
('M5', '开发完成', '所有功能开发完成,包括前端和后端', '待定'),
|
||
('M6', '测试完成', '功能测试、性能测试、安全测试完成', '待定'),
|
||
('M7', '试运行', '系统上线试运行,收集反馈', '待定'),
|
||
('M8', '正式验收', '项目正式验收,交付使用', '待定')
|
||
]
|
||
|
||
table3 = doc.add_table(rows=1, cols=4)
|
||
table3.style = 'Light Grid Accent 1'
|
||
hdr_cells3 = table3.rows[0].cells
|
||
hdr_cells3[0].text = '里程碑'
|
||
hdr_cells3[1].text = '里程碑名称'
|
||
hdr_cells3[2].text = '说明'
|
||
hdr_cells3[3].text = '预计时间'
|
||
|
||
for mile, name, desc, time in milestones:
|
||
row_cells = table3.add_row().cells
|
||
row_cells[0].text = mile
|
||
row_cells[1].text = name
|
||
row_cells[2].text = desc
|
||
row_cells[3].text = time or '待定'
|
||
|
||
add_section_title(doc, '8.2 开发要点', 2)
|
||
doc.add_paragraph('开发过程中需重点关注以下要点:')
|
||
add_numbered_list(doc, [
|
||
'编号生成规则:项目编号、启动编号的生成规则需与业务规则完全一致,确保唯一性',
|
||
'审核流程配置:审核流程需支持可配置,便于后续调整',
|
||
'计算公式:产值、费用等计算公式需与财务口径对齐,支持配置化',
|
||
'数据关联:立项与启动、启动与成果等数据关联需准确,支持数据追溯',
|
||
'报表性能:报表查询需优化,大数据量下支持分页和导出',
|
||
'移动端适配:移动端界面需优化,确保操作便捷',
|
||
'消息通知:审核待办、流程进展等消息通知需及时准确'
|
||
])
|
||
|
||
# ========== 9. 附录 ==========
|
||
add_section_title(doc, '9. 附录', 1)
|
||
|
||
add_section_title(doc, '9.1 参考资料', 2)
|
||
add_bullet_list(doc, [
|
||
'OA系统功能定制方案(原始需求文档)',
|
||
'相关法律法规文件(如鄂价房字[2001]107号文等)',
|
||
'系统原型图(见需求.md中的图片)'
|
||
])
|
||
|
||
add_section_title(doc, '9.2 变更记录', 2)
|
||
doc.add_paragraph('本文档的变更记录:')
|
||
|
||
table4 = doc.add_table(rows=1, cols=4)
|
||
table4.style = 'Light Grid Accent 1'
|
||
hdr_cells4 = table4.rows[0].cells
|
||
hdr_cells4[0].text = '版本'
|
||
hdr_cells4[1].text = '日期'
|
||
hdr_cells4[2].text = '变更内容'
|
||
hdr_cells4[3].text = '变更人'
|
||
|
||
row_cells4 = table4.add_row().cells
|
||
row_cells4[0].text = 'v1.0'
|
||
row_cells4[1].text = datetime.now().strftime("%Y-%m-%d")
|
||
row_cells4[2].text = '初始版本'
|
||
row_cells4[3].text = '产品经理'
|
||
|
||
return doc
|
||
|
||
def main():
|
||
print("正在生成详细的产品需求文档...")
|
||
doc = generate_detailed_prd()
|
||
import os
|
||
from datetime import datetime
|
||
output_file = "需求文档_详细版.docx"
|
||
# 如果文件存在,添加时间戳
|
||
if os.path.exists(output_file):
|
||
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
||
output_file = f"需求文档_详细版_{timestamp}.docx"
|
||
doc.save(output_file)
|
||
print(f"✓ 文档生成成功!")
|
||
print(f" 文件路径: {output_file}")
|
||
print(f" 文档包含完整的功能需求、业务流程、数据字典、验收标准等内容")
|
||
|
||
if __name__ == "__main__":
|
||
main()
|
||
|