/*
 * Author: wangjian
 * 生成Service
 */
package com.tofly.xrtymis.custom.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tofly.common.core.entity.ResultRespone;
import com.tofly.pojo.comm.Audit;
import com.tofly.pojo.maintain.vo.datail.RepairOrderDetailVo;
import com.tofly.pojo.plan.Checkhistory;
import com.tofly.xrtymis.custom.dto.*;
import com.tofly.xrtymis.custom.vo.*;
import com.tofly.xrtymis.entity.File;
import com.tofly.xrtymis.entity.Gdglinfo;
import com.tofly.xrtymis.entity.Resultdisp;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 业务工单详情表
 *
 * @author fu
 * @date Fri Mar 19 00:00:00 CST 2021
 */
public interface GdglinfoService extends IService<Gdglinfo> {

    /**
     * 工单详情查询
     */
    Page<Map> gdInfoQuery(HttpServletResponse response, Page page, GdInfoQueryDto dto, Integer export);

    /**
     * 根据角色获取人员
     * @param roleId 角色id
     * @return list
     */
    List<Map> getUserByRole(String roleId);
    /**
     * 创建工单
     * @param extend
     */
    ResultRespone saveGdglInfo(List<MultipartFile> fileList,GdglinfoExtendDto extend, List<Resultdisp> resultdispList);

    /**
     * 修改工单
     * @param fileList
     * @param extend
     * @return
     */
    ResultRespone updateGdglInfo(List<MultipartFile> fileList,GdglinfoExtendDto extend);

    /**
     * 认证处置
     * @param fileList
     * @param extend
     * @return
     */
    ResultRespone saveCertification(List<MultipartFile> fileList, GdglinfoExtendDto extend, List<Resultdisp> resultdispList);

    Page<Gdglinfo> pageTypeSelect(Page page, String gdlx, Long lcjd, Date stTime, Date enTime);

    Page<Gdglinfo> fieldPersonnel(Page page, String slbm, String slry, Date stTime, Date enTime);

    Page<Map> orderMonitoring(Page page, Map map);

    Page<Map> summarizeNumber(Page page, Gdglinfo gdglinfo);

    Page<Map> orderAnalysis(Page page, Map map);

    ResultRespone orderAnalysisDetails(Map map);

    Page<Map> orderAnalysisByTimeAndType(Page page, Map map);

    Page<Map> collectionManagementTwo(Page page, Map map);

    Page<Map> collectionManagementThree(Page page, Map map);

    ResultRespone orderReview(GdglinfoExtendDto extend, List<Resultdisp> resultdispList);

    ResultRespone qcCheck(GdglinfoExtendDto extend , List<Resultdisp> resultdispList);

    ResultRespone actionResults(List<MultipartFile> fileList,GdglinfoExtendDto extend);

    ResultRespone orderReturnVisit(Gdglinfo gdglinfo);

    List<File> getFileInformation(String ids);

    GdglinfoFileInformationVO getAllInformation(Long id);

    Page<Gdglinfo> getListWater(Page page, Long id,Long type,String status,Date stTime,Date enTime);

    Page<Gdglinfo> orderMonitoringDetails(Page page, String state, Date stTime, Date enTime);

    ResultRespone reminder(Gdglinfo gdglinfo);

    Map monthCount();

    OrderStatisticalVO statistical();

    ClassificationStatisticsVO classificationStatistics();

    void timeoutAnalysis();
    //认证处置即将超时处理
    void rzczTimeout();
    //认证审核即即将超时处理
    void rzshTimeout();
    //认证质检
    void rzzjTimeout();
    //结果处置
    void jgczTimeout();
    //总时限
    void gdcsTimeout();


    /**
     * 接单超时
     */
    void jdTimeout();
    /**
     * 认证超时
     */
    void rzcsTimeout();

    /**
     * 审核超时
     */
    void shcsTimeout();

    /**
     * 质检超时
     */
    void zjcsTimeout();

    /**
     * 结果处置超时
     */
    void czcsTimeout();

    /**
     * 总时限超时
     */
    void allcsTimeout();

    /**
     * 修改接单状态
     * @param id 工单id
     * @return
     */
    boolean updateJdZT(long id);

    /**
     * 统计工单完成情况
     * @return
     */
    Object collectGDComplete(GdglinfoTjDTO gdglinfoTjDTO,String isExport, String isDetails,HttpServletResponse response);

    Object collectGdIndex(GdglinfoTjDTO gdglinfoTjDTO);

    IPage<Gdglinfo> collectGdAll(Page page , GdglinfoDTO gdglinfoTjDTO);

    List<Map> collectGdInfoDetail(GdglinfoDTO gdglinfoDTO);

    List<Map> collectInfoByJgcz(GdglinfoDTO gdglinfoDTO);

    List<Map> collectInfoByJgsh(GdglinfoDTO gdglinfoDTO);

    IPage<Gdglinfo> gdCollectDetails(Page page,GdglinfoDTO gdglinfoDTO);

    Page<Gdglinfo> gdStatisticsInfo(Page page, GdglinfoDTO gdglinfoDTO, String templateFlag , HttpServletResponse response);

    Page<Gdglinfo> spotCheckInfo(Page page,DateTimeDTO timeDTO, Integer bl,Integer isRxlx);

    boolean auditDispose(Long planId, String auditResult, String auditNotes,GdglinfoExtendDto gdglinfoExtendDto);

    /**
     * 工单是否添加了对应审批链
     * @param planId
     * @return
     */
    List<AuditInfoVo> isAuditChain(Long planId);

    /**
     * 新增对应工单审批链
     * @param auditList
     * @return
     */
    boolean saveAuditChain(List<Audit> auditList);

    /**
     * 修改审批链
     * @param auditList
     * @return
     */
    boolean updateAuditChain(List<Audit> auditList);
    /**
     * 根据工单id获取审核历史信息
     * @param planId
     * @return
     */
    List<Checkhistory> getAuditHisInfo(Long planId);

    Boolean updateGdLcjdState(String wxgdbh,Integer type);

    List<RepairOrderDetailVo> gdGdQWXInfo(String gdbh,String flag,String type);

    boolean gdglToPwxPlaceOrder(GdglinfoExtendDto gdglinfoExtendDto);

    ResultRespone updateGDGDLxInfo(Long id, Long lxid, String remarks);

    /**
     * 外部调用创建工单
     * @param dto 参数
     * @param fileList 文件集合
     * @return
     */
    ResultRespone foreignSaveOrder(ForeignOrderDto dto, List<MultipartFile> fileList);

    void foreignOrderCallback();

    /**
     * 业务工单增加辅助派工功能(用户上班获取最新实时经纬度+排班内容比较)
     * @return
     */
     List<AuxiliaryDispatchingVo> auxiliaryDispatching(String deptIds);

    /**
     * 业务工单加急督办
     * @param orderId
     * @param lcjd
     * @param userIds
     * @return
     */
    Boolean orderUrgent(Long orderId, String lcjd,String userIds);
    /**
     * 获取工单信息中(除了结果处置多人,结果审核多人,归档) 当前工单状态中 处理人处理部门信息
     * @return
     */
    List<OrderUserDealNumVo> getOrderUserDealNum();
}
