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