第5篇 Scrum 冲刺博客
一、站立式会议
1.1 会议照片
1.2 成员完成情况
成员 |
昨天完成的任务 |
今天计划完成的任务 |
工作中的困难 |
郭沛 |
团队计划增删改接口 |
对团队计划增删改接口进行测试并添加了查看接口 |
团队计划中用户权限的校验问题 |
柴政 |
加深对算法的理解 |
继续提高算法对截止时间的要求 |
判断条件如何控制? |
洪梓豪 |
继续学习消息队列,用户修改昵称 |
修改之前的文档 |
需要抽空写代码 |
王树干 |
动工个人计划 |
完善个人计划的静态页面 |
作业较多,时间匆忙 |
黎其钻 |
修改了数据流,添加了云函数,登陆流程正式完工 |
修改团队页面详情逻辑,添加计划页面 |
日益增长的娱乐渴望与ddl逐渐迫近的焦虑之间的矛盾 |
简蕙兰 |
画了会议照片 |
砍掉了一些功能 |
噜噜噜… |
二、项目燃尽图
三、成员代码/文档签入记录
3.1 代码签入
后台:
前端:
3.2 Issue链接
成员 | Issue链接 |
郭沛 | |
柴政 | |
洪梓豪 | |
王树干 | |
黎其钻 | |
简蕙兰 |
(设计好像没有这玩意儿) |
3.3 CodeReview代码规范文档
四、最新项目程序/模块
4.1 程序代码
排序算法部分(后台代码):
1 /** 2 * 添加团队计划以及修改团队计划接口(若为添加团队计划,则planId为空,若为修改团队计划,则planId不能为空) 3 * @param planVo 4 * @return 5 */ 6 @Override 7 public PlanVo addGroupPlan(PlanVo planVo) { 8 //先对数据进行校验 9 if (VerifyUtil.isNull(planVo) || VerifyUtil.isEmpty(planVo.getPlanName()) || VerifyUtil.isEmpty(planVo.getType())) { 10 log.info("前端传过来的参数为空"); 11 throw new ErrorException("请填写要添加的计划"); 12 } 13 14 //校验该成员是否在团队中 15 if (!groupPermission(planVo.getType(), planVo.getUserId())) { 16 log.info("用户{}不属于该团队", planVo.getUserId()); 17 throw new ErrorException("您还不是该团队的成员,无权访问"); 18 } 19 //判断下是否planVo是否存在 20 if (VerifyUtil.isEmpty(planVo.getPlanId())) { 21 //说明是新的大计划(需要先插入) 22 log.info("即将插入一条新的大计划"); 23 Plan plan = new Plan(); 24 plan.setType(planVo.getType()); 25 BeanUtils.copyProperties(planVo, plan); 26 if(planMapper.insertPlan(plan) != 1){ 27 log.info("个人计划插入数据库失败,可能部分字段为空"); 28 throw new ErrorException("系统出现异常,请稍后重试"); 29 } 30 List<Task> taskList = planVo.getTaskList(); 31 if (!VerifyUtil.isEmpty(taskList)) { 32 List<Task> result = new ArrayList<>(); 33 for (Task task : taskList){ 34 task.setPlanId(plan.getPlanId()); 35 task.setUserId(planVo.getUserId()); 36 if(taskMapper.insertTask(task) != 1){ 37 log.info("子任务插入数据库失败"); 38 throw new ErrorException("系统出现异常,请稍后重试"); 39 } 40 result.add(task); 41 } 42 planVo.setPlanId(plan.getPlanId()); 43 planVo.setTaskList(result); 44 } 45 return planVo; 46 } 47 else { 48 //可能是修改团队大计划 49 log.info("即将对id为{}的大计划名称进行修改", planVo.getPlanId()); 50 planMapper.updatePlanByPlanId(planVo.getPlanName(), planVo.getPlanId()); 51 List<Task> taskList = planVo.getTaskList(); 52 if (!VerifyUtil.isEmpty(taskList)) { 53 List<Task> result = new ArrayList<>(); 54 for (Task task : taskList) { 55 task.setPlanId(planVo.getPlanId()); 56 task.setUserId(planVo.getUserId()); 57 if (taskMapper.insertTask(task) != 1) { 58 log.info("子任务插入数据库失败"); 59 throw new ErrorException("系统出现异常,请稍后重试"); 60 } 61 result.add(task); 62 } 63 planVo.setPlanId(planVo.getPlanId()); 64 planVo.setTaskList(result); 65 } 66 return planVo; 67 } 68 } 69 70 @Override 71 public boolean deleteGroupPlan(Integer planId, UserPo userPo) { 72 if (VerifyUtil.isEmpty(planId)) { 73 log.info("前端的planId参数为空"); 74 throw new ErrorException("请选择要删除的团队计划"); 75 } 76 Plan plan = planMapper.getPlanByPlanId(planId); 77 if (VerifyUtil.isNull(plan)) { 78 log.info("id为{}的大计划不存在", planId); 79 throw new ErrorException("该团队计划不存在"); 80 } 81 if (plan.getUserId().equals(userPo.getUserId())) { 82 //说明该计划是用户创建的 83 planMapper.deletePlanByPlanId(planId); 84 return true; 85 } 86 else { 87 log.info("id为{}的大计划不是用户{}所创建的", planId, userPo.getUserId()); 88 throw new ErrorException("该计划不是您创建的,您无权限删除"); 89 } 90 } 91 92 93 //团队权限校验方法 94 private Boolean groupPermission(Integer groupId, Integer userId) { 95 //查看该团队是否存在 96 if (VerifyUtil.isNull(groupMapper.getGroupByGroupId(groupId))) { 97 log.info("id为{}的团队不存在", groupId); 98 throw new ErrorException("该团队不存在"); 99 } 100 //判断该成员是否在该团队中 101 List<Member> memberList = memberMapper.getMemberByGroupId(groupId); 102 for (Member member : memberList) { 103 //说明该成员在团队中 104 if (member.getMemberId().equals(userId)) { 105 return true; 106 } 107 } 108 return false; 109 }
个人设置部分(前端代码):
1 <style scoped lang="scss"> 2 .plan-list { 3 position: relative; 4 margin: 8.5em auto 0 auto; 5 padding: 2em 0 1em 0; 6 width: 95%; 7 font-size: 16px; 8 border-radius: 15px; 9 background-color: rgba(255, 251, 220, 0.8); 10 .top { 11 position: absolute; 12 top: -2em; 13 height: 4em; 14 width: 100%; 15 line-height: 4em; 16 color: #ffd600; 17 .date { 18 display: inline-block; 19 width: 45%; 20 font-size: 18px; 21 text-align: center; 22 background-position: 60% -0.15em; 23 background-repeat: no-repeat; 24 background-size: auto 100%; 25 background-image: url(../../../../static/images/fish3.png); 26 } 27 .name { 28 display: inline-block; 29 width: 55%; 30 font-size: 18px; 31 } 32 } 33 .dataCon { 34 .list { 35 display: flex; 36 align-items: center; 37 margin: 0.5em 0; 38 .startTime { 39 display: inline-block; 40 width: 25%; 41 text-align: center; 42 color: #111; 43 font-weight: bold; 44 } 45 .taskName { 46 display: inline-block; 47 width: 75%; 48 text-align: left; 49 color: #666; 50 .lastTime { 51 color: #999; 52 } 53 } 54 } 55 .done { 56 text-decoration: line-through; 57 } 58 } 59 } 60 </style> 61 62 <template> 63 <div class="plan-list"> 64 <div class="top"> 65 <div class="date">4月5日</div> 66 <div class="name">{{title}}</div> 67 </div> 68 <div class="dataCon"> 69 <div class="list" :class="{'done': item.status}" v-for="(item, index) in scheduleList" :key="index"> 70 <span class="startTime">{{item.startTime}}</span> 71 <span class="taskName"> 72 {{item.taskName}} 73 <span class="lastTime">(预计耗时:{{item.lasting}}分钟)</span> 74 </span> 75 </div> 76 </div> 77 </div> 78 </template> 79 80 <script> 81 export default { 82 props: { 83 scheduleList: Object 84 }, 85 data() { 86 return { 87 title: '今天啥也不想干', 88 89 }; 90 }, 91 methods: {}, 92 mounted() { 93 console.log(this.scheduleList); 94 } 95 }; 96 </script>
4.2 运行截图
五、成员每日总结
成员 |
小结 |
郭沛 |
由于其他科目作业较多,导致目前进度稍微延迟了一点,后续会合理安排好时间,保证项目进度! |
柴政 |
最后几天继续改进吧 |
洪梓豪 |
需要学习的东西还有很多 |
王树干 |
最近事情较多,有点难专心开发,接下来要给自己腾点空白时间来专心敲码 |
黎其钻 |
修改了页面的数据流 |
简蕙兰 |
噜噜噜噜噜噜… |