package com.xjrsoft.module.oa.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.yulichang.base.MPJBaseService;
import com.xjrsoft.module.oa.dto.*;
import com.xjrsoft.module.oa.entity.News;
import com.xjrsoft.module.oa.vo.NewsGradeClassTreeVo;
import com.xjrsoft.module.oa.vo.NewsPageVo;
import com.xjrsoft.module.oa.vo.ProclamationPageVo;
import com.xjrsoft.module.oa.vo.ProclamationVo;

import java.util.List;

/**
 * <p>
 * 新闻中心表 服务类
 * </p>
 *
 * @author zlf
 * @since 2022-06-16
 */
public interface INewsService extends MPJBaseService<News> {

    /**
     * 公告年级班级树
     *
     * @param
     * @return
     */
    List<NewsGradeClassTreeVo> getGradeClassTree();

    /**
     * 添加新闻
     *
     * @param addProclamationDto
     * @return
     */
    Long addProclamation(AddProclamationDto addProclamationDto);

    /**
     * 根据id获取公告详情
     *
     * @param id
     * @return
     */
    ProclamationVo getProclamationById(Long id);

    /**
     * 获取新闻分页
     *
     * @param dto
     * @return
     */
    IPage<ProclamationPageVo> proclamationManageBox(ProclamationPageDto dto);

    /**
     * 获取新闻分页
     *
     * @param dto
     * @return
     */
    IPage<ProclamationPageVo> proclamationReceiptBox(ProclamationPageDto dto);

    /**
     * 发布或下架公告
     * @param changeNewsDto
     * @return
     */
    Boolean changeStatus(ChangeNewsDto changeNewsDto);

    /**
     * 修改公告
     * @param updateProclamationDto
     * @return
     */
    boolean updateProclamation(UpdateProclamationDto updateProclamationDto);

    /**
     * 添加新闻
     *
     * @param addNewsDto
     * @return
     */
    Boolean add(AddNewsDto addNewsDto);

    /**
     * 获取新闻分页
     *
     * @param dto
     * @return
     */
    IPage<NewsPageVo> manageBox(NewsPageDto dto);

    /**
     * 获取新闻分页
     *
     * @param dto
     * @return
     */
    IPage<NewsPageVo> receiptBox(NewsPageDto dto);
    /**
     * 修改新闻
     *
     * @param updateNewsDto
     * @return
     */
    boolean update(UpdateNewsDto updateNewsDto);
    /**
     * 删除新闻 以及 消息推送
     *
     * @param ids
     * @return
     */
    boolean delete(List<Long> ids);

    /**
     * 设置新闻阅读权限
     *
     * @param updateRelationDto
     * @return
     */
    boolean updateRelation(UpdateNewsRelationDto updateRelationDto);
    /**
     * 删除新闻阅读权限
     *
     * @param deleteNewsRelationDto
     * @return
     */
    boolean deleteRelation(DeleteNewsRelationDto deleteNewsRelationDto);

    boolean SendMessage(Long id);

    boolean dataHandle(Long id);
}
