package com.casic.missiles.modular.system.dao;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.casic.missiles.modular.system.model.AlarmJob;
import com.casic.missiles.core.datascope.DataScope;
import org.apache.ibatis.annotations.Param;

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

/**
 * <p>
 * 报警工单表 Mapper 接口
 * </p>
 *
 * @author casic123
 * @since 2019-05-17
 */
public interface AlarmJobMapper extends BaseMapper<AlarmJob> {
    List<AlarmJob> jobList(@Param("page") Page<AlarmJob> page, @Param("keywords") String keywords, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("jobStatus") String jobStatus, @Param("alarmType") String alarmType, @Param("alarmContent") String alarmContent, @Param("dataScope") DataScope dataScope);
    List<AlarmJob> jobListApp(@Param("page") Page<AlarmJob> page, @Param("keywords") String keywords, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("jobStatus") String jobStatus, @Param("alarmType") String alarmType, @Param("alarmContent") String alarmContent,@Param("deptId")long deptId,@Param("userId")long userId,@Param("leaderId")long leaderId, @Param("dataScope") DataScope dataScope);
    List<AlarmJob> jobListExport(@Param("page") Page<AlarmJob> page, @Param("keywords") String keywords, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("jobStatus") String jobStatus, @Param("alarmType") String alarmType, @Param("alarmContent") String alarmContent,@Param("dataScope") DataScope dataScope);
    Map<String,Object> countByJobStatus(@Param("deptId")long deptId,@Param("spanDays") int spanDays);
    Map<String,Object> countMyJob(@Param("userId")long userId,@Param("deptId")long deptId,@Param("spanDays") int spanDays,@Param("deptIds") String deptIds);
    List<AlarmJob> jobInfo(@Param("id") int id,@Param("dataScope") DataScope dataScope);
    boolean getJob(@Param("id") int id,@Param("personId") long personId);
    boolean confirmJob(@Param("id") int id,@Param("personId") long personId,@Param("firstState") String firstState,@Param("firstStatePhotos") String firstStatePhotos,@Param("needHandle") String needHandle);
    boolean confirmOverJobAndAlarm(@Param("id") int id,@Param("personId") long personId);
    boolean transferJob(@Param("id") int id,@Param("transferPerson") long transferPerson,@Param("flowRec") String flowRec);
    boolean saveJob(@Param("id") int id,@Param("handleMessage") String handleMessage,@Param("handlePhotos") String handlePhotos);
    boolean overJob(@Param("id") int id,@Param("personId") long personId,@Param("handleMessage") String handleMessage,@Param("handlePhotos") String handlePhotos);
    boolean overAlarm(@Param("jobId") int id);
    boolean handleJob(@Param("id") int id,@Param("personId") long personId);
    String getDevCodeByJobId(@Param("id") int id);
    List<String> getDevCodesByDeptIds(@Param("deptIds") String deptIds);
    boolean batchCancel(@Param("deptIds") String deptIds,@Param("personId") long userId ,@Param("handleMessage") String handleMessage );

    /**
     * 根据工单id消警
     */
    boolean overJobAndAlarm(@Param("id") int id,@Param("personId") long personId,@Param("handleMessage") String handleMessage,@Param("handlePhotos") String handlePhotos);
    /**
     * 根据设备编号消警
     */
    boolean overJobAndAlarmByDevCode(@Param("devCode") String devCode,@Param("handleMessage") String handleMessage,@Param("handlePhotos") String handlePhotos);

    /**
     * 根据工单id消警后，插入一条正常的井盖数据
     */
    boolean insWellCover(@Param("id") int id);
    /**
     * 根据设备编号消警后，插入一条正常的井盖数据
     */
    boolean insWellCoverByDevCode(@Param("devCode") String devCode);

    /**
     * 工单列表查询（pc角色用）：根据数据权限
     */
    List<AlarmJob> jobListScope(@Param("page") Page<AlarmJob> page, @Param("keywords") String keywords, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("jobStatus") String jobStatus, @Param("alarmType") String alarmType, @Param("alarmContent") String alarmContent, @Param("dataScope") DataScope dataScope);
    /**
     * 工单列表查询（APP角色用）：待处理工单，查询配置的组中的井的相关工单
     */
    List<AlarmJob> jobListGroup(@Param("page") Page<AlarmJob> page, @Param("keywords") String keywords, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("jobStatus") String jobStatus, @Param("alarmType") String alarmType, @Param("alarmContent") String alarmContent, @Param("userId") Long userId);
    /**
     * 工单列表查询（APP角色用）：已处理工单，查询自己完成的工单（handld_job_person）
     */
    List<AlarmJob> jobListUser(@Param("page") Page<AlarmJob> page, @Param("keywords") String keywords, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("jobStatus") String jobStatus, @Param("alarmType") String alarmType, @Param("alarmContent") String alarmContent, @Param("userId") Long userId);
    /**
     * 工单列表查询（APP角色用）：不传工单状态，为以上两个列表的合集
     */
    List<AlarmJob> jobListAll(@Param("page") Page<AlarmJob> page, @Param("keywords") String keywords, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("jobStatus") String jobStatus, @Param("alarmType") String alarmType, @Param("alarmContent") String alarmContent, @Param("userId") Long userId);

    /**
     * 统计工单数量，对应jobListGroup
     */
    int countJobGroup(@Param("userId")Long userId);
    /**
     * 统计工单数量，对应jobListUser
     */
    int countJobUser(@Param("userId")Long userId);
}
