From 6b24e49651d6f5744cc35c296b461efd185364f1 Mon Sep 17 00:00:00 2001 From: xy <748613696@qq.com> Date: Wed, 8 Apr 2026 10:18:07 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E8=87=AA=E5=8A=A8=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../njcn/access/api/CsDeviceFeignClient.java | 20 +++++++++++ .../CsDeviceClientFallbackFactory.java | 34 +++++++++++++++++++ .../access/controller/CsDeviceController.java | 15 ++++++++ .../CsLineLatestDataController.java | 2 +- .../stat/service/impl/StatServiceImpl.java | 8 ++++- 5 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 iot-access/access-api/src/main/java/com/njcn/access/api/CsDeviceFeignClient.java create mode 100644 iot-access/access-api/src/main/java/com/njcn/access/api/fallback/CsDeviceClientFallbackFactory.java diff --git a/iot-access/access-api/src/main/java/com/njcn/access/api/CsDeviceFeignClient.java b/iot-access/access-api/src/main/java/com/njcn/access/api/CsDeviceFeignClient.java new file mode 100644 index 0000000..3eead97 --- /dev/null +++ b/iot-access/access-api/src/main/java/com/njcn/access/api/CsDeviceFeignClient.java @@ -0,0 +1,20 @@ +package com.njcn.access.api; + +import com.njcn.access.api.fallback.CsDeviceClientFallbackFactory; +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.response.HttpResult; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @author xy + */ +@FeignClient(value = ServerInfo.ACCESS_BOOT, path = "/device", fallbackFactory = CsDeviceClientFallbackFactory.class,contextId = "device") + +public interface CsDeviceFeignClient { + + @PostMapping("/updateRunStatus") + HttpResult updateRunStatus(@RequestParam("nDid") String nDid, @RequestParam("runStatus") Integer runStatus); + +} diff --git a/iot-access/access-api/src/main/java/com/njcn/access/api/fallback/CsDeviceClientFallbackFactory.java b/iot-access/access-api/src/main/java/com/njcn/access/api/fallback/CsDeviceClientFallbackFactory.java new file mode 100644 index 0000000..bc974a1 --- /dev/null +++ b/iot-access/access-api/src/main/java/com/njcn/access/api/fallback/CsDeviceClientFallbackFactory.java @@ -0,0 +1,34 @@ +package com.njcn.access.api.fallback; + +import com.njcn.access.api.CsDeviceFeignClient; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author xy + */ +@Slf4j +@Component +public class CsDeviceClientFallbackFactory implements FallbackFactory { + @Override + public CsDeviceFeignClient create(Throwable cause) { + //判断抛出异常是否为解码器抛出的业务异常 + Enum exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK; + if (cause.getCause() instanceof BusinessException) { + BusinessException businessException = (BusinessException) cause.getCause(); + } + Enum finalExceptionEnum = exceptionEnum; + return new CsDeviceFeignClient() { + + @Override + public HttpResult updateRunStatus(String nDid, Integer runStatus) { + log.error("{}异常,降级处理,异常为:{}","云设备状态调整异常",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + }; + } +} diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/controller/CsDeviceController.java b/iot-access/access-boot/src/main/java/com/njcn/access/controller/CsDeviceController.java index c2d34ad..90f5143 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/controller/CsDeviceController.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/controller/CsDeviceController.java @@ -2,6 +2,7 @@ package com.njcn.access.controller; import com.njcn.access.param.DevAccessParam; import com.njcn.access.service.ICsDeviceService; +import com.njcn.access.service.ICsEquipmentDeliveryService; import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum; @@ -34,6 +35,7 @@ import org.springframework.web.bind.annotation.*; public class CsDeviceController extends BaseController { private final ICsDeviceService csDeviceService; + private final ICsEquipmentDeliveryService csEquipmentDeliveryService; @OperateInfo(info = LogEnum.BUSINESS_COMMON) @PostMapping("/register") @@ -130,4 +132,17 @@ public class CsDeviceController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, "success", methodDescribe); } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/updateRunStatus") + @ApiOperation("设备状态调整") + @ApiImplicitParams({ + @ApiImplicitParam(name = "nDid", value = "设备识别码", required = true), + @ApiImplicitParam(name = "status", value = "状态", required = true) + }) + public HttpResult updateRunStatus(@RequestParam String nDid, @RequestParam Integer runStatus){ + String methodDescribe = getMethodDescribe("updateRunStatus"); + csEquipmentDeliveryService.updateRunStatusBynDid(nDid,runStatus); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, "success", methodDescribe); + } + } diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/controller/CsLineLatestDataController.java b/iot-access/access-boot/src/main/java/com/njcn/access/controller/CsLineLatestDataController.java index 9e27a05..51b00bb 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/controller/CsLineLatestDataController.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/controller/CsLineLatestDataController.java @@ -32,7 +32,7 @@ import java.util.List; @Slf4j @RestController @RequestMapping("/csLineLatestData") -@Api(tags = "暂降事件") +@Api(tags = "治理设备模块运行状态记录") @AllArgsConstructor public class CsLineLatestDataController extends BaseController { diff --git a/iot-analysis/analysis-stat/stat-boot/src/main/java/com/njcn/stat/service/impl/StatServiceImpl.java b/iot-analysis/analysis-stat/stat-boot/src/main/java/com/njcn/stat/service/impl/StatServiceImpl.java index cd28333..4210b32 100644 --- a/iot-analysis/analysis-stat/stat-boot/src/main/java/com/njcn/stat/service/impl/StatServiceImpl.java +++ b/iot-analysis/analysis-stat/stat-boot/src/main/java/com/njcn/stat/service/impl/StatServiceImpl.java @@ -2,7 +2,9 @@ package com.njcn.stat.service.impl; import cn.hutool.core.collection.CollectionUtil; import com.alibaba.nacos.shaded.com.google.gson.Gson; +import com.njcn.access.api.CsDeviceFeignClient; import com.njcn.access.api.CsLineLatestDataFeignClient; +import com.njcn.access.enums.AccessEnum; import com.njcn.access.pojo.po.CsLineLatestData; import com.njcn.access.utils.ChannelObjectUtil; import com.njcn.common.pojo.exception.BusinessException; @@ -57,6 +59,7 @@ public class StatServiceImpl implements IStatService { private final RedisUtil redisUtil; private final ChannelObjectUtil channelObjectUtil; private final CsLineLatestDataFeignClient csLineLatestDataFeignClient; + private final CsDeviceFeignClient csDeviceFeignClient; private static final Map PHASE_MAPPING = new HashMap() {{ put("AB", "A"); put("BC", "B"); @@ -106,7 +109,6 @@ public class StatServiceImpl implements IStatService { //云前置设备 else if (Objects.equals(DicDataEnum.DEV_CLD.getCode(),code)) { lineId = appAutoDataMessage.getId() + appAutoDataMessage.getMsg().getClDid(); - } //获取当前设备信息 @@ -159,6 +161,10 @@ public class StatServiceImpl implements IStatService { csLineLatestData.setTimeId(Objects.isNull(time) ? LocalDateTime.now() : time); csLineLatestDataFeignClient.addData(csLineLatestData); } + //判断设备运行状态 + if (!Objects.isNull(po.getRunStatus()) && po.getRunStatus() == 1) { + csDeviceFeignClient.updateRunStatus(appAutoDataMessage.getId(), AccessEnum.ONLINE.getCode()); + } } System.gc(); }