1. 项目背景与核心价值
实习记录管理一直是高校学生和企业实习管理部门的痛点。传统纸质记录容易丢失,Excel表格又难以实现多方协同。这个小程序系统采用SSM框架+微信小程序的组合方案,完美解决了以下问题:
- 学生端:随时随地手机记录实习日志
- 企业端:实时查看学生考勤与报告
- 校方端:批量导出统计分析报表
我在实际开发中发现,这种轻量级解决方案比传统Web系统更适合实习管理场景。学生打开微信就能使用,无需下载额外APP;企业HR通过后台即可完成考勤核对,大幅降低管理成本。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构解析
2.1 整体技术栈
mermaid复制graph TD
A[微信小程序] -->|HTTPS| B(Spring MVC)
B --> C[MyBatis]
C --> D[MySQL]
D --> E[Redis缓存]
2.2 关键技术选型
-
SSM框架组合
- Spring 4.3.18:控制反转管理Service层
- Spring MVC:RESTful接口设计
- MyBatis 3.4.6:动态SQL生成
-
微信小程序特性
- 使用WXML+WXSS开发视图层
- 通过wx.request调用后端接口
- 利用openid实现自动登录
特别注意:小程序要求所有接口必须HTTPS,开发阶段可用内网穿透工具调试
3. 数据库设计要点
3.1 核心表结构
| 表名 | 字段示例 | 说明 |
|---|---|---|
| t_student | (id, openid, school_id...) | 学生基础信息 |
| t_company | (id, credit_code, admin...) | 企业认证信息 |
| t_daily_report | (id, student_id, content...) | 日报记录 |
3.2 索引优化
sql复制-- 日报表的复合索引
ALTER TABLE t_daily_report
ADD INDEX idx_query (student_id, submit_time);
4. 核心功能实现
4.1 微信登录流程
java复制// 后端登录接口示例
@PostMapping("/login")
public Result login(String code) {
// 调用微信API获取openid
String openid = wechatService.getOpenid(code);
// 查询或创建用户
Student student = studentService.getByOpenid(openid);
if(student == null){
student = new Student();
student.setOpenid(openid);
studentService.create(student);
}
// 生成JWT令牌
String token = JwtUtil.createToken(student.getId());
return Result.success(token);
}
4.2 日报提交功能
小程序端关键代码:
javascript复制Page({
submitReport: function(){
wx.request({
url: 'https://api.example.com/report',
method: 'POST',
data: {
content: this.data.content,
images: this.data.imageUrls
},
success: (res) => {
wx.showToast({ title: '提交成功' })
}
})
}
})
5. 典型问题解决方案
5.1 图片上传限制
问题现象:微信小程序单次只能上传9张图
解决方案:
- 前端分批次上传
- 后端合并图片记录
- 使用七牛云等第三方存储
5.2 数据同步延迟
优化方案:
java复制// 添加Redis缓存
@Cacheable(value = "reports", key = "#studentId")
public List<Report> getRecentReports(Long studentId){
return reportMapper.selectRecent(studentId);
}
6. 部署注意事项
-
HTTPS配置
- 申请免费SSL证书(Let's Encrypt)
- Nginx配置示例:
nginx复制server { listen 443 ssl; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://localhost:8080; } } -
微信小程序配置
- 在「开发设置」添加服务器域名
- 业务域名需要ICP备案
7. 源码结构说明
code复制├── sms-admin # 管理后台
├── sms-api # 后端接口
│ ├── src/main/java
│ │ ├── config # Spring配置
│ │ ├── controller
│ │ ├── service
│ │ └── mapper # MyBatis接口
├── sms-miniprogram # 小程序前端
└── sql # 数据库脚本
8. 扩展建议
-
增加签到定位:
javascript复制wx.getLocation({ type: 'gcj02', success: (res) => { // 提交经纬度到后端 } }) -
接入消息模板:
java复制// 日报提交后通知导师 wechatService.sendTemplateMsg( teacherOpenid, TEMPLATE_ID, formId, data);
这套系统在我校实际运行半年后,实习报告提交率从63%提升至98%。企业HR反馈考勤核对时间缩短了70%,特别适合需要批量管理实习生的院校使用。
