package com.yeejoin.amos.boot.module.jxiop.biz.controller;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.module.common.biz.utils.CommonResponseUtil;
import com.yeejoin.amos.boot.module.jxiop.api.Enum.GeneratingCapacity;
import com.yeejoin.amos.boot.module.jxiop.api.dto.IndexDto;
import com.yeejoin.amos.boot.module.jxiop.api.dto.TreeDto;
import com.yeejoin.amos.boot.module.jxiop.api.entity.StationBasic;
import com.yeejoin.amos.boot.module.jxiop.api.mapper.MonitorFanIndicatorMapper;
import com.yeejoin.amos.boot.module.jxiop.api.mapper.StationBasicMapper;
import com.yeejoin.amos.boot.module.jxiop.biz.dto.IndicatorsDto;
import com.yeejoin.amos.boot.module.jxiop.biz.dto.ResultsData;
import com.yeejoin.amos.boot.module.jxiop.biz.service.impl.CommonServiceImpl;
import com.yeejoin.amos.boot.module.jxiop.biz.service.impl.MonitorFanIndicatorImpl;
import com.yeejoin.amos.component.influxdb.InfluxdbUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.typroject.tyboot.component.emq.EmqKeeper;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.util.*;
import java.util.stream.Collectors;

@RestController
@Api(tags = "大屏相关API")
@RequestMapping(value = "/monitorFanIdx")
public class MonitorFanIdxController extends BaseController {

    @Autowired
    MonitorFanIndicatorImpl monitorFanIndicatorImpl;

    @Autowired
    MonitorFanIndicatorImpl monitorFanIndicator;


    @Autowired
    StationBasicMapper stationBasicMapper;

    @Autowired
    CommonServiceImpl commonService;

    @Value("${gl.sum.column}")
    String sumColumn;

    @Value("${gl.avg.column}")
    String avgColumn;

    @Value("${fan.statuts.stattuspath}")
    private  String fanStatusImagePathPrefix;

    @Autowired
    MonitorFanIndicatorMapper monitorFanIndicatorMapper;

    @Autowired
    EmqKeeper emqKeeper;
    @Autowired
    InfluxdbUtil influxdbUtil;
    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "根据设备编号、场站id、前段展示模块、系统类型查询表数据")
    @GetMapping("/getFanIdxInfoByPage")
    public ResponseModel<IPage<IndexDto>> getFanIdxInfoByPage(@RequestParam(value = "equipNum", required = false) String equipNum,
                                                              @RequestParam(value = "stationId", required = false) String stationId,
                                                              @RequestParam(value = "frontModule", required = false) String frontModule,
                                                              @RequestParam(value = "systemType", required = false) String systemType,
                                                              @RequestParam(value = "current", required = false) int current,
                                                              @RequestParam(value = "size", required = false) int size) {
        return ResponseHelper.buildResponse(monitorFanIndicator.getFanIdxInfoByPage(equipNum, stationId, frontModule, current, size, systemType));
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "左侧树API")
    @GetMapping("/getTreeInfo")
    public ResponseModel<TreeDto> getTreeInfo(@RequestParam(value = "sequenceNbr") String sequenceNbr) {
        return ResponseHelper.buildResponse(monitorFanIndicator.getTreeInfo(sequenceNbr));
    }


    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "风机布置图 - 风机状态列表")
    @GetMapping("/getFanStatusList")
    public ResponseModel<IPage<IndexDto>> getFanStatusList(@RequestParam(value = "stationId", required = false) String stationId,
                                                           @RequestParam(value = "current", required = false) int current,
                                                           @RequestParam(value = "size", required = false) int size) {
        List<IndexDto> fanStatusList = monitorFanIndicator.getFanStatusList(stationId);
        Page<IndexDto> page = new Page<>(current, size);
        List<IndexDto> collect = fanStatusList.stream()
                .skip((long) (current - 1) * size)
                .limit(size)
                .collect(Collectors.toList());
        page.setTotal(fanStatusList.size());
        page.setRecords(collect);
        return ResponseHelper.buildResponse(page);
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "风机布置图 - 风机状态图片")
    @GetMapping("/getFanStatusListImage")
    public ResponseModel<IPage<HashMap<String,String>>> getFanStatusListImages() {
        List<IndexDto> fanStatusList = monitorFanIndicator.getFanStatusList("1660231556607774721");
        List<IndexDto> collect = fanStatusList.stream()
                .limit(999)
                .collect(Collectors.toList());
        IPage<HashMap<String,String>> page = new Page<>();
        HashMap<String,String> hashMap = new HashMap<>();
        List<IndexDto> indexDtoList = collect.stream().sorted(Comparator.comparing(IndexDto::getEquipmentNumber)).collect(Collectors.toList());
        for (int i = 1; i <= indexDtoList.size(); i++) {
            IndexDto indexDto =  indexDtoList.get(i-1);
            hashMap.put("url"+i,fanStatusImagePathPrefix+"/"+"风机-"+indexDto.getState()+".gif");
            hashMap.put("name"+i,indexDto.getEquipmentNumber());
        }
        page.setTotal(10);
        page.setSize(10);
        page.setCurrent(1);
        List<HashMap<String,String>> hashMapList = new ArrayList<>();
        hashMapList.add(hashMap);
        page.setRecords(hashMapList);
        return ResponseHelper.buildResponse(page);
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "风机布置图 - 风机数量")
    @GetMapping("/getFanNum")
    public ResponseModel<Integer> getFanNum(@RequestParam(value = "stationId", required = false) String stationId) {
        Integer num = monitorFanIndicator.getFanNum(stationId);
        return ResponseHelper.buildResponse(num);
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "风机布置图 - 实时监控表计仪表盘数据")
    @GetMapping("/getFanDataByType")
    public ResponseModel<Map<String, String>> getFanDataByType(@RequestParam(value = "stationId", required = false) String stationId,
                                                   @RequestParam(value = "equipNum", required = false) String equipNum,
                                                   @RequestParam(value = "frontModule", required = false) String frontModule,
                                                   @RequestParam(value = "typeName", required = false) String typeName) {
        String num = monitorFanIndicator.getFanDataByType(stationId, equipNum, frontModule, typeName);
        Map<String, String> map = new HashMap<>();
        map.put("value", num);
        return ResponseHelper.buildResponse(map);
    }


    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "风机布置图 - 风机状态统计")
    @GetMapping("/getFanStatusStatistics")
    public ResponseModel<IPage<IndexDto>> getFanStatusStatistics(@RequestParam(value = "stationId", required = false) String stationId,
                                                                 @RequestParam(value = "current", required = false) int current,
                                                                 @RequestParam(value = "size", required = false) int size) {
        List<IndexDto> fanStatusStatistics = monitorFanIndicator.getFanStatusStatistics(stationId);
        Page<IndexDto> page = new Page<>(current, size);
        List<IndexDto> collect = fanStatusStatistics.stream()
                .skip((long) (current - 1) * size)
                .limit(size)
                .collect(Collectors.toList());
        page.setTotal(fanStatusStatistics.size());
        page.setRecords(collect);
        return ResponseHelper.buildResponse(page);
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "风机布置图 - 风机基础信息")
    @GetMapping("/getFanBasicInfoByEquipNum")
    public ResponseModel<IndexDto> getFanBasicInfoByEquipNum(@RequestParam(value = "equipNum", required = false) String equipNum,
                                                             @RequestParam(value = "stationId", required = false) String stationId) {
        return ResponseHelper.buildResponse(monitorFanIndicator.getFanBasicInfoByEquipNum(equipNum, stationId));
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "获取当前表记的实时温度")
    @GetMapping("/getRealTimeTemperature")
    public ResponseModel<HashMap<String, List<String>>> getRealTimeTemperature(@RequestParam(value = "equipNum", required = false) String equipNum,
                                                                               @RequestParam(value = "stationId", required = false) String stationId,
                                                                               @RequestParam(value = "frontModule", required = false) String frontModule) {
     return ResponseHelper.buildResponse(monitorFanIndicator.getRealTimeTemperature(equipNum, stationId, frontModule))   ;
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "风机布置图-总概览")
    @GetMapping("/overview")
    public ResponseModel<IPage<Map<String, Object>>> getData(@RequestParam(value = "stationId")String stationId) {


        StationBasic stationBasic = stationBasicMapper.selectById(stationId);
        String gatewayId = stationBasic.getFanGatewayId();
        String [] columnList = new String[]{"日发电量","月发电量","年发电量"};
        String [] columnLists = new String[]{"有功功率","瞬时风速"};
        Map<String, Object> columnMap = new HashMap<>();

        for (String column : columnList) {
            Double result = commonService.getTotalByIndicatior(gatewayId, column);
            columnMap.put(column, String.format("%.2f",result));
        }
        for (String column : columnLists) {
            Double result = commonService.getAvgvalueByIndicatior(gatewayId, column);
            columnMap.put(column, String.format("%.2f",result));
        }

        String num = monitorFanIndicator.getFJCount(gatewayId);
        columnMap.put("风机台数",num);

        Double capacityl = commonService.getStationCapactityByStationWerks(stationBasic.getStationNumber());
        columnMap.put("装机容量",String.format("%.2f",capacityl));


        List<Map<String,Object>> objects = new ArrayList<>();
        Map<String, Object> data = new HashMap<>();
        data.put("title",columnMap.get("装机容量").toString());
        objects.add(data);
        Map<String, Object> data1 = new HashMap<>();
        data1.put("title",columnMap.get("日发电量").toString());
        objects.add(data1);
        Map<String, Object> data2 = new HashMap<>();
        data2.put("title",columnMap.get("风机台数").toString().replace(".0",""));
        objects.add(data2);
        Map<String, Object> data3 = new HashMap<>();
        data3.put("title",columnMap.get("月发电量").toString());
        objects.add(data3);
        Map<String, Object> data4 = new HashMap<>();
        data4.put("title",columnMap.get("瞬时风速").toString());
        objects.add(data4);
        Map<String, Object> data5 = new HashMap<>();
        data5.put("title",columnMap.get("年发电量").toString());
        objects.add(data5);
        Map<String, Object> data6 = new HashMap<>();
        data6.put("title", String.format("%.2f",Double.parseDouble(columnMap.get("有功功率").toString())/1000)) ;

        objects.add(data6);
        Map<String, Object> data7 = new HashMap<>();
        data7.put("title",String.format("%.2f",Double.parseDouble(columnMap.get("日发电量").toString())/ (Double.parseDouble(columnMap.get("装机容量").toString())*1000)));
        objects.add(data7);

        IPage<Map<String,Object>> result = new Page<>();
        result.setRecords(objects);
        result.setCurrent(1);
        result.setTotal(objects.size());

        return ResponseHelper.buildResponse(result);
    }



    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "概览-全站功率曲线")
    @GetMapping("/overviewWindSpeed")
    public ResponseModel<Map<String, Object>> getOverviewWindSpeed(@RequestParam(value = "stationId", required = false)String stationId,@RequestParam(value = "type", required = false)String type) {
        String gatewayId = "";
        if (null != stationId){
            StationBasic stationBasic = stationBasicMapper.selectById(stationId);
             gatewayId = stationBasic.getBoosterGatewayId();
            if (null == type){
                gatewayId = stationBasic.getFanGatewayId();
            }
       }
        Map<String, Object> detailsWindSpeed = monitorFanIndicator.getDetailsWindSpeedAll(gatewayId);

        return ResponseHelper.buildResponse(detailsWindSpeed);
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "风机详情-风速功率曲线")
    @GetMapping("/detailsWindSpeed")
    public ResponseModel<Map<String, Object>> getDetailsWindSpeed(@RequestParam(value = "stationId")String stationId,String name) {
        name = name + "风机";
        StationBasic stationBasic = stationBasicMapper.selectById(stationId);
        String gatewayId = stationBasic.getFanGatewayId();
        Map<String, Object> detailsWindSpeed = monitorFanIndicator.getDetailsWindSpeed(gatewayId, name);

        return ResponseHelper.buildResponse(detailsWindSpeed);
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "逆变器-功率曲线")
    @GetMapping("/getDetailsWindSpeeds")
    public ResponseModel<Map<String, Object>> getDetailsWindSpeeds(@RequestParam(value = "stationId")String stationId,String equipNum) {

        StationBasic stationBasic = stationBasicMapper.selectById(stationId);
        String gatewayId = stationBasic.getFanGatewayId();
        Map<String, Object> detailsWindSpeed = monitorFanIndicator.getDetailsWindSpeeds(gatewayId,equipNum);

        return ResponseHelper.buildResponse(detailsWindSpeed);
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "状态监控")
    @GetMapping("/statusMonitoring")
    public ResponseModel<IPage<Map<String, Object>>> getStatusMonitoring(@RequestParam(value = "stationId")String stationId,String equipNum,String systemType) {
        StationBasic stationBasic = stationBasicMapper.selectById(stationId);
        String gatewayId = stationBasic.getFanGatewayId();
        List<Map<String, Object>> statusMonitoring = monitorFanIndicator.getStatusMonitoring(gatewayId, equipNum, systemType);
        IPage<Map<String,Object>> result = new Page<>();
        result.setRecords(statusMonitoring);
        result.setCurrent(1);
        result.setTotal(statusMonitoring.size());
        return ResponseHelper.buildResponse(result);
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)

    @ApiOperation(value = "升压站光字牌/开关-通用")
    @GetMapping("/getStatusGzp")
    public ResponseModel<IPage<Map<String, Object>>> getStatusGzp(@RequestParam(value = "stationId")String stationId,String frontModule,String systemType,String equipNum,@RequestParam(required = false) String stationType) {
        StationBasic stationBasic = stationBasicMapper.selectById(stationId);
        String gatewayId = stationBasic.getBoosterGatewayId();
        if (null != stationType){
            gatewayId = stationBasic.getFanGatewayId();
        }
        List<Map<String, Object>> statusMonitoring = monitorFanIndicator.getStatusGzp(gatewayId ,systemType,frontModule,equipNum);
        IPage<Map<String,Object>> result = new Page<>();
        result.setRecords(statusMonitoring);
        result.setCurrent(1);
        result.setTotal(statusMonitoring.size());
        return ResponseHelper.buildResponse(result);
    }



    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "升压站光字牌/压板状态API-通用")
    @GetMapping("/getStatusGzpAndYb")
    public ResponseModel getStatusGzp(@RequestParam(value = "stationId") String stationId,
                                      @RequestParam(value = "frontModule") String frontModule) {
        StationBasic stationBasic = stationBasicMapper.selectById(stationId);
        String gatewayId = stationBasic.getBoosterGatewayId();
        Map<String, String> map = monitorFanIndicatorMapper.getMajorBoosterStationInfoBySort(gatewayId, frontModule);
        String name = map.get("text").contains("主变")?map.get("text").substring(0,3):map.get("text");
        HashMap<String, String> stringStringHashMap = new HashMap<>();
        stringStringHashMap.put("gzp", "光字牌");
        stringStringHashMap.put("ybzt", "压板");
        stringStringHashMap.put("agzp", "A套保护光字牌");
        stringStringHashMap.put("bgzp", "B套保护光字牌");
        for (Map.Entry<String, String> stringStringEntry : stringStringHashMap.entrySet()) {
            List<Map<String, Object>> statusMonitoring = monitorFanIndicator.getStatusGzp(gatewayId ,stringStringEntry.getValue(), name,null);
            IPage<Map<String,Object>> result = new Page<>();
            result.setRecords(statusMonitoring);
            result.setCurrent(1);
            result.setTotal(statusMonitoring.size());
            try {
                emqKeeper.getMqttClient().publish(String.format("%s/%s/%s", stationId, frontModule, stringStringEntry.getKey()), JSON.toJSONString(result).getBytes(),0,false);
            } catch (MqttException e) {
                e.printStackTrace();
            }
        }
        return ResponseHelper.buildResponse(null);
    }


    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "模拟量接口Api")
    @GetMapping("/getAnalogQuantity")
    public ResponseModel<IPage<Map<String, Object>>> getAnalogQuantity(@RequestParam(value = "stationId")String stationId,String frontModule,@RequestParam(required = false) String systemType) {
        StationBasic stationBasic = stationBasicMapper.selectById(stationId);
        String gatewayId = stationBasic.getBoosterGatewayId();
        if (null == systemType){
            systemType = "模拟量";
        }

        List<Map<String, Object>> statusMonitoring = monitorFanIndicator.getAnalogQuantity(gatewayId ,frontModule,systemType);
        IPage<Map<String,Object>> result = new Page<>();
        result.setRecords(statusMonitoring);
        result.setCurrent(1);
        result.setTotal(statusMonitoring.size());
        return ResponseHelper.buildResponse(result);
    }



    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "集电线路图左侧 集电线列表")
    @GetMapping("/jdTree")
    @Scheduled(cron = "0/10 * * * * ? ")
    public ResponseModel<IPage<Map<String, Object>>> getStatusJDX() {
        LambdaQueryWrapper<StationBasic> wrapper = new LambdaQueryWrapper<>();
        List<StationBasic> stationBasics = stationBasicMapper.selectList(wrapper);
        for (StationBasic stationBasic : stationBasics) {
            String gatewayId = stationBasic.getBoosterGatewayId();
            String werks = stationBasic.getStationNumber();
            if (stationBasic.getStationType().equals("FDZ")){
                monitorFanIndicator.getStatusJDX(gatewayId,  stationBasic.getSequenceNbr().toString(),"集电");
            }else if (stationBasic.getStationType().equals("JZSGFDZ") ){
                monitorFanIndicator.getStatusJDX(gatewayId, stationBasic.getSequenceNbr().toString(),"前光");
            }
        }
        return  CommonResponseUtil.success();
    }


    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "集电线路图右侧 风机列表")
    @GetMapping("/fjList")
    @Scheduled(cron = "0/10 * * * * ? ")
    public ResponseModel getListByFJ() {


        LambdaQueryWrapper<StationBasic> wrapper = new LambdaQueryWrapper<>();
        List<StationBasic> stationBasics = stationBasicMapper.selectList(wrapper);
        for (StationBasic stationBasic : stationBasics) {
            String gatewayId = stationBasic.getFanGatewayId();
            String werks = stationBasic.getStationNumber();
            monitorFanIndicator.getListByFJ(gatewayId,werks,stationBasic.getSequenceNbr().toString());
        }


        return CommonResponseUtil.success();
    }



    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "获取升压站信息 通过排序等")
    @GetMapping("/getBoosterStationInfo")
    public ResponseModel<List<Map<String, String>>> getBoosterStationInfo(@RequestParam(value = "stationId", required = false) String stationId) {
        return ResponseHelper.buildResponse(monitorFanIndicator.getBoosterStationInfo(stationId));
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "根据id获取场站信息")
    @GetMapping("/getByStationId")
    public ResponseModel<IPage<StationBasic>> getByStationId(@RequestParam(value = "stationId", required = false) String stationId) {
        StationBasic oneByStationNumber = monitorFanIndicator.getOneByStationNumber(stationId);
        oneByStationNumber.setTitlePos(null);
        List<StationBasic> stationBasics = Collections.singletonList(oneByStationNumber);
        IPage<StationBasic> result = new Page<>();
        result.setRecords(stationBasics);
        result.setCurrent(1);
        result.setTotal(1);
        return ResponseHelper.buildResponse(result);
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "夏造运行列表API")
    @GetMapping("/runningPageByStationId")
    public ResponseModel<ResultsData> runningPageByStationId(@RequestParam(value = "current") int current,
                                                             @RequestParam(value = "size") int size,
                                                             @RequestParam(value = "stationId") String stationId) {
        ResultsData resultsData = monitorFanIndicatorImpl.runningPageByStationId(current, size, stationId);
        return ResponseHelper.buildResponse(resultsData);
    }

//    @Scheduled(cron = "0/15 * * * * ? ")
    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "模拟量列表消息")
    @GetMapping("/getAnalogQuantityInfo")
    public ResponseModel getAnalogQuantityInfo(@RequestParam(value = "stationId") String stationId, @RequestParam(value = "routeName")String routeName) {
        StationBasic stationBasic = stationBasicMapper.selectById(stationId);
        String gatewayId = stationBasic.getBoosterGatewayId();
        monitorFanIndicator.getAnalogQuantityInfo(gatewayId, stationBasic.getSequenceNbr().toString(), routeName);
        return CommonResponseUtil.success();
    }

//    @Scheduled(cron = "0/15 * * * * ? ")
    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "升压站主屏消息接口")
    @GetMapping("/getMajorAnalogQuantityByPage")
    public ResponseModel getMajorAnalogQuantityByPage(@RequestParam (required = false) String stationId) {
        StationBasic stationBasic = stationBasicMapper.selectById(stationId);
        String gatewayId = stationBasic.getBoosterGatewayId();
        if ("夏造风电站".equals(stationBasic.getStationName())) {
            monitorFanIndicator.getMajorAnalogQuantityByPage(gatewayId, stationBasic.getSequenceNbr().toString());
        } else if ("泰和前进光伏站".equals(stationBasic.getStationName())) {
            monitorFanIndicator.getMajorAnalogQuantityByPageByTHGF(gatewayId, stationBasic.getSequenceNbr().toString());
        }
        return CommonResponseUtil.success();
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "故障记录API")
    @GetMapping("/alarmEventtList")
    public ResponseModel<ResultsData> getAlarmEventList(@RequestParam(value = "current") int current,
                                                             @RequestParam(value = "size") int size,
                                                             @RequestParam(value = "stationId") String stationId,
                                                        @RequestParam(value = "type") String type) {
        ResultsData resultsData = new ResultsData();
        if (type.equals("0")){
            resultsData = monitorFanIndicatorImpl.getAlarmEventList(current, size, stationId);

        }else if (type.equals("1")){
            resultsData = monitorFanIndicatorImpl.getLsNationWideInfo(current, size, stationId,null);

        }
        return ResponseHelper.buildResponse(resultsData);
    }


    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "夏造电量表计API")
    @GetMapping("/electricQuantity")
    public ResponseModel<ResultsData> getElectricQuantityList(@RequestParam(value = "current") int current,
                                                             @RequestParam(value = "size") int size,
                                                             @RequestParam(value = "stationId") String stationId,
                                                              @RequestParam(value = "stationType",required = false) String stationType) {
        StationBasic stationBasic = stationBasicMapper.selectById(stationId);
        String gatewayId = stationBasic.getBoosterGatewayId();
        ResultsData resultsData = monitorFanIndicatorImpl.getElectricQuantityList(current, size, gatewayId,stationType);
        return ResponseHelper.buildResponse(resultsData);
    }


    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "开关图片API/消息")
    @GetMapping("/switchUrl")
    public ResponseModel<Map<String,Object>> getElectricQuantityList(
                                                              @RequestParam(value = "stationId") String stationId
                                                              ) {

        LambdaQueryWrapper<StationBasic> wrapper = new LambdaQueryWrapper<>();
        List<StationBasic> stationBasics = stationBasicMapper.selectList(wrapper);
        for (StationBasic stationBasic : stationBasics) {
            monitorFanIndicatorImpl.getSwitchUrlAll(stationBasic);
        }

        return CommonResponseUtil.success();
    }


    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "动态面板页面消息")
    @GetMapping("/pageTopic")
    public ResponseModel<Map<String,Object>> sendPageTopic(
            @RequestParam(value = "stationId") String stationId, @RequestParam(value = "equipName") String equipName
    ) {

        StationBasic stationBasic = stationBasicMapper.selectById(stationId);
        String gatewayId = stationBasic.getBoosterGatewayId();


        Map<String, String> map = monitorFanIndicatorMapper.getMajorBoosterStationInfoBySort(gatewayId, equipName);
        String name = map.get("text").equals("1主变高压侧") || map.get("text").equals("1主变低压侧") ?map.get("text").substring(0,3):map.get("text");


        Map<String, Object> switchUrl = monitorFanIndicatorImpl.getSwitchUrl(gatewayId, name);
        List<Map<String, Object>> statusMonitoring = monitorFanIndicator.getStatusGzp(gatewayId ,"网络",name,null);
        IPage<Map<String, Object>> result = new Page<>();
        switchUrl.put("records",statusMonitoring);
        switchUrl.put("current",1);
        switchUrl.put("total",100);
        List<Map<String, Object>> data = new ArrayList<>();
        data.add(switchUrl);
        result.setRecords(data);
        result.setCurrent(1);
        result.setTotal(100);

        try {
            emqKeeper.getMqttClient().publish(stationId+"/switch/"+equipName, JSON.toJSONString(result).getBytes(),0,false);
        } catch (MqttException e) {
            e.printStackTrace();
        }
        return CommonResponseUtil.success();
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "1#主变油温")
    @GetMapping("/zbyw")
    public ResponseModel<Map<String,Object>> getYwData(@RequestParam(value = "stationId") String stationId) {
        StationBasic stationBasic = stationBasicMapper.selectById(stationId);
        String gatewayId = stationBasic.getBoosterGatewayId();
        Map<String,Object> resultsData = monitorFanIndicatorImpl.getyw( gatewayId);
        return ResponseHelper.buildResponse(resultsData);
    }


    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "光伏-总概览")
    @GetMapping("/solarPowerOverview")
    public ResponseModel<IPage<Map<String, Object>>> solarPowerData(@RequestParam(value = "stationId")String stationId) {


        StationBasic stationBasic = stationBasicMapper.selectById(stationId);
        String gatewayId = stationBasic.getFanGatewayId();
        String boosterGatewayId = stationBasic.getBoosterGatewayId();
        String [] columnList = new String[]{"日发电量","月发电量","年发电量"};
        String [] columnLists = new String[]{"有功功率"};
        String [] syLists = new String[]{"总辐射累计","总辐射","日照时数"};
        Map<String, Object> columnMap = new HashMap<>();
        //日 月 年发电量同仅统计逆变器数据
        List<Map<String, Object>> mapList;
        mapList = influxdbUtil.query("SELECT * FROM indicators_" + stationBasic.getFanGatewayId() + " where frontModule=~/逆变器/ and(equipmentIndexName='日发电量' or  equipmentIndexName='月发电量' or equipmentIndexName='年发电量' or equipmentIndexName='有功功率')");
        //日-月-年-发电量需要保留四位小数问题修改
        for (String column : columnList) {
            Double result = commonService.getTotalByIndicatior(mapList, column);
            columnMap.put(column, String.format("%.4f",result));
        }
        for (String column : syLists) {
            Double result = commonService.getNumByIndicatior(boosterGatewayId, column);
            columnMap.put(column, String.format("%.2f",result));
        }

        for (String column : columnLists) {
            Double result = commonService.getTotalByIndicatior(gatewayId, column);
            columnMap.put(column, String.format("%.2f",result));
        }

        String num = monitorFanIndicator.getFJCount(gatewayId);
        columnMap.put("风机台数",num);

        Double capacityl = commonService.getStationCapactityByStationWerks(stationBasic.getStationNumber());
        //装机容量保留两位小数
        columnMap.put("装机容量",String.format("%.2f",capacityl));




        List<Map<String,Object>> objects = new ArrayList<>();
        Map<String, Object> data = new HashMap<>();
        data.put("title",columnMap.get("装机容量").toString());
        objects.add(data);
        Map<String, Object> data1 = new HashMap<>();
        data1.put("title",columnMap.get("日发电量").toString());
        objects.add(data1);
        Map<String, Object> data2 = new HashMap<>();
        data2.put("title",columnMap.get("风机台数").toString().replace(".0",""));
        objects.add(data2);
        Map<String, Object> data3 = new HashMap<>();
        data3.put("title",columnMap.get("月发电量").toString());
        objects.add(data3);
        Map<String, Object> data4 = new HashMap<>();
        data4.put("title",columnMap.get("总辐射").toString());
        objects.add(data4);
        Map<String, Object> data5 = new HashMap<>();
        data5.put("title",columnMap.get("年发电量").toString());
        objects.add(data5);
        Map<String, Object> data6 = new HashMap<>();
        data6.put("title", columnMap.get("有功功率").toString()) ;
        objects.add(data6);
        Map<String, Object> data7 = new HashMap<>();
        data7.put("title",columnMap.get("日照时数").toString());
        objects.add(data7);
        Map<String, Object> data8 = new HashMap<>();
        data8.put("title",columnMap.get("总辐射累计").toString());
        objects.add(data8);
        Map<String, Object> data9 = new HashMap<>();
        data9.put("title","84.00%");//综合效率
        objects.add(data9);


        IPage<Map<String,Object>> result = new Page<>();
        result.setRecords(objects);
        result.setCurrent(1);
        result.setTotal(objects.size());
        return ResponseHelper.buildResponse(result);

    }



    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "详情基础信息")
    @GetMapping("/getEquipInfoByEquipNum")
    public ResponseModel<Map<String,Object>> getEquipInfoByEquipNum(@RequestParam(value = "equipNum", required = false) String equipNum,
                                                             @RequestParam(value = "stationId", required = false) String stationId) {
        StationBasic stationBasic = stationBasicMapper.selectById(stationId);
        String gatewayId = stationBasic.getFanGatewayId();
        return ResponseHelper.buildResponse(monitorFanIndicator.getEquipInfoByEquipNum(gatewayId,equipNum ));
    }


    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "光伏左侧资源树")
    @GetMapping("/getEquipTree")
    public ResponseModel<IPage<Map<String, Object>>> getEquipTree(@RequestParam(value = "stationId", required = false) String stationId,
                                                           @RequestParam(value = "frontModule", required = false) String frontModule,
                                                           @RequestParam(value = "equipmentNumber", required = false) String equipmentNumber
    ) {
        StationBasic stationBasic = stationBasicMapper.selectById(stationId);
        String gatewayId = stationBasic.getFanGatewayId();
        List<Map<String, Object>> equipmentNum = monitorFanIndicator.getEquipmentNum(gatewayId, frontModule, equipmentNumber);
        IPage<Map<String, Object>> result = new Page<>();
        result.setRecords(equipmentNum);
        result.setCurrent(1);
        result.setTotal(equipmentNum.size());
        return ResponseHelper.buildResponse(result);
    }



    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "详情基础信息")
    @GetMapping("/getStatisticsInfo")
    public ResponseModel<Map<String,String>> getStatisticsInfo(@RequestParam(value = "equipmentIndexName", required = false) String equipmentIndexName,
                                                                    @RequestParam(value = "stationId", required = false) String stationId,
                                                               @RequestParam(value = "stationType", required = false) String stationType) {
        StationBasic stationBasic = stationBasicMapper.selectById(stationId);
        String gatewayId = stationBasic.getFanGatewayId();
        if (null != stationType){
            gatewayId = stationBasic.getBoosterGatewayId();
        }
        return ResponseHelper.buildResponse(monitorFanIndicator.getStatisticsInfo(gatewayId,equipmentIndexName ));
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "码速表")
    @GetMapping("/SpeedIndicator")
    public ResponseModel<Map<String,Object>> SpeedIndicator(@RequestParam(value = "equipNum", required = false) String equipNum,
                                                                    @RequestParam(value = "stationId", required = false) String stationId,
                                                                    @RequestParam(value = "equipmentIndexName", required = false) String equipmentIndexName
    ) {
        StationBasic stationBasic = stationBasicMapper.selectById(stationId);
        String gatewayId = stationBasic.getFanGatewayId();
        return ResponseHelper.buildResponse(monitorFanIndicator.SpeedIndicator(gatewayId,equipNum,equipmentIndexName ));
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "箱变实时开关状态")
    @GetMapping("/equipSwitchStatus")
    @Scheduled(cron = "0/10 * * * * ? ")
    public ResponseModel<Map<String,Object>> getEquipSwitchStatus() {


        LambdaQueryWrapper<StationBasic> wrapper = new LambdaQueryWrapper<>();
        List<StationBasic> stationBasics = stationBasicMapper.selectList(wrapper);
        for (StationBasic stationBasic : stationBasics) {
            String fanGatewayId = stationBasic.getFanGatewayId();
            monitorFanIndicatorImpl.getEquipSwitchStatus(stationBasic);
        }

        return CommonResponseUtil.success();
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "汇流箱支路电流离散率")
    @GetMapping("/collectingBox")
    public ResponseModel<ResultsData> collectingBox(@RequestParam(value = "current") int current,
                                                        @RequestParam(value = "size") int size,
                                                        @RequestParam(value = "stationId") String stationId) {

        StationBasic stationBasic = stationBasicMapper.selectById(stationId);
        String gatewayId = stationBasic.getFanGatewayId();
        return ResponseHelper.buildResponse(monitorFanIndicatorImpl.collectingBox(gatewayId,current, size ));
    }


    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "光伏 运行列表")
    @GetMapping("/solarPowerOperation")
    public ResponseModel<IPage<Map<String, Object>>> solarPowerOperation(@RequestParam(value = "stationId")String stationId,@RequestParam(value = "current") int current, int size) {
        StationBasic stationBasic = stationBasicMapper.selectById(stationId);
        String gatewayId = stationBasic.getFanGatewayId();

        List<Map<String, Object>> statusMonitoring = monitorFanIndicator.solarPowerOperation(gatewayId);
        List<Map<String, Object>> collect = statusMonitoring.stream()
                .skip((long) (current - 1) * size)
                .limit(size)
                .collect(Collectors.toList());
        IPage<Map<String,Object>> result = new Page<>();
        result.setRecords(collect);
        result.setCurrent(current);
        result.setTotal(statusMonitoring.size());
        return ResponseHelper.buildResponse(result);
    }


    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "汇流箱 功率曲线")
    @GetMapping("/hlWindSpeeds")
    public ResponseModel<Map<String, Object>> hlWindSpeeds(@RequestParam(value = "stationId")String stationId,@RequestParam(value = "equipNum") String equipNum) {
        StationBasic stationBasic = stationBasicMapper.selectById(stationId);
        String gatewayId = stationBasic.getFanGatewayId();

        Map<String, Object> result = monitorFanIndicator.hlWindSpeeds(gatewayId,equipNum);

        return ResponseHelper.buildResponse(result);
    }

    @TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
    @ApiOperation(value = "集电线路图右侧 光伏列表")
    @GetMapping("/gfList")
    @Scheduled(cron = "0/10 * * * * ? ")
    public ResponseModel getListByNbq() {


        LambdaQueryWrapper<StationBasic> wrapper = new LambdaQueryWrapper<>();
        List<StationBasic> stationBasics = stationBasicMapper.selectList(wrapper);
        for (StationBasic stationBasic : stationBasics) {
            String gatewayId = stationBasic.getFanGatewayId();
            String werks = stationBasic.getStationNumber();
            monitorFanIndicator.getListByNbq(gatewayId,werks,stationBasic.getSequenceNbr().toString());
        }


        return CommonResponseUtil.success();
    }


    @ApiOperation(value = "风机-三维告警")
    @GetMapping("/partofWaring3D")
    public ResponseModel<Map<String, Object>> partofWaring3D(@RequestParam(value = "stationId")String stationId,@RequestParam(value = "equipNum") String equipNum) {
        Map<String, Object> result = monitorFanIndicator.partofWaring3D(stationId,equipNum);
        return ResponseHelper.buildResponse(result);
    }


    @ApiOperation(value = "电站排名")
    @Scheduled(cron = "0/10 * * * * ? ")
    @GetMapping("/stationRanking")
    public ResponseModel stationRanking() {
        LambdaQueryWrapper<StationBasic> wrapper = new LambdaQueryWrapper<>();
        List<StationBasic> stationBasics = stationBasicMapper.selectList(wrapper);
        List< Map<String,Object>> datDataFJ = new ArrayList<>();
        List< Map<String,Object>> monthDataFJ = new ArrayList<>();
        List< Map<String,Object>> yearDataFJ = new ArrayList<>();
        List< Map<String,Object>> datDataGF = new ArrayList<>();
        List< Map<String,Object>> monthDataGF = new ArrayList<>();
        List< Map<String,Object>> yearDataGF = new ArrayList<>();
        for (StationBasic stationBasic : stationBasics) {
            String gatewayId = stationBasic.getFanGatewayId();
            String   querySql = null;
            String name = stationBasic.getStationName();
            if (stationBasic.getStationType().equals("FDZ")){
                Map<String, Object> map = monitorFanIndicator.generatingCapacity(gatewayId,querySql);
                Map<String, Object> dayMap = new HashMap<>();
                Map<String, Object> monthMap = new HashMap<>();
                Map<String, Object> yearMap = new HashMap<>();
                dayMap.put("name",name);
                dayMap.put("value",map.get("日发电量") == null?0:String.format("%.4f",map.get("日发电量")));
                monthMap.put("name",name);
                monthMap.put("value",map.get("月发电量") == null?0:String.format("%.4f",map.get("月发电量")));
                yearMap.put("name",name);
                yearMap.put("value",map.get("年发电量") == null?0:String.format("%.4f",map.get("年发电量")));
                datDataFJ.add(dayMap);
                monthDataFJ.add(monthMap);
                yearDataFJ.add(yearMap);
            } else {
                querySql = " and frontModule = '逆变器'";
                Map<String, Object> map = monitorFanIndicator.generatingCapacity(gatewayId,querySql);
                Map<String, Object> dayMap = new HashMap<>();
                Map<String, Object> monthMap = new HashMap<>();
                Map<String, Object> yearMap = new HashMap<>();
                dayMap.put("name",name);
                dayMap.put("value",map.get("日发电量") == null?0:String.format("%.4f",map.get("日发电量")));
                monthMap.put("name",name);
                monthMap.put("value",map.get("月发电量") == null?0:String.format("%.4f",map.get("月发电量")));
                yearMap.put("name",name);
                yearMap.put("value",map.get("年发电量") == null?0:String.format("%.4f",map.get("年发电量")));
                datDataGF.add(dayMap);
                monthDataGF.add(monthMap);
                yearDataGF.add(yearMap);
            }
        }
        monitorFanIndicator.sendMqttByRanking(datDataFJ, GeneratingCapacity.DAY.getCode(),"fjpm");
        monitorFanIndicator.sendMqttByRanking(monthDataFJ,GeneratingCapacity.MONTH.getCode(),"fjpm");
        monitorFanIndicator.sendMqttByRanking(yearDataFJ,GeneratingCapacity.YEAR.getCode(),"fjpm");
        monitorFanIndicator.sendMqttByRanking(datDataGF,GeneratingCapacity.YEAR.getCode(),"gfpm");
        monitorFanIndicator.sendMqttByRanking(monthDataGF,GeneratingCapacity.YEAR.getCode(),"gfpm");
        monitorFanIndicator.sendMqttByRanking(yearDataGF,GeneratingCapacity.YEAR.getCode(),"gfpm");
        return CommonResponseUtil.success();
    }

}
