修改网关端口

This commit is contained in:
wulin 2023-10-26 15:59:46 +08:00
parent df2901012f
commit cb902b5ffb
4 changed files with 145 additions and 5 deletions

View File

@ -1,4 +1,4 @@
package com.qiuguo.iot.user.api.resp.device; package com.qiuguo.iot.data.resp.device;
import lombok.Data; import lombok.Data;

View File

@ -1,5 +1,5 @@
server: server:
port: 8081 port: 8080
spring: spring:
application: application:
name: qiuguo-iot-gateway name: qiuguo-iot-gateway

View File

@ -1,7 +1,6 @@
package com.qiuguo.iot.user.api.controller.device; package com.qiuguo.iot.user.api.controller.device;
import cn.hutool.crypto.digest.MD5; import cn.hutool.crypto.digest.MD5;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.qiuguo.iot.base.constans.RedisConstans; import com.qiuguo.iot.base.constans.RedisConstans;
@ -22,13 +21,12 @@ import com.qiuguo.iot.data.service.device.DeviceInfoService;
import com.qiuguo.iot.data.service.device.DeviceUserBindService; import com.qiuguo.iot.data.service.device.DeviceUserBindService;
import com.qiuguo.iot.data.service.device.DeviceUserTalkRecordService; import com.qiuguo.iot.data.service.device.DeviceUserTalkRecordService;
import com.qiuguo.iot.third.service.TuyaDeviceConnector; import com.qiuguo.iot.third.service.TuyaDeviceConnector;
import com.qiuguo.iot.user.api.resp.device.DeviceInitResp; import com.qiuguo.iot.data.resp.device.DeviceInitResp;
import com.qiuguo.iot.user.api.rest.device.SetDeviceBindInfoRest; import com.qiuguo.iot.user.api.rest.device.SetDeviceBindInfoRest;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.ReactiveStringRedisTemplate; import org.springframework.data.redis.core.ReactiveStringRedisTemplate;
import org.springframework.data.redis.core.ReactiveValueOperations; import org.springframework.data.redis.core.ReactiveValueOperations;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;

View File

@ -0,0 +1,142 @@
package com.qiuguo.iot.box.websocket.api.controller;
import cn.hutool.crypto.digest.MD5;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.qiuguo.iot.base.constans.RedisConstans;
import com.qiuguo.iot.base.enums.DeviceTypeEnum;
import com.qiuguo.iot.base.enums.OrderByEnum;
import com.qiuguo.iot.base.enums.YesNo;
import com.qiuguo.iot.base.utils.StringUtils;
import com.qiuguo.iot.data.entity.device.DeviceInfoEntity;
import com.qiuguo.iot.data.entity.device.DeviceUserBindEntity;
import com.qiuguo.iot.data.entity.device.DeviceUserTalkRecordEntity;
import com.qiuguo.iot.data.request.device.DeviceInfoRequest;
import com.qiuguo.iot.data.request.device.DeviceUserBindRequest;
import com.qiuguo.iot.data.request.device.DeviceUserTalkRecordRequest;
import com.qiuguo.iot.data.resp.device.DeviceInitResp;
import com.qiuguo.iot.data.resp.device.DeviceTalkRecordResp;
import com.qiuguo.iot.data.resp.device.DeviceUserBindResp;
import com.qiuguo.iot.data.service.device.DeviceBatchService;
import com.qiuguo.iot.data.service.device.DeviceInfoService;
import com.qiuguo.iot.data.service.device.DeviceUserBindService;
import com.qiuguo.iot.data.service.device.DeviceUserTalkRecordService;
import com.qiuguo.iot.third.service.TuyaDeviceConnector;
import lombok.extern.slf4j.Slf4j;
import org.hswebframework.web.api.crud.entity.PagerResult;
import org.hswebframework.web.exception.BusinessException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.ReactiveStringRedisTemplate;
import org.springframework.data.redis.core.ReactiveValueOperations;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Mono;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
@RestController
@Slf4j
@RequestMapping("/device")
public class DeviceController {
@Value("${device.key}")
private String key;
@Value("${device.checkTimeout}")
private Boolean checkTimeout;
@Autowired
private DeviceInfoService deviceInfoService;
@Resource
private DeviceBatchService deviceBatchService;
@Resource
private TuyaDeviceConnector tuyaDeviceConnector;
@Resource
private ReactiveStringRedisTemplate reactiveStringRedisTemplate;
@Resource
private DeviceUserTalkRecordService deviceUserTalkRecordService;
@Resource
private DeviceUserBindService deviceUserBindService;
@Value("${device.timeout}")
private Long timeOut;//2分钟
@GetMapping("/init")
public Mono<DeviceInitResp> deviceInit(@RequestParam String wifiMac, @RequestParam String btMac,
@RequestParam Integer type, @RequestParam Long time,
@RequestParam String signature){
//deviceInfoService.
Long now = System.currentTimeMillis();
if(checkTimeout && now - time > timeOut){
//超时
log.info("请求过期");
BusinessException ex = new BusinessException("请求已失效");
return Mono.error(ex);
}
//设备类型是否匹配暂时不做限制
DeviceTypeEnum entryTypeEnum = DeviceTypeEnum.getEnumWithCode(type);
if(entryTypeEnum == null){
log.info("不支持的设备类型");
BusinessException ex = new BusinessException("不支持的设备类型");
return Mono.error(ex);
}
//验签
String wifiMd5 = MD5.create().digestHex(wifiMac).toUpperCase();
String btMd5 = MD5.create().digestHex(btMac).toUpperCase();
String typeMd5 = MD5.create().digestHex(type.toString()).toUpperCase();
String md5 = MD5.create().digestHex(wifiMd5 + btMd5 + typeMd5 + time + key).toUpperCase();
if (!md5.equals(signature)) {
//
//验签失败
log.info("验签失败");
BusinessException ex = new BusinessException("验签失败");
return Mono.error(ex);
}
DeviceInfoRequest request = new DeviceInfoRequest();
request.setWifiMac(wifiMac);
request.setBtMac(btMac);
Mono<DeviceInfoEntity> mono = deviceInfoService.selectDeviceInfoByRequest(request);
return mono.defaultIfEmpty(new DeviceInfoEntity()).flatMap(entity -> {
Mono mono1 = null;
if(entity.getId() == null){
entity.setWifiMac(wifiMac);
entity.setBtMac(btMac);
entity.setBatchId(1l);
entity.setName(entryTypeEnum.getName());
entity.setDeviceType(type);
entity.setKey( StringUtils.getRandomStr(10));//生成key
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyMMddHHmmss");
entity.setSn("QG" + entryTypeEnum.getSn() +df.format(LocalDateTime.now()) + StringUtils.getRandomStr(3));
mono1 = deviceInfoService.insertDeviceInfo(entity);
}else{
entity.setKey( StringUtils.getRandomStr(10));//重新生成Key
mono1 = deviceInfoService.updateDeviceInfoById(entity);
}
return mono1.map(m ->{
return entity;
});
}).map(o -> {
DeviceInfoEntity deviceInfoEntity = (DeviceInfoEntity)o;
ReactiveValueOperations<String, String> operations = reactiveStringRedisTemplate.opsForValue();
operations.set(RedisConstans.DEVICE_INFO + deviceInfoEntity.getSn()
, JSONObject.toJSONString(deviceInfoEntity)
, RedisConstans.ONE_HOUR).subscribe();
DeviceInitResp resp = new DeviceInitResp();
resp.setKey(deviceInfoEntity.getKey());
resp.setSn(deviceInfoEntity.getSn());
return resp;
});
}
}