鲜阮® · 会员商城

SHOPPING & REWARDS SYSTEM
甄选好物 · 每一单都赚积分
消费1元=1积分 · 积分抵现(100积分=1元)· 评论分享额外赚积分
全部
山药鲜品
山药面食
山药煎饼
养生粉/蜂蜜
东北山珍
五谷杂粮

💬 最新评价

购物车
结算时自动应用会员折扣,可用积分抵扣现金(最高抵订单30%)
我的订单
订单完成后可发表评价赚取积分(每单+20)
会员中心
积分等级越高,折扣力度越大
系统设计文档
用户购物与积分激励系统 · 模块交互流程 / 数据结构 / 业务规则引擎
交互流程
数据结构
积分规则引擎
关键业务逻辑

① 用户认证流程

访问商城 注册(送100积分) 登录验证 Session保持 忘记密码 → 手机验证 → 重置

② 购物下单流程

浏览/搜索商品 加入购物车 选择数量规格 结算页 自动应用等级折扣 选择积分抵扣 支付 获得消费积分 订单跟踪

③ 积分生命周期

获取(注册/消费/评论/分享) 累计 → 等级提升 使用(抵现) 流水记录(Ledger) 过期清零(24个月)

④ 社交互动流程

订单完成 发表评论+评分(+20分) 展示商品详情页
点击分享 生成分享链接/文案 复制到剪贴板 每日每商品限1次(+10分)
// ========== 核心数据表设计 ========== // 用户表 users(主键 id) { id: STRING // UUID, username: STRING UNIQUE, phone: STRING UNIQUE, passwordHash: STRING, // bcrypt 加密存储 points: INT, // 当前可用积分余额 totalEarned: INT, // 累计获得积分(决定等级) tier: ENUM, // 注册/白银/黄金/铂金/钻石 createdAt: DATETIME } // 订单表 orders(主键 orderNo) { orderNo: STRING UNIQUE, userId: STRING FK→users, items: [{ productId, name, price, qty }], subtotal: DECIMAL, // 商品小计 tierDiscount: DECIMAL, // 等级折扣金额 pointsUsed: INT, // 抵扣积分 pointsDeduct: DECIMAL, // 积分抵扣金额 paid: DECIMAL, // 实付金额 pointsEarned: INT, // 本单获得积分 status: ENUM, // 待发货/已发货/已完成 reviewed: BOOLEAN, // 是否已评价 createdAt: DATETIME } // 积分流水表 points_ledger(对账核心,只增不改) { id: STRING, userId: STRING FK, type: ENUM, // EARN_REGISTER/EARN_ORDER/EARN_REVIEW/EARN_SHARE/SPEND_ORDER/EXPIRE points: INT, // 正数获得,负数消耗 refId: STRING, // 关联订单号/评论ID/商品ID, balanceAfter: INT, // 变动后余额(审计), expireAt: DATETIME, // 获得时间+24个月, createdAt: DATETIME } // 评价表 reviews { id, productId, userId, username, rating: INT 1-5, text, createdAt } // 分享记录表 shares(防刷:userId+productId+日期 唯一索引) { id, userId, productId, shareDate: DATE, createdAt }
// 规则引擎配置 —— 所有规则集中在 RULES 常量,可配置、可扩展 const RULES = { earn: { register: { points: 100, note: '注册赠送' }, consumption: { perYuan: 1, note: '消费1元=1积分' }, review: { points: 20, oncePerOrder: true }, share: { points: 10, oncePerProductPerDay: true } }, spend: { exchangeRate: 100, // 100积分=1元 maxDeductRate: 0.30 // 最高抵扣订单实付30% }, expire: { months: 24 } // 积分有效期24个月 }
积分获取规则
🎁 注册奖励
+100

新用户注册成功即赠100积分,鼓励完成首次登录

💰 消费返积分
1元=1分

按实付金额计算,支付成功即时入账

💬 订单评价
+20

每笔已完成订单限一次,需文字+星级评分

📢 分享商品
+10

每商品每日限1次,防刷机制保障公平

阶梯折扣等级(按累计获得积分)
等级累计积分门槛购物折扣权益说明
🌱 注册会员0基础积分权益
🥈 白银会员50098折解锁积分抵现
🥇 黄金会员2,00095折生日双倍积分
💠 铂金会员5,0009折专属客服+优先发货
💎 钻石会员10,00085折新品优先购+线下活动
// ========== 关键业务逻辑(伪代码) ========== // 1. 结算价格计算链 function calcCheckout(cart, user, pointsToUse) { subtotal = Σ(item.price × item.qty) tier = getTierByTotalEarned(user.totalEarned) discount = subtotal × (1 - tier.rate) // 等级折扣 afterTier = subtotal - discount maxDeduct = afterTier × RULES.spend.maxDeductRate // 抵扣上限30% deduct = min(pointsToUse / 100, maxDeduct, user.points / 100) paid = afterTier - deduct // 实付金额 return { subtotal, discount, deduct, paid } } // 2. 支付成功事务(原子操作) function onPaySuccess(order) { TRANSACTION { order.status = '待发货' user.points -= order.pointsUsed // 扣除抵扣积分 earned = floor(order.paid × 1) // 消费返积分 user.points += earned user.totalEarned += earned // 计入等级 ledger.add(...); checkTierUpgrade(user) // 触发等级重算 } } // 3. 防刷校验 function canShareReward(userId, productId) { return !shares.exists({userId, productId, date: today}) } function canReviewReward(order) { return order.status=='已完成' && !order.reviewed } // 4. 积分过期(定时任务,FIFO先进先出核销) cron daily: 过滤 ledger 中 type=EARN && expireAt < now → 生成 EXPIRE 负向流水,扣减余额,通知用户