From 1e2203719657c7b239860fe4b0b53ec985e231a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A2=A8=E5=A4=A7=E5=8F=94?= <494979559@qq.com> Date: Tue, 4 Jun 2024 15:13:00 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=9C=A8=E7=BA=BF=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/iot/domain/IotDeviceDetail.java | 6 ++++ .../iot/service/IotReceiveServiceImpl.java | 16 +++++++++++ .../com/ruoyi/iot/service/IotServiceImpl.java | 2 +- .../main/java/com/ruoyi/ss/ad/domain/Ad.java | 15 +++++++++- .../ruoyi/ss/ad/domain/enums/AdUrlType.java | 19 +++++++++++++ .../java/com/ruoyi/ss/ad/mapper/AdMapper.xml | 20 +++++-------- .../ss/device/mapper/SmDeviceMapper.java | 5 ++++ .../ruoyi/ss/device/mapper/SmDeviceMapper.xml | 21 ++++++++++++++ .../ss/device/service/ISmDeviceService.java | 5 ++++ .../service/impl/SmDeviceServiceImpl.java | 28 +++++++++++++++++-- .../controller/app/AppStoreController.java | 4 +++ 11 files changed, 124 insertions(+), 17 deletions(-) create mode 100644 smart-switch-service/src/main/java/com/ruoyi/ss/ad/domain/enums/AdUrlType.java diff --git a/smart-switch-service/src/main/java/com/ruoyi/iot/domain/IotDeviceDetail.java b/smart-switch-service/src/main/java/com/ruoyi/iot/domain/IotDeviceDetail.java index d41bc823..cdcbe7d7 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/iot/domain/IotDeviceDetail.java +++ b/smart-switch-service/src/main/java/com/ruoyi/iot/domain/IotDeviceDetail.java @@ -1,6 +1,7 @@ package com.ruoyi.iot.domain; import com.fasterxml.jackson.annotation.JsonProperty; +import com.ruoyi.ss.device.domain.enums.DeviceOnlineStatus; import lombok.AllArgsConstructor; import lombok.Data; import lombok.Getter; @@ -134,5 +135,10 @@ public class IotDeviceDetail { NO_ACTIVE(2); // 未激活 private final Integer status; + + // 转换为设备在线状态 + public static DeviceOnlineStatus toDeviceOnlineStatus(Integer iotStatus) { + return ONLINE.getStatus().equals(iotStatus) ? DeviceOnlineStatus.ONLINE : DeviceOnlineStatus.OFFLINE; + } } } diff --git a/smart-switch-service/src/main/java/com/ruoyi/iot/service/IotReceiveServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/iot/service/IotReceiveServiceImpl.java index c7c2ee55..4eaabb37 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/iot/service/IotReceiveServiceImpl.java +++ b/smart-switch-service/src/main/java/com/ruoyi/iot/service/IotReceiveServiceImpl.java @@ -3,9 +3,11 @@ import com.ruoyi.common.constant.IotConstants; import com.ruoyi.common.utils.NumberUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.iot.constants.ReceiveConstants; +import com.ruoyi.iot.domain.IotDeviceDetail; import com.ruoyi.iot.domain.ReceiveMsg; import com.ruoyi.iot.enums.ReceiveType; import com.ruoyi.ss.device.domain.SmDevice; +import com.ruoyi.ss.device.domain.enums.DeviceOnlineStatus; import com.ruoyi.ss.device.domain.enums.DeviceOutageWay; import com.ruoyi.ss.device.service.ISmDeviceService; import lombok.extern.slf4j.Slf4j; @@ -29,6 +31,7 @@ public class IotReceiveServiceImpl implements IotReceiveService{ @Override public void handleReceive(ReceiveMsg msg) { log.info("handleReceive {}", msg.toString()); + // 数据点推送 if (ReceiveType.DATA_POINT.getType().equals(msg.getType())) { if (ReceiveConstants.DS_SSID.equals(msg.getDsId()) && ReceiveConstants.DSV_SSID_CT.equals((String) msg.getValue())) { @@ -41,8 +44,21 @@ public class IotReceiveServiceImpl implements IotReceiveService{ deviceService.updateByIot(this.parseToDevice(msg)); } } + // 生命周期 + else if (ReceiveType.DEVICE_STATUS.getType().equals(msg.getType())) { + deviceService.updateByIot(this.parseToDeviceByLife(msg)); + } } + // 生命周期转设备信息 + private SmDevice parseToDeviceByLife(ReceiveMsg msg) { + SmDevice device = new SmDevice(); + device.setMac(msg.getDevName()); + device.setOnlineStatus(IotDeviceDetail.Status.toDeviceOnlineStatus(msg.getStatus()).getStatus()); + return device; + } + + // 数据点数据转设备信息 private SmDevice parseToDevice(ReceiveMsg msg) { SmDevice device = new SmDevice(); device.setMac(msg.getDevName()); diff --git a/smart-switch-service/src/main/java/com/ruoyi/iot/service/IotServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/iot/service/IotServiceImpl.java index 55b5274f..79a294bd 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/iot/service/IotServiceImpl.java +++ b/smart-switch-service/src/main/java/com/ruoyi/iot/service/IotServiceImpl.java @@ -77,7 +77,7 @@ public class IotServiceImpl implements IotService { return DeviceOnlineStatus.OFFLINE; } - return IotDeviceDetail.Status.ONLINE.getStatus().equals(detail.getStatus()) ? DeviceOnlineStatus.ONLINE : DeviceOnlineStatus.OFFLINE; + return IotDeviceDetail.Status.toDeviceOnlineStatus(detail.getStatus()); } // 通电 diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/ad/domain/Ad.java b/smart-switch-service/src/main/java/com/ruoyi/ss/ad/domain/Ad.java index 1eb2a380..ccfe8160 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/ad/domain/Ad.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/ad/domain/Ad.java @@ -1,5 +1,7 @@ package com.ruoyi.ss.ad.domain; +import com.ruoyi.common.valid.EnumValid; +import com.ruoyi.ss.ad.domain.enums.AdUrlType; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.apache.commons.lang3.builder.ToStringBuilder; @@ -7,6 +9,8 @@ import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.BaseEntity; +import javax.validation.constraints.NotNull; + /** * 广告对象 ss_ad * @@ -22,7 +26,7 @@ public class Ad extends BaseEntity private Long adId; @Excel(name = "广告类型 1:活动推广") - @ApiModelProperty("广告类型 1:活动推广 ") + @ApiModelProperty("广告类型 1:活动推广") private String type; @Excel(name = "广告图片") @@ -32,4 +36,13 @@ public class Ad extends BaseEntity @Excel(name = "跳转链接") @ApiModelProperty("跳转链接") private String url; + + @Excel(name = "跳转链接类型") + @ApiModelProperty("跳转链接类型,1外链跳转,2站内跳转") + @EnumValid( + clazz = AdUrlType.class, + method = "getType", + message = "非法的跳转链接类型" + ) + private String urlType; } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/ad/domain/enums/AdUrlType.java b/smart-switch-service/src/main/java/com/ruoyi/ss/ad/domain/enums/AdUrlType.java new file mode 100644 index 00000000..856df286 --- /dev/null +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/ad/domain/enums/AdUrlType.java @@ -0,0 +1,19 @@ +package com.ruoyi.ss.ad.domain.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author wjh + * 2024/5/27 + */ +@Getter +@AllArgsConstructor +public enum AdUrlType { + + OUTER("1"), // 外链 + INNER("2"); // 站内 + + private final String type; + +} diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/ad/mapper/AdMapper.xml b/smart-switch-service/src/main/java/com/ruoyi/ss/ad/mapper/AdMapper.xml index b10886bf..f1705f34 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/ad/mapper/AdMapper.xml +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/ad/mapper/AdMapper.xml @@ -4,18 +4,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - - - - - - - - - + select @@ -28,13 +17,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" sa.update_by, sa.update_time, sa.remark, - sa.deleted + sa.deleted, + sa.url_type from ss_ad sa and sa.ad_id = #{adId} and sa.type = #{type} + and sa.url_type = #{urlType} and sa.url like concat('%', #{url}, '%') and sa.deleted = #{deleted} and sa.deleted = false @@ -72,6 +63,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update_time, remark, deleted, + url_type, #{type}, @@ -83,6 +75,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{updateTime}, #{remark}, #{deleted}, + #{urlType}, @@ -97,6 +90,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update_by = #{updateBy}, update_time = #{updateTime}, remark = #{remark}, + url_type = #{urlType}, where ad_id = #{adId} diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/SmDeviceMapper.java b/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/SmDeviceMapper.java index d7dc8b6b..90848c7c 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/SmDeviceMapper.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/SmDeviceMapper.java @@ -156,4 +156,9 @@ public interface SmDeviceMapper * 设备超时修改状态 */ int changeTimeoutStatus(@Param("deviceId") Long deviceId); + + /** + * 批量更新在线状态 + */ + int batchUpdateOnlineStatus(@Param("list") List list); } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/SmDeviceMapper.xml b/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/SmDeviceMapper.xml index 622076ab..61201c35 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/SmDeviceMapper.xml +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/SmDeviceMapper.xml @@ -364,6 +364,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + update sm_device + + + + + WHEN #{item.deviceId} THEN #{item.onlineStatus} + + + WHEN #{item.deviceId} THEN `online_status` + + + + + where device_id in + + #{item.deviceId} + + + delete from sm_device where device_id = #{deviceId} diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/ISmDeviceService.java b/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/ISmDeviceService.java index 0962570d..d5f71eb5 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/ISmDeviceService.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/ISmDeviceService.java @@ -205,4 +205,9 @@ public interface ISmDeviceService * 刷新设备状态,如果过期,则修改为正常 */ void freshStatus(SmDeviceVo device); + + /** + * 设备心跳,用于检测是否在线 + */ + void deviceHeartBeat(); } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/SmDeviceServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/SmDeviceServiceImpl.java index 3cbc7217..7e4c161b 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/SmDeviceServiceImpl.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/SmDeviceServiceImpl.java @@ -33,7 +33,6 @@ import org.springframework.transaction.support.TransactionTemplate; import java.math.BigDecimal; import java.time.Duration; import java.time.LocalDateTime; -import java.time.temporal.ChronoUnit; import java.util.*; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -239,7 +238,7 @@ public class SmDeviceServiceImpl implements ISmDeviceService long seconds = Duration.between(LocalDateTime.now(), newDevice.getExpireTime()).getSeconds(); if (seconds > 0) { boolean rechargeResult = iotService.setTime(device.getMac(), new BigDecimal(seconds)); - ServiceUtil.assertion(!rechargeResult, "设备充值失败"); + ServiceUtil.assertion(!rechargeResult, "设备充值失败,请检查设备是否在线或联系管理员"); } // 拉取设备信息 @@ -281,6 +280,31 @@ public class SmDeviceServiceImpl implements ISmDeviceService }, between.getSeconds() , TimeUnit.SECONDS); } + /** + * 设备心跳,用于检测是否在线 + */ + @Override + public void deviceHeartBeat() { + log.info("device heart beat running..."); + List list = smDeviceMapper.selectSimpleList(new SmDeviceQuery()); + if (CollectionUtils.isEmpty(list)) { + log.info("device list is empty"); + return; + } + for (SmDeviceVo device : list) { + if (StringUtils.hasText(device.getMac())) { + String status = iotService.getOnlineStatus(device.getMac()).getStatus(); + log.info("device: {} {} online status is {}", device.getDeviceId(), device.getMac(), status); + device.setOnlineStatus(status); + } else { + device.setOnlineStatus(DeviceOnlineStatus.OFFLINE.getStatus()); + log.info("device {} mac is empty", device.getDeviceId()); + } + } + int i = smDeviceMapper.batchUpdateOnlineStatus(list); + log.info("update count: {}", i); + } + private int changeStatus(Long deviceId, DeviceStatus status) { SmDevice device = new SmDevice(); device.setDeviceId(deviceId); diff --git a/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppStoreController.java b/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppStoreController.java index 1929363a..f1b98b77 100644 --- a/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppStoreController.java +++ b/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppStoreController.java @@ -9,6 +9,7 @@ import com.ruoyi.common.core.domain.JsonViewProfile; import com.ruoyi.common.core.domain.ValidGroup; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.utils.ServiceUtil; +import com.ruoyi.ss.device.service.ISmDeviceService; import com.ruoyi.ss.store.domain.*; import com.ruoyi.ss.store.service.IStoreService; import com.ruoyi.ss.store.service.StoreAssembler; @@ -43,6 +44,9 @@ public class AppStoreController extends BaseController { @Autowired private StoreAssembler storeAssembler; + @Autowired + private ISmDeviceService deviceService; + /** * 查询本人店铺列表 */