Files
app-java/docs/output/generate_plan.py
2026-05-08 17:07:33 +08:00

367 lines
24 KiB
Python
Raw 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.

from openpyxl import Workbook
from openpyxl.styles import PatternFill, Font, Border, Side, Alignment
from openpyxl.utils import get_column_letter
wb = Workbook()
# ====== Sheet 1: 总览 ======
ws_summary = wb.active
ws_summary.title = "开发计划总览"
ws_summary.sheet_view.showGridLines = False
# 颜色定义
header_fill = PatternFill(start_color="1F4E79", end_color="1F4E79", fill_type="solid")
subheader_fill = PatternFill(start_color="2E75B6", end_color="2E75B6", fill_type="solid")
p1_fill = PatternFill(start_color="C00000", end_color="C00000", fill_type="solid")
p2_fill = PatternFill(start_color="FF7C00", end_color="FF7C00", fill_type="solid")
p3_fill = PatternFill(start_color="70AD47", end_color="70AD47", fill_type="solid")
white_font = Font(color="FFFFFF", bold=True, size=11)
normal_font = Font(size=10)
thin_border = Border(
left=Side(style='thin', color='CCCCCC'),
right=Side(style='thin', color='CCCCCC'),
top=Side(style='thin', color='CCCCCC'),
bottom=Side(style='thin', color='CCCCCC')
)
# 标题
ws_summary['B2'] = "paopao 电商系统开发计划表"
ws_summary['B2'].font = Font(size=18, bold=True, color="1F4E79")
ws_summary['B2'].alignment = Alignment(horizontal='left', vertical='center')
ws_summary.row_dimensions[2].height = 36
# 统计信息
stats = [
("总功能点", "64"),
("小程序端", "24"),
("后台管理端", "40"),
("核心流程", "9"),
]
for i, (label, val) in enumerate(stats):
col = get_column_letter(2 + i)
ws_summary[f'{col}4'] = label
ws_summary[f'{col}4'].font = Font(bold=True, size=10, color="1F4E79")
ws_summary[f'{col}4'].alignment = Alignment(horizontal='center')
ws_summary[f'{col}5'] = val
ws_summary[f'{col}5'].font = Font(size=24, bold=True, color="1F4E79")
ws_summary[f'{col}5'].alignment = Alignment(horizontal='center')
ws_summary.row_dimensions[5].height = 30
# 模块列表
modules = [
("序号", "模块名称", "", "功能点数", "优先级", "预计工时(h)", "状态"),
]
row = 7
for m in modules:
for col_idx, val in enumerate(m, 2):
cell = ws_summary.cell(row=row, column=col_idx, value=val)
cell.fill = header_fill
cell.font = white_font
cell.alignment = Alignment(horizontal='center', vertical='center')
cell.border = thin_border
ws_summary.row_dimensions[row].height = 24
module_data = [
(1, "登录/注册", "小程序端", 3, "P1", 16, "待开发"),
(2, "首页模块", "小程序端", 11, "P1", 40, "待开发"),
(3, "会员中心", "小程序端", 4, "P1", 32, "待开发"),
(4, "商城模块", "小程序端", 3, "P1", 24, "待开发"),
(5, "购物车", "小程序端", 3, "P1", 16, "待开发"),
(6, "我的页面", "小程序端", 10, "P1", 32, "待开发"),
(7, "首页统计", "后台管理端", 2, "P1", 8, "待开发"),
(8, "会员管理", "后台管理端", 2, "P1", 16, "待开发"),
(9, "商品管理", "后台管理端", 5, "P1", 40, "待开发"),
(10, "比赛活动", "后台管理端", 2, "P1", 24, "待开发"),
(11, "预约管理", "后台管理端", 1, "P2", 8, "待开发"),
(12, "营销模块", "后台管理端", 5, "P2", 32, "待开发"),
(13, "系统管理", "后台管理端", 3, "P2", 16, "待开发"),
(14, "财务模块", "后台管理端", 6, "P1", 32, "待开发"),
]
for i, row_data in enumerate(module_data):
row = 8 + i
for col_idx, val in enumerate(row_data, 2):
cell = ws_summary.cell(row=row, column=col_idx, value=val)
cell.font = normal_font
cell.alignment = Alignment(horizontal='center', vertical='center')
cell.border = thin_border
# 优先级着色
if col_idx == 6: # 优先级列
if val == "P1":
cell.fill = p1_fill
cell.font = Font(color="FFFFFF", bold=True, size=10)
elif val == "P2":
cell.fill = p2_fill
cell.font = Font(color="FFFFFF", bold=True, size=10)
ws_summary.row_dimensions[row].height = 20
# 列宽
widths = [4, 18, 14, 10, 10, 12, 10]
for i, w in enumerate(widths, 2):
ws_summary.column_dimensions[get_column_letter(i)].width = w
# ====== Sheet 2: 小程序端详细计划 ======
ws_mini = wb.create_sheet("小程序端详细计划")
ws_mini.sheet_view.showGridLines = False
ws_mini['B2'] = "小程序端(用户端)功能开发计划"
ws_mini['B2'].font = Font(size=16, bold=True, color="1F4E79")
headers = ["序号", "功能模块", "功能名称", "功能描述", "优先级", "预计工时(h)", "关联流程", "备注"]
for col_idx, h in enumerate(headers, 2):
cell = ws_mini.cell(row=4, column=col_idx, value=h)
cell.fill = header_fill
cell.font = white_font
cell.alignment = Alignment(horizontal='center', vertical='center')
cell.border = thin_border
ws_mini.row_dimensions[4].height = 24
mini_data = [
# 登录注册
(1, "登录注册", "手机短信验证码登录/注册", "可通过手机短信验证方式注册,修改密码", "P1", 8, "用户注册与登录流程", ""),
(2, "登录注册", "微信授权登录/注册", "可直接通过微信账号注册进入小程序", "P1", 4, "用户注册与登录流程", ""),
(3, "登录注册", "隐私/政策协议", "可自由上传修改文案内容", "P3", 4, "用户注册与登录流程", ""),
# 首页
(4, "首页", "LOGO+小程序名称", "可自由修改", "P1", 2, "", ""),
(5, "首页", "搜索", "关键字搜索:可通过搜索栏搜索关键字查找到商城内相应商品(模糊查询)", "P1", 8, "商品购物与支付流程", ""),
(6, "首页", "消息通知", "系统通知:所有小程序内订单状态变化及支付记录,佣金收入等通知", "P1", 6, "", ""),
(7, "首页", "轮播图", "自定义替换图片:可自由设置图片尺寸规格", "P1", 4, "", ""),
(8, "首页", "精选商城入口", "入口跳转至商城页面", "P2", 2, "", ""),
(9, "首页", "活动报名入口", "活动列表:展示活动名称,活动时间等概要信息", "P1", 6, "活动报名流程", ""),
(10, "首页", "穿线预约入口", "显示门店名称、地址、营业时间,距离;点击定位跳转地图;点击电话拨打", "P1", 8, "穿线预约流程", ""),
(11, "首页", "积分商城入口", "显示总积分,可积分兑换的商品、查询兑换订单进度", "P1", 8, "积分商城与使用流程", ""),
(12, "首页", "热销商品展示", "展示购买率高的商品列表", "P2", 4, "", ""),
(13, "首页", "会员登录入口", "点击跳转会员中心;点商品会员价跳转注册界面", "P1", 4, "会员开通与推广流程", ""),
(14, "首页", "热门活动展示", "后台设置的热门活动展示", "P2", 4, "", ""),
(15, "首页", "领券中心入口", "优惠券领取入口", "P2", 4, "优惠券领取与使用流程", ""),
(16, "首页", "积分签到", "每天签到固定可获取X积分", "P2", 6, "积分商城与使用流程", ""),
# 会员中心
(17, "会员中心", "购买会员/会员升级", "会员升级成为会员获取推广权益,线下收取下级会员费后录入注册", "P1", 12, "会员开通与推广流程", ""),
(18, "会员中心", "分佣查看", "自己下级在平台产生消费,会员可获得相应比例的分佣", "P1", 8, "佣金结算与提现流程", ""),
(19, "会员中心", "分佣结算", "订单完成货款到账后(过了售后期),佣金才能结算到上级账户", "P1", 6, "佣金结算与提现流程", ""),
(20, "会员中心", "可提现佣金", "申请提现至微信设置提现时间和上限单次200以上每天不超过2000", "P1", 6, "佣金结算与提现流程", ""),
# 商城
(21, "商城", "商品搜索", "关键字搜索查找到相应商品(模糊查询)", "P1", 6, "商品购物与支付流程", ""),
(22, "商城", "商品分类", "三级分类导航", "P1", 6, "", ""),
(23, "商城", "商品详情", "商品主图/视频、规格、价格等详情展示", "P1", 12, "商品购物与支付流程", ""),
# 购物车
(24, "购物车", "商品列表展示", "显示已添加的商品列表", "P1", 4, "", ""),
(25, "购物车", "购物车管理", "删除选购商品", "P1", 4, "", ""),
(26, "购物车", "下单结算", "多选商品下单支付,同一订单只收一笔快递费", "P1", 8, "商品购物与支付流程", ""),
# 我的
(27, "我的", "头像昵称设置", "设置头像、昵称、性别、手机号、显示ID、注册时间", "P1", 6, "", ""),
(28, "我的", "消息中心", "系统通知、公告消息", "P2", 4, "", ""),
(29, "我的", "设置页面", "服务协议、隐私政策、版权信息、关于我们", "P2", 4, "", ""),
(30, "我的", "会员等级显示", "展示当前会员等级", "P1", 2, "", ""),
(31, "我的", "我的钱包", "余额充值功能", "P1", 6, "", ""),
(32, "我的", "我的积分", "积分查询", "P1", 2, "", ""),
(33, "我的", "我的优惠券", "已使用、未使用、已过期;显示已领取优惠券", "P1", 6, "优惠券领取与使用流程", ""),
(34, "我的", "我的订单", "全部订单:待支付、待发货、待收货、商品评价、申请售后(部分退款)", "P1", 12, "商品购物与支付流程", ""),
(35, "我的", "我的活动", "已报名活动列表,可取消报名", "P1", 6, "活动报名流程", ""),
(36, "我的", "分销推广入口", "我的邀请人查看", "P1", 4, "", ""),
]
for i, row_data in enumerate(mini_data):
row = 5 + i
for col_idx, val in enumerate(row_data, 2):
cell = ws_mini.cell(row=row, column=col_idx, value=val)
cell.font = normal_font
cell.border = thin_border
if col_idx == 2:
cell.alignment = Alignment(horizontal='center', vertical='center')
elif col_idx == 6 or col_idx == 7:
cell.alignment = Alignment(horizontal='center', vertical='center')
else:
cell.alignment = Alignment(horizontal='left', vertical='center', wrap_text=True)
# 优先级着色
if col_idx == 6:
if val == "P1":
cell.fill = p1_fill
cell.font = Font(color="FFFFFF", bold=True, size=10)
elif val == "P2":
cell.fill = p2_fill
cell.font = Font(color="FFFFFF", bold=True, size=10)
elif val == "P3":
cell.fill = p3_fill
cell.font = Font(color="FFFFFF", bold=True, size=10)
ws_mini.row_dimensions[row].height = 30
# 列宽
mini_widths = [4, 12, 16, 50, 8, 10, 18, 10]
for i, w in enumerate(mini_widths, 2):
ws_mini.column_dimensions[get_column_letter(i)].width = w
# ====== Sheet 3: 后台管理端详细计划 ======
ws_admin = wb.create_sheet("后台管理端详细计划")
ws_admin.sheet_view.showGridLines = False
ws_admin['B2'] = "后台管理端Web端功能开发计划"
ws_admin['B2'].font = Font(size=16, bold=True, color="1F4E79")
for col_idx, h in enumerate(headers, 2):
cell = ws_admin.cell(row=4, column=col_idx, value=h)
cell.fill = header_fill
cell.font = white_font
cell.alignment = Alignment(horizontal='center', vertical='center')
cell.border = thin_border
ws_admin.row_dimensions[4].height = 24
admin_data = [
# 首页统计
(1, "首页统计", "普通会员统计", "普通会员人数统计", "P1", 2, "", ""),
(2, "首页统计", "趋势图", "注册人数、会员人数趋势", "P1", 6, "", ""),
# 会员管理
(3, "会员管理", "会员列表", "普通会员:登录注册的用户信息,手机号、昵称、余额、积分等", "P1", 8, "后台管理核心流程", ""),
(4, "会员管理", "会员权限设置", "VIP会员开通价格、会员时间、享受权限等", "P1", 8, "", ""),
# 商城管理
(5, "商城管理", "商品管理", "商品添加、上下架、商品规格设置(如服装码数,颜色等商品参数)", "P1", 16, "后台管理核心流程", ""),
(6, "商城管理", "批量导入导出", "能实现线上导出导入数据,实现批量修改导入数据", "P1", 8, "", ""),
(7, "商城管理", "商品分销设置", "商品单独设置分销佣金", "P1", 6, "", ""),
(8, "商城管理", "订单管理", "商品订单:待支付,待发货,待收货,商品评价,退款/售后", "P1", 12, "后台管理核心流程", ""),
(9, "商城管理", "商品品牌管理", "品牌列表管理", "P2", 4, "", ""),
(10, "商城管理", "商品类型管理", "三级分类管理", "P1", 6, "", ""),
# 比赛活动
(11, "比赛活动", "活动列表", "添加比赛信息,限制报名人数,可设置热门;后台自定义参赛人员必填项;衣服尺码后台设置;限制报名人数或队伍数", "P1", 16, "后台管理核心流程", ""),
(12, "比赛活动", "预约报名管理", "活动报名人员管理", "P1", 8, "", ""),
# 预约管理
(13, "预约管理", "预约订单查询", "用户预约穿线订单,分门店查询", "P2", 8, "穿线预约流程", ""),
# 营销
(14, "营销", "优惠券管理", "场地使用券、无门槛、满减券、折扣券;可设置优惠券指定发放给会员/非会员/单独某个账户", "P1", 12, "优惠券领取与使用流程", ""),
(15, "营销", "优惠券使用记录", "优惠券使用记录,核销门店等信息", "P1", 6, "", ""),
(16, "营销", "积分抵扣设置", "积分抵扣规则配置", "P2", 6, "", ""),
(17, "营销", "积分商城管理", "积分兑换商品管理", "P2", 8, "积分商城与使用流程", ""),
(18, "营销", "轮播图管理", "广告图替换", "P2", 4, "", ""),
(19, "营销", "系统公告发布", "发布系统公告通知", "P2", 4, "", ""),
# 系统管理
(20, "系统管理", "用户管理", "添加系统用户账户", "P2", 8, "后台管理核心流程", ""),
(21, "系统管理", "角色权限管理", "用户角色权限设置", "P2", 8, "", ""),
(22, "系统管理", "门店管理", "添加门店信息、账号、密码", "P2", 8, "", ""),
# 财务
(23, "财务", "账务概况", "订单、会员、分销分别进行数据统计,可按日期查询,可导出表格", "P1", 12, "后台管理核心流程", ""),
(24, "财务", "充值记录查询", "查询所有充值记录,可按账号、日期查询,可导出表格", "P1", 6, "", ""),
(25, "财务", "资金记录查询", "查询所有账号资金账单,可按账号、日期查询,可导出表格", "P1", 6, "", ""),
(26, "财务", "积分记录查询", "查询所有账号积分情况,可按账号、日期查询,可导出表格", "P1", 6, "", ""),
(27, "财务", "佣金提现审核", "审核所有佣金提现申请", "P1", 8, "佣金结算与提现流程", ""),
(28, "财务", "佣金记录查询", "所有佣金账单,可按账号、日期查询,可导出表格", "P1", 6, "", ""),
]
for i, row_data in enumerate(admin_data):
row = 5 + i
for col_idx, val in enumerate(row_data, 2):
cell = ws_admin.cell(row=row, column=col_idx, value=val)
cell.font = normal_font
cell.border = thin_border
if col_idx == 2:
cell.alignment = Alignment(horizontal='center', vertical='center')
elif col_idx == 6 or col_idx == 7:
cell.alignment = Alignment(horizontal='center', vertical='center')
else:
cell.alignment = Alignment(horizontal='left', vertical='center', wrap_text=True)
if col_idx == 6:
if val == "P1":
cell.fill = p1_fill
cell.font = Font(color="FFFFFF", bold=True, size=10)
elif val == "P2":
cell.fill = p2_fill
cell.font = Font(color="FFFFFF", bold=True, size=10)
elif val == "P3":
cell.fill = p3_fill
cell.font = Font(color="FFFFFF", bold=True, size=10)
ws_admin.row_dimensions[row].height = 30
# 列宽
admin_widths = [4, 12, 16, 50, 8, 10, 18, 10]
for i, w in enumerate(admin_widths, 2):
ws_admin.column_dimensions[get_column_letter(i)].width = w
# ====== Sheet 4: 核心业务流程 ======
ws_flow = wb.create_sheet("核心业务流程")
ws_flow.sheet_view.showGridLines = False
ws_flow['B2'] = "系统核心业务流程"
ws_flow['B2'].font = Font(size=16, bold=True, color="1F4E79")
flow_headers = ["序号", "流程名称", "流程说明", "涉及模块", "关联页面", "关键节点"]
for col_idx, h in enumerate(flow_headers, 2):
cell = ws_flow.cell(row=4, column=col_idx, value=h)
cell.fill = header_fill
cell.font = white_font
cell.alignment = Alignment(horizontal='center', vertical='center')
cell.border = thin_border
ws_flow.row_dimensions[4].height = 24
flow_data = [
(1, "用户注册与登录流程", "用户进入小程序选择短信验证码登录或微信授权登录,阅读并同意隐私政策/服务协议后进入首页。需修改密码通过短信验证码重置。会员身份通过手机号匹配后激活。", "登录注册、首页", "登录页、首页", "手机号验证 → 身份匹配 → 权限激活"),
(2, "会员开通与推广下级流程", "用户购买会员支付198元注册费会员获得推广权限。会员线下收取下级298元会员费后在平台为下级录入手机号。下级用该手机号登录系统自动匹配身份成为该会员下级。", "会员中心、用户管理", "会员中心、注册页", "支付注册费 → 录入下级手机号 → 下级登录匹配"),
(3, "商品购物与支付流程", "用户通过首页/商城搜索/分类查找商品,查看详情后加入购物车。购物车勾选商品统一结算,同一订单仅收一笔运费。完成支付生成待发货订单,商家发货用户收货后进入售后,售后期结束货款到账后佣金自动结算。", "首页、商城、购物车、订单", "商品详情、购物车、订单页", "加入购物车 → 统一结算 → 支付发货 → 售后结算"),
(4, "积分商城与积分使用流程", "用户每日签到获得固定积分。进入积分商城查看总积分与可兑商品/优惠券。积分充足直接兑换,积分不足积分+补差价兑换。提交兑换订单后平台审核/配送。", "首页、积分商城", "积分商城页、兑换订单页", "每日签到 → 积分累积 → 兑换商品/优惠券"),
(5, "佣金结算与提现流程", "下级完成订单并过售后期后佣金结算至可提现佣金。会员进入会员中心查看可提现金额发起提现至绑定微信遵守200元起/单日上限2000元规则。后台审核提现申请审核通过资金到账用户微信。", "会员中心、财务", "会员中心、提现申请页", "订单完成 → 佣金结算 → 申请提现 → 后台审核"),
(6, "活动报名流程", "用户在首页查看活动列表(名称、时间、人数限制),选择活动填写后台设置的必填信息(尺码等),提交报名后可在我的服务查看/取消报名。", "首页、我的-我的活动", "活动列表页、报名表单页", "查看活动 → 填写信息 → 提交报名 → 查看/取消"),
(7, "穿线预约流程", "用户进入穿线预约查看门店列表(名称、地址、距离、营业时间),支持按门店名称搜索。点击地址跳转地图,点击电话直接拨号。选择门店提交预约生成预约订单,后台按门店查询预约订单进行核销服务。", "首页、预约管理", "门店列表页、预约订单页", "查看门店 → 选择预约 → 生成订单 → 门店核销"),
(8, "优惠券领取与使用流程", "用户从首页进入领券中心领取优惠券(满减/无门槛/折扣),在我的优惠券查看未使用/已使用/已过期。下单时自动匹配可用券抵扣金额。后台可定向发券给会员/非会员/指定用户并记录使用与核销信息。", "首页、营销、订单", "领券中心、我的优惠券、订单页", "领取优惠券 → 下单匹配 → 抵扣金额 → 核销记录"),
(9, "后台管理核心流程", "包含商品与订单管理(商品添加/上下架/规格/佣金,订单状态处理)、会员与分销管理(会员信息/价格/权限,下级关系与佣金跟踪)、活动与预约管理(创建活动/查看名单/处理预约)、营销与内容配置(轮播图/公告/积分/优惠券/积分商城)、财务与数据统计(按日期统计/导出/审核提现/查询记录)、系统权限管理(后台用户/角色权限/门店管理)等六大模块。", "所有后台模块", "各后台管理页面", "全链路业务支撑"),
]
for i, row_data in enumerate(flow_data):
row = 5 + i
for col_idx, val in enumerate(row_data, 2):
cell = ws_flow.cell(row=row, column=col_idx, value=val)
cell.font = normal_font
cell.border = thin_border
cell.alignment = Alignment(horizontal='left', vertical='center', wrap_text=True)
ws_flow.row_dimensions[row].height = 60
# 列宽
flow_widths = [4, 20, 60, 20, 16, 28]
for i, w in enumerate(flow_widths, 2):
ws_flow.column_dimensions[get_column_letter(i)].width = w
# ====== Sheet 5: 开发里程碑 ======
ws_mile = wb.create_sheet("开发里程碑")
ws_mile.sheet_view.showGridLines = False
ws_mile['B2'] = "开发里程碑计划"
ws_mile['B2'].font = Font(size=16, bold=True, color="1F4E79")
mile_headers = ["阶段", "里程碑名称", "主要交付物", "包含模块", "预计周期", "开始日期", "结束日期", "状态"]
for col_idx, h in enumerate(mile_headers, 2):
cell = ws_mile.cell(row=4, column=col_idx, value=h)
cell.fill = header_fill
cell.font = white_font
cell.alignment = Alignment(horizontal='center', vertical='center')
cell.border = thin_border
ws_mile.row_dimensions[4].height = 24
mile_data = [
("Phase 1", "基础架构搭建", "完成项目框架搭建、数据库设计、API接口定义", "整体架构", "2周", "Day 1", "Day 14", "待启动"),
("Phase 2", "用户端核心功能", "登录注册、首页框架、商城基础功能", "登录注册、首页、商城", "3周", "Day 15", "Day 35", "待启动"),
("Phase 3", "交易核心功能", "购物车、订单流程、支付集成", "购物车、订单、支付", "2周", "Day 36", "Day 49", "待启动"),
("Phase 4", "会员与分销系统", "会员中心、佣金体系、提现功能", "会员中心、财务", "2周", "Day 50", "Day 63", "待启动"),
("Phase 5", "营销与活动", "优惠券、积分商城、活动报名", "营销、比赛活动", "2周", "Day 64", "Day 77", "待启动"),
("Phase 6", "后台管理端", "商品管理、订单管理、会员管理、财务统计", "后台所有模块", "3周", "Day 78", "Day 98", "待启动"),
("Phase 7", "系统集成测试", "全链路测试、Bug修复、性能优化", "全部模块", "2周", "Day 99", "Day 112", "待启动"),
("Phase 8", "上线部署", "生产环境部署、数据迁移、上线文档", "全部模块", "1周", "Day 113", "Day 119", "待启动"),
]
for i, row_data in enumerate(mile_data):
row = 5 + i
for col_idx, val in enumerate(row_data, 2):
cell = ws_mile.cell(row=row, column=col_idx, value=val)
cell.font = normal_font
cell.border = thin_border
cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
if col_idx == 8: # 状态列
cell.fill = p3_fill
cell.font = Font(color="FFFFFF", bold=True, size=10)
ws_mile.row_dimensions[row].height = 30
# 列宽
mile_widths = [8, 18, 30, 24, 10, 10, 10, 10]
for i, w in enumerate(mile_widths, 2):
ws_mile.column_dimensions[get_column_letter(i)].width = w
# 保存
output_path = "/Users/gxwebsoft/JAVA/paopao-java/docs/output/paopao开发计划表.xlsx"
wb.save(output_path)
print(f"✅ 开发计划表已生成: {output_path}")