项目冲刺三总结


前言

在本冲刺我主要负责的是项目这一模块,其中包含了项目、冲刺、用户故事、任务以及燃尽图的增删改查,在刚开始设计数据库的时候没有想得很全面,所有导致后面的修改较为麻烦,但这也是宝贵的经验,知道自己在设计方面还存在哪方面的问题,后续加以改正。


一、修改冲刺

注意:当该冲刺状态不是未开始都不能修改开始和完成时间、修改完成时要判断冲刺下的用户故事是否对已完成。

/**
     * 修改冲刺
     * @param spurt
     * @return
     */
    @RequestMapping("/updateSpurt")
    @ResponseBody
    public ResultInfo updateSpurt(@RequestBody Spurt spurt) throws ParseException {
        ResultInfo info=spurtService.updateSpurt(spurt);
        return info;
    }
/**
     * 修改冲刺(当该冲刺状态不是未开始都不能修改开始和完成时间)
     * @param spurt
     * @return
     */
    @Override
    public ResultInfo updateSpurt(Spurt spurt){
        ResultInfo info=new ResultInfo();
        info.setFlag(true);
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Date startTime = null;
        Date endTime=null;
        List<Date> betweenDates=null;
        try {
            if (spurt.getStartTime()!=null&&spurt.getEndTime()!=null){
                startTime = sdf.parse(spurt.getStartTime());
                endTime = sdf.parse(spurt.getEndTime());
                betweenDates = getBetweenDates(startTime, endTime);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        try {
            Spurt spurtById=spurtMapper.selectSpurtBySpurtId(spurt.getId());
            if(spurt.getStatus().equals("2")){
                //根据冲刺id计算总数
                int totalCount=userStoryMapper.selectCountTotal(spurt.getId());
                //根据冲刺id计算完成的总数
                int totalFinish=userStoryMapper.selectFinishTotal(spurt.getId());
                if (totalCount==totalFinish){
                    spurtMapper.updateSpurt(spurt);
                }else {
                    info.setFlag(false);
                    info.setErrorMsg("修改冲刺完成失败,请先完成当前冲刺下所有的用户故事!");
                    return info;
                }
            }
            if (betweenDates==null){
                spurt.setStartTime(null);
                spurt.setEndTime(null);
                spurtMapper.updateSpurt(spurt);
            }else {
                if (spurtById.getStatus().equals("3")){
                    //根据冲刺id删除时间
                    burnDownMapper.deleteBurnDownBySpurtId(spurt.getId());
                    //1.添加日期为开始的燃尽图
                    burnDownMapper.addStartBurnDown(spurt.getId());
                    for (Date betweenDate : betweenDates) {
                        //依次添加冲刺时间段的燃尽图
                        burnDownMapper.addBurnDown(sdf.format(betweenDate), spurt.getId());
                    }
                    spurtMapper.updateSpurt(spurt);
                }else {
                    spurt.setStartTime(null);
                    spurt.setEndTime(null);
                    spurtMapper.updateSpurt(spurt);
                }
            }
        }catch (Exception e){
            info.setFlag(false);
            info.setErrorMsg("修改失败!");
            e.printStackTrace();
        }
        return info;
    }

二、修改用户故事

注意:当前用户故事下的所有任务全部完成时才能修改完成状态、如何修改当前用户的故事点那么也会修改燃尽图中的数据。

/**
     * 修改用户故事(修改状态已完成时需注意:当前用户故事下的所有任务全部完成时才能修改状态)
     * @param userStory
     * @return
     */
    @RequestMapping("/updateUserStoryById")
    @ResponseBody
    public ResultInfo updateUserStoryById(@RequestBody UserStory userStory){
        ResultInfo info=userStoryService.updateUserStoryById(userStory);
        return info;
    }
/**
     * 修改用户故事(修改已完成时需注意:当前用户故事下的所有任务全部完成时才能修改)
     * @param userStory
     * @return
     */
    @Override
    public ResultInfo updateUserStoryById(UserStory userStory) {
        ResultInfo info=new ResultInfo();
        info.setFlag(true);
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
        String currentDate = format.format(new Date());
        //返回当前日期
        Calendar cal = Calendar.getInstance();
        // 负数当前时间往前,正数是往后
        cal.add(Calendar.DATE, -1);
        Date d = cal.getTime();
        //前一天
        String beforeCurrent = format.format(d);

        //存储当前日期以及前面的日期
        List<String> list=new ArrayList<String>();
        try {
            //根据用户故事id查询原有的用户故事
            UserStory userStoryById = userStoryMapper.selectUserStoryById(userStory.getId());            //status=2:已完成
            if (!userStory.getStatus().equals("2")){
                //状态不为已完成时直接修改
                userStoryMapper.updateUserStoryById(userStory);
            }else {
                //判断当前用户故事下的任务是否都已完成
                //1.计算该用户故事下的任务总数
                int countTotal=taskMapper.selectCountByUserStoryId(userStory.getId());
                //2.计算该用户故事下的任务已完成的总数
                int totalFinish=taskMapper.selectCountByUserStoryIdAndFinish(userStory.getId());

                //3.判断
                if (countTotal==totalFinish){
                    if (countTotal==0){
                        userStory.setStatus(userStoryById.getStatus());
                    }
                    userStoryMapper.updateUserStoryById(userStory);
                    if (userStoryById.getSpurtId()!=0){
                        //根据冲刺id查询用户故事总数
                        int selectCountTotal = userStoryMapper.selectCountTotal(userStoryById.getSpurtId());
                        //根据冲刺id查询用户故事已完成总数
                        int finishTotal = userStoryMapper.selectFinishTotal(userStoryById.getSpurtId());
                        //判断是否全部完成
                        if (selectCountTotal==finishTotal){
                            spurtMapper.updateSpurtStatus(userStoryById.getSpurtId(),2);
                        }
                    }

                }else {
                    //避免修改到status
                    userStory.setStatus(userStoryById.getStatus());
                    userStoryMapper.updateUserStoryById(userStory);
                    info.setErrorMsg("修改已完成状态失败,请先完成当前用户故事下的所有任务!");
                }
            }
            //判断用户故事点是否改变
            if (userStory.getStoryPoint()!=0){
                //已改变
                //计算两个故事点的差值
                double count=userStory.getStoryPoint()-userStoryById.getStoryPoint();
                if (userStoryById.getSpurtId()!=0){
                    Spurt spurt = spurtMapper.selectSpurtBySpurtId(userStoryById.getSpurtId());
                    try {
                        List<Date> betweenDates = getBetweenDates(format.parse(spurt.getStartTime()), format.parse(spurt.getEndTime()));
                        for (Date betweenDate : betweenDates) {
                            list.add(format.format(betweenDate));
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                    //查询冲刺总时长
                    double startTotal = burnDownMapper.selectStartTotal(userStoryById.getSpurtId());
                    //修改燃尽图总时长
                    burnDownMapper.updateBurnDownByStart(startTotal + count, userStoryById.getSpurtId());
                    for (int i = 0; i < list.size(); i++) {
                        //根据日期查询总时长
                        double selectTotal = burnDownMapper.selectTotal(list.get(i), spurt.getId());
                        if (currentDate.equals(list.get(i))) {
                            if (selectTotal == 0) {
                                if (spurt.getStartTime().equals(list.get(i))) {
                                    beforeCurrent = "开始";
                                }
                                //查询前一天的总时长
                                double total = burnDownMapper.selectTotal(beforeCurrent, spurt.getId());
                                //修改当天的总时长
                                burnDownMapper.updateBurnDownTime(currentDate, total, spurt.getId());
                            } else {
                                burnDownMapper.updateBurnDownTime(currentDate, selectTotal + count, spurt.getId());
                            }
                            break;
                        } else {

                            burnDownMapper.updateBurnDownTime(list.get(i), selectTotal + count, spurt.getId());

                        }
                    }
                }

            } 


        }catch (Exception e){
            info.setFlag(false);
            info.setErrorMsg("修改失败!");
            e.printStackTrace();
        }
        return info;
    }

三、燃尽图

注意:每次修改用户故事的故事点、完成任务、删除任务等都会修改燃尽图的数据,所以每次操作都会很麻烦。这里我还有一个问题没有得到解决,那就是我希望每天都会调用查询燃尽图这个接口,但是可能会有人为影响,想有一个定时任务的功能。准备等到下一个冲刺解决。

/**
     * 根据冲刺id查询燃尽图
     * @param spurtId
     * @return
     */
    @RequestMapping("/selectBurnDownBySpurtId")
    @ResponseBody
    public ResultInfo selectBurnDownBySpurtId(@RequestParam("spurtId")int spurtId){
        ResultInfo info=burnDownService.selectBurnDownBySpurtId(spurtId);
        return info;
    }
 /**
     * 根据冲刺id查询燃尽图
     * @param spurtId
     * @return
     */
    @Override
    public ResultInfo selectBurnDownBySpurtId(int spurtId) {
        ResultInfo info=new ResultInfo();
        info.setFlag(true);
        //转换为年月日格式
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
        String currentDate = format.format(new Date());
        //返回当前日期
        Calendar cal = Calendar.getInstance();
        // 负数当前时间往前,正数是往后
        //当天的前一天日期
        cal.add(Calendar.DATE, -1);
        Date d = cal.getTime();
        String beforeOneCurrent = format.format(d);
        
        try {
            //根据冲刺id查询冲刺
            Spurt spurt = spurtMapper.selectSpurtBySpurtId(spurtId);
            try {
                Date parse = format.parse(currentDate);
                if (parse.after(format.parse(spurt.getEndTime()))){
                    currentDate=spurt.getEndTime();
                    beforeOneCurrent=spurt.getEndTime();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
            //查询当天的总时长
            double selectCurrentTotal = burnDownMapper.selectTotal(currentDate, spurtId);
            if (currentDate.equals(spurt.getStartTime())){
                beforeOneCurrent="开始";
            }
            //查询前一天的总时长
            double selectBeforeTotal = burnDownMapper.selectTotal(beforeOneCurrent, spurtId);
            //判断当天的总时长
            if (selectCurrentTotal==0){
                burnDownMapper.updateBurnDownTime(currentDate,selectBeforeTotal,spurtId);
            }
            List<BurnDown> burnDownList=burnDownMapper.selectBurnDownBySpurtId(spurtId);

            //
            List<BurnDown> list=new ArrayList<BurnDown>();
            for (BurnDown burnDown : burnDownList) {
                if (burnDown.getTime().equals(currentDate)){
                    list.add(burnDown);
                    break;
                }else {
                    list.add(burnDown);
                }
            }
            info.setData(list);
        }catch (Exception e){
            info.setFlag(false);
            info.setErrorMsg("查询失败!");
        }
        return info;
    }

总结

有冲刺二的经验,这次冲刺相对于就要简单一点,更熟悉业务逻辑以及团队合作,但是还是会遇到很多问题,不过经过自己的探索很多问题都能得到解决,所有期待下一次会做得更好。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值