第五篇Scrum冲刺博客
时间:2020-05-28
本文章向大家介绍第五篇Scrum冲刺博客,主要包括第五篇Scrum冲刺博客使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
目录
一、站立式会议
1.1会议照片
1.2.1 昨日完成工作
昨日已完成工作 | 完成情况 |
---|---|
邮箱的定时发送提醒 | 已完成 |
添加备忘录功能 | 已完成 |
右滑删除备忘录功能 | 已完成 |
备忘录中字体的调整功能 | 已完成 |
点击修改功能 | 已完成 |
1.2.2 今日计划工作
成员 | 今日计划 | 困难 |
---|---|---|
刘珮琳 | 备忘录中添加图片 | |
魏宇峰 | 图片连接到本地相册 | |
陈起廷 | 备忘录可涂鸦功能 | |
魏宇峰 | 涂鸦照片保存到相册功能 | |
古梓欣 | 意外退出时后台记录功能 | |
高明莹 | day5博客的撰写 |
二、项目燃尽图
三、签入记录
3.1代码/文档
3.2issue内容
成员 | issue内容和链接 |
---|---|
陈起廷 | 备忘录可涂鸦功能 |
魏宇峰 | [图片连接到本地相册](C:\Users\charnen\Documents\WeChat Files\guess99911\FileStorage\File\2020-05\日记截图\日记截图) |
刘珮琳 | 备忘录中添加图片 |
高明莹 | 无 |
古梓欣 | 意外退出时后台记录功能 |
四、最新项目程序/模块
4.1部分模块代码
/***
* 获取备忘录的数据
* @param pageLimit 页面限制
* @param userId 用户id
* @return
*/
Result getMemorandum(PageLimit pageLimit, Integer userId);
/***
* 根据id删除
* @param id id
* @param userId
* @return 删除是否成功
*/
Result deleteMemorandumById(int id, Integer userId);
/***
* 存储备忘录
* @param saveMemorandumBo 备忘录的信息和需要通知的时间
* @param userId 用户id
* @return 存储是否成功
*/
Result saveMemorandum(SaveMemorandumBo saveMemorandumBo, Integer userId);
/***
* 批量删除
* @param idList id的集合
* @param userId
* @return 数据
*/
Result deleteBatchMemorandum(List<Integer> idList, Integer userId);
/***
* 更新备忘录
* @param updateMemorandumBo 更新的数据
* @return 更新是否成功
*/
Result updateMemorandum(UpdateMemorandumBo updateMemorandumBo);
/**
* @author chenqiting
*/
@Service
@Slf4j
public class MemorandumServiceImpl extends ServiceImpl<MemorandumMapper, Memorandum> implements MemorandumService {
@Resource
private MemorandumMapper memorandumMapper;
@Resource(name = "redisTemplate")
private ZSetOperations<String, Memorandum> zSetOperations;
/***
* 延时任务队列在这里实现
*/
@Resource(name = "task")
private ThreadPoolTaskScheduler threadPoolTaskScheduler;
@Resource
private AsyncRedisHandler asyncRedisHandler;
@PostConstruct
public void start() {
threadPoolTaskScheduler.scheduleAtFixedRate(asyncRedisHandler, 5000);
}
@Override
public Result getMemorandum(PageLimit pageLimit, Integer userId) {
List<Memorandum> memorandums = memorandumMapper.selectByIdAndPage(pageLimit, userId);
int size = memorandumMapper.selectCount(new QueryWrapper<Memorandum>().eq(Memorandum.COL_USER_ID, userId));
PageData<List<Memorandum>> listPageData = new PageData<>(size, memorandums);
return new Result<>(listPageData);
}
@Override
public Result deleteMemorandumById(int id, Integer userId) {
Memorandum memorandum = memorandumMapper.selectById(id);
if (memorandum.getUserId().compareTo(userId) == 0) {
zSetOperations.remove(SystemConstant.REMEMBER_KEY, memorandum);
}
memorandumMapper.delete(new UpdateWrapper<Memorandum>().eq(Memorandum.COL_USER_ID, userId).eq(Memorandum.COL_ID, id));
return ResultConstant.OK;
}
@Override
public Result saveMemorandum(SaveMemorandumBo saveMemorandumBo, Integer userId) {
saveMemorandumBo.getMemorandum().setUserId(userId);
memorandumMapper.insert(saveMemorandumBo.getMemorandum());
zSetOperations.add(SystemConstant.REMEMBER_KEY, saveMemorandumBo.getMemorandum(), saveMemorandumBo.getDate().getTime());
return ResultConstant.OK;
}
@Override
public Result deleteBatchMemorandum(List<Integer> idList, Integer userId) {
List<Memorandum> list = memorandumMapper.selectBatchIds(idList);
for (Memorandum memorandum : list) {
if (memorandum.getUserId().compareTo(userId) == 0){
zSetOperations.remove(SystemConstant.REMEMBER_KEY, memorandum);
}else {
idList.remove(memorandum.getId());
}
}
memorandumMapper.delete(new UpdateWrapper<Memorandum>().in(Memorandum.COL_ID,idList));
return ResultConstant.OK;
}
@Override
public Result updateMemorandum(UpdateMemorandumBo updateMemorandumBo) {
memorandumMapper.updateContentById(updateMemorandumBo);
return ResultConstant.OK;
}
}
public class AsyncRedisHandler implements Runnable {
@Resource(name = "redisTemplate")
private ZSetOperations<String, Memorandum> operations;
@Resource
private UserMapper userMapper;
@Resource
private AsyncService asyncService;
@Override
public void run() {
Set<Memorandum> set = operations.rangeByScore(SystemConstant.REMEMBER_KEY, 0, System.currentTimeMillis());
if (!(set == null || set.isEmpty())) {
log.info("开始执行:" + set);
for (Memorandum memorandum : set) {
//先移除,防止并发
Long count = operations.remove(SystemConstant.REMEMBER_KEY, memorandum);
if (Objects.nonNull(count) && count != 0){
User user = userMapper.selectById(memorandum.getUserId());
asyncService.sendMessageForTime(memorandum.getContent(),user.getEmail());
}
}
}
}
}
4.2截图
五、每日总结
成员 | 小结 |
---|---|
陈起廷 | |
魏宇峰 | |
刘珮琳 | |
高明莹 | 今天的我负责博客的撰写,需要收集每个人的想法以及已经完成的功能遇到的困难等,通过一天天的磨练,队员之间的沟通越来越好了,团队合作也比以前默契。 |
古梓欣 |
原文地址:https://www.cnblogs.com/yyyy118/p/12979693.html
- Go语言的 10 个实用技术--转
- MySQL反连接的优化总结(r10笔记第51天)
- python基础知识——内置数据结构(列表)
- 【Go 语言社区】Go语言Slice去重
- 【Go 语言社区】Golang 语言再谈接口
- 【Go 语言社区】Golang 语言再谈常量
- 【Go 语言社区】HTML5 Canvas+JS控制电脑或手机上的摄像头实例
- MySQL Profile在5.7的简单测试(r10笔记第50天)
- 【Go 语言社区】Golang中interface判断nil问题
- 有趣的rownum测试(r10笔记第49天)
- 【Go 语言社区】关于Golang 数据缓存到redis内存数据库遇到的问题
- go中的读写锁RWMutex
- Centos7.4 版本环境下安装Mysql5.7操作记录
- 你必须知道的23个最有用的Elasticseaerch检索技巧
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法