package com.gyee.dataadapter.service; import com.gyee.dataadapter.dao.IHistoryDao; import com.gyee.dataadapter.dao.ILatestDao; import com.gyee.dataadapter.entity.PointData; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Slf4j @Service public class TsDataService { @Resource private IAdapterService adapterService; @Resource private ILatestDao latestDao; @Resource private IHistoryDao historyDao; public Map getLatest(String tagNames) { String[] split = tagNames.split(","); return getLatest(Arrays.asList(split)); } public Map getLatest(List tagNames) { Map> nxFgs = tagNames.stream().collect(Collectors.groupingBy(tn -> tn.startsWith("NX_FGS_"))); Map latest = null; try { latest = historyDao.getLatest(nxFgs.get(true)); } catch (Exception e) { e.printStackTrace(); } Map data2 = adapterService.getLatestData2(nxFgs.get(false)); latest.putAll(data2); return latest; } public List getHistoryRaw(String tagName, Date startTime, Date endTime) { try { if (tagName.startsWith("NX_FGS_")) { return historyDao.getHistoryRaw(tagName, startTime, endTime); } else { return adapterService.getPointData(startTime, endTime, 1, null, tagName); } } catch (Exception e) { log.error("异常点:" + tagName); log.error(e.getMessage()); return new ArrayList<>(); } } public List getHistoryRaw(String tagName, long startTs, long endTs) { return getHistoryRaw(tagName, new Date(startTs), new Date(endTs)); } public List getHistorySnap(String tagName, long startTs, long endTs, Integer interval) { return getHistorySnap(tagName, new Date(startTs), new Date(endTs), interval); } public List getHistorySnap(String tagName, Date startTime, Date endTime, Integer interval) { if (interval == null || interval == 0) interval = 60; try { if (tagName.startsWith("NX_FGS_")) { return historyDao.getHistorySnap(tagName, startTime, endTime, interval); } else { return adapterService.getPointData(startTime, endTime, 0, interval, tagName); } } catch (Exception e) { log.error("异常点:" + tagName); log.error(e.getMessage()); return new ArrayList<>(); } } /** * @param startTime:开始时间。 * @param endTime:结束时间。 * @param type:采样类型。0瞬时值,1原始值,2最大值,3最小值,4平均值。 * @param interval:采样频率,单位秒。 * @param tagName:要查询的变量(数据、测点)名。 */ public List getHistoryStat(String tagName, Date startTime, Date endTime, Integer interval, Integer type) { if (interval == null || interval == 0) interval = 60; if (type == null || type < 2 || type > 4) type = 4; try { if (tagName.startsWith("NX_FGS_")) { return historyDao.getHistoryStat(tagName, startTime, endTime, interval, type); } else { return adapterService.getPointData(startTime, endTime, type, interval, tagName); } } catch (Exception e) { log.error("异常点:" + tagName); log.error(e.getMessage()); return new ArrayList<>(); } } public PointData getHistoryStat0(String tagName, Date startTime, Date endTime, Integer type) { if (tagName.startsWith("NX_FGS_")) { try { return historyDao.getHistoryStat0(tagName, startTime, endTime, type); } catch (Exception e) { e.printStackTrace(); } } else { int interval = (int) TimeUnit.MILLISECONDS.toMinutes(endTime.getTime() - startTime.getTime()); List pd = adapterService.getPointData(startTime, endTime, type, interval, tagName); return pd.get(0); } return new PointData(); } public boolean writeLatest(List dataList) { return latestDao.writeLatest(dataList); } public boolean writeLatest(PointData data) { return writeLatest(Collections.singletonList(data)); } public Map getHistorySection(long ts, String tagNames) { return getHistorySection(new Date(ts), tagNames); } public Map getHistorySection(Date time, String tagNames) { Map> nxFgs = Arrays.stream(tagNames.split(",")).collect( Collectors.groupingBy(tn -> tn.startsWith("NX_FGS_"))); Map result = new HashMap<>(); try { Map latest = historyDao.getHistorySection(time, nxFgs.get(true)); result.putAll(latest); if (nxFgs.get(false) == null) return result; for (String tagName : nxFgs.get(false)) { List pdsMap = adapterService.getPointData(time, time, 1, null, tagName); result.put(tagName, pdsMap.get(0)); } return result; } catch (Exception e) { log.error(e.getMessage()); return new HashMap<>(); } } }