From 364574eeae92ff4861972b4492cc89f5bebb62ca Mon Sep 17 00:00:00 2001 From: chenyouting <514333061@qq.com> Date: Wed, 27 Aug 2025 08:59:29 +0800 Subject: [PATCH] =?UTF-8?q?web=E7=AB=AF=E6=8E=A7=E5=88=B6=E4=B8=AD?= =?UTF-8?q?=E5=BF=833?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rule/bjq/BjqLaserModeSettingsRule.java | 15 ++--- .../device/DeviceControlCenterController.java | 16 ++++-- .../service/device/DeviceBJQBizService.java | 16 ++++++ .../web/service/device/DeviceBizService.java | 10 +++- .../mapper/app/AppDeviceShareMapper.xml | 4 +- .../fuyuanshen/equipment/domain/Device.java | 5 +- .../domain/dto/InstructionRecordDto.java | 32 +++++++++++ .../domain/query/DeviceQueryCriteria.java | 55 +++++++++++++------ .../domain/vo/InstructionRecordVo.java | 32 +++++++++++ .../equipment/mapper/DeviceLogMapper.java | 5 ++ .../equipment/mapper/DeviceMapper.java | 2 +- .../mapper/equipment/DeviceLogMapper.xml | 33 +++++++++++ .../mapper/equipment/DeviceMapper.xml | 15 +++-- 13 files changed, 196 insertions(+), 44 deletions(-) create mode 100644 fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/InstructionRecordDto.java create mode 100644 fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/InstructionRecordVo.java diff --git a/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/rule/bjq/BjqLaserModeSettingsRule.java b/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/rule/bjq/BjqLaserModeSettingsRule.java index b2bb3391..35b1ac3e 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/rule/bjq/BjqLaserModeSettingsRule.java +++ b/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/rule/bjq/BjqLaserModeSettingsRule.java @@ -15,8 +15,7 @@ import org.springframework.stereotype.Component; import java.time.Duration; import static com.fuyuanshen.common.core.constant.GlobalConstants.FUNCTION_ACCESS_KEY; -import static com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants.DEVICE_KEY_PREFIX; -import static com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants.DEVICE_LIGHT_MODE_KEY_PREFIX; +import static com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants.*; /** * 灯光模式订阅设备回传消息 @@ -37,14 +36,10 @@ public class BjqLaserModeSettingsRule implements MqttMessageRule { try { Object[] convertArr = context.getConvertArr(); - String mainLightMode = convertArr[1].toString(); - if(StringUtils.isNotBlank(mainLightMode)){ - if("0".equals(mainLightMode)){ - String deviceOnlineStatusRedisKey = GlobalConstants.GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX+ context.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_ONLINE_STATUS_KEY_PREFIX ; - RedisUtils.setCacheObject(deviceOnlineStatusRedisKey, "0", Duration.ofSeconds(60*15)); - } + String mode = convertArr[1].toString(); + if(StringUtils.isNotBlank(mode)){ // 发送设备状态和位置信息到Redis - syncSendDeviceDataToRedisWithFuture(context.getDeviceImei(),mainLightMode); + syncSendDeviceDataToRedisWithFuture(context.getDeviceImei(),mode); } RedisUtils.setCacheObject(functionAccess, FunctionAccessStatus.OK.getCode(), Duration.ofSeconds(30)); @@ -65,7 +60,7 @@ public class BjqLaserModeSettingsRule implements MqttMessageRule { // }); try { // 将设备状态信息存储到Redis中 - String deviceRedisKey = GlobalConstants.GLOBAL_REDIS_KEY+DeviceRedisKeyConstants.DEVICE_KEY_PREFIX + deviceImei + DEVICE_LIGHT_MODE_KEY_PREFIX; + String deviceRedisKey = GlobalConstants.GLOBAL_REDIS_KEY+DeviceRedisKeyConstants.DEVICE_KEY_PREFIX + deviceImei + DEVICE_LASER_MODE_KEY_PREFIX; // 存储到Redis RedisUtils.setCacheObject(deviceRedisKey, convertValue.toString()); diff --git a/fys-admin/src/main/java/com/fuyuanshen/web/controller/device/DeviceControlCenterController.java b/fys-admin/src/main/java/com/fuyuanshen/web/controller/device/DeviceControlCenterController.java index 76e39357..789ca852 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/web/controller/device/DeviceControlCenterController.java +++ b/fys-admin/src/main/java/com/fuyuanshen/web/controller/device/DeviceControlCenterController.java @@ -8,19 +8,17 @@ import com.fuyuanshen.common.mybatis.core.page.PageQuery; import com.fuyuanshen.common.mybatis.core.page.TableDataInfo; import com.fuyuanshen.common.web.core.BaseController; import com.fuyuanshen.equipment.domain.dto.AppDeviceBo; +import com.fuyuanshen.equipment.domain.dto.InstructionRecordDto; import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria; import com.fuyuanshen.equipment.domain.vo.AppDeviceVo; +import com.fuyuanshen.equipment.domain.vo.InstructionRecordVo; import com.fuyuanshen.equipment.domain.vo.WebDeviceVo; import com.fuyuanshen.web.service.device.DeviceBizService; -import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import java.util.Date; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -30,7 +28,7 @@ import java.util.Map; @Slf4j @RestController @RequiredArgsConstructor -@RequestMapping("/api/device/controlCenter") +@RequestMapping("/api/device") public class DeviceControlCenterController extends BaseController { private final DeviceBizService appDeviceService; @@ -95,4 +93,12 @@ public class DeviceControlCenterController extends BaseController { return R.ok(appDeviceService.getDeviceInfo(deviceMac)); } + /** + * 指令下发记录 + */ + @GetMapping("/instructionRecord") + public TableDataInfo getInstructionRecord(InstructionRecordDto dto, PageQuery pageQuery) { + return appDeviceService.getInstructionRecord(dto,pageQuery); + } + } 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 9ee8236e..17c8d8ae 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 @@ -190,6 +190,22 @@ public class DeviceBJQBizService { vo.setBatteryPercentage("0"); } + String lightModeStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + device.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_LIGHT_MODE_KEY_PREFIX); + // 获取电量 + if(StringUtils.isNotBlank(deviceStatus)){ + vo.setMainLightMode(lightModeStatus); + } + + String lightBrightnessStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + device.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_LIGHT_BRIGHTNESS_KEY_PREFIX); + if(StringUtils.isNotBlank(lightBrightnessStatus)){ + vo.setLightBrightness(lightBrightnessStatus); + } + + String laserLightMode = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + device.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_LASER_MODE_KEY_PREFIX); + if(StringUtils.isNotBlank(laserLightMode)){ + vo.setLaserLightMode(laserLightMode); + } + // 获取经度纬度 String locationKey = GlobalConstants.GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + device.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_LOCATION_KEY_PREFIX; String locationInfo = RedisUtils.getCacheObject(locationKey); diff --git a/fys-admin/src/main/java/com/fuyuanshen/web/service/device/DeviceBizService.java b/fys-admin/src/main/java/com/fuyuanshen/web/service/device/DeviceBizService.java index 90114467..4e468f30 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/web/service/device/DeviceBizService.java +++ b/fys-admin/src/main/java/com/fuyuanshen/web/service/device/DeviceBizService.java @@ -14,7 +14,6 @@ import com.fuyuanshen.app.domain.vo.APPDeviceTypeVo; import com.fuyuanshen.app.domain.vo.AppUserVo; import com.fuyuanshen.app.mapper.AppDeviceBindRecordMapper; import com.fuyuanshen.app.mapper.AppDeviceShareMapper; -import com.fuyuanshen.app.mapper.AppPersonnelInfoMapper; import com.fuyuanshen.app.mapper.AppUserMapper; import com.fuyuanshen.app.mapper.equipment.APPDeviceMapper; import com.fuyuanshen.common.core.exception.ServiceException; @@ -26,15 +25,15 @@ import com.fuyuanshen.common.redis.utils.RedisUtils; import com.fuyuanshen.common.satoken.utils.AppLoginHelper; import com.fuyuanshen.equipment.domain.Device; import com.fuyuanshen.equipment.domain.dto.AppDeviceBo; +import com.fuyuanshen.equipment.domain.dto.InstructionRecordDto; import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria; import com.fuyuanshen.equipment.domain.vo.AppDeviceVo; +import com.fuyuanshen.equipment.domain.vo.InstructionRecordVo; import com.fuyuanshen.equipment.domain.vo.WebDeviceVo; import com.fuyuanshen.equipment.enums.BindingStatusEnum; import com.fuyuanshen.equipment.enums.CommunicationModeEnum; import com.fuyuanshen.equipment.mapper.DeviceLogMapper; import com.fuyuanshen.equipment.mapper.DeviceMapper; -import com.fuyuanshen.equipment.mapper.DeviceTypeMapper; -import com.fuyuanshen.global.mqtt.config.MqttGateway; import com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants; import com.fuyuanshen.web.service.device.status.base.DeviceStatusRule; import com.fuyuanshen.web.service.device.status.base.RealTimeStatusEngine; @@ -332,4 +331,9 @@ public class DeviceBizService { // List devices = deviceMapper.selectList(queryWrapper); return deviceMapper.getDeviceInfo(deviceMac); } + + public TableDataInfo getInstructionRecord(InstructionRecordDto bo, PageQuery pageQuery) { + Page result = deviceLogMapper.getInstructionRecord(pageQuery.build(), bo); + return TableDataInfo.build(result); + } } diff --git a/fys-modules/fys-app/src/main/resources/mapper/app/AppDeviceShareMapper.xml b/fys-modules/fys-app/src/main/resources/mapper/app/AppDeviceShareMapper.xml index 39033bc1..137f67ff 100644 --- a/fys-modules/fys-app/src/main/resources/mapper/app/AppDeviceShareMapper.xml +++ b/fys-modules/fys-app/src/main/resources/mapper/app/AppDeviceShareMapper.xml @@ -12,7 +12,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" d.device_pic, dt.type_name, dt.communication_mode, - dt.model_dictionary detailPageUrl, + dt.app_model_dictionary detailPageUrl, d.bluetooth_name, c.binding_time, ad.*,u.user_name otherPhonenumber @@ -33,7 +33,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" dt.type_name, dt.communication_mode, d.bluetooth_name, - dt.model_dictionary detailPageUrl, + dt.app_model_dictionary detailPageUrl, c.binding_time, ad.*,u.user_name otherPhonenumber from diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/Device.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/Device.java index d166aacb..5c90dc82 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/Device.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/Device.java @@ -153,5 +153,8 @@ public class Device extends TenantEntity { */ @Schema(title = "出厂日期") private Date productionDate; - + /** + * 在线状态(0离线,1在线) + */ + private Integer onlineStatus; } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/InstructionRecordDto.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/InstructionRecordDto.java new file mode 100644 index 00000000..240fc482 --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/InstructionRecordDto.java @@ -0,0 +1,32 @@ +package com.fuyuanshen.equipment.domain.dto; + +import lombok.Data; + +@Data +public class InstructionRecordDto { + /** + * 设备类型 + */ + private String deviceType; + /** + * 设备名称 + */ + private String deviceName; + /** + * 设备MAC + */ + private String deviceMac; + /** + * 设备IMEI + */ + private String deviceImei; + /** + * 操作时间-开始时间 + */ + private String startTime; + + /** + * 操作时间-结束时间 + */ + private String endTime; +} 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 c9dcca99..b9643d6c 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 @@ -18,22 +18,34 @@ import java.util.Set; @Data public class DeviceQueryCriteria extends BaseEntity { - @Schema(name = "设备id") + /** + * 设备id + */ private Long deviceId; - @Schema(name = "设备名称") + /** + * 设备名称 + */ private String deviceName; - @Schema(name = "设备类型") + /** + * 设备类型 + */ private Long deviceType; - @Schema(name = "设备MAC") + /** + * 设备MAC + */ private String deviceMac; - @Schema(name = "设备IMEI") + /** + * 设备IMEI + */ private String deviceImei; - @Schema(name = "设备SN") + /** + * 设备SN + */ private String deviceSn; /** @@ -41,26 +53,37 @@ public class DeviceQueryCriteria extends BaseEntity { * 0 失效 * 1 正常 */ - @Schema(name = "设备状态 0 失效 1 正常 ") private Integer deviceStatus; - @Schema(name = "页码", example = "1") + /** + * 页码 + */ private Integer pageNum = 1; - @Schema(name = "每页数据量", example = "10") + /** + * 每页数据量 + */ private Integer pageSize = 10; - @Schema(name = "客户id") + /** + * 客户id + */ private Long customerId; private Set customerIds; - @Schema(name = "当前所有者") + /** + * 当前所有者 + */ private Long currentOwnerId; - @Schema(name = "租户ID") + /** + * 租户ID + */ private String tenantId; - @Schema(name = "通讯方式", example = "0:4G;1:蓝牙") + /** + * 通讯方式 0:4G;1:蓝牙 + */ private Integer communicationMode; /* app绑定用户id */ @@ -72,22 +95,22 @@ public class DeviceQueryCriteria extends BaseEntity { */ private String personnelBy; + /** * 是否为管理员 */ - @Schema(name = "是否为管理员") private Boolean isAdmin = false; + /** * 设备所属分组 */ - @Schema(name = "设备所属分组") private Long groupId; + /** * 设备地区 */ - @Schema(name = "设备地区") private String area; } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/InstructionRecordVo.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/InstructionRecordVo.java new file mode 100644 index 00000000..97964ec4 --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/InstructionRecordVo.java @@ -0,0 +1,32 @@ +package com.fuyuanshen.equipment.domain.vo; + +import lombok.Data; + +@Data +public class InstructionRecordVo { + private Long id; + /** + * 设备名称 + */ + private String deviceName; + + /** + * 设备类型 + */ + private String deviceType; + + /** + * 操作模块 + */ + private String deviceAction; + + /** + * 操作内容 + */ + private String content; + + /** + * 操作时间 + */ + private String createTime; +} diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceLogMapper.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceLogMapper.java index adff5de4..30b9fb82 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceLogMapper.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceLogMapper.java @@ -1,8 +1,12 @@ package com.fuyuanshen.equipment.mapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fuyuanshen.equipment.domain.DeviceLog; +import com.fuyuanshen.equipment.domain.dto.InstructionRecordDto; import com.fuyuanshen.equipment.domain.vo.DeviceLogVo; import com.fuyuanshen.common.mybatis.core.mapper.BaseMapperPlus; +import com.fuyuanshen.equipment.domain.vo.InstructionRecordVo; +import org.apache.ibatis.annotations.Param; /** * 设备日志Mapper接口 @@ -12,4 +16,5 @@ import com.fuyuanshen.common.mybatis.core.mapper.BaseMapperPlus; */ public interface DeviceLogMapper extends BaseMapperPlus { + Page getInstructionRecord(Page page,@Param("bo") InstructionRecordDto bo); } 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 39896531..e75e1c26 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 @@ -70,5 +70,5 @@ public interface DeviceMapper extends BaseMapper { AppDeviceVo getDeviceInfo(@Param("deviceMac") String deviceMac); - Page queryWebDeviceList(Page build, DeviceQueryCriteria bo); + Page queryWebDeviceList(Page build,@Param("criteria") DeviceQueryCriteria criteria); } diff --git a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceLogMapper.xml b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceLogMapper.xml index d4c99d6a..d15eeb8b 100644 --- a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceLogMapper.xml +++ b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceLogMapper.xml @@ -4,4 +4,37 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + 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 51f0a638..7e4423cb 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 @@ -151,7 +151,7 @@ dt.type_name, dt.communication_mode, d.bluetooth_name, - dt.model_dictionary detailPageUrl, + dt.app_model_dictionary detailPageUrl, c.binding_time from device d inner join device_type dt on d.device_type = dt.id @@ -181,7 +181,7 @@ d.device_pic, dt.type_name, dt.communication_mode, - dt.model_dictionary detailPageUrl, + dt.app_model_dictionary detailPageUrl, d.bluetooth_name from device d inner join device_type dt on d.device_type = dt.id @@ -227,7 +227,7 @@ dt.type_name, dt.communication_mode, d.bluetooth_name, - dt.model_dictionary detailPageUrl + dt.app_model_dictionary detailPageUrl from device d inner join device_type dt on d.device_type = dt.id where d.device_mac = #{deviceMac} @@ -242,7 +242,7 @@ dt.type_name, dt.communication_mode, d.bluetooth_name, - dt.model_dictionary detailPageUrl, + dt.pc_model_dictionary detailPageUrl, ap.name personnelBy, d.device_status, c.binding_time @@ -254,7 +254,7 @@ and d.device_type = #{criteria.deviceType} - + and d.device_name like concat('%', #{criteria.deviceName}, '%') @@ -270,7 +270,10 @@ and ap.name like concat('%', #{criteria.personnelBy}, '%') - and dt.communication_mode, = #{criteria.communicationMode} + and dt.communication_mode = #{criteria.communicationMode} + + + and d.group_id = #{criteria.groupId}