package cn.iocoder.yudao.module.server.service.policycommunications;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.server.controller.admin.policycommunications.vo.*;
import cn.iocoder.yudao.module.server.controller.admin.policycommunications.vo.analysis.*;
import cn.iocoder.yudao.module.server.dal.dataobject.policycommunications.PolicyCommunicationsDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;

/**
 * 政策沟通交流 Service 接口
 *
 * @author 超级管理员
 */
public interface PolicyCommunicationsService {

    /**
     * 创建政策沟通交流
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createPolicyCommunications(@Valid PolicyCommunicationsSaveReqVO createReqVO);

    /**
     * 更新政策沟通交流
     *
     * @param updateReqVO 更新信息
     */
    void updatePolicyCommunications(@Valid PolicyCommunicationsSaveReqVO updateReqVO);

    /**
     * 删除政策沟通交流
     *
     * @param id 编号
     */
    void deletePolicyCommunications(Long id);

    /**
     * 获得政策沟通交流
     *
     * @param id 编号
     * @return 政策沟通交流
     */
    PolicyCommunicationsDO getPolicyCommunications(Long id);

    /**
     * 获得政策沟通交流分页
     *
     * @param pageReqVO 分页查询
     * @return 政策沟通交流分页
     */
    PageResult<PolicyCommunicationsDO> getPolicyCommunicationsPage(PolicyCommunicationsPageReqVO pageReqVO);

    /**
     * 更新政策沟通交流排序
     *
     * @param reqVO 排序信息
     */
    void updatePolicyCommunicationsSort(PolicyCommunicationsSortReqVO reqVO);

    /**
     * 批量更新政策沟通交流排序
     *
     */
    void batchUpdateSort(List<PolicyCommunicationsBatchSortReqVO.SortItem> items);


    Long createPolicyCommunicationsAnonymous(@Valid PolicyCommunicationsAnonymousCreateReqVO createReqVO);

    /**
     * 按用户ID查询列表（包含公开和不公开）
     */
    PageResult<PolicyCommunicationsDO> getPolicyCommunicationsByUser(PolicyCommunicationsAnonymousQueryReqVO queryReqVO);

    /**
     * 按政策ID查询列表（只查询公开）
     */
    PageResult<PolicyCommunicationsDO> getPolicyCommunicationsByPolicy(PolicyCommunicationsAnonymousQueryReqVO queryReqVO);

    /**
     * 查询所有公开列表
     */
    PageResult<PolicyCommunicationsDO> getPublicPolicyCommunications(
            PolicyCommunicationsAnonymousQueryReqVO queryReqVO);





    /**
     * 获取统计分析KPI指标
     *
     * @param queryReqVO 查询条件
     * @return KPI指标
     */
    PolicyCommunicationsAnalysisKpiRespVO getAnalysisKpi(PolicyCommunicationsAnalysisQueryReqVO queryReqVO);

    /**
     * 获取政策排行分析
     *
     * @param queryReqVO 查询条件
     * @param order 排序方式：desc-正序，asc-倒序
     * @param limit 限制数量
     * @return 排行数据
     */
    PolicyCommunicationsRankRespVO getPolicyRankAnalysis(PolicyCommunicationsAnalysisQueryReqVO queryReqVO, String order, Integer limit);

    /**
     * 获取趋势分析
     *
     * @param queryReqVO 查询条件
     * @return 趋势分析数据
     */
    PolicyCommunicationsTrendAnalysisRespVO getTrendAnalysis(PolicyCommunicationsAnalysisQueryReqVO queryReqVO);

    /**
     * 获取部门处理效能分析
     *
     * @param queryReqVO 查询条件
     * @return 部门分析数据
     */
    PolicyCommunicationsDepartmentAnalysisRespVO getDepartmentAnalysis(PolicyCommunicationsAnalysisQueryReqVO queryReqVO);

    /**
     * 获取超时未回复清单
     *
     * @param queryReqVO 查询条件
     * @param overdueDays 超时天数阈值
     * @return 超时清单
     */
    PolicyCommunicationsOverdueListRespVO getOverdueList(PolicyCommunicationsAnalysisQueryReqVO queryReqVO, Integer overdueDays);

    /**
     * 获取沟通内容分析
     *
     * @param queryReqVO 查询条件
     * @return 内容分析数据
     */
    PolicyCommunicationsContentAnalysisRespVO getContentAnalysis(PolicyCommunicationsAnalysisQueryReqVO queryReqVO);

    /**
     * 获取部门列表
     *
     * @return 部门列表
     */
    DepartmentListRespVO getDepartmentList();

    void updateStatusPolicyCommunications(PolicyCommunicationsSaveReqVO updateReqVO);
}