【Alpha阶段】第七次Scrum Meeting

【Alpha阶段】第七次Scrum Meeting

这个作业属于哪个课程 软件工程
这个作业要求在哪里 作业要求
这个作业的目标 会议+项目燃尽图+成员代码/文档签入记录+每人每日总结

Github仓库链接

团队队员

学号 姓名
3119005415 黄奕威
3219005447 连婉玲
3119005417 黄智权
3119005431 欧智昕
3219005448 刘淑婷
3119005410 冯波昌
3219005445 何婉莹

一、例会图片

例会图片

二、Burndown Chart

完成

三、代码/文档签入记录

代码签入

四、项目进度

队员 昨日已完成任务 任务概述 今日待完成任务
黄奕威 完成了最主要的战斗交互逻辑 · Issue #39 完成精灵对战的交互逻辑,目前还需要对动画进行优化 明日继续优化前端交互效果,出现部分小bug,明日解决
连婉玲 最后冲刺 · Issue #35 编写博客 讨论后续安排
黄智权 收尾阶段 · Issue #38 和前端的小伙伴对接了一下主要接口功能,完善精灵战斗中的行为定义 项目收尾阶段,准备进行测试
欧智昕 最后阶段· Issue #40 与精灵类的对接 根据需要对精灵类进行功能的增删改
刘淑婷 收尾 · Issue #36 重新修改参数校验的信息显示,请求method的异常处理,修改精灵类字段的修饰符 根据交互的错误来修改
冯波昌 最后冲刺 · Issue #32 编写博客,和其他小伙伴讨论项目进程 帮忙测试
何婉莹 收尾· Issue #34 新增战斗结果上传接口 与队员讨论后续安排,查漏补缺

五、最新模块代码

config(点击查看)
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import ruangong.our_land.model.ResultInfo;

import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import java.util.HashMap;
import java.util.List;
import java.util.Set;

/**
 * @Author: Lsutin
@@ -31,13 +27,9 @@
     */
    @ExceptionHandler(BindException.class)
    public ResultInfo bindExceptionHandler(BindException e){
        HashMap<String, String> map = new HashMap<>();
        List<FieldError> fieldErrors = e.getFieldErrors();
        for (FieldError fieldError:fieldErrors){
            map.put(fieldError.getField(),fieldError.getRejectedValue()+","+fieldError.getDefaultMessage());
        }
        log.warn("参数错误:{}",map);
        return ResultInfo.error(map);
        String error=e.getFieldError().getDefaultMessage();
        log.warn("参数错误:{}",error);
        return ResultInfo.error(error);
    }

    /**
@@ -47,14 +39,9 @@ public ResultInfo bindExceptionHandler(BindException e){
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResultInfo methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e){
        BindingResult result = e.getBindingResult();
        HashMap<String, String> map = new HashMap<>();
        List<FieldError> fieldErrors = result.getFieldErrors();
        for (FieldError fieldError:fieldErrors){
            map.put(fieldError.getField(),fieldError.getRejectedValue()+","+fieldError.getDefaultMessage());
        }
        log.warn("参数错误:{}",map);
        return ResultInfo.error(map);
        String error=e.getFieldError().getDefaultMessage();
        log.warn("参数错误:{}",error);
        return ResultInfo.error(error);
    }

    /**
@@ -64,14 +51,25 @@ public ResultInfo methodArgumentNotValidExceptionHandler(MethodArgumentNotValidE
     */
    @ExceptionHandler(ConstraintViolationException.class)
    public ResultInfo constraintViolationExceptionHandler(ConstraintViolationException  e){
        Set<ConstraintViolation<?>> set = e.getConstraintViolations();
        HashMap<String, String> map = new HashMap<>();
        for (ConstraintViolation violation:set){
            String path = violation.getPropertyPath().toString();
            map.put(path.substring(path.lastIndexOf(".")+1),violation.getMessage());
        String error="";
        System.out.println(e.getMessage());
        for (ConstraintViolation violation:e.getConstraintViolations()){
            error=violation.getMessage();
            break;
        }
        log.warn("参数错误:{}",map);
        return ResultInfo.error(map);
        log.warn("参数错误:{}",error);
        return ResultInfo.error(error);
    }

    /**
     * 用于请求的method是否正确
     * @param e
     * @return
     */
    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
    public ResultInfo httpRequestMethodNotSupportedExceptionHandler(HttpRequestMethodNotSupportedException e){
        System.out.println(e.getMethod());
        return ResultInfo.error(e.getMessage());
    }

    /**
UseMapper(点击查看)
package ruangong.our_land.mapper;

import org.apache.ibatis.annotations.Param;
import ruangong.our_land.model.user.User;
import ruangong.our_land.model.user.UserProp;
import ruangong.our_land.model.user.UserSpirit;

import java.util.List;
import java.util.Map;

/**
 * @Author: Lsutin
 * @Date: 2021/11/2 14:35
 * @describe:
 */
public interface UserMapper {

    /**
     * 根据用户名获取用户实体
     * @param uName 用户名
     * @return
     */
    User findByName(@Param("uName") String uName);

    /**
     * 根据用户id获取用户实体
     * @param uId 用户id
     * @return
     */
    User findById(@Param("uId") Integer uId);

    /**
     * 添加用户
     * @param uName 用户名
     * @param uPwd 用户密码
     * @return
     */
    Integer insertUser(@Param("uName") String uName,
                       @Param("uPwd") String uPwd);

    /**
     * 更新用户
     * @param param 参数map
     * @return
     */
    Integer updateUser(Map<String, Object> param);

    /**
     * 根据用户id获取拥有道具
     * @param uId 用户id
     * @return
     */
    List<UserProp> findProp(@Param("uId") Integer uId);

    /**
     * 根据用户id获取拥有精灵
     * @param uId 用户id
     * @return
     */
    List<UserSpirit> findSpirit(@Param("uId") Integer uId);

    /**
     * 用户添加精灵
     * @param uId 用户id
     * @param sId 精灵id
     * @return
     */
    Integer insertUserSpirit(@Param("uId") Integer uId,
                             @Param("sId") Integer sId);

} }
}
SpiritController(点击查看)
   
package ruangong.our_land.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import ruangong.our_land.model.ResultInfo;
import ruangong.our_land.model.spirit.Spirit;
import ruangong.our_land.model.spirit.boss.Boss;
import ruangong.our_land.model.spirit.monster.Monster;
import ruangong.our_land.model.user.User;
import ruangong.our_land.model.user.UserSpirit;
import ruangong.our_land.service.SpiritService;
import ruangong.our_land.service.UserService;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @Author hwy
 * @Date 2021/11/26
 */

@RestController
@RequestMapping("/spirit")
public class SpiritController {

    @Resource
    private SpiritService spiritService;

    @Resource
    private UserService userService;

    /**
     * 获取战斗信息
     * @param uId 用户id
     * @param bossId 关卡的怪物id
     * @return
     */
    @PostMapping("/getInfo")
    public ResultInfo getBattleInfo(@RequestParam("userId") @Valid Integer uId,
                                    @RequestParam("bossId") @Valid Integer bossId){
        Boss bossInfo = spiritService.findBoss(bossId);
        List<Integer> sIdList = userService.findSpirit(uId).stream().map(UserSpirit::getS_id).collect(Collectors.toList());
        List<Monster> userInfo = new ArrayList<>();
        for (Integer sId : sIdList) {
            userInfo.add(spiritService.findMonster(sId));
        }
        Map<String, Object> map = new HashMap<>();
        map.put("bossInfo", bossInfo);
        map.put("userInfo", userInfo);
        return ResultInfo.success(map);
    }

    /**
     * 战斗结果上传
     * @param uId 用户id
     * @param bossId 关卡的怪物id
     * @param isWin 战斗是否胜利
     * @param isCatch 精灵是否被捕捉
     * @return
     */
    @PostMapping("/save")
    public ResultInfo uploadResult(@RequestParam("userId") @Valid Integer uId,
                                   @RequestParam("bossId") @Valid Integer bossId,
                                   Boolean isWin,
                                   Boolean isCatch){
        User user = userService.findById(uId);
        if (user != null){
            if (isWin){
                Boss boss = spiritService.findBoss(bossId);
                Monster monster = spiritService.findMonster(bossId);
                Map<String, Object> param = new HashMap<>();
                param.put("uId", uId);
                param.put("uProgress", user.getProgress() + 1);
                if (boss != null){
                    param.put("uExp", user.getExp() + boss.getExp());
                    userService.updateUser(param);
                }else if (monster != null){
                    param.put("uExp", user.getExp() + monster.getExp());
                    userService.updateUser(param);
                }else {
                    return ResultInfo.success("上传失败:怪物id有误");
                }
            }
            if (isCatch){
                List<Integer> sIdList = userService.findSpirit(uId).stream().map(UserSpirit::getS_id).collect(Collectors.toList());
                if (!sIdList.contains(bossId)){
                    userService.insertUserSpirit(uId, bossId);
                }else {
                    return ResultInfo.success("背包已存在该精灵");
                }
            }
        }else {
            return ResultInfo.success("上传失败:用户id有误");
        }
        return ResultInfo.success("战斗结果已上传");
    }

}

六、遇到的困难

进展顺利,暂时没遇到什么困难

七、每人每日总结

黄奕威:今天完成了最主要的战斗交互逻辑,但还有小部分bug需要解决

连婉玲:终于结束了,感觉这几天学到了很多

黄智权:多善于总结经验,才能避免下次再犯

欧智昕:完成了与同伴的对接,明天再继续改善设计

刘淑婷:今天进行了测试,排查修改了些bug,接下来继续完善

冯波昌:完成了最后的冲刺,接下来再与小伙伴讨论一下项目进程

何婉莹:顺利完成了今天的任务,之后再与队员讨论后续安排,查漏补缺

posted @ 2021-11-27 10:04  LianWL824  阅读(38)  评论(0编辑  收藏  举报