From b51e88052fe66074fb1148bb754d85101596ebc5 Mon Sep 17 00:00:00 2001 From: chenyouting <514333061@qq.com> Date: Sat, 16 Aug 2025 16:40:58 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=88=86=E4=BA=AB3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AppDeviceShareController.java | 4 +-- .../device/AppDeviceBJQController.java | 4 +-- .../service/DeviceShareService.java} | 12 +++---- .../service/device/DeviceBJQBizService.java | 31 +++++++++++++++++-- .../annotation/FunctionAccessAnnotation.java | 1 + .../FunctionAccessBatcAnnotation.java | 2 ++ .../aspectj/FunctionAccessAspect.java | 3 +- .../aspectj/FunctionAccessBatchAspect.java | 4 +-- 8 files changed, 44 insertions(+), 17 deletions(-) rename fys-admin/src/main/java/com/fuyuanshen/{app/service/AppDeviceShareService.java => web/service/DeviceShareService.java} (95%) diff --git a/fys-admin/src/main/java/com/fuyuanshen/app/controller/AppDeviceShareController.java b/fys-admin/src/main/java/com/fuyuanshen/app/controller/AppDeviceShareController.java index 4c743206..613bb7ea 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/app/controller/AppDeviceShareController.java +++ b/fys-admin/src/main/java/com/fuyuanshen/app/controller/AppDeviceShareController.java @@ -5,7 +5,6 @@ import cn.hutool.core.util.RandomUtil; import com.fuyuanshen.app.domain.bo.AppDeviceShareBo; import com.fuyuanshen.app.domain.vo.AppDeviceShareDetailVo; import com.fuyuanshen.app.domain.vo.AppDeviceShareVo; -import com.fuyuanshen.app.service.AppDeviceShareService; import com.fuyuanshen.app.service.IAppDeviceShareService; import com.fuyuanshen.common.core.constant.Constants; import com.fuyuanshen.common.core.domain.R; @@ -16,6 +15,7 @@ import com.fuyuanshen.common.mybatis.core.page.TableDataInfo; import com.fuyuanshen.common.ratelimiter.annotation.RateLimiter; import com.fuyuanshen.common.redis.utils.RedisUtils; import com.fuyuanshen.common.web.core.BaseController; +import com.fuyuanshen.web.service.DeviceShareService; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; @@ -45,7 +45,7 @@ public class AppDeviceShareController extends BaseController { private final IAppDeviceShareService deviceShareService; - private final AppDeviceShareService appDeviceShareService; + private final DeviceShareService appDeviceShareService; /** * 分享管理列表 diff --git a/fys-admin/src/main/java/com/fuyuanshen/app/controller/device/AppDeviceBJQController.java b/fys-admin/src/main/java/com/fuyuanshen/app/controller/device/AppDeviceBJQController.java index 51fb810e..3cc71f8c 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/app/controller/device/AppDeviceBJQController.java +++ b/fys-admin/src/main/java/com/fuyuanshen/app/controller/device/AppDeviceBJQController.java @@ -52,7 +52,7 @@ public class AppDeviceBJQController extends BaseController { * 发送信息 */ @PostMapping(value = "/sendMessage") - @FunctionAccessBatcAnnotation("sendMessage") + @FunctionAccessBatcAnnotation(value = "sendMessage", timeOut = 30, batchMaxTimeOut = 40) public R sendMessage(@RequestBody AppDeviceSendMsgBo bo) { return toAjax(appDeviceService.sendMessage(bo)); } @@ -61,7 +61,7 @@ public class AppDeviceBJQController extends BaseController { * 发送报警信息 */ @PostMapping(value = "/sendAlarmMessage") -// @FunctionAccessBatcAnnotation("sendAlarmMessage") + @FunctionAccessBatcAnnotation(value = "sendAlarmMessage", timeOut = 5, batchMaxTimeOut = 10) public R sendAlarmMessage(@RequestBody AppDeviceSendMsgBo bo) { return toAjax(appDeviceService.sendAlarmMessage(bo)); } diff --git a/fys-admin/src/main/java/com/fuyuanshen/app/service/AppDeviceShareService.java b/fys-admin/src/main/java/com/fuyuanshen/web/service/DeviceShareService.java similarity index 95% rename from fys-admin/src/main/java/com/fuyuanshen/app/service/AppDeviceShareService.java rename to fys-admin/src/main/java/com/fuyuanshen/web/service/DeviceShareService.java index 1b60ce6a..d73eaa7f 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/app/service/AppDeviceShareService.java +++ b/fys-admin/src/main/java/com/fuyuanshen/web/service/DeviceShareService.java @@ -1,8 +1,7 @@ -package com.fuyuanshen.app.service; +package com.fuyuanshen.web.service; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -14,11 +13,8 @@ import com.fuyuanshen.app.domain.vo.AppDeviceShareVo; import com.fuyuanshen.app.domain.vo.AppPersonnelInfoVo; import com.fuyuanshen.app.mapper.AppDeviceShareMapper; import com.fuyuanshen.app.mapper.AppPersonnelInfoMapper; -import com.fuyuanshen.common.core.constant.Constants; import com.fuyuanshen.common.core.constant.GlobalConstants; import com.fuyuanshen.common.core.exception.ServiceException; -import com.fuyuanshen.common.core.exception.user.CaptchaExpireException; -import com.fuyuanshen.common.core.utils.MessageUtils; import com.fuyuanshen.common.core.utils.StringUtils; import com.fuyuanshen.common.mybatis.core.page.PageQuery; import com.fuyuanshen.common.mybatis.core.page.TableDataInfo; @@ -44,7 +40,7 @@ import static com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants.*; @RequiredArgsConstructor @Slf4j @Service -public class AppDeviceShareService { +public class DeviceShareService { private final AppDeviceShareMapper appDeviceShareMapper; @@ -60,7 +56,7 @@ public class AppDeviceShareService { Page page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()); Page result = appDeviceShareMapper.selectAppDeviceShareList(bo, page); List records = result.getRecords(); - records.forEach(AppDeviceShareService::buildDeviceStatus); + records.forEach(DeviceShareService::buildDeviceStatus); return TableDataInfo.build(result); } @@ -231,7 +227,7 @@ public class AppDeviceShareService { IPage result = appDeviceShareMapper.otherDeviceShareList(bo, page); List records = result.getRecords(); - records.forEach(AppDeviceShareService::buildDeviceStatus); + records.forEach(DeviceShareService::buildDeviceStatus); return TableDataInfo.build(result); } diff --git a/fys-admin/src/main/java/com/fuyuanshen/web/service/device/DeviceBJQBizService.java b/fys-admin/src/main/java/com/fuyuanshen/web/service/device/DeviceBJQBizService.java index 1488ed5f..60c80d70 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/web/service/device/DeviceBJQBizService.java +++ b/fys-admin/src/main/java/com/fuyuanshen/web/service/device/DeviceBJQBizService.java @@ -64,6 +64,9 @@ public class DeviceBJQBizService { if (device == null) { throw new ServiceException("设备不存在" + deviceId); } + if(getDeviceStatus(device.getDeviceImei())){ + throw new ServiceException(device.getDeviceName()+",设备已断开连接"); + } try { ClassPathResource resource = new ClassPathResource("image/background.png"); InputStream inputStream = resource.getInputStream(); @@ -139,6 +142,7 @@ public class DeviceBJQBizService { if (device == null) { throw new RuntimeException("请先将设备入库!!!"); } + AppDeviceDetailVo vo = new AppDeviceDetailVo(); vo.setDeviceId(device.getId()); vo.setDeviceName(device.getDeviceName()); @@ -213,7 +217,9 @@ public class DeviceBJQBizService { if (deviceObj == null) { throw new RuntimeException("请先将设备入库!!!"); } - + if(getDeviceStatus(deviceObj.getDeviceImei())){ + throw new ServiceException(deviceObj.getDeviceName()+",设备已断开连接"); + } QueryWrapper qw = new QueryWrapper() .eq("device_id", deviceId); List appPersonnelInfoVos = appPersonnelInfoMapper.selectVoList(qw); @@ -258,6 +264,9 @@ public class DeviceBJQBizService { if (device == null) { throw new ServiceException("设备不存在"); } + if(getDeviceStatus(device.getDeviceImei())){ + throw new ServiceException(device.getDeviceName()+",设备已断开连接"); + } MultipartFile file = bo.getFile(); byte[] largeData = ImageToCArrayConverter.convertImageToCArray(file.getInputStream(), 160, 80, 25600); @@ -307,6 +316,9 @@ public class DeviceBJQBizService { if(device == null){ throw new ServiceException("设备不存在"); } + if(getDeviceStatus(device.getDeviceImei())){ + throw new ServiceException(device.getDeviceName()+",设备已断开连接"); + } Integer instructValue = Integer.parseInt(params.getInstructValue()); ArrayList intData = new ArrayList<>(); intData.add(1); @@ -334,6 +346,9 @@ public class DeviceBJQBizService { if(device == null){ throw new ServiceException("设备不存在"); } + if(getDeviceStatus(device.getDeviceImei())){ + throw new ServiceException(device.getDeviceName()+",设备已断开连接"); + } String instructValue = params.getInstructValue(); ArrayList intData = new ArrayList<>(); intData.add(5); @@ -368,6 +383,9 @@ public class DeviceBJQBizService { if(device == null){ throw new ServiceException("设备不存在"); } + if(getDeviceStatus(device.getDeviceImei())){ + throw new ServiceException(device.getDeviceName()+",设备已断开连接"); + } Integer instructValue = Integer.parseInt(params.getInstructValue()); ArrayList intData = new ArrayList<>(); intData.add(4); @@ -407,13 +425,17 @@ public class DeviceBJQBizService { if (deviceIds == null || deviceIds.isEmpty()) { throw new ServiceException("请选择设备"); } + for (Long deviceId : deviceIds) { Device device = deviceMapper.selectById(deviceId); if (device == null) { throw new ServiceException("设备不存在" + deviceId); } - + if(getDeviceStatus(device.getDeviceImei())){ + throw new ServiceException(device.getDeviceName()+",设备已断开连接"); + } try { + ArrayList intData = new ArrayList<>(); intData.add(7); intData.add(Integer.parseInt(bo.getInstructValue())); @@ -444,4 +466,9 @@ public class DeviceBJQBizService { } return 1; } + + private boolean getDeviceStatus(String deviceImei) { + String deviceOnlineStatusRedisKey = GlobalConstants.GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX+ deviceImei + DeviceRedisKeyConstants.DEVICE_ONLINE_STATUS_KEY_PREFIX ; + return StringUtils.isBlank(deviceOnlineStatusRedisKey); + } } diff --git a/fys-common/fys-common-ratelimiter/src/main/java/com/fuyuanshen/common/ratelimiter/annotation/FunctionAccessAnnotation.java b/fys-common/fys-common-ratelimiter/src/main/java/com/fuyuanshen/common/ratelimiter/annotation/FunctionAccessAnnotation.java index 635b5b9f..ab211b22 100644 --- a/fys-common/fys-common-ratelimiter/src/main/java/com/fuyuanshen/common/ratelimiter/annotation/FunctionAccessAnnotation.java +++ b/fys-common/fys-common-ratelimiter/src/main/java/com/fuyuanshen/common/ratelimiter/annotation/FunctionAccessAnnotation.java @@ -8,4 +8,5 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) public @interface FunctionAccessAnnotation { String value() default ""; + long timeOut() default 30; } diff --git a/fys-common/fys-common-ratelimiter/src/main/java/com/fuyuanshen/common/ratelimiter/annotation/FunctionAccessBatcAnnotation.java b/fys-common/fys-common-ratelimiter/src/main/java/com/fuyuanshen/common/ratelimiter/annotation/FunctionAccessBatcAnnotation.java index 3f59cd96..ef0934ee 100644 --- a/fys-common/fys-common-ratelimiter/src/main/java/com/fuyuanshen/common/ratelimiter/annotation/FunctionAccessBatcAnnotation.java +++ b/fys-common/fys-common-ratelimiter/src/main/java/com/fuyuanshen/common/ratelimiter/annotation/FunctionAccessBatcAnnotation.java @@ -8,4 +8,6 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) public @interface FunctionAccessBatcAnnotation { String value() default ""; + long timeOut() default 30; + long batchMaxTimeOut() default 40; } diff --git a/fys-common/fys-common-ratelimiter/src/main/java/com/fuyuanshen/common/ratelimiter/aspectj/FunctionAccessAspect.java b/fys-common/fys-common-ratelimiter/src/main/java/com/fuyuanshen/common/ratelimiter/aspectj/FunctionAccessAspect.java index 1d884f12..41ecd7ea 100644 --- a/fys-common/fys-common-ratelimiter/src/main/java/com/fuyuanshen/common/ratelimiter/aspectj/FunctionAccessAspect.java +++ b/fys-common/fys-common-ratelimiter/src/main/java/com/fuyuanshen/common/ratelimiter/aspectj/FunctionAccessAspect.java @@ -28,6 +28,7 @@ public class FunctionAccessAspect { // 获取方法参数,查找设备ID Object[] args = joinPoint.getArgs(); deviceImei = extractDeviceImei(args); + long timeout = functionAccessAnnotation.timeOut(); if (StringUtils.isNotBlank(deviceImei)) { // 生成全局Redis key @@ -37,7 +38,7 @@ public class FunctionAccessAspect { throw new ServiceException("设备已存在访问限制,请稍后再试", 500); } // - RedisUtils.setCacheObject(redisKey, "ACTIVE", Duration.ofSeconds(30)); + RedisUtils.setCacheObject(redisKey, "ACTIVE", Duration.ofSeconds(timeout)); } // 执行原方法 diff --git a/fys-common/fys-common-ratelimiter/src/main/java/com/fuyuanshen/common/ratelimiter/aspectj/FunctionAccessBatchAspect.java b/fys-common/fys-common-ratelimiter/src/main/java/com/fuyuanshen/common/ratelimiter/aspectj/FunctionAccessBatchAspect.java index c2c571c3..5a901ff8 100644 --- a/fys-common/fys-common-ratelimiter/src/main/java/com/fuyuanshen/common/ratelimiter/aspectj/FunctionAccessBatchAspect.java +++ b/fys-common/fys-common-ratelimiter/src/main/java/com/fuyuanshen/common/ratelimiter/aspectj/FunctionAccessBatchAspect.java @@ -41,10 +41,10 @@ public class FunctionAccessBatchAspect { throw new ServiceException("设备已存在访问限制,请稍后再试", 500); } deviceImeiList.forEach(item->{ - RedisUtils.setCacheObject(FUNCTION_ACCESS_KEY + item, "ACTIVE", Duration.ofSeconds(30)); + RedisUtils.setCacheObject(FUNCTION_ACCESS_KEY + item, "ACTIVE", Duration.ofSeconds(functionAccessBatchAspect.timeOut())); }); String deviceImeiListStr = JSONUtil.toJsonStr(deviceImeiList); - RedisUtils.setCacheObject(redisKey, deviceImeiListStr , Duration.ofSeconds(40)); + RedisUtils.setCacheObject(redisKey, deviceImeiListStr , Duration.ofSeconds(functionAccessBatchAspect.batchMaxTimeOut())); } // 执行原方法