/** * Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved. * EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * http://www.ewcms.com */ package com.ewcms.plugin.message.manager.service; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.Assert; import com.ewcms.plugin.message.manager.dao.MsgContentDAO; import com.ewcms.plugin.message.manager.dao.MsgReceiveDAO; import com.ewcms.plugin.message.manager.dao.MsgSendDAO; import com.ewcms.plugin.message.model.MsgContent; import com.ewcms.plugin.message.model.MsgReceive; import com.ewcms.plugin.message.model.MsgReceiveUser; import com.ewcms.plugin.message.model.MsgSend; import com.ewcms.plugin.message.model.MsgSend.Type; import com.ewcms.plugin.message.model.MsgStatus; import com.ewcms.security.manage.model.User; import com.ewcms.security.manage.service.UserServiceable; import com.ewcms.web.util.EwcmsContextUtil; /** * * @author wu_zhijun * */ @Service public class MsgSendService implements MsgSendServiceable { @Autowired private MsgSendDAO msgSendDAO; @Autowired private MsgReceiveDAO msgReceiveDAO; @Autowired private MsgContentDAO msgContentDAO; @Autowired private UserServiceable userService; @Override public Long addMsgSend(MsgSend msgSend, String content, List<String> userNames) { msgSend.setUserName(EwcmsContextUtil.getUserName()); msgSend.setStatus(MsgStatus.FAVORITE); MsgContent msgContent = new MsgContent(); msgContent.setTitle(msgSend.getTitle()); msgContent.setDetail(content); List<MsgContent> msgContents = new ArrayList<MsgContent>(); msgContents.add(msgContent); msgSend.setMsgContents(msgContents); if (msgSend.getType() == Type.GENERAL){ List<MsgReceiveUser> msgReceiveUsers = new ArrayList<MsgReceiveUser>(); MsgReceiveUser msgReceiveUser; for (String userName : userNames){ if (userName.equals(msgSend.getUserName())) continue; msgReceiveUser = new MsgReceiveUser(); msgReceiveUser.setUserName(userName); msgReceiveUser.setRealName(findUserRealNameByUserName(userName)); msgReceiveUsers.add(msgReceiveUser); } msgSend.setMsgReceiveUsers(msgReceiveUsers); }else if (msgSend.getType() == Type.NOTICE){ msgSend.setMsgReceiveUsers(null); }else if (msgSend.getType() == Type.SUBSCRIPTION){ msgSend.setMsgReceiveUsers(null); } msgSendDAO.persist(msgSend); msgSendDAO.flush(msgSend); if (msgSend.getType() == Type.GENERAL){ for (String userName : userNames){ if (userName.equals(msgSend.getUserName())) continue; MsgReceive msgReceive = new MsgReceive(); msgReceive.setUserName(userName); msgReceive.setSendUserName(EwcmsContextUtil.getUserName()); msgReceive.setStatus(MsgStatus.FAVORITE); msgReceive.setMsgContent(msgContent); msgReceiveDAO.persist(msgReceive); } } return msgSend.getId(); } @Override public Long updMsgSend(MsgSend send) { return null; } @Override public void delMsgSend(Long msgSendId) { msgSendDAO.removeByPK(msgSendId); } @Override public MsgSend findMsgSend(Long msgSendId) { return msgSendDAO.get(msgSendId); } @Override public List<MsgSend> findMsgSendByUserName() { return msgSendDAO.findMsgSendByUserName(EwcmsContextUtil.getUserName()); } @Override public Long addSubscription(Long msgSendId, String title, String detail) { MsgSend msgSend = msgSendDAO.findMsgSendByUserNameAndId(EwcmsContextUtil.getUserName(), msgSendId); Assert.notNull(msgSend); if (msgSend.getType() == Type.SUBSCRIPTION){ List<MsgContent> msgContents = msgSend.getMsgContents(); MsgContent msgContent = new MsgContent(); msgContent.setTitle(title); msgContent.setDetail(detail); msgContents.add(msgContent); msgSend.setMsgContents(msgContents); msgSendDAO.merge(msgSend); List<MsgReceiveUser> msgReceiveUsers = msgSend.getMsgReceiveUsers(); for (MsgReceiveUser msgReceiveUser : msgReceiveUsers){ MsgReceive msgReceive = new MsgReceive(); msgReceive.setMsgContent(msgContent); msgReceive.setSendUserName(EwcmsContextUtil.getUserName()); msgReceive.setSubscription(true); msgReceive.setUserName(msgReceiveUser.getUserName()); msgReceive.setStatus(MsgStatus.FAVORITE); msgReceiveDAO.merge(msgReceive); } return msgSend.getId(); } return null; } @Override public void delSubscription(Long msgContentId) { msgContentDAO.removeByPK(msgContentId); } // @Override // public List<MsgSend> findMsgSendByGeneral(Integer row) { // return msgSendDAO.findMsgSendByType(Type.GENERAL, row); // } @Override public List<MsgSend> findMsgSendByNotice(Integer row) { List<MsgSend> notices = new ArrayList<MsgSend>(); List<MsgSend> noticeMessages = msgSendDAO.findMsgSendByType(Type.NOTICE, row); if (noticeMessages == null || noticeMessages.isEmpty()) return notices; for (MsgSend msgSend : noticeMessages){ msgSend.setMsgReceiveUsers(null); notices.add(msgSend); } return notices; } @Override public List<MsgSend> findMsgSendBySubscription(Integer row) { List<MsgSend> subscriptions = new ArrayList<MsgSend>(); List<MsgSend> subscriptionMessages = msgSendDAO.findMsgSendByType(Type.SUBSCRIPTION, row); if (subscriptionMessages == null || subscriptionMessages.isEmpty()) return subscriptions; for (MsgSend msgSend : subscriptionMessages){ msgSend.setMsgReceiveUsers(null); subscriptions.add(msgSend); } return subscriptions; } @Override public String subscribeMsg(Long msgSendId) { MsgSend msgSend = msgSendDAO.get(msgSendId); if (msgSend.getType() == Type.SUBSCRIPTION){ String receiveUserName = EwcmsContextUtil.getUserName(); String realName = userService.getCurrentUserInfo().getName(); String sendUserName = msgSend.getUserName(); if (receiveUserName.equals(sendUserName)){ return "own"; } if (!msgSendDAO.findUserHaveSubscribedByUserName(msgSendId, receiveUserName)){ List<MsgReceiveUser> msgReceiveUsers = msgSend.getMsgReceiveUsers(); MsgReceiveUser msgReceiveUser = new MsgReceiveUser(); msgReceiveUser.setUserName(receiveUserName); msgReceiveUser.setRealName(realName); msgReceiveUsers.add(msgReceiveUser); msgSend.setMsgReceiveUsers(msgReceiveUsers); msgSendDAO.merge(msgSend); return "true"; }else{ return "exist"; } }else{ return "false"; } } private String findUserRealNameByUserName(String userName){ User user = userService.getUser(userName); return user.getUserInfo().getName(); } }