• 第五篇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截图

    五、每日总结

    成员 小结
    陈起廷 后台开发并没有实现到什么,前端可以渲染搞定
    魏宇峰 工作:使用之前已封装的基类进行备忘录模块开发(测试);困难:之前封装的基类不能完美地符合需求,改动基类的同时保证其稳定性
    刘珮琳 今天的话,备忘录中添加图片主要是和相册的联动,和团队的其他成员一起互相讨论了,整体来说还可以。
    高明莹 今天的我负责博客的撰写,需要收集每个人的想法以及已经完成的功能遇到的困难等,通过一天天的磨练,队员之间的沟通越来越好了,团队合作也比以前默契。
    古梓欣 在队友的指导下完成今日任务,但是代码还是有可以优化的地方。 |
  • 相关阅读:
    HttpModule与HttpHandler详解
    未能加载文件或程序集“Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。
    javascript的escape()函数
    温故知新 javascript 正则表达式
    大爽Python入门教程 53 文件读写
    大爽Python入门教程 62 变量进阶 局部变量`local`与全局变量`global`
    大爽Python入门教程 61 变量进阶 可变`mutable`、不可变`immutable`
    大爽Python入门教程 57 思路与答案
    大爽Python入门教程 65 函数进阶 内置函数(Builtin Functions)
    大爽Python入门教程 55 实践演示 控制台版本——简易成绩管理系统
  • 原文地址:https://www.cnblogs.com/yyyy118/p/12979693.html
Copyright © 2020-2023  润新知