From 23b48cfb069bc0e4b91da83f315e9fe1371aa4f3 Mon Sep 17 00:00:00 2001 From: daiyongfei <974332738@qq.com> Date: Tue, 16 Sep 2025 17:04:45 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=91=8A=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mqtt/config/MqttInboundConfiguration.java | 7 ++ .../global/mqtt/rule/bjq/BjqAlarmRule.java | 73 +++++++++++- .../mqtt/DeviceAlrmMessageHandler.java | 85 ++++++++++++++ .../src/main/resources/application-dev.yml | 2 +- .../common/core/utils/date/DurationUtils.java | 108 ++++++++++++++++++ .../equipment/domain/DeviceAlarm.java | 10 ++ .../equipment/domain/DeviceType.java | 4 +- .../equipment/domain/bo/DeviceAlarmBo.java | 6 +- .../equipment/domain/dto/AppDeviceBo.java | 2 +- .../equipment/domain/form/DeviceTypeForm.java | 8 +- .../domain/query/APPDeviceQueryCriteria1.java | 2 +- .../domain/query/DeviceQueryCriteria.java | 3 +- .../equipment/domain/vo/AppDeviceVo.java | 2 +- .../equipment/domain/vo/DeviceAlarmVo.java | 2 + .../equipment/domain/vo/WebDeviceVo.java | 2 +- .../equipment/mapper/DeviceAlarmMapper.java | 9 ++ .../equipment/mapper/DeviceMapper.java | 10 +- .../equipment/service/DeviceService.java | 10 +- .../service/IDeviceAlarmService.java | 10 ++ .../service/impl/DeviceAlarmServiceImpl.java | 24 +++- .../service/impl/DeviceServiceImpl.java | 5 + .../mapper/equipment/DeviceAlarmMapper.xml | 18 ++- .../mapper/equipment/DeviceMapper.xml | 5 + 23 files changed, 384 insertions(+), 23 deletions(-) create mode 100644 fys-admin/src/main/java/com/fuyuanshen/web/handler/mqtt/DeviceAlrmMessageHandler.java create mode 100644 fys-common/fys-common-core/src/main/java/com/fuyuanshen/common/core/utils/date/DurationUtils.java diff --git a/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/config/MqttInboundConfiguration.java b/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/config/MqttInboundConfiguration.java index 102fe71e..a9f9311c 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/config/MqttInboundConfiguration.java +++ b/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/config/MqttInboundConfiguration.java @@ -3,6 +3,7 @@ package com.fuyuanshen.global.mqtt.config; import cn.hutool.core.lang.UUID; import com.fuyuanshen.global.mqtt.receiver.ReceiverMessageHandler; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -55,4 +56,10 @@ public class MqttInboundConfiguration { public MessageHandler messageHandler(){ return receiverMessageHandler; } + + // @Bean + // @ServiceActivator(inputChannel = "messageInboundChannel") // 确保通道名称正确 + // public MessageHandler deviceAlarmMessageHandler() { + // return new DeviceAlrmMessageHandler(); + // } } \ No newline at end of file diff --git a/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/rule/bjq/BjqAlarmRule.java b/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/rule/bjq/BjqAlarmRule.java index 759f15b9..39fea9dd 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/rule/bjq/BjqAlarmRule.java +++ b/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/rule/bjq/BjqAlarmRule.java @@ -1,8 +1,18 @@ package com.fuyuanshen.global.mqtt.rule.bjq; +import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson2.JSONObject; import com.fuyuanshen.common.core.constant.GlobalConstants; +import com.fuyuanshen.common.core.domain.model.LoginUser; import com.fuyuanshen.common.core.utils.StringUtils; +import com.fuyuanshen.common.core.utils.date.DurationUtils; import com.fuyuanshen.common.redis.utils.RedisUtils; +import com.fuyuanshen.common.satoken.utils.LoginHelper; +import com.fuyuanshen.equipment.domain.Device; +import com.fuyuanshen.equipment.domain.bo.DeviceAlarmBo; +import com.fuyuanshen.equipment.domain.vo.DeviceAlarmVo; +import com.fuyuanshen.equipment.service.DeviceService; +import com.fuyuanshen.equipment.service.IDeviceAlarmService; import com.fuyuanshen.global.mqtt.base.MqttMessageRule; import com.fuyuanshen.global.mqtt.base.MqttRuleContext; import com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants; @@ -13,9 +23,11 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.time.Duration; +import java.util.Date; import java.util.concurrent.CompletableFuture; import static com.fuyuanshen.common.core.constant.GlobalConstants.FUNCTION_ACCESS_KEY; +import static com.fuyuanshen.common.core.constant.GlobalConstants.GLOBAL_REDIS_KEY; import static com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants.*; /** @@ -26,6 +38,11 @@ import static com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants.*; @Slf4j public class BjqAlarmRule implements MqttMessageRule { + + private final IDeviceAlarmService deviceAlarmService; + private final DeviceService deviceService; + + @Override public String getCommandType() { return LightingCommandTypeConstants.ALARM_MESSAGE; @@ -38,14 +55,21 @@ public class BjqAlarmRule implements MqttMessageRule { Object[] convertArr = context.getConvertArr(); String convertValue = convertArr[1].toString(); - if(StringUtils.isNotBlank(convertValue)){ + if (StringUtils.isNotBlank(convertValue)) { // 将设备状态信息存储到Redis中 - String deviceRedisKey = GlobalConstants.GLOBAL_REDIS_KEY+DeviceRedisKeyConstants.DEVICE_KEY_PREFIX + context.getDeviceImei() + DEVICE_ALARM_KEY_PREFIX; + String deviceRedisKey = GlobalConstants.GLOBAL_REDIS_KEY + DeviceRedisKeyConstants.DEVICE_KEY_PREFIX + context.getDeviceImei() + DEVICE_ALARM_KEY_PREFIX; // 存储到Redis RedisUtils.setCacheObject(deviceRedisKey, convertValue); } RedisUtils.setCacheObject(functionAccess, FunctionAccessStatus.OK.getCode(), Duration.ofSeconds(20)); + + // 保存告警信息 + String deviceImei = context.getDeviceImei(); + // 设备告警状态 0:解除告警 1:报警产生 + Byte state = (Byte) convertArr[1]; + savaAlarm(deviceImei, state); + } catch (Exception e) { log.error("处理告警命令时出错", e); RedisUtils.setCacheObject(functionAccess, FunctionAccessStatus.FAILED.getCode(), Duration.ofSeconds(20)); @@ -53,4 +77,49 @@ public class BjqAlarmRule implements MqttMessageRule { } + public void savaAlarm(String deviceImei, Byte state) { + DeviceAlarmVo deviceAlarmVo = deviceAlarmService.queryLatestByDeviceImei(deviceImei); + DeviceAlarmBo deviceAlarmBo = new DeviceAlarmBo(); + + // 解除告警 + if (state == 0) { + if (deviceAlarmVo != null) { + if (deviceAlarmVo.getFinishTime() == null) { + BeanUtil.copyProperties(deviceAlarmVo, deviceAlarmBo); + deviceAlarmBo.setFinishTime(new Date()); + String durationBetween = DurationUtils.getDurationBetween(deviceAlarmVo.getStartTime(), deviceAlarmBo.getFinishTime()); + deviceAlarmBo.setDurationTime(durationBetween); + deviceAlarmService.updateByBo(deviceAlarmBo); + } + } + } + + // 报警产生 + if (state == 1) { + if (deviceAlarmVo == null || deviceAlarmVo.getFinishTime() != null) { + + Device device = deviceService.selectDeviceByImei(deviceImei); + deviceAlarmBo.setDeviceId(device.getId()); + deviceAlarmBo.setDeviceImei(deviceImei); + // 0-强制报警,1-撞击闯入,2-自动报警,3-电子围栏告警 + deviceAlarmBo.setDeviceAction(0); + deviceAlarmBo.setStartTime(new Date()); + // 0已处理,1未处理 + deviceAlarmBo.setTreatmentState(1); + + // LoginUser loginUser = LoginHelper.getLoginUser(); + // deviceAlarmBo.setCreateBy(loginUser.getUserId()); + deviceAlarmBo.setTenantId(device.getTenantId()); + + String location = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + deviceImei + DEVICE_LOCATION_KEY_PREFIX); + if (StringUtils.isNotBlank(location)) { + JSONObject jsonObject = JSONObject.parseObject(location); + deviceAlarmBo.setLocation(jsonObject.getString("address")); + } + deviceAlarmService.insertByBo(deviceAlarmBo); + } + } + + } + } diff --git a/fys-admin/src/main/java/com/fuyuanshen/web/handler/mqtt/DeviceAlrmMessageHandler.java b/fys-admin/src/main/java/com/fuyuanshen/web/handler/mqtt/DeviceAlrmMessageHandler.java new file mode 100644 index 00000000..6d7717cc --- /dev/null +++ b/fys-admin/src/main/java/com/fuyuanshen/web/handler/mqtt/DeviceAlrmMessageHandler.java @@ -0,0 +1,85 @@ +// package com.fuyuanshen.web.handler.mqtt; +// +// import cn.hutool.core.lang.Dict; +// import com.fuyuanshen.common.core.constant.GlobalConstants; +// import com.fuyuanshen.common.json.utils.JsonUtils; +// import com.fuyuanshen.common.redis.utils.RedisUtils; +// import com.fuyuanshen.global.mqtt.base.MqttRuleContext; +// import com.fuyuanshen.global.mqtt.base.MqttRuleEngine; +// import com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants; +// import lombok.extern.slf4j.Slf4j; +// import org.apache.commons.lang3.StringUtils; +// import org.springframework.beans.factory.annotation.Autowired; +// import org.springframework.messaging.Message; +// import org.springframework.messaging.MessageHandler; +// import org.springframework.messaging.MessageHeaders; +// import org.springframework.messaging.MessagingException; +// import org.springframework.stereotype.Service; +// +// import java.time.Duration; +// import java.util.Objects; +// +// import static com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants.DEVICE_KEY_PREFIX; +// +// /** +// * @author: 默苍璃 +// * @date: 2025-09-1609:28 +// */ +// @Service +// @Slf4j +// public class DeviceAlrmMessageHandler implements MessageHandler { +// +// @Autowired +// private MqttRuleEngine ruleEngine; +// +// @Override +// public void handleMessage(Message message) throws MessagingException { +// +// // 处理新类型的消息 +// Object payload = message.getPayload(); +// MessageHeaders headers = message.getHeaders(); +// String receivedTopic = Objects.requireNonNull(headers.get("mqtt_receivedTopic")).toString(); +// +// log.info("设备强制报警消息处理器 - MQTT payload= {} \n receivedTopic = {}", payload, receivedTopic); +// +// // 解析消息并执行相应逻辑 +// Dict payloadDict = JsonUtils.parseMap(payload.toString()); +// if (payloadDict != null) { +// // 根据主题或消息内容执行不同的处理逻辑 +// processMessage(receivedTopic, payloadDict); +// } +// } +// +// private void processMessage(String topic, Dict payloadDict) { +// // 实现具体的业务逻辑 +// // 可以根据不同的主题执行不同的操作 +// if (topic.contains("newTopic")) { +// // 处理特定主题的消息 +// handleNewTopicMessage(payloadDict); +// } +// } +// +// private void handleNewTopicMessage(Dict payloadDict) { +// // 实现新主题消息的具体处理逻辑 +// String deviceImei = payloadDict.getStr("imei"); +// if (StringUtils.isNotBlank(deviceImei)) { +// // 更新设备状态到Redis +// String deviceOnlineStatusRedisKey = GlobalConstants.GLOBAL_REDIS_KEY + +// DEVICE_KEY_PREFIX + deviceImei + DeviceRedisKeyConstants.DEVICE_ONLINE_STATUS_KEY_PREFIX; +// RedisUtils.setCacheObject(deviceOnlineStatusRedisKey, "1", Duration.ofSeconds(62)); +// +// // 执行规则引擎 +// MqttRuleContext context = new MqttRuleContext(); +// context.setDeviceImei(deviceImei); +// context.setPayloadDict(payloadDict); +// // 设置命令类型 +// context.setCommandType((byte) 0x02); // 根据实际需要设置命令类型 +// +// boolean ruleExecuted = ruleEngine.executeRule(context); +// if (!ruleExecuted) { +// log.warn("未找到匹配的规则来处理新主题消息,设备IMEI: {}", deviceImei); +// } +// } +// } +// } +// diff --git a/fys-admin/src/main/resources/application-dev.yml b/fys-admin/src/main/resources/application-dev.yml index 680aa370..902d6f93 100644 --- a/fys-admin/src/main/resources/application-dev.yml +++ b/fys-admin/src/main/resources/application-dev.yml @@ -303,6 +303,6 @@ mqtt: password: #YtvpSfCNG url: tcp://47.120.79.150:3883 subClientId: fys_subClient - subTopic: worker/location/# + subTopic: A/# pubTopic: B/# pubClientId: fys_pubClient \ No newline at end of file diff --git a/fys-common/fys-common-core/src/main/java/com/fuyuanshen/common/core/utils/date/DurationUtils.java b/fys-common/fys-common-core/src/main/java/com/fuyuanshen/common/core/utils/date/DurationUtils.java new file mode 100644 index 00000000..8efc3d8f --- /dev/null +++ b/fys-common/fys-common-core/src/main/java/com/fuyuanshen/common/core/utils/date/DurationUtils.java @@ -0,0 +1,108 @@ +package com.fuyuanshen.common.core.utils.date; + +import java.util.Date; +import java.util.concurrent.TimeUnit; + +/** + * 持续时间工具类 + * 提供计算两个日期之间差值的方法,并以时分秒格式返回 + * + * @author fys + */ +public class DurationUtils { + + /** + * 计算两个日期之间的差值,返回时分秒格式的字符串 + * 格式为 "X小时 Y分钟 Z秒" + * + * @param startDate 开始日期 + * @param endDate 结束日期 + * @return 时分秒格式的时间差字符串 + */ + public static String getDurationBetween(Date startDate, Date endDate) { + if (startDate == null || endDate == null) { + return "0小时 0分钟 0秒"; + } + + long diffInMillis = Math.abs(endDate.getTime() - startDate.getTime()); + long hours = TimeUnit.MILLISECONDS.toHours(diffInMillis); + long minutes = TimeUnit.MILLISECONDS.toMinutes(diffInMillis) % 60; + long seconds = TimeUnit.MILLISECONDS.toSeconds(diffInMillis) % 60; + + return String.format("%d小时 %d分钟 %d秒", hours, minutes, seconds); + } + + /** + * 计算两个日期之间的差值,返回时分秒格式的字符串 + * 仅显示非零单位 + * + * @param startDate 开始日期 + * @param endDate 结束日期 + * @return 时分秒格式的时间差字符串,仅显示非零单位 + */ + public static String getDurationBetweenPretty(Date startDate, Date endDate) { + if (startDate == null || endDate == null) { + return "0秒"; + } + + long diffInMillis = Math.abs(endDate.getTime() - startDate.getTime()); + long hours = TimeUnit.MILLISECONDS.toHours(diffInMillis); + long minutes = TimeUnit.MILLISECONDS.toMinutes(diffInMillis) % 60; + long seconds = TimeUnit.MILLISECONDS.toSeconds(diffInMillis) % 60; + + StringBuilder result = new StringBuilder(); + if (hours > 0) { + result.append(hours).append("小时 "); + } + if (minutes > 0) { + result.append(minutes).append("分钟 "); + } + if (seconds > 0 || result.length() == 0) { + result.append(seconds).append("秒"); + } + + return result.toString().trim(); + } + + /** + * 计算指定毫秒数的持续时间,返回时分秒格式的字符串 + * + * @param millis 毫秒数 + * @return 时分秒格式的持续时间字符串 + */ + public static String getDurationFromMillis(long millis) { + long absMillis = Math.abs(millis); + long hours = TimeUnit.MILLISECONDS.toHours(absMillis); + long minutes = TimeUnit.MILLISECONDS.toMinutes(absMillis) % 60; + long seconds = TimeUnit.MILLISECONDS.toSeconds(absMillis) % 60; + + return String.format("%d小时 %d分钟 %d秒", hours, minutes, seconds); + } + + /** + * 计算指定毫秒数的持续时间,返回时分秒格式的字符串 + * 仅显示非零单位 + * + * @param millis 毫秒数 + * @return 时分秒格式的持续时间字符串,仅显示非零单位 + */ + public static String getDurationFromMillisPretty(long millis) { + long absMillis = Math.abs(millis); + long hours = TimeUnit.MILLISECONDS.toHours(absMillis); + long minutes = TimeUnit.MILLISECONDS.toMinutes(absMillis) % 60; + long seconds = TimeUnit.MILLISECONDS.toSeconds(absMillis) % 60; + + StringBuilder result = new StringBuilder(); + if (hours > 0) { + result.append(hours).append("小时 "); + } + if (minutes > 0) { + result.append(minutes).append("分钟 "); + } + if (seconds > 0 || result.length() == 0) { + result.append(seconds).append("秒"); + } + + return result.toString().trim(); + } +} \ No newline at end of file diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceAlarm.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceAlarm.java index 720ee9bc..10f19e6c 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceAlarm.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceAlarm.java @@ -2,6 +2,8 @@ package com.fuyuanshen.equipment.domain; import com.fuyuanshen.common.tenant.core.TenantEntity; import com.baomidou.mybatisplus.annotation.*; +import io.github.linpeilie.annotations.AutoMapping; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -100,4 +102,12 @@ public class DeviceAlarm extends TenantEntity { private Long treatmentState; + /** + * 设备IMEI + * device_imei + */ + @Schema(title = "设备IMEI") + @AutoMapping(target = "deviceImei") + private String deviceImei; + } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceType.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceType.java index ef3e3691..bfef80b5 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceType.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceType.java @@ -59,8 +59,8 @@ public class DeviceType extends TenantEntity { @Schema(title = "联网方式", example = "0:无;1:4G;2:WIFI") private String networkWay; - @Schema(title = "通讯方式", example = "0:4G;1:蓝牙,2 4G&蓝牙") - private String communicationMode; + @Schema(title = "通讯方式", example = "通讯方式 0:4G;1:蓝牙,2 4G&蓝牙") + private Integer communicationMode; /** * 创建人名称 diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/bo/DeviceAlarmBo.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/bo/DeviceAlarmBo.java index 0918f185..ab50363b 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/bo/DeviceAlarmBo.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/bo/DeviceAlarmBo.java @@ -2,6 +2,7 @@ package com.fuyuanshen.equipment.domain.bo; import com.fuyuanshen.common.core.validate.EditGroup; import com.fuyuanshen.common.mybatis.core.domain.BaseEntity; +import com.fuyuanshen.common.tenant.core.TenantEntity; import com.fuyuanshen.equipment.domain.DeviceAlarm; import io.github.linpeilie.annotations.AutoMapper; import jakarta.validation.constraints.NotNull; @@ -19,7 +20,7 @@ import java.util.Date; @Data @EqualsAndHashCode(callSuper = true) @AutoMapper(target = DeviceAlarm.class, reverseConvertGenerate = false) -public class DeviceAlarmBo extends BaseEntity { +public class DeviceAlarmBo extends TenantEntity { /** * ID @@ -35,6 +36,7 @@ public class DeviceAlarmBo extends BaseEntity { /** * 报警事项 * device_action + * 0-强制报警,1-撞击闯入,2-自动报警,3-电子围栏告警 */ private Integer deviceAction; @@ -99,7 +101,7 @@ public class DeviceAlarmBo extends BaseEntity { /** * 报警持续时间 */ - private Long durationTime; + private String durationTime; /** * 报警查询时间 diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/AppDeviceBo.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/AppDeviceBo.java index 51156125..5f440df4 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/AppDeviceBo.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/AppDeviceBo.java @@ -23,7 +23,7 @@ public class AppDeviceBo { private String deviceMac; /** - * 通讯方式 0:4G; 1:蓝牙 + * 通讯方式 0:4G;1:蓝牙,2 4G&蓝牙 */ @NotNull(message = "通讯方式不能为空", groups = { EditGroup.class }) private Integer communicationMode; diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/form/DeviceTypeForm.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/form/DeviceTypeForm.java index 93197f47..271611d9 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/form/DeviceTypeForm.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/form/DeviceTypeForm.java @@ -21,13 +21,13 @@ public class DeviceTypeForm { private Boolean isSupportBle; @Schema(title = "定位方式", example = "0:无;1:GPS;2:基站;3:wifi;4:北斗") - private String locateMode; + private Integer locateMode; @Schema(title = "联网方式", example = "0:无;1:4G;2:WIFI") - private String networkWay; + private Integer networkWay; - @Schema(title = "通讯方式", example = "0:4G;1:蓝牙") - private String communicationMode; + @Schema(title = "通讯方式", example = "通讯方式 0:4G;1:蓝牙,2 4G&蓝牙") + private Integer communicationMode; /** * 型号字典用于APP页面跳转 diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/APPDeviceQueryCriteria1.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/APPDeviceQueryCriteria1.java index a95085be..6e0b68c8 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/APPDeviceQueryCriteria1.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/APPDeviceQueryCriteria1.java @@ -59,7 +59,7 @@ public class APPDeviceQueryCriteria1 { @Schema(name = "租户ID") private Long tenantId; - @Schema(name = "通讯方式", example = "0:4G;1:蓝牙") + @Schema(name = "通讯方式", example = "通讯方式 0:4G;1:蓝牙,2 4G&蓝牙") private Integer communicationMode; } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceQueryCriteria.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceQueryCriteria.java index 1ec9137f..684bc86e 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceQueryCriteria.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceQueryCriteria.java @@ -82,9 +82,10 @@ public class DeviceQueryCriteria extends BaseEntity { private String tenantId; /** - * 通讯方式 0:4G;1:蓝牙 + * 通讯方式 0:4G;1:蓝牙,2 4G&蓝牙 * communication_mode */ + @Schema(title = "通讯方式", example = "0:4G;1:蓝牙,2 4G&蓝牙") private Integer communicationMode; /* app绑定用户id */ diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/AppDeviceVo.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/AppDeviceVo.java index aafc6fc2..760fc3a4 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/AppDeviceVo.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/AppDeviceVo.java @@ -26,7 +26,7 @@ public class AppDeviceVo implements Serializable { private String deviceMac; /** - * 通讯方式 0:4G;1:蓝牙 + * 通讯方式 0:4G;1:蓝牙,2 4G&蓝牙 */ private Integer communicationMode; diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceAlarmVo.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceAlarmVo.java index 431c0460..167cf414 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceAlarmVo.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/DeviceAlarmVo.java @@ -10,6 +10,7 @@ import com.fuyuanshen.common.excel.annotation.ExcelDictFormat; import com.fuyuanshen.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; import lombok.Data; import java.io.Serial; @@ -134,4 +135,5 @@ public class DeviceAlarmVo implements Serializable { @Schema(name = "设备图片") private String devicePic; + } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/WebDeviceVo.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/WebDeviceVo.java index 82c3eb10..f1d0879f 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/WebDeviceVo.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/WebDeviceVo.java @@ -27,7 +27,7 @@ public class WebDeviceVo implements Serializable { private String deviceMac; /** - * 通讯方式 0:4G;1:蓝牙 + * 通讯方式 0:4G;1:蓝牙,2 4G&蓝牙 */ private Integer communicationMode; diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceAlarmMapper.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceAlarmMapper.java index 39fbe991..d6b5e455 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceAlarmMapper.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceAlarmMapper.java @@ -25,4 +25,13 @@ public interface DeviceAlarmMapper extends BaseMapperPlus selectVoPage( Page pageQuery,@Param("bo") DeviceAlarmBo bo); + /** + * 根据设备IMEI查询最新的一条告警数据 + * + * @param deviceImei 设备IMEI + * @return 设备告警 + */ + DeviceAlarmVo selectLatestByDeviceImei(@Param("deviceImei") String deviceImei); + + } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceMapper.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceMapper.java index 5d772caa..7b9a99fb 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceMapper.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceMapper.java @@ -109,4 +109,12 @@ public interface DeviceMapper extends BaseMapper { int getUsageDataForMonth(@Param("deviceId") Long deviceId, @Param("year") int year, @Param("month") int month); -} + + /** + * 根据设备IMEI查询设备 + * + * @param deviceImei 设备IMEI + * @return 设备信息 + */ + Device selectDeviceByImei(@Param("deviceImei") String deviceImei); +} \ No newline at end of file diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceService.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceService.java index bae56010..dd86af56 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceService.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceService.java @@ -144,4 +144,12 @@ public interface DeviceService extends IService { * @return */ List> getEquipmentUsageData(Long deviceTypeId, Integer range); -} + + /** + * 根据设备IMEI查询设备 + * + * @param deviceImei 设备IMEI + * @return 设备信息 + */ + Device selectDeviceByImei(String deviceImei); +} \ No newline at end of file diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/IDeviceAlarmService.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/IDeviceAlarmService.java index c3dc9ff2..377e55eb 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/IDeviceAlarmService.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/IDeviceAlarmService.java @@ -65,4 +65,14 @@ public interface IDeviceAlarmService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 根据设备IMEI查询最新的一条告警数据 + * + * @param deviceImei 设备IMEI + * @return 设备告警 + */ + DeviceAlarmVo queryLatestByDeviceImei(String deviceImei); + + } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceAlarmServiceImpl.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceAlarmServiceImpl.java index 1bf06710..b345b393 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceAlarmServiceImpl.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceAlarmServiceImpl.java @@ -1,5 +1,6 @@ package com.fuyuanshen.equipment.service.impl; +import cn.hutool.core.bean.BeanUtil; import com.fuyuanshen.common.core.utils.MapstructUtils; import com.fuyuanshen.common.mybatis.core.page.TableDataInfo; import com.fuyuanshen.common.mybatis.core.page.PageQuery; @@ -102,11 +103,13 @@ public class DeviceAlarmServiceImpl implements IDeviceAlarmService { */ @Override public Boolean insertByBo(DeviceAlarmBo bo) { - DeviceAlarm add = MapstructUtils.convert(bo, DeviceAlarm.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; + DeviceAlarm deviceAlarm = new DeviceAlarm(); + // DeviceAlarm add = MapstructUtils.convert(bo, DeviceAlarm.class); + BeanUtil.copyProperties(bo, deviceAlarm); + validEntityBeforeSave(deviceAlarm); + boolean flag = baseMapper.insert(deviceAlarm) > 0; if (flag) { - bo.setId(add.getId()); + bo.setId(deviceAlarm.getId()); } return flag; } @@ -145,4 +148,17 @@ public class DeviceAlarmServiceImpl implements IDeviceAlarmService { } return baseMapper.deleteByIds(ids) > 0; } + + + /** + * 根据设备IMEI查询最新的一条告警数据 + * + * @param deviceImei 设备IMEI + * @return 设备告警 + */ + @Override + public DeviceAlarmVo queryLatestByDeviceImei(String deviceImei) { + return baseMapper.selectLatestByDeviceImei(deviceImei); + } + } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java index 48f09d86..4b77bda6 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java @@ -661,4 +661,9 @@ public class DeviceServiceImpl extends ServiceImpl impleme } + @Override + public Device selectDeviceByImei(String deviceImei) { + return baseMapper.selectDeviceByImei(deviceImei); + } + } diff --git a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceAlarmMapper.xml b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceAlarmMapper.xml index cdb76f8a..ad2823e1 100644 --- a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceAlarmMapper.xml +++ b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceAlarmMapper.xml @@ -6,7 +6,7 @@ + + + + + diff --git a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceMapper.xml b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceMapper.xml index 74c45573..92d6e5af 100644 --- a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceMapper.xml +++ b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceMapper.xml @@ -422,4 +422,9 @@ AND MONTH (dl.create_time) = #{month} + + + \ No newline at end of file