|
|
|
package com.zhonglai.luhui.mqtt.comm.service;
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
import com.zhonglai.luhui.mqtt.comm.config.RedisConfig;
|
|
|
|
import com.zhonglai.luhui.mqtt.comm.dao.BaseDao;
|
|
|
|
import com.zhonglai.luhui.mqtt.comm.dto.DeviceSensorData;
|
|
|
|
import com.zhonglai.luhui.mqtt.comm.dto.LogDeviceOperation;
|
|
|
|
import com.zhonglai.luhui.mqtt.comm.dto.iot.IotThingsModel;
|
|
|
|
import com.zhonglai.luhui.mqtt.comm.dto.thingsmodels.ThingsModelBase;
|
|
|
|
import com.zhonglai.luhui.mqtt.comm.dto.thingsmodels.ThingsModelDataTypeEnum;
|
|
|
|
import com.zhonglai.luhui.mqtt.comm.dto.thingsmodels.ThingsModelItemBase;
|
|
|
|
import com.zhonglai.luhui.mqtt.comm.util.DateUtils;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 数据模型解析服务
|
|
|
|
*/
|
|
|
|
@Service
|
|
|
|
public class DataModeAnalysisService {
|
|
|
|
private static final Logger log = LoggerFactory.getLogger(DataModeAnalysisService.class);
|
|
|
|
|
|
|
|
private BaseDao baseDao = new BaseDao();
|
|
|
|
@Autowired
|
|
|
|
private RedisService redisService ;
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
private DeviceLogService dviceLogService;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 初始化物模型数据
|
|
|
|
*/
|
|
|
|
public void initDataThingsMode()
|
|
|
|
{
|
|
|
|
List<IotThingsModel> list = baseDao.findBysql("select * from `mqtt_broker`.`iot_things_model` where del_flag=0", IotThingsModel.class);
|
|
|
|
|
|
|
|
if(null != list && list.size() != 0)
|
|
|
|
{
|
|
|
|
for(IotThingsModel thingsModel:list)
|
|
|
|
{
|
|
|
|
redisService.hset(RedisConfig.FIELD+RedisConfig.THINGS_MODEL+thingsModel.getUser_name(),thingsModel.getIdentifier(),thingsModel);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public JSONObject analysisThingsModelValue(String id, String userName , JSONObject jsData)
|
|
|
|
{
|
|
|
|
return analysisThingsModelValue(id,userName,jsData,false,null);
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* 解析物模型数据
|
|
|
|
*/
|
|
|
|
public JSONObject analysisThingsModelValue(String id,String userName ,JSONObject jsData,boolean isSaveLog,String controlModel)
|
|
|
|
{
|
|
|
|
if(null != jsData && jsData.size() != 0 )
|
|
|
|
{
|
|
|
|
Map<Object, Object> thingsModelMap = redisService.hmget(RedisConfig.FIELD+RedisConfig.THINGS_MODEL+userName);
|
|
|
|
JSONObject rObjec = new JSONObject();
|
|
|
|
|
|
|
|
List<DeviceSensorData> list = new ArrayList<>();
|
|
|
|
List<LogDeviceOperation> oplist = new ArrayList<>();
|
|
|
|
|
|
|
|
for(String key:jsData.keySet())
|
|
|
|
{
|
|
|
|
Object object = thingsModelMap.get(key);
|
|
|
|
IotThingsModel thingsModel = null;
|
|
|
|
if(object instanceof IotThingsModel)
|
|
|
|
{
|
|
|
|
thingsModel = (IotThingsModel)object;
|
|
|
|
}else{ //没有配置的 都按字符串处理
|
|
|
|
thingsModel = new IotThingsModel();
|
|
|
|
thingsModel.setData_type(ThingsModelDataTypeEnum.STRING.name());
|
|
|
|
thingsModel.setIdentifier(key);
|
|
|
|
thingsModel.setModel_name(key);
|
|
|
|
thingsModel.setIs_top(0);
|
|
|
|
thingsModel.setIs_monitor(0);
|
|
|
|
thingsModel.setIs_save_log(0);
|
|
|
|
JSONObject jsonObject = new JSONObject();
|
|
|
|
jsonObject.put("maxLength",255);
|
|
|
|
thingsModel.setSpecs(jsonObject.toString());
|
|
|
|
}
|
|
|
|
Class<ThingsModelBase> aClass = Enum.valueOf(ThingsModelDataTypeEnum.class,thingsModel.getData_type()).getaClass();
|
|
|
|
ThingsModelBase thingsModelBase = JSON.parseObject(thingsModel.getSpecs(),aClass);
|
|
|
|
thingsModelBase.conversionThingsModel(thingsModel);
|
|
|
|
thingsModelBase.addValue(jsData.get(key));
|
|
|
|
|
|
|
|
ThingsModelItemBase thingsModelItemBase = (ThingsModelItemBase) thingsModelBase;
|
|
|
|
//记录数据日志
|
|
|
|
if(1==thingsModelItemBase.getIs_save_log())
|
|
|
|
{
|
|
|
|
DeviceSensorData sensorData = new DeviceSensorData();
|
|
|
|
sensorData.setDataType(key);
|
|
|
|
sensorData.setDataValue(jsData.getString(key));
|
|
|
|
sensorData.setCreatTime(DateUtils.getNowTimeMilly());
|
|
|
|
sensorData.setDeviceModel(userName);
|
|
|
|
sensorData.setDeviceInfoId(id);
|
|
|
|
list.add(sensorData);
|
|
|
|
}
|
|
|
|
|
|
|
|
//记录操作日志
|
|
|
|
oplist.add(dviceLogService.newLogDeviceOperation(id,jsData.getString(key),null,controlModel+thingsModelItemBase.getName()+"为"+thingsModelBase.getView(),jsData.toString()));
|
|
|
|
|
|
|
|
rObjec.put(key,JSONObject.toJSONString(thingsModelBase));
|
|
|
|
}
|
|
|
|
|
|
|
|
//日志入库
|
|
|
|
dviceLogService.saveDeviceSensorDataLog(list);
|
|
|
|
dviceLogService.saveOperationLog(oplist);
|
|
|
|
return rObjec;
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
} |
...
|
...
|
|