作者 钟来

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

@@ -69,6 +69,11 @@ public class DefaultDbService { @@ -69,6 +69,11 @@ public class DefaultDbService {
69 return (IotProduct) baseDao.get(IotProduct.class,"id='"+id+"'","`mqtt_broker`.`iot_product`"); 69 return (IotProduct) baseDao.get(IotProduct.class,"id='"+id+"'","`mqtt_broker`.`iot_product`");
70 } 70 }
71 71
  72 + public IotProduct getIotProductByProductType(String product_type)
  73 + {
  74 + return (IotProduct) baseDao.get(IotProduct.class,"mqtt_username='"+product_type+"'","`mqtt_broker`.`iot_product`");
  75 + }
  76 +
72 public IotTerminal getDeviceInfoById(String id) 77 public IotTerminal getDeviceInfoById(String id)
73 { 78 {
74 return (IotTerminal) baseDao.get(IotTerminal.class,"id='"+id+"'","`mqtt_broker`.`iot_terminal`"); 79 return (IotTerminal) baseDao.get(IotTerminal.class,"id='"+id+"'","`mqtt_broker`.`iot_terminal`");
@@ -95,7 +100,10 @@ public class DefaultDbService { @@ -95,7 +100,10 @@ public class DefaultDbService {
95 { 100 {
96 baseDao.insert(iotTerminal); 101 baseDao.insert(iotTerminal);
97 } 102 }
98 - 103 + public void insertIotDevice(IotDevice iotTerminal)
  104 + {
  105 + baseDao.insert(iotTerminal);
  106 + }
99 107
100 public ParserDeviceInfoDto getParserDeviceInfoDtoFromDb(String id,String name, ParserDeviceHostDto oldparserDeviceHostDto) { 108 public ParserDeviceInfoDto getParserDeviceInfoDtoFromDb(String id,String name, ParserDeviceHostDto oldparserDeviceHostDto) {
101 IotTerminal iotTerminal = (IotTerminal) baseDao.get(IotTerminal.class,id); 109 IotTerminal iotTerminal = (IotTerminal) baseDao.get(IotTerminal.class,id);
1 package com.zhonglai.luhui.http.service.proxy.controller; 1 package com.zhonglai.luhui.http.service.proxy.controller;
2 2
  3 +import cn.hutool.crypto.digest.MD5;
3 import com.alibaba.fastjson.JSON; 4 import com.alibaba.fastjson.JSON;
4 import com.alibaba.fastjson.JSONObject; 5 import com.alibaba.fastjson.JSONObject;
5 import com.google.gson.JsonElement; 6 import com.google.gson.JsonElement;
6 import com.google.gson.JsonObject; 7 import com.google.gson.JsonObject;
  8 +import com.ruoyi.common.constant.HttpStatus;
7 import com.ruoyi.common.core.domain.AjaxResult; 9 import com.ruoyi.common.core.domain.AjaxResult;
  10 +import com.ruoyi.common.exception.ServiceException;
  11 +import com.ruoyi.common.utils.DateUtils;
8 import com.ruoyi.common.utils.GsonConstructor; 12 import com.ruoyi.common.utils.GsonConstructor;
9 import com.ruoyi.common.utils.spring.SpringUtils; 13 import com.ruoyi.common.utils.spring.SpringUtils;
10 import com.zhonglai.luhui.device.analysis.comm.util.ByteUtil; 14 import com.zhonglai.luhui.device.analysis.comm.util.ByteUtil;
11 import com.zhonglai.luhui.device.domain.IotDevice; 15 import com.zhonglai.luhui.device.domain.IotDevice;
  16 +import com.zhonglai.luhui.device.domain.IotProduct;
12 import com.zhonglai.luhui.device.protocol.factory.ProtocolParserAndPurificationFactory; 17 import com.zhonglai.luhui.device.protocol.factory.ProtocolParserAndPurificationFactory;
13 import com.zhonglai.luhui.device.protocol.factory.comm.DataLogType; 18 import com.zhonglai.luhui.device.protocol.factory.comm.DataLogType;
14 import com.zhonglai.luhui.device.protocol.factory.comm.DeviceDataLog; 19 import com.zhonglai.luhui.device.protocol.factory.comm.DeviceDataLog;
@@ -19,6 +24,9 @@ import com.zhonglai.luhui.device.protocol.factory.dto.ParserDeviceInfoDto; @@ -19,6 +24,9 @@ import com.zhonglai.luhui.device.protocol.factory.dto.ParserDeviceInfoDto;
19 import com.zhonglai.luhui.device.protocol.factory.dto.ProtocolPurificationModel; 24 import com.zhonglai.luhui.device.protocol.factory.dto.ProtocolPurificationModel;
20 import com.zhonglai.luhui.device.protocol.factory.service.DeviceCashUpService; 25 import com.zhonglai.luhui.device.protocol.factory.service.DeviceCashUpService;
21 import com.zhonglai.luhui.device.protocol.factory.service.PersistenceDBService; 26 import com.zhonglai.luhui.device.protocol.factory.service.PersistenceDBService;
  27 +import com.zhonglai.luhui.device.protocol.factory.service.impl.DefaultDbService;
  28 +import com.zhonglai.luhui.device.service.IIotDeviceService;
  29 +import com.zhonglai.luhui.device.service.IIotProductService;
22 import com.zhonglai.luhui.http.service.proxy.service.HttpCallback; 30 import com.zhonglai.luhui.http.service.proxy.service.HttpCallback;
23 import io.swagger.annotations.Api; 31 import io.swagger.annotations.Api;
24 import io.swagger.annotations.ApiImplicitParam; 32 import io.swagger.annotations.ApiImplicitParam;
@@ -51,6 +59,12 @@ public class HttpDataProxyController { @@ -51,6 +59,12 @@ public class HttpDataProxyController {
51 @Autowired 59 @Autowired
52 private HttpCallback httpCallback; 60 private HttpCallback httpCallback;
53 61
  62 + @Autowired
  63 + protected PersistenceDBService persistenceDBService;
  64 +
  65 + @Autowired
  66 + private DefaultDbService defaultDbService;
  67 +
54 @ApiOperation(value = "post提交数据",notes = "数据由body传值") 68 @ApiOperation(value = "post提交数据",notes = "数据由body传值")
55 @ApiImplicitParams({ 69 @ApiImplicitParams({
56 @ApiImplicitParam(value = "时间(时间戳单位毫秒)",name = "time"), 70 @ApiImplicitParam(value = "时间(时间戳单位毫秒)",name = "time"),
@@ -65,7 +79,11 @@ public class HttpDataProxyController { @@ -65,7 +79,11 @@ public class HttpDataProxyController {
65 String body = new String(bodyBytes, request.getCharacterEncoding()); 79 String body = new String(bodyBytes, request.getCharacterEncoding());
66 String topic = "/"+role+"/"+username+"/"+imei+"/Json/"+topicType+"/"+time; 80 String topic = "/"+role+"/"+username+"/"+imei+"/Json/"+topicType+"/"+time;
67 DeviceDataLog.info(imei, DataLogType.发来数据,topic,body); 81 DeviceDataLog.info(imei, DataLogType.发来数据,topic,body);
68 - 82 + ParserDeviceHostDto oldparserDeviceHostDto = persistenceDBService.getOldParserDeviceHostDto(imei);
  83 + if (null == oldparserDeviceHostDto)
  84 + {
  85 + return AjaxResult.error(HttpStatus.UNAUTHORIZED,"设备不存在");
  86 + }
69 ProtocolPurificationModel protocolPurificationModel = httpCallback.messageArrived(imei,topic,body.getBytes(StandardCharsets.UTF_8)); 87 ProtocolPurificationModel protocolPurificationModel = httpCallback.messageArrived(imei,topic,body.getBytes(StandardCharsets.UTF_8));
70 88
71 Map<String,Object> map = HttpNoticeCach.consumer(imei); 89 Map<String,Object> map = HttpNoticeCach.consumer(imei);
@@ -126,4 +144,58 @@ public class HttpDataProxyController { @@ -126,4 +144,58 @@ public class HttpDataProxyController {
126 log.info("返回的数据【{}】",map); 144 log.info("返回的数据【{}】",map);
127 return AjaxResult.success(map); 145 return AjaxResult.success(map);
128 } 146 }
  147 +
  148 + @ApiOperation(value = "设备注册")
  149 + @ApiImplicitParams({
  150 + @ApiImplicitParam(value = "设备imei",name = "imei"),
  151 + @ApiImplicitParam(value = "设备纬度",name = "latitude"),
  152 + @ApiImplicitParam(value = "设备经度",name = "longitude"),
  153 + @ApiImplicitParam(value = "产品类型",name = "product_name"),
  154 + @ApiImplicitParam(value = "令牌",name = "token"),
  155 + })
  156 + @RequestMapping(value = "register/{product_type}/{imei}/{token}")
  157 + public AjaxResult register(@PathVariable String imei, @PathVariable String product_type, @PathVariable String token,Double latitude,Double longitude) throws IOException {
  158 + log.info("设备注册imei【{}】,product_type【{}】,token【{}】,latitude【{}】,longitude【{}】",imei,product_type,token,latitude,longitude);
  159 + String tokenKey = "yu2le.com";
  160 + String authString = product_type + imei + tokenKey;
  161 + //对authString进行MD5加密
  162 + String authToken = MD5.create().digestHex(authString);
  163 + if (!authToken.equals(token)) {
  164 + log.warn("设备注册失败,imei【{}】,product_type【{}】,token【{}】,latitude【{}】,longitude【{}】",imei,product_type,token,latitude,longitude);
  165 + return AjaxResult.error("注册失败,令牌错误");
  166 + }
  167 +
  168 + IotProduct iotProduct = defaultDbService.getIotProductByProductType(product_type);
  169 + if(null == iotProduct)
  170 + {
  171 + return AjaxResult.error("产品类型不存在");
  172 + }
  173 +
  174 + IotDevice old = defaultDbService.getDeviceById(imei);
  175 + if(null != old)
  176 + {
  177 + return AjaxResult.success("设备已存在,不用重复注册");
  178 + }
  179 +
  180 + IotDevice iotDevice = new IotDevice();
  181 + iotDevice.setDevice_life(1800l);
  182 + iotDevice.setClient_id(imei);
  183 + iotDevice.setName(imei.substring(imei.length()-5,imei.length()));
  184 + iotDevice.setFirmware_version("V0001");
  185 + iotDevice.setMqtt_username(product_type);
  186 + iotDevice.setProduct_id(iotProduct.getId());
  187 + iotDevice.setCompletion_auth(0);
  188 + iotDevice.setIs_shadow(0);
  189 + iotDevice.setLocation_way(1);
  190 + iotDevice.setPayload_type("Json");
  191 + iotDevice.setLatitude(latitude);
  192 + iotDevice.setLongitude(longitude);
  193 + iotDevice.setSys_user_id(0L);
  194 + iotDevice.setCreate_by("设备自动注册");
  195 + iotDevice.setUpdate_time(DateUtils.getNowTimeMilly());
  196 + iotDevice.setCreate_time(DateUtils.getNowTimeMilly());
  197 + defaultDbService.insertIotDevice(iotDevice);
  198 + return AjaxResult.success("注册成功");
  199 + }
  200 +
129 } 201 }