mobile.service.MessageService.java Source code

Java tutorial

Introduction

Here is the source code for mobile.service.MessageService.java

Source

/*
 * Copyright (c) 2013, Helome and/or its affiliates. All rights reserved.
 * Helome PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 * Created on 2014-6-5
 */
package mobile.service;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import mobile.service.result.ServiceResult;
import mobile.vo.result.MobilePage;
import mobile.vo.user.ChatMessageItem;
import mobile.vo.user.NewMessageNum;
import mobile.vo.user.SystemMessageItem;
import models.User;

import org.apache.commons.lang3.EnumUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.util.CollectionUtils;

import play.mvc.Http.Context;
import utils.HelomeUtil;
import vo.ChatMessageRecordVO;
import vo.page.Page;
import ext.MessageCenter.utils.MCMessageUtil;
import ext.msg.model.Message;
import ext.msg.model.Message.MsgType;
import ext.msg.vo.MsgCount;

/**
 * 
 * 
 * @ClassName: MessageService
 * @Description: ??
 * @date 2014-6-5 ?2:43:04
 * @author ShenTeng
 * 
 */
public class MessageService {

    /**
     * ??
     * 
     * @return
     */
    public static ServiceResult markRead(List<String> msgIds) {
        return markRead(msgIds, User.getFromSession(Context.current().session()).id);
    }

    /**
     * ?
     * 
     * @return
     */
    public static ServiceResult markRead(List<String> msgIds, Long userId) {
        List<Long> systemMsgIdList = new ArrayList<>();
        List<String> chatMsgIdList = new ArrayList<>();

        for (String msgId : msgIds) {
            if (StringUtils.isNotBlank(msgId) && msgId.startsWith("chat_") && msgId.length() > "chat_".length()) {
                chatMsgIdList.add(msgId);
            } else {
                long numId = NumberUtils.toLong(msgId, -1);
                if (numId > 0) {
                    systemMsgIdList.add(numId);
                }
            }
        }

        Message.markReaded(String.valueOf(userId), systemMsgIdList);
        for (String chatMsgId : chatMsgIdList) {
            if (chatMsgId.startsWith("chat_G")) {
                Long groupId = HelomeUtil.toLong(chatMsgId.substring("chat_G".length()), null);
                MCMessageUtil.cleanGroupChatNum(groupId, userId);
            } else {
                Long senderId = HelomeUtil.toLong(chatMsgId.split("_")[1], null);
                if (null != senderId) {
                    MCMessageUtil.resetCommunicateNum(senderId, userId);
                }
            }

        }

        return ServiceResult.success();
    }

    /**
     * ????VO
     * 
     * @return
     */
    public static NewMessageNum getNewMessageNum() {
        return getNewMessageNum(User.getFromSession(Context.current().session()));
    }

    /**
     * ???VO
     * 
     * @param userId Id
     * @return
     */
    public static NewMessageNum getNewMessageNum(User user) {
        MsgCount msgCountVO = Message.newsMessageNum(user);
        return NewMessageNum.create(msgCountVO);
    }

    /**
     * ????Page
     * 
     * @param pageIndex ?1
     * @param pageSize ?
     * @return
     */
    public static MobilePage<ChatMessageItem> getChatMessagePage(Integer pageIndex, Integer pageSize) {
        User user = User.getFromSession(Context.current().session());

        Page<ChatMessageRecordVO> pageMsg;
        try {
            pageMsg = Message.queryMessageByRead(pageIndex - 1, pageSize, String.valueOf(user.id), "no_system",
                    user);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        List<ChatMessageItem> chatMessageList = new ArrayList<>(pageMsg.getList().size());
        for (ChatMessageRecordVO c : pageMsg.getList()) {
            chatMessageList.add(ChatMessageItem.create(c));
        }

        return new MobilePage<>(pageMsg.getTotalRowCount(), chatMessageList);
    }

    /**
     * ???Page
     * 
     * @param pageIndex ?1
     * @param pageSize ?
     * @param autoRead ????????
     * @param msgTypeList ??nullempty??{@literal ext.msg.model.Message.MsgType}
     * @param unReadFirst ???
     * @return
     */
    public static MobilePage<SystemMessageItem> getSystemMessagePage(Integer pageIndex, Integer pageSize,
            Boolean autoRead, List<String> msgTypeList, boolean unReadFirst) {

        Set<MsgType> msgTypeSet = new HashSet<>();
        if (!CollectionUtils.isEmpty(msgTypeList)) {
            for (String msgTypeStr : msgTypeList) {
                MsgType msgType = EnumUtils.getEnum(MsgType.class, msgTypeStr);
                if (msgType != null) {
                    msgTypeSet.add(msgType);
                }
            }
        }

        User user = User.getFromSession(Context.current().session());

        Page<Message> pageMsg = Message.queryMessageByRead(pageIndex - 1, pageSize, String.valueOf(user.id),
                msgTypeSet, unReadFirst);

        List<SystemMessageItem> sysMsgList = SystemMessageItem.createList(pageMsg.getList());

        List<Long> systemMsgIdList = new ArrayList<>();
        for (Message message : pageMsg.getList()) {
            systemMsgIdList.add(message.id);
        }

        if (autoRead) {
            Message.markReaded(String.valueOf(user.id), systemMsgIdList);
        }

        return new MobilePage<>(pageMsg.getTotalRowCount(), sysMsgList);
    }

    /**
     * ?????
     * 
     * @param id ?Id
     * @return
     */
    public static ServiceResult deleteMessage(Long id) {
        User user = User.getFromSession(Context.current().session());

        boolean deleteResult = Message.deleteMessageById(id, user.id);

        if (!deleteResult) {
            return ServiceResult.error("251001", "???");
        }

        return ServiceResult.success();
    }

    /**
     * ??????
     * 
     * @param idList ?Id?
     * @return
     */
    public static ServiceResult batchDeleteMessage(List<Long> idList) {
        User user = User.getFromSession(Context.current().session());

        Message.deleteMessages(idList, user.id);

        return ServiceResult.success();
    }

}