作者 钟来

添加wifi随手测设备注册功能

... ... @@ -69,6 +69,11 @@ public class DefaultDbService {
return (IotProduct) baseDao.get(IotProduct.class,"id='"+id+"'","`mqtt_broker`.`iot_product`");
}
public IotProduct getIotProductByProductType(String product_type)
{
return (IotProduct) baseDao.get(IotProduct.class,"mqtt_username='"+product_type+"'","`mqtt_broker`.`iot_product`");
}
public IotTerminal getDeviceInfoById(String id)
{
return (IotTerminal) baseDao.get(IotTerminal.class,"id='"+id+"'","`mqtt_broker`.`iot_terminal`");
... ... @@ -95,7 +100,10 @@ public class DefaultDbService {
{
baseDao.insert(iotTerminal);
}
public void insertIotDevice(IotDevice iotTerminal)
{
baseDao.insert(iotTerminal);
}
public ParserDeviceInfoDto getParserDeviceInfoDtoFromDb(String id,String name, ParserDeviceHostDto oldparserDeviceHostDto) {
IotTerminal iotTerminal = (IotTerminal) baseDao.get(IotTerminal.class,id);
... ...
package com.zhonglai.luhui.http.service.proxy.controller;
import cn.hutool.crypto.digest.MD5;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.GsonConstructor;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.zhonglai.luhui.device.analysis.comm.util.ByteUtil;
import com.zhonglai.luhui.device.domain.IotDevice;
import com.zhonglai.luhui.device.domain.IotProduct;
import com.zhonglai.luhui.device.protocol.factory.ProtocolParserAndPurificationFactory;
import com.zhonglai.luhui.device.protocol.factory.comm.DataLogType;
import com.zhonglai.luhui.device.protocol.factory.comm.DeviceDataLog;
... ... @@ -19,6 +24,9 @@ import com.zhonglai.luhui.device.protocol.factory.dto.ParserDeviceInfoDto;
import com.zhonglai.luhui.device.protocol.factory.dto.ProtocolPurificationModel;
import com.zhonglai.luhui.device.protocol.factory.service.DeviceCashUpService;
import com.zhonglai.luhui.device.protocol.factory.service.PersistenceDBService;
import com.zhonglai.luhui.device.protocol.factory.service.impl.DefaultDbService;
import com.zhonglai.luhui.device.service.IIotDeviceService;
import com.zhonglai.luhui.device.service.IIotProductService;
import com.zhonglai.luhui.http.service.proxy.service.HttpCallback;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
... ... @@ -51,6 +59,12 @@ public class HttpDataProxyController {
@Autowired
private HttpCallback httpCallback;
@Autowired
protected PersistenceDBService persistenceDBService;
@Autowired
private DefaultDbService defaultDbService;
@ApiOperation(value = "post提交数据",notes = "数据由body传值")
@ApiImplicitParams({
@ApiImplicitParam(value = "时间(时间戳单位毫秒)",name = "time"),
... ... @@ -65,7 +79,11 @@ public class HttpDataProxyController {
String body = new String(bodyBytes, request.getCharacterEncoding());
String topic = "/"+role+"/"+username+"/"+imei+"/Json/"+topicType+"/"+time;
DeviceDataLog.info(imei, DataLogType.发来数据,topic,body);
ParserDeviceHostDto oldparserDeviceHostDto = persistenceDBService.getOldParserDeviceHostDto(imei);
if (null == oldparserDeviceHostDto)
{
return AjaxResult.error(HttpStatus.UNAUTHORIZED,"设备不存在");
}
ProtocolPurificationModel protocolPurificationModel = httpCallback.messageArrived(imei,topic,body.getBytes(StandardCharsets.UTF_8));
Map<String,Object> map = HttpNoticeCach.consumer(imei);
... ... @@ -126,4 +144,58 @@ public class HttpDataProxyController {
log.info("返回的数据【{}】",map);
return AjaxResult.success(map);
}
@ApiOperation(value = "设备注册")
@ApiImplicitParams({
@ApiImplicitParam(value = "设备imei",name = "imei"),
@ApiImplicitParam(value = "设备纬度",name = "latitude"),
@ApiImplicitParam(value = "设备经度",name = "longitude"),
@ApiImplicitParam(value = "产品类型",name = "product_name"),
@ApiImplicitParam(value = "令牌",name = "token"),
})
@RequestMapping(value = "register/{product_type}/{imei}/{token}")
public AjaxResult register(@PathVariable String imei, @PathVariable String product_type, @PathVariable String token,Double latitude,Double longitude) throws IOException {
log.info("设备注册imei【{}】,product_type【{}】,token【{}】,latitude【{}】,longitude【{}】",imei,product_type,token,latitude,longitude);
String tokenKey = "yu2le.com";
String authString = product_type + imei + tokenKey;
//对authString进行MD5加密
String authToken = MD5.create().digestHex(authString);
if (!authToken.equals(token)) {
log.warn("设备注册失败,imei【{}】,product_type【{}】,token【{}】,latitude【{}】,longitude【{}】",imei,product_type,token,latitude,longitude);
return AjaxResult.error("注册失败,令牌错误");
}
IotProduct iotProduct = defaultDbService.getIotProductByProductType(product_type);
if(null == iotProduct)
{
return AjaxResult.error("产品类型不存在");
}
IotDevice old = defaultDbService.getDeviceById(imei);
if(null != old)
{
return AjaxResult.success("设备已存在,不用重复注册");
}
IotDevice iotDevice = new IotDevice();
iotDevice.setDevice_life(1800l);
iotDevice.setClient_id(imei);
iotDevice.setName(imei.substring(imei.length()-5,imei.length()));
iotDevice.setFirmware_version("V0001");
iotDevice.setMqtt_username(product_type);
iotDevice.setProduct_id(iotProduct.getId());
iotDevice.setCompletion_auth(0);
iotDevice.setIs_shadow(0);
iotDevice.setLocation_way(1);
iotDevice.setPayload_type("Json");
iotDevice.setLatitude(latitude);
iotDevice.setLongitude(longitude);
iotDevice.setSys_user_id(0L);
iotDevice.setCreate_by("设备自动注册");
iotDevice.setUpdate_time(DateUtils.getNowTimeMilly());
iotDevice.setCreate_time(DateUtils.getNowTimeMilly());
defaultDbService.insertIotDevice(iotDevice);
return AjaxResult.success("注册成功");
}
}
... ...