第五篇Scrum冲刺博客

一、站立式会议

1.1会议照片

1.2.1 昨日完成工作

昨日已完成工作 完成情况
邮箱的定时发送提醒 已完成
添加备忘录功能 已完成
右滑删除备忘录功能 已完成
备忘录中字体的调整功能 已完成
点击修改功能 已完成

1.2.2 今日计划工作

成员 今日计划 困难
刘珮琳 备忘录中添加图片 无
魏宇峰 图片连接到本地相册,涂鸦照片保存到相册功能 无
陈起廷 备忘录可涂鸦功能 无
古梓欣 意外退出时后台记录功能 代码需要进一步优化
高明莹 day5博客的撰写 整理每个人的part耗费了一定的时间

二、项目燃尽图

三、签入记录

3.1代码/文档

3.2issue内容

成员 issue内容和链接
陈起廷 备忘录可涂鸦功能
魏宇峰 图片连接到本地相册
刘珮琳 备忘录中添加图片
高明莹 -----------------------------
古梓欣 意外退出时后台记录功能

四、最新项目程序/模块

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截图

五、每日总结

成员 小结
陈起廷 后台开发并没有实现到什么,前端可以渲染搞定
魏宇峰 工作:使用之前已封装的基类进行备忘录模块开发(测试);困难:之前封装的基类不能完美地符合需求,改动基类的同时保证其稳定性
刘珮琳 今天的话,备忘录中添加图片主要是和相册的联动,和团队的其他成员一起互相讨论了,整体来说还可以。
高明莹 今天的我负责博客的撰写,需要收集每个人的想法以及已经完成的功能遇到的困难等,通过一天天的磨练,队员之间的沟通越来越好了,团队合作也比以前默契。
古梓欣 在队友的指导下完成今日任务,但是代码还是有可以优化的地方。 |
posted @ 2020-05-28 11:52  莹o莹  阅读(226)  评论(0)    收藏  举报