diff --git a/analysis/event/event-api/pom.xml b/analysis/event/event-api/pom.xml index 9e8cf67..9c2716c 100644 --- a/analysis/event/event-api/pom.xml +++ b/analysis/event/event-api/pom.xml @@ -16,5 +16,30 @@ 8 8 + + + com.njcn + common-core + ${project.version} + + + + com.njcn + common-microservice + ${project.version} + + + com.njcn.platform + data-processing-api + 1.0.0 + compile + + + com.njcn.platform + message-api + 1.0.0 + compile + + diff --git a/analysis/event/event-api/src/main/java/com/njcn/event/api/EventAnalysisFeignClient.java b/analysis/event/event-api/src/main/java/com/njcn/event/api/EventAnalysisFeignClient.java new file mode 100644 index 0000000..b5dea9a --- /dev/null +++ b/analysis/event/event-api/src/main/java/com/njcn/event/api/EventAnalysisFeignClient.java @@ -0,0 +1,28 @@ +package com.njcn.event.api; + +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.event.api.fallback.EventAnalysisFeignClientFallbackFactory; +import com.njcn.message.messagedto.MessageDataDTO; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +/** + * Description: + * Date: 2025/01/15 下午 3:52【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@FeignClient( + value = ServerInfo.PLATFORM_STAT_BOOT, + path = "/eventAnalysis", + fallbackFactory = EventAnalysisFeignClientFallbackFactory.class, + contextId = "analysis") +public interface EventAnalysisFeignClient { + @PostMapping("/analysis") + HttpResult analysis(@RequestBody List messageList); +} diff --git a/analysis/event/event-api/src/main/java/com/njcn/event/api/fallback/EventAnalysisFeignClientFallbackFactory.java b/analysis/event/event-api/src/main/java/com/njcn/event/api/fallback/EventAnalysisFeignClientFallbackFactory.java new file mode 100644 index 0000000..a0c07ec --- /dev/null +++ b/analysis/event/event-api/src/main/java/com/njcn/event/api/fallback/EventAnalysisFeignClientFallbackFactory.java @@ -0,0 +1,44 @@ +package com.njcn.event.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.event.api.EventAnalysisFeignClient; +import com.njcn.event.utils.EventEnumUtil; +import com.njcn.message.messagedto.MessageDataDTO; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * Description: + * Date: 2025/01/15 下午 3:55【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Slf4j +@Component +public class EventAnalysisFeignClientFallbackFactory implements FallbackFactory { + + @Override + public EventAnalysisFeignClient create(Throwable throwable) { + //判断抛出异常是否为解码器抛出的业务异常 + Enum exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK; + if (throwable.getCause() instanceof BusinessException) { + BusinessException businessException = (BusinessException) throwable.getCause(); + exceptionEnum = EventEnumUtil.getExceptionEnum(businessException.getResult()); + } + Enum finalExceptionEnum = exceptionEnum; + return new EventAnalysisFeignClient() { + + @Override + public HttpResult analysis(List messageList) { + log.error("{}异常,降级处理,异常为:{}", "暂态消息数据解析", throwable.toString()); + throw new BusinessException(finalExceptionEnum); + } + }; + } +} diff --git a/analysis/event/event-api/src/main/java/com/njcn/event/api/fallback/package-info.java b/analysis/event/event-api/src/main/java/com/njcn/event/api/fallback/package-info.java new file mode 100644 index 0000000..119a422 --- /dev/null +++ b/analysis/event/event-api/src/main/java/com/njcn/event/api/fallback/package-info.java @@ -0,0 +1,8 @@ +/** + * Description:feign回调函数包 + * Date: 2025/01/23 下午 1:50【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +package com.njcn.event.api.fallback; \ No newline at end of file diff --git a/analysis/event/event-api/src/main/java/com/njcn/event/api/package-info.java b/analysis/event/event-api/src/main/java/com/njcn/event/api/package-info.java new file mode 100644 index 0000000..9dfbfcb --- /dev/null +++ b/analysis/event/event-api/src/main/java/com/njcn/event/api/package-info.java @@ -0,0 +1,8 @@ +/** + * Description:对外接口包 + * Date: 2025/01/23 下午 1:48【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +package com.njcn.event.api; \ No newline at end of file diff --git a/analysis/event/event-api/src/main/java/com/njcn/event/enums/EventResponseEnum.java b/analysis/event/event-api/src/main/java/com/njcn/event/enums/EventResponseEnum.java new file mode 100644 index 0000000..f197bbd --- /dev/null +++ b/analysis/event/event-api/src/main/java/com/njcn/event/enums/EventResponseEnum.java @@ -0,0 +1,23 @@ +package com.njcn.event.enums; + +import lombok.Getter; + +/** + * @author hongawen + * @version 1.0.0 + * @date 2021年12月20日 09:56 + */ +@Getter +public enum EventResponseEnum { + STAT_COMMON_ERROR("A00550","暂态数据解析模块异常"), + ; + + private final String code; + + private final String message; + + EventResponseEnum(String code, String message) { + this.code = code; + this.message = message; + } +} diff --git a/analysis/stat/stat-api/src/main/java/com/njcn/stat/messagedto/EventDTO.java b/analysis/event/event-api/src/main/java/com/njcn/event/messagedto/EventDTO.java similarity index 96% rename from analysis/stat/stat-api/src/main/java/com/njcn/stat/messagedto/EventDTO.java rename to analysis/event/event-api/src/main/java/com/njcn/event/messagedto/EventDTO.java index 9965de7..d60a9e4 100644 --- a/analysis/stat/stat-api/src/main/java/com/njcn/stat/messagedto/EventDTO.java +++ b/analysis/event/event-api/src/main/java/com/njcn/event/messagedto/EventDTO.java @@ -1,4 +1,4 @@ -package com.njcn.stat.messagedto; +package com.njcn.event.messagedto; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; diff --git a/analysis/event/event-api/src/main/java/com/njcn/event/messagedto/MessageEventDataSet.java b/analysis/event/event-api/src/main/java/com/njcn/event/messagedto/MessageEventDataSet.java new file mode 100644 index 0000000..0b757c2 --- /dev/null +++ b/analysis/event/event-api/src/main/java/com/njcn/event/messagedto/MessageEventDataSet.java @@ -0,0 +1,31 @@ +package com.njcn.event.messagedto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * Description: + * Date: 2024/11/8 14:11【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Data +public class MessageEventDataSet implements Serializable { + private Integer FLAG; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + @JsonSerialize(using = LocalDateTimeSerializer.class) + private LocalDateTime TIME; + @JsonProperty("VOLTAGE") + private EventDTO volTage; + +} diff --git a/analysis/event/event-boot/pom.xml b/analysis/event/event-boot/pom.xml index 5facfda..ff7ed20 100644 --- a/analysis/event/event-boot/pom.xml +++ b/analysis/event/event-boot/pom.xml @@ -38,6 +38,24 @@ mybatis-spring 2.0.5 + + com.njcn.platform + message-api + 1.0.0 + compile + + + com.njcn.platform + data-processing-api + 1.0.0 + compile + + + com.njcn.platform + event-api + 1.0.0 + compile + diff --git a/analysis/event/event-boot/src/main/java/com/njcn/event/controller/EventAnalysisController.java b/analysis/event/event-boot/src/main/java/com/njcn/event/controller/EventAnalysisController.java new file mode 100644 index 0000000..b926643 --- /dev/null +++ b/analysis/event/event-boot/src/main/java/com/njcn/event/controller/EventAnalysisController.java @@ -0,0 +1,48 @@ +package com.njcn.event.controller; + +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.event.service.EventAnalysisService; +import com.njcn.message.messagedto.MessageDataDTO; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * Description: + * Date: 2025/01/15 下午 2:10【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Slf4j +@RestController +@RequestMapping("/eventAnalysis") +@Api(tags = "事件解析") +@AllArgsConstructor +public class EventAnalysisController extends BaseController { + + private final EventAnalysisService eventAnalysisService; + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/analysis") + @ApiOperation("数据解析") + public HttpResult analysis(@RequestBody List messageList){ + String methodDescribe = getMethodDescribe("analysis"); + + eventAnalysisService.analysis(messageList); + + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, CommonResponseEnum.SUCCESS.getMessage(), methodDescribe); + } +} diff --git a/analysis/event/event-boot/src/main/java/com/njcn/event/service/EventAnalysisService.java b/analysis/event/event-boot/src/main/java/com/njcn/event/service/EventAnalysisService.java new file mode 100644 index 0000000..39e1504 --- /dev/null +++ b/analysis/event/event-boot/src/main/java/com/njcn/event/service/EventAnalysisService.java @@ -0,0 +1,17 @@ +package com.njcn.event.service; + + +import com.njcn.message.messagedto.MessageDataDTO; + +import java.util.List; + +/** + * Description: + * Date: 2025/01/15 下午 2:51【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +public interface EventAnalysisService { + void analysis(List messageList); +} diff --git a/analysis/event/event-boot/src/main/java/com/njcn/event/service/impl/EventAnalysisServiceImpl.java b/analysis/event/event-boot/src/main/java/com/njcn/event/service/impl/EventAnalysisServiceImpl.java new file mode 100644 index 0000000..ba8c179 --- /dev/null +++ b/analysis/event/event-boot/src/main/java/com/njcn/event/service/impl/EventAnalysisServiceImpl.java @@ -0,0 +1,67 @@ +package com.njcn.event.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.njcn.dataProcess.api.LnDataDealFeignClient; +import com.njcn.dataProcess.api.RmpEventDetailFeignClient; +import com.njcn.dataProcess.dto.*; +import com.njcn.event.messagedto.EventDTO; +import com.njcn.event.messagedto.MessageEventDataSet; +import com.njcn.event.service.EventAnalysisService; +import com.njcn.message.enums.DataTypeEnum; +import com.njcn.message.messagedto.MessageDataDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * Description: + * Date: 2025/01/15 下午 2:51【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Service +public class EventAnalysisServiceImpl implements EventAnalysisService { + + @Autowired + private RmpEventDetailFeignClient rmpEventDetailFeignClient; + + + @Override + public void analysis(List messageList) { + + + messageList.forEach(messageDataDTO->{ + Integer dataType = messageDataDTO.getDataType(); + String lineId = messageDataDTO.getMonitor(); + String value = messageDataDTO.getValue(); + + if(Objects.equals(DataTypeEnum.EVENT.getCode(),dataType)){ + MessageEventDataSet messageEventDataSet = JSONObject.parseObject(value, MessageEventDataSet.class); + RmpEventDetailDTO rmpEventDetailDTO = new RmpEventDetailDTO(); + EventDTO volTage = messageEventDataSet.getVolTage(); + if(Objects.nonNull(volTage)){ + rmpEventDetailDTO.setMeasurementPointId(lineId); + rmpEventDetailDTO.setEventType(volTage.getDiskind()); + rmpEventDetailDTO.setAdvanceType(volTage.getDiskind()); + + rmpEventDetailDTO.setStartTime(volTage.getStarttime()); + rmpEventDetailDTO.setDuration(volTage.getDur()); + rmpEventDetailDTO.setFeatureAmplitude(volTage.getMag()); + rmpEventDetailDTO.setPhase(volTage.getPhasic()); + rmpEventDetailDTO.setWavePath(volTage.getCfgFile().substring(0, volTage.getCfgFile().lastIndexOf("/"))); + + rmpEventDetailFeignClient.batchInsertion(rmpEventDetailDTO); + + } + + } + }); + + + } +} diff --git a/analysis/stat/stat-boot/src/main/java/com/njcn/stat/service/impl/MessageAnalysisServiceImpl.java b/analysis/stat/stat-boot/src/main/java/com/njcn/stat/service/impl/MessageAnalysisServiceImpl.java index dddf9ac..cad19bc 100644 --- a/analysis/stat/stat-boot/src/main/java/com/njcn/stat/service/impl/MessageAnalysisServiceImpl.java +++ b/analysis/stat/stat-boot/src/main/java/com/njcn/stat/service/impl/MessageAnalysisServiceImpl.java @@ -34,8 +34,8 @@ public class MessageAnalysisServiceImpl implements MessageAnalysisService { private LnDataDealFeignClient lnDataDealFeignClient; - @Autowired - private RmpEventDetailFeignClient rmpEventDetailFeignClient; +// @Autowired +// private RmpEventDetailFeignClient rmpEventDetailFeignClient; @Override public void analysis(List messageList) { //12张表数据 @@ -442,30 +442,32 @@ public class MessageAnalysisServiceImpl implements MessageAnalysisService { - }else if(Objects.equals(DataTypeEnum.EVENT.getCode(),dataType)){ - MessageEventDataSet messageEventDataSet = JSONObject.parseObject(value, MessageEventDataSet.class); - RmpEventDetailDTO rmpEventDetailDTO = new RmpEventDetailDTO(); - EventDTO volTage = messageEventDataSet.getVolTage(); - if(Objects.nonNull(volTage)){ - rmpEventDetailDTO.setMeasurementPointId(lineId); - rmpEventDetailDTO.setEventType(volTage.getDiskind()); - rmpEventDetailDTO.setAdvanceType(volTage.getDiskind()); - - rmpEventDetailDTO.setStartTime(volTage.getStarttime()); - rmpEventDetailDTO.setDuration(volTage.getDur()); - rmpEventDetailDTO.setFeatureAmplitude(volTage.getMag()); - rmpEventDetailDTO.setPhase(volTage.getPhasic()); - rmpEventDetailDTO.setWavePath(volTage.getCfgFile().substring(0, volTage.getCfgFile().lastIndexOf("/"))); - - - rmpEventDetailFeignClient.batchInsertion(rmpEventDetailDTO); - - } - - - - } + // todo 暂态数据切换到另外一个topic +// else if(Objects.equals(DataTypeEnum.EVENT.getCode(),dataType)){ +// MessageEventDataSet messageEventDataSet = JSONObject.parseObject(value, MessageEventDataSet.class); +// RmpEventDetailDTO rmpEventDetailDTO = new RmpEventDetailDTO(); +// EventDTO volTage = messageEventDataSet.getVolTage(); +// if(Objects.nonNull(volTage)){ +// rmpEventDetailDTO.setMeasurementPointId(lineId); +// rmpEventDetailDTO.setEventType(volTage.getDiskind()); +// rmpEventDetailDTO.setAdvanceType(volTage.getDiskind()); +// +// rmpEventDetailDTO.setStartTime(volTage.getStarttime()); +// rmpEventDetailDTO.setDuration(volTage.getDur()); +// rmpEventDetailDTO.setFeatureAmplitude(volTage.getMag()); +// rmpEventDetailDTO.setPhase(volTage.getPhasic()); +// rmpEventDetailDTO.setWavePath(volTage.getCfgFile().substring(0, volTage.getCfgFile().lastIndexOf("/"))); +// +// +// rmpEventDetailFeignClient.batchInsertion(rmpEventDetailDTO); +// +// } +// +// +// +// +// } }); LnDataDTO lnDataDTO = new LnDataDTO(); lnDataDTO.setDataVList(dataVList); diff --git a/message/message-api/src/main/java/com/njcn/message/enums/DeviceRebootType.java b/message/message-api/src/main/java/com/njcn/message/enums/DeviceRebootType.java new file mode 100644 index 0000000..2af4788 --- /dev/null +++ b/message/message-api/src/main/java/com/njcn/message/enums/DeviceRebootType.java @@ -0,0 +1,31 @@ +package com.njcn.message.enums; + +/** + * Description: + * Date: 2024/12/17 10:04【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +public interface DeviceRebootType { + /*** + * 1. 新增终端台账 + */ + String ADD_TERMINAL = "add_terminal"; + + /*** + * 1. 删除终端台账 + */ + String DELETE_TERMINAL = "delete_terminal"; + + + /*** + *修改终端 新增/删除/监测点台账 + */ + String LEDGER_MODIFY = "ledger_modify"; + /** + * Icd变更 + */ + String ICD_CHANGE = "icd_change"; + +} diff --git a/message/message-api/src/main/java/com/njcn/message/message/DeviceRebootMessage.java b/message/message-api/src/main/java/com/njcn/message/message/DeviceRebootMessage.java index 3885cfb..9f559a0 100644 --- a/message/message-api/src/main/java/com/njcn/message/message/DeviceRebootMessage.java +++ b/message/message-api/src/main/java/com/njcn/message/message/DeviceRebootMessage.java @@ -43,6 +43,7 @@ public class DeviceRebootMessage { private String series; //终端识别码 private String devKey; + private Integer processNo; // private List monitorData; diff --git a/message/message-api/src/main/java/com/njcn/message/utils/MessageEnumUtil.java b/message/message-api/src/main/java/com/njcn/message/utils/MessageEnumUtil.java index d249177..8ab4ef5 100644 --- a/message/message-api/src/main/java/com/njcn/message/utils/MessageEnumUtil.java +++ b/message/message-api/src/main/java/com/njcn/message/utils/MessageEnumUtil.java @@ -8,7 +8,7 @@ import com.njcn.common.utils.EnumUtils; import com.njcn.message.enums.MessageResponseEnum; import javax.validation.constraints.NotNull; -import java.util.Objects; +import java.util.*; /** * @author hongawen @@ -42,5 +42,20 @@ public class MessageEnumUtil { return commonResponseEnum; } + public static void main(String[] args) { + Map processCountMap = null; + processCountMap = new HashMap<>(); + processCountMap.put(1,0); + processCountMap.put(2,0); + processCountMap.put(3,0); + processCountMap.put(4,0); + //获取数量最少的线程号 + Optional minKey = processCountMap.entrySet() + .stream() + .min(Comparator.comparingInt(e -> e.getValue())) + .map(Map.Entry::getKey); + System.out.println(minKey.orElse(2)); + } + } diff --git a/message/message-boot/src/main/java/com/njcn/message/websocket/WebSocketServer.java b/message/message-boot/src/main/java/com/njcn/message/websocket/WebSocketServer.java index 837a125..193263f 100644 --- a/message/message-boot/src/main/java/com/njcn/message/websocket/WebSocketServer.java +++ b/message/message-boot/src/main/java/com/njcn/message/websocket/WebSocketServer.java @@ -2,8 +2,7 @@ package com.njcn.message.websocket; import com.alibaba.fastjson.JSONObject; -import com.njcn.device.pq.api.LineFeignClient; -import com.njcn.device.pq.pojo.vo.LineDetailDataVO; + import com.njcn.message.message.AskRealDataMessage; import com.njcn.message.produce.template.AskRealDataMessaggeTemplate; import com.njcn.middle.rocket.domain.BaseMessage;