package com.njcn.mapper.data;

import com.njcn.pojo.advanced.SagEvent;
import com.njcn.pojo.commons.EventInfoDetail;
import com.njcn.pojo.commons.SimpleValue;
import com.njcn.pojo.commons.area.StatisticsEventDetail;
import com.njcn.pojo.data.EventDetail;
import com.njcn.pojo.data.EventDetailExcelBody;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

public interface EventDetailMapper extends Mapper<EventDetail> {

    List<EventDetail> queryVoltageList(@Param("startTime") Date startTime, @Param("endTime") Date endTime,
                                       @Param("list") List<Integer> linesIndex,@Param("waveType") String waveType,
                                       @Param("minfuzhi") BigDecimal minfuzhi, @Param("maxfuzhi")BigDecimal maxfuzhi, @Param("mintime")BigDecimal mintime,
                                       @Param("maxtime")BigDecimal maxtime, @Param("minseverity")BigDecimal minseverity, @Param("maxseverity")BigDecimal maxseverity,
                                       @Param("eventType")List<String> eventType, @Param("eventReason")List<String> eventReason, @Param("triggerType")List<Integer> triggerType,@Param("fileflag")Integer fileflag);



    Integer getCountsByInterval(@Param("interTime") String interTime, @Param("list") List<Integer> temp);

    /**
     * 区域分析画图需要的
     */
    List<StatisticsEventDetail> queryEventDetail(@Param("startTime") Date startTime, @Param("endTime") Date endTime,
                                                 @Param("list") List<Integer> linesIndex);

    List<EventDetail> queryZj(@Param("startTime") String startTime, @Param("endTime") String endTime,
                              @Param("start") String start,
                              @Param("end") String end, @Param("lineId") Long linesIndex);

    List<EventDetail> getrunevent(@Param(value = "lineIndex") List<Integer> lineIndex);

    SimpleValue querySubLevel(@Param("startTime") Date sTime, @Param("endTime") Date eTime,
                              @Param("subIndex") Integer integer, @Param("lineIndex") List<Integer> lineIndexTemp);

    List<SimpleValue> queryLineLevel(@Param("startTime") Date sTime, @Param("endTime") Date eTime,
                                     @Param("lineIndex") List<Integer> integer);

    /**
     * @高级算法部分增加查库操作
     */
    Integer queryDealFlag(String indexEvt);

    void updateDealFlag(@Param("code") Integer code, @Param("indexEvt") String indexEvt);

    void updateCause(@Param("code") Integer code, @Param("indexEvt") String indexEvt);

    /*******************************
     * 根据ID查询暂降原因/暂降类型描述
     *******************************/
    String querySagDescriptionbyId(@Param("code") Integer code, @Param("typename") String typename);

    String querySagDescriptionbyIndex(@Param("indexEvt") String indexEvt);

    /**
     * @高级算法更新数据库操作
     */
    void updateSagData(@Param("sagEvent") SagEvent sagEvent);

    /**
     * 根据监测点查时间范围内发生了多少次暂降次数
     */
    Integer queryVoltageCountsByLineIndexs(@Param("list") List<Integer> tempLineIndexs,
                                           @Param("startTime") Date stratTime, @Param("endTime") Date endTime);

    /**
     * 根据条件查询出暂降事件列表
     */
    List<EventDetailExcelBody> getEventDetailList(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("list") List<Integer> temp);


    void updateSeverity(@Param("index") String eventDetailIndex, @Param("severity") Float severity);

    Integer getPtType(@Param("eventIndex") String index);
    
    List<SimpleValue> queryLineEvents(@Param("list") List<Integer> lineIndexs,
            @Param("startTime") Date stratTime, @Param("endTime") Date endTime);

	EventInfoDetail eventDetailBaseInfoByIndex(@Param("eventdetailIndex") String eventdetailIndex);
	
    EventDetail selectByIndex(String eventIndex);

    EventDetail selectByTimeIdAndLineIndex(@Param("timeId")Date timeId, @Param("ms")Long ms, @Param("lineId")Long lineId);

    Integer getSuspendByMonitor(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("list") List<Integer> list);
}
