package com.ruoyi.cs.service;

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

import com.github.pagehelper.PageInfo;
import com.ruoyi.cs.domain.CsResourceOrderApply;
import com.ruoyi.cs.domain.ResourceOrderApplyListVO;
import com.ruoyi.cs.domain.ResourceOrderApplyVO;
import com.ruoyi.cs.domain.dto.*;
import com.ruoyi.cs.domain.vo.*;

/**
 * 资源、工单申请Service接口
 *
 * @author ruoyi
 * @date 2024-04-23
 */
public interface ICsResourceOrderApplyService
{
    /**
     * 查询资源、工单申请
     *
     * @param applyId 资源、工单申请主键
     * @return 资源、工单申请
     */
    public CsResourceOrderApply selectCsResourceOrderApplyByApplyId(String applyId);

    /**
     * 管理PC 查询资源、工单申请列表
     *
     * @param csResourceOrderApply 资源、工单申请
     * @return 资源、工单申请集合
     */
    public List<ResourceOrderApplyVO> selectCsResourceOrderApplyList(CsResourceOrderApply csResourceOrderApply);

    /**
     * 新增资源、工单申请
     *
     * @param csResourceOrderApply 资源、工单申请
     * @return 结果
     */
    public int insertCsResourceOrderApply(CsResourceOrderApply csResourceOrderApply);

    /**
     * 修改资源、工单申请
     *
     * @param csResourceOrderApply 资源、工单申请
     * @return 结果
     */
    public int updateCsResourceOrderApply(CsResourceOrderApply csResourceOrderApply);

    /**
     * 批量删除资源、工单申请
     *
     * @param applyIds 需要删除的资源、工单申请主键集合
     * @return 结果
     */
    public int deleteCsResourceOrderApplyByApplyIds(String[] applyIds);

    /**
     * 删除资源、工单申请信息
     *
     * @param applyId 资源、工单申请主键
     * @return 结果
     */
    public int deleteCsResourceOrderApplyByApplyId(String applyId);

    /**
     * 新增资源申请-->待审批
     * @param resourceDTO 资源申请信息
     * @return
     */
    public int insertApplyForResource(CsResourceOrderApplyADDDTO resourceDTO);

    /**
     * 资源申请信息详情
     * @param applyId 申请ID
     * @return
     */
    public CsResourceOrderApplyVO applyForResourceDetail(String applyId);

    /**
     * 管理补充资源申请信息-->待确认
     * @param editDTO
     * @return
     */
    public int updateApplyForResource(CsResourceOrderApplyEditDTO editDTO);

    /**
     * 用户PC——查询资源、工单申请列表
     *
     * @param paramDto 资源、工单申请
     * @return 资源、工单申请集合
     */
    public List<MemberCsResourceOrderApplyVO> selectOrderApplyListForMember(MemberResOrderApplyQueryDTO paramDto);


    /**
     * 用户确认资源申请信息-->待上传盖章
     * @param editDTO
     * @return
     */
    public int checkApplyForResource(CsResourceOrderApplyEditDTO editDTO);

    /**
     * 上传盖章材料 --> 待分配
     * @param editDTO
     * @return
     */
    public int uploadFileForResource(CsResourceOrderApplyEditDTO editDTO);

    /**
     * 管理员审核资源申请信息-->待分配6/审核拒绝5
     * @param checkDTO
     * @return
     */
    public int checkApplyForResourceAndManager(CsResourceOrderApplyManageCheckDTO checkDTO);

    /**
     * 新增工单
     *
     * @param orderDTO 工单申请信息
     * @return
     */
    public int insertApplyForOrder(CsOrderApplyAddDTO orderDTO);

    /**
     * 编辑工单
     *
     * @param orderDTO 工单申请信息
     * @return
     */
    public int editApplyForOrder(CsOrderApplyEditDTO orderDTO);

    /**
     * 处理工单
     *
     * @param orderDTO 工单申请信息
     * @return
     */
    public int handleApplyForOrder(CsOrderApplyEditDTO orderDTO);

    /**
     * 工单申请信息详情
     * @param applyId 申请ID
     * @return
     */
    public CsOrderApplyVO applyForOrderDetail(String applyId);

    /**
     * 用户PC——查询我的工单列表
     *
     * @param myOrderQuery 工单
     * @return 资源、工单申请集合
     */
    public List<MemberMyOrderQueryVo> selectMyOrderApplyListForMember(MemberMyOrderQueryDTO myOrderQuery);

    /**
     * 用户待确认状态 编辑资源申请基础信息
     * @param editDTO 资源申请基础信息
     * @return
     */
    public int editBaseInfoApplyForMember(CsResourceOrderApplyEditDTOForMember editDTO);

    /**
     * xcx——查询资源、工单申请列表
     *
     * @param paramDto 资源、工单申请
     * @return 资源、工单申请集合
     */
    public List<XcxCsOrderApplyVO> selectOrderApplyListForXcx(XcxApprovalListDTO paramDto);

    /**
     * xcx——工单详情
     * @param paramDto
     * @return
     */
    public XcxResOrderApplyDetailVO selectOrderApplyDetailForXcx(XcxApprovalListDTO paramDto);

    /**
     * xcx——消息列表
     * @return
     */
    public PageInfo<XcxCsOrderApplyVO> getMsgList(Integer pageNum, Integer pageSize);

    /**
     * 查询管理端资源、工单相关统计
     *
     * @param beginAt 开始时间
     * @param endAt 结束时间
     * @return 资源、工单数量集合
     */
    public Map<String,Object> selectResourceOrderStatistics(String beginAt, String endAt);

    /**
     * 工单/资源满意度统计
     * @param dto dto
     * @return AnalysisLineVO
     */
    Map<String,Object> getSatisfactionStatistics(SatisfactionStatisticsDTO dto);

    /**
     * 单位工单提交统计
     * @param dto dto
     * @return AnalysisLineVO
     */
    Map<String,Object> getWorOrderSubmissionStatistics(SatisfactionStatisticsDTO dto);

    /**
     * 导出资源、工单申请列表
     * @return  List<ExportOrderResponseTimeStatisticsVO>
     */
    List<ExportOrderResponseTimeStatisticsVO> exportOrderResponseTimeStatistics(SatisfactionStatisticsDTO dto);

    /**
     * 导出工单处理时长
     * @param dto dto
     * @return
     */
    List<CsResourceOrderApply> exportWorkOrderProcessingTime(SatisfactionStatisticsDTO dto);

    /**
     * 查询工单列表
     *
     * @param csResourceOrderApply 资源、工单申请
     * @return 资源、工单申请集合
     */
    List<ResourceOrderApplyListVO> selectResourceOrderApplyList(CsResourceOrderApply csResourceOrderApply);

    /**
     * 查询工单数量统计信息
     *
     * @param params
     * @return
     */
    Map<String,Object> searchResourceOrderApplyStatisticsInfo(Map<String,Object> params);

    /**
     * 查询部门列表
     *
     * @return
     */
    List<Map<String,Object>> searchDeptList();

}
