perf: 调整结构,优化格式转换

dev
huangfeng 1 year ago
parent 7f0c70cba2
commit fffa18f452

@ -107,10 +107,12 @@ public class I2syncController extends BasicController {
node.setEquipmentid("HNHFT001Q1W000104"); node.setEquipmentid("HNHFT001Q1W000104");
node.setTimestamp(DateUtil.format(new Date())); node.setTimestamp(DateUtil.format(new Date()));
node.setAttr(attrs); node.setAttr(attrs);
List<Datanode> nodeList = new ArrayList<>();
nodeList.add(node);
Monitordata monitordata = new Monitordata(); Monitordata monitordata = new Monitordata();
monitordata.setCacid("HNHFT001Q1W000104"); monitordata.setCacid("HNHFT001Q1W000104");
monitordata.setDatanodenum(1); monitordata.setDatanodenum(1);
monitordata.setDatanode(node); monitordata.setDatanode(nodeList);
Request request = new Request(); Request request = new Request();
request.setMonitordata(monitordata); request.setMonitordata(monitordata);
String xml = JSONUtil.object2Xml(request); String xml = JSONUtil.object2Xml(request);

@ -1,13 +1,17 @@
package com.xydl.cac.model.i2sync; package com.xydl.cac.model.i2sync;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import lombok.Data; import lombok.Data;
import java.util.List;
@Data @Data
public class Monitordata { public class Monitordata {
@JacksonXmlProperty(isAttribute = true) @JacksonXmlProperty(isAttribute = true)
private String cacid; private String cacid;
@JacksonXmlProperty(isAttribute = true) @JacksonXmlProperty(isAttribute = true)
private int datanodenum; private Integer datanodenum;
private Datanode datanode; @JacksonXmlElementWrapper(useWrapping = false)
private List<Datanode> datanode;
} }

@ -6,6 +6,7 @@ import com.xydl.cac.repository.I2syncRecordRepository;
import com.xydl.cac.repository.NSensorRepository; import com.xydl.cac.repository.NSensorRepository;
import com.xydl.cac.service.DataService; import com.xydl.cac.service.DataService;
import com.xydl.cac.service.I2syncService; import com.xydl.cac.service.I2syncService;
import com.xydl.cac.transform.I2DataTransformer;
import com.xydl.cac.util.DateUtil; import com.xydl.cac.util.DateUtil;
import com.xydl.cac.util.JSONUtil; import com.xydl.cac.util.JSONUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -29,6 +30,8 @@ public class I2syncTask {
NSensorRepository sensorRepository; NSensorRepository sensorRepository;
@Resource @Resource
DataService dataService; DataService dataService;
@Resource
I2DataTransformer dataTransformer;
@Scheduled(initialDelay = 60 * 1000, fixedDelay = 30 * 60 * 1000) @Scheduled(initialDelay = 60 * 1000, fixedDelay = 30 * 60 * 1000)
public void syncAll() { public void syncAll() {
@ -37,7 +40,7 @@ public class I2syncTask {
log.info("I2syncTask.syncAll 开始."); log.info("I2syncTask.syncAll 开始.");
try { try {
for (I2syncConfig config : configList) { for (I2syncConfig config : configList) {
this.syncConfig(config); this.syncOneConfig(config);
} }
log.info("I2syncTask.syncAll 结束."); log.info("I2syncTask.syncAll 结束.");
} catch (Exception e) { } 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<I2syncField> fieldList = i2syncService.listFieldConfig(config.getTableName()); List<I2syncField> fieldList = i2syncService.listFieldConfig(config.getTableName());
if (CollectionUtils.isEmpty(fieldList)) { if (CollectionUtils.isEmpty(fieldList)) {
return; return;
@ -59,12 +62,12 @@ public class I2syncTask {
} }
List<NSensor> list = sensorRepository.findByTypeId(config.getModevtypeId()); List<NSensor> list = sensorRepository.findByTypeId(config.getModevtypeId());
for (NSensor sensor : list) { for (NSensor sensor : list) {
this.syncSensor(sensor, fieldList, points); this.syncOneSensor(sensor, fieldList, points);
} }
} }
// 同步一个装置 // 同步一个装置
private void syncSensor(NSensor sensor, List<I2syncField> fieldList, List<ModevTypePoint> points) throws Exception { private void syncOneSensor(NSensor sensor, List<I2syncField> fieldList, List<ModevTypePoint> points) throws Exception {
I2syncRecord record; I2syncRecord record;
List<I2syncRecord> recordList = recordRepository.findByEqmid(sensor.getDevId()); List<I2syncRecord> recordList = recordRepository.findByEqmid(sensor.getDevId());
if (CollectionUtils.isEmpty(recordList)) { if (CollectionUtils.isEmpty(recordList)) {
@ -76,46 +79,18 @@ public class I2syncTask {
} }
// 查询最新数据 // 查询最新数据
List<Map<String, Object>> list = dataService.getLatestData(sensor, points, record.getLastDTime()); List<Map<String, Object>> dataList = dataService.getLatestData(sensor, points, record.getLastDTime());
if (CollectionUtils.isEmpty(list)) { if (CollectionUtils.isEmpty(dataList)) {
return; return;
} }
for (Map<String, Object> map : list) {
String date = (String) map.get("acquisitionTime");
// 格式转换 // 格式转换
Request request = this.transform(sensor, fieldList, map, date); Request request = dataTransformer.transform(sensor, record, fieldList, dataList);
String xml = JSONUtil.object2Xml(request);
// 同步导出 // 同步导出
String xml = JSONUtil.object2Xml(request);
record.setLastDTime(DateUtil.parse(date));
recordRepository.save(record); recordRepository.save(record);
} }
}
private Request transform(NSensor sensor, List<I2syncField> fieldList, Map<String, Object> map, String date) {
List<Attr> 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;
}
} }

@ -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<I2syncField> fieldList, List<Map<String, Object>> dataList) throws Exception {
List<Datanode> nodeList = new ArrayList<>();
for (Map<String, Object> map : dataList) {
String date = (String) map.get("acquisitionTime");
List<Attr> 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;
}
}
Loading…
Cancel
Save