|
@@ -131,60 +131,82 @@ public class TwinCalcHourRzServiceImpl implements ITwinCalcHourRzService {
|
|
|
*/
|
|
|
@Override
|
|
|
public void hour(LocalDateTime start, LocalDateTime end) {
|
|
|
+ // 将开始时间转换为Date类型,用于后续查询
|
|
|
Date date = Date.from(start.toLocalDate().atStartOfDay(ZoneOffset.of("+8")).toInstant());
|
|
|
+ // 将开始和结束时间转换为毫秒,用于后续查询
|
|
|
Long startTime = start.toInstant(ZoneOffset.of("+8")).toEpochMilli();
|
|
|
Long endTime = end.toInstant(ZoneOffset.of("+8")).toEpochMilli();
|
|
|
+
|
|
|
+ // 删除已存在的小时级计算结果,避免重复计算
|
|
|
deleteTwinCalcHourRz(start.toLocalDate(), start.getHour());
|
|
|
+
|
|
|
+ // 获取设备列表
|
|
|
List<TwinDeviceRz> list = rzService.selectTwinDeviceRzList(new TwinDeviceRz());
|
|
|
+ // 获取设备类型列表
|
|
|
List<TwinDeviceType> typeList = typeService.selectTwinDeviceTypeAll();
|
|
|
+ // 使用设备类型ID作为键,设备类型作为值,创建设备类型映射
|
|
|
Map<Long, TwinDeviceType> typeMap = new HashMap<>(16);
|
|
|
- //存明细数据,key用deviceCode+dataCode
|
|
|
+ // 存储明细数据,使用设备代码和数据代码作为键
|
|
|
Map<String, TwinDeviceTypeData> detailMap = new HashMap<>(16);
|
|
|
typeList.forEach(item -> typeMap.put(item.getTypeId(), item));
|
|
|
+
|
|
|
+ // 初始化存储查询结果的列表和映射
|
|
|
List<String> strList = new ArrayList<>();
|
|
|
Map<String, TwinDeviceRz> rzMap = new HashMap<>(16);
|
|
|
|
|
|
- //这个集合用来保存数据是属于 设定值 还是mes 还是实际值
|
|
|
+ // 这个映射用于保存数据是属于 设定值 还是mes 还是实际值
|
|
|
Map<String, Pair<String, String>> clsMap = new HashMap<>(16);
|
|
|
- //查询状态结尾部分
|
|
|
+ // 查询状态结尾部分
|
|
|
String statusSuffix = ".Capacity_data_1";
|
|
|
list.forEach(item -> {
|
|
|
- String str = item.getDeviceCode() + statusSuffix;
|
|
|
+ String deviceCode = item.getDeviceCode();
|
|
|
+ String str = deviceCode + statusSuffix;
|
|
|
item.setOnline(false);
|
|
|
- rzMap.put(item.getDeviceCode(), item);
|
|
|
+ rzMap.put(deviceCode, item);
|
|
|
strList.add(str);
|
|
|
|
|
|
TwinDeviceType type = typeMap.get(item.getTypeId());
|
|
|
- type.getTwinDeviceTypeDataList().forEach(detail -> {
|
|
|
- String suffix1 = "." + detail.getDataCode();
|
|
|
- strList.add(item.getDeviceCode() + suffix1);
|
|
|
- clsMap.put(item.getDeviceCode() + suffix1, new Pair<>("set", detail.getDataName()));
|
|
|
- detailMap.put(item.getDeviceCode() + suffix1, detail);
|
|
|
- if (StringUtils.isNotEmpty(detail.getMesCode())) {
|
|
|
- suffix1 = "." + detail.getMesCode();
|
|
|
- strList.add(item.getDeviceCode() + suffix1);
|
|
|
- clsMap.put(item.getDeviceCode() + suffix1, new Pair<>("mes", detail.getDataName()));
|
|
|
- detailMap.put(item.getDeviceCode() + suffix1, detail);
|
|
|
- }
|
|
|
+ if (type != null && type.getTwinDeviceTypeDataList() != null) {
|
|
|
+ type.getTwinDeviceTypeDataList().forEach(detail -> {
|
|
|
+ String suffix1 = "." + detail.getDataCode();
|
|
|
+ String key1 = deviceCode + suffix1;
|
|
|
+ strList.add(key1);
|
|
|
+ clsMap.put(key1, new Pair<>("set", detail.getDataName()));
|
|
|
+ detailMap.put(key1, detail);
|
|
|
+
|
|
|
+ if (StringUtils.isNotEmpty(detail.getMesCode())) {
|
|
|
+ suffix1 = "." + detail.getMesCode();
|
|
|
+ String key2 = deviceCode + suffix1;
|
|
|
+ strList.add(key2);
|
|
|
+ clsMap.put(key2, new Pair<>("mes", detail.getDataName()));
|
|
|
+ detailMap.put(key2, detail);
|
|
|
+ }
|
|
|
|
|
|
- if (StringUtils.isNotEmpty(detail.getActCode())) {
|
|
|
- JSONArray array = JSONUtil.parseArray(detail.getActCode());
|
|
|
- for (int j = 0; j < array.size(); j++) {
|
|
|
- JSONObject jsonObject = array.getJSONObject(j);
|
|
|
- String suffix2 = "." + jsonObject.getStr("code");
|
|
|
- String name = jsonObject.getStr("name");
|
|
|
- if (StringUtils.isEmpty(name)) {
|
|
|
- name = detail.getDataName();
|
|
|
+ if (StringUtils.isNotEmpty(detail.getActCode())) {
|
|
|
+ JSONArray array = JSONUtil.parseArray(detail.getActCode());
|
|
|
+ for (int j = 0; j < array.size(); j++) {
|
|
|
+ JSONObject jsonObject = array.getJSONObject(j);
|
|
|
+ String code = jsonObject.getStr("code");
|
|
|
+ String name = jsonObject.getStr("name");
|
|
|
+ if (StringUtils.isEmpty(name)) {
|
|
|
+ name = detail.getDataName();
|
|
|
+ }
|
|
|
+ String suffix2 = "." + code;
|
|
|
+ String key3 = deviceCode + suffix2;
|
|
|
+ strList.add(key3);
|
|
|
+ clsMap.put(key3, new Pair<>("act", name));
|
|
|
+ detailMap.put(key3, detail);
|
|
|
}
|
|
|
- strList.add(item.getDeviceCode() + suffix2);
|
|
|
- clsMap.put(item.getDeviceCode() + suffix2, new Pair<>("act", name));
|
|
|
- detailMap.put(item.getDeviceCode() + suffix2, detail);
|
|
|
}
|
|
|
- }
|
|
|
- });
|
|
|
+ });
|
|
|
+ }
|
|
|
});
|
|
|
+
|
|
|
+ // 构建查询SQL
|
|
|
String sql = "select last %s from root.tl.suxi where time>%s and time <=%s";
|
|
|
sql = String.format(sql, String.join(",", strList), startTime, endTime);
|
|
|
+
|
|
|
+ // 执行查询并处理结果
|
|
|
JSONObject jsonObject = iotService.query(sql);
|
|
|
JSONObject data = jsonObject.getJSONObject("data");
|
|
|
JSONArray values = data.getJSONArray("values");
|
|
@@ -204,20 +226,20 @@ public class TwinCalcHourRzServiceImpl implements ITwinCalcHourRzService {
|
|
|
params = new HashMap<>();
|
|
|
rz.setParams(params);
|
|
|
}
|
|
|
- //判断状态
|
|
|
+ // 判断状态
|
|
|
if (type.contains(statusSuffix)) {
|
|
|
if (rz.getTypeId() == 3 || rz.getTypeId() == 5 || rz.getTypeId() == 9) {
|
|
|
- //双棍烫光和两棍刷毛需要按照机器状态来判断是否开机
|
|
|
- //=1 设备故障停机 ,=2 人工停机 ,=3是缺布/断布停机 ,=4满布停机,=5设备上电待机中 =6设备自动运行中,=7设备过站中
|
|
|
- if (value.equals("6")) {
|
|
|
+ // 双棍烫光和两棍刷毛需要按照机器状态来判断是否开机
|
|
|
+ //=1 设备故障停机 ,=2 人工停机 ,=3是缺布/断布停机 ,=4满布停机,=5设备上电待机中 =6设备自动运行中,=7设备过站中
|
|
|
+ if ("6".equals(value)) {
|
|
|
rz.setOnline(true);
|
|
|
}
|
|
|
} else {
|
|
|
- //其他类型只需要有值就表示开机
|
|
|
+ // 其他类型只需要有值就表示开机
|
|
|
rz.setOnline(true);
|
|
|
}
|
|
|
} else {
|
|
|
- //工艺参数数据获取
|
|
|
+ // 工艺参数数据获取
|
|
|
String key = deviceCode + "." + dataCode;
|
|
|
TwinDeviceTypeData detail = detailMap.get(key);
|
|
|
Pair<String, String> clsPair = clsMap.get(key);
|
|
@@ -244,6 +266,8 @@ public class TwinCalcHourRzServiceImpl implements ITwinCalcHourRzService {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ // 构建最终结果列表
|
|
|
List<TwinCalcHourRz> rzList = new ArrayList<>();
|
|
|
list.forEach(item -> {
|
|
|
TwinCalcHourRz calc = new TwinCalcHourRz();
|
|
@@ -259,6 +283,7 @@ public class TwinCalcHourRzServiceImpl implements ITwinCalcHourRzService {
|
|
|
rzList.add(calc);
|
|
|
});
|
|
|
|
|
|
+ // 批量插入计算结果
|
|
|
try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
|
|
|
if (rzList.size() > 0) {
|
|
|
TwinCalcHourRzMapper mapper = sqlSession.getMapper(TwinCalcHourRzMapper.class);
|
|
@@ -268,6 +293,7 @@ public class TwinCalcHourRzServiceImpl implements ITwinCalcHourRzService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
* 按日期和时间删除数据
|
|
|
*
|