• SpringBoot+Vue实现前后端分离的宠物医院管理系统


    文末获取源码

    开发语言:Java

    使用框架:spring boot

    前端技术:JavaScript、Vue.js 、css3

    开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code

    数据库:MySQL 5.7/8.0

    数据库管理工具:phpstudy/Navicat

    JDK版本:Java jdk8

    Maven:apache-maven 3.8.1-bin

    目录

    一、前言介绍 

    二、功能需求分析

    2.1用户功能分析

    2.2管理员功能分析

    三、系统前台模块

    3.1系统首页页面

    3.2宠物百科页面

    3.3医生介绍页面 

    3.4医生详情页面 

    3.5预约挂号页面 

    四、管理员功能模块

    4.1用户管理页面

    4.2宠物百科管理页面 

    4.3医生介绍管理页面 

    4.4预约挂号管理页面 

    5.5病历记录管理页面 

    五、医生功能模块

    5.1预约挂号管理页面 

    5.2在线咨询管理页面 

    六、用户功能模块

    6.1预约挂号页面 

    七、部分核心代码

    7.1病历记录管理的关键代码 

    7.2密码修改关键代码

    7.3登录界面关键代码


    一、前言介绍 

    本系统是基于浏览器与服务器架构平台,完整的办公信息处理的欢欢宠物医院管理系统。采用跨平台的JAVA语言开发,利用WEB浏览器就可以使工作人员操作本应用,实现对系统各方位信息的操作,无论大型宠物医院还是小型宠物诊所,均可自建局域网管理,方便办公,减少不必要的成本消耗。该系统沿用MVC思想,利用springboot类的封装进行逻辑控制,利用Java技术完成访问页面的展示,利用MySQL数据库存储数据,最后Tomcat服务器完成网站发布,系统可在多个环境下运行。

    本课题在经过了宠物医院正常办公流程下的需求分析后,完成实现了系统用户、医生介绍、预约挂号、病历记录、医疗器械、在线咨询、维修上报等功能。

    二、功能需求分析

    欢欢宠物医院管理系统主要是为了更加地完善宠物医疗的服务情况,对用户的信息、宠物信息和用户管理、宠物热点管理、会员留言管理、疫苗药物管理、订单列表管理、遗弃宠物管理、宠物饲料情况、招聘员工、志愿者申请等提供了方便的机制。本系统有多类使用者,分别是管理员和用户注册。以下是从这两种用户的角度分别介绍本系统所要实现的功能。

    2.1用户功能分析

    注册:首先检查用户名和邮箱是否存在,如不存在即可进行注册,并将用户输入的密码进行MD5加密,注册成功后提示注册成功,并将用户信息保存到数据库中。

    登录:使用欢欢宠物医院管理系统前是需要用户登录个人账号。

    医生介绍:用户登录宠物医院管理系统首页时,可以浏览医生介绍信息,根据不同地医生可以查看每个不同医生介绍信息等。

    宠物百科:用户可以浏览宠物百科可以自行搜索某样宠物列表相关评论详情。遗弃

    预约挂号:用户可以查看预约信息表的挂号状态,可以根据预约状态发起挂号申请:包括填写订单号、医生工号、医生姓名、科室、挂号费、用户名。

    2.2管理员功能分析

    用户管理:对用户进行管理,用户的注册,包括用户昵称、用户名、用户的宠物信息(宠物类别、宠物性别、年龄等)用户的账号信息:

    医生介绍信息管理:对医生介绍信息进行维护,添加、删除、修改信息。

    预约挂号信息管理:对预约挂号信息进行维护,添加、删除、修改信息。

    病历记录信息管理:对病历记录信息进行维护,添加、删除、修改信息。

    医疗器械信息管理:对医疗器械信息进行维护,添加、删除、修改信息。

    维修上报信息管理:对维修上报信息进行维护,添加、删除、修改信息。

    三、系统前台模块

    3.1系统首页页面

    f8f3a91c1f954c89947fe278bee6d28d.png

    3.2宠物百科页面

    eec9d603753e4c5a82000cc94e22b56a.png

    3.3医生介绍页面 

    b29e63c3ba574a2b98f9bb80e4fd0063.png

    3.4医生详情页面 

    dfad56de8f824efcadd4c761662749ec.png

    3.5预约挂号页面 

    6fedfa1130cb4358ab675f9b088d528b.png

    四、管理员功能模块

    4.1用户管理页面

    44b768c0024f482f823835004f28f8f0.png

    4.2宠物百科管理页面 

    767048b5b33446d08f9e1aa336886e1d.png

    4.3医生介绍管理页面 

    d6c7875b574444e9a4630d2721861978.png

    4.4预约挂号管理页面 

    777408ff92bd430094ae178e75bd04b5.png

    5.5病历记录管理页面 

    de3ad6b2854743a099ca8e2978e8963e.png

    五、医生功能模块

    5.1预约挂号管理页面 

    b664d243b78b4799ae8f3fc7b257ca51.png

    5.2在线咨询管理页面 

    5e695e0ed456413dab1ab135f3f1f1ae.png

    六、用户功能模块

    6.1预约挂号页面 

    295242e82f75403395959b56f842b035.png

    七、部分核心代码

    7.1病历记录管理的关键代码 

    1. @PostMapping("/add")
    2. @Transactional
    3. public Map<String, Object> add(HttpServletRequest request) throws IOException {
    4. service.insert(service.readBody(request.getReader()));
    5. return success(1);
    6. }
    7. @Transactional
    8. public Map<String, Object> addMap(Map<String,Object> map){
    9. service.insert(map);
    10. return success(1);
    11. }
    12. public Map<String,Object> readBody(BufferedReader reader){
    13. BufferedReader br = null;
    14. StringBuilder sb = new StringBuilder("");
    15. try{
    16. br = reader;
    17. String str;
    18. while ((str = br.readLine()) != null){
    19. sb.append(str);
    20. }
    21. br.close();
    22. String json = sb.toString();
    23. return JSONObject.parseObject(json, Map.class);
    24. }catch (IOException e){
    25. e.printStackTrace();
    26. }finally{
    27. if (null != br){
    28. try{
    29. br.close();
    30. }catch (IOException e){
    31. e.printStackTrace();
    32. }
    33. }
    34. }
    35. return null;
    36. }
    37. public void insert(Map<String,Object> body){
    38. StringBuffer sql = new StringBuffer("INSERT INTO ");
    39. sql.append("`").append(table).append("`").append(" (");
    40. for (Map.Entry<String,Object> entry:body.entrySet()){
    41. sql.append("`"+humpToLine(entry.getKey())+"`").append(",");
    42. }
    43. sql.deleteCharAt(sql.length()-1);
    44. sql.append(") VALUES (");
    45. for (Map.Entry<String,Object> entry:body.entrySet()){
    46. Object value = entry.getValue();
    47. if (value instanceof String){
    48. sql.append("'").append(entry.getValue()).append("'").append(",");
    49. }else {
    50. sql.append(entry.getValue()).append(",");
    51. }
    52. }
    53. sql.deleteCharAt(sql.length() - 1);
    54. sql.append(")");
    55. log.info("[{}] - 插入操作:{}",table,sql);
    56. Query query = runCountSql(sql.toString());
    57. query.executeUpdate();
    58. }

    7.2密码修改关键代码

    1. /**
    2. * 修改密码
    3. * @param data
    4. * @param request
    5. * @return
    6. */
    7. @PostMapping("change_password")
    8. public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){
    9. // 根据Token获取UserId
    10. String token = request.getHeader("x-auth-token");
    11. Integer userId = tokenGetUserId(token);
    12. // 根据UserId和旧密码获取用户
    13. Map<String, String> query = new HashMap<>();
    14. String o_password = data.get("o_password");
    15. query.put("user_id" ,String.valueOf(userId));
    16. query.put("password" ,service.encryption(o_password));
    17. Query ret = service.count(query, service.readConfig(request));
    18. List list = ret.getResultList();
    19. Object s = list.get(0);
    20. int count = Integer.parseInt(list.get(0).toString());
    21. if(count > 0){
    22. // 修改密码
    23. Map<String,Object> form = new HashMap<>();
    24. form.put("password",service.encryption(data.get("password")));
    25. service.update(query,service.readConfig(request),form);
    26. return success(1);
    27. }
    28. return error(10000,"密码修改失败!");
    29. }

    7.3登录界面关键代码

    1. /**
    2. * 登录
    3. * @param data
    4. * @param httpServletRequest
    5. * @return
    6. */
    7. @PostMapping("login")
    8. public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
    9. log.info("[执行登录接口]");
    10. String username = data.get("username");
    11. String email = data.get("email");
    12. String phone = data.get("phone");
    13. String password = data.get("password");
    14. List resultList = null;
    15. Map<String, String> map = new HashMap<>();
    16. if(username != null && "".equals(username) == false){
    17. map.put("username", username);
    18. resultList = service.select(map, new HashMap<>()).getResultList();
    19. }
    20. else if(email != null && "".equals(email) == false){
    21. map.put("email", email);
    22. resultList = service.select(map, new HashMap<>()).getResultList();
    23. }
    24. else if(phone != null && "".equals(phone) == false){
    25. map.put("phone", phone);
    26. resultList = service.select(map, new HashMap<>()).getResultList();
    27. }else{
    28. return error(30000, "账号或密码不能为空");
    29. }
    30. if (resultList == null || password == null) {
    31. return error(30000, "账号或密码不能为空");
    32. }
    33. //判断是否有这个用户
    34. if (resultList.size()<=0){
    35. return error(30000,"用户不存在");
    36. }
    37. User byUsername = (User) resultList.get(0);
    38. Map<String, String> groupMap = new HashMap<>();
    39. groupMap.put("name",byUsername.getUserGroup());
    40. List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
    41. if (groupList.size()<1){
    42. return error(30000,"用户组不存在");
    43. }
    44. UserGroup userGroup = (UserGroup) groupList.get(0);
    45. //查询用户审核状态
    46. if (!StringUtils.isEmpty(userGroup.getSourceTable())){
    47. String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
    48. String res = String.valueOf(service.runCountSql(sql).getSingleResult());
    49. if (res==null){
    50. return error(30000,"用户不存在");
    51. }
    52. if (!res.equals("已通过")){
    53. return error(30000,"该用户审核未通过");
    54. }
    55. }
    56. //查询用户状态
    57. if (byUsername.getState()!=1){
    58. return error(30000,"用户非可用状态,不能登录");
    59. }
    60. String md5password = service.encryption(password);
    61. if (byUsername.getPassword().equals(md5password)) {
    62. // 存储Token到数据库
    63. AccessToken accessToken = new AccessToken();
    64. accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
    65. accessToken.setUser_id(byUsername.getUserId());
    66. tokenService.save(accessToken);
    67. // 返回用户信息
    68. JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
    69. user.put("token", accessToken.getToken());
    70. JSONObject ret = new JSONObject();
    71. ret.put("obj",user);
    72. return success(ret);
    73. } else {
    74. return error(30000, "账号或密码不正确");
    75. }
    76. }

  • 相关阅读:
    分享一个uniapp+springboot基于微信小程序的线上维修预约系统 在线维修小程序源码 lw 调试
    Jmeter接口测试参数化方法有哪些?怎么做看好了
    NNI 自动调参使用。
    C++实现telnet动态调试模块:将日志输出到telnet终端,通过telnet终端调用自定义注册的函数
    论文阅读CVPR2022 MaskformerV1和V2
    ElasticSearch (ES)学习之路(六)Springboot2.3.1整合ES 7.6.1
    【图文详解】深入理解 Hbase 架构 Deep Into HBase Architecture
    坐标系转换(仅作记载)
    python二分查找
    APP 页面秒开优化方面总结~
  • 原文地址:https://blog.csdn.net/m0_49113107/article/details/128120595