返回开发文档

新会员系统 PRD

状态:方案讨论稿 创建:2026-07-18 目标:替换客总管 SCRM 预算:硬成本 ≈ 0 元
一句话定位
不做储值、不做商城,只做积分兑换优惠券 + 节假日批量发券 + 门店核销三件事。替换客总管后年省 3000 元 SaaS 费,数据完全自主。

一、项目背景

1.1 现状

1.2 痛点

  1. 优惠券数据被锁在客总管,无法导出(券模板 + 已发放未使用券实例)
  2. 客总管券系统本身也不好用
  3. 不想再用 SaaS(有赞/微盟/银豹一概不考虑),要省钱 + 数据自主
  4. 团队已有开发能力(forge profile)

1.3 决策边界

二、方案调研结论

2.1 市面开源方案对比

项目技术栈评估结论
fuintJava SpringBoot + MySQL + Redis + Uniapp功能全(会员/积分/储值/券/收银),1.7k star太重。AGPL 商用要授权;团队 Java 维护不了
CRMEB 标准版PHP ThinkPHP6 + Uniapp是商城(拼团/砍价/秒杀/分销)顺带做券方向不对。不是要做线上商城
CRMEB 多店版PHP连锁门店 SCRM收费版本,开源免费的是标准版
mall / newbee-mallJava SpringBoot纯电商商城不对口
自研Python FastAPI + SQLite按需定制推荐,约 2000 行代码

2.2 核心结论

结论
市面没有"刚好合适的"轻量开源。要么太全(fuint)、要么方向错(CRMEB 是商城)、要么收费(CRMEB 多店版)。自研反而最省事——因为要的只是"积分换券 + 节日发券 + 门店核销"一个小工具,不是完整 SCRM。

三、系统架构

欧普 ERP(会员/消费/导购) ← 主数据,不动 ↓ 每晚 CEW 同步(大头哥负责方案) 新客服系统(FastAPI + SQLite) ├── 会员表(手机号 → openid 映射) ├── 积分账户(每笔欧普销售 → 积分入账) ├── 券模板(积分兑换券 + 节日券) ├── 券实例(谁手里有什么券、什么时候过期) └── 核销记录(哪张券、哪天、哪个店、哪笔单) ↓ 服务号"是她"(顾客端) ├── 菜单:我的积分 / 我的券 / 积分商城 ├── H5 页面:查积分、换券、出示券码 └── 模板消息:积分到账、券到期提醒、节日发券通知 ↓ 店员手机核销页(sieta.vip 后面,cookie 认证) └── 扫顾客券码 → 确认 → 核销 → 欧普开单时店员手工改价

四、关键设计决策

4.1 券不进微信卡包,走自己的 H5 页面

4.2 积分规则在欧普销售同步时自动算

4.3 积分兑换是核心场景

4.4 节日券批量发放

4.5 门店核销做到最简单

五、技术栈

组件选型理由
后端Python FastAPIforge 主力栈,开发快
数据库SQLite(后期可迁 MySQL)数据量小,零运维
顾客前端服务号 H5(原生 HTML+JS,挂 sieta.vip)店员/顾客零安装
店员前端手机浏览器 H5(挂 sieta.vip,cookie 认证)复用现有认证体系
服务号对接snsapi_base 静默授权 + 模板消息标准做法
部署现有服务器 + nginx 子路径零新增基础设施

六、数据 Schema(草案)

6.1 核心表(6 张)

-- 会员表
members (
  id, phone UNIQUE, name, birthday,
  openid, unionid,
  created_at, updated_at
)

-- 积分账户
point_accounts (
  member_id PK, balance, total_earned, total_spent,
  updated_at
)

-- 积分流水
point_transactions (
  id, member_id, change_amount, balance_after,
  source_type,  -- 'erp_sale' / 'redeem' / 'manual' / 'expire'
  source_id,    -- 欧普销售单号 / 兑换记录ID
  remark, created_at
)

-- 券模板
coupon_templates (
  id, name, type,  -- 'cash' / 'discount' / 'gift'
  discount_value,  -- 优惠金额或折扣
  min_purchase,    -- 满减门槛
  valid_days,      -- 发放后有效天数
  point_cost,      -- 积分兑换所需分数(0=不可兑换,仅节日发)
  per_member_limit, total_limit,
  created_at
)

-- 券实例
coupons (
  id, template_id, member_id, code UNIQUE,
  status,  -- 'unused' / 'used' / 'expired' / 'cancelled'
  issued_at, valid_from, valid_to,
  used_at, used_store, used_order_no,
  issue_channel  -- 'redeem' / 'campaign' / 'manual'
)

-- 核销记录
redemptions (
  id, coupon_id, member_id, store_code,
  operator,  -- 店员
  discount_amount, order_no,
  created_at
)

七、与欧普 ERP 的对接

7.1 数据流向

方向数据方式
欧普 → 新系统会员基础(姓名/手机/生日)每晚 CEW 同步
欧普 → 新系统销售单(会员手机/金额/门店/时间)每晚 CEW 同步触发积分
新系统 → 欧普不回流(核销时店员手工改价)人工

7.2 关键约束

八、服务号配合方案

8.1 菜单结构

是她服务号
├── 我的会员
│   ├── 我的积分(H5 页)
│   ├── 我的券(H5 页)
│   └── 积分商城(H5 页)
├── 门店活动
│   └── 当期优惠券(H5 页)
└── 关于我们
    └── 门店地址/客服

8.2 网页授权

8.3 模板消息(需服务号已认证)

九、实施排期

阶段周期交付
Week 17 天DB schema + 会员/积分/券基础 CRUD + 服务号 H5 授权打通
Week 27 天积分规则引擎 + 积分商城(兑换流程)+ 店员核销页
Week 37 天节日券批量发放 + 模板消息推送 + 数据对账报表
Week 47 天欧普 CEW 对接 + 灰度跑 1 家店
Week 5-614 天全量切换 + 客总管停服

总计 4-6 周

十、成本估算

项目成本
服务器现有(零新增)
域名/SSL现有(零新增)
服务号年审已有
开发人力forge profile(内部)
硬成本≈ 0 元
对比客总管年费省 3000 元/年,半年回本

十一、待大头哥确认的问题

十二、切换风险与对策

风险对策
客总管已发放未使用券无法导出切换前 1-2 个月在客总管停发新券,让存量券自然消化
会员手机号与 openid 绑定率低切换时服务号推文 + 门店引导,3 个月过渡期内"消费报手机号"也可积分
店员操作不熟练灰度先在 1 家店跑 2 周,培训后再全量推
欧普同步延迟导致积分延迟积分规则明确"T+1 到账",模板消息告知会员

十三、不做什么(避免范围蔓延)

下一步
大头哥回答"十一、待确认的问题"后,本 PRD 进入开发阶段,由 forge profile 接手实现。