diff --git a/pom.xml b/pom.xml index 2c23534..f3a0830 100644 --- a/pom.xml +++ b/pom.xml @@ -146,11 +146,33 @@ javase 3.3.3 - + + + + org.projectlombok + lombok + + + + + + + + + + org.springframework.boot + spring-boot-starter-integration + + + org.springframework.integration spring-integration-mqtt + 5.5.5 + + + org.springframework.boot spring-boot-configuration-processor diff --git a/src/main/java/com/hxjt/dataupload/DataUploadApplication.java b/src/main/java/com/hxjt/dataupload/DataUploadApplication.java index da74b6d..b79fd3a 100644 --- a/src/main/java/com/hxjt/dataupload/DataUploadApplication.java +++ b/src/main/java/com/hxjt/dataupload/DataUploadApplication.java @@ -1,13 +1,17 @@ package com.hxjt.dataupload; +import com.hxjt.dataupload.mqtt.MqttConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication //@EnableScheduling @EnableAsync +@EnableConfigurationProperties(value = MqttConfig.class) public class DataUploadApplication { public static void main(String[] args) { diff --git a/src/main/java/com/hxjt/dataupload/enums/AlarmType.java b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/enums/AlarmType.java similarity index 89% rename from src/main/java/com/hxjt/dataupload/enums/AlarmType.java rename to src/main/java/com/hxjt/dataupload/jobhandler/mqtt/enums/AlarmType.java index 6fc957d..9287a48 100644 --- a/src/main/java/com/hxjt/dataupload/enums/AlarmType.java +++ b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/enums/AlarmType.java @@ -1,4 +1,4 @@ -package com.hxjt.dataupload.enums; +package com.hxjt.dataupload.jobhandler.mqtt.enums; public enum AlarmType { ALARM_1("1","禁区告警-区域"), @@ -36,7 +36,7 @@ public enum AlarmType { } public static String getContentByCode(String code) { - for (com.hxjt.dataupload.enums.AlarmType objEnum : com.hxjt.dataupload.enums.AlarmType.values()) { + for (AlarmType objEnum : AlarmType.values()) { if(objEnum.getAlarmCode().equals(code)) { return objEnum.getAlarmContent(); } diff --git a/src/main/java/com/hxjt/dataupload/enums/UserType.java b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/enums/UserType.java similarity index 84% rename from src/main/java/com/hxjt/dataupload/enums/UserType.java rename to src/main/java/com/hxjt/dataupload/jobhandler/mqtt/enums/UserType.java index 570226c..649f61d 100644 --- a/src/main/java/com/hxjt/dataupload/enums/UserType.java +++ b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/enums/UserType.java @@ -1,4 +1,4 @@ -package com.hxjt.dataupload.enums; +package com.hxjt.dataupload.jobhandler.mqtt.enums; public enum UserType { @@ -27,7 +27,7 @@ public enum UserType { } public static String getContentByCode(String code) { - for (com.hxjt.dataupload.enums.UserType objEnum : com.hxjt.dataupload.enums.UserType.values()) { + for (UserType objEnum : UserType.values()) { if(objEnum.getAlarmCode().equals(code)) { return objEnum.getAlarmContent(); } diff --git a/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/AlarmInfoHx.java b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/AlarmInfoHx.java new file mode 100644 index 0000000..7f40986 --- /dev/null +++ b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/AlarmInfoHx.java @@ -0,0 +1,73 @@ +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; + + +} diff --git a/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/AlarmInfoIot.java b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/AlarmInfoIot.java new file mode 100644 index 0000000..57e6b2b --- /dev/null +++ b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/AlarmInfoIot.java @@ -0,0 +1,15 @@ +package com.hxjt.dataupload.jobhandler.mqtt.job.user.domain; + +import lombok.Data; + +@Data +public class AlarmInfoIot { + /** + * 数据类型 + */ + private String dataType ="alarm"; + /** + * 人员信息 + */ + private AlarmInfoHx data; +} diff --git a/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/AreaUserInfoHx.java b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/AreaUserInfoHx.java new file mode 100644 index 0000000..0d376fa --- /dev/null +++ b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/AreaUserInfoHx.java @@ -0,0 +1,54 @@ +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 personList; + +} diff --git a/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/AreaUserInfoIot.java b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/AreaUserInfoIot.java new file mode 100644 index 0000000..816a78b --- /dev/null +++ b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/AreaUserInfoIot.java @@ -0,0 +1,15 @@ +package com.hxjt.dataupload.jobhandler.mqtt.job.user.domain; + +import lombok.Data; + +@Data +public class AreaUserInfoIot { + /** + * 数据类型 + */ + private String dataType ="areaPersonAlarm"; + /** + * 人员信息 + */ + private AreaUserInfoHx data; +} diff --git a/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/DeviceInfoHx.java b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/DeviceInfoHx.java new file mode 100644 index 0000000..6988239 --- /dev/null +++ b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/DeviceInfoHx.java @@ -0,0 +1,73 @@ +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:蓝牙;1:GPS + */ + 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; + +} diff --git a/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/DeviceInfoIot.java b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/DeviceInfoIot.java new file mode 100644 index 0000000..ad02e31 --- /dev/null +++ b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/DeviceInfoIot.java @@ -0,0 +1,15 @@ +package com.hxjt.dataupload.jobhandler.mqtt.job.user.domain; + +import lombok.Data; + +@Data +public class DeviceInfoIot { + /** + * 数据类型 + */ + private String dataType ="position"; + /** + * 人员信息 + */ + private DeviceInfoHx data; +} diff --git a/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/UserBaseInfo.java b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/UserBaseInfo.java new file mode 100644 index 0000000..507e7e1 --- /dev/null +++ b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/UserBaseInfo.java @@ -0,0 +1,40 @@ +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; + +} diff --git a/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/UserBaseInfoIot.java b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/UserBaseInfoIot.java new file mode 100644 index 0000000..f9308a8 --- /dev/null +++ b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/domain/UserBaseInfoIot.java @@ -0,0 +1,15 @@ +package com.hxjt.dataupload.jobhandler.mqtt.job.user.domain; + +import lombok.Data; + +@Data +public class UserBaseInfoIot { + /** + * 数据类型 + */ + private String dataType ="baseInfo"; + /** + * 人员信息 + */ + private UserBaseInfo data; +} diff --git a/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/AlarmInfo2MqttJob.java b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/AlarmInfo2MqttJob.java similarity index 80% rename from src/main/java/com/hxjt/dataupload/jobhandler/mqtt/AlarmInfo2MqttJob.java rename to src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/AlarmInfo2MqttJob.java index 129aff7..9bd8f37 100644 --- a/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/AlarmInfo2MqttJob.java +++ b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/AlarmInfo2MqttJob.java @@ -1,17 +1,14 @@ -package com.hxjt.dataupload.jobhandler.mqtt; +package com.hxjt.dataupload.jobhandler.mqtt.job.user.jobhandler; import cn.hutool.json.JSONUtil; -import com.hxjt.dataupload.enums.AlarmType; -import com.hxjt.dataupload.model.entity.rydw.AlarmInfoHx; -import com.hxjt.dataupload.model.entity.rydw.AlarmInfoIot; +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 groovy.util.logging.Log4j2; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; @@ -24,8 +21,15 @@ 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 @@ -36,7 +40,6 @@ public class AlarmInfo2MqttJob { @Value("${user.token.containerId:}") private String containerId; - @Resource RestTemplate restTemplate; @@ -46,10 +49,8 @@ public class AlarmInfo2MqttJob { @Value("${alarm.real.code:}") private String codeAlarm; - public static final Logger log = LoggerFactory.getLogger(Log4j2.class); - @XxlJob("alarmInfo2MqttJobHandler") - public void userBaseInfo2MqttJobHandler() throws Exception { + public void alarmInfo2MqttJobHandler() throws Exception { try { XxlJobHelper.log("Alarm info To Mqtt Job Handler Beginning."); @@ -57,12 +58,13 @@ public class AlarmInfo2MqttJob { Map body = forEntity.getBody(); List> data = (List>)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.toString() : ""); + alarmInfoHx.setUniqueId(id != null ? containerId + id : ""); alarmInfoHx.setContainerId(containerId); Object deviceNo = alarmMap.get("deviceNo"); alarmInfoHx.setDeviceCode(deviceNo != null ? deviceNo.toString() : ""); @@ -70,6 +72,7 @@ public class AlarmInfo2MqttJob { 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); @@ -78,15 +81,16 @@ public class AlarmInfo2MqttJob { Object layer = alarmMap.get("factory"); alarmInfoHx.setLayerId(layer != null ? layer.toString() : ""); Object area = alarmMap.get("area"); - alarmInfoHx.setFirAreaId(area != null ? area.toString() : ""); + alarmInfoHx.setSecAreaId(area != null ? area.toString() : ""); Object areaName = alarmMap.get("areaName"); - alarmInfoHx.setFirAreaName(areaName != null ? areaName.toString() : ""); + 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())); @@ -96,6 +100,7 @@ public class AlarmInfo2MqttJob { alarmInfoHx.setDateTime(dateStr); } catch (NumberFormatException e) { log.info(">>>>>>>>>>>>>>>>>>>>>>>>>exception occur"+e.getMessage()); + XxlJobHelper.log(">>>>>>>>>>>>>>>>>>>>>>>>>exception occur"+e.getMessage()); alarmInfoHx.setDateTime(dateTime.toString()); } } @@ -105,11 +110,13 @@ public class AlarmInfo2MqttJob { 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()); } }); @@ -117,6 +124,7 @@ public class AlarmInfo2MqttJob { e.printStackTrace(); } log.info(">>>>>>>>>>>>>>>Alarm info mqtt push finished!"); + XxlJobHelper.log(">>>>>>>>>>>>>>>Alarm info mqtt push finished!"); } diff --git a/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/AreaPersonInfo2MqttJob.java b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/AreaPersonInfo2MqttJob.java similarity index 92% rename from src/main/java/com/hxjt/dataupload/jobhandler/mqtt/AreaPersonInfo2MqttJob.java rename to src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/AreaPersonInfo2MqttJob.java index 2f9471b..f286fa0 100644 --- a/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/AreaPersonInfo2MqttJob.java +++ b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/AreaPersonInfo2MqttJob.java @@ -1,18 +1,15 @@ -package com.hxjt.dataupload.jobhandler.mqtt; +package com.hxjt.dataupload.jobhandler.mqtt.job.user.jobhandler; import cn.hutool.json.JSONUtil; -import com.hxjt.dataupload.enums.UserType; -import com.hxjt.dataupload.model.entity.rydw.AreaUserInfoHx; -import com.hxjt.dataupload.model.entity.rydw.AreaUserInfoIot; -import com.hxjt.dataupload.model.entity.rydw.UserBaseInfo; +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 groovy.util.logging.Log4j2; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; @@ -24,6 +21,7 @@ import java.util.List; import java.util.Map; @Component +@Slf4j public class AreaPersonInfo2MqttJob { @Resource @@ -41,8 +39,6 @@ public class AreaPersonInfo2MqttJob { @Value("${area.data.url:}") private String areaPersonUrl; - public static final Logger log = LoggerFactory.getLogger(Log4j2.class); - @XxlJob("areaInfo2MqttJobHandler") public void userBaseInfo2MqttJobHandler() throws Exception { try { diff --git a/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/DeviceInfo2MqttJob.java b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/DeviceInfo2MqttJob.java similarity index 51% rename from src/main/java/com/hxjt/dataupload/jobhandler/mqtt/DeviceInfo2MqttJob.java rename to src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/DeviceInfo2MqttJob.java index d1c432c..61c32d2 100644 --- a/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/DeviceInfo2MqttJob.java +++ b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/DeviceInfo2MqttJob.java @@ -1,27 +1,36 @@ -package com.hxjt.dataupload.jobhandler.mqtt; +package com.hxjt.dataupload.jobhandler.mqtt.job.user.jobhandler; -import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; -import com.hxjt.dataupload.model.entity.rydw.DeviceInfoHx; -import com.hxjt.dataupload.model.entity.rydw.DeviceInfoIot; +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 groovy.util.logging.Log4j2; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +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 @@ -39,35 +48,43 @@ public class DeviceInfo2MqttJob { @Value("${device.real.url:}") private String deviceUrl; - public static final Logger log = LoggerFactory.getLogger(Log4j2.class); - @XxlJob("deviceInfo2MqttJobHandler") - public void userBaseInfo2MqttJobHandler() throws Exception { + public void deviceInfo2MqttJobHandler() throws Exception { try { XxlJobHelper.log(" Device base info To Mqtt Job Handler Beginning."); ResponseEntity forEntity = restTemplate.getForEntity(deviceUrl, Map.class); Map body = forEntity.getBody(); - List> data = (List>)body.get("data"); - data.forEach(deviceMap -> { + Map data = (Map) body.get("data"); + List> list = (List>)data.get("list"); + list.forEach(deviceMap -> { DeviceInfoIot deviceInfoIot = new DeviceInfoIot(); DeviceInfoHx deviceInfo = new DeviceInfoHx(); deviceInfo.setContainerId(containerId); - Object deviceNo = deviceMap.get("deviceNo"); + deviceInfo.setUniqueId(UUID.randomUUID().toString()); + Object deviceNo = deviceMap.get("deviceno"); deviceInfo.setDeviceCode(deviceNo != null ? deviceNo.toString() : ""); - Object layer = deviceMap.get("layer"); - deviceInfo.setLayerId(layer != null ? layer.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); - Object dateTime = deviceMap.get("dateTime"); - deviceInfo.setDateTime(dateTime != null ? dateTime.toString() : ""); - String str = IdUtil.getSnowflakeNextIdStr(); + 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); }); @@ -75,5 +92,6 @@ public class DeviceInfo2MqttJob { e.printStackTrace(); } log.info(">>>>>>>>>>>>>>>Device base info mqtt push finished!"); + XxlJobHelper.log(">>>>>>>>>>>>>>>Device base info mqtt push finished!"); } } diff --git a/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/UserBaseInfo2MqttJob.java b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/UserBaseInfo2MqttJob.java similarity index 80% rename from src/main/java/com/hxjt/dataupload/jobhandler/mqtt/UserBaseInfo2MqttJob.java rename to src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/UserBaseInfo2MqttJob.java index 6dd53f0..78fe3c5 100644 --- a/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/UserBaseInfo2MqttJob.java +++ b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/job/user/jobhandler/UserBaseInfo2MqttJob.java @@ -1,39 +1,43 @@ -package com.hxjt.dataupload.jobhandler.mqtt; +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.model.entity.rydw.UserBaseInfo; -import com.hxjt.dataupload.model.entity.rydw.UserBaseInfoIot; +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 groovy.util.logging.Log4j2; - +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.slf4j.Logger; -import org.slf4j.LoggerFactory; 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.realTimeTopic:}") - private String realTimeTopic; + @Value("${spring.mqtt.personTopic:}") + private String personTopic; @Value("${user.token.url:}") private String tokenUrl; @@ -56,8 +60,6 @@ public class UserBaseInfo2MqttJob { @Value("${user.token.containerId:}") private String containerId; - public static final Logger log = LoggerFactory.getLogger(Log4j2.class); - @XxlJob("userBaseInfo2MqttJobHandler") public void userBaseInfo2MqttJobHandler() throws Exception { try { @@ -87,11 +89,13 @@ public class UserBaseInfo2MqttJob { //解析返回结果 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")); @@ -123,11 +127,13 @@ public class UserBaseInfo2MqttJob { //解析返回结果 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); @@ -138,10 +144,10 @@ public class UserBaseInfo2MqttJob { Object deviceNo = person.get("cardld"); Object personName = person.get("empName"); Object empNo = person.get("userCode"); - Object specifictype = person.get("userType"); - Object workUnit = person.get("userOrgName"); +// Object specifictype = person.get("userType"); Object userPhone = person.get("userPhone"); - Object workUnitCode = person.get("userOrgCode"); +// Object workUnit = person.get("userOrgName"); +// Object workUnitCode = person.get("userOrgCode"); UserBaseInfoIot userBaseInfoIot = new UserBaseInfoIot(); UserBaseInfo userBaseInfo = new UserBaseInfo(); @@ -150,13 +156,14 @@ public class UserBaseInfo2MqttJob { 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); +// 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); - mqttClient.publish(0, false, realTimeTopic, jsonData); + XxlJobHelper.log("mqtt push data : " + jsonData); + mqttClient.publish(0, false, personTopic, jsonData); }); } } @@ -167,5 +174,6 @@ public class UserBaseInfo2MqttJob { e.printStackTrace(); } log.info(">>>>>>>>>>>>>>>mqtt push finished!"); + XxlJobHelper.log(">>>>>>>>>>>>>>>mqtt push finished!"); } } diff --git a/src/main/java/com/hxjt/dataupload/template/RestTemplateConfig.java b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/template/RestTemplateConfig.java similarity index 93% rename from src/main/java/com/hxjt/dataupload/template/RestTemplateConfig.java rename to src/main/java/com/hxjt/dataupload/jobhandler/mqtt/template/RestTemplateConfig.java index 68f7ea6..981b1f9 100644 --- a/src/main/java/com/hxjt/dataupload/template/RestTemplateConfig.java +++ b/src/main/java/com/hxjt/dataupload/jobhandler/mqtt/template/RestTemplateConfig.java @@ -1,4 +1,4 @@ -package com.hxjt.dataupload.template; +package com.hxjt.dataupload.jobhandler.mqtt.template; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/src/main/java/com/hxjt/dataupload/model/entity/rydw/AlarmInfoHx.java b/src/main/java/com/hxjt/dataupload/model/entity/rydw/AlarmInfoHx.java deleted file mode 100644 index 06a70e5..0000000 --- a/src/main/java/com/hxjt/dataupload/model/entity/rydw/AlarmInfoHx.java +++ /dev/null @@ -1,174 +0,0 @@ -package com.hxjt.dataupload.model.entity.rydw; - - -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; - /** - * 一级区域名称 - */ - private String firAreaName; - /** - * 二级区域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; - - - public String getUniqueId() { - return uniqueId; - } - - public void setUniqueId(String uniqueId) { - this.uniqueId = uniqueId; - } - - public String getContainerId() { - return containerId; - } - - public void setContainerId(String containerId) { - this.containerId = containerId; - } - - public String getDeviceCode() { - return deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getAlarmType() { - return alarmType; - } - - public void setAlarmType(String alarmType) { - this.alarmType = alarmType; - } - - public String getAlarmContent() { - return alarmContent; - } - - public void setAlarmContent(String alarmContent) { - this.alarmContent = alarmContent; - } - - public String getLayerId() { - return layerId; - } - - public void setLayerId(String layerId) { - this.layerId = layerId; - } - - public String getFirAreaId() { - return firAreaId; - } - - public void setFirAreaId(String firAreaId) { - this.firAreaId = firAreaId; - } - - public String getFirAreaName() { - return firAreaName; - } - - public void setFirAreaName(String firAreaName) { - this.firAreaName = firAreaName; - } - - public String getSecAreaId() { - return secAreaId; - } - - public void setSecAreaId(String secAreaId) { - this.secAreaId = secAreaId; - } - - public String getSecAreaName() { - return secAreaName; - } - - public void setSecAreaName(String secAreaName) { - this.secAreaName = secAreaName; - } - - public Double getX() { - return x; - } - - public void setX(Double x) { - this.x = x; - } - - public Double getY() { - return y; - } - - public void setY(Double y) { - this.y = y; - } - - public String getDateTime() { - return dateTime; - } - - public void setDateTime(String dateTime) { - this.dateTime = dateTime; - } - - public String getDealStatus() { - return dealStatus; - } - - public void setDealStatus(String dealStatus) { - this.dealStatus = dealStatus; - } -} diff --git a/src/main/java/com/hxjt/dataupload/model/entity/rydw/AlarmInfoIot.java b/src/main/java/com/hxjt/dataupload/model/entity/rydw/AlarmInfoIot.java deleted file mode 100644 index 2a12d88..0000000 --- a/src/main/java/com/hxjt/dataupload/model/entity/rydw/AlarmInfoIot.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.hxjt.dataupload.model.entity.rydw; - - -public class AlarmInfoIot { - /** - * 数据类型 - */ - private String dataType ="alarm"; - /** - * 人员信息 - */ - private AlarmInfoHx data; - - public String getDataType() { - return dataType; - } - - public void setDataType(String dataType) { - this.dataType = dataType; - } - - public AlarmInfoHx getData() { - return data; - } - - public void setData(AlarmInfoHx data) { - this.data = data; - } -} diff --git a/src/main/java/com/hxjt/dataupload/model/entity/rydw/AreaUserInfoHx.java b/src/main/java/com/hxjt/dataupload/model/entity/rydw/AreaUserInfoHx.java deleted file mode 100644 index 8a8afd7..0000000 --- a/src/main/java/com/hxjt/dataupload/model/entity/rydw/AreaUserInfoHx.java +++ /dev/null @@ -1,139 +0,0 @@ -package com.hxjt.dataupload.model.entity.rydw; - - -import java.util.List; - -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 personList; - - public String getUniqueId() { - return uniqueId; - } - - public void setUniqueId(String uniqueId) { - this.uniqueId = uniqueId; - } - - public String getContainerId() { - return containerId; - } - - public void setContainerId(String containerId) { - this.containerId = containerId; - } - - public String getOrgCode() { - return orgCode; - } - - public void setOrgCode(String orgCode) { - this.orgCode = orgCode; - } - - public String getOrgName() { - return orgName; - } - - public void setOrgName(String orgName) { - this.orgName = orgName; - } - - public String getAreaId() { - return areaId; - } - - public void setAreaId(String areaId) { - this.areaId = areaId; - } - - public String getAreaName() { - return areaName; - } - - public void setAreaName(String areaName) { - this.areaName = areaName; - } - - public String getAreaPid() { - return areaPid; - } - - public void setAreaPid(String areaPid) { - this.areaPid = areaPid; - } - - public String getAreaPname() { - return areaPname; - } - - public void setAreaPname(String areaPname) { - this.areaPname = areaPname; - } - - public String getAlarmNum() { - return alarmNum; - } - - public void setAlarmNum(String alarmNum) { - this.alarmNum = alarmNum; - } - - public String getPersonNum() { - return personNum; - } - - public void setPersonNum(String personNum) { - this.personNum = personNum; - } - - public List getPersonList() { - return personList; - } - - public void setPersonList(List personList) { - this.personList = personList; - } -} diff --git a/src/main/java/com/hxjt/dataupload/model/entity/rydw/AreaUserInfoIot.java b/src/main/java/com/hxjt/dataupload/model/entity/rydw/AreaUserInfoIot.java deleted file mode 100644 index b98522d..0000000 --- a/src/main/java/com/hxjt/dataupload/model/entity/rydw/AreaUserInfoIot.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.hxjt.dataupload.model.entity.rydw; - - -public class AreaUserInfoIot { - /** - * 数据类型 - */ - private String dataType ="areaPersonAlarm"; - /** - * 人员信息 - */ - private AreaUserInfoHx data; - - public String getDataType() { - return dataType; - } - - public void setDataType(String dataType) { - this.dataType = dataType; - } - - public AreaUserInfoHx getData() { - return data; - } - - public void setData(AreaUserInfoHx data) { - this.data = data; - } -} diff --git a/src/main/java/com/hxjt/dataupload/model/entity/rydw/DeviceInfoHx.java b/src/main/java/com/hxjt/dataupload/model/entity/rydw/DeviceInfoHx.java deleted file mode 100644 index 16702d6..0000000 --- a/src/main/java/com/hxjt/dataupload/model/entity/rydw/DeviceInfoHx.java +++ /dev/null @@ -1,125 +0,0 @@ -package com.hxjt.dataupload.model.entity.rydw; - - -public class DeviceInfoHx { - /** - * 企业容器id - */ - private String containerId ="ningyanghuagongchany"; - /** - * 设备编号 - */ - private String deviceCode; - /** - * 楼层编号 - */ - private String layerId; - /** - * X - */ - private Double x; - /** - * Y - */ - private Double y; - /** - * 定位时间 - */ - private String dateTime; - /** - * 定位时间 - */ - private String uniqueId; - /** - * 是否移动 - */ - private String move; - /** - * 电量状态 - */ - private String lowPowerStatus; - /** - * 电量 - */ - private String power; - - public String getContainerId() { - return containerId; - } - - public void setContainerId(String containerId) { - this.containerId = containerId; - } - - public String getDeviceCode() { - return deviceCode; - } - - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - public String getLayerId() { - return layerId; - } - - public void setLayerId(String layerId) { - this.layerId = layerId; - } - - public Double getX() { - return x; - } - - public void setX(Double x) { - this.x = x; - } - - public Double getY() { - return y; - } - - public void setY(Double y) { - this.y = y; - } - - public String getDateTime() { - return dateTime; - } - - public void setDateTime(String dateTime) { - this.dateTime = dateTime; - } - - public String getUniqueId() { - return uniqueId; - } - - public void setUniqueId(String uniqueId) { - this.uniqueId = uniqueId; - } - - public String getMove() { - return move; - } - - public void setMove(String move) { - this.move = move; - } - - public String getLowPowerStatus() { - return lowPowerStatus; - } - - public void setLowPowerStatus(String lowPowerStatus) { - this.lowPowerStatus = lowPowerStatus; - } - - public String getPower() { - return power; - } - - public void setPower(String power) { - this.power = power; - } -} diff --git a/src/main/java/com/hxjt/dataupload/model/entity/rydw/DeviceInfoIot.java b/src/main/java/com/hxjt/dataupload/model/entity/rydw/DeviceInfoIot.java deleted file mode 100644 index a8e5973..0000000 --- a/src/main/java/com/hxjt/dataupload/model/entity/rydw/DeviceInfoIot.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.hxjt.dataupload.model.entity.rydw; - - -public class DeviceInfoIot { - /** - * 数据类型 - */ - private String dataType ="position"; - /** - * 人员信息 - */ - private DeviceInfoHx data; - - public String getDataType() { - return dataType; - } - - public void setDataType(String dataType) { - this.dataType = dataType; - } - - public DeviceInfoHx getData() { - return data; - } - - public void setData(DeviceInfoHx data) { - this.data = data; - } -} diff --git a/src/main/java/com/hxjt/dataupload/model/entity/rydw/UserBaseInfo.java b/src/main/java/com/hxjt/dataupload/model/entity/rydw/UserBaseInfo.java deleted file mode 100644 index 53b72a1..0000000 --- a/src/main/java/com/hxjt/dataupload/model/entity/rydw/UserBaseInfo.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.hxjt.dataupload.model.entity.rydw; - - -public class UserBaseInfo { - /** - * 企业容器id - */ - private String containerId ="ningyanghuagongchany"; - /** - * 人员唯一标示 - */ - private String userCode; - /** - * 人员姓名 - */ - private String userName; - /** - * 联系电话 - */ - private String userPhone; - /** - * 人员类型 - */ - private String userType; - /** - * 所属单位唯一标志 - */ - private String userOrgCode; - /** - * 所属单位名称 - */ - private String userOrgName; - /** - * 绑定设备唯一编码 - */ - private String cardId; - - public String getContainerId() { - return containerId; - } - - public void setContainerId(String containerId) { - this.containerId = containerId; - } - - public String getUserCode() { - return userCode; - } - - public void setUserCode(String userCode) { - this.userCode = userCode; - } - - public String getUserName() { - return userName; - } - - public void setUserName(String userName) { - this.userName = userName; - } - - public String getUserPhone() { - return userPhone; - } - - public void setUserPhone(String userPhone) { - this.userPhone = userPhone; - } - - public String getUserType() { - return userType; - } - - public void setUserType(String userType) { - this.userType = userType; - } - - public String getUserOrgCode() { - return userOrgCode; - } - - public void setUserOrgCode(String userOrgCode) { - this.userOrgCode = userOrgCode; - } - - public String getUserOrgName() { - return userOrgName; - } - - public void setUserOrgName(String userOrgName) { - this.userOrgName = userOrgName; - } - - public String getCardId() { - return cardId; - } - - public void setCardId(String cardId) { - this.cardId = cardId; - } -} diff --git a/src/main/java/com/hxjt/dataupload/model/entity/rydw/UserBaseInfoIot.java b/src/main/java/com/hxjt/dataupload/model/entity/rydw/UserBaseInfoIot.java deleted file mode 100644 index a03a027..0000000 --- a/src/main/java/com/hxjt/dataupload/model/entity/rydw/UserBaseInfoIot.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.hxjt.dataupload.model.entity.rydw; - - -public class UserBaseInfoIot { - /** - * 数据类型 - */ - private String dataType ="baseInfo"; - /** - * 人员信息 - */ - private UserBaseInfo data; - - public String getDataType() { - return dataType; - } - - public void setDataType(String dataType) { - this.dataType = dataType; - } - - public UserBaseInfo getData() { - return data; - } - - public void setData(UserBaseInfo data) { - this.data = data; - } -} diff --git a/src/main/java/com/hxjt/dataupload/mqtt/MqttCallback.java b/src/main/java/com/hxjt/dataupload/mqtt/MqttCallback.java index 1b657b3..a554cae 100644 --- a/src/main/java/com/hxjt/dataupload/mqtt/MqttCallback.java +++ b/src/main/java/com/hxjt/dataupload/mqtt/MqttCallback.java @@ -6,15 +6,13 @@ import org.eclipse.paho.client.mqttv3.MqttMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; @Component public class MqttCallback implements org.eclipse.paho.client.mqttv3.MqttCallback { - private static final Logger logger = LoggerFactory.getLogger(com.hxjt.dataupload.mqtt.MqttClient.class); + private static final Logger logger = LoggerFactory.getLogger(MqttClient.class); @Autowired - @Lazy private MqttConfig mqttConfig; private static org.eclipse.paho.client.mqttv3.MqttClient client; diff --git a/src/main/java/com/hxjt/dataupload/mqtt/MqttClient.java b/src/main/java/com/hxjt/dataupload/mqtt/MqttClient.java index b7ce3bf..7b9d0c6 100644 --- a/src/main/java/com/hxjt/dataupload/mqtt/MqttClient.java +++ b/src/main/java/com/hxjt/dataupload/mqtt/MqttClient.java @@ -6,17 +6,15 @@ import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; @Component public class MqttClient { - private static final Logger logger = LoggerFactory.getLogger(com.hxjt.dataupload.mqtt.MqttClient.class); - - private MqttCallback pushCallback; + private static final Logger logger = LoggerFactory.getLogger(MqttClient.class); + @Lazy @Autowired - public void setPushCallback(MqttCallback pushCallback) { - this.pushCallback = pushCallback; - } + private MqttCallback pushCallback; private static org.eclipse.paho.client.mqttv3.MqttClient client; @@ -25,12 +23,19 @@ public class MqttClient { } private static void setClient(org.eclipse.paho.client.mqttv3.MqttClient client) { - com.hxjt.dataupload.mqtt.MqttClient.client = client; + MqttClient.client = client; } - public void connect(String host, String clientID, String username, String password, int timeout, int keepalive) { - org.eclipse.paho.client.mqttv3.MqttClient client; + public synchronized void connect(String host, String clientID, String username, String password, int timeout, int keepalive) { +// org.eclipse.paho.client.mqttv3.MqttClient client; + if (client != null && client.isConnected()){ + return; + } try { + if (client != null){ + client.disconnect(); + client.close(); + } client = new org.eclipse.paho.client.mqttv3.MqttClient(host, clientID, new MemoryPersistence()); MqttConnectOptions options = new MqttConnectOptions(); //设置自动重连 @@ -42,15 +47,11 @@ public class MqttClient { options.setPassword(password.toCharArray()); options.setConnectionTimeout(timeout); options.setKeepAliveInterval(keepalive); - com.hxjt.dataupload.mqtt.MqttClient.setClient(client);// - try { - //设置消息到达的回调 - client.setCallback(pushCallback); - //连接到服务器 - client.connect(options); - } catch (Exception e) { - e.printStackTrace(); - } + MqttClient.setClient(client); + //设置消息到达的回调 + client.setCallback(pushCallback); + //连接到服务器 + client.connect(options); } catch (Exception e) { e.printStackTrace(); } @@ -69,7 +70,7 @@ public class MqttClient { message.setQos(qos); message.setRetained(retained); message.setPayload(pushMessage.getBytes()); - MqttTopic mTopic = com.hxjt.dataupload.mqtt.MqttClient.getClient().getTopic(topic); + MqttTopic mTopic = MqttClient.getClient().getTopic(topic); if (null == mTopic) { logger.error("topic not exist"); } @@ -95,7 +96,7 @@ public class MqttClient { public void subscribe(String topic, int qos) { logger.info("开始订阅主题" + topic); try { - com.hxjt.dataupload.mqtt.MqttClient.getClient().subscribe(topic, qos); + MqttClient.getClient().subscribe(topic, qos); } catch (MqttException e) { e.printStackTrace(); } diff --git a/src/main/java/com/hxjt/dataupload/mqtt/MqttConfig.java b/src/main/java/com/hxjt/dataupload/mqtt/MqttConfig.java index fee6e56..8f04256 100644 --- a/src/main/java/com/hxjt/dataupload/mqtt/MqttConfig.java +++ b/src/main/java/com/hxjt/dataupload/mqtt/MqttConfig.java @@ -1,21 +1,17 @@ package com.hxjt.dataupload.mqtt; - +import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.DependsOn; -import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; @Component @ConfigurationProperties("spring.mqtt") -@DependsOn("mqttCallback") +@Data public class MqttConfig { @Autowired - @Lazy - private com.hxjt.dataupload.mqtt.MqttClient mqttClient; + private MqttClient mqttClient; private String username; @@ -34,91 +30,18 @@ public class MqttConfig { private boolean enabled; @Bean - public com.hxjt.dataupload.mqtt.MqttClient getMqttPushClient() { + public MqttClient getMqttPushClient() { try { if(enabled == true){ - String mqtt_topic[] = StringUtils.split(defaultTopic, ","); mqttClient.connect(hostUrl, clientId, username, password, timeout, keepalive);//连接 - for(int i=0; i implements Serializable { private T resultValue; - public static com.hxjt.dataupload.mqtt.RespObject of() { - return new com.hxjt.dataupload.mqtt.RespObject(true, "OK", 0, (Object)null); + public static RespObject of() { + return new RespObject(true, "OK", 0, (Object)null); } - public static com.hxjt.dataupload.mqtt.RespObject of(T resultValue) { - return new com.hxjt.dataupload.mqtt.RespObject(true, "OK", 0, resultValue); + public static RespObject of(T resultValue) { + return new RespObject(true, "OK", 0, resultValue); } - public static com.hxjt.dataupload.mqtt.RespObject toHint(boolean successful, String resultHint) { - return new com.hxjt.dataupload.mqtt.RespObject(successful, resultHint, 1, (Object)null); + public static RespObject toHint(boolean successful, String resultHint) { + return new RespObject(successful, resultHint, 1, (Object)null); } - public static com.hxjt.dataupload.mqtt.RespObject toHint(boolean successful, String resultHint, T resultValue) { - return new com.hxjt.dataupload.mqtt.RespObject(successful, resultHint, 1, resultValue); + public static RespObject toHint(boolean successful, String resultHint, T resultValue) { + return new RespObject(successful, resultHint, 1, resultValue); } - public static com.hxjt.dataupload.mqtt.RespObject toLogin(boolean successful, String resultHint) { - return new com.hxjt.dataupload.mqtt.RespObject(successful, resultHint, 2, null); + public static RespObject toLogin(boolean successful, String resultHint) { + return new RespObject(successful, resultHint, 2, null); } - public static com.hxjt.dataupload.mqtt.RespObject toInfo(boolean successful, String resultHint) { - return new com.hxjt.dataupload.mqtt.RespObject(successful, resultHint, 1001, null); + public static RespObject toInfo(boolean successful, String resultHint) { + return new RespObject(successful, resultHint, 1001, null); } - public static com.hxjt.dataupload.mqtt.RespObject toWarn(boolean successful, String resultHint) { - return new com.hxjt.dataupload.mqtt.RespObject(successful, resultHint, 1002, null); + public static RespObject toWarn(boolean successful, String resultHint) { + return new RespObject(successful, resultHint, 1002, null); } - public static com.hxjt.dataupload.mqtt.RespObject toError(boolean successful, String resultHint) { - return new com.hxjt.dataupload.mqtt.RespObject(successful, resultHint, 1003, null); + public static RespObject toError(boolean successful, String resultHint) { + return new RespObject(successful, resultHint, 1003, null); } - public static com.hxjt.dataupload.mqtt.RespObject toError(boolean successful, String resultHint, Integer code, T resultValue) { - return new com.hxjt.dataupload.mqtt.RespObject(successful, resultHint, code, resultValue); + public static RespObject toError(boolean successful, String resultHint, Integer code, T resultValue) { + return new RespObject(successful, resultHint, code, resultValue); } public RespObject() { diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 15c18bb..d8adcd1 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -59,6 +59,18 @@ spring: primary: syncplant #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源. strict: false + mqtt: + username: 10@ningyanghuagongchany20250328091457 + password: 4c0d00b8dcdd4809ad75ad1d0e38533c + hostUrl: tcp://112.245.55.112:18183 + clientId: 10@ningyanghuagongchany20250328091457 + defaultTopic: /indoor/10@ningyanghuagongchany20250328091457/thirdParty/sensorData + timeout: 100 + keepalive: 60 + enabled: true + personTopic: /indoor/10@ningyanghuagongchany20250328091457/personInfo/up + deviceTopic: /indoor/10@ningyanghuagongchany20250328091457/bluetooth/up + areaTopic: /indoor/10@ningyanghuagongchany20250328091457/statistics/up xxl: job: admin: