Browse Source

从数据中台获取到了环保测点基本信息

master
liwenxuan 7 months ago
parent
commit
3e460457e2
  1. 47
      src/main/java/com/hxjt/dataupload/jobhandler/mqtt/enums/AlarmType.java
  2. 38
      src/main/java/com/hxjt/dataupload/jobhandler/mqtt/enums/UserType.java
  3. 73
      src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/AlarmInfoHx.java
  4. 15
      src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/AlarmInfoIot.java
  5. 43
      src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/ApiResponse.java
  6. 54
      src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/AreaUserInfoHx.java
  7. 15
      src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/AreaUserInfoIot.java
  8. 65
      src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/DataPage.java
  9. 73
      src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/DeviceInfoHx.java
  10. 15
      src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/DeviceInfoIot.java
  11. 96
      src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/SensorDataRequestObj.java
  12. 40
      src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/UserBaseInfo.java
  13. 15
      src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/UserBaseInfoIot.java
  14. 114
      src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/AreaPersonInfo2MqttJob.java
  15. 97
      src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/DeviceInfo2MqttJob.java
  16. 65
      src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/SensorDataTopicMqttJobHandler.java
  17. 179
      src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/UserBaseInfo2MqttJob.java
  18. 20
      src/main/resources/application-dev.yml

47
src/main/java/com/hxjt/dataupload/jobhandler/mqtt/enums/AlarmType.java

@ -1,47 +0,0 @@
package com.hxjt.dataupload.jobhandler.mqtt.enums;
public enum AlarmType {
ALARM_1("1","禁区告警-区域"),
ALARM_2("2","超员告警-区域"),
ALARM_3("3","滞留告警-区域"),
ALARM_4("4","区域过短-区域"),
ALARM_5("5","禁静止超时-区域"),
ALARM_6("6","SOS"),
ALARM_7("7","闯入告警-围栏"),
ALARM_8("8","脱岗告警-围栏"),
ALARM_13("13","车辆超速"),
ALARM_14("14","人员卡充电告警"),
ALARM_15("15","缺员告警-区域"),
ALARM_16("16","脱岗告警-区域"),
ALARM_17("17","车辆路线偏移"),
ALARM_18("18","违规告警"),
ALARM_19("19","二道门离厂告警");
private final String alarmCode;
private final String alarmContent;
AlarmType(String alarmCode, String alarmContent) {
this.alarmCode = alarmCode;
this.alarmContent = alarmContent;
}
public String getAlarmCode() {
return alarmCode;
}
public String getAlarmContent() {
return alarmContent;
}
public static String getContentByCode(String code) {
for (AlarmType objEnum : AlarmType.values()) {
if(objEnum.getAlarmCode().equals(code)) {
return objEnum.getAlarmContent();
}
}
return null;
}
}

38
src/main/java/com/hxjt/dataupload/jobhandler/mqtt/enums/UserType.java

@ -1,38 +0,0 @@
package com.hxjt.dataupload.jobhandler.mqtt.enums;
public enum UserType {
ALARM_0("0","在职员工"),
ALARM_1("1","临时访客"),
ALARM_2("2","承包商员工"),
ALARM_3("3","物品"),
ALARM_4("4","车辆"),
ALARM_5("5","司机");
private final String alarmCode;
private final String alarmContent;
UserType(String alarmCode, String alarmContent) {
this.alarmCode = alarmCode;
this.alarmContent = alarmContent;
}
public String getAlarmCode() {
return alarmCode;
}
public String getAlarmContent() {
return alarmContent;
}
public static String getContentByCode(String code) {
for (UserType objEnum : UserType.values()) {
if(objEnum.getAlarmCode().equals(code)) {
return objEnum.getAlarmContent();
}
}
return null;
}
}

73
src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/AlarmInfoHx.java

@ -1,73 +0,0 @@
package com.hxjt.dataupload.jobhandler.mqtt.job.user.domain;
import lombok.Data;
@Data
public class AlarmInfoHx {
/**
* 唯一标示
*/
private String uniqueId;
/**
* 企业容器id
*/
private String containerId ="ningyanghuagongchany";
/**
* 设备编号
*/
private String deviceCode;
/**
* 告警类型
*/
private String alarmType;
/**
* 告警内容
*/
private String alarmContent;
/**
* 楼层ID
*/
private String layerId;
/**
* 一级区域id
*/
private String firAreaId = "HXGK0001";
/**
* 一级区域名称
*/
private String firAreaName = "恒信高科";
/**
*
*/
private String userOrgCode = "370910170";
/**
*
*/
private String userOrgName = "山东恒信高科能源有限公司";
/**
* 二级区域id
*/
private String secAreaId;
/**
* 二级区域名称
*/
private String secAreaName;
/**
* 纬度
*/
private Double x;
/**
* 经度
*/
private Double y;
/**
* 定位时间yyyy-MM-dd HH:mm:ss
*/
private String dateTime;
/**
* 处理状态0待处理1已处理
*/
private String dealStatus;
}

15
src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/AlarmInfoIot.java

@ -1,15 +0,0 @@
package com.hxjt.dataupload.jobhandler.mqtt.job.user.domain;
import lombok.Data;
@Data
public class AlarmInfoIot {
/**
* 数据类型
*/
private String dataType ="alarm";
/**
* 人员信息
*/
private AlarmInfoHx data;
}

43
src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/ApiResponse.java

@ -0,0 +1,43 @@
package com.hxjt.dataupload.jobhandler.mqtt.job.user.domain;
import com.alibaba.fastjson2.JSONObject;
public class ApiResponse {
private Integer code;
private String msg;
private DataPage data;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public DataPage getData() {
return data;
}
public void setData(DataPage data) {
this.data = data;
}
@Override
public String toString() {
return "ApiResponse{" +
"code=" + code +
", msg='" + msg + '\'' +
", data=" + data +
'}';
}
}

54
src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/AreaUserInfoHx.java

@ -1,54 +0,0 @@
package com.hxjt.dataupload.jobhandler.mqtt.job.user.domain;
import lombok.Data;
import java.util.List;
@Data
public class AreaUserInfoHx {
/**
* 唯一标示
*/
private String uniqueId;
/**
* 企业容器id
*/
private String containerId ="ningyanghuagongchany";
/**
* 单位唯一标志
*/
private String orgCode;
/**
* 单位名称
*/
private String orgName;
/**
* 区域唯一标志
*/
private String areaId;
/**
* 区域名称
*/
private String areaName;
/**
* 上级区域唯一标志
*/
private String areaPid;
/**
* 上级区域名称
*/
private String areaPname;
/**
* 区域内告警数量
*/
private String alarmNum;
/**
* 区域内人员数量
*/
private String personNum;
/**
* 区域内人员列表
*/
private List<UserBaseInfo> personList;
}

15
src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/AreaUserInfoIot.java

@ -1,15 +0,0 @@
package com.hxjt.dataupload.jobhandler.mqtt.job.user.domain;
import lombok.Data;
@Data
public class AreaUserInfoIot {
/**
* 数据类型
*/
private String dataType ="areaPersonAlarm";
/**
* 人员信息
*/
private AreaUserInfoHx data;
}

65
src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/DataPage.java

@ -0,0 +1,65 @@
package com.hxjt.dataupload.jobhandler.mqtt.job.user.domain;
import com.google.gson.JsonObject;
import java.util.List;
import java.util.Map;
public class DataPage {
private Integer current;
private Integer total;
private Integer pages;
private Integer size;
private List<Map> records;
public Integer getCurrent() {
return current;
}
public void setCurrent(Integer current) {
this.current = current;
}
public Integer getTotal() {
return total;
}
public void setTotal(Integer total) {
this.total = total;
}
public Integer getPages() {
return pages;
}
public void setPages(Integer pages) {
this.pages = pages;
}
public Integer getSize() {
return size;
}
public void setSize(Integer size) {
this.size = size;
}
public List<Map> getRecords() {
return records;
}
public void setRecords(List<Map> records) {
this.records = records;
}
@Override
public String toString() {
return "DataPage{" +
"current=" + current +
", total=" + total +
", pages=" + pages +
", size=" + size +
", records=" + records +
'}';
}
}

73
src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/DeviceInfoHx.java

@ -1,73 +0,0 @@
package com.hxjt.dataupload.jobhandler.mqtt.job.user.domain;
import lombok.Data;
@Data
public class DeviceInfoHx {
/**
* 企业容器id
*/
private String containerId ="ningyanghuagongchany";
/**
* 设备编号
*/
private String deviceCode;
/**
* 设备类型0蓝牙1GPS
*/
private String deviceType = "0";
/**
* 企业编码
*/
private String userOrgCode = "370910170";
/**
* 企业名称
*/
private String userOrgName = "山东恒信高科能源有限公司";
/**
* 设备当前所在的一级区域 ID
*/
private String firAreaId = "HXGK0001";
/**
* 设备当前所在的一级区域 name
*/
private String firAreaName = "恒信高科";
/**
* 设备当前所在的二级区域 ID
*/
private String secondAreaId;
/**
* 设备当前所在的二级区域 name
*/
private String secondAreaName;
/**
* X
*/
private Double x;
/**
* Y
*/
private Double y;
/**
* 是否移动
*/
private String move;
/**
* 定位时间
*/
private String dateTime;
/**
* 电量状态
*/
private String lowPowerStatus;
/**
* 电量
*/
private String power;
/**
* 定位时间
*/
private String uniqueId;
}

15
src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/DeviceInfoIot.java

@ -1,15 +0,0 @@
package com.hxjt.dataupload.jobhandler.mqtt.job.user.domain;
import lombok.Data;
@Data
public class DeviceInfoIot {
/**
* 数据类型
*/
private String dataType ="position";
/**
* 人员信息
*/
private DeviceInfoHx data;
}

96
src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/SensorDataRequestObj.java

@ -0,0 +1,96 @@
package com.hxjt.dataupload.jobhandler.mqtt.job.user.domain;
/*
请求数据:
JSON
[
{
"descript": "厂房大门温度",
"name": "温度计",
"code": "ModbusRTU@0edb5c08b9f0_/dev/ttyS0_1_10_3",
"max": "100",
"min": "0",
"type": "温度",
"unit": "°C"
}
]
字段名 类型 说明
descript String 描述
name String 名称
code String 系统唯一编码,请确认在当前节点中该编码不会重复
max String 量程上限 100不能为空
min String 量程下限 0不能为空
type String 类型,如温度湿度压力液位等等
unit String 单位若无则传空字符串
* */
public class SensorDataRequestObj {
private String descript;
private String name;
private String code;
private String max;
private String min;
private String type;
private String unit;
public String getDescript() {
return descript;
}
public void setDescript(String descript) {
this.descript = descript;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMax() {
return max;
}
public void setMax(String max) {
this.max = max;
}
public String getMin() {
return min;
}
public void setMin(String min) {
this.min = min;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
}

40
src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/UserBaseInfo.java

@ -1,40 +0,0 @@
package com.hxjt.dataupload.jobhandler.mqtt.job.user.domain;
import lombok.Data;
@Data
public class UserBaseInfo {
/**
* 企业容器id
*/
private String containerId ="ningyanghuagongchany";
/**
* 人员唯一标示
*/
private String userCode;
/**
* 人员姓名
*/
private String userName;
/**
* 联系电话
*/
private String userPhone;
/**
* 人员类型
*/
private String userType = "01";
/**
* 企业编码
*/
private String userOrgCode = "370910170";
/**
* 企业名称
*/
private String userOrgName = "山东恒信高科能源有限公司";
/**
* 绑定设备唯一编码
*/
private String cardId;
}

15
src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/UserBaseInfoIot.java

@ -1,15 +0,0 @@
package com.hxjt.dataupload.jobhandler.mqtt.job.user.domain;
import lombok.Data;
@Data
public class UserBaseInfoIot {
/**
* 数据类型
*/
private String dataType ="baseInfo";
/**
* 人员信息
*/
private UserBaseInfo data;
}

114
src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/AreaPersonInfo2MqttJob.java

@ -1,114 +0,0 @@
package com.hxjt.dataupload.jobhandler.mqtt.job.user.jobhandler;
import cn.hutool.json.JSONUtil;
import com.hxjt.dataupload.jobhandler.mqtt.enums.UserType;
import com.hxjt.dataupload.jobhandler.mqtt.job.user.domain.AreaUserInfoHx;
import com.hxjt.dataupload.jobhandler.mqtt.job.user.domain.AreaUserInfoIot;
import com.hxjt.dataupload.jobhandler.mqtt.job.user.domain.UserBaseInfo;
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.util.ArrayList;
import java.util.List;
import java.util.Map;
@Component
@Slf4j
public class AreaPersonInfo2MqttJob {
@Resource
MqttClient mqttClient;
@Value("${spring.mqtt.areaTopic:}")
private String areaTopic;
@Value("${user.token.containerId:}")
private String containerId;
@Resource
RestTemplate restTemplate;
@Value("${area.data.url:}")
private String areaPersonUrl;
@XxlJob("areaInfo2MqttJobHandler")
public void userBaseInfo2MqttJobHandler() throws Exception {
try {
XxlJobHelper.log("Area person info To Mqtt Job Handler Beginning.");
ResponseEntity<Map> forEntity = restTemplate.getForEntity(areaPersonUrl, Map.class);
Map body = forEntity.getBody();
List<Map<String,Object>> data = (List<Map<String,Object>>)body.get("data");
log.info(">>>>>>>>>>>>>>>>>>>>>>area data size:"+data.size());
data.forEach(alarmMap -> {
try {
AreaUserInfoIot areaUserInfoIot = new AreaUserInfoIot();
AreaUserInfoHx areaUserInfoHx = new AreaUserInfoHx();
Object areaId = alarmMap.get("areaId");
areaUserInfoHx.setUniqueId(containerId + areaId);
areaUserInfoHx.setContainerId(containerId);
areaUserInfoHx.setOrgCode("91370921328482832M");
areaUserInfoHx.setOrgName("山东恒信高科能源有限公司");
areaUserInfoHx.setAreaId(areaId != null ? areaId.toString() : "");
Object areaName = alarmMap.get("areaName");
areaUserInfoHx.setAreaName(areaName != null ? areaName.toString() : "");
Object upperLimit = alarmMap.get("upperLimit");
areaUserInfoHx.setAreaPid(upperLimit != null ? upperLimit.toString() : "");
Object workLevel = alarmMap.get("workLevel");
areaUserInfoHx.setAreaPname(workLevel != null ? workLevel.toString() : "");
List<Map<String,Object>> personList = (List<Map<String,Object>>)alarmMap.get("personList");
log.info(">>>>>>>>>>>>>>>>>>>>>>person data size:"+personList.size());
List<UserBaseInfo> users = new ArrayList<>();
if(personList != null && personList.size()>0){
areaUserInfoHx.setPersonNum(personList.size() + "");
personList.forEach(p -> {
try {
UserBaseInfo userBaseInfo = new UserBaseInfo();
Object empNo = p.get("empNo");
userBaseInfo.setUserCode(empNo != null ? empNo.toString() : "");
Object empName = p.get("empName");
userBaseInfo.setUserName(empName != null ? empName.toString() : "");
Object deviceNo = p.get("deviceNo");
userBaseInfo.setCardId(deviceNo != null ? deviceNo.toString() : "");
userBaseInfo.setUserOrgCode("91370921328482832M");
userBaseInfo.setUserOrgName("山东恒信高科能源有限公司");
Object specifictype = p.get("specifictype");
String contentByCode = UserType.getContentByCode(specifictype != null ? specifictype.toString() : "");
userBaseInfo.setUserType(contentByCode != null ? contentByCode : "");
users.add(userBaseInfo);
} catch (Exception e) {
log.error(">>>>>>>>>>>>>>>>>>>>>>occur exception!"+e.getMessage());
}
});
} else {
areaUserInfoHx.setPersonNum("0");
}
areaUserInfoHx.setPersonList(users);
areaUserInfoIot.setData(areaUserInfoHx);
areaUserInfoIot.setDataType("areaPersonAlarm");
String jsonData = JSONUtil.toJsonStr(areaUserInfoIot);
log.info(jsonData);
mqttClient.publish(0, false,areaTopic, jsonData);
} catch (Exception e) {
e.printStackTrace();
log.error(">>>>>>>>>>>>>>>>>>>>>>occur exception!"+e.getMessage());
}
});
} catch (Exception e) {
e.printStackTrace();
log.info(">>>>>>>>>>>>>>>>>>>>>>occur exception!"+e.getMessage());
}
log.info(">>>>>>>>>>>>>>>Area person info mqtt push finished!");
}
}

97
src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/DeviceInfo2MqttJob.java

@ -1,97 +0,0 @@
package com.hxjt.dataupload.jobhandler.mqtt.job.user.jobhandler;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.hxjt.dataupload.jobhandler.mqtt.job.user.domain.DeviceInfoHx;
import com.hxjt.dataupload.jobhandler.mqtt.job.user.domain.DeviceInfoIot;
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.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/*
* @description: 定位信息推送
* @author: ZhangRY
* @date: 2025/4/9 10:51
* @param: null
* @return: null
**/
@Component
@Slf4j
public class DeviceInfo2MqttJob {
@Resource
MqttClient mqttClient;
@Value("${spring.mqtt.deviceTopic:}")
private String deviceTopic;
@Value("${user.token.containerId:}")
private String containerId;
@Resource
RestTemplate restTemplate;
@Value("${device.real.url:}")
private String deviceUrl;
@XxlJob("deviceInfo2MqttJobHandler")
public void deviceInfo2MqttJobHandler() throws Exception {
try {
XxlJobHelper.log(" Device base info To Mqtt Job Handler Beginning.");
ResponseEntity<Map> forEntity = restTemplate.getForEntity(deviceUrl, Map.class);
Map body = forEntity.getBody();
Map data = (Map) body.get("data");
List<Map<String,Object>> list = (List<Map<String,Object>>)data.get("list");
list.forEach(deviceMap -> {
DeviceInfoIot deviceInfoIot = new DeviceInfoIot();
DeviceInfoHx deviceInfo = new DeviceInfoHx();
deviceInfo.setContainerId(containerId);
deviceInfo.setUniqueId(UUID.randomUUID().toString());
Object deviceNo = deviceMap.get("deviceno");
deviceInfo.setDeviceCode(deviceNo != null ? deviceNo.toString() : "");
Object crossX = deviceMap.get("longitude");
deviceInfo.setX(crossX != null ? new Double(crossX.toString()) : 0.0);
Object crossY = deviceMap.get("latitude");
deviceInfo.setY(crossY != null ? new Double(crossY.toString()) : 0.0);
long dateTime = Long.valueOf(String.valueOf(deviceMap.get("datetime")));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(dateTime);
String formattedDate = sdf.format(date);
deviceInfo.setDateTime(formattedDate != null ? formattedDate : "");
Object electric = deviceMap.get("electric");
BigDecimal electricBigDecimal = new BigDecimal(ObjectUtil.isEmpty(electric) ? "-1" : String.valueOf(electric));
BigDecimal criticalValue = new BigDecimal("3.7");
deviceInfo.setPower(electric != null ? electric.toString() : "");
deviceInfo.setLowPowerStatus(electricBigDecimal != null && electricBigDecimal.compareTo(criticalValue) >= 0 ? "0": "1");
deviceInfoIot.setData(deviceInfo);
Object islxsign = deviceMap.get("islxsign");
deviceInfo.setMove(islxsign != null ? "0".equals(islxsign) ? "1" : "0" : "");
deviceInfoIot.setDataType("position");
String jsonData = JSONUtil.toJsonStr(deviceInfoIot);
log.info(jsonData);
XxlJobHelper.log(jsonData);
mqttClient.publish(0, false, deviceTopic, jsonData);
});
} catch (Exception e) {
e.printStackTrace();
}
log.info(">>>>>>>>>>>>>>>Device base info mqtt push finished!");
XxlJobHelper.log(">>>>>>>>>>>>>>>Device base info mqtt push finished!");
}
}

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

@ -1,23 +1,26 @@
package com.hxjt.dataupload.jobhandler.mqtt.job.user.jobhandler;
import cn.hutool.json.JSONUtil;
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.jobhandler.mqtt.job.user.domain.ApiResponse;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
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;
@ -30,25 +33,22 @@ import static com.hxjt.dataupload.utils.ExcelDataExtraction.extractData;
* @return: null
**/
@Component
@Slf4j
public class SensorDataTopicMqttJobHandler {
private Logger log = LoggerFactory.getLogger(SensorDataTopicMqttJobHandler.class);
@Resource
MqttClient mqttClient;
@Value("${spring.mqtt.sensorDataTopic:}")
private String sensorDataTopic;
@Resource
RestTemplate restTemplate;
@XxlJob("sensorDataTopicMqttJobHandler")
public void execute() throws Exception {
try {
public void execute(){
XxlJobHelper.log("sensorDataTopicMqttJobHandler Beginning.");
String filePath = "F://Users/liwenxuan/Desktop/环保上传园区/数据位号2025.3.4-1.xlsx"; // 请替换为实际的Excel文件路径
@ -57,7 +57,7 @@ public class SensorDataTopicMqttJobHandler {
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}";
String url = "http://172.20.5.120:29912/open/app/api/po/send/MkZSTLpZ7vHYcz2clyDMBuUnuqHX9A49?id={id}";
//请求参数
Map<String, String> uriVariables = new HashMap<>();
@ -66,33 +66,26 @@ public class SensorDataTopicMqttJobHandler {
//发起请求,直接返回对象(带参数请求)
JSONObject responseBean = restTemplate.getForObject(url, JSONObject.class, uriVariables);
System.out.println(responseBean.toString());
ApiResponse apiResponse = restTemplate.getForObject(url, ApiResponse.class, uriVariables);
HashMap recordMap = apiResponse.getData().getRecords().get(0);
System.out.println(apiResponse.getData().getRecords().get(0));
}
});
/*String jsonData = JSONUtil.toJsonStr(alarmInfoIot);
log.info(jsonData);
XxlJobHelper.log("mqtt push data : : " + jsonData);
mqttClient.publish(0, false, deviceTopic, jsonData);*/
//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!");
}
private void init() {
log.info("init 方法调用成功");
}
private void destroy() {
log.info("destroy 方法调用成功");
}
}

179
src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/UserBaseInfo2MqttJob.java

@ -1,179 +0,0 @@
package com.hxjt.dataupload.jobhandler.mqtt.job.user.jobhandler;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.hxjt.dataupload.jobhandler.mqtt.job.user.domain.UserBaseInfo;
import com.hxjt.dataupload.jobhandler.mqtt.job.user.domain.UserBaseInfoIot;
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.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/*
* @description: 人员信息推送
* @author: ZhangRY
* @date: 2025/4/9 10:51
* @param: null
* @return: null
**/
@Component
@Slf4j
public class UserBaseInfo2MqttJob {
@Resource
MqttClient mqttClient;
@Value("${spring.mqtt.personTopic:}")
private String personTopic;
@Value("${user.token.url:}")
private String tokenUrl;
@Value("${user.token.username:}")
private String username;
@Value("${user.token.password:}")
private String password;
@Value("${user.token.orgin:}")
private String origin;
@Value("${user.token.verCode:}")
private String verCode;
@Value("${user.token.urlPerson:}")
private String urlPerson;
@Value("${user.token.containerId:}")
private String containerId;
@XxlJob("userBaseInfo2MqttJobHandler")
public void userBaseInfo2MqttJobHandler() throws Exception {
try {
XxlJobHelper.log(" User base info To Mqtt Job Handler Beginning.");
// 创建httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建请求对象
HttpPost httpPost = new HttpPost(tokenUrl);
JSONObject jsonObj = new JSONObject();
jsonObj.putOnce("username", username);
jsonObj.putOnce("password", password);
StringEntity entity = new StringEntity(jsonObj.toString());
//指定请求编码方式
entity.setContentEncoding("utf-8");
//数据格式
entity.setContentType("application/json");
httpPost.setEntity(entity);
httpPost.setHeader("Origin", origin);
httpPost.setHeader("User-Agent", "sdhxgk");
//发送请求
CloseableHttpResponse response = httpClient.execute(httpPost);
//解析返回结果
int statusCode = response.getStatusLine().getStatusCode();
log.info("-----------查询token响应码为:" + statusCode);
XxlJobHelper.log("-----------查询token响应码为:" + statusCode);
if (200 == statusCode) {
org.apache.http.HttpEntity entityRes = response.getEntity();
String body = EntityUtils.toString(entityRes);
log.info("-----------查询token响应数据为:" + statusCode);
XxlJobHelper.log("-----------查询token响应数据为:" + statusCode);
JSONObject jsonObject = JSONUtil.parseObj(body);
JSONObject data = JSONUtil.parseObj(jsonObject.get("data"));
String token = data.get("token").toString();
System.out.println(token);
String number = data.get("number").toString();
System.out.println(number);
String secNumber = SecureUtil.md5(number);
String secverCode = SecureUtil.md5(verCode);
String twoSec = SecureUtil.md5(secNumber + secverCode);
String threeSec = SecureUtil.md5(twoSec + verCode);
HttpPost httpPostPerson = new HttpPost(urlPerson);
StringEntity entityEmpty = new StringEntity("");
//指定请求编码方式
entityEmpty.setContentEncoding("utf-8");
//数据格式
entityEmpty.setContentType("application/json");
httpPostPerson.setEntity(entityEmpty);
httpPostPerson.setHeader("Origin", origin);
httpPostPerson.setHeader("User-Agent", "sdhxgk");
httpPostPerson.setHeader("token", token);
httpPostPerson.setHeader("number", threeSec);
//发送请求
CloseableHttpResponse resPerson = httpClient.execute(httpPostPerson);
//解析返回结果
int staPersonCode = resPerson.getStatusLine().getStatusCode();
log.info("-----------查询人员响应码为:" + staPersonCode);
XxlJobHelper.log("-----------查询人员响应码为:" + staPersonCode);
if (200 == staPersonCode) {
org.apache.http.HttpEntity entPersonRes = resPerson.getEntity();
String personBody = EntityUtils.toString(entPersonRes);
log.info("-----------查询人员响应数据为:" + personBody);
XxlJobHelper.log("-----------查询人员响应数据为:" + personBody);
resPerson.close();
JSONObject jsonObjPerson = JSONUtil.parseObj(personBody);
System.out.println(jsonObjPerson);
JSONArray parseArray = JSONUtil.parseArray(jsonObjPerson.get("data"));
parseArray.forEach(obj -> {
JSONObject person = JSONUtil.parseObj(obj);
Object deviceNo = person.get("cardld");
Object personName = person.get("empName");
Object empNo = person.get("userCode");
// Object specifictype = person.get("userType");
Object userPhone = person.get("userPhone");
// Object workUnit = person.get("userOrgName");
// Object workUnitCode = person.get("userOrgCode");
UserBaseInfoIot userBaseInfoIot = new UserBaseInfoIot();
UserBaseInfo userBaseInfo = new UserBaseInfo();
userBaseInfo.setContainerId(containerId);
userBaseInfo.setCardId(deviceNo != null ? deviceNo.toString() : null);
userBaseInfo.setUserPhone(userPhone != null ? userPhone.toString() : null);
userBaseInfo.setUserName(personName != null ? personName.toString() : null);
userBaseInfo.setUserCode(empNo != null ? empNo.toString() : null);
// userBaseInfo.setUserType(specifictype != null ? specifictype.toString() : null);
// userBaseInfo.setUserOrgName(workUnit != null ? workUnit.toString() : null);
// userBaseInfo.setUserOrgCode(workUnitCode != null ? workUnitCode.toString() : null);
userBaseInfoIot.setData(userBaseInfo);
userBaseInfoIot.setDataType("baseInfo");
String jsonData = JSONUtil.toJsonStr(userBaseInfoIot);
XxlJobHelper.log("mqtt push data : " + jsonData);
mqttClient.publish(0, false, personTopic, jsonData);
});
}
}
//关闭资源
response.close();
httpClient.close();
} catch (Exception e) {
e.printStackTrace();
}
log.info(">>>>>>>>>>>>>>>mqtt push finished!");
XxlJobHelper.log(">>>>>>>>>>>>>>>mqtt push finished!");
}
}

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

@ -64,16 +64,6 @@ spring:
primary: syncplant
#设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源.
strict: false
mqtt:
username: 10@ningyanghuagongchany20250422172632
password: 9fabff0fe3d049af92329e29dd9af7e4
hostUrl: tcp://112.245.55.112:7379
clientId: 10@ningyanghuagongchany20250422172632
sensorDataTopic: /iot/{clientId}/thirdParty/sensorData
timeout: 100
keepalive: 60
enabled: true
realtimeDataTopic: /iot/{clientId}/thirdParty/realtimeData
xxl:
job:
admin:
@ -95,4 +85,14 @@ xxl:
logpath: ./data/logs/xxl-job/executor
#执行器日志保存天数
logretentiondays: 30
mqtt:
username: 10@ningyanghuagongchany20250422172632
password: 9fabff0fe3d049af92329e29dd9af7e4
hostUrl: tcp://112.245.55.112:7379
clientId: 10@ningyanghuagongchany20250422172632
sensorDataTopic: /iot/10@ningyanghuagongchany20250422172632/thirdParty/sensorData
timeout: 100
keepalive: 60
enabled: true
realtimeDataTopic: /iot/10@ningyanghuagongchany20250422172632/thirdParty/realtimeData

Loading…
Cancel
Save