一、站立式会议
1.1 会议照片
1.2 工作安排
成员 |
昨日完成工作 |
issue链接 |
今日计划工作 |
issue链接 |
李泽强 |
实现发表文章功能 |
A1 |
文章编辑 |
A2 |
叶杞豪 |
完成页面的UI设计,查找所需资源 |
B1 |
个人页面 |
B2 |
刘宇杰 |
平台内容管理功能 |
C1 |
用户权限管理功能 |
C2 |
唐振凯 |
个人信息编辑 |
D1 |
查看用户数据 |
D2 |
李鹏举 |
设计数据库 |
E1 |
数据库构建 |
E2 |
潘新坤 |
冲刺阶段整体规划 |
F1 |
协助进行前端设计 |
F2 |
1.3 工作中遇到的困难
成员 |
遇到的困难 |
李泽强 |
与数据库交互遇到了问题 |
叶杞豪 |
对开发工具不太熟练 |
刘宇杰 |
如何无死角管理平台内容需要考虑很多方面 |
唐振凯 |
个人信息的数据类型设计不合理,难实现编辑 |
李鹏举 |
数据库模式之间的逻辑关系很复杂 |
二、项目燃尽图
三、代码签入
四、模块的运行截图
4.1 模块代码
/**
* 用户信息
*/
public void user(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userId = request.getParameter("userId");
User user = service.findUser(Integer.parseInt(userId));
writeValue(user,response);
}
/**
* 更改用户信息
*/
public void updateInfo(HttpServletRequest request, HttpServletResponse response) throws Exception {
//先接受是否有重新上传头像的标识
String check = request.getParameter("check");
String headAddress = null;
User user = (User) request.getSession().getAttribute("user");
if(Integer.parseInt(check)==1){//表示有重新上传头像
//创建FileItemFactory对象
FileItemFactory factory = new DiskFileItemFactory();
//创建文件上传的处理器
ServletFileUpload upload = new ServletFileUpload(factory);
//解析请求
List<FileItem> items = upload.parseRequest(request);
//迭代出每一个FileItem,获得图片的地址
for (FileItem item : items) {
String path = imgPath;
//上传文件的控件
item.write(new File(path, item.getName())); //把上传的文件保存到某个文件中
headAddress = "/img" + "/" + item.getName();
}
}else{
headAddress=user.getHeadAddress();
}
System.out.println(headAddress);
//获取用户id
Integer id = user.getId();
//获取其他参数
Map<String, String[]> map = request.getParameterMap();
//封装
User _user = new User();
BeanUtils.populate(_user,map);
//设置用户id还有用户头像
_user.setId(id);
_user.setHeadAddress(headAddress);
System.out.println(_user);
//调用service
boolean flag = service.updateInfo(_user);
ResultInfo info = new ResultInfo(flag);
if(flag){
info.setMsg("修改成功!");
//更新共享域中的用户信息
user.setHeadAddress(_user.getHeadAddress());
user.setAge(_user.getAge());
user.setIntroduction(_user.getIntroduction());
user.setNickName(_user.getNickName());
request.getSession().setAttribute("user",user);
}else{
info.setMsg("操作异常!");
}
writeValue(info,response);
}
页面
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户主页</title>
</head>
<script src="js/jquery-3.3.1.js"></script>
<script src="js/getParameter.js"></script>
<style>
.inpI{ width:280px; height:30px; line-height:30px; border:1px solid #999; padding:5px 10px; font-size:14px; border-radius:6px;}
.loginI{ width:120px; height:42px; border-radius:6px; display: block; margin:20px auto; cursor: pointer;}
.login{ width:120px; height:42px; border-radius:3px; margin:10px auto;}
</style>
<script>
//查询登录用户的关注人数还有粉丝数,还有文章数,以及收获的喜欢
function nums() {
var userId = getParameter("userId");
jQuery.ajax({
type: "POST",
url:"${pageContext.request.contextPath}/userAct/userNums?userId="+userId,
contentType: false,
processData: false,
success: function(data) {
jQuery("#follow").html(data.followsNum);
jQuery("#fans").html(data.fansNum);
jQuery("#article").html(data.articlesNum);
jQuery("#likeNum").html(data.likesNum);
follow = data.followsNum;
fans = data.fansNum;
userU();
}
});
}
nums();
function userU() {
var userId = getParameter("userId");
jQuery.ajax({
type: "POST",
url:"${pageContext.request.contextPath}/userAct/user?userId="+userId,
contentType: false,
processData: false,
success: function(data) {
jQuery("#useruser").html(data.username);
jQuery("#username").attr('value',data.username);
jQuery("#email").attr('value',data.email);
jQuery("#age").attr('value',data.age);
jQuery("#introduction").html(data.introduction);
jQuery("#img").html('<img src="'+data.headAddress+'" style="width: 100px; height: 100px" alt="">')
jQuery("#nickName").attr('value',data.nickName);
}
});
}
function fuser(check) {
var userId = getParameter("userId");
jQuery("#1").html('');
jQuery("#2").html('');
if(check==0){
if(follow==0){
alert("该用户暂未关注作者!");return;
}
}else{
if(fans==0){
alert("该用户暂无粉丝!");return;
}
}
jQuery.ajax({
type: "POST",
url:"${pageContext.request.contextPath}/userAct/followUser?check="+check+"&userId="+userId,
contentType: false,
processData: false,
success: function(data) {
if(check==0){
jQuery("#title").html("关注的用户");
}else{
jQuery("#title").html("粉丝");
}
jQuery("#table1").html('');
jQuery("#table1").append('<tr><td>头像</td><td align="center">用户名</td><td align="center">相关信息</td><td align="center">操作</td></tr>\n')
//遍历回显
for (i=0;i<data.length;i++){
var user = data[i];
jQuery("#table1").append('<tr><td><img src="'+user.headAddress+'" width="50" height="50" alt=""></td>' +
'<td align="center"><a href="${pageContext.request.contextPath}/userHome.jsp?userId='+user.userId+'" target="_blank">'+user.username+'</a></td>' +
'<td align="center">关注:'+user.followsNum+',粉丝:'+user.fansNum+',文章:'+user.articlesNum+',收获的喜欢:'+user.likesNum+'</td>' +
'<td align="center"><a href="javascript:void(0);" onclick="cancelFollow(\''+i+'\',\''+user.userId+'\',\''+user.checked+'\')" id="con'+i+'">'+user.checked+'</a></td></tr>')
}
}
});
}
//取消关注和关注
function cancelFollow(i,userId,action) {
if(${user==null}){
alert("您还未登录!");return;
}
if(confirm("您确定"+action+"吗?")){
jQuery.ajax({
type: "POST",
url:"${pageContext.request.contextPath}/userAct/updateFollow?userId="+userId+"&action="+action,
contentType: false,
processData: false,
success: function(data) {
if(data.flag){
alert(data.msg);
//修改操作标签中的内容,还有方法
if(action=='取消关注'){
jQuery("#con"+i).html('关注');
jQuery("#con"+i).attr('onclick','cancelFollow('+i+','+userId+',"关注用户")');
}else{
jQuery("#con"+i).attr('onclick','cancelFollow('+i+','+userId+',"取消关注")');
jQuery("#con"+i).html('取消关注');
}
}else{
alert(data.msg);return;
}
}
});
}
}
function myArticle() {
jQuery("#title").html('文章信息')
//先查询获得文章数据分为草稿箱还有已发布
finda(1);
}
function finda(check) {
var userId = getParameter("userId");
//check 1表示查询已经发布的,0表示查询草稿箱的
jQuery.ajax({
type: "POST",
url:"${pageContext.request.contextPath}/article/userArticle?check="+check+"&userId="+userId,
contentType: false,
processData: false,
success: function(data) {
jQuery("#table1").html('');
if(data==null){
if(check==1){
jQuery("#table1").html('该用户还未发布文章!');
}else{
jQuery("#table1").html('您还未保存草稿!');
}
return;
}
jQuery("#table1").append('<tr><td>图片</td><td align="center">文章名称</td><td align="center">文章摘要</td><td align="center">上传时间</td><td align="center">操作</td></tr>\n')
//遍历回显
for (i=0;i<data.length;i++){
var a = data[i];
jQuery("#table1").append('<tr><td><img src="'+a.articleTitlePhoto+'" width="50" height="50" alt=""></td>' +
'<td align="center">'+a.articleTitle+'</td>' +
'<td align="center">'+a.summary+'</td>' +
'<td align="center">'+a.time+'</td>' +
'<td align="center">' +
'<a href="${pageContext.request.contextPath}/articleDetail.jsp?articleId='+a.articleId+'&userId=${user.id}" target="_blank" >浏览</a> </td></tr>')
}
}
});
}
//显示我的动态
function AAAA() {
jQuery("#1").html('');
jQuery("#2").html('');
var userId = getParameter("userId");
jQuery.ajax({
type: "POST",
url:"${pageContext.request.contextPath}/userAct/userAction?userId="+userId,
contentType: false,
processData: false,
success: function(data) {
jQuery("#title").html("用户动态");
jQuery("#table1").html('');
if(data==null || data==''){
jQuery("#table1").html('该用户还没有动态!');return;
}
jQuery("#table1").append('<tr><td align="center">动态</td><td align="center">时间</td></tr>\n')
//遍历回显
for (i=0;i<data.length;i++){
var a = data[i];
jQuery("#table1").append('<tr>' +
'<td align="center">'+a.action+' <a href="javascript:void(0);" onclick="MM('+a.userId+','+a.articleId+','+a.addId+')">'+a.content+'</a></td>' +
'<td align="center">'+a.time+'</td>' +
'</tr>')
}
}
});
}
function MM(userId,articleId,addId) {
if(userId==0){
//说明是文章
window.open("${pageContext.request.contextPath}/articleDetail.jsp?articleId="+articleId+"&userId="+addId);
}else{
window.open("${pageContext.request.contextPath}/userHome.jsp?userId="+userId);
}
}
function BBB() {
jQuery("#1").html('');
jQuery("#2").html('');
var userId = getParameter("userId");
//查找最新评价
jQuery.ajax({
type: "POST",
url:"${pageContext.request.contextPath}/userAct/mostNewComment?userId="+userId,
contentType: false,
processData: false,
success: function(data) {
jQuery("#title").html('最新评价文章');
jQuery("#table1").html('');
if(data==null || data==''){
jQuery("#table1").html('该用户目前的文章尚未有最新评价');return;
}
jQuery("#table1").append('<tr><td>图片</td><td align="center">文章名称</td><td align="center">文章摘要</td><td align="center">上传时间</td><td align="center">操作</td></tr>\n')
//遍历回显
for (i=0;i<data.length;i++){
var a = data[i];
jQuery("#table1").append('<tr><td><img src="'+a.articleTitlePhoto+'" width="50" height="50" alt=""></td>' +
'<td align="center">'+a.articleTitle+'</td>' +
'<td align="center">'+a.summary+'</td>' +
'<td align="center">'+a.time+'</td>' +
'<td align="center"><a href="${pageContext.request.contextPath}/articleDetail.jsp?articleId='+a.articleId+'&userId=${user.id}" target="_blank" >浏览</a> </td>' +
'' +
'</tr>')
}
}
});
}
function boardU(userId) {
if(${user==null}){
alert("您还未登录!");return;
}
//先获取留言内容
var board = jQuery("#board").val();
if(board==null || board==''){alert("请先输入留言内容");return};
jQuery.ajax({
type: "POST",
url:"${pageContext.request.contextPath}/userAct/userToBoard?userId="+userId+"&content="+board,
contentType: false,
processData: false,
success: function(data) {
alert("留言成功!");
CCC();
}
});
}
//留言版功能
function CCC() {
var userId = getParameter("userId");
jQuery.ajax({
type: "POST",
url:"${pageContext.request.contextPath}/userAct/userBoard?userId="+userId,
contentType: false,
processData: false,
success: function(data) {
jQuery("#title").html('留言版');
jQuery("#1").html('');
jQuery("#2").html('');
jQuery("#table1").html('');
//先加一个留言框
if(data==null || data=='') {
jQuery("#2").append('<br><textarea id="board" style="background: white;" placeholder="请输入留言信息"></textarea><br>\n' +
' <button class="login" onclick="boardU('+userId+');">上传</button>\n')
}else{
jQuery("#2").append('<br><textarea id="board" style="background: white;" placeholder="请输入留言信息"></textarea><br>\n' +
' <button class="login" onclick="boardU('+data[0].userId+');">上传</button>\n')
}
if(data==null || data==''){
jQuery("#table1").append('尚未有用户留言');return;
}
jQuery("#table1").append('<tr><td>留言用户</td><td >留言内容</td><td >留言时间</td></tr>\n')
//遍历回显
for (i=0;i<data.length;i++){
var a = data[i];
jQuery("#table1").append('<tr>' +
'<td align="center">'+a.username+'</td>' +
'<td align="center"><textarea cols="30" rows="5" style="background: white;border: none;font-size: 20px" disabled>'+a.content+'</textarea></td>' +
'<td align="center">'+a.time+'</td>' +
'</tr>')
}
}
});
}
function uuu() {
location.reload();
}
</script>
<body>
<div align="center">
<span style="color: darkorange; font-size: 25px ">简书</span>
欢迎<span id="useruser"> </span>主页
<a href="javascript:void(0);" onclick="uuu();">个人信息</a>
<a href="javascript:void(0);" onclick="fuser(0);">关注</a><span style="color: black" id="follow"></span>
<a href="javascript:void(0);" onclick="fuser(1);">粉丝</a><span style="color: black" id="fans"></span>
<a href="javascript:void(0);" onclick="myArticle();">文章</a><span style="color: black" id="article"></span>
<span>收获的喜欢</span><span style="color: black" id="likeNum"></span>
<a href="javascript:void(0);" onclick="AAAA();">动态</a>
<a href="javascript:void(0);" onclick="BBB();">最新评价</a>
<a href="javascript:void(0);" onclick="CCC();">留言版</a>
<hr>
<br>
<span id="title" style="color: blue">个人信息</span>
<span id="1"></span><span id="2"></span>
<div>
<table border="1" id="table1">
<tr>
<td width="120">头像:</td>
<td id="img">
</td>
</tr>
<tr>
<td width="120">用户名:</td>
<td><input type="text" class="inpI" id="username" disabled/>
</td>
</tr>
<tr>
<td>邮箱:</td>
<td><input type="text" class="inpI" id="email" disabled/></td>
</tr>
<tr>
<td>昵称:</td>
<td><input type="email" class="inpI" id="nickName" disabled/></td>
</tr>
<tr>
<td>年龄:</td>
<td><input type="age" class="inpI" id="age" disabled /></td>
</tr>
<tr>
<td>个人简介:</td>
<td><textarea id="introduction" style="width: 280px;height: 60px;border: 1px;border:1px solid #999; padding:5px 10px; font-size:14px; border-radius:6px;" >/textarea></td>
</tr>
</table>
</div>
</div>
<div class="popOutBg"></div>
<div class="popOut">
<span title="关闭"> x </span>
<div id="table"></div>
</div>
</body>
</html>
4.2模块运行截图
五、每日每人总结
成员 |
总结 |
李泽强 |
学了前端ajax异步提交表单,让我的对前后端交互有更深的了解。 |
叶杞豪 |
第一天敲代码,感觉任务有点重,不过最后也能勉强完成,明天继续努力 |
刘宇杰 |
今天实现了简单的平台内容管理功能,感到难度还是挺高的,后面还要继续努力 |
唐振凯 |
看似简单的任务,也需要注意很多细节,注意考虑用户的体验 |
李鹏举 |
今天完成了项目数据库的设计,逻辑结构有点复杂,后面还需要优化 |
潘新坤 |
项目的截止时间即将来临,今天安排好了后面六天的任务,以免最后这几天忙中出错 |