From d638e512c922443c22b6dc0c061bf576eaec56d1 Mon Sep 17 00:00:00 2001 From: hrz <1710360675@qq.com> Date: Fri, 25 Apr 2025 09:48:25 +0800 Subject: [PATCH] =?UTF-8?q?update:=E8=AE=BE=E7=BD=AE=E5=90=8C=E7=B1=BB?= =?UTF-8?q?=E5=9E=8BOTA=E5=9B=BA=E4=BB=B6=EF=BC=8C=E5=8F=AA=E4=BF=9D?= =?UTF-8?q?=E7=95=99=E4=B8=80=E4=B8=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DeviceServiceImpl.java | 42 ++++++++++++------- .../device/service/impl/OtaServiceImpl.java | 24 ++++++----- .../src/components/FirmwareDialog.vue | 19 ++++++++- main/manager-web/src/views/OtaManagement.vue | 18 ++++---- 4 files changed, 66 insertions(+), 37 deletions(-) diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java index b442275a..2a451733 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java @@ -124,22 +124,7 @@ public class DeviceServiceImpl extends BaseServiceImpl response.setServer_time(buildServerTime()); String type = deviceReport.getBoard() == null ? null : deviceReport.getBoard().getType(); - OtaEntity ota = otaService.getLatestOta(type); - String downloadUrl = null; - if (ota != null) { - // 获取当前请求的URL - HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) - .getRequest(); - String requestUrl = request.getRequestURL().toString(); - // 将URL中的/ota/替换为/otaMag/download/ - String uuid = UUID.randomUUID().toString(); - redisUtils.set(RedisKeys.getOtaIdKey(uuid), ota.getId()); - downloadUrl = requestUrl.replace("/ota/", "/otaMag/download/") + uuid; - } - - DeviceReportRespDTO.Firmware firmware = new DeviceReportRespDTO.Firmware(); - firmware.setVersion(ota == null ? null : ota.getVersion()); - firmware.setUrl(downloadUrl); + DeviceReportRespDTO.Firmware firmware = buildFirmwareInfo(type, macAddress); response.setFirmware(firmware); // 添加WebSocket配置 @@ -315,4 +300,29 @@ public class DeviceServiceImpl extends BaseServiceImpl } return code; } + + private DeviceReportRespDTO.Firmware buildFirmwareInfo(String type, String macAddress) { + if (StringUtils.isBlank(type)) { + return null; + } + + OtaEntity ota = otaService.getLatestOta(type); + DeviceReportRespDTO.Firmware firmware = new DeviceReportRespDTO.Firmware(); + String downloadUrl = null; + + if (ota != null) { + // 获取当前请求的URL + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) + .getRequest(); + String requestUrl = request.getRequestURL().toString(); + // 将URL中的/ota/替换为/otaMag/download/ + String uuid = UUID.randomUUID().toString(); + redisUtils.set(RedisKeys.getOtaIdKey(uuid), ota.getId()); + downloadUrl = requestUrl.replace("/ota/", "/otaMag/download/") + uuid; + } + + firmware.setVersion(ota == null ? null : ota.getVersion()); + firmware.setUrl(downloadUrl); + return firmware; + } } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/OtaServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/OtaServiceImpl.java index ef9ac01d..ed9e8c7f 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/OtaServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/OtaServiceImpl.java @@ -1,6 +1,8 @@ package xiaozhi.modules.device.service.impl; import java.util.Arrays; +import java.util.Date; +import java.util.List; import java.util.Map; import org.springframework.stereotype.Service; @@ -38,17 +40,17 @@ public class OtaServiceImpl extends BaseServiceImpl implement @Override public void update(OtaEntity entity) { - // 检查是否存在相同名称、类型和版本的固件(排除当前记录) + // 检查是否存在相同类型和版本的固件(排除当前记录) QueryWrapper queryWrapper = new QueryWrapper() - .eq("firmware_name", entity.getFirmwareName()) .eq("type", entity.getType()) .eq("version", entity.getVersion()) .ne("id", entity.getId()); // 排除当前记录 if (baseDao.selectCount(queryWrapper) > 0) { - throw new RuntimeException("已存在相同名称、类型和版本的固件,请修改后重试"); + throw new RuntimeException("已存在相同类型和版本的固件,请修改后重试"); } + entity.setUpdateDate(new Date()); baseDao.updateById(entity); } @@ -59,16 +61,16 @@ public class OtaServiceImpl extends BaseServiceImpl implement @Override public boolean save(OtaEntity entity) { - // 检查是否存在相同名称、类型和版本的固件 QueryWrapper queryWrapper = new QueryWrapper() - .eq("firmware_name", entity.getFirmwareName()) - .eq("type", entity.getType()) - .eq("version", entity.getVersion()); - - if (baseDao.selectCount(queryWrapper) > 0) { - throw new RuntimeException("已存在相同名称、类型和版本的固件,请勿重复添加"); + .eq("type", entity.getType()); + // 同类固件只保留最新的一条 + List otaList = baseDao.selectList(queryWrapper); + if (otaList != null && otaList.size() > 0) { + OtaEntity otaBefore = otaList.getFirst(); + entity.setId(otaBefore.getId()); + baseDao.updateById(entity); + return true; } - return baseDao.insert(entity) > 0; } diff --git a/main/manager-web/src/components/FirmwareDialog.vue b/main/manager-web/src/components/FirmwareDialog.vue index 2cbf83a1..fab99a57 100644 --- a/main/manager-web/src/components/FirmwareDialog.vue +++ b/main/manager-web/src/components/FirmwareDialog.vue @@ -5,7 +5,7 @@ - + @@ -21,6 +21,9 @@ +
+ 温馨提示:请上传xiaozhi.bin文件,而不是merged-binary.bin文件 +
@@ -76,6 +79,12 @@ export default { } } }, + computed: { + isTypeDisabled() { + // 如果有id,说明是编辑模式,禁用类型选择 + return !!this.form.id + } + }, methods: { handleClose() { this.$refs.form.clearValidate(); @@ -195,4 +204,12 @@ export default { padding-top: 5px; color: #909399; } + +.hint-text { + display: flex; + align-items: center; + gap: 8px; + color: #979db1; + font-size: 11px; +} \ No newline at end of file diff --git a/main/manager-web/src/views/OtaManagement.vue b/main/manager-web/src/views/OtaManagement.vue index 4567f6ad..106e12fb 100644 --- a/main/manager-web/src/views/OtaManagement.vue +++ b/main/manager-web/src/views/OtaManagement.vue @@ -15,15 +15,10 @@
- + + + +