package com.hotent.portal.persistence.manager;



import java.util.List;
import java.util.Map;

import com.hotent.base.manager.BaseManager;
import com.hotent.base.model.CommonResult;
import com.hotent.base.query.PageBean;
import com.hotent.base.query.PageList;
import com.hotent.base.query.QueryFilter;
import com.hotent.portal.model.SysExecutor;
import com.hotent.portal.model.SysMessage;
import com.hotent.portal.params.MessaboxVo;
import com.hotent.portal.vo.SysMsgTempletDetailVo;
import com.hotent.portal.vo.SysMsgTempletVo;
import com.hotent.uc.api.impl.util.ContextUtil;
import io.swagger.annotations.ApiParam;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.RequestParam;


/**
 * 系统信息处理接口
 * 
 * @company 广州宏天软件股份有限公司
 * @author maoww
 * @email maoww@jee-soft.cn
 * @date 2018年6月19日
 */
public interface SysMessageManager extends BaseManager<SysMessage> {

	/**
	 * 通过用户id获取信息
	 * @param queryFilter 查询参数
	 * @return
	 */
	PageList<SysMessage> getMsgByUserId(QueryFilter queryFilter);

	/**
	 * 管理端 获取系统或个人消息
	 * @param queryFilter 查询参数
	 */
	PageList<SysMessage> getMsgListNoUser(QueryFilter queryFilter);

	/**
	 * 获取当前用户 未读消息信息
	 * @param userId 用户id
	 * @param isPublish 消息类型 0:个人消息 1:系统消息
	 */
	List<SysMessage> getNotReadMsgByUserId(String userId, int isPublish);

	/**
	 * 设置为删除状态
	 * @param ids
	 */
	void updateDelFlagByIds(List<String> ids);

	/**
	 * 通过id获取信息
	 */
	SysMessage getMsgById(String id);

	/**
	 * 处理消息发送
	 * @param sysMessage 系统信息
	 */
	void addMessageSend(SysMessage sysMessage);
	
	/**
	 * 获取最新一条的未读的消息
	 * @param userId 用户id
	 * @return
	 */
	SysMessage getNotReadMsg(String userId);

	/**
	 * 获取未读消息数量
	 * @param userId
	 * @return
	 */
	Map<String, Object> getNoReadMsgbadge(String userId);
	
	/**
	 * 获取未读信息数量
	 * @param userId 用户id
	 * @return
	 */
	int getNotReadMsgNum(String userId, String isPublic);
	
	/**
	 * 获取信息的个数
	 * @param currentUserId 当前用户id
	 * @return 
	 */
	int getMsgSize(String receiverId, String isPublic);

	/**
	 * 发送系统消息
	 * @param subject
	 * @param content
	 * @param messageType
	 * @param senderId
	 * @param senderName
	 * @param receivers
	 * @param ownerSource 发帖来源类型 -1:平台 0:PC应用 1:移动应用 2:流程
	 * @param ownerSourceId 发帖来源_关联应用ID
	 * @return
	 */
	CommonResult<String> sendMsg(String subject, String content, String messageType, String senderId, String senderName, List<SysExecutor> receivers,
								 String ownerSource, String ownerSourceId);


	/**
	 * 获取用户已读未读消息
	 * @param account
	 * @return
	 * @throws Exception
	 */
	MessaboxVo getMessBoxInfo(String account) throws Exception;


	PageList<SysMsgTempletVo> querySysMsgTempletList(QueryFilter queryFilter);

	List<SysMsgTempletDetailVo> querySysMsgTempletDetailList(String refId);

	/**
	 * 获取 消息模板
	 * @param templetCode 模板编号
	 */
	List<Map<String, Object>> getSysMsgTempletByCode(String templetCode);
	/**
	 * 获取 消息模板子表
	 * @param refId 主表ID
	 */
	List<Map<String, Object>> getSysMsgTempletChildById(String refId);

	// 获取消息数量
	Long queryMsgUserCount(String path, String startDate, String endDate);
	// 获取消息类型数量统计
	List<Map<String, Object>> queryMsgUserCountBySource(String path, String startDate, String endDate);

	// 获取应用统计排名
	List<Map<String, Object>> queryMsgUserByAppRank(String path, String startDate, String endDate);

	// 获取天统计信息
	List<Map<String, Object>> queryMsgUserChartByDays(String path, String startDate, String endDate);
	// 获取月度统计信息
	List<Map<String, Object>> queryMsgUserChartByMonth(String path, String startDate, String endDate);
}
