feat: 增加i2的格式转换和预览xml结构

dev
huangfeng 1 year ago
parent 6bc0d82bc0
commit 3c5e31784a

@ -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<String> prewXml(String tablename) throws Exception {
List<I2syncField> fieldList = service.listFieldConfig(tablename);
List<Attr> 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);
}
}

@ -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;
}

@ -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> attr;
}

@ -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;
}

@ -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;
}

@ -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<ModevType> listFieldConfig();
List<I2syncField> listFieldConfig(String tablename);
void updateFieldConfig(ModevType item);
void delFieldConfig(String tablename);

@ -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<I2syncField> listFieldConfig(String tablename) {
List<I2syncField> fieldList = syncFieldRepository.findByTableName(tablename);
return fieldList;
}
@Override
public void updateFieldConfig(ModevType item) {
syncFieldRepository.deleteByTableName(item.getTablename());

@ -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<I2syncField> fieldList = syncFieldRepository.findByTableName(config.getTableName());
List<I2syncField> fieldList = i2syncService.listFieldConfig(config.getTableName());
if (CollectionUtils.isEmpty(fieldList)) {
return;
}
@ -66,20 +65,57 @@ public class I2syncTask {
// 同步一个装置
private void syncSensor(NSensor sensor, List<I2syncField> fieldList, List<ModevTypePoint> points) throws Exception {
Date start = null;
I2syncRecord record;
List<I2syncRecord> 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<Map<String, Object>> list = dataService.getLatestData(sensor, points, start);
List<Map<String, Object>> list = dataService.getLatestData(sensor, points, record.getLastDTime());
if (CollectionUtils.isEmpty(list)) {
return;
}
// 格式转换
for (Map<String, Object> 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<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;
}
}

Loading…
Cancel
Save