⚠️ MVP阶段说明
本项目为全新项目,尚未上线,当前处于 MVP(最小可行产品)阶段。
核心业务:面向终端药店的B2B采购聚合比价工具,用户绑定自有B2B平台账号,智价云(药店版)并行查询同款报价。
产品形态:多端交付策略 - MVP首选Windows独立桌面应用(.exe),后续扩展微信小程序、APP、公众号等多渠道。
目标用户:药店采购人员、药师,目标日活20万+。📅 版本:v1.1-MVP | 📆 更新日期:2026-07-01 | ✅ 状态:开发中
智价云(药店版)是一款面向终端药店的B2B采购聚合比价工具,核心价值:
| 价值点 | 说明 | 收益 |
|---|---|---|
| 💰 降低采购成本 | 聚合查询已绑平台报价 | 平均节省10%-30% |
| 🔒 安全可控 | Windows独立桌面应用,自建安全策略 | 不依赖系统浏览器 |
| ⚡ 高效便捷 | 一键启动,并行查询多平台 | 提升采购效率50%+ |
| 🎯 精准比价 | 基于用户自有账号查询 | 价格真实可靠 |
| 👥 裂变增长 | 邀请其他药店注册获得会员时长奖励 | 快速扩大用户规模 |
| 💳 会员变现 | 支持微信/支付宝购买会员套餐 | 商业闭环 |
🎯 MVP目标:验证核心业务流程(注册→绑定账号→聚合查询→跳转购买→购买会员),快速上线获取种子药店用户,收集真实使用反馈。
| 角色 | 系统角色 | 说明 | 核心需求 |
|---|---|---|---|
| 药店采购员 | USER | 负责药店日常药品采购 | 快速找到最低价格,生成采购链接 |
| 执业药师 | USER | 审核药品质量和供应商资质 | 查看药品详细信息、供应商信誉 |
| 药店老板 | USER | 控制采购成本,优化供应链 | 采购数据分析、成本控制报表 |
| 运营人员 | ADMIN | 管理邀请配置、发放优惠券、审核执照 | 提高用户注册率和活跃度 |
| 超级管理员 | SUPER_ADMIN | 系统全局管理、角色赋权 | 用户管理、数据统计、风控监控 |
三级RBAC权限模型:
| 功能 | 说明 |
|---|---|
| 短信验证码登录 | 手机号 + 6位验证码,新用户自动注册 |
| 密码登录 | 手机号/昵称 + 密码(BCrypt加密),支持设置/修改密码 |
| 微信扫码登录 | 微信开放平台扫码,首次登录需绑定手机号 |
| 修改手机号 | 已登录用户通过验证码验证后修改绑定手机号 |
| Token 管理 | Access Token(24h)+ Refresh Token(7d) |
| 用户信息 | 昵称、头像、手机号、会员等级、药店名称、地区信息 |
| 登录来源追踪 | 记录登录设备、登录IP、登录来源(WINDOWS/MINIAPP/ANDROID/IOS/WECHAT) |
系统采用三级会员体系,会员等级驱动爬虫配额权益:
| 会员等级 | 编码 | 权重 | 每日配额 | 每月配额 | 每年配额 | 最大并发 | 过期时间 | 适用场景 |
|---|---|---|---|---|---|---|---|---|
| 普通会员 | PLUS | 1 | 10次 | 300次 | 3650次 | 1 | 无(永久) | 注册即得,限时免费 |
| 高级会员 | PRO | 2 | 999次 | 29970次 | 364635次 | 5 | 有(购买/赠送) | 付费会员,核心变现 |
| 超级会员 | ULTRA | 3 | 999次 | 29970次 | 364635次 | 10 | 有(运营发放) | 连锁专用,待开放购买 |
获取方式:
| 等级 | 获取方式 |
|---|---|
| PLUS | 用户注册即自动获得,不限时长,永久免费 |
| PRO | ① 付费购买(月卡30天/年卡365天)② 邀请奖励(1个月)③ 营业执照审核通过(1个月)④ 运营手动发放 |
| ULTRA | 运营手动发放(购买入口待开放) |
互斥与叠加规则:
ULTRA > PRO > PLUS到期与降级:
t_user 表与 t_user_membership 表通过 membership_expire_at 字段实时同步会员数据存储:
| 表 | 关键字段 | 说明 |
|---|---|---|
t_user |
membership_level, membership_expire_at |
用户当前等级与过期时间(冗余,实时同步) |
t_user_membership |
level, effective_from, effective_to, status, source |
会员记录权威来源 |
会员来源(source):
| 来源 | 说明 |
|---|---|
RECHARGE |
用户付费购买 |
INVITE |
邀请奖励赠送 |
LICENSE |
营业执照审核通过赠送 |
ADMIN_GRANT |
运营手动发放 |
SYSTEM |
系统默认(普通会员PLUS) |
付费套餐(当前开放):
| 方案编码 | 方案名称 | 会员等级 | 价格 | 原价 | 有效天数 |
|---|---|---|---|---|---|
| MONTHLY_PRO | 高级会员·月卡 | PRO | ¥29.90 | ¥59.90 | 30天 |
| YEARLY_PRO | 高级会员·年卡 | PRO | ¥299.90 | ¥599.90 | 365天 |
| ULTRA | 超级会员·连锁专享 | ULTRA | - | - | 敬请期待 |
说明:普通会员(PLUS)免费开放,无付费套餐。高级会员(PRO)提供月卡和年卡两种套餐。超级会员(ULTRA)暂未开放购买。
用户侧接口:
| 接口 | 说明 |
|---|---|
| GET /api/membership/my | 查询我的会员信息(等级、到期时间、来源等) |
| GET /api/membership/benefits?level=PLUS | 查询指定等级的权益配置详情 |
| GET /api/level/list | 获取所有会员等级列表(公开,含定价方案) |
| GET /api/level/{id} | 获取等级详情(公开) |
| GET /api/level/my | 获取当前用户等级信息(含配额、到期时间、套餐) |
用户总配额 = 会员权益配额 + 额外配额
额外配额来源:
| 来源 | 类型标识 | 过期策略 | 说明 |
|---|---|---|---|
| 邀请奖励 | INVITE | 永不过期 | 运营配置的额外爬虫次数(当前默认0,仅送会员不送配额) |
| 购买会员 | PURCHASE | 可配置 | 购买/升级会员时发放 |
| 运营发放 | ADMIN | 可配置 | 运营手动为指定用户发放 |
配额周期:日配额(每日重置)+ 月配额(每月重置)+ 年配额(每年重置)
消耗优先级:优惠券 > 额外配额(快过期优先)> 会员权益配额
过期控制:每笔发放独立设置 expire_time,定时任务每小时扫描标记过期记录。
用户侧接口:
| 接口 | 说明 |
|---|---|
| GET /api/crawler/status | 获取爬虫配额状态(今日/本月/本年 已用、剩余、来源明细) |
| POST /api/crawler/consume | 消耗爬虫次数(前端启动爬虫前调用) |
| GET /api/crawler/logs?days=7 | 获取爬虫使用记录(最近N天) |
| GET /api/invite/extra-quota | 查询我的可用额外配额总数(邀请奖励 + 运营发放) |
输入药品名称 → 选择比价平台(药师帮/药帮忙/1药城)
→ 并行查询已绑平台账号
→ 展示比价结果(按价格从低到高排序)
→ 点击"去XX平台购买"跳转到原平台完成交易
| 接口 | 说明 |
|---|---|
| POST /api/search/query | 药品搜索比价,消耗1次爬虫配额,返回各平台报价 |
| GET /api/search/suggestions | 获取热门药品搜索建议(公开,无需登录) |
B2B批发平台(3个 - MVP启用):
后续扩展平台(通过运营配置动态启用):
说明:代码支持34个平台,但MVP首期仅启用3个核心平台,后续通过运营配置逐步开放。
| 接口 | 说明 |
|---|---|
| POST /api/platform-account/bind | 绑定B2B平台账号(AES-256加密存储) |
| DELETE /api/platform-account/unbind/{platformCode} | 解绑平台账号 |
| GET /api/platform-account/list | 查询已绑定的平台账号列表 |
| POST /api/platform-account/verify/{platformCode} | 验证平台账号有效性 |
| 接口 | 说明 |
|---|---|
| GET /api/platform-config/enabled | 查询所有启用的平台列表(公开) |
| GET /api/platform-config/{platformCode} | 查询指定平台配置(公开) |
| 字段 | 说明 |
|---|---|
| 平台名称 | 药师帮、药帮忙、1药城(带彩色Badge) |
| 供应商 | 药品批发公司名称 |
| 规格 | 药品规格(如:0.25g×24片) |
| 价格 | 单价(元),最低价红色标注 |
| 最小起订量 | 最少购买数量 |
| 库存状态 | 有货/缺货 |
| 效期 | 药品有效期,近效期橙色标注 |
| 操作 | 「去XX平台购买」按钮 → WebView跳转原平台 |
药店A获取邀请链接 → 分享给其他药店B
→ B打开落地页(显示A的药店名称和奖励说明)
→ B下载客户端并注册(自动填入邀请码)
→ A获得奖励:1个月高级会员(PRO) + 可选额外爬虫配额
→ B注册即得普通会员(PLUS),永久免费
| 角色 | 奖励内容 | 说明 |
|---|---|---|
| 邀请人 | 1个月高级会员(PRO) + 可选额外爬虫配额 | 每成功邀请1家药店注册即发放,奖励立即到账 |
| 被邀请人 | 普通会员(PLUS) | 注册即获得,不限时长,永久免费 |
邀请奖励规则:
rewardCrawlerCount),默认0=不额外发放| 渠道 | channel | 打开方式 | 说明 |
|---|---|---|---|
| Windows App | windows | download | 直接下载客户端(默认渠道) |
| 微信公众号 | redirect | 跳转公众号/H5 | |
| 小程序 | miniapp | miniapp | 打开小程序 |
| 钉钉 | dingtalk | deeplink | 应用内深度链接 |
| 飞书 | feishu | deeplink | 应用内深度链接 |
zhijiayun://invite?code=XXX)和DeepLink自动填入邀请码{inviter} 和 {pharmacy} 动态占位符替换我是用户6917,在这里发现了一个药店采购神器——智价云(药店版)!它聚合比价功能特别方便,能快速查到最低价,帮你节省采购成本。下载链接https://priceapi.kailin.com.cn/api/invite/2XKADABS填我的邀请码 2XKADABS 完成注册,你也会获得会员权益!
已邀请5家药店,3家注册,累计获得3个月会员| 接口 | 说明 |
|---|---|
| GET /api/invite/code | 获取我的邀请码和邀请链接(含分享文案) |
| GET /api/invite/stats | 获取邀请统计(邀请人数、注册人数、累计奖励) |
| GET /api/invite/rewards | 获取邀请记录列表(含注册状态) |
| GET /api/invite/extra-quota | 获取可用额外爬虫次数 |
| GET /api/invite/my-inviter | 查询我的邀请人 |
| POST /api/invite/bind | 补填邀请码 |
| GET /api/invite/page/{code}?channel=windows | 邀请落地页数据(公开,无需登录) |
| GET /invite/{code}?channel=wechat | 邀请链接直接访问入口(公开,自动计入点击数) |
| POST /api/invite/click/{code} | 追踪邀请链接被打开(公开) |
| GET /api/invite/resolve-link?link=xxx | 智能解析邀请链接或邀请码(公开,适用于粘贴文本场景) |
设计原则:
审核流程:
用户上传营业执照 → 提交审核申请 → 运营后台查看待审队列
→ 运营审核(通过/驳回)→ 通过后显示"已认证"标识
营业执照信息:药店名称、统一社会信用代码、法人姓名、注册地址、经营范围、有效期等。
审核通过奖励:首次营业执照审核通过,自动赠送30天高级会员(PRO),来源标记为 LICENSE。
用户侧接口:
| 接口 | 说明 |
|---|---|
| POST /api/business-license/upload | 上传营业执照(JSON方式,传图片URL) |
| POST /api/business-license/upload-file | 上传营业执照(文件方式,multipart) |
| GET /api/business-license/info | 查询我的营业执照信息及审核状态 |
| 功能 | 说明 |
|---|---|
| 发放 | 运营指定已有优惠券,批量发放给指定用户 |
| 使用 | 爬虫消耗时优先使用优惠券 |
| 类型 | CRAWLER(爬虫次数券) |
用户侧接口:
| 接口 | 说明 |
|---|---|
| GET /api/coupon/my?status=0 | 获取我的优惠券列表(可按状态筛选) |
| GET /api/coupon/my/available?type=CRAWLER | 获取我当前可用的优惠券列表 |
| 接口 | 说明 |
|---|---|
| POST /api/upload | 上传单个文件(multipart/form-data),返回文件访问路径 |
说明:支持营业执照图片、用户头像等文件上传,文件存储在服务器 /opt/uploads 目录。
| 功能 | 接口 | 说明 |
|---|---|---|
| 支付方案列表 | GET /api/payment/plans | 获取可用会员套餐(公开) |
| 创建支付订单 | POST /api/payment/order/create | 选择套餐+支付渠道创建订单 |
| 查询订单 | GET /api/payment/order/{orderNo} | 查询单个订单状态 |
| 我的订单 | GET /api/payment/orders | 查询用户所有订单 |
| 模拟支付 | POST /api/payment/order/{orderNo}/pay | 开发测试用模拟支付(当前仅支持此模式) |
| 切换渠道 | POST /api/payment/order/{orderNo}/switch-channel | 切换支付渠道并重新生成二维码 |
| 微信回调 | POST /api/payment/callback/wechat | 微信支付异步通知(公开,当前仅模拟模式) |
| 支付宝回调 | POST /api/payment/callback/alipay | 支付宝异步通知(公开,当前仅模拟模式) |
支付渠道:微信支付(Native扫码)、支付宝(当面付/扫码)
重复支付自动退款:用户切换支付渠道后,多个渠道都可能支付成功。系统以第一次支付成功为准激活会员,后续重复支付自动记录到 t_payment_order_extra_payment 表,并原路退款(微信退款API v3 / 支付宝退款接口)。退款状态记录为 PENDING → SUCCESS/FAILED,支持退款失败原因追踪。
⚠️ 当前状态:生产环境微信/支付宝回调接口为占位实现(含TODO),当前仅模拟支付模式可用。上线前需接入微信支付SDK和支付宝SDK完成验签与解密。
支付方案(当前开放):
| 方案编码 | 方案名称 | 会员等级 | 价格 | 原价 | 有效天数 |
|---|---|---|---|---|---|
| MONTHLY_PRO | 高级会员·月卡 | PRO | ¥29.90 | ¥59.90 | 30天 |
| YEARLY_PRO | 高级会员·年卡 | PRO | ¥299.90 | ¥599.90 | 365天 |
| ULTRA | 超级会员·连锁专享 | ULTRA | - | - | 敬请期待 |
说明:普通会员(PLUS)免费开放,注册即得,不提供付费套餐。月卡自付款日起算30天,年卡自付款日起算365天。
运营管理:
| 接口 | 说明 |
|---|---|
| POST /api/admin/payment/plans | 创建支付方案 |
| PUT /api/admin/payment/plans/{id} | 更新支付方案 |
| PUT /api/admin/payment/plans/{id}/status | 上架/下架方案 |
| 接口 | 说明 |
|---|---|
| PUT /api/platform-session/{platformCode} | 更新平台会话 |
| GET /api/platform-session/list | 查询平台会话列表 |
| DELETE /api/platform-session/{platformCode} | 删除平台会话 |
| 接口 | 说明 |
|---|---|
| GET /api/search-record/history | 获取用户搜索历史 |
| DELETE /api/search-record/history/{id} | 删除指定搜索记录 |
| DELETE /api/search-record/history | 清空搜索历史 |
| 接口 | 说明 |
|---|---|
| GET /api/watchlist | 获取关注列表 |
| POST /api/watchlist | 添加关注药品 |
| DELETE /api/watchlist/{id} | 取消关注 |
| GET /api/watchlist/stats | 获取关注统计 |
关注信息:药品名称、规格、厂家、关注时最低价、最低价平台、上次查询价格、价格变动、最后检查时间。
| 功能 | 接口 |
|---|---|
| 邀请配置管理 | GET/PUT /api/admin/invite/config |
| 邀请配置列表 | GET /api/admin/invite/configs |
| 手动发放爬虫次数 | POST /api/admin/crawler/grant |
| 查看发放记录 | GET /api/admin/crawler/grants |
| 查看邀请记录 | GET /api/admin/invite/rewards |
| 用户等级调整 | PUT /api/level/user/{userId} |
| 会员发放/调整 | POST /api/admin/membership/grant |
| 会员记录查询 | GET /api/admin/memberships |
| 优惠券发放 | POST /api/coupon/issue |
| 支付方案管理 | POST/PUT /api/admin/payment/plans |
| 平台分布统计 | GET /api/admin/crawler/user-detail |
| 营业执照审核 | GET/POST /api/admin/license/review |
| 用户列表管理 | GET /api/admin/users |
| 用户角色修改 | PUT /api/admin/users/{userId}/role(仅SUPER_ADMIN) |
| 体验配额配置 | GET/POST/PUT/DELETE /api/admin/trial-quota/*(详见下方) |
| 操作审计日志 | GET /api/admin/audit-log/*(详见下方) |
| 邀请转化统计 | GET /api/admin/invite/conversion-stats?userId=1 |
系统对所有关键操作进行审计记录,支持追溯:
运营侧接口:
| 接口 | 说明 |
|---|---|
| GET /api/admin/audit-log | 分页查询审计日志(支持按模块、操作类型、操作人、时间范围、是否敏感筛选) |
| GET /api/admin/audit-log/sensitive | 查询敏感操作日志 |
| GET /api/admin/audit-log/user/{userId} | 查询指定用户的操作历史 |
| GET /api/admin/audit-log/target/{type}/{id} | 查询指定目标对象的操作历史 |
| GET /api/admin/audit-log/stats | 按模块统计操作次数 |
体验配额配置接口:
| 接口 | 说明 |
|---|---|
| GET /api/admin/trial-quota/configs | 查询所有体验配额配置 |
| POST /api/admin/trial-quota/config | 创建体验配额配置 |
| PUT /api/admin/trial-quota/config/{id} | 更新体验配额配置 |
| DELETE /api/admin/trial-quota/config/{id} | 删除体验配额配置 |
| GET /api/trial-quota/active | 用户端查询当前生效的体验配额配置 |
药店采购员打开App → 选择登录方式
├── 短信登录:输入手机号 → 获取验证码 → 输入验证码 → 登录/注册
│ └── 如有邀请码,自动建立邀请关系并发放会员奖励
├── 密码登录:输入手机号/昵称 + 密码 → 验证通过 → 登录
└── 微信登录:扫码 → 授权 → 绑定手机号 → 登录
输入药品名称(如:阿莫西林)
→ 选择比价平台(可多选:药师帮、药帮忙、1药城)
→ 点击"开始比价"
→ 系统逐个平台爬取价格(消耗配额)
→ 展示比价结果表格(按价格从低到高排序)
→ 点击"去采购"跳转到对应平台购买页面
→ 可关注药品,持续追踪价格变动
用户发起比价请求
→ 校验日/月/年配额(会员权益 + 额外配额)
→ 配额充足 → 扣减额外配额(快过期优先)→ 记录日志(含平台信息)
→ 配额不足 → 尝试使用优惠券补充 → 仍不足则拒绝
药店A获取邀请链接 → 复制链接分享到微信群/朋友圈
→ 药店B浏览器打开 → 展示落地页(A的药店名称 + 奖励说明 + 下载链接)
→ B下载注册 → 携带邀请码 → 建立邀请关系 → 发放奖励
├── 邀请人A:获赠1个月高级会员(PRO) + 可选额外爬虫配额(立即到账)
└── 被邀请人B:注册即得普通会员(PLUS),永久免费
→ A查看统计:"已邀请X家药店,Y家注册,累计获得Y个月高级会员"
→ A同时可在邀请页查看邀请贡献的爬虫配额明细
用户查看会员套餐 → 选择方案(月卡/年卡)
→ 选择支付渠道(微信/支付宝)→ 创建订单 → 生成二维码
→ 用户扫码支付 → 第三方回调通知 → 订单状态更新为已支付
→ 自动激活高级会员(PRO) → t_user 会员等级与过期时间实时同步 → 配额立即生效
→ 同等级续期叠加天数,低等级升级切换
用户创建订单(渠道A)→ 切换渠道为B → 生成渠道B二维码
→ 渠道A先支付成功 → 订单标记为PAID,激活会员
→ 渠道B也支付成功 → 回调到达,发现订单已PAID
→ 记录重复支付到 t_payment_order_extra_payment(幂等:同交易号不重复记录)
→ 自动发起原路退款(渠道B原路退回)
→ 退款状态更新:PENDING → SUCCESS/FAILED
退款渠道:
智价云(药店版)采用渐进式多端交付策略:
目标:通过多渠道触达,实现日活20万+的目标。
所有端共享同一套账号体系,云端同步数据:
| 数据类型 | 同步方式 | 更新频率 |
|---|---|---|
| 用户基本信息 | REST API | 实时 |
| 会员权益 | REST API | 实时 |
| 查询历史 | REST API + 本地缓存 | 实时上传,按需下载 |
| 关注列表 | REST API | 实时 |
| 平台账号绑定 | REST API(加密传输) | 实时 |
| 邀请关系 | REST API | 实时 |
智价云(药店版)采用"代码预留扩展 + 运营动态配置"的设计策略:
| 平台 | 代码 | Badge颜色 | 状态 |
|---|---|---|---|
| 药师帮 | yaoshibang | #FF6B00 | ✅ 已启用 |
| 药帮忙 | yaobangmang | #1890FF | ✅ 已启用 |
| 1药城 | yiyaocheng | #52C41A | ✅ 已启用 |
运营可以动态调整以下参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
| 体验天数 | 15天 | 新用户免费体验时长 |
| 每日查询次数 | 20次 | 体验期每日可查询次数 |
| 每月关注品种数 | 199种 | 体验期每月可关注品种数 |
配置类型:
会员权益配置表支持运营动态调整各等级权益加成:
| 权益类型 | 说明 |
|---|---|
| DAILY_QUOTA | 每日爬虫配额加成 |
| MONTHLY_QUOTA | 每月爬虫配额加成 |
| YEARLY_QUOTA | 每年爬虫配额加成 |
| MAX_CONCURRENT | 最大并发数加成 |
运营可通过数据库管理界面调整各会员等级的权益数值,修改后立即生效。
| 维度 | MVP要求 | 生产环境目标 |
|---|---|---|
| 性能 | 接口响应 < 500ms(P95),单次比价 < 3s | 接口响应 < 200ms(P95),单次比价 < 1s |
| 安全 | JWT 认证、三级RBAC、参数校验、AES-256加密 | 增加接口限流、SQL注入防护、慢请求告警 |
| 可用性 | 单体部署,HikariCP 连接池,Redis缓存 | 集群部署、负载均衡 |
| 扩展性 | Maven 多模块架构 | 微服务拆分、事件驱动架构 |
| 兼容性 | JDK 17+,MySQL 8.0+,Windows 10/11 | 容器化部署、云原生支持 |
| 数据准确性 | 价格误差 < 5% | 价格误差 < 1%,实时同步 |
| 目标日活 | 1万+ | 20万+ |
核心功能:
多端扩展准备:
技术优化:
多端扩展:
功能增强:
渠道完善:
智能功能:
企业集成:
架构升级:
生态建设:
| 指标 | 目标值 | 说明 |
|---|---|---|
| 注册用户数 | 1万+ | 药店采购人员 |
| 日活跃用户(DAU) | 1000+ | 日均使用比价的药店数 |
| 日均比价次数 | 5000+ | 所有用户的比价操作总和 |
| 邀请转化率 | 15%+ | 被邀请人注册比例 |
| 用户留存率(7日) | 40%+ | 注册后7天内再次使用 |
| 付费转化率 | 5%+ | 购买会员套餐的比例 |
| 指标 | 目标值 | 说明 |
|---|---|---|
| 注册用户数 | 50万+ | 覆盖全国主要药店 |
| 日活跃用户(DAU) | 20万+ | 核心目标 |
| 日均比价次数 | 100万+ | 高频使用场景 |
| 付费转化率 | 10%+ | 升级为PRO/ULTRA的比例 |
| 平均采购成本降低 | 15%+ | 相比单平台采购 |
📝 说明:本文档会随着项目迭代持续更新,请以最新版本为准。