liwenxuan 7 months ago
parent
commit
7250f360fe
  1. 11
      pom.xml
  2. 131
      src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/AlarmInfo2MqttJob.java
  3. 98
      src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/SensorDataTopicMqttJobHandler.java
  4. 84
      src/main/java/com/hxjt/dataupload/utils/ExcelDataExtraction.java
  5. 14
      src/main/resources/application-dev.yml

11
pom.xml

@ -201,6 +201,17 @@
<version>3.13.6</version> <version>3.13.6</version>
</dependency> </dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
</dependencies> </dependencies>

131
src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/AlarmInfo2MqttJob.java

@ -1,131 +0,0 @@
package com.hxjt.dataupload.jobhandler.mqtt.job.user.jobhandler;
import cn.hutool.json.JSONUtil;
import com.hxjt.dataupload.jobhandler.mqtt.enums.AlarmType;
import com.hxjt.dataupload.jobhandler.mqtt.job.user.domain.AlarmInfoHx;
import com.hxjt.dataupload.jobhandler.mqtt.job.user.domain.AlarmInfoIot;
import com.hxjt.dataupload.mqtt.MqttClient;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
/*
* @description: 报警信息推送
* @author: ZhangRY
* @date: 2025/4/9 10:51
* @param: null
* @return: null
**/
@Component
@Slf4j
public class AlarmInfo2MqttJob {
@Resource
MqttClient mqttClient;
@Value("${spring.mqtt.deviceTopic:}")
private String deviceTopic;
@Value("${user.token.containerId:}")
private String containerId;
@Resource
RestTemplate restTemplate;
@Value("${alarm.real.url:}")
private String alarmUrl;
@Value("${alarm.real.code:}")
private String codeAlarm;
@XxlJob("alarmInfo2MqttJobHandler")
public void alarmInfo2MqttJobHandler() throws Exception {
try {
XxlJobHelper.log("Alarm info To Mqtt Job Handler Beginning.");
ResponseEntity<Map> forEntity = restTemplate.getForEntity(alarmUrl, Map.class);
Map body = forEntity.getBody();
List<Map<String,Object>> data = (List<Map<String,Object>>)body.get("data");
log.info(">>>>>>>>>>>>>>>>>>data="+data.size());
XxlJobHelper.log(">>>>>>>>>>>>>>>>>>data="+data.size());
data.forEach(alarmMap -> {
try {
AlarmInfoIot alarmInfoIot = new AlarmInfoIot();
AlarmInfoHx alarmInfoHx = new AlarmInfoHx();
Object id = alarmMap.get("id");
alarmInfoHx.setUniqueId(id != null ? containerId + id : "");
alarmInfoHx.setContainerId(containerId);
Object deviceNo = alarmMap.get("deviceNo");
alarmInfoHx.setDeviceCode(deviceNo != null ? deviceNo.toString() : "");
Object alarmType = alarmMap.get("warningType");
String code = alarmType.toString();
if(codeAlarm.equals(code)||"2".equals(code)||"3".equals(code)||"8".equals(code)||"15".equals(code)||"16".equals(code)) {
log.info(">>>>>>>>>>>>>>>>>>>>>>>>>alarm occur");
XxlJobHelper.log(">>>>>>>>>>>>>>>>>>>>>>>>>alarm occur");
if (alarmType != null) {
String contentByCode = AlarmType.getContentByCode(code);
alarmInfoHx.setAlarmType(contentByCode);
alarmInfoHx.setAlarmContent(contentByCode);
}
Object layer = alarmMap.get("factory");
alarmInfoHx.setLayerId(layer != null ? layer.toString() : "");
Object area = alarmMap.get("area");
alarmInfoHx.setSecAreaId(area != null ? area.toString() : "");
Object areaName = alarmMap.get("areaName");
alarmInfoHx.setSecAreaName(areaName != null ? areaName.toString() : "");
Object latitude = alarmMap.get("latitude");
alarmInfoHx.setX(latitude != null ? new Double(latitude.toString()) : 0);
Object longitude = alarmMap.get("longitude");
alarmInfoHx.setY(longitude != null ? new Double(longitude.toString()) : 0);
Object dateTime = alarmMap.get("warningtime");
log.info(">>>>>>>>>>>>>>>>>>>>>>>>>dateTime="+dateTime);
XxlJobHelper.log(">>>>>>>>>>>>>>>>>>>>>>>>>dateTime="+dateTime);
if (dateTime != null) {
try {
Date date = new Date(Long.parseLong(dateTime.toString()));
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sf.setTimeZone(TimeZone.getTimeZone("UTC"));
String dateStr = sf.format(date);
alarmInfoHx.setDateTime(dateStr);
} catch (NumberFormatException e) {
log.info(">>>>>>>>>>>>>>>>>>>>>>>>>exception occur"+e.getMessage());
XxlJobHelper.log(">>>>>>>>>>>>>>>>>>>>>>>>>exception occur"+e.getMessage());
alarmInfoHx.setDateTime(dateTime.toString());
}
}
Object isHandle = alarmMap.get("isHandle");
alarmInfoHx.setDealStatus(isHandle != null ? ((boolean) isHandle == false ? "0" : "1") : "");
alarmInfoIot.setData(alarmInfoHx);
alarmInfoIot.setDataType("alarm");
String jsonData = JSONUtil.toJsonStr(alarmInfoIot);
log.info(jsonData);
XxlJobHelper.log("mqtt push data : : " + jsonData);
mqttClient.publish(0, false, deviceTopic, jsonData);
}
} catch (Exception ex) {
ex.printStackTrace();
log.info(">>>>>>>>>>>>>>>>>>>>>>>>>exception occur"+ex.getMessage());
XxlJobHelper.log(">>>>>>>>>>>>>>>>>>>>>>>>>exception occur"+ex.getMessage());
}
});
} catch (Exception e) {
e.printStackTrace();
}
log.info(">>>>>>>>>>>>>>>Alarm info mqtt push finished!");
XxlJobHelper.log(">>>>>>>>>>>>>>>Alarm info mqtt push finished!");
}
}

98
src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/SensorDataTopicMqttJobHandler.java

@ -0,0 +1,98 @@
package com.hxjt.dataupload.jobhandler.mqtt.job.user.jobhandler;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson2.JSONObject;
import com.hxjt.dataupload.jobhandler.mqtt.enums.AlarmType;
import com.hxjt.dataupload.jobhandler.mqtt.job.user.domain.AlarmInfoHx;
import com.hxjt.dataupload.jobhandler.mqtt.job.user.domain.AlarmInfoIot;
import com.hxjt.dataupload.mqtt.MqttClient;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
import static com.hxjt.dataupload.utils.ExcelDataExtraction.extractData;
/*
* @description: 报警信息推送
* @author: ZhangRY
* @date: 2025/4/9 10:51
* @param: null
* @return: null
**/
@Component
@Slf4j
public class SensorDataTopicMqttJobHandler {
@Resource
MqttClient mqttClient;
@Value("${spring.mqtt.sensorDataTopic:}")
private String sensorDataTopic;
@Resource
RestTemplate restTemplate;
@XxlJob("sensorDataTopicMqttJobHandler")
public void execute() throws Exception {
try {
XxlJobHelper.log("sensorDataTopicMqttJobHandler Beginning.");
String filePath = "F://Users/liwenxuan/Desktop/环保上传园区/数据位号2025.3.4-1.xlsx"; // 请替换为实际的Excel文件路径
List<String> dataList = extractData(filePath);
dataList.forEach(id -> {
if(id.equals("DK$SO2_ZS_PV")||id.equals("DK$DLGL_GL_GL_DUST_ZS_PV")||id.equals("DK$DLGL_NOX_ZS_PV")||id.equals("DK$DLGL_SFLOW_PV")||id.equals("DK$DLGL_O2_PV")||id.equals("DK$TEMP_PV")||id.equals("DK$DLGL_HUM_PV")||id.equals("DK$DLGL_VELOCITY_PV")||id.equals("DK$DLGL_PRESS_PV")){
System.out.println(id);
//请求地址
String url = "http://172.20.5.120:29912/open/app/api/po/send/MkZSTLpZ7vHYcz2clyDMBuUnuqHX9A49?id=DK$1AT_HJ001_FLAG?id={id}";
//请求参数
Map<String, String> uriVariables = new HashMap<>();
uriVariables.put("id", id);
//发起请求,直接返回对象(带参数请求)
JSONObject responseBean = restTemplate.getForObject(url, JSONObject.class, uriVariables);
System.out.println(responseBean.toString());
}
});
//dataList.forEach(id -> {
try {
/*
String jsonData = JSONUtil.toJsonStr(alarmInfoIot);
log.info(jsonData);
XxlJobHelper.log("mqtt push data : : " + jsonData);
mqttClient.publish(0, false, deviceTopic, jsonData);*/
} catch (Exception ex) {
ex.printStackTrace();
log.info(">>>>>>>>>>>>>>>>>>>>>>>>>exception occur"+ex.getMessage());
XxlJobHelper.log(">>>>>>>>>>>>>>>>>>>>>>>>>exception occur"+ex.getMessage());
}
//});
} catch (Exception e) {
e.printStackTrace();
}
log.info(">>>>>>>>>>>>>>>Alarm info mqtt push finished!");
XxlJobHelper.log(">>>>>>>>>>>>>>>Alarm info mqtt push finished!");
}
}

84
src/main/java/com/hxjt/dataupload/utils/ExcelDataExtraction.java

@ -0,0 +1,84 @@
package com.hxjt.dataupload.utils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class ExcelDataExtraction {
public static List<String> extractData(String filePath) {
List<String> resultList = new ArrayList<>();
try (FileInputStream fis = new FileInputStream(new File(filePath))) {
Workbook workbook;
// 判断文件类型,避免OLE2NotOfficeXmlFileException异常
if (filePath.toLowerCase().endsWith(".xlsx")) {
workbook = new XSSFWorkbook(fis);
} else {
throw new IllegalArgumentException("Unsupported file format. Only.xlsx is supported for now.");
}
Sheet sheet = workbook.getSheetAt(0); // 假设数据在第一个sheet中
int headerRowIndex = 1; // 假设表头在第一行
Row headerRow = sheet.getRow(headerRowIndex);
int targetColumnIndex = -1;
for (int i = 0; i < headerRow.getLastCellNum(); i++) {
Cell cell = headerRow.getCell(i);
if (cell != null && "现数据中台位号".equals(cell.getStringCellValue())) {
targetColumnIndex = i;
break;
}
}
if (targetColumnIndex != -1) {
for (int rowIndex = headerRowIndex + 1; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
Row row = sheet.getRow(rowIndex);
if (row != null) {
Cell cell = row.getCell(targetColumnIndex);
if (cell != null) {
switch (cell.getCellType()) {
case STRING:
if(!StringUtils.isBlank(cell.getStringCellValue())){
resultList.add(cell.getStringCellValue());
}
break;
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
resultList.add(cell.getDateCellValue().toString());
} else {
resultList.add(String.valueOf(cell.getNumericCellValue()));
}
break;
case BOOLEAN:
resultList.add(String.valueOf(cell.getBooleanCellValue()));
break;
default:
if(!StringUtils.isBlank(cell.getStringCellValue())){
resultList.add(cell.toString());
}
}
}
}
}
}
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
return resultList;
}
/*public static void main(String[] args) {
String filePath = "F://Users/liwenxuan/Desktop/环保上传园区/数据位号2025.3.4-1.xlsx"; // 请替换为实际的Excel文件路径
List<String> dataList = extractData(filePath);
for (String data : dataList) {
System.out.println(data);
}
}*/
}

14
src/main/resources/application-dev.yml

@ -65,17 +65,15 @@ spring:
#设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源. #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源.
strict: false strict: false
mqtt: mqtt:
username: 10@ningyanghuagongchany20250328091457 username: 10@ningyanghuagongchany20250422172632
password: 4c0d00b8dcdd4809ad75ad1d0e38533c password: 9fabff0fe3d049af92329e29dd9af7e4
hostUrl: tcp://112.245.55.112:18183----- hostUrl: tcp://112.245.55.112:7379
clientId: 10@ningyanghuagongchany20250328091457 clientId: 10@ningyanghuagongchany20250422172632
defaultTopic: /indoor/10@ningyanghuagongchany20250328091457/thirdParty/sensorData sensorDataTopic: /iot/{clientId}/thirdParty/sensorData
timeout: 100 timeout: 100
keepalive: 60 keepalive: 60
enabled: true enabled: true
personTopic: /indoor/10@ningyanghuagongchany20250328091457/personInfo/up realtimeDataTopic: /iot/{clientId}/thirdParty/realtimeData
deviceTopic: /indoor/10@ningyanghuagongchany20250328091457/bluetooth/up
areaTopic: /indoor/10@ningyanghuagongchany20250328091457/statistics/up
xxl: xxl:
job: job:
admin: admin:

Loading…
Cancel
Save