|
...
|
...
|
@@ -3,6 +3,7 @@ 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.config.SysParameter;
|
|
|
|
import com.zhonglai.luhui.mqtt.comm.dao.BaseDao;
|
|
|
|
import com.zhonglai.luhui.mqtt.comm.dto.DeviceSensorData;
|
|
|
|
import com.zhonglai.luhui.mqtt.comm.dto.LogDeviceOperation;
|
|
...
|
...
|
@@ -11,11 +12,13 @@ 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 com.zhonglai.luhui.mqtt.comm.util.StringUtils;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
import javax.annotation.PostConstruct;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Map;
|
|
...
|
...
|
@@ -28,8 +31,6 @@ 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;
|
|
...
|
...
|
@@ -37,43 +38,39 @@ public class DataModeAnalysisService { |
|
|
|
/**
|
|
|
|
* 初始化物模型数据
|
|
|
|
*/
|
|
|
|
public void initDataThingsMode()
|
|
|
|
public void initDataThingsMode(String roleIds,String usernames)
|
|
|
|
{
|
|
|
|
List<IotThingsModel> list = baseDao.findBysql("select * from `mqtt_broker`.`iot_things_model` where del_flag=0", IotThingsModel.class);
|
|
|
|
String sql = "SELECT a.*,b.username user_name FROM `mqtt_broker`.`iot_things_model` a LEFT JOIN `mqtt_broker`.`iot_user` b ON a.`user_id`=b.`id` WHERE a.del_flag=0 AND b.`role_id` IN("+roleIds+")";
|
|
|
|
if(StringUtils.isNotEmpty(usernames))
|
|
|
|
{
|
|
|
|
sql += " AND b.`username` IN("+usernames+")";
|
|
|
|
}
|
|
|
|
List<IotThingsModel> list = baseDao.findBysql(sql, 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);
|
|
|
|
SysParameter.setTerminalDataThingsMode(thingsModel.getUser_name(),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)
|
|
|
|
public JSONObject analysisThingsModelValue(String id,String userName ,JSONObject jsData,String controlModel,boolean isOperLog, List<LogDeviceOperation> operateHisList, List<DeviceSensorData> list)
|
|
|
|
{
|
|
|
|
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)
|
|
|
|
IotThingsModel thingsModel = SysParameter.getTerminalDataThingsMode(userName,key);
|
|
|
|
if(null == thingsModel) //没有配置的 都按字符串处理
|
|
|
|
{
|
|
|
|
thingsModel = (IotThingsModel)object;
|
|
|
|
}else{ //没有配置的 都按字符串处理
|
|
|
|
thingsModel = new IotThingsModel();
|
|
|
|
thingsModel.setData_type(ThingsModelDataTypeEnum.STRING.name());
|
|
|
|
thingsModel.setIdentifier(key);
|
|
...
|
...
|
@@ -85,9 +82,15 @@ public class DataModeAnalysisService { |
|
|
|
jsonObject.put("maxLength",255);
|
|
|
|
thingsModel.setSpecs(jsonObject.toString());
|
|
|
|
}
|
|
|
|
Class<ThingsModelBase> aClass = Enum.valueOf(ThingsModelDataTypeEnum.class,thingsModel.getData_type()).getaClass();
|
|
|
|
String data_type = thingsModel.getData_type().toUpperCase();
|
|
|
|
if(!jsData.get(key).getClass().getSimpleName().toUpperCase().equals(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);
|
|
|
|
|
|
|
|
thingsModelBase.addValue(jsData.get(key));
|
|
|
|
|
|
|
|
ThingsModelItemBase thingsModelItemBase = (ThingsModelItemBase) thingsModelBase;
|
|
...
|
...
|
@@ -96,7 +99,7 @@ public class DataModeAnalysisService { |
|
|
|
{
|
|
|
|
DeviceSensorData sensorData = new DeviceSensorData();
|
|
|
|
sensorData.setDataType(key);
|
|
|
|
sensorData.setDataValue(jsData.getString(key));
|
|
|
|
sensorData.setDataValue(thingsModelBase.getSaveView());
|
|
|
|
sensorData.setCreatTime(DateUtils.getNowTimeMilly());
|
|
|
|
sensorData.setDeviceModel(userName);
|
|
|
|
sensorData.setDeviceInfoId(id);
|
|
...
|
...
|
@@ -104,14 +107,14 @@ public class DataModeAnalysisService { |
|
|
|
}
|
|
|
|
|
|
|
|
//记录操作日志
|
|
|
|
oplist.add(dviceLogService.newLogDeviceOperation(id,jsData.getString(key),null,controlModel+thingsModelItemBase.getName()+"为"+thingsModelBase.getView(),jsData.toString()));
|
|
|
|
if(isOperLog)
|
|
|
|
{
|
|
|
|
operateHisList.add(dviceLogService.newLogDeviceOperation(id,thingsModelBase.getSaveView(),null,controlModel+thingsModelItemBase.getName()+"为"+thingsModelBase.getView(),jsData.toString()));
|
|
|
|
}
|
|
|
|
|
|
|
|
rObjec.put(key,JSONObject.toJSONString(thingsModelBase));
|
|
|
|
}
|
|
|
|
|
|
|
|
//日志入库
|
|
|
|
dviceLogService.saveDeviceSensorDataLog(list);
|
|
|
|
dviceLogService.saveOperationLog(oplist);
|
|
|
|
return rObjec;
|
|
|
|
}
|
|
|
|
return null;
|
...
|
...
|
|