package com.huo.action;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.convention.annotation.Action;
import org.springframework.stereotype.Component;
import com.huo.model.Friendmap;
import com.huo.model.User;
import com.huo.service.FriendService;
import com.huo.service.UserService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
@Component
public class FriendAction extends ActionSupport {
@Resource(name="userService")
private UserService userService;
@Resource(name="friendmapService")
private FriendService friendmapService;
private Friendmap friendmap;
private User user;
private String isaccept;
private final Log logger = LogFactory.getLog(getClass());
public Friendmap getFriendmap() {
return friendmap;
}
public void setFriendmap(Friendmap friendmap) {
this.friendmap = friendmap;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getIsaccept() {
return isaccept;
}
public void setIsaccept(String isaccept) {
this.isaccept = isaccept;
}
/**
* @author 霍光恩 2016.5.28
* 添加好友,状态分析
* 数据库分析:
* 请求者对应的数据库列名为userid,被请求者的数据库列名为friendid
* 数据库中不存在好友1-2,2-1映射,均以1-2表示好友的映射
* 如添加好友需要用到列名的对应关系,id既要对应userid,也要对应friendid来判断是否存在好友关系
* 可以写出两个或多个查询条件进行or 形式进行查询是否存在,如下代码所示
*
*/
public String addFriend()throws Exception{
Friendmap friendmap1=new Friendmap();
friendmap1.setAddtime(new Timestamp(new Date().getTime()));//设置添加时间
friendmap1.setState(0); //设置添加状态,0表示为等待对方确认,1表示已成为好友状态
User host=(User)ActionContext.getContext().getSession().get("user");//获取本人的信息
friendmap1.setFriendmapUser(host); //填充请求者的信息
User friend= userService.findUserById(user.getUserid());
friendmap1.setFriendmapFriend(friend); //填充被请求者的信息
/*判断添加的好友是否是自己
*若存在,则返回提示 “不能添加自己为好友!”
**/
if(user.getUserid().equals(host.getUserid())){
logger.info(((User)ActionContext.getContext().getSession().get("user")).getUserdetail().getUsername()+"添加好友失败;原因:不能添加自己为好友");
ActionContext.getContext().put("addfriendback", "不能添加自己为好友 !");
return ERROR;
}
/*获取数据库中是否存在好友映射值对
*若存在,则返回提示 “对方已在您的好友列表中,无需添加!”
**/
List listexist1=userService.find("from Friendmap where userid="+host.getUserid()+" and friendid="+friend.getUserid()+" and state=1");
List listexist2=userService.find("from Friendmap where userid="+friend.getUserid()+" and friendid="+host.getUserid()+" and state=1");
if(listexist1.size()>0||listexist2.size()>0){
logger.info(((User)ActionContext.getContext().getSession().get("user")).getUserdetail().getUsername()+"添加好友失败;原因:对方已在您的好友列表中,无需添加!");
ActionContext.getContext().put("addfriendback", "对方已在您的好友列表中,无需添加!");
return ERROR;
}
/*获取数据库中是否存在未确认的好友请求,避免在未确认状态下双方互相好友请求是数据库出现不必要的数据映射对,
* 若存在,则返回提示 “对方已经向您发起了请求,请先处理!”
* */
List listconfirm=userService.find("from Friendmap where userid="+friend.getUserid()+" and friendid="+host.getUserid()+" and state=0");
if(listconfirm.size()>0){
logger.info(((User)ActionContext.getContext().getSession().get("user")).getUserdetail().getUsername()+"添加好友失败;原因:对方已经发起了请求,请先处理!");
ActionContext.getContext().put("addfriendback", "对方已经向您发起了请求,请先处理!");
return ERROR;
}
/*
* 获取数据库中是否存在自己请求过的记录,
* 若存在,则返回提示“您曾经请求过,请等待对方确认!”
*/
List list1=userService.find("from Friendmap where userid="+host.getUserid()+" and friendid="+friend.getUserid()+" and state=0");
if(list1.size()>0){
logger.info(((User)ActionContext.getContext().getSession().get("user")).getUserdetail().getUsername()+"添加好友失败;原因:曾经请求过的好友,正等待对方确认!!");
ActionContext.getContext().put("addfriendback", "您曾经请求过,请等待对方确认!");
return ERROR;
}
/*
* 添加到数据库好友请求
* 若成功,则返回提示“对方确认后方可成为您的好友,请等待。。。。。”
*/
boolean add_suc=friendmapService.addFriend(friendmap1);
if(add_suc){
logger.info(((User)ActionContext.getContext().getSession().get("user")).getUserdetail().getUsername()+"添加好友中,正等待对方确认。。。。");
ActionContext.getContext().put("addfriendback", "对方确认后方可成为您的好友,请等待。。。。。");
return SUCCESS;
}
else{
logger.info(((User)ActionContext.getContext().getSession().get("user")).getUserdetail().getUsername()+"添加好友失败;原因:数据库出现错误");
ActionContext.getContext().put("addfriendback", "添加失败。。。。");
return ERROR;
}
}
/**
* @author 霍光恩 2016.5.28
* 显示确认好友请求的状态
*/
public String showcomfirmFriend()throws Exception{
User host=(User)ActionContext.getContext().getSession().get("user"); //获取当期用户的信息
//自己被请求,数据库friendid即自己的id,查询friendid存在并且两个用户关系为等待确认状态的好友映射对
List list=userService.find("from Friendmap where friendid="+host.getUserid()+" and state=0");
//若没有被请求信息,则将请求列表置为空
if(list.size()<=0){
ActionContext.getContext().put("comfirmlist",null);
return NONE;
}
else{
List comfirmlist=new ArrayList();//空容器用于放置所有请求者的信息
for(int i=0;i<list.size();i++){
Friendmap friendmap=(Friendmap)list.get(i);//获取一条好友映射对
User user= userService.findUserById(friendmap.getFriendmapUser().getUserid());//获取这条好友映射对的userid,即请求者的用户id
comfirmlist.add(user); //放置这个请求者的信息
}
ActionContext.getContext().put("comfirmlist", comfirmlist);
return SUCCESS;
}
}
/**
* @author 霍光恩 2016.5.28
* 处理好友请求
* 若拒绝,将删除好友映射对记录
* 若同意请求,则将state状态置为1
*/
public String comfirmFriend()throws Exception{
User host=(User)ActionContext.getContext().getSession().get("user"); //获取当期用户的信息
User friend =userService.findUserById(user.getUserid());
//获取好友映射对中自己为被请求者身份的好友映射对
List list=friendmapService.find("from Friendmap where userid='"+friend.getUserid()+"' and friendid='"+host.getUserid()+"' and state='0'");
if(list.size()<=0){
return ERROR;
}
int friendmapid=((Friendmap)list.get(0)).getFriendmapid(); //获取未处理的好友的id
if(isaccept.equals("accept")){ //若接受,将状态置为1
Friendmap friendmap=(Friendmap)list.get(0);
friendmap.setState(1);
//更新操作,将state 值由0更新为1,使得用户状态为好友
boolean accept_suc=friendmapService.comfirmFriend(friendmap);
System.out.println(accept_suc);
if(accept_suc){
ActionContext.getContext().put("comfirmfriendback", "您接受了"+friend.getUserid()+"的好友的请求");
return SUCCESS;
}
else{
ActionContext.getContext().put("comfirmfriendback", "您接受"+friend.getUserid()+"的好友请求过程中,出现异常。");
return SUCCESS;
}
}
else{
//若拒绝,将删除好友映射对记录
boolean refuse_suc=friendmapService.refuseFriend(friendmapid);
if(refuse_suc){
ActionContext.getContext().put("comfirmfriendback", "您拒绝了"+friend.getUserid()+"的好友的请求");
}
else{
ActionContext.getContext().put("comfirmfriendback", "您拒绝"+friend.getUserid()+"的好友请求过程中,出现异常。");
}
return SUCCESS;
}
}
/**
* @author 霍光恩 2016.5.29
* 显示我的好友列表中的全部好�