温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片!
1. 项目背景与意义
随着移动互联网的普及和微信生态的快速发展,越来越多的年轻父母希望通过便捷的方式记录宝宝的成长点滴。传统的纸质记录方式存在易丢失、难整理、无法共享等痛点。本项目基于 Java Spring Boot 后端框架,结合微信小程序前端,设计并实现一款宝宝成长记录应用,帮助家长系统化地记录宝宝的体重、身高、照片、疫苗接种、成长里程碑等信息,并支持家庭成员间的数据共享与互动。
本项目的意义在于:一方面为家长提供便捷、直观的宝宝成长管理工具;另一方面通过技术实践,完整覆盖微信小程序与 Spring Boot 后端交互的典型开发流程,具备较强的工程参考价值。
2. 系统需求分析
2.1 功能需求
本系统面向家长用户,核心功能模块包括:
- 用户模块:微信授权登录、家庭成员绑定、宝宝档案管理。
- 成长记录模块:记录宝宝身高、体重、头围等生长数据,支持曲线图展示。
- 照片时光轴模块:按时间轴上传和浏览宝宝照片,支持相册分类。
- 疫苗接种模块:记录疫苗接种时间、疫苗名称、接种机构,支持到期提醒。
- 成长里程碑模块:记录宝宝翻身、爬行、走路、说话等关键成长节点。
- 健康提醒模块:基于生长数据和疫苗计划,生成健康提醒通知。
2.2 非功能需求
- 性能:接口平均响应时间不超过 500ms,支持并发访问。
- 安全:用户数据加密存储,接口鉴权,防止越权访问。
- 可扩展性:模块化设计,便于后续功能扩展。
- 易用性:小程序界面简洁友好,操作路径短。
3. 系统总体设计
3.1 系统架构设计
系统采用前后端分离架构,整体分为三层:
- 表现层:微信小程序,负责界面展示和用户交互。
- 业务层:Spring Boot 后端服务,提供 RESTful API 接口。
- 数据层:MySQL 数据库存储业务数据,Redis 缓存热点数据。
系统整体架构如下图所示:
flowchart TD A[微信小程序前端] -->|HTTPS 请求| B[Nginx 反向代理] B --> C[Spring Boot 后端服务] C --> D[MySQL 数据库] C --> E[Redis 缓存] C --> F[微信开放接口] F -->|登录凭证校验| C3.2 技术选型
| 层次 | 技术 | 说明 |
|---|---|---|
| 前端 | 微信小程序 | 原生小程序框架,WXML + WXSS + JS |
| 后端 | Spring Boot 2.7 | 核心业务框架 |
| 持久层 | MyBatis-Plus | ORM 框架,简化数据库操作 |
| 数据库 | MySQL 8.0 | 业务数据存储 |
| 缓存 | Redis | 会话缓存与热点数据 |
| 鉴权 | Spring Security + JWT | 接口安全认证 |
| 文件存储 | 阿里云 OSS | 宝宝照片等文件存储 |
3.3 数据库设计
系统核心数据表包括:
- user:用户表,存储微信用户信息。
- baby:宝宝档案表,存储宝宝基本信息。
- family_member:家庭成员绑定表,关联用户与宝宝。
- growth_record:生长记录表,存储身高、体重等数据。
- photo:照片表,存储照片 URL 和拍摄时间。
- vaccination:疫苗接种记录表。
- milestone:成长里程碑表。
以生长记录表为例,其核心字段设计如下:
CREATE TABLE growth_record ( id BIGINT PRIMARY KEY AUTO_INCREMENT, baby_id BIGINT NOT NULL COMMENT '宝宝ID', record_date DATE NOT NULL COMMENT '记录日期', height DECIMAL(5,2) COMMENT '身高(cm)', weight DECIMAL(5,2) COMMENT '体重(kg)', head_circumference DECIMAL(5,2) COMMENT '头围(cm)', remark VARCHAR(255) COMMENT '备注', create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_baby_date (baby_id, record_date) ) COMMENT '生长记录表';4. 核心功能设计与实现
4.1 微信登录与鉴权
用户首次进入小程序时,前端调用wx.login获取临时登录凭证 code,后端通过微信开放接口换取 openid 和 session_key,完成用户注册或登录,并签发 JWT Token 供后续请求鉴权使用。
@RestController @RequestMapping("/api/auth") public class AuthController { @Autowired private AuthService authService; @PostMapping("/login") public Result<LoginResponse> login(@RequestBody LoginRequest request) { String openid = authService.code2Session(request.getCode()); User user = authService.findOrCreateUser(openid); String token = authService.generateToken(user.getId()); return Result.success(new LoginResponse(token, user)); } }4.2 生长记录管理
家长可以按日期记录宝宝的身高、体重和头围数据,系统自动生成生长曲线图,帮助家长直观了解宝宝的生长发育趋势。
@Service public class GrowthRecordService { @Autowired private GrowthRecordMapper growthRecordMapper; public PageResult<GrowthRecord> listByBaby(Long babyId, int page, int size) { Page<GrowthRecord> pageParam = new Page<>(page, size); LambdaQueryWrapper<GrowthRecord> wrapper = new LambdaQueryWrapper<>() .eq(GrowthRecord::getBabyId, babyId) .orderByDesc(GrowthRecord::getRecordDate); Page<GrowthRecord> result = growthRecordMapper.selectPage(pageParam, wrapper); return new PageResult<>(result.getRecords(), result.getTotal()); } public void addRecord(GrowthRecord record) { growthRecordMapper.insert(record); } }4.3 疫苗接种提醒
系统内置国家免疫规划疫苗程序表,家长录入接种记录后,系统根据疫苗间隔时间自动计算下一针接种日期,并通过微信订阅消息发送提醒。
@Component public class VaccinationReminderTask { @Autowired private VaccinationService vaccinationService; @Autowired private WxMessageService wxMessageService; @Scheduled(cron = "0 0 9 * * ?") public void sendReminder() { List<Vaccination> upcoming = vaccinationService.findUpcomingVaccinations(7); for (Vaccination item : upcoming) { wxMessageService.sendVaccineReminder(item); } } }4.4 照片时光轴
家长上传宝宝照片后,系统按拍摄时间自动归档到时光轴,支持按月浏览和分享给家庭成员。照片上传采用阿里云 OSS 直传方案,减少服务器带宽压力。
@RestController @RequestMapping("/api/photo") public class PhotoController { @Autowired private OssService ossService; @Autowired private PhotoService photoService; @PostMapping("/upload") public Result<String> upload(@RequestParam("file") MultipartFile file) { String url = ossService.upload(file); return Result.success(url); } @GetMapping("/timeline") public Result<List<PhotoVO>> timeline(@RequestParam Long babyId, @RequestParam String month) { return Result.success(photoService.getTimeline(babyId, month)); } }5. 系统测试
5.1 测试环境
系统测试在以下环境中进行:
- 后端:Spring Boot 2.7,JDK 1.8,MySQL 8.0,Redis 6.0。
- 前端:微信开发者工具,基础库版本 2.30.0 以上。
- 测试工具:Postman 进行接口测试,JUnit 进行单元测试。
5.2 功能测试
对核心功能模块进行了完整的测试用例设计,覆盖正常流程和异常流程。以生长记录模块为例,主要测试用例包括:
| 编号 | 测试项 | 预期结果 |
|---|---|---|
| TC01 | 新增生长记录 | 数据保存成功,返回记录 ID |
| TC02 | 查询生长记录列表 | 按日期倒序返回分页数据 |
| TC03 | 删除生长记录 | 数据删除成功,列表同步更新 |
| TC04 | 未登录访问接口 | 返回 401 未授权错误 |
| TC05 | 访问他人宝宝数据 | 返回 403 禁止访问错误 |
5.3 性能测试
使用 JMeter 对核心接口进行压力测试,在 200 并发用户场景下,接口平均响应时间为 320ms,吞吐量为 580 次/秒,满足设计指标要求。
6. 总结与展望
本文设计并实现了一款基于 Java Spring Boot 和微信小程序的宝宝成长记录系统。系统覆盖了用户登录鉴权、宝宝档案管理、生长记录、照片时光轴、疫苗接种提醒和成长里程碑等核心功能,并通过了功能测试和性能测试验证。系统采用前后端分离架构,模块化设计,具备良好的可扩展性和可维护性。
后续可以从以下方向继续优化:一是引入宝宝发育评估算法,基于 WHO 生长标准自动评估发育状况;二是增加 AI 智能问答功能,为家长提供育儿知识咨询;三是完善家庭共享与社交互动功能,支持多家庭成员协同记录和亲友互动。