Преглед на файлове

1、设备升级包服务实现mqtt

liweimin преди 1 ден
родител
ревизия
f157e2a967

+ 0 - 55
ruoyi-device/src/main/java/com/ruoyi/device/mqtt/domain/decoder/upgrade/GetApkUrlMessage.java

@@ -1,55 +0,0 @@
-package com.ruoyi.device.mqtt.domain.decoder.upgrade;
-
-import com.ruoyi.device.mqtt.domain.BaseBody;
-
-/**
- * 固件 URL 查询上行消息
- */
-public class GetApkUrlMessage extends BaseBody
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 目标设备型号 */
-    private String targetDeviceType;
-
-    /** 固件类型(1:bootloader; 2:产测; 3:app; 4:lua) */
-    private Integer firmwareType;
-
-    /** 版本号 */
-    private String version;
-
-    public GetApkUrlMessage()
-    {
-        super();
-    }
-
-    public String getTargetDeviceType()
-    {
-        return targetDeviceType;
-    }
-
-    public void setTargetDeviceType(String targetDeviceType)
-    {
-        this.targetDeviceType = targetDeviceType;
-    }
-
-    public Integer getFirmwareType()
-    {
-        return firmwareType;
-    }
-
-    public void setFirmwareType(Integer firmwareType)
-    {
-        this.firmwareType = firmwareType;
-    }
-
-    public String getVersion()
-    {
-        return version;
-    }
-
-    public void setVersion(String version)
-    {
-        this.version = version;
-    }
-}

+ 0 - 42
ruoyi-device/src/main/java/com/ruoyi/device/mqtt/domain/decoder/upgrade/QueryApkListMessage.java

@@ -1,42 +0,0 @@
-package com.ruoyi.device.mqtt.domain.decoder.upgrade;
-
-import com.ruoyi.device.mqtt.domain.BaseBody;
-
-/**
- * 固件版本列表查询上行消息
- */
-public class QueryApkListMessage extends BaseBody
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 目标设备型号 */
-    private String targetDeviceType;
-
-    /** 固件类型(1:bootloader; 2:产测; 3:app; 4:lua) */
-    private Integer firmwareType;
-
-    public QueryApkListMessage()
-    {
-        super();
-    }
-
-    public String getTargetDeviceType()
-    {
-        return targetDeviceType;
-    }
-
-    public void setTargetDeviceType(String targetDeviceType)
-    {
-        this.targetDeviceType = targetDeviceType;
-    }
-
-    public Integer getFirmwareType()
-    {
-        return firmwareType;
-    }
-
-    public void setFirmwareType(Integer firmwareType)
-    {
-        this.firmwareType = firmwareType;
-    }
-}

+ 42 - 11
ruoyi-device/src/main/java/com/ruoyi/device/mqtt/handler/decoder/upgrade/GetApkUrlDecoder.java

@@ -1,7 +1,9 @@
 package com.ruoyi.device.mqtt.handler.decoder.upgrade;
 
+import com.ruoyi.device.domain.entity.DeviceUpgradePackage;
 import com.ruoyi.device.mqtt.annotation.ConsumerHandler;
-import com.ruoyi.device.mqtt.domain.decoder.upgrade.GetApkUrlMessage;
+import com.ruoyi.device.mqtt.domain.encoder.upgrade.SendApkUrlRequest;
+import com.ruoyi.device.mqtt.enums.DeviceUpgradePackageTypeEnum;
 import com.ruoyi.device.mqtt.enums.MsgTypeEnum;
 import com.ruoyi.device.mqtt.handler.decoder.AbstractDecoder;
 import com.ruoyi.device.mqtt.util.TargetTypeConvertUtil;
@@ -11,17 +13,19 @@ import com.ruoyi.device.service.IDeviceUpgradePackageService;
 import io.netty.buffer.ByteBuf;
 import jakarta.annotation.Resource;
 
+import java.util.List;
+
 /**
  * 固件 URL 查询上行解码 GET_APK_URL_UP
  */
 @ConsumerHandler(msgType = MsgTypeEnum.GET_APK_URL_UP)
-public class GetApkUrlDecoder extends AbstractDecoder<Void>
+public class GetApkUrlDecoder extends AbstractDecoder<SendApkUrlRequest>
 {
     @Resource
     private IDeviceUpgradePackageService deviceUpgradePackageService;
 
     @Override
-    protected Void decode(CommonTopic topic, CommonHeader header, ByteBuf body)
+    protected SendApkUrlRequest decode(CommonTopic topic, CommonHeader header, ByteBuf body)
     {
         String deviceType = TargetTypeConvertUtil.convert(body.readUnsignedShortLE());
         Long deviceSn = body.readUnsignedIntLE();
@@ -31,15 +35,42 @@ public class GetApkUrlDecoder extends AbstractDecoder<Void>
         int length = body.readByte();
         byte[] content = new byte[length];
         body.readBytes(content);
+        String version = new String(content);
+
+        try
+        {
+            // 1、查询固件升级包
+            DeviceUpgradePackage query = new DeviceUpgradePackage();
+            query.setType(DeviceUpgradePackageTypeEnum.PROD_PACKAGE.getType());
+            query.setDeviceType(targetDeviceType);
+            query.setFirmwareType(firmwareType);
+            query.setAppVersion(version);
+            log.info("获取固件升级包地址:{}", query);
+
+            List<DeviceUpgradePackage> packageList = deviceUpgradePackageService.selectDeviceUpgradePackageList(query);
+            if (packageList.isEmpty())
+            {
+                log.info("未找到匹配的固件升级包");
+                return null;
+            }
 
-        GetApkUrlMessage getApkUrlMessage = new GetApkUrlMessage();
-        getApkUrlMessage.setDeviceSn(deviceSn);
-        getApkUrlMessage.setDeviceType(deviceType);
-        getApkUrlMessage.setTargetDeviceType(targetDeviceType);
-        getApkUrlMessage.setFirmwareType(firmwareType);
-        getApkUrlMessage.setVersion(new String(content));
+            // 2、设置消息类型(上传 与 下发不一致,需要修改)
+            header.setFirstType(MsgTypeEnum.GET_APK_URL_DOWN.getFirstType());
+            header.setSecondType(MsgTypeEnum.GET_APK_URL_DOWN.getSecondType());
 
-        deviceUpgradePackageService.handleGetApkUrl(getApkUrlMessage);
-        return null;
+            // 3、设置下发参数
+            SendApkUrlRequest sendApkUrlRequest = new SendApkUrlRequest();
+            sendApkUrlRequest.setDeviceSn(deviceSn);
+            sendApkUrlRequest.setDeviceType(deviceType);
+            sendApkUrlRequest.setTargetDeviceType(targetDeviceType);
+            sendApkUrlRequest.setFirmwareType(firmwareType);
+            sendApkUrlRequest.setDownloadUrl(packageList.get(0).getDownloadUrl());
+            return sendApkUrlRequest;
+        }
+        catch (Exception e)
+        {
+            log.error("获取固件升级包地址处理异常:{}", e.getMessage(), e);
+            return null;
+        }
     }
 }

+ 41 - 10
ruoyi-device/src/main/java/com/ruoyi/device/mqtt/handler/decoder/upgrade/QueryApkListDecoder.java

@@ -1,7 +1,9 @@
 package com.ruoyi.device.mqtt.handler.decoder.upgrade;
 
+import com.ruoyi.device.domain.entity.DeviceUpgradePackage;
 import com.ruoyi.device.mqtt.annotation.ConsumerHandler;
-import com.ruoyi.device.mqtt.domain.decoder.upgrade.QueryApkListMessage;
+import com.ruoyi.device.mqtt.domain.encoder.upgrade.SendApkListRequest;
+import com.ruoyi.device.mqtt.enums.DeviceUpgradePackageTypeEnum;
 import com.ruoyi.device.mqtt.enums.MsgTypeEnum;
 import com.ruoyi.device.mqtt.handler.decoder.AbstractDecoder;
 import com.ruoyi.device.mqtt.util.TargetTypeConvertUtil;
@@ -11,30 +13,59 @@ import com.ruoyi.device.service.IDeviceUpgradePackageService;
 import io.netty.buffer.ByteBuf;
 import jakarta.annotation.Resource;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * 固件版本列表查询上行解码 GET_APK_UP
  */
 @ConsumerHandler(msgType = MsgTypeEnum.GET_APK_UP)
-public class QueryApkListDecoder extends AbstractDecoder<Void>
+public class QueryApkListDecoder extends AbstractDecoder<SendApkListRequest>
 {
     @Resource
     private IDeviceUpgradePackageService deviceUpgradePackageService;
 
     @Override
-    protected Void decode(CommonTopic topic, CommonHeader header, ByteBuf body)
+    protected SendApkListRequest decode(CommonTopic topic, CommonHeader header, ByteBuf body)
     {
         String deviceType = TargetTypeConvertUtil.convert(body.readUnsignedShortLE());
         Long deviceSn = body.readUnsignedIntLE();
         String targetDeviceType = TargetTypeConvertUtil.convert(body.readUnsignedShortLE());
         int firmwareType = body.readByte();
 
-        QueryApkListMessage queryApkListMessage = new QueryApkListMessage();
-        queryApkListMessage.setDeviceSn(deviceSn);
-        queryApkListMessage.setDeviceType(deviceType);
-        queryApkListMessage.setTargetDeviceType(targetDeviceType);
-        queryApkListMessage.setFirmwareType(firmwareType);
+        try
+        {
+            // 1、查询固件升级包
+            DeviceUpgradePackage query = new DeviceUpgradePackage();
+            query.setType(DeviceUpgradePackageTypeEnum.PROD_PACKAGE.getType());
+            query.setDeviceType(targetDeviceType);
+            query.setFirmwareType(firmwareType);
+            log.info("查询固件升级包:{}", query);
+
+            List<DeviceUpgradePackage> packageList = deviceUpgradePackageService.selectDeviceUpgradePackageList(query);
+            List<String> versionList = new ArrayList<>();
+            for (DeviceUpgradePackage item : packageList)
+            {
+                versionList.add(item.getAppVersion());
+            }
+
+            // 2、设置消息类型(上传 与 下发不一致,需要修改)
+            header.setFirstType(MsgTypeEnum.GET_APK_DOWN.getFirstType());
+            header.setSecondType(MsgTypeEnum.GET_APK_DOWN.getSecondType());
 
-        deviceUpgradePackageService.handleQueryApkList(queryApkListMessage);
-        return null;
+            // 3、设置下发参数
+            SendApkListRequest sendApkListRequest = new SendApkListRequest();
+            sendApkListRequest.setDeviceSn(deviceSn);
+            sendApkListRequest.setDeviceType(deviceType);
+            sendApkListRequest.setTargetDeviceType(targetDeviceType);
+            sendApkListRequest.setFirmwareType(firmwareType);
+            sendApkListRequest.setVersionList(versionList);
+            return sendApkListRequest;
+        }
+        catch (Exception e)
+        {
+            log.error("查询固件升级包处理异常:{}", e.getMessage(), e);
+            return null;
+        }
     }
 }

+ 0 - 11
ruoyi-device/src/main/java/com/ruoyi/device/service/IDeviceUpgradePackageService.java

@@ -1,8 +1,6 @@
 package com.ruoyi.device.service;
 
 import com.ruoyi.device.domain.entity.DeviceUpgradePackage;
-import com.ruoyi.device.mqtt.domain.decoder.upgrade.GetApkUrlMessage;
-import com.ruoyi.device.mqtt.domain.decoder.upgrade.QueryApkListMessage;
 
 import java.util.List;
 
@@ -16,13 +14,4 @@ public interface IDeviceUpgradePackageService
      */
     List<DeviceUpgradePackage> selectDeviceUpgradePackageList(DeviceUpgradePackage query);
 
-    /**
-     * 处理 GET_APK_UP:查询版本列表并下发 GET_APK_DOWN
-     */
-    void handleQueryApkList(QueryApkListMessage queryApkListMessage);
-
-    /**
-     * 处理 GET_APK_URL_UP:查询下载地址并下发 GET_APK_URL_DOWN
-     */
-    void handleGetApkUrl(GetApkUrlMessage getApkUrlMessage);
 }

+ 0 - 87
ruoyi-device/src/main/java/com/ruoyi/device/service/impl/DeviceUpgradePackageServiceImpl.java

@@ -2,22 +2,12 @@ package com.ruoyi.device.service.impl;
 
 import com.ruoyi.device.domain.entity.DeviceUpgradePackage;
 import com.ruoyi.device.mapper.DeviceUpgradePackageMapper;
-import com.ruoyi.device.mqtt.domain.encoder.upgrade.SendApkListRequest;
-import com.ruoyi.device.mqtt.domain.encoder.upgrade.SendApkUrlRequest;
-import com.ruoyi.device.mqtt.domain.decoder.upgrade.GetApkUrlMessage;
-import com.ruoyi.device.mqtt.domain.decoder.upgrade.QueryApkListMessage;
-import com.ruoyi.device.mqtt.enums.DeviceUpgradePackageTypeEnum;
-import com.ruoyi.device.mqtt.enums.MsgTypeEnum;
-import com.ruoyi.device.mqtt.handler.HandlerManager;
-import com.ruoyi.device.mqtt.handler.encoder.IEncoder;
-import com.ruoyi.device.mqtt.util.MsgHandlerUtil;
 import com.ruoyi.device.service.IDeviceUpgradePackageService;
 import jakarta.annotation.Resource;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -31,87 +21,10 @@ public class DeviceUpgradePackageServiceImpl implements IDeviceUpgradePackageSer
     @Resource
     private DeviceUpgradePackageMapper deviceUpgradePackageMapper;
 
-    @Resource
-    private HandlerManager handlerManager;
-
     @Override
     public List<DeviceUpgradePackage> selectDeviceUpgradePackageList(DeviceUpgradePackage query)
     {
         return deviceUpgradePackageMapper.selectDeviceUpgradePackageList(query);
     }
 
-    @Override
-    public void handleQueryApkList(QueryApkListMessage queryApkListMessage)
-    {
-        try
-        {
-            log.info("查询固件升级包:{}", queryApkListMessage);
-
-            DeviceUpgradePackage query = new DeviceUpgradePackage();
-            query.setType(DeviceUpgradePackageTypeEnum.PROD_PACKAGE.getType());
-            query.setDeviceType(queryApkListMessage.getTargetDeviceType());
-            query.setFirmwareType(queryApkListMessage.getFirmwareType());
-            List<DeviceUpgradePackage> packageList = selectDeviceUpgradePackageList(query);
-            List<String> versionList = new ArrayList<>();
-            for (DeviceUpgradePackage item : packageList)
-            {
-                versionList.add(item.getAppVersion());
-            }
-
-            SendApkListRequest sendApkListRequest = new SendApkListRequest();
-            sendApkListRequest.setDeviceSn(queryApkListMessage.getDeviceSn());
-            sendApkListRequest.setDeviceType(queryApkListMessage.getDeviceType());
-            sendApkListRequest.setTargetDeviceType(queryApkListMessage.getTargetDeviceType());
-            sendApkListRequest.setFirmwareType(queryApkListMessage.getFirmwareType());
-            sendApkListRequest.setVersionList(versionList);
-
-            encode(MsgTypeEnum.GET_APK_DOWN, sendApkListRequest);
-        }
-        catch (Exception e)
-        {
-            log.error("查询固件升级包处理异常:{}", e.getMessage(), e);
-        }
-    }
-
-    @Override
-    public void handleGetApkUrl(GetApkUrlMessage getApkUrlMessage)
-    {
-        try
-        {
-            log.info("获取固件升级包地址:{}", getApkUrlMessage);
-
-            DeviceUpgradePackage query = new DeviceUpgradePackage();
-            query.setType(DeviceUpgradePackageTypeEnum.PROD_PACKAGE.getType());
-            query.setDeviceType(getApkUrlMessage.getTargetDeviceType());
-            query.setFirmwareType(getApkUrlMessage.getFirmwareType());
-            query.setAppVersion(getApkUrlMessage.getVersion());
-            List<DeviceUpgradePackage> packageList = selectDeviceUpgradePackageList(query);
-            if (packageList.isEmpty())
-            {
-                log.info("未找到匹配的固件升级包:{}", getApkUrlMessage);
-                return;
-            }
-
-            SendApkUrlRequest sendApkUrlRequest = new SendApkUrlRequest();
-            sendApkUrlRequest.setDeviceSn(getApkUrlMessage.getDeviceSn());
-            sendApkUrlRequest.setDeviceType(getApkUrlMessage.getDeviceType());
-            sendApkUrlRequest.setTargetDeviceType(getApkUrlMessage.getTargetDeviceType());
-            sendApkUrlRequest.setFirmwareType(getApkUrlMessage.getFirmwareType());
-            sendApkUrlRequest.setDownloadUrl(packageList.get(0).getDownloadUrl());
-
-            encode(MsgTypeEnum.GET_APK_URL_DOWN, sendApkUrlRequest);
-        }
-        catch (Exception e)
-        {
-            log.error("获取固件升级包地址处理异常:{}", e.getMessage(), e);
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    private <T> void encode(MsgTypeEnum msgType, T request)
-    {
-        String key = MsgHandlerUtil.getEncoderKey(msgType);
-        IEncoder<T> encoder = (IEncoder<T>) handlerManager.getEncoder(key);
-        encoder.encode(request);
-    }
 }