From 27b3ffa1dcf89f4dc5fdd13a96f7c985d0eba68d Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Thu, 30 Oct 2025 11:19:00 +0800
Subject: [PATCH] oss增加按【通过文件扩展名获取MIME类型】存储对象
---
ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceServiceImpl.java | 74 ++++++++++++++++++++++++++++++++++++-
1 files changed, 72 insertions(+), 2 deletions(-)
diff --git a/ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceServiceImpl.java b/ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceServiceImpl.java
index f8494fc..7466075 100644
--- a/ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceServiceImpl.java
+++ b/ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceServiceImpl.java
@@ -1,5 +1,7 @@
package com.ard.sample.manage.service.impl;
+import com.alibaba.fastjson2.JSONObject;
+import com.ard.system.authorize.service.AuthorizeService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -89,6 +91,9 @@
@Autowired
private IDeviceFirmwareService deviceFirmwareService;
+
+ @Resource
+ private AuthorizeService authorizeService;
@Autowired
@Qualifier("gatewayOSDServiceImpl")
@@ -305,6 +310,9 @@
.collect(Collectors.toList());
}
+ /**
+ * 设备列表
+ * */
@Override
public List<DeviceDTO> getDevicesTopoForWeb() {
List<DeviceDTO> devicesList = this.getDevicesByParams(
@@ -533,7 +541,51 @@
mapper.updateById(entity);
return Optional.of(deviceEntity);
}
+ // 2025-10-20 zwy 添加时增加授权验证及数量限制,限制为3台机场设备,超出则抛出异常
+ try{
+ // 查询数据库中机器设备数量
+ // 根据参数获取设备列表
+ List<DeviceDTO> devicesList = this.getDevicesByParams(
+ DeviceQueryParam.builder()
+ // 过滤设备域为GATEWAY和DOCK的设备
+ .domains(List.of(DeviceDomainEnum.GATEWAY.getVal(), DeviceDomainEnum.DOCK.getVal()))
+ .build());
+ // 验证授权数量
+ validateAuthorization(devicesList.size(), 1);
+ }
+ catch (Exception e) {
+ return Optional.empty();
+ }
+ // 调用验证方法
+
return mapper.insert(entity) > 0 ? Optional.of(entity) : Optional.empty();
+ }
+
+ /**
+ * 验证授权数量
+ */
+ private void validateAuthorization(int existingCount, int newCount) {
+ int totalCount = existingCount + newCount;
+
+ JSONObject authInfo = authorizeService.getAuthorizationInfo();
+ String authType = authInfo.getString("Type");
+
+ switch (authType) {
+ case "normal":
+ int allowedDockNum = authInfo.getIntValue("dockNum");
+ if (totalCount > allowedDockNum) {
+ throw new RuntimeException(String.format(
+ "授权数量%d,当前操作将导致总数达到%d,超过授权限制",
+ allowedDockNum, totalCount));
+ }
+ break;
+ case "expired":
+ throw new RuntimeException("授权文件已过期");
+ case "mismatch":
+ throw new RuntimeException("授权文件不匹配");
+ default:
+ throw new RuntimeException("未知的授权类型: " + authType);
+ }
}
/**
@@ -636,6 +688,7 @@
.nickname(entity.getNickname())
.firmwareVersion(entity.getFirmwareVersion())
.deptId(entity.getDeptId())
+ .workType(entity.getWorkType())
.workspaceName(entity.getDeptId() != null
? Optional.ofNullable(sysDeptService.selectDeptById(entity.getDeptId()))
.map(SysDept::getDeptName)
@@ -671,6 +724,19 @@
public Boolean updateDevice(DeviceDTO deviceDTO) {
int update = mapper.update(this.deviceDTO2Entity(deviceDTO),
new LambdaUpdateWrapper<DeviceEntity>().eq(DeviceEntity::getDeviceSn, deviceDTO.getDeviceSn()));
+ return update > 0;
+ }
+
+ @Override
+ public Boolean updateWorkType(String sn, Long workType) {
+ // 方式1:使用LambdaUpdateWrapper(推荐,类型安全,避免字段名硬编码)
+ LambdaUpdateWrapper<DeviceEntity> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
+ // 设置更新条件:deviceSn = sn
+ lambdaUpdateWrapper.eq(DeviceEntity::getDeviceSn, sn)
+ // 只更新workType字段
+ .set(DeviceEntity::getWorkType, workType);
+ // 执行更新(第一个参数传null,因为更新字段已通过wrapper的set指定)
+ int update = mapper.update(null, lambdaUpdateWrapper);
return update > 0;
}
@@ -804,12 +870,14 @@
*/
@Override
public PaginationData<DeviceDTO> getBoundDevicesWithDomain(Long page,
- Long pageSize, Integer domain) {
+ Long pageSize, Integer domain, Long deptId) {
Page<DeviceEntity> pagination = mapper.selectPage(new Page<>(page, pageSize),
new LambdaQueryWrapper<DeviceEntity>()
.eq(DeviceEntity::getDomain, domain)
- .eq(DeviceEntity::getBoundStatus, true));
+ .eq(deptId != null, DeviceEntity::getDeptId, deptId)
+ .isNotNull(DeviceEntity::getDeptId));
+// .eq(DeviceEntity::getBoundStatus, true));
List<DeviceDTO> devicesList = pagination.getRecords().stream().map(this::deviceEntityConvertToDTO)
.peek(device -> {
device.setStatus(RedisOpsUtils.checkExist(RedisConst.DEVICE_ONLINE_PREFIX + device.getDeviceSn()));
@@ -835,6 +903,7 @@
DeviceDTO device = DeviceDTO.builder()
.deviceSn(deviceSn)
.boundStatus(false)
+ .deptId(null)
.build();
this.updateDevice(device);
}
@@ -1009,6 +1078,7 @@
.childSn(dto.getChildDeviceSn())
.domain(dto.getDomain())
.firmwareVersion(dto.getFirmwareVersion())
+ .workType(dto.getWorkType())
.compatibleStatus(dto.getFirmwareStatus() == null ? null :
DeviceFirmwareStatusEnum.CONSISTENT_UPGRADE != DeviceFirmwareStatusEnum.find(dto.getFirmwareStatus()))
.build();
--
Gitblit v1.9.3