第五篇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