研究成果

EaborH

系统总流程图

登录界面

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.