595 lines
30 KiB
Python
595 lines
30 KiB
Python
#!/usr/bin/env python
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
生成OA系统前端、后端具体实施计划
|
||
"""
|
||
from docx import Document
|
||
from docx.shared import Pt, Inches
|
||
from docx.enum.text import WD_ALIGN_PARAGRAPH
|
||
from datetime import datetime, timedelta
|
||
from docx.oxml.ns import qn
|
||
|
||
def set_chinese_font(run, font_name='宋体'):
|
||
"""设置中文字体"""
|
||
run.font.name = font_name
|
||
run._element.rPr.rFonts.set(qn('w:eastAsia'), font_name)
|
||
|
||
def add_table_with_header(doc, headers, data, style='Light Grid Accent 1'):
|
||
"""创建带表头的表格"""
|
||
table = doc.add_table(rows=1, cols=len(headers))
|
||
table.style = style
|
||
|
||
hdr_cells = table.rows[0].cells
|
||
for i, header in enumerate(headers):
|
||
hdr_cells[i].text = header
|
||
for paragraph in hdr_cells[i].paragraphs:
|
||
for run in paragraph.runs:
|
||
run.bold = True
|
||
set_chinese_font(run)
|
||
|
||
for row_data in data:
|
||
row_cells = table.add_row().cells
|
||
for i, cell_data in enumerate(row_data):
|
||
row_cells[i].text = str(cell_data)
|
||
for paragraph in row_cells[i].paragraphs:
|
||
for run in paragraph.runs:
|
||
set_chinese_font(run)
|
||
|
||
return table
|
||
|
||
def generate_implementation_plan():
|
||
"""生成实施计划文档"""
|
||
doc = Document()
|
||
|
||
style = doc.styles['Normal']
|
||
font = style.font
|
||
font.name = '宋体'
|
||
font.size = Pt(12)
|
||
|
||
# ========== 文档头部 ==========
|
||
title = doc.add_heading('OA系统开发实施计划', 0)
|
||
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||
|
||
doc.add_paragraph(f'编制日期:{datetime.now().strftime("%Y年%m月%d日")}')
|
||
doc.add_paragraph('文档说明:本文档详细描述了OA系统的前端、后端开发实施计划,包括技术架构、开发阶段、时间安排、任务分解等内容。')
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 一、项目概述 ==========
|
||
doc.add_heading('一、项目概述', 1)
|
||
|
||
doc.add_paragraph('项目名称:OA系统开发项目')
|
||
doc.add_paragraph('项目周期:9周(约2.25个月)')
|
||
doc.add_paragraph('总工作量:240人天')
|
||
|
||
doc.add_paragraph()
|
||
doc.add_paragraph('项目架构:')
|
||
architecture = [
|
||
'前端:PC端(Vue.js 3.x + Ant Design Vue)',
|
||
'移动端:UniApp + Ant Design Mobile',
|
||
'后端:Java Spring Boot',
|
||
'数据库:MySQL 8.0',
|
||
'缓存:Redis',
|
||
'文件存储:本地存储或云存储',
|
||
'消息队列:RabbitMQ或Redis'
|
||
]
|
||
for item in architecture:
|
||
p = doc.add_paragraph(item, style='List Bullet')
|
||
set_chinese_font(p.runs[0])
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 二、后端实施计划 ==========
|
||
doc.add_heading('二、后端实施计划', 1)
|
||
|
||
doc.add_heading('2.1 技术架构', 2)
|
||
|
||
doc.add_paragraph('后端技术栈:')
|
||
backend_stack = [
|
||
('开发框架', 'Spring Boot 2.7+', 'Java后端开发框架'),
|
||
('数据库', 'MySQL 8.0', '主数据库,支持事务'),
|
||
('缓存', 'Redis 6.0+', '缓存、会话存储、消息队列'),
|
||
('ORM框架', 'MyBatis Plus', '数据库操作框架'),
|
||
('API文档', 'Swagger / Knife4j', '接口文档自动生成'),
|
||
('认证授权', 'Spring Security + JWT', '用户认证和权限控制'),
|
||
('文件存储', '本地存储 / 阿里云OSS', '附件存储'),
|
||
('消息队列', 'RabbitMQ / Redis', '异步消息处理'),
|
||
('日志框架', 'Logback', '日志记录'),
|
||
('测试框架', 'JUnit 5', '单元测试'),
|
||
('构建工具', 'Maven / Gradle', '项目构建和依赖管理')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['技术组件', '技术选型', '说明'], backend_stack)
|
||
|
||
doc.add_heading('2.2 数据库设计', 2)
|
||
|
||
doc.add_paragraph('核心数据表设计(主要表):')
|
||
|
||
db_tables = [
|
||
('用户表', 'sys_user', '用户基本信息、账号、密码等'),
|
||
('角色表', 'sys_role', '角色定义、角色名称、角色编码'),
|
||
('权限表', 'sys_permission', '权限定义、权限编码、权限路径'),
|
||
('组织架构表', 'sys_dept', '部门信息、部门层级关系'),
|
||
('项目立项表', 'project_initiation', '项目立项信息、项目基本信息'),
|
||
('项目启动表', 'project_startup', '项目启动信息、人员分配'),
|
||
('成果提交表', 'project_output', '项目成果信息、成果状态'),
|
||
('审核记录表', 'approval_record', '审核流程记录、审核意见'),
|
||
('财务开票表', 'finance_invoice', '开票信息、开票金额'),
|
||
('财务回款表', 'finance_payment', '回款信息、回款金额'),
|
||
('请款申请表', 'finance_request', '请款申请信息'),
|
||
('附件表', 'sys_attachment', '附件信息、附件路径'),
|
||
('消息通知表', 'sys_notification', '消息通知记录')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['表说明', '表名', '主要字段说明'], db_tables)
|
||
|
||
doc.add_heading('2.3 后端开发阶段划分', 2)
|
||
|
||
doc.add_heading('2.3.1 第1-2周:基础架构搭建', 3)
|
||
|
||
week1_2_backend = [
|
||
('环境搭建', '2天', '开发环境、测试环境、代码仓库、CI/CD配置', '后端架构师'),
|
||
('项目框架搭建', '3天', 'Spring Boot项目初始化、Maven/Gradle配置、依赖管理', '后端架构师'),
|
||
('数据库设计', '3天', '数据库表结构设计、索引设计、数据字典', '后端架构师'),
|
||
('基础工具类', '2天', '通用工具类、常量定义、异常处理', '后端开发1'),
|
||
('API统一响应', '1天', '统一响应格式、错误码定义', '后端开发1'),
|
||
('日志配置', '1天', '日志级别、日志输出、日志文件管理', '后端开发1')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['任务', '工期', '工作内容', '负责人'], week1_2_backend)
|
||
|
||
doc.add_heading('2.3.2 第3-4周:核心基础模块开发', 3)
|
||
|
||
week3_4_backend = [
|
||
('用户管理模块', '3天', '用户CRUD、用户状态管理、密码加密', '后端开发1'),
|
||
('角色权限模块', '4天', '角色管理、权限管理、RBAC权限控制', '后端开发1'),
|
||
('组织架构模块', '3天', '部门管理、部门树结构、人员管理', '后端开发2'),
|
||
('登录认证模块', '3天', 'JWT生成、登录验证、Token刷新', '后端开发1'),
|
||
('审核流程引擎', '5天', '审核流程配置、审核节点管理、流程流转', '后端架构师'),
|
||
('消息通知模块', '4天', '站内消息、邮件发送、短信发送、推送', '后端开发2'),
|
||
('附件管理模块', '3天', '文件上传、下载、预览、存储管理', '后端开发2')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['任务', '工期', '工作内容', '负责人'], week3_4_backend)
|
||
|
||
doc.add_heading('2.3.3 第5-6周:商机管理模块开发', 3)
|
||
|
||
week5_6_backend = [
|
||
('立项申请接口', '2天', '立项申请提交、数据校验、保存', '后端开发1'),
|
||
('项目编号生成', '1天', '项目编号自动生成逻辑(年份+序号)', '后端开发1'),
|
||
('立项审核流程', '2天', '审核流程集成、审核状态更新', '后端开发1'),
|
||
('项目查询接口', '2天', '多条件查询、分页查询、导出', '后端开发2'),
|
||
('投标管理接口', '1天', '投标状态更新、投标附件上传', '后端开发2'),
|
||
('合同管理接口', '1天', '合同状态更新、合同附件上传', '后端开发2'),
|
||
('项目状态管理', '1天', '项目状态流转、状态校验', '后端开发1')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['任务', '工期', '工作内容', '负责人'], week5_6_backend)
|
||
|
||
doc.add_heading('2.3.4 第7-8周:项目过程管理模块开发', 3)
|
||
|
||
week7_8_backend = [
|
||
('项目启动接口', '2天', '启动申请提交、关联立项项目', '后端开发1'),
|
||
('启动编号生成', '1天', '启动编号自动生成(立项编号+类型+序号)', '后端开发1'),
|
||
('数据关联导入', '2天', '立项数据自动导入启动单', '后端开发1'),
|
||
('人员分配接口', '2天', '执业工程师分配、工作内容分配', '后端开发2'),
|
||
('启动审核流程', '2天', '启动审核流程集成', '后端开发1'),
|
||
('成果提交接口', '2天', '成果提交、成果状态更新', '后端开发2'),
|
||
('成果审核流程', '3天', '成果审核流程(初稿、对账、最终成果)', '后端开发2'),
|
||
('差异提醒功能', '1天', '初稿与对账金额差异计算与提醒', '后端开发2'),
|
||
('进度查询接口', '2天', '项目进度查询、多条件筛选', '后端开发1'),
|
||
('产值计算引擎', '3天', '产值计算公式、费用计算逻辑', '后端架构师')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['任务', '工期', '工作内容', '负责人'], week7_8_backend)
|
||
|
||
doc.add_heading('2.3.5 第9周:财务管理模块开发', 3)
|
||
|
||
week9_backend = [
|
||
('开票申请接口', '2天', '开票申请提交、条件校验', '后端开发1'),
|
||
('开票管理接口', '2天', '开票信息录入、开票状态更新', '后端开发2'),
|
||
('回款管理接口', '2天', '回款信息录入、回款状态更新', '后端开发2'),
|
||
('请款申请接口', '2天', '请款申请提交、请款审核流程', '后端开发1'),
|
||
('付款管理接口', '1天', '付款确认、付款状态更新', '后端开发2')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['任务', '工期', '工作内容', '负责人'], week9_backend)
|
||
|
||
doc.add_heading('2.3.6 第10周:报表管理模块开发', 3)
|
||
|
||
week10_backend = [
|
||
('项目明细表接口', '2天', '项目明细数据查询、导出', '后端开发1'),
|
||
('项目汇总表接口', '1天', '按状态、负责人汇总项目数据', '后端开发1'),
|
||
('产值明细表接口', '2天', '产值明细计算、数据查询', '后端架构师'),
|
||
('产值汇总表接口', '1天', '按执业者汇总产值数据', '后端架构师'),
|
||
('应收账款报表接口', '2天', '应收账款汇总、明细查询', '后端开发2'),
|
||
('应付账款报表接口', '2天', '应付账款汇总、明细查询', '后端开发2')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['任务', '工期', '工作内容', '负责人'], week10_backend)
|
||
|
||
doc.add_heading('2.3.7 第11-12周:系统设置与接口完善', 3)
|
||
|
||
week11_12_backend = [
|
||
('系统参数配置', '2天', '系统参数管理、配置接口', '后端开发1'),
|
||
('审核流程配置', '2天', '审核流程可配置化接口', '后端开发1'),
|
||
('接口文档完善', '2天', 'Swagger接口文档补充完善', '后端开发1+2'),
|
||
('接口联调测试', '3天', '前后端接口联调、bug修复', '后端开发1+2'),
|
||
('性能优化', '2天', '接口性能优化、数据库查询优化', '后端架构师'),
|
||
('安全加固', '2天', 'SQL注入防护、XSS防护、权限校验', '后端架构师')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['任务', '工期', '工作内容', '负责人'], week11_12_backend)
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 三、前端实施计划 ==========
|
||
doc.add_heading('三、前端实施计划(PC端)', 1)
|
||
|
||
doc.add_heading('3.1 技术架构', 2)
|
||
|
||
doc.add_paragraph('PC前端技术栈:')
|
||
frontend_stack = [
|
||
('开发框架', 'Vue.js 3.x', '渐进式JavaScript框架'),
|
||
('UI组件库', 'Ant Design Vue 3.x', '基于Vue 3的企业级UI组件库'),
|
||
('状态管理', 'Pinia', 'Vue 3官方推荐的状态管理库'),
|
||
('路由管理', 'Vue Router 4.x', '前端路由管理'),
|
||
('HTTP请求', 'Axios', 'HTTP客户端'),
|
||
('构建工具', 'Vite', '快速构建工具'),
|
||
('代码规范', 'ESLint + Prettier', '代码检查和格式化'),
|
||
('CSS预处理器', 'Less', 'CSS预处理(Ant Design Vue使用Less)'),
|
||
('图表库', 'ECharts', '数据可视化图表'),
|
||
('导出功能', 'xlsx / jsPDF', 'Excel/PDF导出'),
|
||
('表单验证', 'Ant Design Vue Form', '表单验证组件')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['技术组件', '技术选型', '说明'], frontend_stack)
|
||
|
||
doc.add_heading('3.2 前端开发阶段划分', 2)
|
||
|
||
doc.add_heading('3.2.1 第3-4周:基础框架搭建', 3)
|
||
|
||
week3_4_frontend = [
|
||
('项目初始化', '1天', 'Vue3项目创建、Vite配置、Ant Design Vue安装配置', '前端开发1'),
|
||
('路由配置', '1天', '路由结构设计、路由守卫、权限路由', '前端开发1'),
|
||
('状态管理配置', '1天', 'Pinia/Vuex配置、用户状态、权限状态', '前端开发1'),
|
||
('API封装', '2天', 'Axios封装、请求拦截、响应拦截、错误处理', '前端开发1'),
|
||
('公共组件', '3天', '布局组件、导航组件、面包屑组件', '前端开发2'),
|
||
('工具函数', '1天', '日期格式化、金额格式化、通用工具函数', '前端开发2'),
|
||
('登录页面', '2天', '登录界面、登录逻辑、Token存储', '前端开发1')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['任务', '工期', '工作内容', '负责人'], week3_4_frontend)
|
||
|
||
doc.add_heading('3.2.2 第5-6周:商机管理模块前端', 3)
|
||
|
||
week5_6_frontend = [
|
||
('立项申请页面', '3天', '立项表单、表单验证、附件上传', '前端开发1'),
|
||
('立项列表页面', '2天', '项目列表、查询条件、分页', '前端开发2'),
|
||
('项目详情页面', '2天', '项目详情展示、状态查看', '前端开发2'),
|
||
('审核页面', '2天', '审核列表、审核操作、审核意见', '前端开发1'),
|
||
('投标管理页面', '1天', '投标状态更新、附件上传', '前端开发2'),
|
||
('合同管理页面', '1天', '合同状态更新、附件上传', '前端开发2')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['任务', '工期', '工作内容', '负责人'], week5_6_frontend)
|
||
|
||
doc.add_heading('3.2.3 第7-8周:项目过程管理模块前端', 3)
|
||
|
||
week7_8_frontend = [
|
||
('启动申请页面', '3天', '启动表单、关联立项、人员分配', '前端开发1'),
|
||
('启动列表页面', '1天', '启动列表、查询筛选', '前端开发2'),
|
||
('成果提交页面', '3天', '成果提交表单、成果状态、附件上传', '前端开发1'),
|
||
('成果审核页面', '2天', '成果审核列表、审核操作', '前端开发2'),
|
||
('进度查询页面', '2天', '进度列表、多条件查询、进度展示', '前端开发1'),
|
||
('差异提醒组件', '1天', '金额差异提醒弹窗', '前端开发2')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['任务', '工期', '工作内容', '负责人'], week7_8_frontend)
|
||
|
||
doc.add_heading('3.2.4 第9周:财务管理模块前端', 3)
|
||
|
||
week9_frontend = [
|
||
('开票申请页面', '2天', '开票申请表单、项目选择', '前端开发1'),
|
||
('开票管理页面', '2天', '开票列表、开票信息录入', '前端开发2'),
|
||
('回款管理页面', '2天', '回款列表、回款信息录入', '前端开发2'),
|
||
('请款申请页面', '2天', '请款申请表单、请款审核', '前端开发1')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['任务', '工期', '工作内容', '负责人'], week9_frontend)
|
||
|
||
doc.add_heading('3.2.5 第10周:报表管理模块前端', 3)
|
||
|
||
week10_frontend = [
|
||
('项目明细表页面', '2天', '表格展示、查询条件、导出功能', '前端开发1'),
|
||
('项目汇总表页面', '1天', '汇总数据展示、图表展示', '前端开发2'),
|
||
('产值明细表页面', '2天', '产值明细表格、查询筛选、导出', '前端开发1'),
|
||
('产值汇总表页面', '1天', '产值汇总图表、时间段选择', '前端开发2'),
|
||
('财务报表页面', '3天', '应收应付报表、图表展示、导出', '前端开发1+2')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['任务', '工期', '工作内容', '负责人'], week10_frontend)
|
||
|
||
doc.add_heading('3.2.6 第11-12周:系统设置与优化', 3)
|
||
|
||
week11_12_frontend = [
|
||
('组织架构页面', '2天', '部门树结构、部门管理', '前端开发1'),
|
||
('账号管理页面', '2天', '用户列表、用户管理、权限配置', '前端开发2'),
|
||
('系统设置页面', '2天', '参数配置、流程配置', '前端开发1'),
|
||
('通用组件完善', '2天', '表格组件、表单组件、上传组件', '前端开发2'),
|
||
('页面优化', '2天', '页面性能优化、用户体验优化', '前端开发1+2'),
|
||
('浏览器兼容', '1天', '浏览器兼容性测试与修复', '前端开发1')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['任务', '工期', '工作内容', '负责人'], week11_12_frontend)
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 四、移动端实施计划 ==========
|
||
doc.add_heading('四、移动端实施计划', 1)
|
||
|
||
doc.add_heading('4.1 技术架构', 2)
|
||
|
||
doc.add_paragraph('移动端技术栈:')
|
||
mobile_stack = [
|
||
('开发框架', 'UniApp', '跨平台移动应用开发框架,支持iOS、Android、H5'),
|
||
('UI组件库', 'Ant Design Mobile Vue', '基于Vue的移动端UI组件库'),
|
||
('状态管理', 'Vuex', '全局状态管理'),
|
||
('路由管理', 'UniApp路由', 'UniApp内置路由系统'),
|
||
('HTTP请求', 'uni.request', 'UniApp网络请求API'),
|
||
('推送通知', 'UniPush / 极光推送', '消息推送服务'),
|
||
('构建工具', 'HBuilderX / Vite', 'UniApp开发工具和构建工具'),
|
||
('打包发布', 'HBuilderX云打包', 'iOS/Android应用打包'),
|
||
('条件编译', 'UniApp条件编译', '平台差异化代码处理')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['技术组件', '技术选型', '说明'], mobile_stack)
|
||
|
||
doc.add_heading('4.2 移动端开发阶段划分', 2)
|
||
|
||
doc.add_heading('4.2.1 第3-4周:移动端基础框架', 3)
|
||
|
||
week3_4_mobile = [
|
||
('项目初始化', '1天', 'UniApp项目创建、HBuilderX配置、Ant Design Mobile安装', '移动端开发1'),
|
||
('导航配置', '1天', 'UniApp页面路由配置、tabBar配置', '移动端开发1'),
|
||
('API封装', '1天', 'uni.request封装、拦截器配置、错误处理', '移动端开发1'),
|
||
('登录页面', '2天', '登录界面、登录逻辑', '移动端开发1'),
|
||
('首页', '2天', '首页设计、消息通知入口', '移动端开发2'),
|
||
('个人中心', '1天', '个人信息、设置页面', '移动端开发2')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['任务', '工期', '工作内容', '负责人'], week3_4_mobile)
|
||
|
||
doc.add_heading('4.2.2 第5-8周:移动端核心功能', 3)
|
||
|
||
week5_8_mobile = [
|
||
('待办列表', '3天', '待审核事项列表、筛选', '移动端开发1'),
|
||
('审核操作', '3天', '审核页面、通过/驳回操作', '移动端开发1'),
|
||
('消息通知', '2天', '消息列表、消息详情、推送集成', '移动端开发2'),
|
||
('项目查询', '2天', '项目列表、项目详情', '移动端开发2'),
|
||
('进度查询', '2天', '项目进度查看、进度筛选', '移动端开发1'),
|
||
('成果提交', '3天', '成果提交表单、附件上传', '移动端开发2'),
|
||
('简单报表', '2天', '关键数据报表、图表展示', '移动端开发1')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['任务', '工期', '工作内容', '负责人'], week5_8_mobile)
|
||
|
||
doc.add_heading('4.2.3 第9-10周:移动端优化与测试', 3)
|
||
|
||
week9_10_mobile = [
|
||
('性能优化', '2天', '页面加载优化、内存优化', '移动端开发1+2'),
|
||
('UI优化', '2天', '界面适配、交互优化', '移动端开发1+2'),
|
||
('推送测试', '2天', '推送功能测试、iOS/Android适配', '移动端开发1'),
|
||
('兼容性测试', '2天', 'iOS/Android不同版本测试', '移动端开发2'),
|
||
('打包发布', '2天', 'HBuilderX云打包、iOS/Android应用打包、应用商店准备', '移动端开发1+2')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['任务', '工期', '工作内容', '负责人'], week9_10_mobile)
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 五、接口规范 ==========
|
||
doc.add_heading('五、前后端接口规范', 1)
|
||
|
||
doc.add_heading('5.1 接口设计原则', 2)
|
||
|
||
principles = [
|
||
'RESTful API设计规范,使用HTTP动词(GET、POST、PUT、DELETE)',
|
||
'统一响应格式:{code: 200, message: "success", data: {}}',
|
||
'统一错误码定义,便于前端错误处理',
|
||
'接口版本管理,支持API版本控制',
|
||
'接口参数校验,后端必须验证所有参数',
|
||
'接口文档自动生成,使用Swagger/OpenAPI',
|
||
'接口安全:Token认证、参数加密、防重放攻击'
|
||
]
|
||
|
||
for principle in principles:
|
||
p = doc.add_paragraph(principle, style='List Bullet')
|
||
set_chinese_font(p.runs[0])
|
||
|
||
doc.add_heading('5.2 主要接口列表', 2)
|
||
|
||
doc.add_heading('5.2.1 用户权限相关接口', 3)
|
||
|
||
auth_apis = [
|
||
('POST', '/api/auth/login', '用户登录', '用户名、密码'),
|
||
('POST', '/api/auth/logout', '用户登出', 'Token'),
|
||
('POST', '/api/auth/refresh', '刷新Token', 'Refresh Token'),
|
||
('GET', '/api/user/info', '获取用户信息', 'Token'),
|
||
('GET', '/api/user/menu', '获取用户菜单', 'Token'),
|
||
('GET', '/api/user/permissions', '获取用户权限', 'Token')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['方法', '接口路径', '功能', '参数'], auth_apis)
|
||
|
||
doc.add_heading('5.2.2 项目相关接口', 3)
|
||
|
||
project_apis = [
|
||
('POST', '/api/project/initiation', '提交立项申请', '立项表单数据'),
|
||
('GET', '/api/project/list', '查询项目列表', '查询条件、分页参数'),
|
||
('GET', '/api/project/{id}', '查询项目详情', '项目ID'),
|
||
('PUT', '/api/project/{id}/status', '更新项目状态', '项目ID、状态'),
|
||
('POST', '/api/project/startup', '提交启动申请', '启动表单数据'),
|
||
('GET', '/api/project/startup/list', '查询启动列表', '查询条件'),
|
||
('POST', '/api/project/output', '提交项目成果', '成果数据'),
|
||
('GET', '/api/project/progress', '查询项目进度', '查询条件')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['方法', '接口路径', '功能', '参数'], project_apis)
|
||
|
||
doc.add_heading('5.2.3 审核相关接口', 3)
|
||
|
||
approval_apis = [
|
||
('POST', '/api/approval/submit', '提交审核', '审核数据'),
|
||
('GET', '/api/approval/pending', '查询待审核列表', '查询条件'),
|
||
('POST', '/api/approval/{id}/approve', '审核通过', '审核ID、审核意见'),
|
||
('POST', '/api/approval/{id}/reject', '审核驳回', '审核ID、驳回原因'),
|
||
('GET', '/api/approval/record', '查询审核记录', '业务ID、业务类型')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['方法', '接口路径', '功能', '参数'], approval_apis)
|
||
|
||
doc.add_heading('5.2.4 报表相关接口', 3)
|
||
|
||
report_apis = [
|
||
('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', '应付账款报表', '时间范围')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['方法', '接口路径', '功能', '参数'], report_apis)
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 六、开发规范 ==========
|
||
doc.add_heading('六、开发规范', 1)
|
||
|
||
doc.add_heading('6.1 代码规范', 2)
|
||
|
||
code_standards = [
|
||
('命名规范', '后端:驼峰命名,前端:驼峰命名,数据库:下划线命名'),
|
||
('注释要求', '关键方法、复杂逻辑必须注释,接口方法必须注释参数和返回值'),
|
||
('代码格式', '使用统一的代码格式化工具,提交前必须格式化'),
|
||
('Git规范', '提交信息规范,功能开发使用feature分支,bug修复使用hotfix分支'),
|
||
('代码审查', '所有代码必须经过代码审查后才能合并到主分支')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['规范类型', '规范要求'], code_standards)
|
||
|
||
doc.add_heading('6.2 接口规范', 2)
|
||
|
||
api_standards = [
|
||
'接口命名:使用名词,不使用动词(如 /api/project/list,不使用 /api/getProjects)',
|
||
'HTTP方法:GET用于查询,POST用于创建,PUT用于更新,DELETE用于删除',
|
||
'响应格式:统一使用JSON格式,包含code、message、data字段',
|
||
'错误处理:使用统一错误码,错误信息清晰明确',
|
||
'参数校验:所有参数必须校验,校验失败返回明确错误信息',
|
||
'接口文档:所有接口必须编写Swagger文档,保持文档更新'
|
||
]
|
||
|
||
for standard in api_standards:
|
||
p = doc.add_paragraph(standard, style='List Bullet')
|
||
set_chinese_font(p.runs[0])
|
||
|
||
doc.add_heading('6.3 测试规范', 2)
|
||
|
||
test_standards = [
|
||
('单元测试', '关键业务逻辑必须编写单元测试,覆盖率≥70%'),
|
||
('接口测试', '所有接口必须编写接口测试用例,覆盖正常和异常场景'),
|
||
('前端测试', '关键页面和组件编写单元测试'),
|
||
('集成测试', '前后端集成测试,验证业务流程完整性'),
|
||
('性能测试', '关键接口进行性能测试,确保响应时间符合要求')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['测试类型', '测试要求'], test_standards)
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 七、里程碑与交付物 ==========
|
||
doc.add_heading('七、里程碑与交付物', 1)
|
||
|
||
doc.add_heading('7.1 开发里程碑', 2)
|
||
|
||
milestones = [
|
||
('M1', '基础架构完成', '后端框架、前端框架、数据库设计完成', '第2周末'),
|
||
('M2', '核心模块完成', '用户权限、审核流程、消息通知模块完成', '第4周末'),
|
||
('M3', '业务模块完成', '商机管理、过程管理模块完成', '第8周末'),
|
||
('M4', '财务模块完成', '财务管理模块完成', '第9周末'),
|
||
('M5', '报表模块完成', '所有报表功能完成', '第10周末'),
|
||
('M6', '开发完成', '所有功能开发完成,进入测试阶段', '第12周末')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['里程碑', '里程碑名称', '交付内容', '时间节点'], milestones)
|
||
|
||
doc.add_heading('7.2 技术交付物', 2)
|
||
|
||
tech_deliverables = [
|
||
('源代码', '后端、前端、移动端完整源代码,包含注释'),
|
||
('数据库脚本', '数据库初始化脚本、升级脚本'),
|
||
('接口文档', 'Swagger接口文档,包含所有接口说明'),
|
||
('数据库设计文档', '数据库表结构设计文档'),
|
||
('系统架构文档', '系统技术架构设计文档'),
|
||
('部署文档', '系统部署文档、环境配置文档'),
|
||
('测试报告', '单元测试报告、接口测试报告')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['交付物', '说明'], tech_deliverables)
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 八、风险与应对 ==========
|
||
doc.add_heading('八、开发风险与应对措施', 1)
|
||
|
||
doc.add_heading('8.1 技术风险', 2)
|
||
|
||
tech_risks = [
|
||
('技术难点', '审核流程引擎、产值计算引擎等技术难点', '提前技术预研,预留技术攻关时间,架构师重点支持'),
|
||
('性能问题', '大数据量查询、报表计算性能问题', '提前进行性能测试,优化数据库查询,使用缓存'),
|
||
('兼容性问题', '浏览器兼容、移动端兼容问题', '使用成熟框架,及时进行兼容性测试'),
|
||
('第三方服务', '短信、邮件等第三方服务不稳定', '选择稳定服务商,准备备用方案')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['风险', '风险描述', '应对措施'], tech_risks)
|
||
|
||
doc.add_heading('8.2 进度风险', 2)
|
||
|
||
schedule_risks = [
|
||
('需求变更', '需求变更导致开发进度延期', '建立需求变更流程,评估变更影响,调整进度'),
|
||
('人员风险', '关键人员请假或离职', '建立知识文档,确保知识共享,准备备用人员'),
|
||
('技术难点', '遇到技术难点影响进度', '提前识别风险点,预留缓冲时间,寻求技术支持')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['风险', '风险描述', '应对措施'], schedule_risks)
|
||
|
||
return doc
|
||
|
||
def main():
|
||
print("正在生成前端、后端实施计划文档...")
|
||
doc = generate_implementation_plan()
|
||
|
||
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"\n文档包含内容:")
|
||
print(f" - 后端实施计划(分阶段详细任务)")
|
||
print(f" - 前端实施计划(PC端分阶段任务)")
|
||
print(f" - 移动端实施计划(分阶段任务)")
|
||
print(f" - 接口规范定义")
|
||
print(f" - 开发规范要求")
|
||
print(f" - 里程碑与交付物")
|
||
print(f" - 风险与应对措施")
|
||
|
||
if __name__ == "__main__":
|
||
main()
|
||
|