package com.hdkj.lt.bf.service;

import com.hdkj.lt.bf.entity.SjztPwwyyqxtPrmPdrOutageMvDs;
import com.hdkj.lt.bf.entity.dto.TodayOutageData;
import com.baomidou.mybatisplus.extension.service.IService;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
* @author lenovo
* @description 针对表【sjzt_pwwyyqxt_prm_pdr_outage_mv_ds(un4113_02_pwwyyqxt_prm_pdr_outage_mv_ds)】的数据库操作Service
* @createDate 2026-07-18 14:32:38
*/
public interface SjztPwwyyqxtPrmPdrOutageMvDsService extends IService<SjztPwwyyqxtPrmPdrOutageMvDs> {

    /**
     * 按馈线名单+时间范围查询停电时户数（月份硬编码，静态网架用）
     */
    BigDecimal selectStaticOutageDurationHoursHouseholds(List<String> feederNameList);

    /**
     * 分层分级获取停电聚合数据（树递归 + 自定义时间范围，适用于 T-2 表）
     * <p>
     * 支持三种节点维度：
     * type=2 区县 — 递归收集该区县所有馈线的停电时户数
     * type=3 变电站 — 递归收集该变电站所有馈线的停电时户数
     * type=4 馈线 — 直接查该单条馈线的停电时户数
     * <p>
     * 返回 T-2 表的总停电时户数和总影响用户数（中压+低压），调用方自行计算平均时长。
     *
     * @param id        节点设备ID（区县maintOrgId / 变电站ID / 馈线ID）
     * @param type      节点类型 2=区县 3=变电站 4=馈线
     * @param startTime 开始时间 inclusive
     * @param endTime   结束时间 exclusive
     * @return 停电聚合数据（总时户数 + 总影响用户数），无数据时返回 (0, 0)
     */
    TodayOutageData getOutageDurationHoursHouseholds(String id, Integer type,
                                                     LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 获取当日停电数据（来自 grid_pd_outage_event_base 实时表）
     * <p>
     * 不需要树递归，按节点类型直接过滤字段：
     * type=2 → county_id
     * type=3 → rdt_subs_id
     * type=4 → rdt_feeder_id
     *
     * @param id   节点设备ID
     * @param type 节点类型 2=区县 3=变电站 4=馈线
     * @return 今日停电数据（时户数 + 平均时长），无数据时返回 (0, 0)
     */
    TodayOutageData getTodayOutageData(String id, Integer type);
}
