第十三周总结
一、本周工作内容
Spring Boot后端开发
完成了3个核心控制器的开发(Goals/BlogLink/StudentHonor)
实现了15个主要业务接口
编写了4个ServiceImpl实现类(约1200行代码)
关键功能实现
// 目标管理核心逻辑示例
@Transactional
public Result addGoalWithSubGoals(Goals goal, String[] subGoalContents) {
// 检查活跃目标冲突
if (hasActiveGoal(goal.getStudentId())) {
return Result.fail("已有进行中的周目标");
}
// 保存主目标
if (!save(goal)) return Result.fail("保存失败");
// 批量保存子目标
List<SubGoals> subGoalsList = Arrays.stream(subGoalContents)
.filter(content -> !content.isBlank())
.map(content -> new SubGoals(goal.getGoalId(), content))
.collect(Collectors.toList());
return subGoalsService.saveBatch(subGoalsList) ?
Result.success() : Result.fail("子目标保存失败");
}
复杂业务处理
实现了目标状态自动更新逻辑
开发了博客分类动态管理
完成了荣誉奖项的水印处理
二、技术收获
Spring相关
掌握了@Transactional事务管理
熟练使用MyBatis Plus的Wrapper条件构造
实践了RESTful接口设计规范
业务逻辑
// 按月统计目标完成率
Map<String, Double> monthlyCompletion = goals.stream()
.collect(Collectors.groupingBy(
g -> new SimpleDateFormat("yyyy-MM").format(g.getStartDate()),
Collectors.averagingDouble(g ->
getCompletionRate(g.getGoalId())
)
));
异常处理
统一使用Result封装响应
采用try-catch处理业务异常
使用@Slf4j记录错误日志
三、遇到的问题及解决
事务不一致问题
现象:主目标保存成功但子目标保存失败
解决:添加@Transactional注解
@Transactional
public Result addGoalWithSubGoals(...) {
// 业务逻辑
}
NPE异常
现象:subGoalContents可能为null
解决:添加空值检查
if (subGoalContents == null || subGoalContents.length == 0) {
return Result.fail("子目标不能为空");
}
日期处理问题
现象:前端传字符串日期,后端需要Date类型
解决:使用SimpleDateFormat转换
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
goal.setStartDate(sdf.parse((String)params.get("startDate")));
四、代码统计
模块 文件数 代码行数 耗时(h)
控制器层 3 450 8
服务实现层 4 1200 15
工具类 1 150 2
单元测试 6 300 5
合计 14 2100 30
五、下周计划
前端联调
对接目标管理界面
集成博客统计图表
开发荣誉奖项上传组件
性能优化
添加Redis缓存层
实现分页查询
优化统计查询SQL
安全加固
添加JWT认证
实现接口权限控制
增加敏感数据加密

浙公网安备 33010602011771号