作者 钟来

x6新增数据类型不同步的问题

package com.zhonglai.luhui.device.analysis.comm.dto.thingsmodels.specs;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.zhonglai.luhui.device.analysis.comm.dto.thingsmodels.ThingsModelBase;
import com.zhonglai.luhui.device.analysis.comm.dto.thingsmodels.ThingsModelDataTypeEnum;
import com.zhonglai.luhui.device.analysis.comm.dto.thingsmodels.ThingsModelItemBase;
import com.zhonglai.luhui.device.domain.IotThingsModel;
import lombok.Data;
import org.apache.commons.lang3.EnumUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
... ... @@ -79,4 +85,63 @@ public class IntegerModelOutput extends ThingsModelItemBase<Integer>
}
return false;
}
public static void main(String[] args) {
IotThingsModel thingsModel = JSONObject.parseObject("{\"@type\":\"com.zhonglai.luhui.device.domain.IotThingsModel\",\"ascription\":\"1\",\"create_by\":\"admin\",\"data_type\":\"integer\",\"identifier\":\"turbidity\",\"is_config\":0,\"is_monitor\":0,\"is_save_log\":1,\"is_top\":0,\"model_id\":395,\"model_name\":\"浊度\",\"mqtt_username\":\"6_WP\",\"product_id\":9,\"specs\":\"{\\\"acy\\\":10,\\\"max\\\":999999,\\\"min\\\":0,\\\"step\\\":0.1,\\\"unit\\\":\\\"NTU\\\"}\",\"type\":1}\n", IotThingsModel.class);
String data_type = thingsModel.getData_type().toUpperCase();
if (!EnumUtils.isValidEnum(ThingsModelDataTypeEnum.class, data_type)) {
data_type = ThingsModelDataTypeEnum.STRING.name();
}
Class<ThingsModelBase> aClass = Enum.valueOf(ThingsModelDataTypeEnum.class, data_type).getaClass();
ThingsModelBase thingsModelBase = JSON.parseObject(thingsModel.getSpecs(), aClass);
thingsModelBase.conversionThingsModel(thingsModel);
JSONObject jsData = JSONObject.parseObject("{\n" +
" \"id\": 1714026179,\n" +
" \"0\": {\n" +
" \"rssi\": 18,\n" +
" \"at\": 369,\n" +
" \"bar\": 107987\n" +
" },\n" +
" \"10_1\": {\n" +
" \"type\": 1,\n" +
" \"mode\": 0,\n" +
" \"state\": 0,\n" +
" \"map\": \"1_1\"\n" +
" },\n" +
" \"10_2\": {\n" +
" \"type\": 1,\n" +
" \"mode\": 0,\n" +
" \"state\": 0,\n" +
" \"map\": \"1_2\"\n" +
" },\n" +
" \"10_3\": {\n" +
" \"type\": 1,\n" +
" \"mode\": 0,\n" +
" \"state\": 0,\n" +
" \"map\": \"1_3\"\n" +
" },\n" +
" \"10_4\": {\n" +
" \"type\": 1,\n" +
" \"mode\": 0,\n" +
" \"state\": 0,\n" +
" \"map\": \"1_4\"\n" +
" },\n" +
" \"1_3\": {\n" +
" \"alarm\": 0,\n" +
" \"turbidity\": 69,\n" +
" \"wt\": 290\n" +
" }\n" +
"}", JSONObject.class);
thingsModelBase.addValue(jsData.get("turbidity"));
if (!thingsModelBase.checkValue()) {
System.out.println("校验通过");
ThingsModelItemBase thingsModelItemBase = (ThingsModelItemBase) thingsModelBase;
if(1==thingsModelItemBase.getIs_save_log() )
{
System.out.println("要记录日志");
}
}
}
}
... ...
... ... @@ -56,8 +56,9 @@ public class BusinessDataUpdateService {
*/
public void updataDta(Type type, Topic topic, ServerDto serverDto, String operationType, boolean isLog)
{
logger.info("{} 开始更新数据",topic.getClientid());
IotDevice olddevice = cacheService.getIotDevice(topic.getClientid());
logger.info("{} 老数据获取成",topic.getClientid());
JSONObject data = new JSONObject();
switch (type)
{
... ... @@ -69,9 +70,12 @@ public class BusinessDataUpdateService {
break;
}
logger.info("{} 开始解析终端数据",topic.getClientid());
for(String key:data.keySet())
{
Object o = data.get(key);
logger.info("开始解析{}终端的数据,数据类型{}",key,o.getClass());
if(o instanceof JSONObject)
{
JSONObject jsData = data.getJSONObject(key);
... ... @@ -93,6 +97,7 @@ public class BusinessDataUpdateService {
iotDevice.setName(olddevice.getName());
serverDto.setIotDevice(iotDevice);
}else{ //终端
logger.info("{} 解析终端 {} 的数据",key,jsData.toJSONString());
IotTerminal iotTerminal = translateTerminal(type,key,olddevice,jsData,serverDto,operationType,isLog);
iotTerminal.setData_update_time(DateUtils.getNowTimeMilly());
if(null== iotTerminal.getOnline() || 1 == iotTerminal.getOnline() || 4==iotTerminal.getOnline())
... ... @@ -175,7 +180,7 @@ public class BusinessDataUpdateService {
if(null == saveDataDto)
{
logger.info("无法解析到入库数据");
logger.info("{} 无法解析到入库数据",id);
return terminal;
}
//记录操作日志
... ...
... ... @@ -46,7 +46,7 @@ public class CacheServiceImpl implements CacheService {
iotDevice.setStatus(3);
}
setIotDeviceToRedis(iotDevice);
log.info("缓存更新 {} ",topic);
log.info("缓存更新 {} ",iotDevice);
List<IotTerminal> list = serverDto.getIotTerminalList();
if(null != list && list.size() != 0 )
... ... @@ -56,7 +56,7 @@ public class CacheServiceImpl implements CacheService {
setIotTerminalToRedis(iotTerminal);
}
}
log.info("缓存更新 {} ",topic);
log.info("缓存更新 {} ",list);
return true;
}
... ...
... ... @@ -101,6 +101,7 @@ public class DataModeAnalysisService {
}
ThingsModelItemBase thingsModelItemBase = (ThingsModelItemBase) thingsModelBase;
//记录数据日志
log.info("设备{}的数据{}记录日志,【条件{},{}】",id,key,thingsModelItemBase.getIs_save_log(),null != serverDto.getDeviceSensorDataList());
if(1==thingsModelItemBase.getIs_save_log() && null != serverDto.getDeviceSensorDataList())
{
DeviceSensorData sensorData = new DeviceSensorData();
... ...
... ... @@ -43,6 +43,7 @@ public class DataPersistenceServiceImpl extends DataPersistenceService {
List<DeviceSensorData> dsdList = serverDto.getDeviceSensorDataList();
if(null != dsdList && dsdList.size() != 0)
{
log.info("{}曲线数据入库{}条",topic.getClientid(),dsdList.size());
dviceLogService.saveDeviceSensorDataLog(dsdList);
}
... ... @@ -50,6 +51,7 @@ public class DataPersistenceServiceImpl extends DataPersistenceService {
List<LogDeviceOperation> doList = serverDto.getLogDeviceOperationList();
if(null != doList && doList.size() != 0)
{
log.info("{}日志入库{}条",topic.getClientid(),doList.size());
dviceLogService.saveOperationLog(doList);
}
... ...
package com.zhonglai.luhui.mqtt.controller;
import com.zhonglai.luhui.device.analysis.dto.MessageCodeType;
import com.zhonglai.luhui.device.domain.IotDevice;
import com.zhonglai.luhui.device.domain.IotTerminal;
import com.zhonglai.luhui.device.domain.IotThingsModel;
... ... @@ -98,4 +99,13 @@ public class DeviceController {
public Message updateIotTerminal(@RequestBody IotTerminal iotTerminal) {
return deviceService.updateIotTerminal(iotTerminal);
}
@ApiOperation("获取模型配置")
@RequestMapping(value = "getIotThingsModel",method = RequestMethod.GET)
public Message getIotThingsModel(String userName,String key) {
IotThingsModel thingsModel = terminalDataThingsModeService.getIotThingsModel(userName,key);
return new Message(MessageCode.DEFAULT_SUCCESS_CODE,thingsModel);
}
}
... ...