一、站立式会议
1.1 会议照片
1.2 成员完成情况
成员 |
昨天完成的任务 |
今天计划完成的任务 |
工作中的困难 |
郭沛 |
团队的创建与解散 |
团队成员编辑(增加和删除) |
主要是团队成员权限的校验问题 |
柴政 |
三种算法初版设计 |
与其他模块进行一部分对接 |
要抽空编码 |
洪梓豪 |
学习了一部分消息队列的知识 |
继续学习消息队列 |
需要学习新的知识 |
王树干 |
完善日程模块 |
根据最新版的日程设计稿完善了页面 |
其他课程作业较多,开发时间较少 |
黎其钻 |
完成了团队创建和管理页面 |
完成团队队伍管理和任务列表 |
第三方组件库的组件太少了,好多都要自己写 |
简蕙兰 |
再次检查了UI |
添加了“设置-关于我们”页面 |
作业好多…实验好烦…课设好难… |
二、项目燃尽图
三、成员代码/文档签入记录
3.1 代码签入
后台:
前端:
3.2 Issue链接
成员 | Issue链接 |
郭沛 | |
柴政 | |
洪梓豪 | |
王树干 | |
黎其钻 | |
简蕙兰 |
(设计好像没有这玩意儿) |
3.3 CodeReview代码规范文档
四、最新项目程序/模块
4.1 程序代码
团队成员编辑部分(后台代码):
1 @Service
2 @Log4j2
3 public class GroupServiceImpl implements GroupService {
4
5 @Resource
6 private MemberMapper memberMapper;
7
8 @Resource
9 private GroupMapper groupMapper;
10
11 @Resource
12 private PlanMapper planMapper;
13
14 @Resource
15 private TaskMapper taskMapper;
16
17 @Resource
18 private WechatMapper wechatMapper;
19
20 @Override
21 public GroupVo updateMember(MemberVo memberVo, UserPo userPo) throws Exception {
22
23 if (VerifyUtil.isNull(memberVo) || VerifyUtil.isEmpty(memberVo.getGroupId())
24 || VerifyUtil.isEmpty(memberVo.getUserId()) || VerifyUtil.isEmpty(memberVo.getType())) {
25 log.info("前端传过来的参数为空");
26 throw new ErrorException("网络传输异常,请重试");
27 }
28 if (!memberVo.getType().equals("add") && !memberVo.getType().equals("delete")) {
29 log.info("传输的类型type错误");
30 throw new ErrorException("请选择正确的修改成员列表的方式");
31 }
32 Group group = groupMapper.getGroupByGroupId(memberVo.getGroupId());
33 Member member = new Member();
34 member.setGroupId(memberVo.getGroupId());
35 member.setMemberId(memberVo.getUserId());
36 //先判断是要删除还是添加成员
37 if (memberVo.getType().equals("add")) {
38 //说明是添加成员
39 //判断下是否已经达到上限
40 if (memberMapper.getGroupMemberNum(memberVo.getGroupId()) < group.getLimit()) {
41 if (memberMapper.insertMember(member) != 1) {
42 log.info("将id为{}的成员添加到Id为{}的队伍失败", member.getMemberId(), member.getGroupId());
43 throw new ErrorException("服务器异常,请重试");
44 }
45 }
46 else {
47 log.info("Id为{}的队伍人员已满", group.getGroupId());
48 throw new ErrorException("该团队成员数量已达上限");
49 }
50 }
51 if (memberVo.getType().equals("delete")) {
52 //说明是删除成员,需要先校验执行该操作人的身份-->若为群主则可以删除别人||或者本人自己想退出该团队
53 if (group.getCreatorId().equals(userPo.getUserId()) || member.getMemberId().equals(userPo.getUserId())) {
54 //说明是群或者本人想退群,则有权限
55 if (memberMapper.deleteGroupMember(member) != 1) {
56 log.info("将id为{}的成员从Id为{}的队伍剔除失败", member.getMemberId(), member.getGroupId());
57 throw new ErrorException("服务器异常,请重试");
58 }
59 }
60 else {
61 log.info("{}的成员无权限将{}的成员从{}的队伍中剔除", userPo.getUserId(), member.getMemberId(),
member.getGroupId());
62 throw new ErrorException("您没有权限将该成员踢出本团队");
63 }
64 }
65 //Todo 将返回的数据进行完善
66 GroupVo groupVo = new GroupVo();
67 groupVo.setGroupId(memberVo.getGroupId());
68 groupVo.setGroupName(group.getGroupName());
69 List<Plan> planList = planMapper.getPlanByType(memberVo.getGroupId());
70 for (Plan plan : planList) {
71 plan.setTaskList(taskMapper.getTaskByPlanId(plan.getPlanId()));
72 }
73 groupVo.setGroupPlanList(planList);
74 List<Member> memberList = memberMapper.getMemberByGroupId(memberVo.getGroupId());
75 List<UserPo> memberVoList = new LinkedList<>();
76 for (Member m : memberList) {
77 UserPo user = wechatMapper.getUserByUserId(m.getMemberId());
78 memberVoList.add(user);
79 }
80 groupVo.setGroupMemberList(memberVoList);
81 groupVo.setLimit(group.getLimit());
82 return groupVo;
83 }
84
85 /**
86 * 新增团队
87 * @param group
88 * @param userPo
89 * @return
90 */
91 @Override
92 public GroupVo addGroup(Group group, UserPo userPo) {
93 if (VerifyUtil.isEmpty(group.getGroupName()) || VerifyUtil.isEmpty(group.getLimit())) {
94 log.info("前端传过来的参数不完整");
95 throw new ErrorException("请将数据填写完整");
96 }
97 group.setCreatorId(userPo.getUserId());
98 groupMapper.insertGroup(group);
99 //将创建者本人加入到该团队中
100 memberMapper.insertMember(new Member(group.getGroupId(), userPo.getUserId()));
101 group = groupMapper.getGroupByGroupId(group.getGroupId());
102 GroupVo groupVo = new GroupVo();
103 groupVo.setGroupId(group.getGroupId());
104 groupVo.setGroupName(group.getGroupName());
105 groupVo.setCreatorId(group.getCreatorId());
106 groupVo.setLimit(group.getLimit());
107 groupVo.setGroupPlanList(null);
108 List<Member> memberList = memberMapper.getMemberByGroupId(group.getGroupId());
109 List<UserPo> memberVoList = new ArrayList<>();
110 for (Member member :
111 memberList) {
112 UserPo user = wechatMapper.getUserByUserId(member.getMemberId());
113 memberVoList.add(user);
114 }
115 groupVo.setGroupMemberList(memberVoList);
116 return groupVo;
117 }
118
119 /**
120 * 删除团队
121 * @param groupId
122 * @param userPo
123 * @return
124 */
125 @Override
126 public String deleteGroup(Integer groupId, UserPo userPo) {
127 //判断该团队是否存在
128 Group group = groupMapper.getGroupByGroupId(groupId);
129 if (group != null) {
130 //判断该成员是否为创建者
131 if (group.getCreatorId().equals(userPo.getUserId())) {
132 groupMapper.deleteGroupByGroupId(groupId);
133 return "success";
134 }
135 else {
136 log.info("用户{}无权限删除id为{}的团队", userPo.getName(), groupId);
137 throw new ErrorException("您不是该团队创建者,无权限删除该团队");
138 }
139 }
140 else {
141 log.info("团队id为{}不存在", groupId);
142 throw new ErrorException("该团队不存在");
143 }
144 }
145 }
日程表子任务部分(前端代码):
1 <template>
2 <div class="team">
3 <div class="list">
4 <TeamCard :state="'create'" />
5 <TeamCard :state="'edit'" />
6 </div>
7 </div>
8 </template>
9
10 <script>
11 // Use Vuex
12 import store from './store'
13 import PlanList from './component/PlanList'
14 import TeamCard from './component/TeamCard'
15 export default {
16 data() {
17 return {
18 teamData: {
19 group_id: 1232,
20 group_name: '攻城狮',
21 creator_id: 'zuan',
22 limit: 5
23 },
24 toDoList: [],
25 memberList: [
26 {_id: 1, nickName: '钻', avatarUrl: '../user.png'},
27 {_id: 2, nickName: '树', avatarUrl: '../user.png'},
28 {_id: 3, nickName: '沛', avatarUrl: '../user.png'},
29 {_id: 4, nickName: '政', avatarUrl: '../user.png'},
30 {_id: 5, nickName: '兰', avatarUrl: '../user.png'},
31 ]
32 }
33 },
34 components: {
35 PlanList,
36 TeamCard
37 },
38 computed: {
39 },
40 methods: {
41 createTeam() {
42 return
43 },
44 exitTeam() {},
45 addMember() {},
46 removeMember() {}
47 },
48 created() {
49
50 },
51 }
52 </script>
53 <style>
54 </style>
4.2 运行截图
五、成员每日总结
成员 |
小结 |
郭沛 |
今天主要是继续写一些业务代码并对每个接口进行测试,同时撰写第三篇冲刺博客,希望继续保持状态!加油! |
柴政 |
今天主要复习了操作系统关于算法部分的课程,并对算法进行优化 |
洪梓豪 |
今天主要学习了消息队列的知识 |
王树干 |
今天还是在完善日程部分,准备开始对接后台接口 |
黎其钻 |
今天依然是想回学校的一天,家里效率太低了,而且使用组件库的过程中发现很多bug,还是自己写的东西靠谱 |
简蕙兰 |
神情恍惚的周六,这就是996的福报吗? |