From 734747240ce6ebcc24ce6292e792dcad53d8d5c3 Mon Sep 17 00:00:00 2001 From: huangfeng Date: Thu, 5 Dec 2024 10:20:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20i2=E5=90=8C=E6=AD=A5=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=8F=AF=E9=85=8D=E7=BD=AE=E4=B8=80=E6=9D=A1=E6=8B=86=E5=88=86?= =?UTF-8?q?=E6=88=90=E5=A4=9A=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/upgrade1128.sql | 4 +- .../java/com/xydl/cac/entity/I2syncField.java | 3 + .../cac/service/impl/DataServiceImpl.java | 2 +- .../xydl/cac/transform/I2DataTransformer.java | 105 ++++++++++++------ 4 files changed, 80 insertions(+), 34 deletions(-) diff --git a/db/upgrade1128.sql b/db/upgrade1128.sql index 07180b1..e6b05b3 100644 --- a/db/upgrade1128.sql +++ b/db/upgrade1128.sql @@ -34,4 +34,6 @@ CREATE TABLE `ied_dl_config` ( `todel` int(11) DEFAULT NULL COMMENT '下载后删除', `active` int(11) DEFAULT NULL COMMENT '0:停用; 1:启用;', PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; \ No newline at end of file +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +ALTER TABLE `i2sync_field` ADD COLUMN `attach` VARCHAR(45) NULL COMMENT 'sensorid尾部附加' AFTER `dest_field_name`; \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/entity/I2syncField.java b/src/main/java/com/xydl/cac/entity/I2syncField.java index 76bb7be..98d1a05 100644 --- a/src/main/java/com/xydl/cac/entity/I2syncField.java +++ b/src/main/java/com/xydl/cac/entity/I2syncField.java @@ -33,4 +33,7 @@ public class I2syncField { @Column(name = "dest_field_name") private String destFieldName; + @Column(name = "attach") + private String attach; + } \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/service/impl/DataServiceImpl.java b/src/main/java/com/xydl/cac/service/impl/DataServiceImpl.java index 5619341..29fa793 100644 --- a/src/main/java/com/xydl/cac/service/impl/DataServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/DataServiceImpl.java @@ -244,7 +244,7 @@ public class DataServiceImpl implements DataService { @Override public List> getLatestData(String tableName, Integer devId, List points, Date start) throws Exception { ConditionModel model = new ConditionModel(); - model.setPageSize(1000); + model.setPageSize(500); model.setPageNum(1); model.setStartTime(start); model.setExcludeStartTime(true); diff --git a/src/main/java/com/xydl/cac/transform/I2DataTransformer.java b/src/main/java/com/xydl/cac/transform/I2DataTransformer.java index f355a8e..28bd9ba 100644 --- a/src/main/java/com/xydl/cac/transform/I2DataTransformer.java +++ b/src/main/java/com/xydl/cac/transform/I2DataTransformer.java @@ -1,6 +1,5 @@ package com.xydl.cac.transform; -import com.alibaba.excel.util.StringUtils; import com.xydl.cac.entity.*; import com.xydl.cac.model.StaticVariable; import com.xydl.cac.model.i2sync.Attr; @@ -9,12 +8,10 @@ import com.xydl.cac.model.i2sync.Monitordata; import com.xydl.cac.model.i2sync.Request; import com.xydl.cac.util.DateUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.*; @Component @Slf4j @@ -34,23 +31,42 @@ public class I2DataTransformer { } } + LinkedHashMap> fieldMap = this.sortFieldList(fieldList); + List nodeList = new ArrayList<>(); for (Map map : dataList) { - String date = (String) map.get("acquisitionTime"); - Datanode node = new Datanode(); - node.setSensorid(sensor.getSensorCode()); - node.setEquipmentid(sensor.getEquipmentId()); - node.setTimestamp(date); - List attrs = new ArrayList<>(); - Attr attr = new Attr(); - attr.setName("Phase"); - attr.setValue(sensor.getPhase()); - attr.setAlarm("FALSE"); - attrs.add(attr); - for (I2syncField field : fieldList) { - Object value = map.get(field.getFieldName()); - attr = new Attr(); + Iterator fit = fieldMap.keySet().iterator(); + while (it.hasNext()) { + String attach = fit.next(); + List fieldListNew = fieldMap.get(attach); + + Datanode node = this.buildDatanode(sensor, config.getTypeCode(), attach, + fieldListNew, map, ruleList); + if (node != null) { + nodeList.add(node); + record.setLastDTime(DateUtil.parse(node.getTimestamp())); + } + } + } + + Monitordata monitordata = new Monitordata(); + monitordata.setCacid(sensor.getSensorCode()); + monitordata.setDatanodenum(nodeList.size()); + monitordata.setDatanode(nodeList); + Request request = new Request(); + request.setMonitordata(monitordata); + return request; + } + + private Datanode buildDatanode(NSensor sensor, String typeCode, String attach, + List fieldList, Map dataMap, + List ruleList) { + List attrs = new ArrayList<>(); + for (I2syncField field : fieldList) { + Object value = dataMap.get(field.getFieldName()); + if (value != null) { + Attr attr = new Attr(); attr.setName(field.getDestFieldName()); attr.setValue(String.valueOf(value)); if (this.triggerRule(ruleList, field.getFieldName(), value)) { @@ -58,24 +74,49 @@ public class I2DataTransformer { } else { attr.setAlarm("FALSE"); } - if (StringUtils.isBlank(node.getType())) { - node.setType(config.getTypeCode()); - } attrs.add(attr); } - node.setAttr(attrs); + } + if (attrs.size() < 1) { + return null; + } + String date = (String) dataMap.get("acquisitionTime"); + Datanode node = new Datanode(); + node.setType(typeCode); + node.setTimestamp(date); + node.setAttr(attrs); - nodeList.add(node); - record.setLastDTime(DateUtil.parse(date)); + Attr attr = new Attr(); + attr.setName("Phase"); + attr.setAlarm("FALSE"); + attrs.add(attr); + if (StringUtils.isBlank(attach)) { + attr.setValue(sensor.getPhase()); + node.setSensorid(sensor.getSensorCode()); + node.setEquipmentid(sensor.getEquipmentId()); + } else { + attr.setValue(""); + node.setSensorid(sensor.getSensorCode() + attach); + node.setEquipmentid(sensor.getEquipmentId() + attach); } + return node; + } - Monitordata monitordata = new Monitordata(); - monitordata.setCacid(sensor.getSensorCode()); - monitordata.setDatanodenum(nodeList.size()); - monitordata.setDatanode(nodeList); - Request request = new Request(); - request.setMonitordata(monitordata); - return request; + private LinkedHashMap> sortFieldList(List fieldList) { + LinkedHashMap> map = new LinkedHashMap<>(); + for (I2syncField item : fieldList) { + String attach = item.getAttach(); + if (attach == null) { + attach = ""; + } + List list = map.get(attach); + if (list == null) { + list = new ArrayList<>(); + map.put(attach, list); + } + list.add(item); + } + return map; } private boolean triggerRule(List ruleList, String fieldName, Object value) {