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

dev
huangfeng 1 year ago
parent 6bc0d82bc0
commit 3c5e31784a

@ -1,11 +1,18 @@
package com.xydl.cac.controller; package com.xydl.cac.controller;
import com.xydl.cac.entity.I2syncConfig; import com.xydl.cac.entity.I2syncConfig;
import com.xydl.cac.entity.I2syncField;
import com.xydl.cac.entity.I2syncRecord; import com.xydl.cac.entity.I2syncRecord;
import com.xydl.cac.entity.ModevType; import com.xydl.cac.entity.ModevType;
import com.xydl.cac.exception.BusinessException; import com.xydl.cac.exception.BusinessException;
import com.xydl.cac.model.Response; 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.service.I2syncService;
import com.xydl.cac.util.DateUtil;
import com.xydl.cac.util.JSONUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -14,6 +21,8 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
@RestController @RestController
@ -80,4 +89,32 @@ public class I2syncController extends BasicController {
return Response.success(result); 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.I2syncConfig;
import com.xydl.cac.entity.I2syncField;
import com.xydl.cac.entity.I2syncRecord; import com.xydl.cac.entity.I2syncRecord;
import com.xydl.cac.entity.ModevType; import com.xydl.cac.entity.ModevType;
@ -11,6 +12,8 @@ public interface I2syncService {
List<ModevType> listFieldConfig(); List<ModevType> listFieldConfig();
List<I2syncField> listFieldConfig(String tablename);
void updateFieldConfig(ModevType item); void updateFieldConfig(ModevType item);
void delFieldConfig(String tablename); void delFieldConfig(String tablename);

@ -15,7 +15,6 @@ import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Optional;
@Service @Service
@Slf4j @Slf4j
@ -51,6 +50,12 @@ public class I2syncServiceImpl implements I2syncService {
return result; return result;
} }
@Override
public List<I2syncField> listFieldConfig(String tablename) {
List<I2syncField> fieldList = syncFieldRepository.findByTableName(tablename);
return fieldList;
}
@Override @Override
public void updateFieldConfig(ModevType item) { public void updateFieldConfig(ModevType item) {
syncFieldRepository.deleteByTableName(item.getTablename()); syncFieldRepository.deleteByTableName(item.getTablename());

@ -1,11 +1,13 @@
package com.xydl.cac.task; package com.xydl.cac.task;
import com.xydl.cac.entity.*; 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.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.util.DateUtil;
import com.xydl.cac.util.JSONUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -13,7 +15,6 @@ import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -23,8 +24,6 @@ public class I2syncTask {
@Resource @Resource
I2syncService i2syncService; I2syncService i2syncService;
@Resource @Resource
I2syncFieldRepository syncFieldRepository;
@Resource
I2syncRecordRepository recordRepository; I2syncRecordRepository recordRepository;
@Resource @Resource
NSensorRepository sensorRepository; NSensorRepository sensorRepository;
@ -49,7 +48,7 @@ public class I2syncTask {
// 同步一个类型 // 同步一个类型
private void syncConfig(I2syncConfig config) throws Exception { 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)) { if (CollectionUtils.isEmpty(fieldList)) {
return; return;
} }
@ -66,20 +65,57 @@ public class I2syncTask {
// 同步一个装置 // 同步一个装置
private void syncSensor(NSensor sensor, List<I2syncField> fieldList, List<ModevTypePoint> points) throws Exception { 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()); List<I2syncRecord> recordList = recordRepository.findByEqmid(sensor.getDevId());
if (!CollectionUtils.isEmpty(recordList)) { if (CollectionUtils.isEmpty(recordList)) {
start = recordList.get(0).getLastDTime(); 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)) { if (CollectionUtils.isEmpty(list)) {
return; 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