|
|
|
package com.zhonglai.luhui.device.protocol.factory.service;
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
import com.google.gson.JsonElement;
|
|
|
|
import com.google.gson.JsonObject;
|
|
|
|
import com.ruoyi.common.utils.GsonConstructor;
|
|
|
|
import com.ruoyi.common.utils.StringUtils;
|
|
|
|
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.IotProductPayloadModelNumber;
|
|
|
|
import com.zhonglai.luhui.device.domain.IotProductTranslate;
|
|
|
|
import com.zhonglai.luhui.device.domain.IotThingsModel;
|
|
|
|
import com.zhonglai.luhui.device.protocol.factory.config.ProductPayloadModelNumberCach;
|
|
|
|
import org.apache.commons.lang3.EnumUtils;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
...
|
...
|
@@ -130,4 +136,149 @@ public class IotThingsModelService { |
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 逆向翻译模式数据
|
|
|
|
* @param product_id
|
|
|
|
* @param jsonObject
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public JSONObject reverseModeData(Integer product_id, JSONObject jsonObject )
|
|
|
|
{
|
|
|
|
if(null != jsonObject && jsonObject.size() !=0 )
|
|
|
|
{
|
|
|
|
JSONObject vjsonObject = jsonObject.clone();
|
|
|
|
return reverseTranslateModeData(product_id,vjsonObject);
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 逆向翻译模式数据
|
|
|
|
* @param product_id
|
|
|
|
* @param jsonObject
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public JsonObject reverseModeData(Integer product_id, JsonObject jsonObject )
|
|
|
|
{
|
|
|
|
if(null != jsonObject && jsonObject.size() !=0 )
|
|
|
|
{
|
|
|
|
JSONObject vjsonObject = GsonConstructor.get().fromJson(jsonObject.toString(),JSONObject.class);
|
|
|
|
vjsonObject = reverseTranslateModeData(product_id,vjsonObject);
|
|
|
|
if(null != vjsonObject)
|
|
|
|
{
|
|
|
|
return GsonConstructor.get().fromJson(vjsonObject.toString(),JsonObject.class);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 解析模式数据
|
|
|
|
* @param product_id
|
|
|
|
* @param jsonObject
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public JSONObject modeData(Integer product_id, JSONObject jsonObject )
|
|
|
|
{
|
|
|
|
if(null != jsonObject && jsonObject.size() !=0 )
|
|
|
|
{
|
|
|
|
JSONObject vjsonObject = jsonObject.clone();
|
|
|
|
return translateModeData(product_id,vjsonObject);
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 解析模式数据
|
|
|
|
* @param product_id
|
|
|
|
* @param jsonObject
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public JsonObject modeData(Integer product_id, JsonObject jsonObject )
|
|
|
|
{
|
|
|
|
if(null != jsonObject && jsonObject.size() !=0 )
|
|
|
|
{
|
|
|
|
JSONObject vjsonObject = GsonConstructor.get().fromJson(jsonObject.toString(),JSONObject.class);
|
|
|
|
vjsonObject = translateModeData(product_id,vjsonObject);
|
|
|
|
if(null != vjsonObject)
|
|
|
|
{
|
|
|
|
return GsonConstructor.get().fromJson(vjsonObject.toString(),JsonObject.class);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* 解析模式数据
|
|
|
|
* @param product_id
|
|
|
|
* @param vjsonObject
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
private JSONObject translateModeData(Integer product_id, JSONObject vjsonObject )
|
|
|
|
{
|
|
|
|
for(String vkey:vjsonObject.keySet())
|
|
|
|
{
|
|
|
|
JSONObject jsData = vjsonObject.getJSONObject(vkey);
|
|
|
|
for(String key:jsData.keySet())
|
|
|
|
{
|
|
|
|
IotThingsModel thingsModel = getThingsModelBase(product_id,key);
|
|
|
|
String data_type = thingsModel.getData_type().toUpperCase();
|
|
|
|
if(!EnumUtils.isValidEnum(ThingsModelDataTypeEnum.class,data_type))
|
|
|
|
{
|
|
|
|
data_type = ThingsModelDataTypeEnum.STRING.name();
|
|
|
|
}
|
|
|
|
ThingsModelBase thingsModelBase = ThingsModelItemBase.newhingsModel(Enum.valueOf(ThingsModelDataTypeEnum.class,data_type),thingsModel, GsonConstructor.get().fromJson(jsData.get(key).toString(), JsonElement.class));
|
|
|
|
jsData.put(key,thingsModelBase);
|
|
|
|
}
|
|
|
|
vjsonObject.put(vkey,jsData);
|
|
|
|
}
|
|
|
|
return vjsonObject;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 反向翻译模式数据
|
|
|
|
* @param product_id
|
|
|
|
* @param vjsonObject
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
private JSONObject reverseTranslateModeData(Integer product_id, JSONObject vjsonObject )
|
|
|
|
{
|
|
|
|
for(String vkey:vjsonObject.keySet())
|
|
|
|
{
|
|
|
|
JSONObject jsData = vjsonObject.getJSONObject(vkey);
|
|
|
|
for(String key:jsData.keySet())
|
|
|
|
{
|
|
|
|
IotThingsModel thingsModel = getThingsModelBase(product_id,key);
|
|
|
|
String data_type = thingsModel.getData_type().toUpperCase();
|
|
|
|
if(!EnumUtils.isValidEnum(ThingsModelDataTypeEnum.class,data_type))
|
|
|
|
{
|
|
|
|
data_type = ThingsModelDataTypeEnum.STRING.name();
|
|
|
|
}
|
|
|
|
ThingsModelItemBase thingsModelBase = ThingsModelItemBase.newhingsModelReverse(Enum.valueOf(ThingsModelDataTypeEnum.class,data_type),thingsModel, GsonConstructor.get().fromJson(jsData.get(key).toString(), JsonElement.class));
|
|
|
|
jsData.put(key,thingsModelBase.getValue());
|
|
|
|
}
|
|
|
|
vjsonObject.put(vkey,jsData);
|
|
|
|
}
|
|
|
|
return vjsonObject;
|
|
|
|
}
|
|
|
|
|
|
|
|
private IotThingsModel getThingsModelBase(Integer product_id,String identifier)
|
|
|
|
{
|
|
|
|
IotThingsModel thingsModel = getIotThingsModel(product_id,identifier);
|
|
|
|
if(null == thingsModel) //没有配置的 都按字符串处理
|
|
|
|
{
|
|
|
|
thingsModel = new IotThingsModel();
|
|
|
|
thingsModel.setData_type(ThingsModelDataTypeEnum.STRING.name());
|
|
|
|
thingsModel.setIdentifier(identifier);
|
|
|
|
thingsModel.setModel_name(identifier);
|
|
|
|
thingsModel.setIs_top(0);
|
|
|
|
thingsModel.setIs_monitor(0);
|
|
|
|
thingsModel.setIs_save_log(0);
|
|
|
|
thingsModel.setIs_config(0);
|
|
|
|
JsonObject specs = new JsonObject();
|
|
|
|
specs.addProperty("maxLength",255);
|
|
|
|
thingsModel.setSpecs(specs.toString());
|
|
|
|
}
|
|
|
|
return thingsModel;
|
|
|
|
}
|
|
|
|
} |
...
|
...
|
|