package cn.cecep.talroad.service.strategy.support.gt;

import cn.cecep.talroad.common.core.utils.StringUtils;
import cn.cecep.talroad.common.core.utils.bean.BeanUtils;
import cn.cecep.talroad.domain.AmProblemFi;
import cn.cecep.talroad.domain.BasDeviceSalAnalysis;
import cn.cecep.talroad.domain.SRaRealTimeAnalysisRunOne;
import cn.cecep.talroad.domain.analysis.SRaRealTimeAnalysisRun;
import cn.cecep.talroad.enums.DeviceStatusEnum;
import cn.cecep.talroad.enums.JudgeEnum;
import cn.cecep.talroad.enums.ProblemTypeEnum;
import cn.cecep.talroad.service.IBasDeviceService;
import cn.cecep.talroad.vo.FactoryDeviceVo;
import cn.cecep.talroad.vo.MonElecRealSiteVo;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @Auther: cjh
 * @Date: 2023-03-25 16:09
 * @Class: GtZlAdapter
 * @Deseription:  任务调度-定时查询转炉分表计电功率判断是否停产
 * @Version V1.0
 */
@Service("GTZL")
public class GtZlAdapter extends GtJlZlStatusStrategyAdapter {

    @Autowired
    private IBasDeviceService basDeviceService;

    @Override
    protected void doProcessGTStatus(String industry, String deviceType, List<MonElecRealSiteVo> list,Date lastDate,Date tempDate) {

        List<BasDeviceSalAnalysis> deviceStatusList = new ArrayList<>();
        List<SRaRealTimeAnalysisRun> runList = new ArrayList<>();
        List<SRaRealTimeAnalysisRunOne> runOneList = new ArrayList<>();
        List<AmProblemFi> alarmList = new ArrayList<>();
        if(list!=null&&list.size()>0){
            list.forEach(real->{
                if(StringUtils.isNotEmpty(real.getActivePower())&&StringUtils.isNotEmpty(real.getMinValue())){
                    // 根据设备ID，查询企业名称、设备名称等信息
                    FactoryDeviceVo vo = basDeviceService.selectFactoryDeviceVoByDeviceId(real.getDeviceId());
                    SRaRealTimeAnalysisRunOne oldDeviceStatus = super.getOldDeviceStatus(vo.getFactoryId(),vo.getDeviceId());
                    oldDeviceStatus = super.getOldDeviceStatus(vo.getFactoryId(),vo.getDeviceId());
                    // 总功率低于额定功率10%视为停产
                    if (Double.valueOf(real.getActivePower()) <= Double.valueOf(real.getMinValue())) {
                        //低于额定功率10%，设备停产
                        //停产条件比例占比超过66%，设备停机
                        SRaRealTimeAnalysisRun run = super.doProcessDeviceRunStatus(vo,lastDate,tempDate,oldDeviceStatus, DeviceStatusEnum.STOP, JudgeEnum.GKSJ);
                        runList.add(run);
                        if(oldDeviceStatus!=null) {
                            String oneId = "";
                            if(StringUtils.isNotEmpty(oldDeviceStatus.getDataId())) {
                                oneId = oldDeviceStatus.getDataId();
                            }
                            BeanUtils.copyProperties(run, oldDeviceStatus);
                            oldDeviceStatus.setDataId(oneId);
                            oldDeviceStatus.setIndustryPermissionName(vo.getIndustryPermissionName());
                            runOneList.add(oldDeviceStatus);
                        }
                        BasDeviceSalAnalysis basStatus = super.doProcessDeviceAnalysisStatus(vo.getFactoryId(),vo.getDeviceId(),DeviceStatusEnum.STOP.getValue(),"");
                        deviceStatusList.add(basStatus);
                        if(DeviceStatusEnum.STOP_RUN.getCode().equals(run.getOperationStatus())||DeviceStatusEnum.RUN_STOP.getCode().equals(run.getOperationStatus())) {
                            String runEtc = super.getRunEtc(lastDate, tempDate, "");
                            StringBuffer sb = new StringBuffer();
                            sb.append(vo.getFactoryName()).append(vo.getDeviceName())
                                .append("于").append(runEtc).append("存在启停行为，请注意。");
                            AmProblemFi problemFi = doProcessAlaram(vo.getFactoryId(),vo.getDeviceId(),  vo.getDeviceName(), tempDate,new Date(), ProblemTypeEnum.STOP_RUN,sb.toString(),"","");
                            problemFi.setParamName("总有功功率（千瓦）");
                            problemFi.setParamProperty("activePower");
                            //总有功功率（千瓦）
                            Map<String, Object> map = new HashMap<>();
                            List<Map<String, Object>> mapList = new ArrayList<>();
                            Map m = new HashMap();
                            m.put("deviceSiteId", real.getDeviceSiteId());
                            m.put("params", Arrays.asList(new String[]{"activePower"}));
                            mapList.add(m);
                            map.put("elecDeviceSiteList", mapList);
                            problemFi.setExtra(JSON.toJSONString(map));
                            alarmList.add(problemFi);
                        }
                    }else{
                        //停产条件比例占比未超过66%，设备未停机
                        SRaRealTimeAnalysisRun run = super.doProcessDeviceRunStatus(vo,lastDate,tempDate,oldDeviceStatus, DeviceStatusEnum.RUN, JudgeEnum.GKSJ);
                        runList.add(run);
                        if(oldDeviceStatus!=null) {
                            String oneId = "";
                            if(StringUtils.isNotEmpty(oldDeviceStatus.getDataId())) {
                                oneId = oldDeviceStatus.getDataId();
                            }
                            BeanUtils.copyProperties(run, oldDeviceStatus);
                            oldDeviceStatus.setDataId(oneId);
                            oldDeviceStatus.setIndustryPermissionName(vo.getIndustryPermissionName());
                            runOneList.add(oldDeviceStatus);
                        }
                        BasDeviceSalAnalysis basStatus = super.doProcessDeviceAnalysisStatus(vo.getFactoryId(),vo.getDeviceId(),DeviceStatusEnum.RUN.getValue(),"");
                        deviceStatusList.add(basStatus);
                        if(DeviceStatusEnum.STOP_RUN.getCode().equals(run.getOperationStatus())||DeviceStatusEnum.RUN_STOP.getCode().equals(run.getOperationStatus())) {
                            String runEtc = super.getRunEtc(lastDate, tempDate, "");
                            StringBuffer sb = new StringBuffer();
                            sb.append(vo.getFactoryName()).append(vo.getDeviceName())
                                .append("于").append(runEtc).append("存在启停行为，请注意。");
                            AmProblemFi problemFi = doProcessAlaram(vo.getFactoryId(),vo.getDeviceId(),  vo.getDeviceName(), tempDate,new Date(), ProblemTypeEnum.STOP_RUN,sb.toString(),"","");
                            problemFi.setParamName("总有功功率（千瓦）");
                            problemFi.setParamProperty("activePower");
                            //总有功功率（千瓦）
                            Map<String, Object> map = new HashMap<>();
                            List<Map<String, Object>> mapList = new ArrayList<>();
                            Map m = new HashMap();
                            m.put("deviceSiteId", real.getDeviceSiteId());
                            m.put("params", Arrays.asList(new String[]{"activePower"}));
                            mapList.add(m);
                            map.put("elecDeviceSiteList", mapList);
                            problemFi.setExtra(JSON.toJSONString(map));
                            alarmList.add(problemFi);
                        }
                    }
                }
            });
            //批量保存
            super.doSaveBatchAnalysisRunStatus(runList);
            super.doSaveBatchAnalysisRunOneStatus(runOneList);
            super.doSaveOrUpdateBatchDeviceStatus(deviceStatusList);
            super.doSaveBatchAlarm(alarmList);
        }
    }
}
