package com.hotent.portal.persistence.dao;


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

import com.hotent.portal.vo.SysMsgTempletDetailVo;
import com.hotent.portal.vo.SysMsgTempletVo;
import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.hotent.portal.model.SysMessage;

/**
 * 系统信息DAO接口
 * 
 * @company 广州宏天软件股份有限公司
 * @author hugh
 * @email zxh@jee-soft.cn
 * @date 2014-11-18 09:03:31
 */
public interface SysMessageDao extends BaseMapper<SysMessage> {
	
	/**
	 * 获取信息通过用户id
	 * @param queryFilter 通用查询器
	 * @return
	 */
	IPage<SysMessage> getMsgByUserId(IPage<SysMessage> convert2iPage,@Param("map") Map<String, Object> params,@Param(Constants.WRAPPER) Wrapper<SysMessage> convert2Wrapper);

	/**
	 * 管理端 获取系统或个人消息
	 * @param queryFilter 通用查询器
	 * @return
	 */
	IPage<SysMessage> getMsgListNoUser(IPage<SysMessage> convert2iPage,@Param("map") Map<String, Object> params,@Param(Constants.WRAPPER) Wrapper<SysMessage> convert2Wrapper);

	void updateDelFlagByIds(@Param("ids") List<String> ids);

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

	/**
	 * 获取未读信息通过用户id
	 * @param userId 用户id
	 * @param isPublish 是否发布
	 * @return
	 */
	List<SysMessage> getNotReadMsgByUserId(@Param("receiverId")String userId,@Param("isPublish") int isPublish);
	
	/**
	 * 获取一条DB2数据库未读信息通过用户id
	 * @param userId 用户id
	 * @return
	 */
	SysMessage getOneNotReadMsgByUserIdDb2(String userId);
	
	/**
	 * 获取一条mssql数据库未读信息通过用户id
	 * @param userId 用户id
	 * @return
	 */
	SysMessage getOneNotReadMsgByUserIdMssql(String userId);
	
	/**
	 * 获取一条mysql数据库未读信息通过用户id
	 * @param userId 用户id
	 * @return
	 */
	SysMessage getOneNotReadMsgByUserIdMysql(String userId);
	
	/**
	 * 获取一条oracl数据库未读信息通过用户id
	 * @param userId 用户id
	 * @return
	 */
	SysMessage getOneNotReadMsgByUserIdOracl(String userId);

	/**
	 * 获取未读信息数量
	 * @param receiverId 用户id
	 * @return
	 */
	Map<String, Object> getNoReadMsgbadge(@Param("receiverId")String receiverId);
	
	/**
	 * 获取未读信息数量
	 * @param receiverId 用户id
	 * @return
	 */
	List<SysMessage> getNotReadMsgNum(@Param("receiverId")String receiverId, @Param("isPublic")String isPublic);
	
	/**
	 * 获取信息数量
	 * @param receiverId 接收id
	 * @return
	 */
	List<SysMessage> getMsgSize(@Param("receiverId")String receiverId, @Param("isPublic")String isPublic);


	IPage<SysMsgTempletVo> querySysMsgTempletList(IPage<SysMsgTempletVo> convert2iPage, @Param(Constants.WRAPPER) Wrapper<SysMsgTempletVo> convert2Wrapper);

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

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

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

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