项目简述: 设计一个考勤打卡系统,支持模拟用户简单考勤打卡。同时,支持管理员配置上下班时间(不涉及打卡地点信息),查阅各用户考勤打卡明细及考勤异常情况。 功能界面: 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依赖

2023-05-16by@zhouwan-VkSw2&@ChatGPT.Model: gpt-3.5
zhouwan-VkSw2

项目简述:
设计一个考勤打卡系统,支持模拟用户简单考勤打卡。同时,支持管理员配置上下班时间(不涉及打卡地点信息),查阅各用户考勤打卡明细及考勤异常情况。

功能界面:
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依赖

Avatar
Avatar

后端API设计:

  1. 用户登录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);
    }
    }

  2. 管理员登录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);
    }
    }

  3. 获取上下班时间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);
    }
    }

  4. 获取用户打卡记录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);
    }
    }

  5. 打卡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>