You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wx.sstbc.com/doc/积分系统与商城结合促进校友活跃度方案.md

133 lines
8.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 积分系统与商城功能结合促进校友活跃度方案
## 一、现状与目标
### 1.1 系统现有能力
| 模块 | 现状 | 说明 |
|------|------|------|
| **积分** | 已具备基础能力 | `users.score` 字段、`score_logs` 表,`ScoreLog::add()` 方法;当前仅「分享获得」一种获取方式,依赖配置项 `share_score` |
| **校友** | 已完善 | `is_schoolmate`、校友库、校友企业、课程审核后自动入校友库、校友捐赠(donates)、校友动态(articles) |
| **移动端** | 课程/预约/供需/图书 | 课程报名与签到、课表签到(content_check)、预约、供需信息、图书、用户信息、捐赠 |
| **商城** | 未建设 | 无商品、兑换、订单模块 |
### 1.2 目标
- **积分与行为挂钩**:将课程、签到、供需、捐赠等校友相关行为纳入积分体系,明确「做什么得多少分」。
- **积分可消费**:建设积分商城(礼品/权益),支持积分兑换,让积分有实际价值。
- **校友身份加成**:部分积分规则或商品仅对校友开放,激励完成认证、持续参与。
- **提升活跃**:通过「赚积分→换好礼」闭环,提高打开率、参与课程与活动、使用供需等功能的频率。
---
## 二、积分获取规则设计(与现有功能结合)
在保留现有「分享获得」基础上,新增以下规则,均可在后台通过 Config 或独立配置表配置分值,便于运营调整。
| 行为 | 触发节点 | 建议分值(示例) | 说明 |
|------|----------|----------------|------|
| 分享获新用户 | 小程序 `applet-login` 带 pid新用户首次登录 | 沿用 `share_score` | 已实现 |
| 完善资料 | 用户首次补全姓名/公司/职位等关键信息 | 50~200 | 需在 `updateUser` 或资料页增加「是否首次完善」判断 |
| 课程报名成功 | 报名审核通过CourseSign status 通过) | 20~50/次 | 在审核通过逻辑中调用 `ScoreLog::add` |
| 单次课签到 | 课表签到成功CourseContentCheck | 5~15/次 | 签到成功回调中发积分 |
| 课程评价 | 提交课程/单次课评价 | 10~30/次 | 评价提交接口中发积分 |
| 供需发布 | 供需信息审核通过 | 30~80/条 | 审核通过时给发布者积分 |
| 供需留言/对接 | 在供需下有效留言或标记对接成功 | 5~20/次 | 需定义「有效」规则 |
| 校友捐赠 | 捐赠信息审核通过donates | 100~500/次 | 审核通过时发积分(可与捐赠金额档位挂钩) |
| 预约到场 | 预约完成且到场核销 | 10~30/次 | 需有到场核销节点 |
| 每日登录 | 当日首次打开小程序并完成接口请求 | 1~5/天 | 需防刷(同 user 同日仅一次) |
| 校友专属任务 | 如「邀请一名校友注册并认证」 | 100~300 | 需定义「校友」与「认证」口径 |
**实现要点:**
- 所有新增发分点统一调用 `ScoreLog::add($user_id, $score, $remark)``remark` 建议用统一文案如「课程报名」「课表签到」「供需发布」等,便于对账与统计。
- 建议新增 Config 键:`score_register`、`score_course_sign`、`score_content_check`、`score_evaluation`、`score_supply_demand`、`score_donate`、`score_daily_login` 等,后台可调。
- 部分规则需加「仅校友可得」:在发分前判断 `User::find($user_id)->is_schoolmate == 1`,不满足则不发或发减半(由产品决定)。
---
## 三、积分商城功能设计
### 3.1 模块范围
- **商品/礼品管理**(后台):商品名称、图片、所需积分、库存、是否仅校友可兑换、上下架、排序。
- **兑换记录**(前后台):谁、何时、兑换何商品、扣减积分、订单状态(待发货/已发货/已完成)。
- **积分明细与余额**(移动端):当前积分、积分明细列表(现有 `score_logs` 可复用,需区分 type1 获得 2 消耗)。
### 3.2 数据表建议(与现有库表风格一致)
```text
# 积分商品表 score_goods
id, name, image_id, score_price, stock, is_schoolmate_only(0/1), sort, status(0下架1上架), created_at, updated_at, deleted_at
# 积分兑换订单表 score_orders
id, user_id, score_good_id, score_amount, status(0待发货1已发货2已完成3已取消), address_snapshot, created_at, updated_at, deleted_at
```
- 兑换时:扣减 `users.score`,写入 `score_logs`score 为负、remark 如「兑换-商品名」),扣减 `score_goods.stock`,生成 `score_orders`
- 若需物流:在 `score_orders` 或扩展表记录收货人、手机、地址(可 address_snapshot JSON后台发货后更新 status。
### 3.3 与校友身份结合
- **商品维度**:部分商品设置「仅校友可兑换」,移动端列表与详情中展示「仅校友」标签,未认证校友点击兑换时提示「请先完成校友认证」。
- **价格维度**(可选):同一商品可设「校友价」与「非校友价」,用积分差体现校友优势,激励认证与保持校友身份。
---
## 四、促进校友活跃的具体策略
### 4.1 拉新与认证
- 分享得积分(已有)+ 被邀请人完成「校友认证」后给邀请人额外积分,形成二次激励。
- 新用户引导任务:完善资料→报名一门课→完成首次签到,每步给积分,最后一步可给较大额,引导完成从「注册」到「校友行为」的路径。
### 4.2 课程与活动
- 报名、签到、评价均给积分,并可在课程详情/签到成功页展示「本次获得 XX 积分」,强化即时反馈。
- 重要活动(如开学典礼、年会)可设「参与即得积分」或「签到得双倍积分」,由后台配置或活动开关控制。
### 4.3 内容与互动
- 供需发布、有效留言给积分,鼓励发布需求与对接。
- 校友动态articles可扩展「点赞/评论得积分」或「优质动态被采纳得积分」,需防刷与内容审核。
### 4.4 捐赠与品牌
- 捐赠审核通过后给积分,并可设「捐赠专属礼品」仅可用积分+捐赠记录兑换,增强荣誉感与品牌绑定。
### 4.5 积分商城本身
- 上架校友专属商品(如学院周边、活动名额、线下权益),仅校友可兑换或校友享受更低积分价。
- 限时兑换、限量商品,制造稀缺感,促进行为前置(先攒积分再抢兑)。
---
## 五、实施节奏建议
| 阶段 | 内容 | 依赖 |
|------|------|------|
| **第一阶段** | 扩展积分获取:在现有课程报名通过、课表签到、分享处增加 `ScoreLog::add`,并增加 Config 配置项 | 现有 CourseSign/CourseContentCheck/UserController |
| **第二阶段** | 移动端「我的积分」:展示当前积分与明细列表(拉取 score_logs区分正负必要时在 score_logs 增加 type 字段 | score_logs、users.score |
| **第三阶段** | 积分商城后台score_goods、score_orders 表与 CRUD商品管理、订单管理、发货 | 新建表与 Admin 控制器/菜单 |
| **第四阶段** | 积分商城移动端:商品列表/详情、兑换下单、订单列表与状态 | 新建 Mobile 控制器与小程序页 |
| **第五阶段** | 校友专属与运营策略:仅校友可兑换商品、校友价、捐赠/活动专项积分与礼品 | 上述全部 + 运营配置 |
---
## 六、与现有代码的衔接点
- **发积分**:统一用 `App\Models\ScoreLog::add($user_id, $score, $remark)`;若需支持「消耗」积分,可扩展 `ScoreLog::consume($user_id, $score, $remark)`(内部 decrement users.score 并写入一条负 score 记录)。
- **配置**:积分分值继续用 `Config::getValueByKey('xxx')` 读取,在后台 Config 管理中加入 `score_*` 系列 key。
- **校友判断**`User::is_schoolmate == 1`,与现有校友库、课程自动入库逻辑一致。
- **移动端鉴权**:兑换、积分明细等接口放在现有 `mobile` 路由组内,使用现有 `getUserId()` 等鉴权即可。
---
## 七、风险与注意
- **防刷**:每日登录、签到等按人按日去重;分享需确认为新用户且未重复给同一 pid 发过该新用户的奖励;兑换需校验库存与积分余额,并发下用事务与行锁。
- **积分一致性**:发分/扣分务必「改 users.score + 写 score_logs」在同一事务中避免只写日志不改余额或只改余额不写日志。
- **合规**:积分与兑换若涉及实物或权益,需在规则页说明解释权、过期与清零政策(若有),避免纠纷。
本方案在不改变现有校友与课程主流程的前提下,通过「积分获取扩展 + 积分商城 + 校友专属」三条线,与系统现有功能深度结合,达到促进校友活跃度的目标。实施时可按阶段落地,先做积分规则与展示,再做商城与运营策略。