From 312fd03ae1ee528892129a10630d44de92c73c37 Mon Sep 17 00:00:00 2001 From: yangys <y_ys79@sina.com> Date: 星期四, 05 九月 2024 11:41:20 +0800 Subject: [PATCH] 增加告警信息入库 --- collect/src/main/java/com/qianwen/mdc/collect/handler/PackedTelemetryDataHandlerSelector.java | 4 collect/src/main/java/com/qianwen/mdc/collect/service/PackedDataService.java | 2 collect/src/main/java/com/qianwen/mdc/collect/handler/AlarmDataHandler.java | 36 +++++- collect/src/main/java/com/qianwen/mdc/collect/service/AlarmService.java | 97 ++++++++++++++++ collect/src/main/java/com/qianwen/mdc/collect/controller/MqttController.java | 23 +-- collect/src/main/java/com/qianwen/mdc/collect/constants/IOTDBConstant.java | 6 + collect/src/main/java/com/qianwen/mdc/collect/dto/PackedTelemetryData.java | 2 collect/src/main/java/com/qianwen/mdc/collect/entity/iotdb/Alarm.java | 129 +++++++++++++++++++++ collect/src/main/java/com/qianwen/mdc/collect/enums/WorkstationParamTypeEnum.java | 3 9 files changed, 282 insertions(+), 20 deletions(-) diff --git a/collect/src/main/java/com/qianwen/mdc/collect/constants/IOTDBConstant.java b/collect/src/main/java/com/qianwen/mdc/collect/constants/IOTDBConstant.java index de069d2..654da18 100644 --- a/collect/src/main/java/com/qianwen/mdc/collect/constants/IOTDBConstant.java +++ b/collect/src/main/java/com/qianwen/mdc/collect/constants/IOTDBConstant.java @@ -26,4 +26,10 @@ * 鐘舵�佹ā鏉垮悕绉� state */ public static final String TEMPLATE_STATE = "state"; + + + /** + * 鍛婅妯℃澘鍚嶇О alarm + */ + public static final String TEMPLATE_ALARM = "alarm"; } diff --git a/collect/src/main/java/com/qianwen/mdc/collect/controller/MqttController.java b/collect/src/main/java/com/qianwen/mdc/collect/controller/MqttController.java index 31b7bf5..256c604 100644 --- a/collect/src/main/java/com/qianwen/mdc/collect/controller/MqttController.java +++ b/collect/src/main/java/com/qianwen/mdc/collect/controller/MqttController.java @@ -36,19 +36,7 @@ return "Message sent to topic " + topic; } - @GetMapping("/create") - public String create(@RequestParam String topic, @RequestParam String message) { - try { - iotdbCfg.getSessionPool().createTimeseries("root.f2.myt1", TSDataType.UNKNOWN, null, null); - } catch (IoTDBConnectionException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (StatementExecutionException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return "Message sent to topic " + topic; - } + @GetMapping("/rec2") public void testRec2() { //鏁版嵁鏍煎紡锛歿"174":[{"values":{"d1":12},"ts":"1721978780449"}]} 174鏄簲鐢╥d @@ -59,6 +47,15 @@ } + @GetMapping("/recalarm") + public void testAlarm() { + //鏁版嵁鏍煎紡锛歿"174":[{"values":{"d1":12},"ts":"1721978780449"}]} 174鏄簲鐢╥d + //澶氭潯鏍煎紡锛歿"174":[{"values":{"DeviceStatus":2},"ts":"1722478128278"},{"values":{"spindleSpeed":22},"ts":"1722478128281"}]} + String payload = "{\"174\":[{\"values\":{\"Alarm\":\"鍛婅淇℃伅1\"},\"ts\":\"1725504995056\"}]}"; + //payload = "{\"174\":[{\"values\":{\"Output\":11},\"ts\":\"1722478128278\"},{\"values\":{\"SpindleSpeed\":22},\"ts\":\"1722478128281\"}]}"; + recService.handle(payload); + } + @GetMapping("/tpl") public Object tpl(String tplname) throws StatementExecutionException, IoTDBConnectionException { boolean b = iotdbCfg.getSessionPool().checkTimeseriesExists("root.f2.output_22005.*"); diff --git a/collect/src/main/java/com/qianwen/mdc/collect/dto/PackedTelemetryData.java b/collect/src/main/java/com/qianwen/mdc/collect/dto/PackedTelemetryData.java index f5b021e..bd7908d 100644 --- a/collect/src/main/java/com/qianwen/mdc/collect/dto/PackedTelemetryData.java +++ b/collect/src/main/java/com/qianwen/mdc/collect/dto/PackedTelemetryData.java @@ -100,6 +100,8 @@ public Integer getParamType() { int result = WorkstationParamTypeEnum.OTHER.getType(); + + switch(this.name) { case "Output": result = WorkstationParamTypeEnum.OUTPUT.getType(); diff --git a/collect/src/main/java/com/qianwen/mdc/collect/entity/iotdb/Alarm.java b/collect/src/main/java/com/qianwen/mdc/collect/entity/iotdb/Alarm.java new file mode 100644 index 0000000..8ac61b5 --- /dev/null +++ b/collect/src/main/java/com/qianwen/mdc/collect/entity/iotdb/Alarm.java @@ -0,0 +1,129 @@ +package com.qianwen.mdc.collect.entity.iotdb; + +import org.apache.commons.lang3.builder.ToStringBuilder; +/** + * 鍛婅淇℃伅 + */ +public class Alarm { + private Long time; + private Long workstationId; + private String calendarCode; + private Integer factoryYear; + private Integer factoryMonth; + private Integer factoryWeek; + private Integer factoryDate; + private Integer shiftIndex; + private Integer shiftTimeType; + private String code; + private String message; + private String level; + + + public void setWorkstationId(final Long workstationId) { + this.workstationId = workstationId; + } + + + public void setCalendarCode(final String calendarCode) { + this.calendarCode = calendarCode; + } + + public void setFactoryYear(final Integer factoryYear) { + this.factoryYear = factoryYear; + } + + public void setFactoryMonth(final Integer factoryMonth) { + this.factoryMonth = factoryMonth; + } + + public void setFactoryWeek(final Integer factoryWeek) { + this.factoryWeek = factoryWeek; + } + + public void setFactoryDate(final Integer factoryDate) { + this.factoryDate = factoryDate; + } + + public void setShiftIndex(final Integer shiftIndex) { + this.shiftIndex = shiftIndex; + } + + public void setShiftTimeType(final Integer shiftTimeType) { + this.shiftTimeType = shiftTimeType; + } + + + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + public Alarm() { + } + + public Long getTime() { + return time; + } + public void setTime(Long time) { + this.time = time; + } + + public Long getWorkstationId() { + return this.workstationId; + } + + + public String getCalendarCode() { + return this.calendarCode; + } + + public Integer getFactoryYear() { + return this.factoryYear; + } + + public Integer getFactoryMonth() { + return this.factoryMonth; + } + + public Integer getFactoryWeek() { + return this.factoryWeek; + } + + public Integer getFactoryDate() { + return this.factoryDate; + } + + public Integer getShiftIndex() { + return this.shiftIndex; + } + + public Integer getShiftTimeType() { + return this.shiftTimeType; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + + public String getLevel() { + return level; + } + + + public void setLevel(String level) { + this.level = level; + } + +} diff --git a/collect/src/main/java/com/qianwen/mdc/collect/enums/WorkstationParamTypeEnum.java b/collect/src/main/java/com/qianwen/mdc/collect/enums/WorkstationParamTypeEnum.java index bf0ec72..e82b69e 100644 --- a/collect/src/main/java/com/qianwen/mdc/collect/enums/WorkstationParamTypeEnum.java +++ b/collect/src/main/java/com/qianwen/mdc/collect/enums/WorkstationParamTypeEnum.java @@ -4,6 +4,9 @@ OTHER(0, "鍏朵粬"), STATE(1, "鐘舵��"), OUTPUT(2, "浜ч噺"), + /** + * 3-ALARM + */ ALARM(3, "鎶ヨ"), PROGRAMNUM(4, "绋嬪簭鍙�"), PULSE_OUTPUT(5, "鑴夊啿浜ч噺"), diff --git a/collect/src/main/java/com/qianwen/mdc/collect/handler/AlarmDataHandler.java b/collect/src/main/java/com/qianwen/mdc/collect/handler/AlarmDataHandler.java index 99c5984..4fe5297 100644 --- a/collect/src/main/java/com/qianwen/mdc/collect/handler/AlarmDataHandler.java +++ b/collect/src/main/java/com/qianwen/mdc/collect/handler/AlarmDataHandler.java @@ -1,23 +1,47 @@ package com.qianwen.mdc.collect.handler; +import java.util.Arrays; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.qianwen.mdc.collect.dto.PackedTelemetryData; +import com.qianwen.mdc.collect.entity.iotdb.Alarm; +import com.qianwen.mdc.collect.service.AlarmService; @Component public class AlarmDataHandler implements TelemetryDataHandler { private static final Logger log = LoggerFactory.getLogger(AlarmDataHandler.class); + @Autowired + private AlarmService alarmService; @Override public void handleData(PackedTelemetryData data) { - /* - WorkstationOutput workstationOutput = TelemetryOutputWrapper.build().entityVO(data); - IOutputAggregateService outputAggregateService = (IOutputAggregateService) SpringUtil.getBean(IOutputAggregateService.class); - outputAggregateService.outputRealTimeAggregate(workstationOutput); - */ - log.info("鎶ヨtdengine 瀹炴椂鑱氬悎瀹屾垚:鏁版嵁{} "); + Alarm alarm = new Alarm();//Objects.requireNonNull(BeanUtil.copy(data, Alarm.class)); + alarm.setTime(data.getTime()); + alarm.setWorkstationId(data.getWorkstationId()); + alarm.setCalendarCode(data.getCalendarCode()); + alarm.setFactoryDate(data.getFactoryDate()); + alarm.setFactoryMonth(data.getFactoryMonth()); + alarm.setFactoryWeek(data.getFactoryWeek()); + alarm.setFactoryYear(data.getFactoryYear()); + alarm.setShiftIndex(data.getShiftIndex()); + alarm.setShiftTimeType(data.getShiftTimeType()); + + alarmService.saveAlarms(Arrays.asList(alarm)); + + log.info("鎶ヨ鏁版嵁澶勭悊瀹屾垚:鍛婅鏁版嵁{} ",alarm); + + } + + /** + * 濉厖鍛婅鐨勮缁嗕俊鎭紝绾у埆锛屼俊鎭紝浠g爜 + * @param alarm + */ + void fileAlarmDetail(Alarm alarm,PackedTelemetryData data){ + alarm.setMessage(data.getValue()); } } diff --git a/collect/src/main/java/com/qianwen/mdc/collect/handler/PackedTelemetryDataHandlerSelector.java b/collect/src/main/java/com/qianwen/mdc/collect/handler/PackedTelemetryDataHandlerSelector.java index fd1d44a..2cd9ace 100644 --- a/collect/src/main/java/com/qianwen/mdc/collect/handler/PackedTelemetryDataHandlerSelector.java +++ b/collect/src/main/java/com/qianwen/mdc/collect/handler/PackedTelemetryDataHandlerSelector.java @@ -16,6 +16,8 @@ private OutputDataHandler outputHandler; @Autowired private DeviceStatusDataHandler statusDataHandler; + @Autowired + private AlarmDataHandler alarmDataHandler; /** * 鐩墠鐪嬪簲璇ュ彧鏈塻tate锛宱utput鍜宎larm鏈夋暟鎹� */ @@ -35,6 +37,8 @@ return statusDataHandler; }else if(WorkstationParamTypeEnum.OUTPUT.getType().equals(paramType)){ return outputHandler; + }else if(WorkstationParamTypeEnum.ALARM.getType().equals(paramType) || WorkstationParamTypeEnum.ALARM_MSG.getType().equals(paramType) || WorkstationParamTypeEnum.ALARM_NO.getType().equals(paramType)){ + return alarmDataHandler; }else{ return null; } diff --git a/collect/src/main/java/com/qianwen/mdc/collect/service/AlarmService.java b/collect/src/main/java/com/qianwen/mdc/collect/service/AlarmService.java new file mode 100644 index 0000000..7df5364 --- /dev/null +++ b/collect/src/main/java/com/qianwen/mdc/collect/service/AlarmService.java @@ -0,0 +1,97 @@ +package com.qianwen.mdc.collect.service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.stream.Collectors; + +import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; +import org.apache.iotdb.tsfile.write.record.Tablet; +import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.qianwen.mdc.collect.config.IotDBSessionConfig; +import com.qianwen.mdc.collect.constants.IOTDBConstant; +import com.qianwen.mdc.collect.entity.iotdb.Alarm; +/** + * 璁惧鐘舵�佹櫘閫氭湇鍔� + */ +@Service +public class AlarmService{ + private static final Logger log = LoggerFactory.getLogger(AlarmService.class); + + @Autowired + private IotDBCommonService iotDBCommonService; + @Autowired + private IotDBSessionConfig iotdbConfig; + + static final List<MeasurementSchema> schemas; + + static { + schemas = new ArrayList<>(); + + schemas.add(new MeasurementSchema("workstation_id", TSDataType.INT64)); + schemas.add(new MeasurementSchema("calendar_code", TSDataType.TEXT)); + schemas.add(new MeasurementSchema("factory_year", TSDataType.INT32)); + schemas.add(new MeasurementSchema("factory_month", TSDataType.INT32)); + schemas.add(new MeasurementSchema("factory_week", TSDataType.INT32)); + schemas.add(new MeasurementSchema("factory_date", TSDataType.INT32)); + schemas.add(new MeasurementSchema("shift_index", TSDataType.INT32)); + schemas.add(new MeasurementSchema("shift_time_type", TSDataType.INT32)); + schemas.add(new MeasurementSchema("code", TSDataType.TEXT)); + schemas.add(new MeasurementSchema("message", TSDataType.TEXT)); + schemas.add(new MeasurementSchema("level", TSDataType.TEXT)); + } + + /** + * 淇濆瓨鍛婅鏁版嵁(state_{workstationId}) + * @param stateList + */ + public void saveAlarms(List<Alarm> alarmList) { + //灏嗘暟鎹寜鐓у伐浣峣d鍒嗙粍 + Map<Long,List<Alarm>> maps = alarmList.stream().collect(Collectors.groupingBy(Alarm::getWorkstationId)); + String deviceId; + Long wid; + + List<Alarm> alarms; + for(Entry<Long, List<Alarm>> entry: maps.entrySet()) { + wid = entry.getKey(); + + deviceId = IOTDBConstant.DB_PREFIX+"alarm_"+wid; + iotDBCommonService.setTemmplateIfNotSet(IOTDBConstant.TEMPLATE_ALARM, deviceId);//鎸傝浇妯℃澘 + + Tablet tablet = new Tablet(deviceId, schemas); + + alarms = entry.getValue(); + tablet.rowSize = alarms.size(); + Alarm alarm; + for(int i=0;i<alarms.size();i++) { + alarm = alarms.get(i); + tablet.addTimestamp(i, alarm.getTime()); + tablet.addValue("workstation_id", i, alarm.getWorkstationId()); + tablet.addValue("calendar_code", i, alarm.getCalendarCode()); + tablet.addValue("factory_year", i, alarm.getFactoryYear()); + tablet.addValue("factory_month", i, alarm.getFactoryMonth()); + tablet.addValue("factory_week", i, alarm.getFactoryWeek()); + tablet.addValue("factory_date", i, alarm.getFactoryDate()); + tablet.addValue("shift_index", i, alarm.getShiftIndex()); + tablet.addValue("shift_time_type", i, alarm.getShiftTimeType()); + tablet.addValue("code", i, alarm.getCode()); + tablet.addValue("message", i, alarm.getMessage()); + tablet.addValue("level", i, alarm.getLevel()); + } + try { + //姣忎釜宸ヤ綅鎵归噺鎻掑叆涓�娆℃暟鎹� + this.iotdbConfig.getSessionPool().insertAlignedTablet(tablet); + } catch (Exception e) { + log.error("淇濆瓨鍥哄畾鐐规暟鎹紓甯�",e); + } + + } + } + +} diff --git a/collect/src/main/java/com/qianwen/mdc/collect/service/PackedDataService.java b/collect/src/main/java/com/qianwen/mdc/collect/service/PackedDataService.java index 7a8a007..99392cd 100644 --- a/collect/src/main/java/com/qianwen/mdc/collect/service/PackedDataService.java +++ b/collect/src/main/java/com/qianwen/mdc/collect/service/PackedDataService.java @@ -47,7 +47,6 @@ private WorkstationCache workstationCache; @Autowired private TimeSliceCache timeSliceCache; - //private static String TEMPLATE_NAME = "process_param"; static { PROCESS_PARAM_MAP.put(1, "STATE"); @@ -100,6 +99,7 @@ pkData.setName(keys[j]);//鍙傛暟鍚嶇О fillByCalendar(pkData); + result.add(pkData); } -- Gitblit v1.9.3