package com.microservices.cms.doc.mapper;

import com.microservices.cms.doc.domain.CmsDoc;
import com.microservices.cms.doc.domain.CmsDocSearchVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 文章信息Mapper接口
 *
 * @author otto
 * @date 2023-03-28
 */
@Mapper
public interface CmsDocMapper {
    /**
     * 查询文章信息
     *
     * @param id 文章信息主键
     * @return 文章信息
     */
    public CmsDoc selectCmsDocById(Long id);

    /**
     * 查询文章信息列表
     *
     * @param cmsDocSearchVo 文章信息
     * @return 文章信息集合
     */
    public List<CmsDoc> selectCmsDocList(CmsDocSearchVo cmsDocSearchVo);

    /**
     * 新增文章信息
     *
     * @param cmsDoc 文章信息
     * @return 结果
     */
    public int insertCmsDoc(CmsDoc cmsDoc);

    /**
     * 修改文章信息
     *
     * @param cmsDoc 文章信息
     * @return 结果
     */
    public int updateCmsDoc(CmsDoc cmsDoc);

    /**
     * 删除文章信息
     *
     * @param id 文章信息主键
     * @return 结果
     */
    public int deleteCmsDocById(Long id);

    /**
     * 批量删除文章信息
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteCmsDocByIds(Long[] ids);

    CmsDoc selectCmsDocByNameAndDeptId(@Param("name") String name, @Param("deptId") Long deptId, @Param("dirName") String dirName);

    CmsDoc selectCmsDocDirByNameAndDeptId(@Param("name") String name, @Param("deptId") Long deptId);

    CmsDoc selectCmsDocDirById(Long dirId);

    CmsDoc selectCmsDocByFilePathAndDeptId(@Param("filePath") String filePath, @Param("deptId") Long deptId);

    List<CmsDoc> selectHotCmsDocList(CmsDoc cmsDocInput);

    List<CmsDoc> selectCmsDocDirByDeptIdAndInName(@Param("deptId") Long deptId, @Param("cmsDirNameList") List<String> cmsDirNameList);

    List<CmsDoc> selectCmsDocByDeptIdAndInFilePath(@Param("deptId") Long deptId, @Param("filePathList") List<String> filePathList);

    List<CmsDoc> selectCmsDirListByDeptId(Long deptId);

    Long getCmsCountByDeptId(@Param("deptId") Long deptId);

    int selectCmsDocCount(CmsDocSearchVo cmsDocSearch);

    /**
     * 查询专区下栏目/文章的最大排序值
     *
     * @param deptId
     * @param isDir
     * @return
     */
    Integer selectCmsMaxSortByDeptId(@Param("deptId") Long deptId, @Param("isDir") boolean isDir);

    /**
     * 检查对应排序有没有文章/栏目
     *
     * @param deptId
     * @param isDir
     * @param sort
     * @return
     */
    Boolean hasSortCmsByDeptId(@Param("deptId") Long deptId, @Param("isDir") Boolean isDir, @Param("sort") Integer sort);

    /**
     * 获取指定序号的文章/栏目
     *
     * @param oldCmsDoc
     * @param order
     * @param isChangeOnDir
     * @param isContainsSelf
     * @return
     */
    CmsDoc selectCmsByOrderAndDeptId(@Param("oldCmsDoc") CmsDoc oldCmsDoc, @Param("order") Integer order, @Param("isChangeOnDir") boolean isChangeOnDir, @Param("isContainsSelf") boolean isContainsSelf);

    /**
     * 查询专区下栏目/文章的最小排序值
     *
     * @param deptId
     * @param isDir
     * @return
     */
    Integer selectCmsMinSortByDeptId(@Param("deptId") Long deptId, @Param("isDir") boolean isDir);

    /**
     * 批量增加大于指定排序的排序值
     *
     * @param deptId
     * @param isDir
     * @param setSort
     * @return
     */
    Integer batchUpdateCmsSortIncreased(@Param("deptId") Long deptId, @Param("isDir") Boolean isDir, @Param("setSort") Integer setSort);

    /**
     * 批量减少小于指定排序的排序值
     *
     * @param deptId
     * @param isDir
     * @param setSort
     * @return
     */
    Integer batchUpdateCmsSortDecrease(@Param("deptId") Long deptId, @Param("isDir") Boolean isDir, @Param("setSort") Integer setSort);

    /**
     * 查询专区下首页推荐数量
     *
     * @param deptId
     * @param dirName
     * @return
     */
    Integer selectHomepageCountByDeptIdAndDirName(@Param("deptId") Long deptId, @Param("dirName") String dirName);

    /**
     * 查找组织下没有栏目的文章
     *
     * @param deptId
     * @return
     */
    List<CmsDoc> selectNotDirCmsDocList(Long deptId);

    CmsDoc selectCmsDocByDeptIdAndFilePath(@Param("deptId") Long deptId, @Param("filePath") String filePath);

    int hasSourceDoc(@Param("id") String id);

    /**
     * 获取专区下待审核文章数量
     *
     * @param deptId
     * @return
     */
    Long getNotAuditCmsCountByDeptId(Long deptId);

    Long getCmsDocVisitsByDeptId(Long deptId);
}
