/* ==================================================================
* Created [2009-4-27 下午11:32:55] by Jon.King
* ==================================================================
* TSS
* ==================================================================
* mailTo:jinpujun@hotmail.com
* Copyright (c) Jon.King, 2009-2012
* ==================================================================
*/
package com.jinhe.tss.um.service.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.jinhe.tss.core.persistence.ICommonDao;
import com.jinhe.tss.core.sso.Environment;
import com.jinhe.tss.core.util.EasyUtils;
import com.jinhe.tss.um.UMConstants;
import com.jinhe.tss.um.dao.IGroupDao;
import com.jinhe.tss.um.entity.Group;
import com.jinhe.tss.um.entity.Message;
import com.jinhe.tss.um.entity.User;
import com.jinhe.tss.um.helper.UMQueryCondition;
import com.jinhe.tss.um.service.IMessageService;
public class MessageService implements IMessageService {
@Autowired private ICommonDao commonDao;
@Autowired private IGroupDao groupDao;
public void sendMessage(Message message){
String[] receiverIds = message.getReceiverIds().split(",");
String[] receivers = message.getReceiver().split(",");
for(int i = 0; i < receiverIds.length; i++){
Message temp = new Message();
temp.setReceiverId(EasyUtils.convertObject2Long(receiverIds[i]));
temp.setReceiver(receivers[i]);
temp.setStatus(Message.SEND_STATUS);
temp.setTitle(message.getTitle());
temp.setContent(message.getContent());
insertSenderInfo(temp);
commonDao.createWithoutFlush(temp);
}
commonDao.flush();
}
public void saveMessage(Message message){
insertSenderInfo(message);
message.setStatus(Message.EDIT_STATUS);
commonDao.create(message);
}
private void insertSenderInfo(Message message){
message.setSenderId(Environment.getOperatorId());
message.setSender(Environment.getUserName());
message.setSendTime(new Date());
}
public Message viewMessage(Long id) {
Message message = (Message) commonDao.getEntity(Message.class, id);
if(Message.SEND_STATUS.equals(message.getStatus())){
message.setHasRead(Message.HASREAD_STATUS);
message.setStatus(Message.READ_STATUS);
commonDao.update(message);
}
return message;
}
public void deleteMessage(Long id){
commonDao.delete(commonDao.getEntity(Message.class, id));
}
@SuppressWarnings("unchecked")
private List<Message> getInMessages(Long userId, Integer status){
return (List<Message>) commonDao.getEntities(" from Message m where m.receiverId = ? and m.status = ?", userId, status);
}
public List<Message> getInboxList(){
Long operatorId = Environment.getOperatorId();
List<Message> returnList = new ArrayList<Message>();
returnList.addAll(getInMessages(operatorId, Message.SEND_STATUS));
returnList.addAll(getInMessages(operatorId, Message.READ_STATUS));
return returnList;
}
public List<?> getOutboxList(){
return getOutMessages(Environment.getOperatorId(), Message.SEND_STATUS);
}
public List<?> getDraftList(){
return getOutMessages(Environment.getOperatorId(), Message.EDIT_STATUS);
}
private List<?> getOutMessages(Long userId, Integer status){
return commonDao.getEntities(" from Message m where m.senderId = ? and m.status = ?", userId, status);
}
public Object[] getGroupUserTreeList() {
List<?> groups = groupDao.getVisibleSubGroups(UMConstants.MAIN_GROUP_ID);
List<?> relationUsers = groupDao.getUsersAndRelation(Environment.getOperatorId());
List<Object> users = new ArrayList<Object>();
List<Object> groupUsers = new ArrayList<Object>();
if( !EasyUtils.isNullOrEmpty(relationUsers) ){
for( Object temp : relationUsers ) {
Object[] objs = (Object[]) temp;
users.add(objs[0]);
groupUsers.add(objs[1]);
}
}
return new Object[]{groups, users, groupUsers};
}
public List<?> getGroupsList() {
return groupDao.getVisibleSubGroups(UMConstants.MAIN_GROUP_ID);
}
public List<?> getUsersByCondition(UMQueryCondition condition) {
StringBuffer hql = new StringBuffer("select u, g from User u, GroupUser gu, Group g, Group g1 " +
"where g.id = gu.groupId and gu.userId = u.id and g1.id = ? and g.decode like g1.decode||'%'");
if( condition.getType() != null && condition.getKeyword() != null ) {
switch (condition.getType()) {
case 1: hql.append(" and u.loginName like "); break;
case 2: hql.append(" and u.userName like "); break;
case 3: hql.append(" and u.employeeNo like "); break;
case 4: hql.append(" and u.certificateNumber like "); break;
default: break;
}
hql.append("%" + condition.getKeyword() + "%");
}
List<User> users = new ArrayList<User>();
List<?> list = commonDao.getEntities(hql.toString(), condition.getGroupId());
for( Object temp : list ){
Object[] objs = (Object[]) temp;
User user = (User)objs[0];
Group group = (Group)objs[1];
user.setGroupId(group.getId());
user.setGroupName(group.getName());
users.add(user);
}
return users;
}
}