Commit 549ae016 by huangjy

feat:openApi第三方接口上报和告警

parent 1e94d1b7
ALTER TABLE `plat_device_other` ALTER TABLE `plat_device_other`
...@@ -85,3 +85,9 @@ CREATE TABLE `saas_pid_manage` ( ...@@ -85,3 +85,9 @@ CREATE TABLE `saas_pid_manage` (
ALTER TABLE `plat_alarm_record` ALTER TABLE `plat_alarm_record`
ADD COLUMN `wechat_read_flag` char(1) DEFAULT 0 COMMENT '小程序端是否读取 0未读 1已读' AFTER `misinformation_flag`; ADD COLUMN `wechat_read_flag` char(1) DEFAULT 0 COMMENT '小程序端是否读取 0未读 1已读' AFTER `misinformation_flag`;
-- 12.15 end
ALTER TABLE `plat_tenant`
ADD COLUMN `open_api_url` varchar(128) COMMENT '第三方接口url' AFTER `secret`;
\ No newline at end of file
...@@ -65,4 +65,6 @@ public class PlatTenantDTOVO extends BaseIdDTO { ...@@ -65,4 +65,6 @@ public class PlatTenantDTOVO extends BaseIdDTO {
private String appid; private String appid;
@ApiModelProperty(value = "secret") @ApiModelProperty(value = "secret")
private String secret; private String secret;
@ApiModelProperty(value = "openApiUrl")
private String openApiUrl;
} }
...@@ -35,6 +35,8 @@ public class PlatTenantVO extends BaseIdDTO implements Serializable { ...@@ -35,6 +35,8 @@ public class PlatTenantVO extends BaseIdDTO implements Serializable {
@ApiModelProperty(value = "租户管理员用户名") @ApiModelProperty(value = "租户管理员用户名")
private String userName; private String userName;
@ApiModelProperty(value = "openApiUrl")
private String openApiUrl;
/** /**
* 创建时间 * 创建时间
......
package com.makeit.module.controller.elder; package com.makeit.module.controller.elder;
import com.alibaba.fastjson.JSONObject;
import com.makeit.common.response.ApiResponseEntity; import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils; import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.wechat.device.PlatDeviceAttrWechatDTO; import com.makeit.dto.wechat.device.PlatDeviceAttrWechatDTO;
import com.makeit.external.huineng.HuiNengService;
import com.makeit.global.annotation.AuthIgnore; import com.makeit.global.annotation.AuthIgnore;
import com.makeit.global.aspect.tenant.TenantIdIgnore; import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.service.platform.device.PlatDeviceService; import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.platform.elder.*; import com.makeit.service.platform.elder.*;
import com.makeit.task.PlatElderReportTask;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -42,6 +43,8 @@ public class PlatElderSleepController { ...@@ -42,6 +43,8 @@ public class PlatElderSleepController {
private PlatElderBreatheAnalysisService platElderBreatheAnalysisService; private PlatElderBreatheAnalysisService platElderBreatheAnalysisService;
@Autowired @Autowired
private PlatElderCoordinateRecordService platElderCoordinateRecordService; private PlatElderCoordinateRecordService platElderCoordinateRecordService;
@Autowired
private HuiNengService huiNengService;
...@@ -103,5 +106,34 @@ public class PlatElderSleepController { ...@@ -103,5 +106,34 @@ public class PlatElderSleepController {
return ApiResponseUtils.success(platDeviceService.readDeviceProperties(dto)); return ApiResponseUtils.success(platDeviceService.readDeviceProperties(dto));
} }
@ApiOperation("读设备属性")
@PostMapping("healthReport")
@AuthIgnore
@TenantIdIgnore
public ApiResponseEntity<?> healthReport() {
JSONObject jsonObject = new JSONObject();
jsonObject.put("hr","80");
jsonObject.put("br","30");
jsonObject.put("person","1");
jsonObject.put("personState","2");
jsonObject.put("distance","100");
jsonObject.put("bodymove","30");
huiNengService.healthReport("1712384736845950978","1712376790484275200",jsonObject);
return ApiResponseUtils.success();
}
@ApiOperation("读设备属性")
@PostMapping("bodyAlarm")
@AuthIgnore
@TenantIdIgnore
public ApiResponseEntity<?> bodyAlarm() {
JSONObject jsonObject = new JSONObject();
jsonObject.put("person","1");
jsonObject.put("personState","1");
huiNengService.bodyAlarm("1712384736845950978","219A04X1856F6D8",jsonObject);
return ApiResponseUtils.success();
}
} }
...@@ -65,6 +65,8 @@ public class PlatTenant extends BaseEntity { ...@@ -65,6 +65,8 @@ public class PlatTenant extends BaseEntity {
private String url; private String url;
private String appid; private String appid;
private String secret; private String secret;
private String openApiUrl;
} }
\ No newline at end of file
package com.makeit.external;
public enum TenantLogoEnum {
HNGZ("汇能感知","hngz");
private String tenantName;
private String value;
public String getTenantName() {
return tenantName;
}
public String getValue() {
return value;
}
TenantLogoEnum(String tenantName, String value) {
this.tenantName = tenantName;
this.value = value;
}
}
package com.makeit.external.huineng;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Lists;
import com.makeit.common.entity.BaseBusEntity;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.saas.PlatTenant;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.saas.PlatTenantService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
@Component
@Slf4j
public class HuiNengService {
@Autowired
private PlatTenantService platTenantService;
@Autowired
private PlatDeviceService platDeviceService;
@TenantIdIgnore
public void healthReport(String tenantId, String deviceId, JSONObject jsonObject) {
PlatTenant platTenant = platTenantService.getById(tenantId);
if (platTenant == null) {
return;
}
PlatDevice platDevice = platDeviceService.getOne(new QueryWrapper<PlatDevice>().lambda()
.eq(PlatDevice::getOriDeviceId, deviceId)
.eq(BaseBusEntity::getTenantId, tenantId));
if (platDevice == null) {
return;
}
HuinengHealthReportDTO dto = new HuinengHealthReportDTO();
dto.setId(platDevice.getOriDeviceId());
dto.setDeviceType("健康监测设备");
dto.setDtype("实时上报");
dto.setUid(platDevice.getOriDeviceId());
dto.setPk("");
dto.setDid(platDevice.getOriDeviceId());
dto.setSite("");
dto.setLatitude("");
dto.setLongitude("");
dto.setTimestamp(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now()));
dto.setCompanyName(platTenant.getName());
List<HuinengHealthReportDTO.ReportInfo> data = Lists.newArrayList();
HuinengHealthReportDTO.ReportInfo reportInfo = new HuinengHealthReportDTO.ReportInfo();
reportInfo.setECG("");
reportInfo.setBloodSugar("");
reportInfo.setBloodOxygen("");
reportInfo.setBloodPressure("");
reportInfo.setTemperature("");
reportInfo.setSleepQuality("");
reportInfo.setMedicationStatus("");
reportInfo.setAlarmReason("");
reportInfo.setAlarmType("");
reportInfo.setAlarmTime("");
reportInfo.setEventName("设备上报");
reportInfo.setEventType("1");
reportInfo.setHeartRate(jsonObject.getString("hr"));
reportInfo.setInBedState(jsonObject.getString("person"));
reportInfo.setRespiratoryRate(jsonObject.getString("br"));
String bodymove = jsonObject.getString("bodymove");
reportInfo.setTurn(bodymove);
reportInfo.setTurnState(bodymove.equals("0") ? "0" : "1");
data.add(reportInfo);
dto.setData(data);
String reqJson = JSON.toJSONString(dto);
String url = platTenant.getOpenApiUrl() + "/admin-api/v1/HealthMonitoringEquipment/TimingdataPush?token=aHVpbmVuZ2dhbnpoaV9wdXNoc2V0";
log.info("请求url:{},参数:{}",url,reqJson);
String result = HttpUtil.createPost(url)
.body(reqJson,"application/json")
.execute().body();
HuinengResultVO responseMessage = JSON.parseObject(result, HuinengResultVO.class);
log.info("接口:{},返回信息:{}", url, JSON.toJSONString(responseMessage));
}
@TenantIdIgnore
public void bodyAlarm(String tenantId, String deviceId, JSONObject jsonObject) {
PlatTenant platTenant = platTenantService.getById(tenantId);
if (platTenant == null) {
return;
}
PlatDevice platDevice = platDeviceService.getOne(new QueryWrapper<PlatDevice>().lambda()
.eq(PlatDevice::getOriDeviceId, deviceId)
.eq(BaseBusEntity::getTenantId, tenantId));
if (platDevice == null) {
return;
}
HuinengBodyReportDTO dto = new HuinengBodyReportDTO();
dto.setId(platDevice.getOriDeviceId());
dto.setDeviceType("人体感应探测器\"");
dto.setDtype("报警上报");
dto.setUid(platDevice.getOriDeviceId());
dto.setPk("");
dto.setDid(platDevice.getOriDeviceId());
dto.setSite("");
dto.setLatitude("");
dto.setLongitude("");
String currentDate = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
dto.setTimestamp(currentDate);
dto.setCompanyName(platTenant.getName());
List<HuinengBodyReportDTO.AlarmInfo> data = Lists.newArrayList();
HuinengBodyReportDTO.AlarmInfo alarmInfo = new HuinengBodyReportDTO.AlarmInfo();
alarmInfo.setQuantityElectricity("");
alarmInfo.setSignalStrength("");
alarmInfo.setPerson(jsonObject.getString("person"));
alarmInfo.setAlarmReason("跌倒触发报警");
alarmInfo.setAlarmType("3");
alarmInfo.setAlarmTime(currentDate);
alarmInfo.setEventName("设备告警");
alarmInfo.setEventType("1");
data.add(alarmInfo);
dto.setData(data);
String reqJson = JSON.toJSONString(dto);
String url = platTenant.getOpenApiUrl() + "/admin-api/v1/HumanBodyInductionDetector/TimingdataPush?token=aHVpbmVuZ2dhbnpoaV9wdXNoc2V0";
log.info("请求url:{},参数:{}",url,reqJson);
String result = HttpUtil.createPost(url)
.body(JSON.toJSONString(dto),"application/json")
.execute().body();
HuinengResultVO responseMessage = JSON.parseObject(result, HuinengResultVO.class);
log.info("接口:{},返回信息:{}", url, JSON.toJSONString(responseMessage));
}
}
package com.makeit.external.huineng;
import lombok.Data;
import java.util.List;
/**
* 人体感应探测器数据接口
*/
@Data
public class HuinengBodyReportDTO {
private String id;
private String pk;
private String did;
private String deviceType;
private String deviceModel;
private String uid;
private String dtype;
private String site;
private String longitude;
private String latitude;
private String companyName;
private String timestamp;
private List<AlarmInfo> data;
@Data
public static class AlarmInfo {
private String signalStrength;
private String quantityElectricity;
private String person;
private String alarmReason;
private String alarmType;
private String eventName;
private String eventType;
private String alarmTime;
}
}
package com.makeit.dto.external; package com.makeit.external.huineng;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
/**
* 健康监测设备
*/
@Data @Data
public class HuinengReportDTO { public class HuinengHealthReportDTO {
private String id; private String id;
private String pk; private String pk;
...@@ -23,7 +26,7 @@ public class HuinengReportDTO { ...@@ -23,7 +26,7 @@ public class HuinengReportDTO {
private List<ReportInfo> data; private List<ReportInfo> data;
@Data @Data
static class ReportInfo { public static class ReportInfo {
private String signalStrength; private String signalStrength;
private String quantityElectricity; private String quantityElectricity;
private String ECG; private String ECG;
...@@ -41,6 +44,7 @@ public class HuinengReportDTO { ...@@ -41,6 +44,7 @@ public class HuinengReportDTO {
private String alarmReason; private String alarmReason;
private String alarmType; private String alarmType;
private String eventName; private String eventName;
private String eventType;
private String alarmTime; private String alarmTime;
} }
......
package com.makeit.external.huineng;
import lombok.Data;
@Data
public class HuinengResultVO {
private Integer code;
private String msg;
private boolean data;
}
package com.makeit.external.strategy;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Lists;
import com.makeit.common.entity.BaseBusEntity;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.saas.PlatTenant;
import com.makeit.external.TenantLogoEnum;
import com.makeit.external.huineng.HuinengBodyReportDTO;
import com.makeit.external.huineng.HuinengHealthReportDTO;
import com.makeit.external.huineng.HuinengResultVO;
import com.makeit.service.platform.device.PlatDeviceService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
@Service
@Slf4j
public class HuiNengStrategy implements OpenApiBaseStrategy {
@Autowired
private PlatDeviceService platDeviceService;
@Override
public void report(PlatTenant platTenant, String deviceId, JSONObject jsonObject) {
log.info("{},开始执行上报",platTenant.getName());
PlatDevice platDevice = platDeviceService.getOne(new QueryWrapper<PlatDevice>().lambda()
.eq(PlatDevice::getOriDeviceId, deviceId)
.eq(BaseBusEntity::getTenantId, platTenant.getId()));
if (platDevice == null) {
return;
}
if (StringUtils.isEmpty(platTenant.getUrl())) {
log.info("当前租户为配置openapi地址");
return;
}
HuinengHealthReportDTO dto = new HuinengHealthReportDTO();
dto.setId(platDevice.getOriDeviceId());
dto.setDeviceType("健康监测设备");
dto.setDtype("实时上报");
dto.setUid(platDevice.getOriDeviceId());
dto.setPk("");
dto.setDid(platDevice.getOriDeviceId());
dto.setSite("");
dto.setLatitude("");
dto.setLongitude("");
dto.setTimestamp(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now()));
dto.setCompanyName(platTenant.getName());
List<HuinengHealthReportDTO.ReportInfo> data = Lists.newArrayList();
HuinengHealthReportDTO.ReportInfo reportInfo = new HuinengHealthReportDTO.ReportInfo();
reportInfo.setECG("");
reportInfo.setBloodSugar("");
reportInfo.setBloodOxygen("");
reportInfo.setBloodPressure("");
reportInfo.setTemperature("");
reportInfo.setSleepQuality("");
reportInfo.setMedicationStatus("");
reportInfo.setAlarmReason("");
reportInfo.setAlarmType("");
reportInfo.setAlarmTime("");
reportInfo.setEventName("设备上报");
reportInfo.setEventType("1");
reportInfo.setHeartRate(jsonObject.getString("hr"));
reportInfo.setInBedState(jsonObject.getString("person"));
reportInfo.setRespiratoryRate(jsonObject.getString("br"));
String bodymove = jsonObject.getString("bodymove");
reportInfo.setTurn(bodymove);
reportInfo.setTurnState(bodymove.equals("0") ? "0" : "1");
data.add(reportInfo);
dto.setData(data);
String reqJson = JSON.toJSONString(dto);
String url = platTenant.getOpenApiUrl() + "/admin-api/v1/HealthMonitoringEquipment/TimingdataPush?token=aHVpbmVuZ2dhbnpoaV9wdXNoc2V0";
log.info("请求url:{},参数:{}", url, reqJson);
String result = HttpUtil.createPost(url)
.body(reqJson, "application/json")
.execute().body();
HuinengResultVO responseMessage = JSON.parseObject(result, HuinengResultVO.class);
log.info("接口:{},返回信息:{}", url, JSON.toJSONString(responseMessage));
}
@Override
public void alarm(PlatTenant platTenant, String deviceId, JSONObject jsonObject) {
log.info("{},开始执行告警",platTenant.getName());
PlatDevice platDevice = platDeviceService.getOne(new QueryWrapper<PlatDevice>().lambda()
.eq(PlatDevice::getOriDeviceId, deviceId)
.eq(BaseBusEntity::getTenantId, platTenant.getId()));
if (platDevice == null) {
return;
}
if (StringUtils.isEmpty(platTenant.getUrl())) {
log.info("当前租户为配置openapi地址");
return;
}
HuinengBodyReportDTO dto = new HuinengBodyReportDTO();
dto.setId(platDevice.getOriDeviceId());
dto.setDeviceType("人体感应探测器\"");
dto.setDtype("报警上报");
dto.setUid(platDevice.getOriDeviceId());
dto.setPk("");
dto.setDid(platDevice.getOriDeviceId());
dto.setSite("");
dto.setLatitude("");
dto.setLongitude("");
String currentDate = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
dto.setTimestamp(currentDate);
dto.setCompanyName(platTenant.getName());
List<HuinengBodyReportDTO.AlarmInfo> data = Lists.newArrayList();
HuinengBodyReportDTO.AlarmInfo alarmInfo = new HuinengBodyReportDTO.AlarmInfo();
alarmInfo.setQuantityElectricity("");
alarmInfo.setSignalStrength("");
alarmInfo.setPerson(jsonObject.getString("person"));
alarmInfo.setAlarmReason("跌倒触发报警");
alarmInfo.setAlarmType("3");
alarmInfo.setAlarmTime(currentDate);
alarmInfo.setEventName("设备告警");
alarmInfo.setEventType("1");
data.add(alarmInfo);
dto.setData(data);
String reqJson = JSON.toJSONString(dto);
String url = platTenant.getOpenApiUrl() + "/admin-api/v1/HumanBodyInductionDetector/TimingdataPush?token=aHVpbmVuZ2dhbnpoaV9wdXNoc2V0";
log.info("请求url:{},参数:{}", url, reqJson);
String result = HttpUtil.createPost(url)
.body(JSON.toJSONString(dto), "application/json")
.execute().body();
HuinengResultVO responseMessage = JSON.parseObject(result, HuinengResultVO.class);
log.info("接口:{},返回信息:{}", url, JSON.toJSONString(responseMessage));
}
@Override
public String getTenantLogo() {
return TenantLogoEnum.HNGZ.getValue();
}
}
package com.makeit.external.strategy;
import com.alibaba.fastjson.JSONObject;
import com.makeit.entity.saas.PlatTenant;
public interface OpenApiBaseStrategy {
void report(PlatTenant platTenant, String deviceId, JSONObject jsonObject);
void alarm(PlatTenant platTenant, String deviceId, JSONObject jsonObject);
String getTenantLogo();
}
package com.makeit.external.strategy;
import com.google.common.collect.Maps;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class OpenApiBaseStrategyFactory implements InitializingBean, ApplicationContextAware {
private static final Map<String, OpenApiBaseStrategy> HANDLER_MAP = Maps.newConcurrentMap();
private ApplicationContext appContext;
public OpenApiBaseStrategy getHandler(String logo) {
return HANDLER_MAP.get(logo);
}
@Override
public void afterPropertiesSet() {
appContext.getBeansOfType(OpenApiBaseStrategy.class)
.values()
.forEach(handler -> HANDLER_MAP.put(handler.getTenantLogo(), handler));
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
appContext = applicationContext;
}
}
...@@ -11,11 +11,15 @@ import com.makeit.entity.platform.alarm.PlatDayDurationRecord; ...@@ -11,11 +11,15 @@ import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
import com.makeit.entity.platform.device.PlatDevice; import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.PlatElder; import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.entity.platform.space.PlatRoom; import com.makeit.entity.platform.space.PlatRoom;
import com.makeit.entity.saas.PlatTenant;
import com.makeit.enums.CommonEnum; import com.makeit.enums.CommonEnum;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum; import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
import com.makeit.enums.redis.RedisConst; import com.makeit.enums.redis.RedisConst;
import com.makeit.external.strategy.OpenApiBaseStrategy;
import com.makeit.external.strategy.OpenApiBaseStrategyFactory;
import com.makeit.service.platform.alarm.PlatAlarmRecordService; import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.service.platform.alarm.PlatDayDurationRecordService; import com.makeit.service.platform.alarm.PlatDayDurationRecordService;
import com.makeit.service.saas.PlatTenantService;
import com.makeit.utils.AlarmConfigCacheUtil; import com.makeit.utils.AlarmConfigCacheUtil;
import com.makeit.utils.AlarmRedisDTO; import com.makeit.utils.AlarmRedisDTO;
import com.makeit.utils.DayDurationUtil; import com.makeit.utils.DayDurationUtil;
...@@ -47,7 +51,10 @@ public class FallAlarm implements IAlarm { ...@@ -47,7 +51,10 @@ public class FallAlarm implements IAlarm {
@Autowired @Autowired
private DayDurationUtil dayDurationUtil; private DayDurationUtil dayDurationUtil;
@Autowired
private OpenApiBaseStrategyFactory openApiBaseStrategyFactory;
@Autowired
private PlatTenantService platTenantService;
private final PlatAlarmConfigEnum.AlarmTypeEnum alarmTypeEnum = PlatAlarmConfigEnum.AlarmTypeEnum.FALL; private final PlatAlarmConfigEnum.AlarmTypeEnum alarmTypeEnum = PlatAlarmConfigEnum.AlarmTypeEnum.FALL;
@Override @Override
...@@ -90,6 +97,21 @@ public class FallAlarm implements IAlarm { ...@@ -90,6 +97,21 @@ public class FallAlarm implements IAlarm {
alarmRedisDTO.setAlarm(CommonEnum.YES.getValue()); alarmRedisDTO.setAlarm(CommonEnum.YES.getValue());
RedisUtil.set(RedisConst.ALARM_DEVICE_FALL_ID + deviceId, alarmRedisDTO); RedisUtil.set(RedisConst.ALARM_DEVICE_FALL_ID + deviceId, alarmRedisDTO);
notice(platAlarmCheckDTO); notice(platAlarmCheckDTO);
// 跌倒了设备需要发送告警到第三方平台
PlatTenant platTenant = platTenantService.getById(platDevice.getTenantId());
if (platTenant != null) {
OpenApiBaseStrategy strategyFactoryHandler = openApiBaseStrategyFactory.getHandler(platTenant.getCode());
if (strategyFactoryHandler != null) {
try {
strategyFactoryHandler.alarm(platTenant, deviceId, properties);
} catch (Exception e) {
log.error("调用openapi告警接口失败:{}", e.getMessage(), e);
}
}
}
} else { } else {
if (StringUtils.equals(alarmRedisDTO.getAlarm(), CommonEnum.YES.getValue())) { if (StringUtils.equals(alarmRedisDTO.getAlarm(), CommonEnum.YES.getValue())) {
alarmRedisDTO.setAlarm(CommonEnum.NO.getValue()); alarmRedisDTO.setAlarm(CommonEnum.NO.getValue());
......
...@@ -8,7 +8,10 @@ import com.makeit.common.entity.BaseEntity; ...@@ -8,7 +8,10 @@ import com.makeit.common.entity.BaseEntity;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO; import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig; import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.device.PlatDevice; import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.saas.PlatTenant;
import com.makeit.entity.saas.analysis.SaasSleepAnalysisModel; import com.makeit.entity.saas.analysis.SaasSleepAnalysisModel;
import com.makeit.external.strategy.OpenApiBaseStrategy;
import com.makeit.external.strategy.OpenApiBaseStrategyFactory;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum; import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
import com.makeit.global.aspect.tenant.TenantIdIgnore; import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.module.iot.enums.DeviceState; import com.makeit.module.iot.enums.DeviceState;
...@@ -17,6 +20,7 @@ import com.makeit.module.iot.vo.HeaderInfo; ...@@ -17,6 +20,7 @@ import com.makeit.module.iot.vo.HeaderInfo;
import com.makeit.service.platform.alarm.PlatAlarmConfigService; import com.makeit.service.platform.alarm.PlatAlarmConfigService;
import com.makeit.service.platform.alarm.alarmStrategy.IAlarm; import com.makeit.service.platform.alarm.alarmStrategy.IAlarm;
import com.makeit.service.platform.device.PlatDeviceService; import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.saas.PlatTenantService;
import com.makeit.service.saas.SaasSleepAnalysisModelService; import com.makeit.service.saas.SaasSleepAnalysisModelService;
import com.makeit.utils.AlarmConfigCacheUtil; import com.makeit.utils.AlarmConfigCacheUtil;
import com.makeit.utils.DeviceCacheUtil; import com.makeit.utils.DeviceCacheUtil;
...@@ -67,6 +71,8 @@ public class PushCallback implements MqttCallback { ...@@ -67,6 +71,8 @@ public class PushCallback implements MqttCallback {
public static final String WRITE_PROPERTY_REPLY = "WRITE_PROPERTY_REPLY"; public static final String WRITE_PROPERTY_REPLY = "WRITE_PROPERTY_REPLY";
public static final String OPEN_API_KEY_COUNT = "open:api:key:count";
@Autowired @Autowired
private MqttConfig mqttConfig; private MqttConfig mqttConfig;
...@@ -87,7 +93,10 @@ public class PushCallback implements MqttCallback { ...@@ -87,7 +93,10 @@ public class PushCallback implements MqttCallback {
private SaasSleepAnalysisModelService saasSleepAnalysisModelService; private SaasSleepAnalysisModelService saasSleepAnalysisModelService;
@Resource @Resource
private PlatAlarmConfigService alarmConfigService; private PlatAlarmConfigService alarmConfigService;
@Autowired
private OpenApiBaseStrategyFactory openApiBaseStrategyFactory;
@Autowired
private PlatTenantService platTenantService;
@Override @Override
public void connectionLost(Throwable cause) { public void connectionLost(Throwable cause) {
...@@ -196,6 +205,9 @@ public class PushCallback implements MqttCallback { ...@@ -196,6 +205,9 @@ public class PushCallback implements MqttCallback {
String iot_tenantId = binding.getId(); String iot_tenantId = binding.getId();
JSONObject properties = device.getProperties(); JSONObject properties = device.getProperties();
// 设备上报到第三方,一分钟一次
reportBrData(device, iot_tenantId);
//iot设备id //iot设备id
PlatDevice platDevice = deviceCacheUtil.get(deviceId + ":" + iot_tenantId); PlatDevice platDevice = deviceCacheUtil.get(deviceId + ":" + iot_tenantId);
if (platDevice == null) { if (platDevice == null) {
...@@ -281,6 +293,30 @@ public class PushCallback implements MqttCallback { ...@@ -281,6 +293,30 @@ public class PushCallback implements MqttCallback {
} }
private void reportBrData(DeviceInfo device,String iot_tenantId) {
HeaderInfo headers = device.getHeaders();
String deviceId = device.getDeviceId();
JSONObject properties = device.getProperties();
if (REPORT_PROPERTY.equals(device.getMessageType()) && headers.getProductName().contains("呼吸")) {
Long increment = redisTemplate.opsForValue().increment(OPEN_API_KEY_COUNT + deviceId + ":" + iot_tenantId,1);
if (increment != null && increment == 60) {
redisTemplate.delete(OPEN_API_KEY_COUNT + deviceId + ":" + iot_tenantId);
PlatTenant platTenant = platTenantService.getOne(new QueryWrapper<PlatTenant>()
.lambda().eq(PlatTenant::getIotOrgId,iot_tenantId));
if (platTenant != null) {
OpenApiBaseStrategy strategyFactoryHandler = openApiBaseStrategyFactory.getHandler(platTenant.getCode());
if (strategyFactoryHandler != null) {
try {
strategyFactoryHandler.report(platTenant, deviceId, properties);
} catch (Exception e) {
logger.error("调用呼吸设备上报数据接口失败:{}",e.getMessage(),e);
}
}
}
}
}
}
private void cacheSpaceFallDeviceData(String deviceSpaceTempData, DeviceInfo device, long currentSecond) { private void cacheSpaceFallDeviceData(String deviceSpaceTempData, DeviceInfo device, long currentSecond) {
long maxSize = 10L; long maxSize = 10L;
String key = deviceSpaceTempData + device.getDeviceId(); String key = deviceSpaceTempData + device.getDeviceId();
......
...@@ -101,4 +101,6 @@ public class IotDeviceInfoContentFall { ...@@ -101,4 +101,6 @@ public class IotDeviceInfoContentFall {
platAlarmCheckDTO.setProperties(properties); platAlarmCheckDTO.setProperties(properties);
offBedAlarm.checkConfig(platAlarmCheckDTO); offBedAlarm.checkConfig(platAlarmCheckDTO);
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment