Prechádzať zdrojové kódy

feat: front device login page and http api

lihao16 6 mesiacov pred
rodič
commit
a78be4b044

+ 3 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/domain/bo/HttpHeartbeatReq.java

@@ -13,6 +13,9 @@ public class HttpHeartbeatReq {
     /** 设备标识 */
     private String identifier;
 
+    /** 设备IP */
+    private String deviceIp;
+
     /** 亮度 */
     private Integer bright;
 

+ 3 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/domain/constants/DeviceConstants.java

@@ -44,5 +44,8 @@ public class DeviceConstants {
     /** 设备http最后一次心跳时间 */
     public static final String REDIS_DEVICE_HEARTBEAT_HTTP_KEY = "global:device:heartbeat:http:";
 
+    /** 前端设备鉴权key */
+    public static final String REDIS_DEVICE_AUTH_KEY = "global:device:auth:key:";
+
 
 }

+ 41 - 1
smsb-modules/smsb-device/src/main/java/com/inspur/device/service/impl/SmsbDeviceServiceImpl.java

@@ -46,6 +46,7 @@ import java.nio.charset.StandardCharsets;
 import java.time.Duration;
 import java.util.Collection;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
 /**
@@ -175,7 +176,8 @@ public class SmsbDeviceServiceImpl implements ISmsbDeviceService {
         validEntityBeforeSave(add);
 
         // identifier
-        String identifier = getHashString(add.getSerialNumber());
+        // String identifier = getHashString(add.getSerialNumber());
+        String identifier = encryptMac(add.getMac().toLowerCase(Locale.ROOT));
         add.setIdentifier(identifier);
 
         boolean flag = baseMapper.insert(add) > 0;
@@ -186,6 +188,42 @@ public class SmsbDeviceServiceImpl implements ISmsbDeviceService {
         return flag;
     }
 
+    private String encryptMac(String mac) {
+        // Step 1: 去除冒号
+        String step1 = mac.replaceAll(":", "");
+
+        // Step 2: 每位转换为双位数十进制
+        StringBuilder step2 = new StringBuilder();
+        for (char c : step1.toCharArray()) {
+            int value = Character.digit(c, 16);
+            step2.append(String.format("%02d", value));
+        }
+
+        // Step 3: 每两位换位
+        String step2Str = step2.toString();
+        StringBuilder step3 = new StringBuilder();
+        for (int i = 0; i < step2Str.length(); i += 2) {
+            if (i + 1 < step2Str.length()) {
+                step3.append(step2Str.charAt(i + 1));
+                step3.append(step2Str.charAt(i));
+            } else {
+                step3.append(step2Str.charAt(i));
+            }
+        }
+
+        // Step 4: 前两位和后两位颠倒
+        String step3Str = step3.toString();
+        if (step3Str.length() < 2) {
+            return step3Str;
+        }
+        String firstTwo = step3Str.substring(0, 2);
+        String lastTwo = step3Str.substring(step3Str.length() - 2);
+        String middle = step3Str.length() > 4 ? step3Str.substring(2, step3Str.length() - 2) : "";
+
+        return lastTwo + middle + firstTwo;
+
+    }
+
     /**
      * 修改设备
      *
@@ -196,6 +234,8 @@ public class SmsbDeviceServiceImpl implements ISmsbDeviceService {
     @CacheEvict(cacheNames = "global:msr:device:identifier", allEntries = true)
     public Boolean updateByBo(SmsbDeviceBo bo) {
         SmsbDevice update = MapstructUtils.convert(bo, SmsbDevice.class);
+        String identifier = encryptMac(update.getMac().toLowerCase(Locale.ROOT));
+        update.setIdentifier(identifier);
         // validEntityBeforeSave(update);
         refreshCacheById();
         return baseMapper.updateById(update) > 0;

+ 17 - 0
smsb-modules/smsb-source/src/main/java/com/inspur/source/controller/SmsbFrontController.java

@@ -4,6 +4,8 @@ import cn.dev33.satoken.annotation.SaIgnore;
 import com.inspur.device.domain.bo.HttpHeartbeatReq;
 import com.inspur.device.domain.vo.HttpHeartbeatRspVo;
 import com.inspur.device.domain.vo.SmsbOtaRecordVo;
+import com.inspur.device.service.ISmsbDeviceLoginService;
+import com.inspur.device.service.ISmsbDeviceRunInfoService;
 import com.inspur.device.service.ISmsbDeviceService;
 import com.inspur.device.service.ISmsbOtaRecordService;
 import com.inspur.source.domain.vo.FrontPushInfoVo;
@@ -35,6 +37,9 @@ public class SmsbFrontController {
     @Autowired
     private ISmsbDeviceService smsbDeviceService;
 
+    @Autowired
+    private ISmsbDeviceLoginService smsbDeviceLoginService;
+
     /**
      * 根据设备identifier 获取该设备最新内容下发记录
      *
@@ -95,4 +100,16 @@ public class SmsbFrontController {
         return smsbDeviceService.heartbeat(requestParam);
     }
 
+
+    /**
+     * 前端设备登录接口
+     *
+     * @param requestParam 主键
+     */
+    @SaIgnore
+    @PostMapping("/login")
+    public R<HttpHeartbeatRspVo> deviceLogin(@RequestBody HttpHeartbeatReq requestParam) {
+        return smsbDeviceLoginService.deviceLogin(requestParam);
+    }
+
 }