基于SSM的个人健康信息管理系统
系统描述
随着科学技术快速进步,在提升自身竞争力方面也取得了显著成果;对于个人健康管理领域同样不容忽视这一重要议题,在经历了网络技术快速发展后带来了根本性的转变。健康管理变得更加便捷高效的同时也显著降低了服务管理的复杂性,并增强了操作灵活性。基于个性化需求设计的专业平台特别强调人机协作和流程优化,在这一平台上管理人员能够充分激发积极性和主动性以实现最佳工作状态
本系统的数据库采用MySQL技术,并基于SSM技术进行开发。在设计阶段,确保实现了良好的可读性和易于理解的特性;同时,在实际应用中具备较高的有效性和广泛的适用性。此外,在代码结构上实现了良好的扩展性和便于后期维护的特点;界面设计直观且美观。
技术描述
文章末尾获取源码
开发语言:Java
技术框架:SSM
前端语言:Vue\HTML
持久层框架:Mybatis
服务器:Tomcat7\8\9\10
数据库:MySQL5.7以上
项目管理工具:Maven
项目开发工具:IDEA\Eclipse
系统展示
管理员功能模块
系统管理员登录流程如下:首先按照要求录入用户名、密码以及相应的角色信息;完成所有字段的填入后点击提交按钮确认录入;随后系统会自动跳转至个人健康信息管理界面
系统管理员 login 流程如下:
- 按照要求录入用户名;
- 录入密码;
- 录入角色;
- 完成所有字段填入后点击提交按钮确认;
- 系统跳转至个人健康信息管理平台

管理员通过访问个人健康管理平台可查阅基础信息、个人信息档案以及相关功能模块的具体内容

在医师管理模块中,在医师管理页面录入医生信息时需提供工号作为唯一标识符以及密码作为安全验证措施,并可根据具体需求对医师信息详情进行更新维护。同时支持对医生记录的修改删除操作。

在 diet record management 页面中提供 account, name, category, dietary intake, calorie intake, records 等相关信息,并因需可对 diet record management 进行 detailed information 查看, modification 删除或 detailed content 检索等操作

在该模块中可查阅用户信息如账号名称个人运动项目以及相关数据统计结果在该页面可执行以下操作:查阅详细信息修改相关数据删除条目查询相关信息

在健康信息管理页面上提供多样化的功能选项,在线查询用户的账号信息及其个人基础数据如姓名性别年龄体重腰围血压心率等关键指标,并根据个人需求完成数据维护维护记录查询删除或编辑等功能
在健康的评估管理界面中,用户可以在健康评估管理模块浏览与账户相关的各项数据项.根据需求,在此系统中完成具体信息的调取以及数据更新操作.

此页面为轮转图片管理界面。管理员可通过新建操作完成首页轮转图片的添加、编辑以及删除等操作。此外,在此页面上还可对已上传的图片执行相应的修改操作。

用户功能模块
个人用户完成注册并录入用户名、密码以及身份角色信息,在确认无误的情况下点击登录按钮即可顺利进入个人健康信息管理平台
个人用户完成注册并录入用户名、密码以及身份角色信息,在确认无误的情况下点击登录按钮即可顺利进入个人健康信息管理平台

用户可以在个人健康信息管理系统中查看主页、个人信息中心以及健康管理模块中的详细数据和报告。

采用运动数据管理系统,在该系统中能够浏览账号信息、姓名资料以及各项运动数据的具体数值和相关参数。

在健康信息管理页面中可查询账号资料包括账号名姓名性别年龄体重腰围血压心率及其他更新记录等信息用户可以根据个人需求对所获取的信息进行删除或者进一步查看详细资料

在健康管理平台中可以看到用户的个人账号信息包括但不限于账号名称、姓名地址以及相关的文件资料等,并支持用户根据个人需求选择是否保留相关健康档案资料并对其存储状态进行实时监控

前台首页功能模块
属于个人健康管理的一部分,在这一部分中包含主页面、专业科普内容以及公告栏等模块功能

访问网站或应用的认证流程包括新用户创建个人资料的过程。当新用户完成注册时系统自动收集账号密码姓名性别身高体重年龄联系方式电子邮箱地址以及身份证号码等关键信息以完成账户建立并开始使用服务的过程中填写必要的个人信息以完成注册流程


健康资讯,在健康资讯页面可以填写类型、日期等信息进行提交

在个人中心页面中,请您录入您的账号信息(如账号名和密码)、个人信息(如姓名、性别)、身体数据(如身高和体重)、个人资料(如年龄和联系方式)等以便完成设置操作。请您注意注销账户前确保所有信息准确无误。

我的收藏,在我的收藏页面可以填写收藏名称等信息进行收藏

医师功能模块
医生登录系统,在注册并设置身份信息时,在完成所有必要信息提交后即可接入个人健康管理平台

医生登录后进入个人健康管理平台可以浏览主页面、个人信息专区以及专业的饮食日志管理和运动轨迹服务等内容。

代码实现:
跨域实现
package com.interceptor;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import com.annotation.IgnoreAuth;
import com.entity.EIException;
import com.entity.TokenEntity;
import com.service.TokenService;
import com.utils.R;
/** * 权限(Token)验证
*/
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {
public static final String LOGIN_TOKEN_KEY = "Token";
@Autowired
private TokenService tokenService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//支持跨域请求
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
IgnoreAuth annotation;
if (handler instanceof HandlerMethod) {
annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);
} else {
return true;
}
//从header中获取token
String token = request.getHeader(LOGIN_TOKEN_KEY);
/** * 不需要验证权限的方法直接放过
*/
if(annotation!=null) {
return true;
}
TokenEntity tokenEntity = null;
if(StringUtils.isNotBlank(token)) {
tokenEntity = tokenService.getTokenEntity(token);
}
if(tokenEntity != null) {
request.getSession().setAttribute("userId", tokenEntity.getUserid());
request.getSession().setAttribute("role", tokenEntity.getRole());
request.getSession().setAttribute("tableName", tokenEntity.getTablename());
request.getSession().setAttribute("username", tokenEntity.getUsername());
return true;
}
PrintWriter writer = null;
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
try {
writer = response.getWriter();
writer.print(JSONObject.toJSONString(R.error(401, "请先登录")));
} finally {
if(writer != null){
writer.close();
}
}
// throw new EIException("请先登录", 401);
return false;
}
}
代码解读
登录实现
package com.controller;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;
/** * 登录相关
*/
@RequestMapping("users")
@RestController
public class UserController{
@Autowired
private UserService userService;
@Autowired
private TokenService tokenService;
/** * 登录
*/
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null || !user.getPassword().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
return R.ok().put("token", token);
}
/** * 注册
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/** * 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/** * 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null) {
return R.error("账号不存在");
}
user.setPassword("123456");
userService.update(user,null);
return R.ok("密码已重置为:123456");
}
/** * 列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
return R.ok().put("data", page);
}
/** * 列表
*/
@RequestMapping("/list")
public R list( UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
ew.allEq(MPUtil.allEQMapPre( user, "user"));
return R.ok().put("data", userService.selectListView(ew));
}
/** * 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/** * 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/** * 保存
*/
@PostMapping("/save")
public R save(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/** * 修改
*/
@RequestMapping("/update")
public R update(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));
if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
return R.error("用户名已存在。");
}
userService.updateById(user);//全部更新
return R.ok();
}
/** * 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
userService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
代码解读
