作为一名长期从事高校信息化建设的开发者,我深刻感受到大学生心理健康问题日益严峻。传统的心理咨询方式存在时空限制、隐私顾虑和效率低下等问题。基于此,我们团队开发了这套基于SpringBoot和微信小程序的大学生心理健康咨询疏导系统。
这个系统最大的特点是将专业心理咨询服务"装进"学生的手机里。通过微信小程序,学生可以随时随地进行心理测评、预约咨询、查看历史记录等操作。系统后端采用SpringBoot+MyBatisPlus架构,前端使用Vue.js开发管理后台,小程序端则采用原生开发模式。
我们选择SpringBoot作为后端框架主要基于以下考虑:
数据库选用MySQL 8.0,主要因为:
持久层采用MyBatisPlus而非JPA的考虑:
管理后台选择Vue.js+ElementUI的组合:
小程序端采用原生开发而非uni-app等跨平台方案:
系统采用JWT+RBAC的认证方案:
java复制// JWT生成核心代码
public String generateToken(Long userId, String username, String role) {
String token = Jwts.builder()
.setSubject(username)
.claim("userId", userId)
.claim("role", role)
.setExpiration(new Date(System.currentTimeMillis() + 3600*1000))
.signWith(SignatureAlgorithm.HS512, SECRET_KEY)
.compact();
return token;
}
权限控制通过自定义注解实现:
java复制@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RequiresRoles {
String[] value() default {};
}
// 使用示例
@RequiresRoles("admin")
@GetMapping("/users")
public R listUsers() {
// ...
}
测评问卷采用动态配置方案:
json复制{
"title": "抑郁自评量表",
"questions": [
{
"id": 1,
"type": "scale",
"text": "我感到情绪沮丧",
"options": [
{"value": 0, "text": "很少"},
{"value": 1, "text": "有时"},
{"value": 2, "text": "经常"},
{"value": 3, "text": "持续"}
],
"rule": {
"scoreField": "depression",
"weight": 1.2
}
}
],
"resultRules": [
{
"condition": "score < 50",
"level": "正常",
"suggestion": "继续保持良好心态"
}
]
}
咨询系统关键技术点:
java复制// WebSocket消息处理
@OnMessage
public void onMessage(String message, Session session) {
// 敏感词过滤
message = sensitiveFilter.filter(message);
// 存储到数据库
chatRecordService.save(new ChatRecord(
currentUserId,
counselorId,
message,
new Date()
));
// 转发给接收方
session.getBasicRemote().sendText(message);
}
使用ECharts实现多维数据分析:
javascript复制// 心理状态趋势图配置
option = {
tooltip: { trigger: 'axis' },
legend: { data: ['抑郁', '焦虑', '压力'] },
xAxis: { type: 'category', data: ['9月','10月','11月'] },
yAxis: { type: 'value' },
series: [
{ name: '抑郁', type: 'line', data: [23, 25, 19] },
{ name: '焦虑', type: 'line', data: [18, 20, 15] },
{ name: '压力', type: 'line', data: [30, 28, 25] }
]
};
java复制// 分批次插入
List<List<User>> partitions = Lists.partition(userList, 1000);
partitions.forEach(batch -> userService.saveBatch(batch));
java复制WxMpTemplateMessage message = WxMpTemplateMessage.builder()
.toUser(openId)
.templateId("TEMPLATE_ID")
.data(Arrays.asList(
new WxMpTemplateData("first", "咨询提醒"),
new WxMpTemplateData("keyword1", "张老师"),
new WxMpTemplateData("keyword2", "明天14:00")
))
.build();
wxMpService.getTemplateMsgService().sendTemplateMsg(message);
这个项目从立项到上线历时6个月,期间我们不断与心理咨询师沟通调整需求。最大的收获是认识到技术手段必须服务于专业需求,不能为了用技术而用技术。比如最初设计的复杂测评系统在实际使用中发现学生更倾向于简单直观的测试方式,我们及时做了简化调整。