1. 项目背景与核心需求
糖尿病健康管理小程序作为毕业设计选题,在当前移动医疗快速发展的背景下具有显著现实意义。根据国际糖尿病联盟数据,我国糖尿病患者人数已超1.4亿,但规范管理率不足50%。这个基于SpringBoot的健康管理小程序正是针对这一痛点,通过信息化手段帮助患者建立科学的自我管理体系。
核心功能需求包括:
- 血糖数据可视化追踪(折线图/柱状图展示)
- 饮食热量计算与营养分析
- 用药提醒与医嘱执行跟踪
- 运动计划个性化推荐
- 并发症风险评估模型
2. 技术架构设计
2.1 整体技术栈选型
采用前后端分离架构:
- 前端:微信小程序(WXML+WXSS)
- 后端:SpringBoot 2.7 + MyBatis Plus
- 数据库:MySQL 8.0
- 辅助工具:ECharts(数据可视化)、Redis(缓存)
选择SpringBoot的原因:
- 自动配置特性简化了SSM框架的整合
- 内嵌Tomcat便于部署
- 丰富的Starter依赖(如spring-boot-starter-data-redis)
2.2 数据库设计要点
主要实体关系设计:
CREATE TABLE `patient` ( `id` bigint NOT NULL AUTO_INCREMENT, `openid` varchar(50) COMMENT '微信唯一标识', `name` varchar(20), `gender` tinyint COMMENT '0女1男', `birth_date` date, `diabetes_type` tinyint COMMENT '1型/2型', PRIMARY KEY (`id`) ) ENGINE=InnoDB; CREATE TABLE `blood_glucose` ( `id` bigint NOT NULL AUTO_INCREMENT, `patient_id` bigint, `value` decimal(4,1) COMMENT 'mmol/L', `measure_time` datetime, `measure_type` tinyint COMMENT '1空腹2餐后', PRIMARY KEY (`id`) ) ENGINE=InnoDB;3. 核心功能实现
3.1 血糖趋势分析
关键技术点:
- 微信小程序端使用ECharts-for-Weixin组件
- 后端采用时间范围查询:
@GetMapping("/glucose/trend") public Result getTrend( @RequestParam String openid, @RequestParam String startDate, @RequestParam String endDate) { List<BloodGlucose> list = glucoseService.query() .eq("patient_id", patientMapper.selectByOpenid(openid)) .between("measure_time", startDate, endDate+" 23:59:59") .list(); return Result.success(list); }3.2 智能饮食建议
实现流程:
- 食物数据库包含常见食材的GI值、热量
- OCR识别菜品图片(调用百度AI接口)
- 营养分析算法:
public DietAdvice analyzeMeal(List<FoodItem> items) { double totalCalories = items.stream() .mapToDouble(f -> f.getCalories()*f.getWeight()/100) .sum(); boolean highGI = items.stream() .anyMatch(f -> f.getGiValue() > 70); return new DietAdvice(totalCalories, highGI); }4. 典型问题解决方案
4.1 微信登录会话保持
常见问题:session_key过期导致用户需要重复登录 解决方案:
- 使用Redis存储会话信息
- 实现自动续期机制
// 登录拦截器示例 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { String token = request.getHeader("Authorization"); if(StringUtils.isEmpty(token)) { throw new BusinessException(401, "未登录"); } String redisKey = "user:token:" + token; if(!redisTemplate.hasKey(redisKey)) { throw new BusinessException(401, "登录已过期"); } // 每次访问续期30分钟 redisTemplate.expire(redisKey, 30, TimeUnit.MINUTES); return true; }4.2 高并发血糖数据上传
优化方案:
- 采用批量插入接口
- 使用MySQL的LOAD DATA INFILE语句
- 添加数据库连接池配置:
spring: datasource: hikari: maximum-pool-size: 20 connection-timeout: 300005. 部署与测试
5.1 多环境配置
通过profile实现:
# application-dev.properties server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/diabetes_dev # application-prod.properties server.port=80 spring.datasource.url=jdbc:mysql://prod-db:3306/diabetes_prod5.2 压力测试指标
使用JMeter测试结果:
- 单节点QPS:1200(血糖查询接口)
- 平均响应时间:<200ms
- 错误率:<0.1%
6. 项目扩展方向
- 对接智能血糖仪硬件(蓝牙协议)
- 增加AI问诊模块(NLP技术)
- 开发家属监管端小程序
- 接入医保支付接口
注意事项:医疗类小程序需特别注意数据安全,建议:
- 敏感数据加密存储(如AES加密)
- 获取用户明确授权
- 定期进行安全审计
这个项目在实现过程中,我发现糖尿病患者最需要的是持续性的数据跟踪而非单次检测。因此在小程序设计时特别强化了趋势分析功能,通过折线图直观展示血糖变化规律,这对患者的自我管理非常有帮助。