# 丹阳公益婚恋服务平台 # V1.0 公益相亲活动与线下服务闭环详细设计 版本:V1.0 适用范围:微信小程序用户端、公益红娘工作台、运营管理后台、线下活动执行人员 核心目标:把“线上报名—资格审核—现场签到—活动互动—活动后互选—红娘跟进—安全处置”形成完整闭环 --- # 第一章 设计目标 V1.0活动模块不是普通活动报名工具。 它承担三个核心价值: 1. 给线上匹配提供真实线下见面机会 2. 给公益组织提供可控、可审核的服务载体 3. 给长期线上无结果用户提供新的认识渠道 因此活动模块必须同时兼顾: - 报名简单 - 资格真实 - 名额可控 - 现场好执行 - 用户隐私 - 双向意愿 - 后续跟进 - 安全处置 - 数据可追踪 --- # 第二章 活动闭环总流程 ```text 后台创建活动 ↓ 发布 ↓ 用户浏览活动 ↓ 报名 ↓ 资格校验 ↓ 人工审核/自动通过 ↓ 报名成功 ↓ 活动提醒 ↓ 现场签到 ↓ 参加活动 ↓ 活动结束 ↓ 反馈 ↓ 选择“想进一步了解的人” ↓ 双方互选 ↓ 建立Match ↓ 聊天 ↓ 红娘可继续跟进 ``` --- # 第三章 活动模块V1范围 必须支持: ```text 活动创建 活动编辑 活动发布 报名时间 人数限制 男女名额 年龄限制 人工审核 报名结果 活动提醒 签到二维码 现场签到 活动反馈 活动后互选 活动数据统计 活动取消 安全处置 ``` 暂不支持: ```text 活动收费 在线支付 座位票务 复杂排座 抽奖 积分 礼物 直播 视频连麦 群聊 活动商城 ``` --- # 第四章 活动类型 V1建议支持统一业务类型: ```text public_matchmaking ``` 前端可以根据运营文案展示: - 青年公益相亲会 - 七夕公益相亲活动 - 单身青年联谊会 - 公益交友活动 - 小型主题见面会 不要因为名称不同建立多套技术模型。 --- # 第五章 活动组织主体 每个活动必须明确: ```text 主办单位 承办单位 协办单位(可选) ``` 例如: - 妇联 - 工会 - 公益服务中心 - 志愿者组织 后台必须关联: > organizer_org_id 避免出现无人负责的活动。 --- # 第六章 活动状态机 统一状态: ```text draft registration_open registration_closed ongoing ended cancelled ``` 标准流程: ```text draft ↓ 发布 registration_open ↓ 报名截止 registration_closed ↓ 活动开始 ongoing ↓ 活动结束 ended ``` 取消: ```text draft / registration_open / registration_closed ↓ cancelled ``` --- # 第七章 Draft草稿状态 草稿: - 用户不可见 - 可编辑全部活动信息 - 不产生通知 - 不允许报名 后台可以: > 保存草稿 --- # 第八章 发布前校验 活动从draft发布前必须校验: ```text 活动名称 开始/结束时间 报名开始/截止时间 活动地点 主办单位 活动介绍 参与条件 人数上限 报名审核方式 活动规则 联系方式 ``` 缺少关键字段: > 不允许发布。 --- # 第九章 时间合法性 必须满足: ```text registration_start_at < registration_end_at <= start_at < end_at ``` 禁止: > 活动已经开始但报名截止时间还在未来 除非未来明确支持现场报名。 V1默认不支持。 --- # 第十章 活动参与对象 活动可以配置: ```text 最低年龄 最高年龄 目标性别 区域要求(可选) ``` V1不建议设置过多资格规则。 核心仍然: > 成年、实名、资料审核通过、账号正常。 --- # 第十一章 法定婚龄与活动年龄 活动可以面向: > 成年单身人士。 但如果活动文案明确为: > 婚姻登记、近期结婚等强婚姻导向活动 运营需要注意成年与法定婚龄的区别。 系统年龄配置不能错误地把18岁等同于法定登记结婚资格。 --- # 第十二章 活动详情前台必须展示 用户必须快速看到: ```text 活动名称 公益免费 活动时间 活动地点 主办/承办单位 适合人群 报名时间 活动介绍 活动流程 注意事项 报名状态 ``` --- # 第十三章 活动费用 当前公益定位: > V1默认免费。 前端统一: ```text 公益免费 ``` 如果未来出现必要的成本分摊: 必须另行做产品和合规设计。 V1不预留支付链路。 --- # 第十四章 活动人数模型 支持: ```text total_limit male_limit female_limit ``` 例如: ```text 总人数100 男性50 女性50 ``` --- # 第十五章 总人数与性别人数关系 如果同时设置: ```text male_limit = 50 female_limit = 50 total_limit = 100 ``` 正常。 如果: ```text male_limit + female_limit > total_limit ``` 后台必须提示配置不一致。 --- # 第十六章 不强制所有活动必须男女1:1 公益活动可能根据实际报名池调整。 因此: > 男女名额可配置。 不要技术上写死50:50。 --- # 第十七章 活动报名入口 用户: ```text 活动首页 ↓ 活动详情 ↓ 立即报名 ``` 报名页面尽量复用用户已有资料。 避免再次要求: - 姓名 - 年龄 - 性别 - 身高 - 学历 重复填写。 --- # 第十八章 报名资料复用原则 系统直接读取: ```text 实名认证 手机号 年龄 性别 审核状态 个人资料 ``` 用户只确认: > 当前资料是否正确。 --- # 第十九章 活动额外字段 只有活动确实需要,才增加: ```text 紧急联系人 特殊备注 ``` 紧急联系人是否采集: > 按活动需要配置,不作为所有活动默认必填项。 --- # 第二十章 报名资格前置检查 用户点击“立即报名”前,服务端检查: ```text 已登录 已绑定手机号 已实名 资料审核通过 账号正常 年龄符合 性别符合 活动报名开放 未重复报名 ``` --- # 第二十一章 未审核用户报名 如果用户资料尚未审核通过: 不允许报名。 提示: > 完成资料审核后即可报名参加公益相亲活动。 按钮: > 查看审核状态 --- # 第二十二章 账号受限用户报名 如果: ```text account_status != normal ``` 根据RiskAction判断。 严重限制状态: > 禁止报名。 不要只靠活动前端按钮灰掉。 --- # 第二十三章 活动重复报名 数据库唯一: ```text activity_id + user_id ``` 重复提交: > 返回原报名结果。 不要创建第二条。 --- # 第二十四章 报名审核模式 活动支持: ```text need_review = true ``` 或: ```text need_review = false ``` --- # 第二十五章 人工审核模式 报名后: ```text not_applied ↓ pending ↓ approved / rejected ``` 用户页面: > 报名审核中。 --- # 第二十六章 自动通过模式 如果: ```text need_review = false ``` 且资格满足、名额足够: ```text not_applied ↓ approved ``` 直接报名成功。 --- # 第二十七章 V1建议默认人工审核 对于公益婚恋线下活动,建议默认: > 人工审核。 原因: - 男女比例控制 - 风险账号检查 - 活动适配 - 线下安全 - 便于组织 小型简单活动以后可配置自动通过。 --- # 第二十八章 Pending是否占名额 建议V1正式采用: > **Pending不占正式活动名额。** 只有: ```text approved ``` 才占名额。 --- # 第二十九章 Pending过多问题 可能出现: ```text 剩余10个名额 待审核30人 ``` 这是允许的。 后台审核时显示: > 当前剩余名额10。 第11个批准时: 返回: ```text ACTIVITY_FULL ``` --- # 第三十章 审核排序 后台报名列表建议支持: ```text 报名时间 性别 年龄 审核状态 ``` 默认: > 按报名时间排序。 不做: > 资产/颜值排序。 --- # 第三十一章 活动审核员看到的信息 报名审核必要信息: - 展示名 - 性别 - 年龄 - 丹阳/所在区域 - 实名状态 - 资料审核状态 - 风险状态摘要 不需要: - 身份证 - 聊天内容 - 详细择偶条件 --- # 第三十二章 报名审核通过 审核员点击: > 通过 系统事务内: ```text 检查活动状态 ↓ 检查剩余总名额 ↓ 检查性别名额 ↓ registration → approved ↓ 提交 ``` 事务后: > 发通知。 --- # 第三十三章 报名拒绝 必须填写原因。 建议标准原因: ```text 活动名额已满 年龄不符合活动范围 资料需要进一步完善 活动参与条件不符合 安全审核未通过 其他 ``` --- # 第三十四章 拒绝原因用户可见 用户看到: > 具体但不过度暴露内部风控的信息。 例如: 正确: > 本次活动名额已满。 不建议: > 系统风险评分达到72分。 --- # 第三十五章 报名结果通知 审核通过: > 你报名的“丹阳青年公益相亲会”已通过审核。 拒绝: > 你的活动报名未通过,请查看具体说明。 --- # 第三十六章 报名成功页 显示: ```text 报名成功 活动名称 活动时间 活动地点 注意事项 ``` 按钮: > 查看我的活动 --- # 第三十七章 我的活动 分类: ```text 待参加 审核中 已结束 ``` 状态: ```text 审核中 报名成功 已签到 活动已结束 报名未通过 活动已取消 ``` --- # 第三十八章 用户取消报名 V1建议支持: > 活动开始前主动取消报名。 状态: ```text approved / pending ↓ cancelled ``` --- # 第三十九章 取消报名截止 活动可配置: ```text cancel_before ``` 例如: > 活动开始前24小时可自主取消。 如果超过: > 联系工作人员。 V1具体时长建议配置,不写死。 --- # 第四十章 用户取消后释放名额 如果approved取消: > 立即释放对应名额。 可以允许后续候选审核通过。 --- # 第四十一章 是否建设候补名单 V1建议: > 不做复杂自动候补系统。 名额释放后: 后台待审核列表继续审核即可。 如果后续活动规模增大再增加: > waitlist。 --- # 第四十二章 活动提醒 建议至少: ```text 报名通过时 活动前一天 活动当天适当提前 活动取消/重大变更 ``` 站内通知优先。 微信订阅消息是否发送: > 依据用户授权及微信规则。 --- # 第四十三章 活动前一天提醒 示例: > 你报名的“丹阳青年公益相亲会”将于明天下午2点开始,请提前安排时间。 包含: - 时间 - 地点 - 查看活动 --- # 第四十四章 活动变更 如果重要字段变更: ```text 时间 地点 ``` 已经approved的用户: > 必须收到通知。 --- # 第四十五章 活动重大变更确认 如果活动时间大幅调整: V1可以先: > 通知用户。 未来可增加: > 重新确认参加。 V1不必复杂化。 --- # 第四十六章 活动取消 管理员点击取消: 必须: - 二次确认 - 填写取消原因 - 写审计 - 更新活动状态 - 通知已报名用户 --- # 第四十七章 活动取消后 ```text activity.status = cancelled ``` 所有报名记录: > 保留。 用户: > 无法签到。 活动: > 不允许重新开启。 如果要重新举办: > 复制创建新活动。 --- # 第四十八章 现场签到设计 用户报名通过后,在活动时间范围内显示: > 签到二维码。 二维码: > 动态/短时Token。 --- # 第四十九章 签到二维码不能包含 禁止直接编码: ```text userId 手机号 身份证 ``` 正确: ```text signedCheckinToken ``` --- # 第五十章 签到Token内容逻辑 服务端签名内容可包含: ```text registration_id activity_id nonce expires_at ``` 客户端只拿Token。 --- # 第五十一章 Token有效期 建议: > 5~15分钟。 过期后用户页面自动刷新新的二维码。 --- # 第五十二章 签到人员权限 活动工作人员需要: ```text activity.checkin ``` 可以扫码。 普通红娘不自动拥有签到权限。 --- # 第五十三章 扫码签到流程 ```text 工作人员扫码 ↓ POST checkin ↓ 服务端验证Token ↓ 检查活动 ↓ 检查registration = approved ↓ 检查是否已签到 ↓ 更新checked_in ↓ 返回用户简要信息 ``` --- # 第五十四章 签到成功页面 工作人员看到: ```text 签到成功 张先生 36岁 手机号尾号 1234 ``` 足够识别即可。 --- # 第五十五章 重复签到 重复扫码: > 不报严重错误。 返回: ```text 已签到 签到时间:13:52 ``` --- # 第五十六章 手工签到 二维码异常时,后台可: ```text 姓名/手机号搜索 ↓ 确认用户 ↓ 手工签到 ``` 必须记录: > 操作员。 --- # 第五十七章 现场签到名单隐私 现场工作人员不应该看到: - 用户完整婚恋档案 - 择偶要求 - 举报记录 - 身份证 只看签到必要信息。 --- # 第五十八章 活动现场编号机制 建议大型活动为用户生成: ```text 活动编号 ``` 例如: ```text M018 F023 ``` 或者中性: ```text A018 ``` 具体展示方式按活动运营决定。 --- # 第五十九章 活动编号的价值 现场可以用编号: - 互动 - 互选 - 反馈 减少: > 大声公开真实姓名和手机。 --- # 第六十章 不建议现场挂牌完整姓名 更安全方式: > 名字/昵称 + 编号 例如: ```text 张先生 A018 ``` 具体根据活动形式。 --- # 第六十一章 活动现场流程模板 系统可给运营提供标准流程: ```text 13:30 工作人员准备 14:00 签到 14:30 开场说明 14:40 破冰互动 15:10 分组交流 16:00 自由交流 16:30 意向填写 16:45 活动说明 17:00 结束 ``` 这是运营模板。 V1系统不需要做复杂流程引擎。 --- # 第六十二章 活动规则确认 报名时必须确认: ```text 我已阅读并同意本次活动规则 ``` 活动规则至少说明: - 文明交流 - 尊重他人 - 禁止骚扰 - 禁止营销 - 谨慎金钱往来 - 不得偷拍/传播他人隐私 - 服从必要现场管理 --- # 第六十三章 现场安全说明 开场建议工作人员统一说明: > 尊重个人意愿,任何用户均可拒绝进一步交流。 > 不强制交换手机或微信。 > 活动后请通过平台双向意愿机制继续联系。 --- # 第六十四章 禁止现场强制交换联系方式 运营流程不能设计: > 每个人必须互加微信。 正确: > 用户自主决定。 最好通过平台: > 双向互选。 --- # 第六十五章 活动现场突发投诉 工作人员应有快速入口: ```text 活动管理 ↓ 现场异常 ↓ 选择用户 ↓ 记录情况 ``` V1可以复用: > 风控/举报模块。 --- # 第六十六章 现场风险类型 例如: ```text 骚扰 言语冒犯 疑似营销 疑似虚假身份 疑似醉酒/失控 人身安全风险 其他 ``` --- # 第六十七章 现场临时处置 工作人员根据严重程度: - 提醒 - 劝离 - 暂停活动资格 - 提交平台风控 严重涉及现实安全: > 按现场应急流程处理。 系统不替代现实报警或应急机制。 --- # 第六十八章 现场异常记录 建议: ```text activity_incidents ``` 记录: ```text activity_id user_id incident_type description operator_id created_at risk_report_id ``` --- # 第六十九章 是否纳入V1数据库 建议纳入。 因为线下活动是平台重要安全场景。 可将其实现为: > Risk模块的一种source_type = activity_incident。 这样减少新模块。 --- # 第七十章 活动结束判断 活动结束后: ```text ongoing ↓ ended ``` 可由定时任务自动更新。 管理员也可在特殊情况下提前结束。 --- # 第七十一章 活动结束后的用户入口 “我的活动”中显示: > 活动反馈 按钮。 --- # 第七十二章 活动反馈内容 V1建议: ```text 活动整体满意度 是否愿意再次参加 有没有想进一步了解的人 意见建议 ``` --- # 第七十三章 满意度 可以用: ```text 1~5 ``` 但前端可用: ```text 很满意 满意 一般 不太满意 不满意 ``` 避免过度数据化。 --- # 第七十四章 意向选择 活动后提供: > “今天有没有想进一步了解的人?” 用户可以: ```text 有 没有 ``` --- # 第七十五章 选择对象范围 用户只能从: ```text 同一活动 + 符合活动互选规则 + 未拉黑 + 账号正常 ``` 的人中选择。 不能手工输入任意userId。 --- # 第七十六章 互选名单展示方式 建议展示: ```text 活动编号 展示名 年龄 头像 ``` 例如: ```text A018 王女士 32岁 ``` 帮助用户确认。 --- # 第七十七章 活动后意向隐私 A选择B。 B没有选择A: > B不知道A选择了自己。 这个规则必须严格执行。 --- # 第七十八章 双向互选 当: ```text A interested B AND B interested A ``` 系统: ```text 创建Match source = activity ↓ 创建Conversation ↓ 通知双方 ``` --- # 第七十九章 活动互选生成Match 活动互选本身已经是: > 双方明确同意进一步了解。 因此不需要再次点一次Like。 可以直接创建: > Mutual Match。 --- # 第八十章 活动Match通知 建议: > 你和王女士在本次活动中互相选择,可以开始进一步了解了。 按钮: > 开始聊天 --- # 第八十一章 多人意向 用户可以选择几个人? V1建议: > **最多3位。** 理由: - 保留一定自主空间 - 避免变成无限海选 - 方便活动后跟进 此数量建议配置化。 --- # 第八十二章 是否只能选1位 不建议强制1位。 一次线下活动中: > 用户可能对2~3人有进一步了解意愿。 不等于承诺恋爱。 --- # 第八十三章 意向选择截止时间 建议活动结束后开放: ```text 24~72小时 ``` 例如默认: > 48小时。 具体配置。 --- # 第八十四章 为什么需要截止 避免几个月后: > 突然点击活动互选。 活动互选应该反映: > 当次活动后的近期意愿。 --- # 第八十五章 截止后 不能再修改。 或者: > 只允许在截止前修改。 截止时系统最终计算双方意向。 --- # 第八十六章 互选结果通知时间 建议: > 用户提交后可以实时检查双向。 但如果担心“谁先选谁”产生压力: V1更推荐: > 截止后统一或双方完成后通知。 技术上只暴露: > 双向成功。 绝不暴露单向。 --- # 第八十七章 活动后红娘跟进 对于: - 双向互选 - 用户主动申请 - 长期无结果 公益红娘可以继续服务。 --- # 第八十八章 双向互选后的红娘 默认: > 不主动介入私人聊天。 可以在后续轻提示: > 如果需要公益红娘协助,可以申请帮助。 --- # 第八十九章 无互选结果用户 不要显示: > “你没有被任何人选择。” 这种文案容易造成负面体验。 正确: > 本次暂未形成双方共同意向。 可以: > 查看新的推荐 / 申请公益红娘帮助。 --- # 第九十章 无意向用户 用户自己选择: > 没有想进一步了解的人。 系统不再要求其继续选择。 活动反馈仍正常保存。 --- # 第九十一章 活动后单向意向数据 后台是否能看到? 建议: > 运营普通人员只看聚合数据。 例如: ```text 提交意向人数 双向互选数量 ``` 不要默认给普通运营看: > A单选B但B没选A。 --- # 第九十二章 红娘是否能看单向意向 默认: > 不看。 除非用户主动申请: > “请红娘帮我联系活动中某位对象”。 此时只处理该用户授权的具体意向。 --- # 第九十三章 现场交换联系方式后的平台边界 用户现实现场自行交换: > 平台无法完全禁止。 但活动规则应强调: > 自主、自愿、谨慎。 平台仍建议: > 优先通过双向互选+平台聊天继续了解。 --- # 第九十四章 活动参与记录隐私 其他普通用户不能查看: > 某人参加过哪些公益相亲活动。 这属于私人服务记录。 --- # 第九十五章 用户自己可查看 “我的活动”: > 可以查看自己的历史。 --- # 第九十六章 红娘可查看活动记录边界 服务用户时: 红娘可以看到必要摘要: ```text 近期参加2次活动 暂无双向互选 ``` 不必显示所有详细反馈。 --- # 第九十七章 活动数据统计 后台建议: ```text 报名人数 审核通过人数 实际签到人数 签到率 男女比例 年龄分布 反馈提交人数 意向提交人数 双向互选数 活动来源Match数 ``` --- # 第九十八章 活动核心漏斗 ```text 活动曝光 ↓ 查看详情 ↓ 报名 ↓ 审核通过 ↓ 签到 ↓ 反馈 ↓ 意向 ↓ 双向互选 ↓ 聊天 ``` --- # 第九十九章 不用“牵手率”包装单次活动 双向互选: > 只是愿意进一步了解。 不能宣传成: > 成功牵手。 真正成功牵手仍走后续双方确认。 --- # 第一百章 活动成功指标 短期: ```text 报名率 到场率 反馈率 双向互选率 ``` 中期: ```text 活动来源聊天启动率 正在了解人数 ``` 长期: ```text 活动来源成功牵手数 ``` --- # 第一百零一章 到场率 ```text 签到人数 / 审核通过人数 ``` 用于活动运营改进。 --- # 第一百零二章 男女比例 用于: > 下一场活动招募调整。 不能用于: > 对不同性别收费。 当前V1永久免费。 --- # 第一百零三章 年龄分布 可以按段: ```text 18~24 25~29 30~34 35~39 40~49 50+ ``` 后台统计。 具体活动文案应避免让用户形成等级感。 --- # 第一百零四章 活动取消率 如果某用户多次报名不来: 是否处罚? V1建议: > 只做轻量运营提示。 不要直接封号。 --- # 第一百零五章 多次无故缺席 可以形成: ```text activity_no_show_count ``` 作为活动管理参考。 未来可: > 限制高需求活动报名。 但V1不建议自动严厉处罚。 --- # 第一百零六章 No-show与风控分离 没来活动: > 不等于风险用户。 只是: > 活动运营行为。 不要加入诈骗风险分。 --- # 第一百零七章 活动候补运营 V1人工处理: > 有名额释放后继续审核待审核用户。 无需自动候补通知系统。 --- # 第一百零八章 活动创建权限 权限: ```text activity.create ``` 活动编辑: ```text activity.edit ``` 活动发布: ```text activity.publish ``` 报名审核: ```text activity.registration.review ``` 签到: ```text activity.checkin ``` --- # 第一百零九章 活动取消权限 建议单独: ```text activity.cancel ``` 因为影响较大。 必须审计。 --- # 第一百一十章 活动角色分工 建议: ### 活动管理员 创建、报名审核、数据管理。 ### 现场工作人员 签到、现场异常记录。 ### 公益红娘 必要时现场/后续婚恋服务。 三个角色权限不要自动混为一体。 --- # 第一百一十一章 活动现场工作人员临时账号 如果使用志愿者: 建议: > 创建独立低权限账号。 不要把管理员密码告诉志愿者。 --- # 第一百一十二章 临时账号有效期 可以设置: ```text 活动当天有效 ``` 活动结束后自动停用或人工停用。 --- # 第一百一十三章 活动人员数据权限 现场志愿者只能查看: ```text 报名名单必要字段 签到状态 活动编号 ``` 不能进入: > 用户管理后台。 --- # 第一百一十四章 活动现场网络异常 必须有降级方案。 如果现场网络差: 后台可以: > 搜索报名名单后手工签到。 如果完全离线: V1可准备: > 最小脱敏纸质/离线名单作为应急。 --- # 第一百一十五章 应急名单原则 只包含: ```text 活动编号 展示名 手机号后四位 ``` 必要时: > 性别/年龄。 不能打印身份证。 活动结束: > 按内部规则销毁。 --- # 第一百一十六章 现场二维码设备要求 工作人员可以使用: > 手机Web后台/微信扫码工作页面。 不需要专用硬件。 降低活动执行成本。 --- # 第一百一十七章 活动签到统计实时显示 后台: ```text 应到 96 已到 83 未到 13 ``` 支持工作人员掌握现场情况。 --- # 第一百一十八章 男女签到实时数 可以显示: ```text 男性已到 41/48 女性已到 42/48 ``` 用于现场组织。 --- # 第一百一十九章 活动开始后迟到 只要活动仍允许签到: > 可以签到。 建议配置: ```text checkin_end_at ``` V1可默认: > 活动结束前。 --- # 第一百二十章 提前签到 可配置: 例如: > 活动开始前60分钟允许签到。 服务端判断。 --- # 第一百二十一章 签到范围 V1不做GPS围栏。 原因: - 不必要定位 - 隐私增加 - 现场工作人员扫码已足够 --- # 第一百二十二章 活动地址导航 可以使用: > 用户主动打开地图。 如果接地图服务: > 仅用于显示活动地点。 不持续采集用户位置。 --- # 第一百二十三章 活动现场照片 活动组织方可能拍摄活动照片。 这和用户婚恋资料照片不是同一用途。 必须在活动规则中: > 明确告知是否拍摄和可能用途。 --- # 第一百二十四章 宣传照片默认原则 不要默认: > 用户参加活动就授权公开宣传。 如果需要公开个人可识别照片: > 应取得相应授权。 --- # 第一百二十五章 不愿出镜 活动流程应允许: > 用户表达不愿用于公开宣传。 运营现场做好标识/区域管理。 系统可后续增加: ```text photo_publicity_consent ``` V1如实际有宣传拍摄需求建议纳入报名确认。 --- # 第一百二十六章 活动反馈匿名性 对活动满意度: > 运营统计可匿名汇总。 工作人员不必默认看到: > 某用户给了2分。 涉及具体投诉: > 再进入反馈/举报处理。 --- # 第一百二十七章 普通意见与安全举报分离 反馈: > 活动流程不好。 举报: > 某用户骚扰我。 两个入口不同。 安全问题必须进入: > Risk流程。 --- # 第一百二十八章 红娘现场服务 活动现场可有: > 公益红娘咨询台。 用户自愿咨询: - 择偶条件 - 活动对象 - 后续服务 红娘不应: > 公开点评某用户条件。 --- # 第一百二十九章 红娘现场跟进记录 如果形成正式服务: > 创建MatchmakerService。 不要用纸质笔记长期保存敏感婚恋资料。 --- # 第一百三十章 活动与推荐系统协同 活动报名数据不直接提高用户匹配分。 但活动后: > 双向互选 是明确关系信号。 --- # 第一百三十一章 不因“经常参加活动”提高质量分 活动活跃度: > 不等于更优质。 所以不进入基础MutualScore。 --- # 第一百三十二章 活动对象展示算法 活动后互选列表: 不需要再按全平台算法强排序。 可以: - 按活动编号 - 按用户互动记录(如果未来有) - 基础推荐程度轻量排序 V1建议: > 简单、可识别优先。 --- # 第一百三十三章 是否现场提前推荐座位对象 V1不做复杂智能排桌。 如果运营需要: > 人工分组。 未来再增加: > 系统辅助分组。 --- # 第一百三十四章 为什么V1不做智能排桌 需要考虑: - 性别 - 年龄 - 条件 - 座位 - 轮换 - 现场临时缺席 复杂度很高。 V1核心先验证: > 活动报名与互选闭环。 --- # 第一百三十五章 活动用户状态变更 如果用户报名后: > 账号被封禁。 系统: - 活动报名资格失效 - 通知活动管理员 - registration可变为cancelled_by_platform或内部状态 --- # 第一百三十六章 是否新增cancelled_by_platform 建议Registration状态扩展: ```text pending approved rejected cancelled cancelled_by_platform ``` 便于区分: > 用户自己取消 和: > 平台安全原因取消。 --- # 第一百三十七章 用户隐私说明 因安全原因取消活动资格: 前台只展示: > 当前报名资格已取消,请查看账号状态或联系工作人员。 不要暴露内部Risk详情。 --- # 第一百三十八章 活动开始前资料变化 例如用户婚姻状态发生重要变化并进入重新审核。 如果活动已approved: 建议: > 暂停其活动资格,等待审核。 活动管理员收到: > 资格状态变化提醒。 --- # 第一百三十九章 用户注销 如果未开始活动已报名: 根据之前规则: > 自动取消报名并释放名额。 --- # 第一百四十章 活动数据表补充建议 在前面数据库基础上建议增加: ```text activity_rules_version activity_checkin_config activity_interest_config activity_incidents ``` 但V1可简化为activities中的配置字段+RiskEvent。 --- # 第一百四十一章 建议新增字段 activities可增加: ```text cancel_deadline_at checkin_start_at checkin_end_at interest_submit_deadline_at max_interest_selections ``` --- # 第一百四十二章 Registration可增加 ```text cancelled_at cancel_reason cancel_source ``` cancel_source: ```text user admin risk system ``` --- # 第一百四十三章 ActivityFeedback扩展 建议: ```text satisfaction join_again comment submitted_at ``` 意向最好不要只放单个: ```text interested_user_id ``` 因为已经建议最多3人。 --- # 第一百四十四章 活动意向数据模型修正 建议单独表: ```text activity_interests ``` 字段: ```text id activity_id user_id target_user_id created_at ``` 唯一: ```text activity_id + user_id + target_user_id ``` --- # 第一百四十五章 为什么单独表更合理 因为一个用户可能选择: > 最多3人。 原先activity_feedback中的单个interested_user_id: > 无法满足。 因此V1数据库设计后续实现时应采用: ```text activity_feedback + activity_interests ``` --- # 第一百四十六章 activity_interests安全约束 必须: ```text user_id != target_user_id ``` 并且双方: > 都是该活动合法参与者。 --- # 第一百四十七章 双向互选查询 判断: ```text A → B exists AND B → A exists ``` 则: > Mutual Activity Interest。 使用唯一Match创建逻辑。 --- # 第一百四十八章 活动来源Match去重 如果A、B本来已经有active Match: 活动互选: > 不创建第二个Match。 只记录: > activity mutual interest。 --- # 第一百四十九章 已有Match用户活动互选 系统可以提示: > 你们已经互相喜欢,可以继续在聊天中了解。 无需重复通知过多。 --- # 第一百五十章 已Unmatch的双方活动再次互选 是否允许重新建立Match? V1建议: > 可以,但需要明确作为新的双方意愿。 因为线下再次见面后: > 双方都重新选择对方。 数据库原matches设计若一pair只一条: 可将: ```text unmatched → active ``` 但必须: - 记录reactivated_at - 保留历史 更推荐未来有MatchHistory。 V1可以先采用: > 重新激活原Match + Audit/Event。 --- # 第一百五十一章 Block仍然最高优先级 如果双方活动互选但存在: > 任一方Block。 系统: > 不建立Match。 理论上被Block方也不应该出现在互选名单。 --- # 第一百五十二章 活动结束后数据同步 需要更新: - 活动状态 - 我的活动 - 反馈入口 - 互选入口 - 统计 - 红娘服务提示 --- # 第一百五十三章 活动日报/复盘 活动结束后后台可生成简单汇总: ```text 报名 108 通过 96 签到 87 到场率 90.6% 提交反馈 72 提交意向 46 双向互选 11对 ``` --- # 第一百五十四章 不自动生成宣传口径 这些内部数据不能直接变成: > “牵手成功11对”。 正确: > 形成11组双方进一步了解意向。 --- # 第一百五十五章 活动复盘备注 管理员可以填写: ```text 现场情况 问题 下次改进 ``` 用于公益组织内部运营。 --- # 第一百五十六章 是否需要活动模板 V1技术上可以提供: > 复制活动。 不建设复杂模板中心。 例如: > 复制上一场活动 → 修改日期地点。 --- # 第一百五十七章 活动复制 复制: - 活动介绍 - 人数配置 - 规则 - 年龄范围 不复制: - 报名人员 - 签到 - 反馈 - 互选 --- # 第一百五十八章 后台活动操作审计 必须记录: ```text 创建 修改 发布 取消 审核报名 手工签到 修改关键时间 ``` --- # 第一百五十九章 活动安全日志 需要重点记录: - 被风险取消资格 - 现场异常 - 举报 - 劝离 - 紧急情况 --- # 第一百六十章 活动管理员不能处理平台级封禁 活动管理员可以: > 提交风险事件。 真正封禁: > 由风控权限角色处理。 避免现场人员权限过大。 --- # 第一百六十一章 现场紧急联系人 如果实际活动确实需要: > 可在该活动报名中收集。 使用目的: > 现场紧急情况。 不能: > 以后拿来营销或红娘联系。 --- # 第一百六十二章 紧急联系人数据生命周期 活动结束且安全处理需求结束后: > 应按数据保留策略及时清理。 不应永久留在用户婚恋档案。 --- # 第一百六十三章 紧急联系人不是用户Profile字段 不要写入: ```text user_profiles ``` 应属于: > activity_registration scoped data。 --- # 第一百六十四章 活动报名协议版本 建议记录: ```text activity_rule_version agreed_at ``` 如果不同活动规则不同: > 方便追溯。 --- # 第一百六十五章 活动规则变更 已报名后若重大修改规则: > 需要重新通知。 是否要求重新确认: > 视变更重要程度。 --- # 第一百六十六章 活动数据权限矩阵 | 数据 | 用户本人 | 红娘 | 活动管理员 | 签到志愿者 | 风控 | |---|---:|---:|---:|---:|---:| | 自己报名 | 是 | 必要时 | 是 | 简要 | 必要时 | | 报名名单 | 否 | 否/有限 | 是 | 简要 | 必要时 | | 身份证 | 否 | 否 | 否 | 否 | 特殊权限 | | 签到状态 | 自己 | 有限 | 是 | 是 | 必要时 | | 活动反馈 | 自己 | 默认否 | 聚合/必要 | 否 | 必要时 | | 单向意向 | 自己 | 默认否 | 默认否 | 否 | 必要时 | | 双向互选 | 自己 | 服务必要 | 聚合 | 否 | 必要时 | --- # 第一百六十七章 活动前端P0页面 ```text 活动首页 活动详情 报名确认 报名成功 我的活动 签到二维码 活动反馈 活动互选 互选成功 ``` --- # 第一百六十八章 后台P0页面 ```text 活动列表 创建/编辑活动 报名管理 报名审核 签到管理 活动数据 现场异常 ``` --- # 第一百六十九章 活动详情按钮状态 ```text registration_open + not_applied → 立即报名 pending → 报名审核中 approved → 报名成功 rejected → 查看原因 full → 报名已满 registration_closed → 报名已结束 cancelled → 活动已取消 ``` --- # 第一百七十章 活动结束按钮 如果用户已签到: ```text 填写活动反馈 ``` 如果已反馈且互选期开放: ```text 查看/修改我的意向 ``` --- # 第一百七十一章 活动反馈不强制 用户不填写: > 不影响账号。 不要为了数据完整性强制。 --- # 第一百七十二章 用户互选也不强制 用户可以: > 没有想进一步了解的人。 系统必须尊重。 --- # 第一百七十三章 互选成功页面 ```text ♥ 你们在本次活动中互相选择 [张先生头像] [王女士头像] 可以开始进一步了解了 [开始聊天] 稍后再聊 ``` 与线上Mutual Match视觉保持一致。 --- # 第一百七十四章 活动后无结果页面 推荐: ```text 感谢你的参与 本次暂未形成双方共同意向。 可以继续查看平台推荐, 或申请公益红娘帮助。 [看看新的推荐] [申请红娘帮助] ``` --- # 第一百七十五章 不显示“没人选你” 这是明确UX红线。 --- # 第一百七十六章 活动运营不做竞争排名 不展示: - 最受欢迎男嘉宾 - 最受欢迎女嘉宾 - 收到多少选择 - 人气榜 - 心动榜 保持公益、尊重、非娱乐化。 --- # 第一百七十七章 活动现场不做“公开表白墙” V1不建议。 避免: - 隐私暴露 - 尴尬 - 社交压力 --- # 第一百七十八章 活动数据也不做个人受欢迎度 后台不需要: ```text 某人被选择8次 ``` 作为“高价值用户”指标。 只在必要的互选计算中使用单向记录。 --- # 第一百七十九章 活动质量评价 更适合关注: ```text 到场率 用户满意度 双向互选率 后续聊天率 安全事件数 ``` --- # 第一百八十章 活动风控指标 后台: ```text 活动举报数 现场异常数 被劝离人数 高风险报名拦截数 ``` --- # 第一百八十一章 活动异常率 如果某场活动: > 举报明显较多。 运营需要复盘: - 场地管理 - 参与人筛选 - 活动流程 - 工作人员配置 --- # 第一百八十二章 线下安全应急联系人 每场活动后台建议配置: ```text 活动负责人 联系电话 现场安全负责人 ``` 用户详情中可显示: > 活动联系电话。 --- # 第一百八十三章 不在公开活动页展示工作人员私人手机号 如可行: > 使用工作号码。 若只能使用个人手机号: 也应评估是否需要全部公开。 --- # 第一百八十四章 V1活动服务闭环最终架构 ```text 线上用户 │ ↓ Activity Browse │ ↓ Registration │ ↓ Eligibility Check │ ↓ Manual Review │ ↓ Approved │ ↓ Reminder │ ↓ QR Check-in │ ↓ Offline Event │ ├── Risk Incident → Risk Service │ ↓ Feedback │ ↓ Activity Interest │ ↓ Mutual? ├── No → 继续推荐/红娘 │ └── Yes ↓ Match ↓ Conversation ↓ Getting to Know ``` --- # 第一百八十五章 开发优先级 ## P0 ```text Activity CRUD 发布/取消 报名 资格检查 人工审核 人数控制 我的活动 二维码签到 后台签到 活动反馈 ``` --- ## P1 ```text 活动互选 activity_interests 双向互选生成Match 活动提醒 现场异常关联Risk 用户取消报名 ``` --- ## P2 ```text 活动复盘 更完善统计 复制活动 临时工作人员账号 更多运营配置 ``` 注意: 活动互选属于V1完整闭环的重要模块,虽然排在实现P1,但必须在V1正式上线范围内完成。 --- # 第一百八十六章 并发测试 必须测试: 1. 多人同时抢最后名额 2. 两个审核员同时批准最后名额 3. 用户重复报名 4. 用户取消与管理员批准同时发生 5. 重复扫码签到 6. A、B同时互选 7. Activity刚取消用户同时报名 --- # 第一百八十七章 权限测试 必须测试: - 志愿者查看完整用户资料 - 活动管理员查看聊天 - 红娘直接批准活动报名 - 无权限人员取消活动 - 普通用户访问他人签到Token - 用户修改activityId查看他人报名 必须全部正确拒绝。 --- # 第一百八十八章 隐私测试 必须确认: - 用户看不到他人报名信息 - 用户看不到单向意向 - 运营人员默认看不到单向意向详情 - 签到人员看不到身份证 - 紧急联系人不会进入普通Profile - 已注销用户不继续公开活动资料 --- # 第一百八十九章 活动业务验收场景一 活动: ```text 男50 女50 ``` 当前: ```text 男49 女40 ``` 再批准一名男性: > 成功。 再批准下一名男性: > GENDER_QUOTA_FULL。 即使总人数仍未到100。 --- # 第一百九十章 活动业务验收场景二 用户32岁,活动范围: ```text 25~30 ``` 报名: > AGE_NOT_ELIGIBLE。 年龄由实名认证birth_date计算。 --- # 第一百九十一章 活动业务验收场景三 用户报名pending。 期间活动取消。 审核员再点击通过: > ACTIVITY_NOT_OPEN。 --- # 第一百九十二章 活动业务验收场景四 A选择B。 B没选A。 最终: > 不建立Match。 B: > 不知道A单向选择。 --- # 第一百九十三章 活动业务验收场景五 A选择B。 B选择A。 双方: > 自动形成activity来源Match。 聊天立即可用。 --- # 第一百九十四章 活动业务验收场景六 A已Block B。 即使由于旧缓存A的互选页面出现B: 提交时服务端: > 拒绝该意向。 并刷新名单。 --- # 第一百九十五章 活动业务验收场景七 活动用户发生严重骚扰。 现场工作人员: > 提交风险事件。 风控员: > 处理账号。 账号限制实时影响: - 活动资格 - 匹配 - 聊天 --- # 第一百九十六章 线下服务核心原则 V1.0必须坚持: > **活动不是单纯把人拉到现场。** > **报名必须有资格审核。** > **现场只使用完成任务必要的信息。** > **不强迫用户交换联系方式。** > **活动后的意向必须双向。** > **单向选择必须保密。** > **互选只是进一步了解,不等于成功牵手。** > **现场风险能够直接进入平台风控闭环。** > **公益红娘可以继续服务,但不干预私人沟通。** --- # 第一百九十七章 最终设计原则 整个公益相亲活动闭环最终要达到: > **线上先把身份和资格做好,线下把见面和体验做好,活动后把双方意愿保护好,再把真正互相愿意的人自然接回平台继续沟通。** 最终形成: > **线上筛选 → 公益活动见面 → 双向互选 → 平台沟通 → 公益红娘辅助 → 成功牵手** 这才是本平台区别于单纯“线上刷对象”和单纯“线下办相亲会”的核心服务闭环。