项目简述:
设计一个考勤打卡系统,支持模拟用户简单考勤打卡。同时,支持管理员配置上下班时间(不涉及打卡地点信息),查阅各用户考勤打卡明细及考勤异常情况。
功能界面:
1、用户界面:
PC端,模拟用户登录、考勤打卡。
2、管理员界面:
PC端,模拟管理员登录,支持配置上下班时间、查阅用户考勤信息、考勤异常情况。
使用的后端技术为SpringBoot + Nacos 数据库设计为USE attendance_system;
CREATE TABLE user (
user_id INT PRIMARY KEY,
name VARCHAR(50),
password VARCHAR(50),
department VARCHAR(50),
create_time DATETIME,
update_time DATETIME
);
CREATE TABLE admin (
adm_id INT PRIMARY KEY,
name VARCHAR(50),
password VARCHAR(50),
create_time DATETIME,
update_time DATETIME
);
CREATE TABLE attendance (
att_id INT PRIMARY KEY,
user_id INT,
punch_time DATETIME,
punch_type ENUM('上班', '下班', '外勤'),
punch_address VARCHAR(100),
create_time DATETIME,
update_time DATETIME,
FOREIGN KEY (user_id) REFERENCES user(user_id)
); 请帮我完成后端API设计包括设计API接口,包括用户登录、管理员登录、获取上下班时间、获取用户打卡记录、打卡等。实现接口授权、参数验证、异常处理等。请给出具体Java代码和maven依赖
后端API设计:
用户登录API接口
接口地址:/api/user/login
请求方式:POST
请求参数:
{
"username": "用户名",
"password": "密码"
}
返回参数:
{
"code": 0,
"message": "登录成功",
"data": {
"userId": 1,
"username": "用户名",
"department": "部门名称"
}
}
Java代码:
@RestController
@RequestMapping("/api/user")
public class UserController {
@PostMapping("/login")
public Result login(@RequestBody UserRequest request) {
// 用户名密码验证
// 返回用户信息
return Result.success(user);
}
}
管理员登录API接口
接口地址:/api/admin/login
请求方式:POST
请求参数:
{
"username": "用户名",
"password": "密码"
}
返回参数:
{
"code": 0,
"message": "登录成功",
"data": {
"adminId": 1,
"username": "用户名"
}
}
Java代码:
@RestController
@RequestMapping("/api/admin")
public class AdminController {
@PostMapping("/login")
public Result login(@RequestBody AdminRequest request) {
// 用户名密码验证
// 返回管理员信息
return Result.success(admin);
}
}
获取上下班时间API接口
接口地址:/api/attendance/getWorkTime
请求方式:GET
请求参数:无
返回参数:
{
"code": 0,
"message": "查询成功",
"data": {
"workStartTime": "08:30",
"workEndTime": "17:30"
}
}
Java代码:
@RestController
@RequestMapping("/api/attendance")
public class AttendanceController {
@GetMapping("/getWorkTime")
public Result getWorkTime() {
// 获取上下班时间
// 返回上下班时间
return Result.success(workTime);
}
}
获取用户打卡记录API接口
接口地址:/api/attendance/getPunchRecord
请求方式:GET
请求参数:
{
"userId": "用户ID",
"startDate": "开始日期,格式为yyyy-MM-dd",
"endDate": "结束日期,格式为yyyy-MM-dd"
}
返回参数:
{
"code": 0,
"message": "查询成功",
"data": [
{
"punchTime": "打卡时间",
"punchType": "打卡类型",
"punchAddress": "打卡地址"
},
...
]
}
Java代码:
@RestController
@RequestMapping("/api/attendance")
public class AttendanceController {
@GetMapping("/getPunchRecord")
public Result getPunchRecord(@RequestParam("userId") Integer userId,
@RequestParam("startDate") String startDate,
@RequestParam("endDate") String endDate) {
// 验证日期格式
// 获取用户打卡记录
// 返回打卡记录列表
return Result.success(punchRecordList);
}
}
打卡API接口
接口地址:/api/attendance/punch
请求方式:POST
请求参数:
{
"userId": "用户ID",
"punchType": "打卡类型,上班/下班/外勤",
"punchAddress": "打卡地址"
}
返回参数:
{
"code": 0,
"message": "打卡成功",
"data": null
}
Java代码:
@RestController
@RequestMapping("/api/attendance")
public class AttendanceController {
@PostMapping("/punch")
public Result punch(@RequestBody PunchRequest request) {
// 验证打卡类型
// 打卡操作
return Result.success(null);
}
}
maven依赖:
<dependencies>
<!-- SpringBoot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>
<!-- 参数验证 -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.5.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- 接口授权 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- JSON解析 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>