package com.gyee.impala.service.custom; import com.gyee.impala.common.constant.Constants; import com.gyee.impala.common.exception.CustomException; import com.gyee.impala.common.feign.RemoteServiceBuilder; import com.gyee.impala.common.result.ResultCode; import com.gyee.impala.common.util.DateUtil; import com.gyee.impala.model.custom.TsBooleanData; import com.gyee.impala.model.custom.TsDoubleData; import com.gyee.impala.model.master.Caseperformance; import com.gyee.impala.model.master.Windturbinepoint; import com.gyee.impala.service.master.CaseperformanceService; import com.gyee.impala.service.master.WindturbinepointService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; @Slf4j @Service public class GoldenService { @Autowired private RemoteServiceBuilder remoteService; @Autowired private WindturbinepointService windturbinepointService; @Autowired private CaseperformanceService caseperformanceService; /** * 查询原始数据 * * @param points * @param startTs 精确到毫秒 * @param endTs * @param interval * @return */ public List getCurveScatter(String[] points, long startTs, long endTs, int interval) { List list = new ArrayList<>(); try { for (String point : points) { Windturbinepoint w = windturbinepointService.getByPoint(point); List data = new ArrayList<>(); Map m = new HashMap(); if (interval <= 0) { data = remoteService.ShardingService().getHistoryRawAI(point, startTs, endTs); } else { data = remoteService.ShardingService().getHistorySnapAI(point, startTs, endTs, interval); } m.put("name", w.getPointdes()); m.put("code", w.getWidgetcode()); m.put("point", w.getPoint()); m.put("list", data); list.add(m); } } catch (Exception e) { log.error(e.getMessage()); throw new CustomException(ResultCode.ERROR_DATA); } return list; } /** * 获取风速和功率的曲线数据 * @param ids 样本ID * @param interval 数据时间间隔 * @param type 类型 0-单台 1-多台合并 2-同名合并 * @return */ public Map getCurveScatter(String[] ids, int interval, Integer type) { Map maps = new HashMap<>(); try { for (String id : ids) { String[] codes = new String[]{Constants.POINT_SPEED, Constants.POINT_POWER}; Caseperformance cp = caseperformanceService.getPerformanceByid(id); //查询测点名 List winds = windturbinepointService.getListByStationAndWtIdAndUniformCode(cp.getStationen(), cp.getWindturbineid(), codes); //golden适配器取数据 List speedList = remoteService.ShardingService().getHistorySnapAI(winds.get(0).getPoint(), DateUtil.covertDateTimestamp(cp.getStarttime()), DateUtil.covertDateTimestamp(cp.getEndtime()), interval); List powerList = remoteService.ShardingService().getHistorySnapAI(winds.get(1).getPoint(), DateUtil.covertDateTimestamp(cp.getStarttime()), DateUtil.covertDateTimestamp(cp.getEndtime()), interval); if (speedList == null || powerList == null) return maps; //计算数组最小的 int len = speedList.size() <= powerList.size() ? speedList.size() : powerList.size(); //折线图 // List listZ = new ArrayList<>(); //散点图 List listS = new ArrayList<>(); // int val = len / 5 > 0 ? len / 5 : 1; for (int i = 0; i < len; i++) { //计算折线图 // List lp = new ArrayList(); // if (i % val == 0){ // lp.add(speedList.get(i).getDoubleValue()); // lp.add(powerList.get(i).getDoubleValue()); // listZ.add(lp); // listZ.add(powerList.get(i).getDoubleValue()); // } //补齐最后一条 // if (i == len - 1){ // lp.add(speedList.get(i).getDoubleValue()); // lp.add(powerList.get(i).getDoubleValue()); // listZ.add(lp); // listZ.add(powerList.get(i).getDoubleValue()); // } //计算散点图 List ls = new ArrayList(); ls.add(speedList.get(i).getDoubleValue()); ls.add(powerList.get(i).getDoubleValue()); listS.add(ls); } maps.put(cp.getWindturbineid(), listS); } return maps; } catch (Exception e) { log.error(e.getMessage()); throw new CustomException(ResultCode.ERROR_DATA); } } /** * 过滤并网的数据时间 * @param point * @param startTime * @param endTime * @return */ public List> getConnectData(String point, long startTime, long endTime) { List> list = new ArrayList<>(); try{ List data = remoteService.ShardingService().getHistoryRawAI(point, startTime, endTime); int index = 0; boolean flag = false; if (data != null && data.size() > 0){ for (int i = 0; i < data.size() - 1; i++){ TsDoubleData obj = data.get(i); // 1表示并网 if (flag == false && obj.getDoubleValue() == 1){ index = i; flag = true; continue; } if (flag == true && obj.getDoubleValue() == 0){ List ls = new ArrayList<>(); ls.add(data.get(index).getTs()); ls.add(obj.getTs()); list.add(ls); flag = false; } } } }catch (Exception e) { log.error(e.getMessage()); throw new CustomException(ResultCode.ERROR_DATA); } return list; } }