第2篇 Scrum 冲刺博客

一、站立式会议

1.1 会议照片

 

1.2 成员完成情况

成员

 昨天完成的任务

 今天计划完成的任务

 工作中的困难

郭沛

完成第一篇Scrum冲刺博客撰写以及测试登录接口

团队的创建、解散

 postman接口文档编写规范上出现格式问题

柴政

将三种排序算法应用内部类的比较器汇集入同一排序业务类中,前端需要的新任务列表生成功能完成

完成了第一版的三种算法设计

 在编码过程中花费额外时间加深对日期日历类的学习;同时发现自己的代码模块调用逻辑比较混乱,于是进行了修改

洪梓豪

完成个人计划文档的书写

消息推送

 消息推送不是很熟悉,需要查找资料

王树干

完善日程静态页面

对接后端接口,完善日程功能

代码比较冗余,规范性不够

黎其钻

 

完善了设置界面,正在搞登陆校验和权限

完成团队的创建和删除

 

框架不会用,很多地方忘了

 

简蕙兰

打开XD看了看,喔好丑鸭,于是改了一丢丢颜色。

打开XD看一看,UI会不会比昨天顺眼

每天都嫌弃昨天的作品,每天都想从头再来


二、项目燃尽图

 


三、成员代码/文档签入记录

3.1 代码签入

后台

前端

3.2 Issue链接

成员  Issue链接
郭沛
柴政
洪梓豪
王树干
黎其钻
简蕙兰

(设计好像没有这玩意儿)

 

 

3.3 CodeReview代码规范文档

 


四、最新项目程序/模块

4.1 程序代码

个人计划部分(后台代码):

  1 /**
  2  * @author Red Date.
  3  * @date 2020/5/9 13:00
  4  */
  5 @Service
  6 @Log4j2
  7 public class PersonalPlanServiceImpl implements PersonalPlanService {
  8 
  9     @Resource
 10     private PlanMapper planMapper;
 11     @Resource
 12     private TaskMapper taskMapper;
 13 
 14     /**
 15      * 获取个人计划的内容
 16      * @param planId 计划的id
 17      * @return 个人计划的内容
 18      */
 19     @Override
 20     public PlanVo getPersonalPlan(Integer planId) {
 21         Plan plan = planMapper.getPlanByPlanId(planId);
 22         if(VerifyUtil.isNull(plan)){
 23             log.info("{}该计划不存在",planId);
 24             throw new ErrorException("该计划"+planId+"不存在");
 25         }
 26         List<Task> taskList = taskMapper.getTaskByPlanId(planId);
 27         PlanVo planVo = new PlanVo();
 28         BeanUtils.copyProperties(plan,planVo);
 29         planVo.setTaskList(taskList);
 30         log.info("获取计划:{}的内容成功",planId);
 31         return planVo;
 32     }
 33 
 34     /**
 35      * 添加个人计划
 36      *
 37      * @param personalPlanVo 个人计划内容
 38      * @return 插入的内容
 39      */
 40     @Transactional
 41     @Override
 42     public PlanVo insertPersonalPlan(PlanVo personalPlanVo) {
 43         Plan plan = new Plan();
 44         plan.setType(0);
 45         BeanUtils.copyProperties(personalPlanVo,plan);
 46         if(planMapper.insertPlan(plan)!=1){
 47             log.info("个人计划插入数据库失败,可能部分字段为空");
 48             throw new ErrorException("系统出现异常,请稍后重试");
 49         }
 50         List<Task> taskList = personalPlanVo.getTaskList();
 51         List<Task> result = new ArrayList<>();
 52         for (Task task : taskList){
 53             task.setPlanId(plan.getPlanId());
 54             task.setUserId(personalPlanVo.getUserId());
 55             if(taskMapper.insertTask(task)!=1){
 56                 log.info("子任务插入数据库失败");
 57                 throw new ErrorException("系统出现异常,请稍后重试");
 58             }
 59             result.add(task);
 60         }
 61         personalPlanVo.setPlanId(plan.getPlanId());
 62         personalPlanVo.setTaskList(result);
 63         return personalPlanVo;
 64     }
 65 
 66     /**
 67      * 修改个人计划的内容
 68      * @param personalPlanVo 个人计划的内容
 69      * @return 修改后的内容
 70      */
 71     @Transactional
 72     @Override
 73     public PlanVo updatePersonalPlan(PlanVo personalPlanVo) {
 74         if(planMapper.updatePlanByPlanId(personalPlanVo.getPlanName(),personalPlanVo.getPlanId()) != 1){
 75             log.info("计划{}修改失败",personalPlanVo.getPlanId());
 76             throw new ErrorException("系统出现异常,请稍后重试");
 77         }
 78         for (Task task:personalPlanVo.getTaskList()){
 79             if(taskMapper.updateTask(task) != 1){
 80                 log.info("子计划{}修改失败",task.getTaskId());
 81                 throw new ErrorException("系统出现异常,请稍后重试");
 82             }
 83         }
 84         return personalPlanVo;
 85     }
 86 
 87     /**
 88      * 删除个人计划
 89      * @param planId 个人计划的id
 90      * @return 是否删除成功,成功返回true
 91      */
 92     @Override
 93     public boolean deletePersonalPlan(Integer planId) {
 94         if(planMapper.deletePlanByPlanId(planId)!=1){
 95             log.info("该个人计划{}不存在",planId);
 96             throw new ErrorException("该个人计划:"+planId+"不存在");
 97         }
 98         log.info("个人计划{}删除成功",planId);
 99         return true;
100     }
101 
102     /**
103      * 删除子任务
104      * @param taskId 子任务的id
105      * @return 是否删除成功,成功返回true
106      */
107     @Override
108     public boolean deleteTask(Integer taskId) {
109         if(taskMapper.deleteTaskByTaskId(taskId)!=1){
110             log.info("该子任务不存在{}",taskId);
111             throw new ErrorException("该子任务:"+taskId+"不存在");
112         }
113         log.info("子任务{}删除成功",taskId);
114         return true;
115     }
116 }

日程表子任务部分(前端代码):

  1 <style scoped lang="scss">
  2 .xiala {
  3   position: absolute;
  4   top: 0;
  5   left: 20%;
  6   width: 2em;
  7   height: 90%;
  8   .line {
  9     position: absolute;
 10     top: 0;
 11     right: 75%;
 12     width: 2px;
 13     height: 100%;
 14     background: #ffe55e;
 15   }
 16   .gou {
 17     display: block;
 18     position: absolute;
 19     bottom: -2em;
 20     right: 0;
 21     width: 2em;
 22     height: 2em;
 23     transform-style: preserve-3d;
 24     transform: rotateY(-180deg);
 25   }
 26 }
 27 </style>
 28 
 29 <template>
 30   <div class="schedule">
 31     <div class="xiala">
 32       <div class="line"></div>
 33       <img class="gou" src="../../../static/images/gou.png" />
 34     </div>
 35     <mylist v-if="scheduleList" :scheduleList="scheduleList"></mylist>
 36     <mypicker></mypicker>
 37   </div>
 38 </template>
 39 
 40 <script>
 41 // Use Vuex
 42 import store from "./store";
 43 import mylist from "./mylist/mylist.vue";
 44 import mypicker from "./mypicker/mypicker.vue";
 45 
 46 export default {
 47   data() {
 48     return {
 49       scheduleList: null
 50     };
 51   },
 52   computed: {},
 53   methods: {
 54     prefixInteger(num, n) {
 55       return (Array(n).join(0) + num).slice(-n);
 56     },
 57     // 格式化发送给后台的日期字符串
 58     handleTime(obj) {
 59       let date = obj;
 60       if (!date) {
 61         date = new Date();
 62       }
 63       let year = date.getFullYear();
 64       let month = this.prefixInteger(date.getMonth() + 1, 2);
 65       let day = this.prefixInteger(date.getDate(), 2);
 66       return `${year}-${month}-${day}`;
 67     },
 68     // 处理日程列表里面开始时间的显示格式
 69     handleStartTime(scheduleList) {
 70       let len = scheduleList.length;
 71       for (let i = 0; i < len; i++) {
 72         let time = new Date(scheduleList[i].startTime);
 73         scheduleList[i].start_time = `${time.getHours()}:00`;
 74       }
 75     },
 76     getSchedule() {
 77       let send = {
 78         algorithm: store.state.algorithm,
 79         date: this.handleTime(store.state.date)
 80       };
 81       console.log("获取日程列表,发送:", send);
 82       setTimeout(() => {
 83         let res = [
 84           {
 85             taskId: 1,
 86             taskName: "安康打卡",
 87             lasting: 20,
 88             startTime: "2020-12-11 07:00:00",
 89             status: 1
 90           },
 91           {
 92             taskId: 2,
 93             taskName: "测试测试测试测试测试",
 94             lasting: 20,
 95             startTime: "2020-12-11 08:00:00",
 96             status: 0
 97           },
 98           {
 99             taskId: 3,
100             taskName:
101               "测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试",
102             lasting: 20,
103             startTime: "2020-12-11 08:30:00",
104             status: 1
105           }
106         ];
107         this.handleStartTime(res);
108         this.scheduleList = res;
109       }, 1000);
110     }
111   },
112   components: {
113     mylist,
114     mypicker
115   },
116   mounted() {
117     this.getSchedule();
118   }
119 };
120 </script>

4.2 运行截图

 


五、成员每日总结

 

成员

小结

郭沛

今天是Scrum冲刺阶段的第一天,学习了燃尽图意义,完成每日开发任务,很充实!

柴政

编写自己模块的同时不断学习他人好的代码规范,充实又有进步。

洪梓豪

了解了后台如何主动给前端推送消息

王树干

今天事情比较多,整体构思比较多,敲的代码比较少

黎其钻

今天写了n个bug,改了n+1个bug

简蕙兰

今天又画了奇奇怪怪的东西!

 

 

猜你喜欢

转载自www.cnblogs.com/Allforward/p/12940338.html