From 3c5e31784a165b12446f2f56e742660868d1e0bf Mon Sep 17 00:00:00 2001 From: huangfeng Date: Wed, 12 Jun 2024 09:24:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0i2=E7=9A=84=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E8=BD=AC=E6=8D=A2=E5=92=8C=E9=A2=84=E8=A7=88xml?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xydl/cac/controller/I2syncController.java | 37 ++++++++++++ .../java/com/xydl/cac/model/i2sync/Attr.java | 14 +++++ .../com/xydl/cac/model/i2sync/Datanode.java | 18 ++++++ .../xydl/cac/model/i2sync/Monitordata.java | 13 +++++ .../com/xydl/cac/model/i2sync/Request.java | 10 ++++ .../com/xydl/cac/service/I2syncService.java | 3 + .../cac/service/impl/I2syncServiceImpl.java | 7 ++- .../java/com/xydl/cac/task/I2syncTask.java | 58 +++++++++++++++---- 8 files changed, 148 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/xydl/cac/model/i2sync/Attr.java create mode 100644 src/main/java/com/xydl/cac/model/i2sync/Datanode.java create mode 100644 src/main/java/com/xydl/cac/model/i2sync/Monitordata.java create mode 100644 src/main/java/com/xydl/cac/model/i2sync/Request.java diff --git a/src/main/java/com/xydl/cac/controller/I2syncController.java b/src/main/java/com/xydl/cac/controller/I2syncController.java index 4424878..5134eae 100644 --- a/src/main/java/com/xydl/cac/controller/I2syncController.java +++ b/src/main/java/com/xydl/cac/controller/I2syncController.java @@ -1,11 +1,18 @@ package com.xydl.cac.controller; import com.xydl.cac.entity.I2syncConfig; +import com.xydl.cac.entity.I2syncField; import com.xydl.cac.entity.I2syncRecord; import com.xydl.cac.entity.ModevType; import com.xydl.cac.exception.BusinessException; import com.xydl.cac.model.Response; +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.service.I2syncService; +import com.xydl.cac.util.DateUtil; +import com.xydl.cac.util.JSONUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -14,6 +21,8 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; import java.util.List; @RestController @@ -80,4 +89,32 @@ public class I2syncController extends BasicController { return Response.success(result); } + @GetMapping("prewXml") + @ApiOperation("预览xml结构") + public Response prewXml(String tablename) throws Exception { + List fieldList = service.listFieldConfig(tablename); + List attrs = new ArrayList<>(); + for (I2syncField field : fieldList) { + Attr attr = new Attr(); + attr.setName(field.getDestFieldName()); + attr.setValue("100.0"); + attr.setAlarm("FALSE"); + attrs.add(attr); + } + Datanode node = new Datanode(); + node.setSensorid("HNHFT001Q1W000104"); + node.setType("027002"); + node.setEquipmentid("HNHFT001Q1W000104"); + node.setTimestamp(DateUtil.format(new Date())); + node.setAttr(attrs); + Monitordata monitordata = new Monitordata(); + monitordata.setCacid("HNHFT001Q1W000104"); + monitordata.setDatanodenum(1); + monitordata.setDatanode(node); + Request request = new Request(); + request.setMonitordata(monitordata); + String xml = JSONUtil.object2Xml(request); + return Response.success(xml); + } + } diff --git a/src/main/java/com/xydl/cac/model/i2sync/Attr.java b/src/main/java/com/xydl/cac/model/i2sync/Attr.java new file mode 100644 index 0000000..70dd3d6 --- /dev/null +++ b/src/main/java/com/xydl/cac/model/i2sync/Attr.java @@ -0,0 +1,14 @@ +package com.xydl.cac.model.i2sync; + +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import lombok.Data; + +@Data +public class Attr { + @JacksonXmlProperty(isAttribute = true) + private String name; + @JacksonXmlProperty(isAttribute = true) + private String value; + @JacksonXmlProperty(isAttribute = true) + private String alarm; +} diff --git a/src/main/java/com/xydl/cac/model/i2sync/Datanode.java b/src/main/java/com/xydl/cac/model/i2sync/Datanode.java new file mode 100644 index 0000000..b281a5f --- /dev/null +++ b/src/main/java/com/xydl/cac/model/i2sync/Datanode.java @@ -0,0 +1,18 @@ +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 Datanode { + @JacksonXmlProperty(isAttribute = true) + private String sensorid; + private String type; + private String equipmentid; + private String timestamp; + @JacksonXmlElementWrapper(localName = "attrs") + private List attr; +} diff --git a/src/main/java/com/xydl/cac/model/i2sync/Monitordata.java b/src/main/java/com/xydl/cac/model/i2sync/Monitordata.java new file mode 100644 index 0000000..1761d9b --- /dev/null +++ b/src/main/java/com/xydl/cac/model/i2sync/Monitordata.java @@ -0,0 +1,13 @@ +package com.xydl.cac.model.i2sync; + +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import lombok.Data; + +@Data +public class Monitordata { + @JacksonXmlProperty(isAttribute = true) + private String cacid; + @JacksonXmlProperty(isAttribute = true) + private int datanodenum; + private Datanode datanode; +} diff --git a/src/main/java/com/xydl/cac/model/i2sync/Request.java b/src/main/java/com/xydl/cac/model/i2sync/Request.java new file mode 100644 index 0000000..29760ba --- /dev/null +++ b/src/main/java/com/xydl/cac/model/i2sync/Request.java @@ -0,0 +1,10 @@ +package com.xydl.cac.model.i2sync; + +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import lombok.Data; + +@Data +@JacksonXmlRootElement(localName = "request") +public class Request { + private Monitordata monitordata; +} diff --git a/src/main/java/com/xydl/cac/service/I2syncService.java b/src/main/java/com/xydl/cac/service/I2syncService.java index 880f359..6577d4f 100644 --- a/src/main/java/com/xydl/cac/service/I2syncService.java +++ b/src/main/java/com/xydl/cac/service/I2syncService.java @@ -2,6 +2,7 @@ package com.xydl.cac.service; import com.xydl.cac.entity.I2syncConfig; +import com.xydl.cac.entity.I2syncField; import com.xydl.cac.entity.I2syncRecord; import com.xydl.cac.entity.ModevType; @@ -11,6 +12,8 @@ public interface I2syncService { List listFieldConfig(); + List listFieldConfig(String tablename); + void updateFieldConfig(ModevType item); void delFieldConfig(String tablename); diff --git a/src/main/java/com/xydl/cac/service/impl/I2syncServiceImpl.java b/src/main/java/com/xydl/cac/service/impl/I2syncServiceImpl.java index 7ea2d9a..5ca8bb2 100644 --- a/src/main/java/com/xydl/cac/service/impl/I2syncServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/I2syncServiceImpl.java @@ -15,7 +15,6 @@ import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; -import java.util.Optional; @Service @Slf4j @@ -51,6 +50,12 @@ public class I2syncServiceImpl implements I2syncService { return result; } + @Override + public List listFieldConfig(String tablename) { + List fieldList = syncFieldRepository.findByTableName(tablename); + return fieldList; + } + @Override public void updateFieldConfig(ModevType item) { syncFieldRepository.deleteByTableName(item.getTablename()); diff --git a/src/main/java/com/xydl/cac/task/I2syncTask.java b/src/main/java/com/xydl/cac/task/I2syncTask.java index 9290783..3ef1285 100644 --- a/src/main/java/com/xydl/cac/task/I2syncTask.java +++ b/src/main/java/com/xydl/cac/task/I2syncTask.java @@ -1,11 +1,13 @@ package com.xydl.cac.task; import com.xydl.cac.entity.*; -import com.xydl.cac.repository.I2syncFieldRepository; +import com.xydl.cac.model.i2sync.*; 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.util.DateUtil; +import com.xydl.cac.util.JSONUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @@ -13,7 +15,6 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.ArrayList; -import java.util.Date; import java.util.List; import java.util.Map; @@ -23,8 +24,6 @@ public class I2syncTask { @Resource I2syncService i2syncService; @Resource - I2syncFieldRepository syncFieldRepository; - @Resource I2syncRecordRepository recordRepository; @Resource NSensorRepository sensorRepository; @@ -49,7 +48,7 @@ public class I2syncTask { // 同步一个类型 private void syncConfig(I2syncConfig config) throws Exception { - List fieldList = syncFieldRepository.findByTableName(config.getTableName()); + List fieldList = i2syncService.listFieldConfig(config.getTableName()); if (CollectionUtils.isEmpty(fieldList)) { return; } @@ -66,20 +65,57 @@ public class I2syncTask { // 同步一个装置 private void syncSensor(NSensor sensor, List fieldList, List points) throws Exception { - Date start = null; + I2syncRecord record; List recordList = recordRepository.findByEqmid(sensor.getDevId()); - if (!CollectionUtils.isEmpty(recordList)) { - start = recordList.get(0).getLastDTime(); + if (CollectionUtils.isEmpty(recordList)) { + record = new I2syncRecord(); + record.setEqmid(sensor.getDevId()); + record.setModevtypeId(sensor.getTypeId()); + } else { + record = recordList.get(0); } // 查询最新数据 - List> list = dataService.getLatestData(sensor, points, start); + List> list = dataService.getLatestData(sensor, points, record.getLastDTime()); if (CollectionUtils.isEmpty(list)) { return; } - // 格式转换 + for (Map map : list) { + String date = (String) map.get("acquisitionTime"); + // 格式转换 + Request request = this.transform(sensor, fieldList, map, date); + String xml = JSONUtil.object2Xml(request); + + // 同步导出 - // 同步导出 + record.setLastDTime(DateUtil.parse(date)); + 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; } }