package com.xiaozhi.blog.mongo;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.FindAndModifyOptions;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Order;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;
import com.xiaozhi.blog.vo.User;
import com.xiaozhi.blog.vo.UserGroup;
@Repository
public class MongoUserGroupDao {
private static Log logger = LogFactory.getLog(MongoUserGroupDao.class);
@Autowired
private MongoOperations mongoTemplate;
@Autowired
private MongoUserDao mongoUserDao;
/**
* 新增用户组
* @param group
* @return
*/
public UserGroup addUserGroup(UserGroup group) {
try {
this.mongoTemplate.save(group);
return group;
} catch (Exception e) {
logger.error("-----------------> addUserGroup error :"+e.toString(),e);
return null;
}
}
/**
* 删除用户组
* @param groupId
* @return
*/
public boolean delUserGroup(String groupId){
try {
this.mongoTemplate.remove(new Query(Criteria.where("groupId").is(groupId)), UserGroup.class);
return true;
} catch (Exception e) {
logger.error("-----------------> delUserGroup error :"+e.toString(),e);
return false;
}
}
/**
* 更新用户组名称
* @param groupId
* @param groupName
* @return
*/
public UserGroup updateUserGroupName(String groupId,String groupName){
try {
Query query = new Query(Criteria.where("groupId").is(groupId));
Update update = new Update().update("groupName", groupName);
UserGroup group = this.mongoTemplate.findAndModify(query, update,new FindAndModifyOptions().returnNew(true).upsert(true), UserGroup.class);
return group;
} catch (Exception e) {
logger.error("-----------------> addUserGroup error :"+e.toString(),e);
return null;
}
}
/**
* 加入一个用户到用户组
* @param groupId
* @param uid
* @return
*/
public UserGroup pushMemberToGroup(String groupId,String uid){
try {
Query query = new Query(Criteria.where("groupId").is(groupId));
Update update = new Update().push("uids", uid);
UserGroup group = this.mongoTemplate.findAndModify(query, update,new FindAndModifyOptions().returnNew(true).upsert(true), UserGroup.class);
return group;
} catch (Exception e) {
logger.error("-----------------> pushMemberToGroup error :"+e.toString(),e);
return null;
}
}
/**
* 从用户组剔除一个用户
* @param groupId
* @param uid
* @return
*/
public UserGroup pullMemberFromGroup(String groupId,String uid){
try {
Query query = new Query(Criteria.where("groupId").is(groupId));
Update update = new Update().pull("uids", uid);
UserGroup group = this.mongoTemplate.findAndModify(query, update,new FindAndModifyOptions().returnNew(true).upsert(true), UserGroup.class);
return group;
} catch (Exception e) {
logger.error("-----------------> pullMemberFromGroup error :"+e.toString(),e);
return null;
}
}
/**
* 将一个用户从一个用户组转移到另一个用户组
* @param fromGroupId
* @param toGroupId
* @param uid
* @return
*/
public boolean moveUserToGroup(String fromGroupId,String toGroupId,String uid){
try {
this.mongoTemplate.updateFirst(new Query(Criteria.where("groupId").is(fromGroupId)), new Update().pull("uids", uid), UserGroup.class);
this.mongoTemplate.updateFirst(new Query(Criteria.where("groupId").is(toGroupId)), new Update().push("uids", uid), UserGroup.class);
return true;
} catch (Exception e) {
logger.error("-----------------> moveUserToGroup error :"+e.toString(),e);
return false;
}
}
/**
* 通过用户组所有者Id获得用户组集合
* @param uid
* @return
*/
public List<UserGroup> getGroupByUserId(String uid){
Query query = new Query(Criteria.where("ownerId").is(uid));
//query.sort().on("orderBy",Order.ASCENDING);//正序
query.with(new Sort(Sort.Direction.ASC,"orderBy"));
List<UserGroup> groups = this.mongoTemplate.find(query,UserGroup.class);
return groups;
}
/**
* 通过组Id获取该组的用户集合
* @param groupId
* @return
*/
public List<User> getMembersByGroupId(String groupId){
UserGroup group = this.mongoTemplate.findOne(new Query(Criteria.where("groupId").is(groupId)), UserGroup.class);
if(group.getUids()==null)return new ArrayList<User>();
List<User> users= this.mongoUserDao.getUserListByIds(group.getUids());
return users;
}
}