diff --git a/mh-framework/src/main/java/com/mh/framework/dealdata/impl/DataProcessServiceImpl.java b/mh-framework/src/main/java/com/mh/framework/dealdata/impl/DataProcessServiceImpl.java index eca7812..6d09d1e 100644 --- a/mh-framework/src/main/java/com/mh/framework/dealdata/impl/DataProcessServiceImpl.java +++ b/mh-framework/src/main/java/com/mh/framework/dealdata/impl/DataProcessServiceImpl.java @@ -495,39 +495,7 @@ public class DataProcessServiceImpl implements DataProcessService { List dataList1 = entry1.getValue(); // 进行数据处理入库操作等 try { - List dealList = new ArrayList<>(); - Map> dateOptionalMap = dealAndInsertChillers(dataList1, mtType); - for (Map.Entry> value : dateOptionalMap.entrySet()) { - boolean present = value.getValue().isPresent(); - if (!present) { - continue; - } - dealList.add(value.getValue().get()); - } - // 根据时间排序 - dealList.sort(Comparator.comparing(CollectionParamsManage::getCurTime)); - // 批量插入到chillers_data_min表 - Calendar calendar = Calendar.getInstance(); - calendar.setTime(new Date()); - int year = calendar.get(Calendar.YEAR); - String tableName = "chillers_data_min" + year; - for (CollectionParamsManage collectionParamsManage : dealList) { - // 判断是否存在,存在的话就不插入 - DeviceReport deviceReport = new DeviceReport(); - deviceReport.setDeviceNum(collectionParamsManage.getMtNum()); - deviceReport.setCurTime(collectionParamsManage.getCurTime()); - if (null != dataProcessMapper.isHaveData(deviceReport, tableName)) { - continue; - } - dataProcessMapper.batchInsertChiller(List.of(collectionParamsManage), tableName); - } -// int batchSize = 10; -// // 分页查询并插入数据 -// for (int i = 0; i < cacheList.size(); i += batchSize) { -// List batchList = cacheList.subList(i, Math.min(i + batchSize, cacheList.size())); -// // 执行插入语句 -// dataProcessMapper.batchInsertChiller(batchList, tableName); -// } + dealAndInsertChillersData(dataList1, mtType); } catch (Exception e) { log.error("处理主机参数异常:{}", e); } @@ -535,6 +503,48 @@ public class DataProcessServiceImpl implements DataProcessService { } } + /** + * 处理冷水机组数据并插入数据库,每5分钟存储一条数据 + * @param dataList 同一设备的数据列表 + * @param deviceType 设备类型 + */ + private void dealAndInsertChillersData(List dataList, String deviceType) { + // 格式化时间点为5分钟间隔,然后取同样时间点的最大值 + Map> collect = dataList.stream() + .peek(val -> val.setCurTime(DateUtils.stringToDate(DateUtils.getTimeMin(val.getCurTime(), 5), "yyyy-MM-dd HH:mm:ss"))) + .collect( + Collectors.groupingBy( + CollectionParamsManage::getCurTime, + Collectors.maxBy(Comparator.comparing(CollectionParamsManage::getCurValue))) + ); + collect = sortMapByDate(collect); + + if (collect.isEmpty()) { + return; + } + + // 批量插入到chillers_data_min表 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + int year = calendar.get(Calendar.YEAR); + String tableName = "chillers_data_min" + year; + + // 遍历处理后的数据,插入数据库 + for (Map.Entry> entry : collect.entrySet()) { + if (entry.getValue().isPresent()) { + CollectionParamsManage collectionParamsManage = entry.getValue().get(); + // 判断是否存在,存在的话就不插入 + DeviceReport deviceReport = new DeviceReport(); + deviceReport.setDeviceNum(collectionParamsManage.getMtNum()); + deviceReport.setCurTime(collectionParamsManage.getCurTime()); + if (null != dataProcessMapper.isHaveData(deviceReport, tableName)) { + continue; + } + dataProcessMapper.batchInsertChiller(List.of(collectionParamsManage), tableName); + } + } + } + /** * 排序 * @param map