逐梦校友圈——β冲刺day6
这个作业属于哪个课程 | <福州大学2021春软件工程实践S班> |
---|---|
这个作业要求在哪里 | 团队作业六——beta冲刺+事后诸葛亮 |
团队名称 | 逐梦校友圈 |
这个作业的目标 | β每日冲刺文档 |
SCRUM
任务总览
前端
- 昨日安排
任务 | 完成情况 |
---|---|
修复bug | 已完成 |
个人信息上传 | 已完成 |
对已排查bug进行修改 | 已完成 |
继续完成贴文详情界面 | 已完成 |
读取聊天数据及聊天 | 已完成 |
- 明日安排
任务 | 分派人员 |
---|---|
拉黑内容调用 | 茂基 |
学生证上传 | 语涵 |
修修评论bug | 炜华 |
完成帖子详情界面的评论部分 | 伟峰 |
测试 | 建斌 |
后端
- 昨日安排
任务 | 完成情况 |
---|---|
实现查找单个帖子详细信息接口 | 已完成 |
完成用户接收消息service、controller层代码 | 已完成 |
评论组局 | 已完成 |
- 明日安排
任务 | 分派人员 |
---|---|
测试 | 亮亮 |
完成剩余接口测试 | 海翔 |
对组局的整体部分查漏补缺 | 小螃蟹 |
成员描述
成员 | 昨日成就 | 存在问题 | 问题解决方案或描述 | 明日安排 |
---|---|---|---|---|
语涵104 | 身份验证图片上传界面和功能 (1.5h/3h) | 技术开拓 | 刚开始尝试了将头像上传和身份验证上传放在一个界面,后来认为将此放在我的界面更符合用户使用习惯,技术上图片上传还需要完善 | 身份验证图片上传界面和功能 |
建斌209 | 写读取聊天历史数据及聊天(5h) | 无 | 无 | 测试 |
茂基222 | 修改bug组件重新渲染后部分数据丢失 (3h) | 布局问题 | 布局太难了吧,没掌握精髓,好花时间 | 拉黑等内容的调用 |
炜华230 | 帖子详情界面具体内容显示已完成 (3h) | 详情划分 | 帖子详情界面内容较多,在研究应用上花了多个小时 | 完成帖子详情界面的评论部分 |
伟峰432 | 完善加入组局、组局踢人功能 (7h/9h) | 时间 | 时间时间时间,我需要更多时间 | 修修评论bug |
亮亮215 | 优化十大热帖查询、优化帖子按类别查询、修复十大热帖信息与当前用户不匹配的错误、实现根据帖子id查询帖子详情接口(200min) | 无 | 无 | 测试 |
海翔321 | 完成私聊前3个接口测试(35min) | 无 | 无 | 完成剩余接口测试 |
小螃蟹411 | 评论组局(2.5h) | 字段混淆 | 之前设计数据库表的时候没有设计id_To字段(也就是被回复用户的ID)导致我在实现将评论分级展示的时候逻辑有点混乱,后面还是队友帮我捋清楚思路。 | 对组局的整体部分查漏补缺 |
丫比125 | 项目督促,博客园撰写,询问详细版本信息,制订接下来的计划(1.5h) | 无 | 无 | 督促开发,博客园撰写,询问详细进度情况,进行扫尾工作。 |
内容展示
- 语涵104
- 完成issue
afterRead: function (event) {
const that = this;
console.log(event.detail.file.url);
this.setData({
fileList: [event.detail.file],
});
console.log(this.data.fileList)
this.submitImage();
},
submitImage:function (e) {
let that=this;
const file = that.data.fileList;
let promiseArr=[];
let imgServerUrls=new Array();
console.log(that.data.fileList);
file.forEach(function (e) {
var FSM = wx.getFileSystemManager();
let imageType=getApp().getImageType(e.url);
promiseArr.push(
new Promise(function (resolve,reject) {
FSM.readFile({
filePath: e.url,
encoding: "base64",
success: function (data) {
wx.request({
//获取图片信息
}
})
}
});
})
)
})
getPostList(){
let that = this;
let baseUrl = app.globalData.baseUrl;
request({ //调用接口获取个人帖子列表
url: baseUrl + '/api/user/post/list',
method:'GET',
success(res){
console.log(res);
if(res.data.code === 200){
let tempData = res.data.data.reverse(); //获取逆序列表
if(tempData!= null) {
for (let i = 0; i < tempData.length; i++) { //时间转换
tempData[i].gmtCreate = timeago.format(new Date(tempData[i].gmtCreate), 'zh_CN');
}
}
that.setData({
postList:tempData,
})
}
}
})
},
//处理组局成员
if (i < partyMemmberCntNow) {
// 判断是否是局长,如果是就赋值组长的配置
if (partyParticipantsId[i] == partyPublisherID) {
member.url = baseUrl + '/static/' + partyPublisherMsg.iconUrl;
member.isPublisher = true;
member.text = '局长';
//如果是自己,就赋值相应的配置
if (partyParticipantsId[i] == userId) {
member.myself = true;
member.text = '自己'
}
}
//不是组长,是组员的情况
else {
member = {
index: i,
url: this.data.memberIconUrl,
userId: participantsId[i],
isOccupied: true,
ifShow: false,
isPublisher: false,
myself: false,
text: '成员'
}
//如果当前用户已经是组员,赋值相应的配置
if (partyParticipantsId[i] == userId) {
member.myself = true;
member.text = '自己'
}
}
- 亮亮215
优化十大热帖热搜
-- 核心SQL语句,查询出点赞数前十的待连接的帖子信息,按点赞数降序,时间倒序排列,已连接发帖人昵称,帖子类名,需要继续连接其他相关信息
SELECT
post.id AS id,
post.publisher_id AS publisher_id,
post.`status` AS `status`,
post.post_type_id AS post_type_id,
post.message AS message,
post.image_urls AS image_urls,
post.gmt_create AS gmt_create,
post.gmt_modified AS gmt_modified,
post.deleted AS deleted,
`user`.username AS username,
post_type.`name` AS post_type_name,
#{currentUserId} AS currentUserId
FROM
post,
`user`,
post_type,
-- 查询点赞数最多的十个帖子的id和点赞数(用于排序)
(select
post_like.post_id,count(distinct post_like.id) as cnt
from post_like,post
where post_like.deleted = 0 and post_like.post_id = post.id and post.deleted = 0 and post.status=0
group by post_like.post_id
order by count(distinct post_like.id) desc
limit 0,10
) as top
WHERE
top.post_id = post.id AND
post.publisher_id = `user`.id AND
post.post_type_id = post_type.id
ORDER BY
top.cnt DESC,
gmt_create DESC,
id DESC
优化按类别查询
-- 核心SQL语句,查询指定类别的待连接的帖子信息,按时间倒序排列,已连接发帖人昵称,帖子类名,需要继续连接其他相关信息
SELECT
post.id AS id,
post.publisher_id AS publisher_id,
post.`status` AS `status`,
post.post_type_id AS post_type_id,
post.message AS message,
post.image_urls AS image_urls,
post.gmt_create AS gmt_create,
post.gmt_modified AS gmt_modified,
post.deleted AS deleted,
`user`.username AS username,
post_type.`name` AS post_type_name,
#{queryMap.currentUserId} AS currentUserId
FROM
post,
`user`,
post_type
WHERE
post.deleted = 0 AND
post.`status` = 0 AND
-- 指定帖子类别id
post.post_type_id = #{queryMap.typeId} AND
post.publisher_id = `user`.id AND
post.post_type_id = post_type.id
ORDER BY
gmt_create DESC,
id DESC
十大热帖与当前用户信息不符
if (user != null) {
Long id = user.getId();//获取当前用户id
- 海翔321
- 完成issue
@SpringBootTest
public class PrivateChatServiceImplTest {
@Autowired
PrivateChatServiceImpl privateChatService;
@Test
void listChatTest(){
Result<List<Map<String, Object>>> result = privateChatService.listChat(123456L);
System.out.println(result);
}
@Test
void clearListTest(){
Result<Integer> result = new Result<>();
result.setCode(ExceptionInfo.valueOf("OK").getCode());
result.setMessage(ExceptionInfo.valueOf("OK").getMessage());
result.setData(3);
Assertions.assertEquals(result,privateChatService.clearList(123456L));
}
@Test
void deleteOneTest(){
Result<Integer> result = new Result<>();
result.setCode(ExceptionInfo.valueOf("USER_DIALOG_ID_NULL").getCode());
result.setMessage(ExceptionInfo.valueOf("USER_DIALOG_ID_NULL").getMessage());
Assertions.assertEquals(result,privateChatService.deleteOne(123456L,null));
result.setCode(ExceptionInfo.valueOf("OK").getCode());
result.setMessage(ExceptionInfo.valueOf("OK").getMessage());
result.setData(1);
Assertions.assertEquals(result,privateChatService.deleteOne(123456L,3L));
}
}
- 小螃蟹411
//组局评论分级展示
for (PartyComment partyComment : partyComments) {
// 当前评论为父评论
if (partyComment.getId().equals(partyComment.getPreId())) {
Map<String, Object> map = new HashMap<>();
map.put("commentId", partyComment.getId());
map.put("commentUserId", partyComment.getIdFrom());
User user = userMapper.selectById(partyComment.getIdFrom());
map.put("commentUsername", user.getUsername());
map.put("images", user.getUserIconUrl());
List<Map<String, Object>> childrenList = new LinkedList<>();
for (PartyComment comment : partyComments) {
// 当前评论不为父评论,且为当前父评论的子评论
if (!comment.getId().equals(partyComment.getId()) && comment.getPreId()
.equals(partyComment.getId())) {
Map<String, Object> childrenMap = new HashMap<>();
childrenMap.put("commentId", comment.getId());
childrenMap.put("commentUserId", comment.getIdFrom());
User user1 = userMapper.selectById(comment.getIdFrom());
childrenMap.put("commentUsername", user1.getUsername());
childrenMap.put("images", user1.getUserIconUrl());
childrenMap.put("message", comment.getInformation());
childrenMap.put("preId", comment.getPreId());
map.put("gmtCreate", comment.getGmtCreate());
childrenMap.put("replyId", partyComment.getIdFrom());
childrenList.add(childrenMap);
}
}
map.put("childrenComments", childrenList);
map.put("message", partyComment.getInformation());
map.put("preId", partyComment.getPreId());
map.put("gmtCreate", partyComment.getGmtCreate());
mapList.add(map);
}
}
会议图片
PM报告
工作总结
-
预期工作量:47 /68issue
-
目前已完成工作量:47 issue
-
今日完成工作量: 20 issu
-
前端
-
后端
-
剩余共工作量 21 issue
项目燃尽图
(由于一个仓库里的燃尽图在导入时候必须放到同一个milestone当中,所以是α和β冲刺的结合燃尽图,请从Jun六月开始查看)
任务总量变化
变化日期 | 变化数量 | 变化描述 | 预计处理时间 |
---|---|---|---|
2021/06/12 | +67 | β冲刺整体issue总览 | 7days |
2021/06/14 | +1 | bug微信小程序scroll-view下拉刷新被触发多次,导致发帖页面不明缘由抽风,开始持续出现500错误 | 2days |
2021/06/15 | +1 | 新加添加测试,便于调试 | 1day |
最新项目截图
头像私聊框
组局详情
组员移除
加入组局
评论组局
嵌套评论