
package com.tmerclub.cloud.biz.service;

import com.tmerclub.cloud.biz.dto.NotifyLogDTO;
import com.tmerclub.cloud.biz.model.NotifyLog;
import com.tmerclub.cloud.biz.vo.NotifyLogVO;
import com.tmerclub.cloud.common.database.dto.PageDTO;
import com.tmerclub.cloud.common.database.vo.PageVO;

import java.util.List;

/**
 *
 *
 * @author tmerclub
 * @date 2021-01-16 15:01:14
 */
public interface NotifyLogService {

    /**
     * 分页获取列表
     *
     * @param page
     * @param userId 用户id
     * @param msgType 消息类型
     * @param status 消息已读状态 1.已读 0.未读
     * @return 消息数量
     */
    PageVO<NotifyLogVO> pageBySendTypeAndRemindType(PageDTO page, Long userId, Integer msgType, Integer status);

    /**
     * 根据参数获取商家端或供应商端的消息记录
     * @param page
     * @param notifyLogDTO
     * @return
     */
    PageVO<NotifyLogVO> pageShopNotifyLogByParam(PageDTO page, NotifyLogDTO notifyLogDTO);

    /**
     * 批量更新
     * @param notifyLogList
     */
    void updateBatchById(List<NotifyLogVO> notifyLogList);

    /**
     * 查询用户未读消息数量
     * @param userId 用户id
     * @param msgType 消息类型
     * @return 未读消息数量
     */
    int countUnreadBySendTypeAndRemindType(Long userId, Integer msgType);

    /**
     * 批量保存
     * @param notifyLogs 日志信息
     */
    void saveBatch(List<NotifyLog> notifyLogs);

    /**
     * 分页获取列表
     * @param pageDTO 分页信息
     * @param notifyLogDTO 搜索参数
     * @return 分页列表
     */
    PageVO<NotifyLogVO> page(PageDTO pageDTO, NotifyLogDTO notifyLogDTO);

    /**
     * 根据条件获取已发送消息数量
     * @param orderId 关联订单id
     * @param level 等级
     * @param userId 用户id
     * @param sendType 发送类型
     * @return 已发送消息数量
     */
    int countNotifyByConditions(Long orderId, Integer level, Long userId, Integer sendType);

    /**
     * 标记消息为已读
     * @param id
     */
    void updateStatus(Long id);

    /**
     * 根据id获取消息详情
     * @param logId
     * @return
     */
    NotifyLogVO getByLogId(Long logId);

    /**
     * 消息批量设置已读
     * @param logIds
     */
    void isReadByIds(List<Long> logIds);

    /**
     * 全部标为已读
     * @param tenantId
     */
    void isReadByShopId(Long tenantId);
}
