From fffa18f45267f806b8886b649061ff734f8e325d Mon Sep 17 00:00:00 2001 From: huangfeng Date: Thu, 13 Jun 2024 09:39:30 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E8=B0=83=E6=95=B4=E7=BB=93=E6=9E=84?= =?UTF-8?q?=EF=BC=8C=E4=BC=98=E5=8C=96=E6=A0=BC=E5=BC=8F=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xydl/cac/controller/I2syncController.java | 4 +- .../xydl/cac/model/i2sync/Monitordata.java | 8 ++- .../java/com/xydl/cac/task/I2syncTask.java | 53 +++++------------- .../xydl/cac/transform/I2DataTransformer.java | 55 +++++++++++++++++++ 4 files changed, 78 insertions(+), 42 deletions(-) create mode 100644 src/main/java/com/xydl/cac/transform/I2DataTransformer.java diff --git a/src/main/java/com/xydl/cac/controller/I2syncController.java b/src/main/java/com/xydl/cac/controller/I2syncController.java index 5134eae..4892dd3 100644 --- a/src/main/java/com/xydl/cac/controller/I2syncController.java +++ b/src/main/java/com/xydl/cac/controller/I2syncController.java @@ -107,10 +107,12 @@ public class I2syncController extends BasicController { node.setEquipmentid("HNHFT001Q1W000104"); node.setTimestamp(DateUtil.format(new Date())); node.setAttr(attrs); + List nodeList = new ArrayList<>(); + nodeList.add(node); Monitordata monitordata = new Monitordata(); monitordata.setCacid("HNHFT001Q1W000104"); monitordata.setDatanodenum(1); - monitordata.setDatanode(node); + monitordata.setDatanode(nodeList); Request request = new Request(); request.setMonitordata(monitordata); String xml = JSONUtil.object2Xml(request); diff --git a/src/main/java/com/xydl/cac/model/i2sync/Monitordata.java b/src/main/java/com/xydl/cac/model/i2sync/Monitordata.java index 1761d9b..60fba32 100644 --- a/src/main/java/com/xydl/cac/model/i2sync/Monitordata.java +++ b/src/main/java/com/xydl/cac/model/i2sync/Monitordata.java @@ -1,13 +1,17 @@ package com.xydl.cac.model.i2sync; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import lombok.Data; +import java.util.List; + @Data public class Monitordata { @JacksonXmlProperty(isAttribute = true) private String cacid; @JacksonXmlProperty(isAttribute = true) - private int datanodenum; - private Datanode datanode; + private Integer datanodenum; + @JacksonXmlElementWrapper(useWrapping = false) + private List datanode; } diff --git a/src/main/java/com/xydl/cac/task/I2syncTask.java b/src/main/java/com/xydl/cac/task/I2syncTask.java index 7dd1790..ef1cade 100644 --- a/src/main/java/com/xydl/cac/task/I2syncTask.java +++ b/src/main/java/com/xydl/cac/task/I2syncTask.java @@ -6,6 +6,7 @@ import com.xydl.cac.repository.I2syncRecordRepository; import com.xydl.cac.repository.NSensorRepository; import com.xydl.cac.service.DataService; import com.xydl.cac.service.I2syncService; +import com.xydl.cac.transform.I2DataTransformer; import com.xydl.cac.util.DateUtil; import com.xydl.cac.util.JSONUtil; import lombok.extern.slf4j.Slf4j; @@ -29,6 +30,8 @@ public class I2syncTask { NSensorRepository sensorRepository; @Resource DataService dataService; + @Resource + I2DataTransformer dataTransformer; @Scheduled(initialDelay = 60 * 1000, fixedDelay = 30 * 60 * 1000) public void syncAll() { @@ -37,7 +40,7 @@ public class I2syncTask { log.info("I2syncTask.syncAll 开始."); try { for (I2syncConfig config : configList) { - this.syncConfig(config); + this.syncOneConfig(config); } log.info("I2syncTask.syncAll 结束."); } catch (Exception e) { @@ -47,7 +50,7 @@ public class I2syncTask { } // 同步一个类型 - private void syncConfig(I2syncConfig config) throws Exception { + private void syncOneConfig(I2syncConfig config) throws Exception { List fieldList = i2syncService.listFieldConfig(config.getTableName()); if (CollectionUtils.isEmpty(fieldList)) { return; @@ -59,12 +62,12 @@ public class I2syncTask { } List list = sensorRepository.findByTypeId(config.getModevtypeId()); for (NSensor sensor : list) { - this.syncSensor(sensor, fieldList, points); + this.syncOneSensor(sensor, fieldList, points); } } // 同步一个装置 - private void syncSensor(NSensor sensor, List fieldList, List points) throws Exception { + private void syncOneSensor(NSensor sensor, List fieldList, List points) throws Exception { I2syncRecord record; List recordList = recordRepository.findByEqmid(sensor.getDevId()); if (CollectionUtils.isEmpty(recordList)) { @@ -76,46 +79,18 @@ public class I2syncTask { } // 查询最新数据 - List> list = dataService.getLatestData(sensor, points, record.getLastDTime()); - if (CollectionUtils.isEmpty(list)) { + List> dataList = dataService.getLatestData(sensor, points, record.getLastDTime()); + if (CollectionUtils.isEmpty(dataList)) { return; } - for (Map map : list) { - String date = (String) map.get("acquisitionTime"); - // 格式转换 - Request request = this.transform(sensor, fieldList, map, date); - String xml = JSONUtil.object2Xml(request); + // 格式转换 + Request request = dataTransformer.transform(sensor, record, fieldList, dataList); - // 同步导出 + // 同步导出 + String xml = JSONUtil.object2Xml(request); - record.setLastDTime(DateUtil.parse(date)); - recordRepository.save(record); - } + recordRepository.save(record); } - private Request transform(NSensor sensor, List fieldList, Map map, String date) { - List attrs = new ArrayList<>(); - for (I2syncField field : fieldList) { - Object value = map.get(field.getFieldName()); - Attr attr = new Attr(); - attr.setName(field.getDestFieldName()); - attr.setValue(String.valueOf(value)); - attr.setAlarm("FALSE"); - attrs.add(attr); - } - Datanode node = new Datanode(); - node.setSensorid(sensor.getEquipmentId()); - node.setType("027002"); - node.setEquipmentid(sensor.getEquipmentId()); - node.setTimestamp(date); - node.setAttr(attrs); - Monitordata monitordata = new Monitordata(); - monitordata.setCacid(sensor.getEquipmentId()); - monitordata.setDatanodenum(1); - monitordata.setDatanode(node); - Request request = new Request(); - request.setMonitordata(monitordata); - return request; - } } diff --git a/src/main/java/com/xydl/cac/transform/I2DataTransformer.java b/src/main/java/com/xydl/cac/transform/I2DataTransformer.java new file mode 100644 index 0000000..1b5a0e8 --- /dev/null +++ b/src/main/java/com/xydl/cac/transform/I2DataTransformer.java @@ -0,0 +1,55 @@ +package com.xydl.cac.transform; + +import com.xydl.cac.entity.I2syncField; +import com.xydl.cac.entity.I2syncRecord; +import com.xydl.cac.entity.NSensor; +import com.xydl.cac.model.i2sync.Attr; +import com.xydl.cac.model.i2sync.Datanode; +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.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Component +@Slf4j +public class I2DataTransformer { + + public Request transform(NSensor sensor, I2syncRecord record, + List fieldList, List> dataList) throws Exception { + + List nodeList = new ArrayList<>(); + for (Map map : dataList) { + String date = (String) map.get("acquisitionTime"); + List attrs = new ArrayList<>(); + for (I2syncField field : fieldList) { + Object value = map.get(field.getFieldName()); + Attr attr = new Attr(); + attr.setName(field.getDestFieldName()); + attr.setValue(String.valueOf(value)); + attr.setAlarm("FALSE"); + attrs.add(attr); + } + Datanode node = new Datanode(); + node.setSensorid(sensor.getEquipmentId()); + node.setType("027002"); + node.setEquipmentid(sensor.getEquipmentId()); + node.setTimestamp(date); + node.setAttr(attrs); + nodeList.add(node); + record.setLastDTime(DateUtil.parse(date)); + } + + Monitordata monitordata = new Monitordata(); + monitordata.setCacid(sensor.getEquipmentId()); + monitordata.setDatanodenum(nodeList.size()); + monitordata.setDatanode(nodeList); + Request request = new Request(); + request.setMonitordata(monitordata); + return request; + } +}