From 8ba1bd71da8b24af3bdc531fbc6fe1dbf855cacc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A3=B7=E5=8F=B6?= <14103883+leaf-phos@user.noreply.gitee.com> Date: Tue, 29 Apr 2025 11:29:49 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=90=E8=90=A5=E5=8C=BA=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E8=BF=90=E8=90=A5=E5=95=86=E5=90=8E=EF=BC=8C=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E5=90=88=E4=BC=99=E4=BA=BA=E7=9A=84=E5=88=86?= =?UTF-8?q?=E6=88=90=E6=98=AF=E5=90=A6=E6=AD=A3=E7=A1=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/common/core/redis/RedisLock.java | 13 +++++++++---- .../ruoyi/common/core/redis/enums/RedisLockKey.java | 3 ++- .../account/service/impl/AccountValidatorImpl.java | 4 ---- .../mapper/CustomerServiceMapper.xml | 1 + .../com/ruoyi/bst/device/domain/DeviceQuery.java | 3 +++ .../com/ruoyi/bst/device/mapper/DeviceMapper.xml | 7 +++++++ .../device/service/impl/DeviceIotServiceImpl.java | 11 +++++++++++ .../java/com/ruoyi/bst/fault/mapper/FaultMapper.xml | 7 ++++--- .../iot/service/impl/IotReceiveServiceImpl.java | 2 +- 9 files changed, 38 insertions(+), 13 deletions(-) diff --git a/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisLock.java b/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisLock.java index 5405fd3..2b96986 100644 --- a/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisLock.java +++ b/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisLock.java @@ -1,14 +1,15 @@ package com.ruoyi.common.core.redis; -import com.ruoyi.common.core.redis.enums.RedisLockKey; -import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.SnowFlakeUtil; +import java.util.concurrent.TimeUnit; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; -import java.util.concurrent.TimeUnit; +import com.ruoyi.common.core.redis.enums.RedisLockKey; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.SnowFlakeUtil; /** * @author wjh @@ -41,6 +42,10 @@ public class RedisLock { return lock(redisLockKey.getKey() + ":" + key); } + public boolean lock(RedisLockKey redisLockKey, Object key, long seconds) { + return lock(redisLockKey.getKey() + ":" + key, String.valueOf(SnowFlakeUtil.newId()), seconds, TimeUnit.SECONDS, retry); + } + /** * 获取锁 */ diff --git a/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/enums/RedisLockKey.java b/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/enums/RedisLockKey.java index fbf3d3a..c8cf8f1 100644 --- a/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/enums/RedisLockKey.java +++ b/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/enums/RedisLockKey.java @@ -16,7 +16,8 @@ public enum RedisLockKey { PAY_CREATE("create_pay", "创建支付"), DEVICE_SN_UNIQUE("device_sn_unique", "设备SN唯一"), DEVICE_MAC_UNIQUE("device_mac_unique", "设备MAC唯一"), - USER_NAME_UNIQUE("user_name_unique", "用户账号唯一"); + USER_NAME_UNIQUE("user_name_unique", "用户账号唯一"), + DEVICE_IOT_REFRESH("device_iot_refresh", "设备物联网信息刷新"); private final String key; private final String name; diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/account/service/impl/AccountValidatorImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/account/service/impl/AccountValidatorImpl.java index 6425fbe..8382cf2 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/account/service/impl/AccountValidatorImpl.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/account/service/impl/AccountValidatorImpl.java @@ -4,9 +4,6 @@ import java.util.HashSet; import java.util.List; import java.util.Objects; -import com.ruoyi.bst.account.domain.enums.AccountType; -import com.ruoyi.common.valid.bank.BankCardInfo; -import com.ruoyi.common.valid.bank.BankValidUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -46,7 +43,6 @@ public class AccountValidatorImpl implements AccountValidator { ServiceUtil.assertion(account.getUserIsReal() == null || !account.getUserIsReal(), "ID为%s的用户未实名", account.getUserId()); ServiceUtil.assertion(!Objects.equals(account.getUserRealName(), account.getName()), "收款人姓名与实名姓名不符"); ServiceUtil.assertion(!Objects.equals(account.getUserRealIdCard(), account.getIdCard()), "收款人身份证号码与实名身份证号码不符"); - ServiceUtil.assertion(!Objects.equals(account.getUserRealPhone(), account.getMobile()), "收款人手机号与实名手机号不符"); // 查重 ServiceUtil.assertion(this.isRepeat(account), "ID为%s的收款账户重复", account.getId()); diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/customerService/mapper/CustomerServiceMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/customerService/mapper/CustomerServiceMapper.xml index 39fdb9e..c6d4075 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/customerService/mapper/CustomerServiceMapper.xml +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/customerService/mapper/CustomerServiceMapper.xml @@ -48,6 +48,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and bcs.end_time = #{query.endTime} and bcs.is_enabled = #{query.isEnabled} and bcs.deleted = #{query.deleted} + and bcs.deleted = false ${@com.ruoyi.framework.util.DataScopeUtil@create(query.scope) .userSetAlias("bcs.store_id,su.agent_id") .areaAlias("bcs.area_id", query.areaPermissions) diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/device/domain/DeviceQuery.java b/ruoyi-service/src/main/java/com/ruoyi/bst/device/domain/DeviceQuery.java index d42de13..d92a5ff 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/device/domain/DeviceQuery.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/device/domain/DeviceQuery.java @@ -44,4 +44,7 @@ public class DeviceQuery extends DeviceVO { @ApiModelProperty("MAC列表") private List macList; + + @ApiModelProperty("关键词") + private String keyword; } diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/device/mapper/DeviceMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/device/mapper/DeviceMapper.xml index 5c7e537..1f8c828 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/device/mapper/DeviceMapper.xml +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/device/mapper/DeviceMapper.xml @@ -127,6 +127,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and bul.user_name like concat('%', #{query.lastUserPhone}, '%') and mch.nick_name like concat('%', #{query.mchName}, '%') and bm.name like concat('%', #{query.modelName}, '%') + + and ( + bd.sn like concat('%', #{query.keyword}, '%') + or bd.mac like concat('%', #{query.keyword}, '%') + or bd.vehicle_num like concat('%', #{query.keyword}, '%') + ) + and bm.id in ( select bms.model_id from bst_model_suit bms where bms.suit_id = #{query.suitId} diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/device/service/impl/DeviceIotServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/device/service/impl/DeviceIotServiceImpl.java index 587aea6..a250e5f 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/device/service/impl/DeviceIotServiceImpl.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/device/service/impl/DeviceIotServiceImpl.java @@ -25,6 +25,8 @@ import com.ruoyi.bst.device.service.DeviceService; import com.ruoyi.bst.device.utils.DeviceUtil; import com.ruoyi.bst.orderDevice.domain.enums.OrderDeviceStatus; import com.ruoyi.common.constants.ServiceCode; +import com.ruoyi.common.core.redis.RedisLock; +import com.ruoyi.common.core.redis.enums.RedisLockKey; import com.ruoyi.common.utils.MathUtils; import com.ruoyi.common.utils.ServiceUtil; import com.ruoyi.common.utils.StringUtils; @@ -58,6 +60,9 @@ public class DeviceIotServiceImpl implements DeviceIotService { @Autowired private ScheduledExecutorService scheduledExecutorService; + @Autowired + private RedisLock redisLock; + private final static Integer SUB_FAST = 5; // 上报频率(快) private final static Integer SUB_SLOW = 300; // 上报频率(慢) @@ -274,6 +279,12 @@ public class DeviceIotServiceImpl implements DeviceIotService { scheduledExecutorService.schedule(() -> { for (DeviceVO device : deviceList) { try { + // 加锁,控制更新频率 + boolean lock = redisLock.lock(RedisLockKey.DEVICE_IOT_REFRESH, device.getMac(), 10); + if (!lock) { + continue; + } + // 获取在线状态 if (StringUtils.hasText(onlineType)) { String onlineStatus = iotService.getOnlineStatus(device, onlineType); diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/fault/mapper/FaultMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/fault/mapper/FaultMapper.xml index 5fc8201..81d7683 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/fault/mapper/FaultMapper.xml +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/fault/mapper/FaultMapper.xml @@ -42,9 +42,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and bf.user_name like concat('%', #{query.userName}, '%') and bf.vehicle_code = #{query.vehicleCode} and bf.picture = #{query.picture} - and bf.order_id = #{query.orderId} - and bf.store_id = #{query.storeId} - and bf.user_id = #{query.userId} + and bf.order_id = #{query.orderId} + and bf.store_id = #{query.storeId} + and bf.user_id = #{query.userId} + and bf.area_id = #{query.areaId} AND diff --git a/ruoyi-service/src/main/java/com/ruoyi/iot/service/impl/IotReceiveServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/iot/service/impl/IotReceiveServiceImpl.java index 5764c58..50d9443 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/iot/service/impl/IotReceiveServiceImpl.java +++ b/ruoyi-service/src/main/java/com/ruoyi/iot/service/impl/IotReceiveServiceImpl.java @@ -151,7 +151,7 @@ public class IotReceiveServiceImpl implements IotReceiveService { // 需要在设备未启动的时候做,否则可能有安全问题 if (!isOpen) { // 若当前数据点的上报时间和设备内上次上报的时间不一样,但是定位一样,则重启设备 - log.info("当前定位:{},{},上次定位:{},{}", sys.getLon(), sys.getLat(), device.getLongitude(), device.getLatitude()); + log.info("当前定位:{},{},上次定位:{},{}", sys.getLon().setScale(8), sys.getLat().setScale(8), device.getLongitude().setScale(8), device.getLatitude().setScale(8)); if (at.isAfter(device.getLastLocationTime()) && MathUtils.equalsFixed(device.getLongitude(), sys.getLon(), 8) && MathUtils.equalsFixed(device.getLatitude(), sys.getLat(), 8)) { String reason = String.format("设备不同时间的两次定位一样,重启设备。新定位:%s,%s,旧定位:%s,%s", sys.getLon(), sys.getLat(), device.getLongitude(), device.getLatitude()); deviceIotService.reboot(device, reason, true);