面向单品牌多门店实体经营场景的会员管理系统,一套后端同时支撑微信小程序端(会员自助)与 WEB 管理端(收银与运营)。
小程序端(14 个页面):会员资产总览、60 秒动态刷新核销码、在线充值、钱包与余额流水、卡券包、消费账单、等级权益、门店导航、推荐有礼、生日礼、消息中心与绑定手机号。
WEB 管理端(22 个页面):收银台(三区布局、Pad 适配、挂单/取单、现金/储值/组合支付与结算打印)、会员 360°、会员导入导出、对账中心、券模板与发券向导、等级规则可视化构造器、推荐有礼、生日礼、消息中心、门店与员工管理、业绩排行、经营看板(ECharts)、RBAC 权限与操作日志、支付单管理。
核心机制:会员资产按「本金 / 赠送 / 积分 / 成长值」四账分离——赠送不可退、消费优先扣赠送、赠送抵扣不计积分,从模型上堵住充值套现与刷等级;每笔资产变动写不可变流水(含变更前后快照),并配 T+1 自动对账校验余额恒等于流水合计。营销侧覆盖券模板、定向与条件批量发券、券锁定与并发安全核销、次卡售卡核销、推荐有礼、生日礼与消息中心。支付做成可插拔渠道(IPayChannel 抽象),当前 Mock 渠道已跑通全链路,微信支付 APIv3 骨架(请求签名 / 回调验签解密 / 平台证书自动下载 / 就绪自检)已就绪,补齐商户参数即可真实收款,业务代码与数据库零改动。
本项目为个人独立完成的练习作品,未曾商用,业务数据均为自检脚本生成的测试数据。
技术栈:Java 21 + Spring Boot 3.2 + Spring Security(JWT 双端鉴权) + MyBatis-Plus + Flyway + MapStruct + springdoc-openapi;WEB 端 Vue 3.4 + Vite 5 + TypeScript + Element Plus + Pinia + ECharts;小程序端 uni-app(Vue 3 + Vite + TS)+ uview-plus + Pinia;数据库 MySQL 8.0.35(InnoDB/utf8mb4)+ Redis 7;Docker Compose 部署。后端约 217 个 Java 文件 / 2.4 万行,管理端 41 个 Vue / 1.2 万行。
架构:Spring Boot 模块化单体,按会员中心 / 资产账务 / 收银结算 / 营销卡券·次卡 / 等级积分 / 看板报表 / 系统管理 / 支付 划分模块;所有资产变动强制走唯一入口 AccountService,保证流水与余额天然同事务一致;收费主链路与营销解耦,积分、等级、消息、推荐通过事务提交后事件(afterCommit)异步联动,失败可重试。
数据模型:Flyway V1~V9 版本化迁移建 51 张表(含 ShedLock 锁表与迁移历史表)——四账账户表带乐观锁版本号、余额/积分/成长值流水表只增不改、积分批次表支撑 FIFO 过期语义、券实例与模板分离、支付单与回调原文日志分表。
一致性设计:三层幂等(Redis 幂等键 → 数据库唯一索引 → SELECT FOR UPDATE + 乐观锁),余额扣减在 SQL 层用 WHERE balance >= ? 双重防超扣;每日对账任务做 10 项校验(余额、赠送、积分批次、成长值、订单已付金额与支付流水)并输出差异告警与调账留痕;多实例用 ShedLock 保护 14 个定时任务,接口层对 34 个端点限流,操作审计默认全记并显式声明豁免。
工程质量:12 套端到端自检脚本共 564 项断言(Caffeine 与 Redis 两种缓存后端各跑一遍),并加了断言数哨兵防止断言被静默删改;配套 15 份设计与实施文档记录接口清单、数据模型、核心业务流程与每轮迭代的缺陷复盘。