package com.njcn.device.pq.api;

import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.device.pq.api.fallback.GeneralDeviceInfoClientFallbackFactory;
import com.njcn.device.pq.pojo.bo.BaseLineInfo;
import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.po.TopMsgPO;
import com.njcn.device.pq.pojo.vo.DevDetail;
import com.njcn.device.pq.pojo.vo.RStatOnlineRateVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * @author hongawen
 * @version 1.0.0
 * @date 2022年02月14日 14:02
 */
@FeignClient(
        value = ServerInfo.DEVICE,
        path = "/deviceInfo",
        fallbackFactory = GeneralDeviceInfoClientFallbackFactory.class,
        contextId = "deviceInfo")
public interface GeneralDeviceInfoClient {


    /**
     * 获取按部门分类的实际运行终端综合信息
     *
     * @param deviceInfoParam 查询终端条件
     * @return 按部门分类的实际运行终端综合信息
     */
    @PostMapping("/getPracticalRunDeviceInfoAsDept")
    HttpResult<List<GeneralDeviceDTO>> getPracticalRunDeviceInfoAsDept(@RequestBody DeviceInfoParam deviceInfoParam);


    /**
     * 获取按部门分类的实际便携式终端综合信息
     *
     * @param deviceInfoParam 查询终端条件
     * @return 按部门分类的实际便携式终端综合信息
     */
    @PostMapping("/getOfflineRunDeviceInfoAsDept")
    HttpResult<List<GeneralDeviceDTO>> getOfflineRunDeviceInfoAsDept(@RequestBody DeviceInfoParam deviceInfoParam);


    /**
     * 获取按部门分类的实际所有终端综合信息
     *
     * @param deviceInfoParam 查询终端条件
     * @return 按部门分类的实际所有终端综合信息
     */
    @PostMapping("/getPracticalAllDeviceInfoAsDept")
    HttpResult<List<GeneralDeviceDTO>> getPracticalAllDeviceInfoAsDept(@RequestBody DeviceInfoParam deviceInfoParam);

    /**
     * 获取变电站分类的实际运行终端综合信息
     *
     * @param deviceInfoParam 查询终端条件
     * @return 按部门分类的实际所有终端综合信息
     */
    @PostMapping("/getPracticalRunDeviceInfoAsSubstation")
    HttpResult<List<GeneralDeviceDTO>> getPracticalRunDeviceInfoAsSubstation(@RequestBody DeviceInfoParam deviceInfoParam);


    /**
     * 获取变电站分类的所有终端综合信息
     *
     * @param deviceInfoParam 查询终端条件
     * @return 获取变电站分类的所有终端综合信息
     */
    @PostMapping("/getPracticalAllDeviceInfoAsSubstation")
    HttpResult<List<GeneralDeviceDTO>> getPracticalAllDeviceInfoAsSubstation(@RequestBody DeviceInfoParam deviceInfoParam);


    /**
     * 获取实际运行终端综合信息
     *
     * @param deviceInfoParam 查询终端条件
     * @return 按部门分类的实际运行终端综合信息
     */
    @PostMapping("/getPracticalRunDeviceInfo")
    HttpResult<List<GeneralDeviceDTO>> getPracticalRunDeviceInfo(@RequestBody DeviceInfoParam deviceInfoParam);


    /**
     * 获取实际便携式终端综合信息
     *
     * @param deviceInfoParam 查询终端条件
     * @return 按部门分类的实际便携式终端综合信息
     */
    @PostMapping("/getOfflineRunDeviceInfo")
    HttpResult<List<GeneralDeviceDTO>> getOfflineRunDeviceInfo(@RequestBody DeviceInfoParam deviceInfoParam);


    /**
     * 获取实际所有终端综合信息
     *
     * @param deviceInfoParam 查询终端条件
     * @return 按部门分类的实际所有终端综合信息
     */
    @PostMapping("/getPracticalAllDeviceInfo")
    HttpResult<List<GeneralDeviceDTO>> getPracticalAllDeviceInfo(@RequestBody DeviceInfoParam deviceInfoParam);

    /**
     * 获取监测点及以上层的基础信息
     */
    @PostMapping("/getBaseLineInfo")
    HttpResult<List<BaseLineInfo>> getBaseLineInfo(@RequestBody List<String> lineIndex);

    /**
     * 终端在线率（谐波专用）
     * @param param
     * @return
     */
    @PostMapping("/getOnlineRateByDevIds")
    HttpResult<List<RStatOnlineRateVO>> getOnlineRateByDevIds(@RequestBody OnlineRateParam param);

    /**
     *根据单位获取投运监测点（双系统）
     * @author cdf
     * @date 2023/6/7
     */
    @PostMapping("/deptGetRunLine")
    HttpResult<List<String>> deptGetRunLine(@RequestParam("deptId")String deptId);


    /**
     *根据单位获取暂态系统投运监测点
     * @author cdf
     * @date 2023/6/7
     */
    @GetMapping("/deptGetRunLineEvent")
    HttpResult<List<String>> deptGetRunLineEvent(@RequestParam("deptId")String deptId);

    /**
     * 根据单位获取终端集合
     * @param deptId
     * @return
     */
    @PostMapping("/deptGetRunDev")
    HttpResult<List<String>> deptGetRunDev(@RequestParam("deptId")String deptId);

    /**
     * 根据终端id集合获取终端信息
     * @param devIds
     * @return
     */
    @PostMapping("/getDevInfoByIds")
    HttpResult<List<DevDetail>> getDevInfoByIds(@RequestBody List<String> devIds);

    /**
     * @Description: 根据id集合获取终端消息信息
     * @Author: wr
     * @Date: 2023/11/9 13:55
     */
    @PostMapping("/getTopMsgInfoByIds")
    HttpResult<List<TopMsgPO>> getTopMsgInfoByIds(@RequestBody OnlineRateParam param);

    /**
     * 根据终端id集合获取总终端在线率
     * @param param
     * @return
     */
    @PostMapping("/getTotalOnlineRates")
    HttpResult<Float> getTotalOnlineRates(@RequestBody OnlineRateParam param);
}
