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"; } 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æ¯åºç¨id @@ -59,6 +47,15 @@ } @GetMapping("/recalarm") public void testAlarm() { //æ°æ®æ ¼å¼ï¼{"174":[{"values":{"d1":12},"ts":"1721978780449"}]} 174æ¯åºç¨id //夿¡æ ¼å¼ï¼{"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.*"); 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(); 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; } } 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, "èå²äº§é"), 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); } /** * å¡«å åè¦ç详ç»ä¿¡æ¯ï¼çº§å«ï¼ä¿¡æ¯ï¼ä»£ç * @param alarm */ void fileAlarmDetail(Alarm alarm,PackedTelemetryData data){ alarm.setMessage(data.getValue()); } } 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; /** * ç®åçåºè¯¥åªæstateï¼outputåalarmææ°æ® */ @@ -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; } 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) { //å°æ°æ®æç §å·¥ä½idåç» 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); } } } } 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); }