From 98ef841f184e927910bb0aa8059ec92130f7303d Mon Sep 17 00:00:00 2001
From: daiyongfei <974332738@qq.com>
Date: Tue, 2 Sep 2025 10:32:17 +0800
Subject: [PATCH 01/18] =?UTF-8?q?=E9=80=9A=E8=AE=AF=E6=96=B9=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../equipment/domain/query/DeviceQueryCriteria.java | 1 +
.../src/main/resources/mapper/equipment/DeviceMapper.xml | 5 ++++-
2 files changed, 5 insertions(+), 1 deletion(-)
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 233230ee..d4cb7766 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
@@ -83,6 +83,7 @@ public class DeviceQueryCriteria extends BaseEntity {
/**
* 通讯方式 0:4G;1:蓝牙
+ * communication_mode
*/
private Integer communicationMode;
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 20b385cc..45bca794 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
@@ -74,6 +74,9 @@
and d.group_id = #{criteria.groupId}
+
+ and t.communication_mode = #{criteria.communicationMode}
+
and da.create_time between #{criteria.params.beginTime} and #{criteria.params.endTime}
@@ -280,7 +283,7 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
From d97928b38abdbf837a0ecbf2663e82217af6240d Mon Sep 17 00:00:00 2001
From: daiyongfei <974332738@qq.com>
Date: Wed, 3 Sep 2025 09:45:17 +0800
Subject: [PATCH 03/18] =?UTF-8?q?=E5=88=86=E9=85=8D=E5=AE=A2=E6=88=B7=20?=
=?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=B3=A8=E9=87=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../controller/DeviceController.java | 34 +++++++++----------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/controller/DeviceController.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/controller/DeviceController.java
index 229c2da3..030452a1 100644
--- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/controller/DeviceController.java
+++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/controller/DeviceController.java
@@ -126,26 +126,26 @@ public class DeviceController extends BaseController {
// @Log("分配客户")
- @Operation(summary = "分配客户")
- @PutMapping(value = "/assignCustomer")
- public R assignCustomer(@Validated @RequestBody CustomerVo customerVo) {
- deviceService.assignCustomer(customerVo);
- return R.ok();
- }
+ // @Operation(summary = "分配客户")
+ // @PutMapping(value = "/assignCustomer")
+ // public R assignCustomer(@Validated @RequestBody CustomerVo customerVo) {
+ // deviceService.assignCustomer(customerVo);
+ // return R.ok();
+ // }
// @Log("撤回设备")
- @Operation(summary = "撤回分配设备")
- @PostMapping(value = "/withdraw")
- public R withdrawDevice(@RequestBody List ids) {
- try {
- deviceService.withdrawDevice(ids);
- } catch (Exception e) {
- log.error("updateDevice error: " + e.getMessage());
- return R.fail(e.getMessage());
- }
- return R.ok();
- }
+ // @Operation(summary = "撤回分配设备")
+ // @PostMapping(value = "/withdraw")
+ // public R withdrawDevice(@RequestBody List ids) {
+ // try {
+ // deviceService.withdrawDevice(ids);
+ // } catch (Exception e) {
+ // log.error("updateDevice error: " + e.getMessage());
+ // return R.fail(e.getMessage());
+ // }
+ // return R.ok();
+ // }
//
// /**
From 98cb67b1365a0538c18609fec92ea89606211888 Mon Sep 17 00:00:00 2001
From: chenyouting <514333061@qq.com>
Date: Wed, 3 Sep 2025 15:11:24 +0800
Subject: [PATCH 04/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8E=B7=E5=8F=96?=
=?UTF-8?q?=E7=BB=8F=E7=BA=AC=E5=BA=A6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../mqtt/rule/bjq/BjqLocationDataRule.java | 42 +++++++++----------
.../device/DeviceShareController.java | 16 +++++--
.../service/impl/DeviceLogServiceImpl.java | 1 +
3 files changed, 34 insertions(+), 25 deletions(-)
diff --git a/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/rule/bjq/BjqLocationDataRule.java b/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/rule/bjq/BjqLocationDataRule.java
index 0c3bda1f..69637bfd 100644
--- a/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/rule/bjq/BjqLocationDataRule.java
+++ b/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/rule/bjq/BjqLocationDataRule.java
@@ -117,28 +117,28 @@ public class BjqLocationDataRule implements MqttMessageRule {
if(StringUtils.isBlank(latitude) || StringUtils.isBlank(longitude)){
return;
}
- String[] latArr = latitude.split("\\.");
- String[] lonArr = longitude.split("\\.");
- // 将位置信息存储到Redis中
+// String[] latArr = latitude.split("\\.");
+// String[] lonArr = longitude.split("\\.");
+// // 将位置信息存储到Redis中
String redisKey = GlobalConstants.GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX+ deviceImei + DEVICE_LOCATION_KEY_PREFIX;
- String redisObj = RedisUtils.getCacheObject(redisKey);
- JSONObject jsonOBj = JSONObject.parseObject(redisObj);
- if(jsonOBj != null){
- String str1 = latArr[0] +"."+ latArr[1].substring(0,4);
- String str2 = lonArr[0] +"."+ lonArr[1].substring(0,4);
-
- String cacheLatitude = jsonOBj.getString("wgs84_latitude");
- String cacheLongitude = jsonOBj.getString("wgs84_longitude");
- String[] latArr1 = cacheLatitude.split("\\.");
- String[] lonArr1 = cacheLongitude.split("\\.");
-
- String cacheStr1 = latArr1[0] +"."+ latArr1[1].substring(0,4);
- String cacheStr2 = lonArr1[0] +"."+ lonArr1[1].substring(0,4);
- if(str1.equals(cacheStr1) && str2.equals(cacheStr2)){
- log.info("位置信息未发生变化: device={}, lat={}, lon={}", deviceImei, latitude, longitude);
- return;
- }
- }
+// String redisObj = RedisUtils.getCacheObject(redisKey);
+// JSONObject jsonOBj = JSONObject.parseObject(redisObj);
+// if(jsonOBj != null){
+// String str1 = latArr[0] +"."+ latArr[1].substring(0,4);
+// String str2 = lonArr[0] +"."+ lonArr[1].substring(0,4);
+//
+// String cacheLatitude = jsonOBj.getString("wgs84_latitude");
+// String cacheLongitude = jsonOBj.getString("wgs84_longitude");
+// String[] latArr1 = cacheLatitude.split("\\.");
+// String[] lonArr1 = cacheLongitude.split("\\.");
+//
+// String cacheStr1 = latArr1[0] +"."+ latArr1[1].substring(0,4);
+// String cacheStr2 = lonArr1[0] +"."+ lonArr1[1].substring(0,4);
+// if(str1.equals(cacheStr1) && str2.equals(cacheStr2)){
+// log.info("位置信息未发生变化: device={}, lat={}, lon={}", deviceImei, latitude, longitude);
+// return;
+// }
+// }
// 构造位置信息对象
Map locationInfo = new LinkedHashMap<>();
diff --git a/fys-admin/src/main/java/com/fuyuanshen/web/controller/device/DeviceShareController.java b/fys-admin/src/main/java/com/fuyuanshen/web/controller/device/DeviceShareController.java
index e623e9d6..e271fc64 100644
--- a/fys-admin/src/main/java/com/fuyuanshen/web/controller/device/DeviceShareController.java
+++ b/fys-admin/src/main/java/com/fuyuanshen/web/controller/device/DeviceShareController.java
@@ -2,6 +2,9 @@ package com.fuyuanshen.web.controller.device;
import com.fuyuanshen.app.domain.bo.AppDeviceShareBo;
import com.fuyuanshen.app.domain.vo.AppDeviceShareVo;
+import com.fuyuanshen.common.core.domain.R;
+import com.fuyuanshen.common.core.validate.AddGroup;
+import com.fuyuanshen.common.idempotent.annotation.RepeatSubmit;
import com.fuyuanshen.common.mybatis.core.page.PageQuery;
import com.fuyuanshen.common.mybatis.core.page.TableDataInfo;
import com.fuyuanshen.common.web.core.BaseController;
@@ -10,9 +13,7 @@ import com.fuyuanshen.equipment.domain.vo.DeviceAlarmVo;
import com.fuyuanshen.web.service.DeviceShareService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
/**
* 设备分享管理
@@ -39,5 +40,12 @@ public class DeviceShareController extends BaseController {
}
-
+ /**
+ * 新增设备分享
+ */
+ @RepeatSubmit()
+ @PostMapping("/deviceShare")
+ public R deviceShare(@Validated(AddGroup.class) @RequestBody AppDeviceShareBo bo) {
+ return toAjax(appDeviceShareService.deviceShare(bo));
+ }
}
diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceLogServiceImpl.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceLogServiceImpl.java
index 16ca6d3d..9ded85ab 100644
--- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceLogServiceImpl.java
+++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceLogServiceImpl.java
@@ -99,6 +99,7 @@ public class DeviceLogServiceImpl implements IDeviceLogService {
lqw.eq(StringUtils.isNotBlank(bo.getDataSource()), DeviceLog::getDataSource, bo.getDataSource());
lqw.like(StringUtils.isNotBlank(bo.getContent()), DeviceLog::getContent, bo.getContent());
lqw.in(CollectionUtil.isNotEmpty(bo.getDeviceIds()), DeviceLog::getDeviceId, bo.getDeviceIds());
+ lqw.orderByDesc(DeviceLog::getCreateTime);
return lqw;
}
From ff4db34e2adfec2af15f67487fc7447604f6cf06 Mon Sep 17 00:00:00 2001
From: daiyongfei <974332738@qq.com>
Date: Thu, 4 Sep 2025 11:29:07 +0800
Subject: [PATCH 05/18] =?UTF-8?q?=E5=9E=8B=E5=8F=B7=E5=AD=97=E5=85=B8?=
=?UTF-8?q?=E7=94=A8=E4=BA=8EAPP=E9=A1=B5=E9=9D=A2=E8=B7=B3=E8=BD=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../equipment/domain/form/DeviceTypeForm.java | 14 ++++++++++++++
1 file changed, 14 insertions(+)
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 d5e1df70..93197f47 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
@@ -35,4 +35,18 @@ public class DeviceTypeForm {
@Schema(title = "型号字典用于APP页面跳转")
private String modelDictionary;
+ /**
+ * 型号字典用于APP页面跳转
+ * app_model_dictionary
+ */
+ @Schema(title = "型号字典用于APP页面跳转")
+ private String appModelDictionary;
+
+ /**
+ * 型号字典用于PC页面跳转
+ * pc_model_dictionary
+ */
+ @Schema(title = "型号字典用于PC页面跳转")
+ private String pcModelDictionary;
+
}
From 452c37c4caf2da52151d93607aee6fc460a12531 Mon Sep 17 00:00:00 2001
From: chenyouting <514333061@qq.com>
Date: Thu, 4 Sep 2025 18:40:08 +0800
Subject: [PATCH 06/18] =?UTF-8?q?=E7=A6=BB=E7=BA=BF=E7=8A=B6=E6=80=81?=
=?UTF-8?q?=E5=8F=98=E6=9B=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../listener/RedisKeyExpirationListener.java | 29 +++++++++++++++++--
.../service/device/DeviceBJQBizService.java | 1 -
.../domain/query/DeviceQueryCriteria.java | 6 ++++
.../mapper/equipment/DeviceMapper.xml | 4 +++
4 files changed, 36 insertions(+), 4 deletions(-)
diff --git a/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/listener/RedisKeyExpirationListener.java b/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/listener/RedisKeyExpirationListener.java
index 86e669a0..11305d19 100644
--- a/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/listener/RedisKeyExpirationListener.java
+++ b/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/listener/RedisKeyExpirationListener.java
@@ -1,23 +1,37 @@
package com.fuyuanshen.global.mqtt.listener;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.fuyuanshen.common.core.constant.GlobalConstants;
import com.fuyuanshen.common.redis.utils.RedisUtils;
+import com.fuyuanshen.equipment.domain.Device;
+import com.fuyuanshen.equipment.mapper.DeviceMapper;
import com.fuyuanshen.global.mqtt.listener.domain.FunctionAccessStatus;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import java.time.Duration;
-import java.util.HashMap;
-import java.util.Map;
import static com.fuyuanshen.common.core.constant.GlobalConstants.FUNCTION_ACCESS_KEY;
import static com.fuyuanshen.common.core.constant.GlobalConstants.FUNCTION_ACCESS_TIMEOUT_KEY;
+import static com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants.DEVICE_KEY_PREFIX;
+import static com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants.DEVICE_ONLINE_STATUS_KEY_PREFIX;
@Component
@Slf4j
public class RedisKeyExpirationListener implements MessageListener {
+ @Autowired
+ @Qualifier("threadPoolTaskExecutor")
+ private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+
+ @Autowired
+ private DeviceMapper deviceMapper;
+
@Override
public void onMessage(Message message, byte[] pattern) {
String expiredKey = new String(message.getBody());
@@ -26,8 +40,17 @@ public class RedisKeyExpirationListener implements MessageListener {
String element = expiredKey.substring(FUNCTION_ACCESS_KEY.length());
handleFunctionAccessExpired(element);
}
+ if(expiredKey.endsWith(DEVICE_ONLINE_STATUS_KEY_PREFIX)){
+ threadPoolTaskExecutor.execute(() -> {
+ log.info("设备离线:{}", expiredKey);
+ String element = expiredKey.substring(GlobalConstants.GLOBAL_REDIS_KEY.length() + DEVICE_KEY_PREFIX.length(), expiredKey.length() - DEVICE_ONLINE_STATUS_KEY_PREFIX.length());
+ UpdateWrapper deviceUpdateWrapper = new UpdateWrapper<>();
+ deviceUpdateWrapper.eq("device_imei", element);
+ deviceUpdateWrapper.set("online_status", 0);
+ deviceMapper.update(deviceUpdateWrapper);
+ });
+ }
}
-
/**
* 访问key过期事件
* @param element 批次ID
diff --git a/fys-admin/src/main/java/com/fuyuanshen/web/service/device/DeviceBJQBizService.java b/fys-admin/src/main/java/com/fuyuanshen/web/service/device/DeviceBJQBizService.java
index 17c8d8ae..591ed6ef 100644
--- a/fys-admin/src/main/java/com/fuyuanshen/web/service/device/DeviceBJQBizService.java
+++ b/fys-admin/src/main/java/com/fuyuanshen/web/service/device/DeviceBJQBizService.java
@@ -100,7 +100,6 @@ public class DeviceBJQBizService {
UpdateWrapper updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", deviceId)
- .eq("binding_user_id", AppLoginHelper.getUserId())
.set("send_msg", bo.getSendMsg());
deviceMapper.update(updateWrapper);
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 d4cb7766..1ec9137f 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
@@ -114,4 +114,10 @@ public class DeviceQueryCriteria extends BaseEntity {
private String content;
+ /**
+ * 设备在线状态
+ * 0:离线;1:在线
+ */
+ private Integer onlineStatus;
+
}
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 88b17759..81c66744 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
@@ -281,6 +281,10 @@
and d.group_id = #{criteria.groupId}
+
+ and d.online_status = #{criteria.onlineStatus}
+
+ ORDER BY d.create_time DESC