# 研究成果 | Eabor
Have a good day!
Author: EaborH
Keywords: Hexo Theme Redefine

## I'm on my way...

# 研究成果

EaborH
2025-05-10 13:59:20 2025-05-10 13:59:20 Created 2025-05-10 14:05:16 2025-05-10 14:05:16 Updated

- 毕业设计

系统总流程图
登录界面

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53

    package xyz.eabor.filter;

    import jakarta.servlet.*;
    import jakarta.servlet.annotation.WebFilter;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    import lombok.extern.slf4j.Slf4j;
    import xyz.eabor.utils.JwtUtils;

    import java.io.IOException;

    @Slf4j
    @WebFilter(urlPatterns = "/*")
    public class TokenFilter implements Filter {
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            HttpServletResponse response = (HttpServletResponse) servletResponse;

            //1. 获取到请求路径
            String requestURI = request.getRequestURI(); // /employee/login

            //2. 判断是否是登录请求, 如果路径中包含 /login, 说明是登录操作, 放行
            if (requestURI.contains("/login")){
                log.info("登录请求, 放行");
                filterChain.doFilter(request, response);
                return;
            }

            //3. 获取请求头中的token
            String token = request.getHeader("token");

            //4. 判断token是否存在, 如果不存在, 说明用户没有登录, 返回错误信息(响应401状态码)
            if (token == null || token.isEmpty()){
                log.info("令牌为空, 响应401");
                response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
                return;
            }

            //5. 如果token存在, 校验令牌, 如果校验失败 -> 返回错误信息(响应401状态码)
            try {
                JwtUtils.parseToken(token);
            } catch (Exception e) {
                log.info("令牌非法, 响应401");
                response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
                return;
            }

            //6. 校验通过, 放行
            log.info("令牌合法, 放行");
            filterChain.doFilter(request, response);
        }
    }

登录模块流程图
系统首页以及布局
科室管理
以科室管理为例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204

    // bean
    package xyz.eabor.pojo;

    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;

    import java.time.LocalDateTime;

    @Data
    @NoArgsConstructor
    @AllArgsConstructor

    public class Dept {
        private Integer id;
        private String name;
        private LocalDateTime createTime;
        private LocalDateTime updateTime;
    }
    -------------------------------------------------
    // controller
    package xyz.eabor.controller;

    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    import xyz.eabor.pojo.Dept;
    import xyz.eabor.pojo.Result;
    import xyz.eabor.service.DeptService;

    import java.util.List;

    @Slf4j
    @RequestMapping("/depts")
    @RestController
    public class DeptController {

        private final DeptService deptService;

        public DeptController(DeptService deptService) {
            this.deptService = deptService;
        }

        /**
         * 查询部门列表
         */
        @GetMapping
        public Result list() {
            log.info("查询全部部门数据");
            List<Dept> deptList = deptService.findAll();
            return Result.success(deptList);
        }

        /**
         * 删除部门 - 省略@RequestParam (前端传递的请求参数名与服务端方法形参名一致) [推荐]
         */    @DeleteMapping
        public Result delete(Integer id) {
            log.info("根据ID删除部门: {}", id);
            deptService.deleteById(id);
            return Result.success();
        }

        /**
         * 新增部门
         */
        @PostMapping
        public Result add(@RequestBody Dept dept) {
            log.info("新增部门:{}", dept);
            deptService.add(dept);
            return Result.success();
        }

        /**
         * 根据ID查询部门
         */
        @GetMapping("/{id}")
        public Result getInfo(@PathVariable Integer id){
            log.info("根据ID查询部门: {}", id);
            Dept dept = deptService.getById(id);
            return Result.success(dept);
        }

        /**
         * 修改部门
         */
        @PutMapping
        public Result update(@RequestBody Dept dept){
            log.info("修改部门:{}", dept);
            deptService.update(dept);
            return Result.success();
        }
    }
    ----------------------------------------------

    // serviceimpl
    package xyz.eabor.service.impl;

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import xyz.eabor.exception.BusinessException;
    import xyz.eabor.mapper.DeptMapper;
    import xyz.eabor.mapper.EmpMapper;
    import xyz.eabor.pojo.Dept;
    import xyz.eabor.service.DeptService;

    import java.time.LocalDateTime;
    import java.util.List;

    @Service
    public class DeptServiceImpl implements DeptService{

        private final DeptMapper deptMapper;

        public DeptServiceImpl(DeptMapper deptMapper, EmpMapper empMapper) {
            this.deptMapper = deptMapper;
            this.empMapper = empMapper;
        }

        private final EmpMapper empMapper;

        @Override
        public List<Dept> findAll() {
            return deptMapper.findAll();
        }

        @Override
        public void deleteById(Integer id) {
            // 1. 判断部门下是否有员工， 如果有， 需要提示错误信息
            Integer count = empMapper.countByDeptId(id);
            if(count > 0){
                throw new BusinessException("部门下有员工， 不能删除");
            }

            // 2. 如果没有员工， 可以删除部门
            deptMapper.deleteById(id);
        }

        @Override
        public void add(Dept dept) {
            // 1. 补全基础属性 - createTime, updateTime        dept.setCreateTime(LocalDateTime.now());
            dept.setUpdateTime(LocalDateTime.now());

            // 2. 调用Mapper接口方法插入数据
            deptMapper.insert(dept);
        }

        @Override
        public Dept getById(Integer id) {
            return deptMapper.getById(id);
        }

        @Override
        public void update(Dept dept) {
            //1. 补全基础属性-updateTime
            dept.setUpdateTime(LocalDateTime.now());

            //2. 调用Mapper接口方法更新部门
            deptMapper.update(dept);
        }
    }
    -----------------------------------------------
    // mapper
    package xyz.eabor.mapper;

    import org.apache.ibatis.annotations.*;
    import xyz.eabor.pojo.Dept;

    import java.util.List;

    @Mapper
    public interface DeptMapper {
        /**
         * 查询所有部门数据
         */
        @Select("select id, name, create_time, update_time from dept order by update_time desc")
        List<Dept> findAll();

        /**
         * 根据ID删除部门
         */
        @Delete("delete from dept where id = #{id}")
        void deleteById(Integer id);

        /**
         * 新增部门
         */
        @Insert("insert into dept(name, create_time, update_time) values(#{name},#{createTime},#{updateTime})")
        void insert(Dept dept);

        /**
         * 根据ID查询部门数据
         */
        @Select("select id, name, create_time, update_time from dept where id = #{id}")
        Dept getById(Integer id);

        /**
         * 更新部门
         */
        @Update("update dept set name = #{name} , update_time = #{updateTime} where id = #{id}")
        void update(Dept dept);
    }

流程图
员工管理
病房管理
病人管理
病人数据
重要性分析
预测结果展示

# 炎性指标预测系统 - 前后端分离系统接口文档

## 部门管理

### 1 部门列表查询

#### 1.1 基本信息

请求路径：`/depts`
请求方式：`GET`
接口描述：该接口用于部门列表数据查询

#### 1.1 请求参数

无

#### 1.1 响应数据

参数格式：`application/json`
参数说明：

参数名 | 类型 | 是否必须 |
--- | --- | --- | ---
code | number | 必须 | 响应码，1 代表成功，0 代表失败
msg | string | 非必须 | 提示信息
data | object[ ] | 非必须 | 返回的数据
- id | number | 非必须 | id
- name | string | 非必须 | 部门名称
- createTime | string | 非必须 | 创建时间
- updateTime | string | 非必须 | 修改时间
响应数据样例： |  |  |

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

    {
      "code": 1,
      "msg": "success",
      "data": [
        {
          "id": 1,
          "name": "神经内科",
          "createTime": "2024-09-01T23:06:29",
          "updateTime": "2024-09-01T23:06:29"
        },
        {
          "id": 2,
          "name": "神经外科",
          "createTime": "2024-09-01T23:06:29",
          "updateTime": "2024-09-01T23:06:29"
        }
      ]
    }

### 2 删除部门

#### 2.1 基本信息

请求路径：`/depts`
请求方式：`DELETE`
接口描述：该接口用于根据ID删除部门数据

#### 2.2 请求参数

参数说明：

参数名 | 类型 | 是否必须 | 备注
--- | --- | --- | ---
id | number | 必须 | 部门ID
请求参数样例： |  |  |
`/depts?id=1` |  |  |
`/depts?id=2` |  |  |

#### 2.3 响应数据

参数名 | 类型 | 是否必须 | 备注
--- | --- | --- | ---
code | number | 必须 | 响应码，1 代表成功，0 代表失败
msg | string | 非必须 | 提示信息
data | object | 非必须 | 返回的数据
响应数据样例： |  |  |

    1
    2
    3
    4
    5

    {
        "code":1,
        "msg":"success",
        "data":null
    }

### 3 添加部门

#### 3.1 基本信息

请求路径：`/depts`
请求方式：`POST`
接口描述：该接口用于添加部门数据

#### 3.2 请求参数

格式：`application/json`
参数说明：

参数名 | 类型 | 是否必须 | 备注
--- | --- | --- | ---
name | string | 必须 | 部门名称
请求参数样例： |  |  |

    1
    2
    3

    {
        "name": "教研部"
    }

#### 3.3 响应数据

参数格式：`application/json`
参数说明：

参数名 | 类型 | 是否必须 | 备注
--- | --- | --- | ---
code | number | 必须 | 响应码，1 代表成功，0 代表失败
msg | string | 非必须 | 提示信息
data | object | 非必须 | 返回的数据
响应数据样例： |  |  |

    1
    2
    3
    4
    5

    {
        "code":1,
        "msg":"success",
        "data":null
    }

### 4 根据ID查询

#### 4.1 基本信息

请求路径：`/depts/{id}`
请求方式：`GET`
接口描述：该接口用于根据ID查询部门数据

#### 4.2 请求参数

参数格式：路径参数
参数说明：

参数名 | 类型 | 是否必须 | 备注
--- | --- | --- | ---
id | number | 必须 | 部门ID
请求参数样例： |  |  |
`/depts/1` |  |  |
`/depts/3` |  |  |

#### 4.3 响应数据

参数格式：`application/json`
参数说明：

参数名 | 类型 | 是否必须 | 备注
--- | --- | --- | ---
code | number | 必须 | 响应码，1 代表成功，0 代表失败
msg | string | 非必须 | 提示信息
data | object | 非必须 | 返回的数据
- id | number | 非必须 | id
- name | string | 非必须 | 部门名称
- createTime | string | 非必须 | 创建时间
- updateTime | string | 非必须 | 修改时间
响应数据样例： |  |  |

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    {
      "code": 1,
      "msg": "success",
      "data": {
        "id": 1,
        "name": "妇产科",
        "createTime": "20224-09-01T23:06:29",
        "updateTime": "2024-09-01T23:06:29"
      }
    }

### 5 修改部门

#### 5.1 基本信息

请求路径：`/depts`
请求方式：`PUT`
接口描述：该接口用于修改部门数据

#### 5.2 请求参数

格式：`application/json`
参数说明：

参数名 | 类型 | 是否必须 | 备注
--- | --- | --- | ---
id | number | 必须 | 部门ID
name | string | 必须 | 部门名称
请求参数样例： |  |  |

    1
    2
    3
    4

    {
        "id": 1,
        "name": "教研部"
    }

#### 5.3响应数据

参数格式：`application/json`
参数说明：

参数名 | 类型 | 是否必须 | 备注
--- | --- | --- | ---
code | number | 必须 | 响应码，1 代表成功，0 代表失败
msg | string | 非必须 | 提示信息
data | object | 非必须 | 返回的数据
响应数据样例： |  |  |

    1
    2
    3
    4
    5

    {
        "code":1,
        "msg":"success",
        "data":null
    }

- Title: 研究成果
- Author: EaborH
- Created at : 2025-05-10 13:59:20
- Updated at : 2025-05-10 14:05:16
- Link: https://eabor.xyz/2025/05/10/研究成果/
- License: This work is licensed under CC BY-NC-SA 4.0.

- #毕业设计

The Eg. for CET Prev posts
JAVA网络编程 Next posts