每周总结2
团队冲刺第五天计划
一、昨日遗留问题跟进
-
查询性能优化
- 实现查询缓存机制
- 优化复杂查询的SQL执行计划
-
并发控制验证
- 设计压力测试方案
- 模拟高并发借阅场景
二、今日核心开发任务
1. 借阅功能增强
扫码借书完整实现
@PostMapping("/borrow/qrcode")
@Transactional
public ResponseEntity<BorrowResponse> borrowByQrCode(@Valid @RequestBody QrCodeRequest request) {
// 1. 二维码内容解析与验证
QrCodeContent content = qrCodeService.decode(request.getQrCodeData());
if (!content.isValid()) {
throw new InvalidQrCodeException("Invalid QR code content");
}
// 2. 获取图书信息(带锁)
Book book = bookRepository.findByIdWithLock(content.getBookId())
.orElseThrow(() -> new BookNotFoundException(content.getBookId()));
// 3. 检查用户借阅资格
if (userService.isUserBanned(request.getUserId())) {
throw new UserBannedException("User is banned from borrowing");
}
// 4. 执行借阅
return ResponseEntity.ok(borrowService.borrowBook(
new BorrowRequest(request.getUserId(), book.getId())));
}
2. 用户权限模块开发
基础权限控制实现
// 权限注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RequireRole {
UserRole value();
}
// 权限拦截器
public class AuthorizationInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// 获取用户角色
UserRole userRole = getCurrentUserRole(request);
// 检查方法权限注解
RequireRole annotation = ((HandlerMethod) handler).getMethodAnnotation(RequireRole.class);
if (annotation != null && userRole.ordinal() < annotation.value().ordinal()) {
throw new AccessDeniedException("Insufficient privileges");
}
return true;
}
}
3. 热门推荐功能
增强版热门图书推荐
@Cacheable(value = "popularBooks", unless = "#result == null || #result.empty")
public List<BookDTO> getPopularBooks(int limit) {
return bookRepository.findPopularBooks(PageRequest.of(0, limit)).stream()
.map(book -> {
BookDTO dto = convertToDTO(book);
dto.setBorrowCount(getBorrowCount(book.getId()));
return dto;
})
.collect(Collectors.toList());
}
三、关键技术解决方案
-
缓存策略
- 使用Redis实现二级缓存
- 设计缓存过期和刷新机制
-
权限控制
- 基于角色的访问控制(RBAC)
- JWT令牌集成方案
-
压力测试方案
@SpringBootTest @ActiveProfiles("test") public class BorrowPressureTest { @Test public void testConcurrentBorrow() throws InterruptedException { int threadCount = 100; ExecutorService service = Executors.newFixedThreadPool(threadCount); CountDownLatch latch = new CountDownLatch(threadCount); for (int i = 0; i < threadCount; i++) { service.execute(() -> { try { borrowService.borrowBook(new BorrowRequest(1L, 1L)); } finally { latch.countDown(); } }); } latch.await(); // 验证库存是否正确 } }
四、测试计划
-
单元测试
- 权限拦截器测试
- 二维码解析服务测试
-
集成测试
- 扫码借书全流程测试
- 权限控制API测试
-
性能测试
- 使用JMeter模拟并发借阅
- 监控系统响应时间和资源占用
五、系统状态看板
| 模块 | 完成度 | 测试覆盖率 | 关键问题 |
|---|---|---|---|
| 图书查询 | 95% | 85% | 缓存刷新策略待确定 |
| 自助借阅 | 85% | 75% | 压力测试结果待分析 |
| 用户权限 | 50% | 30% | 权限树设计进行中 |
| 推荐系统 | 70% | 60% | 推荐算法需要进一步优化 |
六、风险与应对
-
风险:权限模块可能影响现有API响应时间
- 应对:进行基准测试,优化权限检查流程
-
风险:缓存一致性问题
- 应对:实现数据库变更时的缓存失效机制
今日重点:完成扫码借阅全流程开发,建立基础权限体系,同时为关键模块实施压力测试,确保系统在高并发场景下的稳定性。

浙公网安备 33010602011771号