From 049ec86f5ea24dacc9edbcce7ca14bbc744aa78b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=A8=E6=9C=A8c?= <857448963@qq.com> Date: Tue, 26 Dec 2023 09:28:34 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=B7=BB=E5=8A=A0pms=E5=9B=BD=E7=BD=91?= =?UTF-8?q?=E4=B8=8A=E9=80=81=E5=AE=9A=E6=97=B6=E6=8E=A5=E5=8F=A3=202.?= =?UTF-8?q?=E5=A4=84=E7=90=86=E4=B8=8A=E9=80=81=E5=9B=BD=E7=BD=91bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pms/api/GwMonitorPushFeignClient.java | 41 +++++ .../GwMonitorPushClientFallbackFactory.java | 50 ++++++ .../device/pms/pojo/param/MonitorParam.java | 5 + .../gwPush/GwMonitorPushController.java | 3 + .../mapping/StatationStatMapper.xml | 2 +- .../gwPush/impl/GwMonitorPushServiceImpl.java | 153 ++++++++++++++---- .../timer/tasks/PmsMonitorSendTaskRunner.java | 32 ++++ 7 files changed, 253 insertions(+), 33 deletions(-) create mode 100644 pqs-device/pms-device/pms-device-api/src/main/java/com/njcn/device/pms/api/GwMonitorPushFeignClient.java create mode 100644 pqs-device/pms-device/pms-device-api/src/main/java/com/njcn/device/pms/api/fallback/GwMonitorPushClientFallbackFactory.java create mode 100644 pqs-system/system-boot/src/main/java/com/njcn/system/timer/tasks/PmsMonitorSendTaskRunner.java diff --git a/pqs-device/pms-device/pms-device-api/src/main/java/com/njcn/device/pms/api/GwMonitorPushFeignClient.java b/pqs-device/pms-device/pms-device-api/src/main/java/com/njcn/device/pms/api/GwMonitorPushFeignClient.java new file mode 100644 index 000000000..e2989ec5c --- /dev/null +++ b/pqs-device/pms-device/pms-device-api/src/main/java/com/njcn/device/pms/api/GwMonitorPushFeignClient.java @@ -0,0 +1,41 @@ +package com.njcn.device.pms.api; + +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.device.pms.api.fallback.GwMonitorPushClientFallbackFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +/** + * pqs + * + * @author cdf + * @date 2023/12/22 + */ + +@FeignClient(value = ServerInfo.DEVICE, + path = "gwTerminalPush", + contextId = "gwTerminalPush", + fallbackFactory = GwMonitorPushClientFallbackFactory.class) +public interface GwMonitorPushFeignClient { + + /** + * 定时推送国网监测点 + * @author cdf + * @date 2023/12/22 + */ + @PostMapping("/pushMonitor") + HttpResult timeTaskPushMonitor(@RequestBody List ids); + + + /** + * 定时推送国网监测点 + * @author cdf + * @date 2023/12/22 + */ + @PostMapping("/pushMonitorOverLimit") + HttpResult pushMonitorOverLimit(@RequestBody List ids); +} diff --git a/pqs-device/pms-device/pms-device-api/src/main/java/com/njcn/device/pms/api/fallback/GwMonitorPushClientFallbackFactory.java b/pqs-device/pms-device/pms-device-api/src/main/java/com/njcn/device/pms/api/fallback/GwMonitorPushClientFallbackFactory.java new file mode 100644 index 000000000..8728866f6 --- /dev/null +++ b/pqs-device/pms-device/pms-device-api/src/main/java/com/njcn/device/pms/api/fallback/GwMonitorPushClientFallbackFactory.java @@ -0,0 +1,50 @@ +package com.njcn.device.pms.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.device.pms.api.GwMonitorPushFeignClient; +import com.njcn.device.pms.utils.PmsDeviceEnumUtil; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.time.LocalDate; +import java.util.List; + +/** + * @author yzh + * @date 2022/10/18 + */ + +@Slf4j +@Component +public class GwMonitorPushClientFallbackFactory implements FallbackFactory { + + @Override + public GwMonitorPushFeignClient create(Throwable throwable) { + //判断抛出异常是否为解码器抛出的业务异常 + Enum exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK; + if (throwable.getCause() instanceof BusinessException) { + BusinessException businessException = (BusinessException) throwable.getCause(); + exceptionEnum = PmsDeviceEnumUtil.getExceptionEnum(businessException.getResult()); + } + Enum finalExceptionEnum = exceptionEnum; + return new GwMonitorPushFeignClient() { + @Override + public HttpResult timeTaskPushMonitor(List ids) { + log.error("{}异常,降级处理,异常为:{}", LocalDate.now()+"定时推送主网监测点", throwable.toString()); + throw new BusinessException(finalExceptionEnum); + } + + @Override + public HttpResult pushMonitorOverLimit(List ids) { + log.error("{}异常,降级处理,异常为:{}", LocalDate.now()+"定时推送主网监测点限值", throwable.toString()); + throw new BusinessException(finalExceptionEnum); + } + + + + }; + } +} diff --git a/pqs-device/pms-device/pms-device-api/src/main/java/com/njcn/device/pms/pojo/param/MonitorParam.java b/pqs-device/pms-device/pms-device-api/src/main/java/com/njcn/device/pms/pojo/param/MonitorParam.java index 59a02e3a3..297ac1f1f 100644 --- a/pqs-device/pms-device/pms-device-api/src/main/java/com/njcn/device/pms/pojo/param/MonitorParam.java +++ b/pqs-device/pms-device/pms-device-api/src/main/java/com/njcn/device/pms/pojo/param/MonitorParam.java @@ -242,6 +242,11 @@ public class MonitorParam { @ApiModelProperty(value = "行业分类") private String tradeCode; + /** + * 牵引站id + */ + private String tractionId; + @Data public static class Info implements Serializable { @ApiModelProperty(name = "monitorTag",value = "监测点对象标签") diff --git a/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/controller/gwPush/GwMonitorPushController.java b/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/controller/gwPush/GwMonitorPushController.java index da71365ec..540bc324b 100644 --- a/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/controller/gwPush/GwMonitorPushController.java +++ b/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/controller/gwPush/GwMonitorPushController.java @@ -61,6 +61,9 @@ public class GwMonitorPushController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, msg, methodDescribe); } + + + /** * 推送监测点限值台账数据接口 * @author cdf diff --git a/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/mapper/majornetwork/mapping/StatationStatMapper.xml b/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/mapper/majornetwork/mapping/StatationStatMapper.xml index b33587fb8..62b27e5ab 100644 --- a/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/mapper/majornetwork/mapping/StatationStatMapper.xml +++ b/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/mapper/majornetwork/mapping/StatationStatMapper.xml @@ -57,7 +57,7 @@ or b.name like concat('%',#{baseParam.searchValue},'%') ) - order by a.Create_Time desc + order by a.Power_Name asc diff --git a/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/service/gwPush/impl/GwMonitorPushServiceImpl.java b/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/service/gwPush/impl/GwMonitorPushServiceImpl.java index 9c75719ec..4df8aa727 100644 --- a/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/service/gwPush/impl/GwMonitorPushServiceImpl.java +++ b/pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/service/gwPush/impl/GwMonitorPushServiceImpl.java @@ -1,6 +1,7 @@ package com.njcn.device.pms.service.gwPush.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.lang.UUID; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.IdUtil; @@ -24,6 +25,7 @@ import com.njcn.device.pms.service.gwPush.GwMonitorPushService; import com.njcn.device.pms.service.majornetwork.IMonitorService; import com.njcn.system.api.DicDataFeignClient; import com.njcn.system.api.DictTreeFeignClient; +import com.njcn.system.enums.DicDataEnum; import com.njcn.system.enums.DicDataTypeEnum; import com.njcn.system.pojo.po.DictData; import com.njcn.system.pojo.po.SysDicTreePO; @@ -42,6 +44,7 @@ import java.time.LocalDate; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * pqs @@ -71,6 +74,10 @@ public class GwMonitorPushServiceImpl implements GwMonitorPushService { @Override public String pushMonitor(List ids) { + if (ids.size() > 100) { + throw new BusinessException("一次最多上送100条数据"); + } + List pushResult = new ArrayList<>(); //电压等级 @@ -89,20 +96,20 @@ public class GwMonitorPushServiceImpl implements GwMonitorPushService { List tranDicList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.VOLTAGE_TRANSFORMER.getCode()).getData(); Map tranMap = tranDicList.stream().collect(Collectors.toMap(DictData::getId, Function.identity())); + DictData monitorStateDic = dicDataFeignClient.getDicDataByNameAndTypeName(DicDataTypeEnum.LINE_STATE.getName(), DicDataEnum.RUN.getName()).getData(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.in(Monitor::getId, ids).eq(Monitor::getStatus, DataStateEnum.ENABLE.getCode()); - List monitorList = monitorService.list(lambdaQueryWrapper); - - if (monitorList.size() > 100) { - throw new BusinessException("一次最多上送100条数据"); + if(CollUtil.isEmpty(ids)){ + lambdaQueryWrapper.in(Monitor::getMonitorUploadStatus, Stream.of(0,3).collect(Collectors.toList())).eq(Monitor::getMonitorState,monitorStateDic.getId()) + .eq(Monitor::getStatus, DataStateEnum.ENABLE.getCode()).eq(Monitor::getIsUpToGrid,1); + }else { + lambdaQueryWrapper.in(Monitor::getId, ids).eq(Monitor::getStatus, DataStateEnum.ENABLE.getCode()); + } + List monitorList = monitorService.list(lambdaQueryWrapper); + if(CollUtil.isEmpty(monitorList)){ + throw new BusinessException("未查询到有效监测点!"); } - - /*long count = monitorList.stream().filter(item->item.getMonitorUploadStatus() == 1).count(); - if (count > 0) { - throw new BusinessException("存在以上送监测点,请勿重复上送"); - }*/ - List stationIds = monitorList.stream().map(Monitor::getPowerrId).distinct().collect(Collectors.toList()); List terminalIds = monitorList.stream().map(Monitor::getTerminalId).distinct().collect(Collectors.toList()); @@ -223,40 +230,85 @@ public class GwMonitorPushServiceImpl implements GwMonitorPushService { + if(pushResult.size()>100){ + List> pushMonitorDTOList = ListUtil.split(pushResult,100); + + int countAll = 0; + for(List list : pushMonitorDTOList){ + SendParam sendParam = new SendParam(); + sendParam.setStats(list); + Map sendRes = GwSendUtil.send(sendParam, GWSendEnum.MONITOR); + List mIds = list.stream().map(PushMonitorDTO::getId).distinct().collect(Collectors.toList()); + + if (sendRes.containsKey("succeed")) { + String succeed = sendRes.get("succeed"); + if (succeed.indexOf("\\\"") != -1) { + succeed = succeed.replace("\\\"", "\""); + } + Map mapData = JSON.parseObject(succeed, Map.class); + String status = mapData.get("status").toString(); + if ("000000".equals(status)) { + //修改信息状态 + updateIsUploadHead(1, mIds); + String result = mapData.get("result").toString(); + Map mapCount = JSON.parseObject(result, Map.class); + int count = Integer.parseInt(mapCount.get("count").toString()); + countAll+=count; + } else { + String errors = mapData.get("errors").toString(); + throw new BusinessException("操作失败:" + status + "_" + errors); + } + } else { + throw new BusinessException("当前时间段国网上送请求过多,请稍后再试"); + } + } + return "操作成功:成功数据" + countAll + "条"; + }else { + SendParam sendParam = new SendParam(); + sendParam.setStats(pushResult); + Map sendRes = GwSendUtil.send(sendParam, GWSendEnum.MONITOR); + List mIds = monitorList.stream().map(Monitor::getId).distinct().collect(Collectors.toList()); + String msg = returnInformation(1, mIds, sendRes); + return msg; + } + - SendParam sendParam = new SendParam(); - sendParam.setStats(pushResult); - Map sendRes = GwSendUtil.send(sendParam, GWSendEnum.MONITOR); - List mIds = monitorList.stream().map(Monitor::getId).distinct().collect(Collectors.toList()); - String msg = returnInformation(1, mIds, sendRes); - return msg; } + + @Override public String pushMonitorOverLimit(List ids) { + if (ids.size() > 100) { + throw new BusinessException("一次最多上送100条数据"); + } + List pushResult = new ArrayList<>(); //电压等级 List voltageDicList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_VOLTAGE.getCode()).getData(); Map voltageMap = voltageDicList.stream().collect(Collectors.toMap(DictData::getId, Function.identity())); + DictData monitorStateDic = dicDataFeignClient.getDicDataByNameAndTypeName(DicDataTypeEnum.LINE_STATE.getName(), DicDataEnum.RUN.getName()).getData(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.in(Monitor::getId, ids).eq(Monitor::getStatus, DataStateEnum.ENABLE.getCode()); + if(CollUtil.isEmpty(ids)){ + lambdaQueryWrapper.in(Monitor::getMonitorUploadStatus, Stream.of(0,3).collect(Collectors.toList())).eq(Monitor::getMonitorState,monitorStateDic.getId()) + .eq(Monitor::getStatus, DataStateEnum.ENABLE.getCode()).eq(Monitor::getIsUpToGrid,1); + }else { + lambdaQueryWrapper.in(Monitor::getId, ids).eq(Monitor::getStatus, DataStateEnum.ENABLE.getCode()); + } List monitorList = monitorService.list(lambdaQueryWrapper); - if (monitorList.size() > 100) { - throw new BusinessException("一次最多上送100条数据"); + if(CollUtil.isEmpty(monitorList)){ + throw new BusinessException("未查询到有效监测点!"); } + List monitorIds = monitorList.stream().map(Monitor::getId).distinct().collect(Collectors.toList()); - /* long count = monitorList.stream().filter(item->item.getMonitorOverlimitStatus() == 1).count(); - if (count > 0) { - throw new BusinessException("存在以上送限值,请勿重复上送"); - }*/ - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(Overlimit::getId, ids); + queryWrapper.in(Overlimit::getId, monitorIds); List overlimitList = overlimitMapper.selectList(queryWrapper); Map map = overlimitList.stream().collect(Collectors.toMap(Overlimit::getId, Function.identity())); @@ -351,12 +403,49 @@ public class GwMonitorPushServiceImpl implements GwMonitorPushService { pushResult.add(monitorLimitDTO); } - SendParam sendParam = new SendParam(); - sendParam.setStats(pushResult); - Map sendRes = GwSendUtil.send(sendParam, GWSendEnum.LIMIT_CREATE); - List mIds = monitorList.stream().map(Monitor::getId).distinct().collect(Collectors.toList()); - String msg = returnInformation(2, mIds, sendRes); - return msg; + if(pushResult.size()>100){ + List> pushMonitorDTOList = ListUtil.split(pushResult,100); + + int countAll = 0; + for(List list : pushMonitorDTOList){ + SendParam sendParam = new SendParam(); + sendParam.setStats(list); + Map sendRes = GwSendUtil.send(sendParam, GWSendEnum.LIMIT_CREATE); + List mIds = list.stream().map(MonitorLimitDTO::getId).distinct().collect(Collectors.toList()); + + if (sendRes.containsKey("succeed")) { + String succeed = sendRes.get("succeed"); + if (succeed.indexOf("\\\"") != -1) { + succeed = succeed.replace("\\\"", "\""); + } + Map mapData = JSON.parseObject(succeed, Map.class); + String status = mapData.get("status").toString(); + if ("000000".equals(status)) { + //修改信息状态 + updateIsUploadHead(2, mIds); + String result = mapData.get("result").toString(); + Map mapCount = JSON.parseObject(result, Map.class); + int count = Integer.parseInt(mapCount.get("count").toString()); + countAll+=count; + } else { + String errors = mapData.get("errors").toString(); + throw new BusinessException("操作失败:" + status + "_" + errors); + } + } else { + throw new BusinessException("当前时间段国网上送请求过多,请稍后再试"); + } + } + return "操作成功:成功数据" + countAll + "条"; + }else { + SendParam sendParam = new SendParam(); + sendParam.setStats(pushResult); + Map sendRes = GwSendUtil.send(sendParam, GWSendEnum.LIMIT_CREATE); + List mIds = monitorList.stream().map(Monitor::getId).distinct().collect(Collectors.toList()); + String msg = returnInformation(2, mIds, sendRes); + return msg; + } + + } else { throw new BusinessException("暂无监测点信息"); } diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/timer/tasks/PmsMonitorSendTaskRunner.java b/pqs-system/system-boot/src/main/java/com/njcn/system/timer/tasks/PmsMonitorSendTaskRunner.java new file mode 100644 index 000000000..8a140f32f --- /dev/null +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/timer/tasks/PmsMonitorSendTaskRunner.java @@ -0,0 +1,32 @@ +package com.njcn.system.timer.tasks; + +import com.njcn.device.pms.api.GwMonitorPushFeignClient; +import com.njcn.device.pms.api.MonitorSendClient; +import com.njcn.device.pms.pojo.param.MonitorParam; +import com.njcn.system.service.SysDicTreePOService; +import com.njcn.system.timer.TimerTaskRunner; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; + + +/** + * + */ +@Component +@RequiredArgsConstructor +public class PmsMonitorSendTaskRunner implements TimerTaskRunner { + + private final GwMonitorPushFeignClient gwMonitorPushFeignClient; + + + @Override + public void action() { + + gwMonitorPushFeignClient.timeTaskPushMonitor(new ArrayList<>()); + + gwMonitorPushFeignClient.pushMonitorOverLimit(new ArrayList<>()); + + } +}