From 353a4cc83b69639782318a0859b15076ea848592 Mon Sep 17 00:00:00 2001 From: xy <748613696@qq.com> Date: Fri, 17 Apr 2026 16:19:10 +0800 Subject: [PATCH] =?UTF-8?q?refactor(event):=20=E9=87=8D=E6=9E=84=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E7=BB=9F=E8=AE=A1=E5=8A=9F=E8=83=BD=E5=B9=B6=E8=BF=81?= =?UTF-8?q?=E7=A7=BB=E6=B6=88=E6=81=AF=E6=8E=A8=E9=80=81=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除暂态事件统计相关接口和实现方法 - 删除EventStatisticsVo相关代码 - 将设备消息推送功能从CsEventPOServiceImpl迁移到新创建的DeviceMessageService - 新增DeviceMessageFeignClient用于服务间调用 - 实现DeviceMessageController提供统一的消息推送接口 --- .../api/DeviceMessageFeignClient.java | 30 ++++++ .../DeviceMessageClientFallbackFactory.java | 44 +++++++++ .../csdevice/param/DeviceMessageParam.java | 20 ++++ .../message/DeviceMessageController.java | 70 +++++++++++++ .../service/DeviceMessageService.java | 17 ++++ .../impl/DeviceMessageServiceImpl.java | 77 +++++++++++++++ .../controller/CsEventController.java | 10 -- .../csharmonic/service/CsEventPOService.java | 2 - .../service/impl/CsEventPOServiceImpl.java | 99 +++---------------- 9 files changed, 269 insertions(+), 100 deletions(-) create mode 100644 cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/DeviceMessageFeignClient.java create mode 100644 cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/fallback/DeviceMessageClientFallbackFactory.java create mode 100644 cs-device/cs-device-api/src/main/java/com/njcn/csdevice/param/DeviceMessageParam.java create mode 100644 cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/message/DeviceMessageController.java create mode 100644 cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/DeviceMessageService.java create mode 100644 cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/DeviceMessageServiceImpl.java diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/DeviceMessageFeignClient.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/DeviceMessageFeignClient.java new file mode 100644 index 0000000..6ac3327 --- /dev/null +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/DeviceMessageFeignClient.java @@ -0,0 +1,30 @@ +package com.njcn.csdevice.api; + +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.csdevice.api.fallback.DeviceMessageClientFallbackFactory; +import com.njcn.csdevice.param.DeviceMessageParam; +import com.njcn.user.pojo.po.User; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +/** + * @author xy + */ +@FeignClient(value = ServerInfo.CS_DEVICE_BOOT, path = "/deviceMessage", fallbackFactory = DeviceMessageClientFallbackFactory.class,contextId = "deviceMessage") +public interface DeviceMessageFeignClient { + + @PostMapping("/getEventUserByDeviceId") + @ApiOperation("根据设备获取需要推送的用户id") + HttpResult> getEventUserByDeviceId(@RequestParam("devId") String devId, @RequestParam("isAdmin") Boolean isAdmin); + + @PostMapping("/getSendUserByType") + @ApiOperation("根据事件类型和用户id查询打开推送的用户信息") + HttpResult> getSendUserByType(@RequestBody DeviceMessageParam param); + +} diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/fallback/DeviceMessageClientFallbackFactory.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/fallback/DeviceMessageClientFallbackFactory.java new file mode 100644 index 0000000..62ff510 --- /dev/null +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/fallback/DeviceMessageClientFallbackFactory.java @@ -0,0 +1,44 @@ +package com.njcn.csdevice.api.fallback; + +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.csdevice.api.DeviceMessageFeignClient; +import com.njcn.csdevice.param.DeviceMessageParam; +import com.njcn.user.pojo.po.User; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author xy + */ +@Slf4j +@Component +public class DeviceMessageClientFallbackFactory implements FallbackFactory { + @Override + public DeviceMessageFeignClient create(Throwable cause) { + //判断抛出异常是否为解码器抛出的业务异常 + Enum exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK; + if (cause.getCause() instanceof BusinessException) { + BusinessException businessException = (BusinessException) cause.getCause(); + } + Enum finalExceptionEnum = exceptionEnum; + return new DeviceMessageFeignClient() { + + @Override + public HttpResult> getEventUserByDeviceId(String devId, Boolean isAdmin) { + log.error("{}异常,降级处理,异常为:{}","根据设备获取需要推送的用户id数据异常",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + @Override + public HttpResult> getSendUserByType(DeviceMessageParam param) { + log.error("{}异常,降级处理,异常为:{}","根据事件类型和用户id查询打开推送的用户信息数据异常",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + }; + } +} diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/param/DeviceMessageParam.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/param/DeviceMessageParam.java new file mode 100644 index 0000000..ed7fddf --- /dev/null +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/param/DeviceMessageParam.java @@ -0,0 +1,20 @@ +package com.njcn.csdevice.param; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author xy + */ +@Data +public class DeviceMessageParam { + + @ApiModelProperty("用户id集合") + private List userList; + + @ApiModelProperty("事件类型 0:暂态 1:稳态 2:运行 3:告警") + private Integer eventType; + +} diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/message/DeviceMessageController.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/message/DeviceMessageController.java new file mode 100644 index 0000000..3a92ac4 --- /dev/null +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/message/DeviceMessageController.java @@ -0,0 +1,70 @@ +package com.njcn.csdevice.controller.message; + + +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.csdevice.param.DeviceMessageParam; +import com.njcn.csdevice.pojo.param.DataArrayParam; +import com.njcn.csdevice.pojo.po.CsDataArray; +import com.njcn.csdevice.pojo.vo.DataArrayTreeVO; +import com.njcn.csdevice.pojo.vo.DeviceManagerDetailVO; +import com.njcn.csdevice.service.DeviceMessageService; +import com.njcn.csdevice.service.ICsDataArrayService; +import com.njcn.user.pojo.po.User; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; + +import java.util.List; + +/** + *

+ * 详细数据表 前端控制器 + *

+ * + * @author xuyang + * @since 2023-05-31 + */ +@Slf4j +@RestController +@RequestMapping("/deviceMessage") +@Api(tags = "App消息推送管理") +@AllArgsConstructor +public class DeviceMessageController extends BaseController { + + private final DeviceMessageService deviceMessageService; + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getEventUserByDeviceId") + @ApiOperation("根据设备获取需要推送的用户id") + @ApiImplicitParams({ + @ApiImplicitParam(name = "devId", value = "设备id", required = true, paramType = "query"), + @ApiImplicitParam(name = "isAdmin", value = "是否需要推送给管理员", required = true, paramType = "query") + }) + public HttpResult> getEventUserByDeviceId(@RequestParam("devId") String devId, @RequestParam("isAdmin") Boolean isAdmin){ + String methodDescribe = getMethodDescribe("getEventUserByDeviceId"); + List list = deviceMessageService.getEventUserByDeviceId(devId,isAdmin); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getSendUserByType") + @ApiOperation("根据事件类型和用户id查询打开推送的用户信息") + @ApiImplicitParam(name = "param", value = "参数", required = true, paramType = "query") + public HttpResult> getSendUserByType(@RequestBody DeviceMessageParam param){ + String methodDescribe = getMethodDescribe("getSendUserByType"); + List list = deviceMessageService.getSendUserByType(param); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); + } + +} + diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/DeviceMessageService.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/DeviceMessageService.java new file mode 100644 index 0000000..f6f1180 --- /dev/null +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/DeviceMessageService.java @@ -0,0 +1,17 @@ +package com.njcn.csdevice.service; + +import com.njcn.csdevice.param.DeviceMessageParam; +import com.njcn.user.pojo.po.User; + +import java.util.List; + +/** + * @author xy + */ +public interface DeviceMessageService { + + List getEventUserByDeviceId(String devId, Boolean isAdmin); + + List getSendUserByType(DeviceMessageParam param); + +} diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/DeviceMessageServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/DeviceMessageServiceImpl.java new file mode 100644 index 0000000..da12ccf --- /dev/null +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/DeviceMessageServiceImpl.java @@ -0,0 +1,77 @@ +package com.njcn.csdevice.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import com.njcn.csdevice.api.CsDeviceUserFeignClient; +import com.njcn.csdevice.param.DeviceMessageParam; +import com.njcn.csdevice.service.DeviceMessageService; +import com.njcn.user.api.AppInfoSetFeignClient; +import com.njcn.user.api.AppUserFeignClient; +import com.njcn.user.api.UserFeignClient; +import com.njcn.user.pojo.po.User; +import com.njcn.user.pojo.po.app.AppInfoSet; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +class DeviceMessageServiceImpl implements DeviceMessageService { + + private final AppUserFeignClient appUserFeignClient; + private final CsDeviceUserFeignClient csDeviceUserFeignClient; + private final AppInfoSetFeignClient appInfoSetFeignClient; + private final UserFeignClient userFeignClient; + + @Override + public List getEventUserByDeviceId(String devId, Boolean isAdmin) { + List list = csDeviceUserFeignClient.findUserById(devId).getData(); + List result = new ArrayList<>(list); + if (isAdmin) { + List adminUser = appUserFeignClient.getAdminInfo().getData(); + List adminList = adminUser.stream().map(User::getId).collect(Collectors.toList()); + result.addAll(adminList); + } + if (CollectionUtil.isNotEmpty(result)) { + result = result.stream().distinct().collect(Collectors.toList()); + } + return result; + } + + @Override + public List getSendUserByType(DeviceMessageParam param) { + List users = new ArrayList<>(); + List result = new ArrayList<>(); + List appInfoSet = appInfoSetFeignClient.getListById(param.getUserList()).getData(); + switch (param.getEventType()) { + case 0: + result = appInfoSet.stream() + .filter(person -> person.getEventInfo() == 1) + .map(AppInfoSet::getUserId).collect(Collectors.toList()); + break; + case 1: + result = appInfoSet.stream() + .filter(person -> person.getHarmonicInfo() == 1) + .map(AppInfoSet::getUserId).collect(Collectors.toList()); + break; + case 2: + result = appInfoSet.stream() + .filter(person -> person.getRunInfo() == 1) + .map(AppInfoSet::getUserId).collect(Collectors.toList()); + break; + case 3: + result = appInfoSet.stream() + .filter(person -> person.getAlarmInfo() == 1) + .map(AppInfoSet::getUserId).collect(Collectors.toList()); + break; + default: + break; + } + if (CollectionUtil.isNotEmpty(result)){ + users = userFeignClient.appuserByIdList(result).getData(); + } + return users; + } +} diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/CsEventController.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/CsEventController.java index ed6f8a7..71732c8 100644 --- a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/CsEventController.java +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/CsEventController.java @@ -176,16 +176,6 @@ public class CsEventController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); } - @OperateInfo(info = LogEnum.BUSINESS_COMMON) - @PostMapping("/eventStatistics") - @ApiOperation("暂态事件统计") - @ApiImplicitParam(name = "param", value = "事件信息", required = true) - public HttpResult> getEventStatistics(@RequestBody CsEventUserQueryParam param) { - String methodDescribe = getMethodDescribe("getEventByTime"); - List list = csEventPOService.getEventStatistics(param); - return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); - } - @OperateInfo(info = LogEnum.BUSINESS_COMMON) @PostMapping("/getDevAlarmList") @ApiOperation("获取设备运行告警事件") diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/CsEventPOService.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/CsEventPOService.java index 2154008..9ba8b57 100644 --- a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/CsEventPOService.java +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/CsEventPOService.java @@ -70,8 +70,6 @@ public interface CsEventPOService extends IService{ List getEventByTime(List lineList, String startTime, String endTime); - List getEventStatistics(CsEventUserQueryParam param); - List getEventDesc(List lineIdList); //获取设备告警事件详情 diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/CsEventPOServiceImpl.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/CsEventPOServiceImpl.java index 48d5177..c39e1ce 100644 --- a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/CsEventPOServiceImpl.java +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/CsEventPOServiceImpl.java @@ -16,10 +16,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.njcn.access.pojo.dto.NoticeUserDto; import com.njcn.access.utils.SendMessageUtil; import com.njcn.common.pojo.exception.BusinessException; -import com.njcn.csdevice.api.CsDeviceUserFeignClient; import com.njcn.csdevice.api.CsLedgerFeignClient; import com.njcn.csdevice.api.CsLineFeignClient; +import com.njcn.csdevice.api.DeviceMessageFeignClient; import com.njcn.csdevice.enums.AlgorithmResponseEnum; +import com.njcn.csdevice.param.DeviceMessageParam; import com.njcn.csdevice.pojo.dto.DevDetailDTO; import com.njcn.csdevice.pojo.po.CsLinePO; import com.njcn.csdevice.pojo.vo.DataGroupEventVO; @@ -36,7 +37,6 @@ import com.njcn.csharmonic.pojo.po.CsEventUserPO; import com.njcn.csharmonic.pojo.vo.CsEventVO; import com.njcn.csharmonic.pojo.vo.CsWarnDescVO; import com.njcn.csharmonic.pojo.vo.EventDetailVO; -import com.njcn.csharmonic.pojo.vo.EventStatisticsVo; import com.njcn.csharmonic.service.CsEventPOService; import com.njcn.csharmonic.service.CsEventUserPOService; import com.njcn.event.common.mapper.WlRmpEventDetailMapper; @@ -62,11 +62,7 @@ import com.njcn.system.enums.DicDataEnum; import com.njcn.system.pojo.po.DictData; import com.njcn.system.pojo.po.EleEpdPqd; import com.njcn.system.pojo.po.EleEvtParm; -import com.njcn.user.api.AppInfoSetFeignClient; -import com.njcn.user.api.AppUserFeignClient; -import com.njcn.user.api.UserFeignClient; import com.njcn.user.pojo.po.User; -import com.njcn.user.pojo.po.app.AppInfoSet; import com.njcn.web.factory.PageFactory; import com.njcn.web.utils.RequestUtil; import lombok.RequiredArgsConstructor; @@ -124,13 +120,9 @@ public class CsEventPOServiceImpl extends ServiceImpl queryEventList(CsEventUserQueryParam csEventUserQueryParam) { @@ -159,12 +151,6 @@ public class CsEventPOServiceImpl extends ServiceImpl result = new ArrayList<>(); - List eventUser = getEventUser(po.getDeviceId(),true); + List eventUser = deviceMessageClient.getEventUserByDeviceId(po.getDeviceId(),true).getData(); //针对用户记录未读信息和推送告警 eventUser.forEach(item->{ CsEventUserPO csEventUser = new CsEventUserPO(); @@ -435,7 +421,11 @@ public class CsEventPOServiceImpl extends ServiceImpl users = getSendUser(eventUser,0); + //获取打开推送的用户 + DeviceMessageParam param1 = new DeviceMessageParam(); + param1.setUserList(eventUser); + param1.setEventType(0); + List users = deviceMessageClient.getSendUserByType(param1).getData(); if (CollectionUtil.isNotEmpty(users)){ List devCodeList = users.stream().map(User::getDevCode).distinct().collect(Collectors.toList()); noticeUserDto.setPushClientId(devCodeList); @@ -445,7 +435,8 @@ public class CsEventPOServiceImpl extends ServiceImpl