AI 辅助开发在线图书借阅平台设计与实现
在线图书借阅平台采用前后端分离架构,后端基于 Java Spring Boot 与 MyBatis,前端使用 Vue.js。系统涵盖用户管理、图书检索、借阅流程及统计报表等核心功能。通过 AI 辅助工具快速完成需求分析、接口设计、表结构生成及代码编写,显著提升了开发效率。过程中解决了密码加密存储、SQL 索引优化等关键问题,最终实现了规范化的工程结构与可维护的代码逻辑,验证了 AI 在基础业务模块开发中的有效性。

在线图书借阅平台采用前后端分离架构,后端基于 Java Spring Boot 与 MyBatis,前端使用 Vue.js。系统涵盖用户管理、图书检索、借阅流程及统计报表等核心功能。通过 AI 辅助工具快速完成需求分析、接口设计、表结构生成及代码编写,显著提升了开发效率。过程中解决了密码加密存储、SQL 索引优化等关键问题,最终实现了规范化的工程结构与可维护的代码逻辑,验证了 AI 在基础业务模块开发中的有效性。

我们将需求分为两类:用户端功能和管理员端功能。

根据以上功能,我们将系统划分为以下五个核心模块:

经过上述的需求分析完毕之后,我们向高效辅助代码开发工具输入我们的需求提示词:
帮我实现如下内容 项目名称:在线图书借阅平台 核心要求 采用前后端分离架构。 后端必须使用 Java 语言,并主要使用 Spring Boot、MyBatis 框架。 前端使用 Vue.js + Element Plus。 数据库使用 MySQL 8.0。 代码需具备良好的分层结构(Controller, Service, Mapper/DAO)、清晰的注释和规范的命名。

1、需要用户管理功能,包括用户注册、登录、个人信息维护和权限控制 2、需要图书管理功能,支持图书信息的增删改查以及分类和状态管理 3、需要借阅管理功能,支持用户借书、还书、续借操作及借阅记录查询 4、需要系统配置管理功能,支持基础数据配置和全局参数设置 5、需要通知消息功能,支持向用户推送借阅相关的提醒和公告信息 6、需要统计报表功能,支持生成各类业务统计数据和分析报告

从图片不难看出,AI 工具需求的理解完全满足了我们之前的需求分析的内容。
1、用户管理 实现用户的注册、登录、个人信息维护及权限控制功能。支持用户角色分配与访问控制,确保系统安全性与数据隔离性。 2、图书管理 提供图书信息的增删改查操作,支持图书分类管理和状态更新,如在馆、借出等状态变更,满足图书资源的有效管理。 3、借阅管理 处理用户的借书、还书和续借请求,记录每次借阅行为并提供借阅历史查询服务,保障图书流通顺畅与可追溯性。 4、系统配置管理 管理系统基础数据配置项和全局参数设置,包括但不限于系统运行参数、业务规则配置等内容,提升系统的灵活性和适应能力。 5、通知消息管理 支持向用户推送借阅相关的提醒通知与公告信息,包括逾期提醒、归还提示等,增强用户体验和系统交互性。 6、统计报表管理 生成各类业务统计数据和分析报告,涵盖借阅情况、图书利用率、用户活跃度等维度,辅助决策制定与运营优化。

接口设计完善,并且还考虑了用户体验等日常开发中最重要的潜在要求。
AI 工具支持自动表结构生成或使用现有表结构两种情况,非常全面。

这里为了体现 AI 工具的强大之处,我们使用自动表结构生成。

在短短的一分钟之内,AI 工具就帮我们生成了 6 张表。
-- 用户信息表
CREATE TABLE user_info (
user_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '用户唯一标识',
username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
password VARCHAR(100) NOT NULL COMMENT '用户密码(加密后)',
email VARCHAR(100) COMMENT '用户邮箱',
phone VARCHAR(20) COMMENT '用户手机号',
real_name VARCHAR(50) COMMENT '真实姓名',
avatar_url VARCHAR(255) COMMENT '头像地址',
status TINYINT DEFAULT 1 COMMENT '用户状态:1-正常,0-禁用',
role_type VARCHAR(50) COMMENT '用户角色类型',
create_by VARCHAR(50) COMMENT '创建人',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by VARCHAR(50) COMMENT '修改人',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'
) COMMENT='用户信息表';
-- 图书信息表
CREATE TABLE book_info (
book_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '图书唯一标识',
isbn VARCHAR(20) UNIQUE COMMENT 'ISBN 编号',
title VARCHAR(200) NOT NULL COMMENT '图书标题',
author VARCHAR(100) COMMENT '作者',
publisher VARCHAR(100) COMMENT '出版社',
publish_date DATE COMMENT '出版日期',
category_id INT COMMENT '分类 ID',
total_quantity INT DEFAULT 0 COMMENT '总数量',
available_quantity INT DEFAULT 0 COMMENT '可借数量',
status TINYINT DEFAULT 1 COMMENT '图书状态:1-在馆,0-借出',
description TEXT COMMENT '图书描述',
cover_image VARCHAR(255) COMMENT '封面图片地址',
create_by VARCHAR(50) COMMENT '创建人',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by VARCHAR(50) COMMENT '修改人',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE COMMENT
) COMMENT;
-- 借阅记录表
CREATE TABLE borrow_record (
record_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '借阅记录唯一标识',
user_id BIGINT NOT NULL COMMENT '借阅用户 ID',
book_id BIGINT NOT NULL COMMENT '图书 ID',
borrow_date DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '借书时间',
due_date DATETIME COMMENT '应还时间',
return_date DATETIME COMMENT '实际归还时间',
renewal_count INT DEFAULT 0 COMMENT '续借次数',
status TINYINT DEFAULT 1 COMMENT '借阅状态:1-已借出,2-已归还,3-逾期',
create_by VARCHAR(50) COMMENT '创建人',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by VARCHAR(50) COMMENT '修改人',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'
) COMMENT='借阅记录表';
-- 系统配置表
CREATE TABLE system_config (
config_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '配置项唯一标识',
config_key VARCHAR(100) NOT NULL UNIQUE COMMENT '配置键名',
config_value TEXT COMMENT '配置值',
config_desc VARCHAR(255) COMMENT '配置说明',
group_name VARCHAR(50) COMMENT '所属组别',
is_enabled TINYINT DEFAULT 1 COMMENT '是否启用:1-是,0-否',
create_by VARCHAR(50) COMMENT '创建人',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by VARCHAR(50) COMMENT '修改人',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'
) COMMENT='系统配置表';
-- 通知消息表
CREATE TABLE notification_message (
message_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '消息唯一标识',
user_id BIGINT COMMENT '接收用户 ID',
title VARCHAR(200) NOT NULL COMMENT '消息标题',
content TEXT NOT NULL COMMENT '消息内容',
message_type VARCHAR(50) COMMENT '消息类型:如逾期提醒、归还提示等',
is_read TINYINT DEFAULT 0 COMMENT '是否已读:0-未读,1-已读',
send_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '发送时间',
expire_time DATETIME COMMENT '过期时间',
create_by VARCHAR(50) COMMENT '创建人',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by VARCHAR(50) COMMENT '修改人',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'
) COMMENT='通知消息表';

逻辑处理(接口)每个接口都给的非常详细,包括入参,处理逻辑,数据存储,返回结果等。
| 模块名称 | 功能名称 | 入参对象属性(必填项标★) | 处理逻辑 | 返回 RestResult 结果 |
|---|---|---|---|---|
| 1. 用户管理 | 1.1 用户注册 | username(用户名,★)、password(用户密码,★)、email(用户邮箱)、phone(用户手机号)、realName(真实姓名) | 1. 校验用户名是否已存在;2. 若用户名不存在,将用户信息保存到数据库 | 1. 用户名已存在:{"code":"000001","msg":"用户名已存在","data":...};2. 保存成功: {"code":"000000","msg":"调用成功","data":...} |
| 1.2 用户登录 | username(用户名,★)、password(用户密码,★) | 1. 根据用户名查询用户信息;2. 验证查询到的用户密码是否正确;3. 密码正确则返回登录成功的用户信息 | 1. 用户不存在/密码错误:{"code":"000001","msg":"用户不存在或密码错误","data":...};2. 登录成功: {"code":"000000","msg":"调用成功","data":...} | |
| 1.3 修改用户信息 | userId(用户 id,★)、email(用户邮箱)、phone(用户手机号)、realName(真实姓名)、avatarUrl(头像地址) | 1. 根据 userId 判断用户是否存在;2. 若用户存在,更新用户信息 | 1. 用户不存在:{"code":"000001","msg":"用户不存在","data":...};2. 更新成功: {"code":"000000","msg":"调用成功","data":...} | |
| 1.4 获取用户详情 | userId(用户 id,★) | 1. 根据 userId 判断用户是否存在;2. 若用户存在,返回用户详细信息 | 1. 用户不存在:{"code":"000001","msg":"用户不存在","data":...};2. 查询成功: {"code":"000000","msg":"调用成功","data":...} | |
| 1.5 禁用/启用用户 | userId(用户 id,★)、status(用户状态,★) | 1. 根据 userId 判断用户是否存在;2. 若用户存在,更新用户状态 | 1. 用户不存在:{"code":"000001","msg":"用户不存在","data":...};2. 状态更新成功: {"code":"000000","msg":"调用成功","data":...} | |
| 2. 图书管理 | 2.1 新增图书 | isbn(ISBN 编号)、title(图书标题,★)、author(作者)、publisher(出版社)、publishDate(出版日期)、categoryId(分类 ID)、totalQuantity(总数量)、availableQuantity(可借数量)、status(图书状态)、description(图书描述)、coverImage(封面图片地址) | 1. 校验图书 ISBN 是否已存在;2. 若 ISBN 不存在,将图书信息保存到数据库 | 1. ISBN 已存在:{"code":"000001","msg":"该 ISBN 的图书已存在","data":...};2. 保存成功: {"code":"000000","msg":"调用成功","data":...} |
| 2.2 删除图书 | bookId(图书唯一标识,★) | 1. 根据 bookId 判断图书是否存在;2. 若图书存在,删除指定图书信息 | 1. 图书不存在:{"code":"000001","msg":"图书信息不存在","data":...};2. 删除成功: {"code":"000000","msg":"调用成功","data":...} | |
| 2.3 修改图书 | bookId(图书唯一标识,★)、isbn(ISBN 编号)、title(图书标题)、author(作者)、publisher(出版社)、publishDate(出版日期)、categoryId(分类 ID)、totalQuantity(总数量)、availableQuantity(可借数量)、status(图书状态)、description(图书描述)、coverImage(封面图片地址) | 1. 根据 bookId 判断图书是否存在;2. 若图书存在,更新图书信息 |
点击开始生成,等待即可。
每个核心功能差不多都是两分钟生成完毕,因此该项目 6 个核心功能共耗时 12 分钟就生成完毕了。

共生成了 51 个文件,每个核心功能都有 Controller, DO, DTO, Service 等等,非常符合代码开发规范,之后我们点击打开项目。
结构如下

在生成用户登录功能代码后,发现密码加密逻辑缺失。AI 工具生成的 UserServiceImpl 中,用户注册时密码是明文存储,登录验证也直接比较明文密码。这存在严重安全隐患,于是通过智能会话进行优化,建议引入 Spring Security 的密码加密工具 BCryptPasswordEncoder,在用户注册时对密码进行加密,登录验证时也用该工具对输入密码加密后再与数据库中密码比较。

我们点击智能会话,让工具再次帮我们优化。 重新生成的代码。 同时登录时的判断也进行了修改,完美解决。

user_info 表:
role_type 字段:使用 VARCHAR(20) 即可并定义明确的枚举值,如 USER, ADMIN,便于权限控制。book_info 表:
status 字段:目前的 1-在馆,0-借出 定义是多余的。因为图书的在馆状态完全可以通过 (available_quantity > 0) 来逻辑判断。这个状态可以移除,或者改为更丰富的状态(如:在馆、借出、整理中、已下架)。borrow_record 表:
ALTER TABLE borrow_record ADD INDEX idx_user_status (user_id, status);
项目最终的工程结构清晰,分为用户、图书、借阅、分类等模块,每个模块下包含实体类、Repository、Service、Controller 等组件。

以下是用户登录接口的核心代码片段(
UserController类中):
/**
* 用户注册接口
*
* @param registerDTO 注册信息
* @return RestResult
*/
@PostMapping("/register")
public RestResult<?> register(@Valid @RequestBody UserRegisterDTO registerDTO) {
log.info("接收到用户注册请求,用户名为:{}", registerDTO.getUsername());
return userService.register(registerDTO);
}
/**
* 用户登录接口
*
* @param loginDTO 登录信息
* @return RestResult
*/
@PostMapping("/login")
public RestResult<?> login(@Valid @RequestBody UserLoginDTO loginDTO) {
log.info("接收到用户登录请求,用户名为:{}", loginDTO.getUsername());
return userService.login(loginDTO);
}
/**
* 修改用户信息接口
*
* @param updateDTO 更新信息
* @return RestResult
*/
@PostMapping("/update")
public RestResult<?> updateUser(@Valid @RequestBody UserUpdateDTO updateDTO) {
log.info("接收到修改用户信息请求,用户 ID 为:{}", updateDTO.getUserId());
return userService.updateUser(updateDTO);
}
/**
* 更新用户状态接口
*
* @param statusUpdateDTO 状态更新信息
* @return RestResult
*/
@PostMapping("/update-status")
public RestResult<?> updateUserStatus(@Valid @RequestBody UserStatusUpdateDTO statusUpdateDTO) {
log.info("接收到更新用户状态请求,用户 ID 为:{}", statusUpdateDTO.getUserId());
return userService.updateUserStatus(statusUpdateDTO);
}
/**
* 查询用户详情接口
*
* @param queryDTO 查询条件
* @return RestResult
*/
@PostMapping("/detail")
public RestResult<?> getUserDetail( UserDetailQueryDTO queryDTO) {
log.info(, queryDTO.getUserId());
userService.getUserDetail(queryDTO);
}
以下是用户借阅接口的核心代码片段(
BorrowController类中):
@RestController
@RequestMapping("/borrow")
@RequiredArgsConstructor
public class BorrowController {
private final BorrowService borrowService;
/**
* 用户借书接口
*
* @param borrowBookDTO 借书参数对象
* @return 统一响应结果
*/
@PostMapping("/borrowBook")
public RestResult<?> borrowBook(@RequestBody @Valid BorrowBookDTO borrowBookDTO) {
return borrowService.borrowBook(borrowBookDTO);
}
/**
* 用户还书接口
*
* @param returnBookDTO 还书参数对象
* @return 统一响应结果
*/
@PostMapping("/returnBook")
public RestResult<?> returnBook(@RequestBody @Valid ReturnBookDTO returnBookDTO) {
return borrowService.returnBook(returnBookDTO);
}
/**
* 用户续借接口
*
* @param renewalBookDTO 续借参数对象
* @return 统一响应结果
*/
@PostMapping("/renewalBook")
public RestResult<?> renewalBook(@RequestBody @Valid RenewalBookDTO renewalBookDTO) {
return borrowService.renewalBook(renewalBookDTO);
}
/**
* 查询借阅历史接口
*
* @param queryHistoryDTO 查询参数对象
* @return 统一响应结果
*/
@GetMapping("/queryHistory")
public RestResult<?> queryHistory(QueryHistoryDTO queryHistoryDTO) {
return borrowService.queryHistory(queryHistoryDTO);
}
}
以下是消息接口的核心代码片段(
NotificationController类中):
/**
* <p>
* 通知消息控制器
* </p>
* @author Administrator
*/
@RestController
@RequestMapping("/notification")
@RequiredArgsConstructor
public class NotificationController {
private final NotificationService notificationService;
/**
* 发送通知消息
*
* @param request 发送通知请求参数
* @return 统一响应结果
*/
@PostMapping("/send")
public RestResult<Void> sendNotification(@Valid @RequestBody SendNotificationRequest request) {
return notificationService.sendNotification(request);
}
/**
* 获取用户未读通知列表
*
* @param query 查询参数
* @return 统一响应结果
*/
@GetMapping("/unread-list")
public RestResult<Object> getUnreadNotifications(NotificationQuery query) {
return notificationService.getUnreadNotifications(query.getUserId());
}
/**
* 标记通知为已读
*
* @param messageId 消息 ID
* @return 统一响应结果
*/
@PutMapping("/mark-read/{messageId}")
public RestResult<Void> markAsRead(@PathVariable Long messageId) {
return notificationService.markAsRead(messageId);
}
/**
* 删除通知消息
*
* @param messageId 消息 ID
* @return 统一响应结果
*/
@DeleteMapping("/{messageId}")
public RestResult<Void> deleteNotification {
notificationService.deleteNotification(messageId);
}
}
总体而言,AI 辅助工具在在线图书借阅平台的开发过程中起到了很好的辅助作用,尤其是在基础代码生成方面表现出色,虽然存在一些不足,但仍为项目开发带来了诸多便利。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
1. 图书不存在:{"code":"000001","msg":"图书信息不存在","data":...};2. 更新成功: {"code":"000000","msg":"调用成功","data":...} |
| 2.4 查询图书详情 | bookId(图书唯一标识,★) | 1. 根据 bookId 判断图书是否存在;2. 若图书存在,获取图书详细信息 | 1. 图书不存在:{"code":"000001","msg":"图书信息不存在","data":...};2. 查询成功: {"code":"000000","msg":"调用成功","data":...} |
| 2.5 查询图书列表 | title(图书标题)、author(作者)、categoryId(分类 ID)、status(图书状态) | 根据传入条件筛选图书列表 | {"code":"000000","msg":"调用成功","data":...}(返回筛选后的图书列表) |
| 3. 借阅管理 | 3.1 用户借书 | userId(用户 id,★)、bookId(图书 id,★) | 1. 校验用户是否存在;2. 校验图书是否存在且可借;3. 检查图书可借数量是否充足;4. 若均满足,更新图书可用数量和状态,创建借阅记录并保存到数据库 | 1. 用户不存在:{"code":"000001","msg":"用户信息不存在","data":...};2. 图书不存在/不可借: {"code":"000001","msg":"图书不存在或不可借","data":...};3. 无库存: {"code":"000001","msg":"图书暂无库存","data":...};4. 借书成功: {"code":"000000","msg":"调用成功","data":...} |
| 3.2 用户还书 | recordId(借阅记录 id,★) | 1. 校验借阅记录是否存在;2. 判断借阅记录是否已归还;3. 若未归还,更新借阅记录的归还时间及状态,同时更新图书的可用数量和状态 | 1. 记录不存在:{"code":"000001","msg":"借阅记录不存在","data":...};2. 已归还: {"code":"000001","msg":"该书籍已归还","data":...};3. 还书成功: {"code":"000000","msg":"调用成功","data":...} |
| 3.3 用户续借 | recordId(借阅记录 id,★) | 1. 校验借阅记录是否存在;2. 判断是否可续借(如是否逾期、是否超最大续借次数);3. 若可续借,更新借阅记录的续借次数及应还时间 | 1. 记录不存在:{"code":"000001","msg":"借阅记录不存在","data":...};2. 不可续借: {"code":"000001","msg":"无法续借,该书已逾期或超过最大续借次数","data":...};3. 续借成功: {"code":"000000","msg":"调用成功","data":...} |
| 3.4 查询借阅历史 | userId(用户 id,★)、pageNo(页码,默认 1)、pageSize(每页大小,默认 10) | 1. 校验用户是否存在;2. 若用户存在,根据 userId 查询其所有借阅记录(分页) | 1. 用户不存在:{"code":"000001","msg":"用户信息不存在","data":...};2. 查询成功: {"code":"000000","msg":"调用成功","data":...}(返回分页借阅记录) |
| 4. 系统配置管理 | 4.1 新增系统配置 | configKey(配置键名,★)、configValue(配置值)、configDesc(配置说明)、groupName(所属组别)、isEnabled(是否启用,★) | 1. 校验配置键名是否已存在;2. 若键名不存在,将配置信息保存到数据库 | 1. 键名已存在:{"code":"000001","msg":"配置键名已存在","data":...};2. 保存成功: {"code":"000000","msg":"调用成功","data":...} |
| 4.2 修改系统配置 | configId(配置项唯一标识,★)、configValue(配置值)、configDesc(配置说明)、groupName(所属组别)、isEnabled(是否启用) | 1. 根据 configId 判断配置是否存在;2. 若配置存在,更新配置信息 | 1. 配置不存在:{"code":"000001","msg":"配置信息不存在","data":...};2. 更新成功: {"code":"000000","msg":"调用成功","data":...} |
| 4.3 删除系统配置 | configId(配置项唯一标识,★) | 1. 根据 configId 判断配置是否存在;2. 若配置存在,删除指定配置信息 | 1. 配置不存在:{"code":"000001","msg":"配置信息不存在","data":...};2. 删除成功: {"code":"000000","msg":"调用成功","data":...} |
| 4.4 查询系统配置列表 | groupName(所属组别)、isEnabled(是否启用) | 根据传入条件筛选系统配置数据 | {"code":"000000","msg":"调用成功","data":...}(返回筛选后的配置列表) |
| 4.5 获取单个系统配置详情 | configId(配置项唯一标识,★) | 1. 根据 configId 判断配置是否存在;2. 若配置存在,查询该配置的详细信息 | 1. 配置不存在:{"code":"000001","msg":"配置信息不存在","data":...};2. 查询成功: {"code":"000000","msg":"调用成功","data":...} |
| 5. 通知消息管理 | 5.1 发送通知消息 | title(消息标题,★)、content(消息内容,★)、messageType(消息类型,★)、userId(接收用户 ID) | 1. 校验消息类型是否合法;2. 若 userId 为空,向所有用户发送公告;3. 若 userId 不为空,向指定用户发送私信;4. 将通知消息保存至数据库 | 1. 消息类型不合法:{"code":"000001","msg":"消息类型不合法","data":...};2. 发送成功: {"code":"000000","msg":"调用成功","data":...} |
| 5.2 查询用户未读通知 | userId(用户 ID,★) | 根据 userId 查询其未读的通知消息 | {"code":"000000","msg":"调用成功","data":...}(返回未读通知列表) |
| 5.3 标记通知为已读 | messageId(消息 ID,★) | 1. 判断消息是否存在且属于当前用户;2. 若满足,更新消息状态为已读 | 1. 消息不存在/无权操作:{"code":"000001","msg":"消息不存在或无权操作","data":...};2. 标记成功: {"code":"000000","msg":"调用成功","data":...} |
| 5.4 获取通知详情 | messageId(消息 ID,★) | 1. 验证消息是否存在;2. 若消息存在,返回消息的详细信息 | 1. 消息不存在:{"code":"000001","msg":"消息不存在","data":...};2. 查询成功: {"code":"000000","msg":"调用成功","data":...} |
| 6. 统计报表管理 | 6.1 生成借阅情况统计报表 | startDate(开始日期,★)、endDate(结束日期,★) | 1. 校验日期范围是否合法(开始日期≤结束日期);2. 若合法,根据借阅记录统计指定时间段内的借阅情况 | 1. 日期范围不合法:{"code":"000001","msg":"日期范围不合法","data":...};2. 生成成功: {"code":"000000","msg":"调用成功","data":...}(返回借阅统计数据) |
| 6.2 生成图书利用率统计报表 | startDate(开始日期,★)、endDate(结束日期,★) | 1. 校验日期范围是否合法;2. 若合法,通过借阅记录与图书信息关联计算图书利用率 | 1. 日期范围不合法:{"code":"000001","msg":"日期范围不合法","data":...};2. 生成成功: {"code":"000000","msg":"调用成功","data":...}(返回利用率统计数据) |
| 6.3 生成用户活跃度统计报表 | startDate(开始日期,★)、endDate(结束日期,★) | 1. 校验日期范围是否合法;2. 若合法,基于借阅记录统计用户的活跃次数和频率 | 1. 日期范围不合法:{"code":"000001","msg":"日期范围不合法","data":...};2. 生成成功: {"code":"000000","msg":"调用成功","data":...}(返回活跃度统计数据) |
| 6.4 获取所有统计报表列表 | 无入参 | 查询统计报表表中的所有记录 | {"code":"000000","msg":"调用成功","data":...}(返回所有报表记录) |
| 6.5 删除指定统计报表 | reportId(报表 ID,★) | 1. 根据 reportId 判断报表是否存在;2. 若报表存在,执行删除操作 | 1. 报表不存在:{"code":"000001","msg":"报表不存在","data":...};2. 删除成功: {"code":"000000","msg":"调用成功","data":...} |