设备bug修改 新增设备解绑功能
This commit is contained in:
66
water-admin/logs/sys-console.log
Normal file
66
water-admin/logs/sys-console.log
Normal file
@@ -0,0 +1,66 @@
|
||||
2026-08-18 17:55:39 [background-preinit] INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final
|
||||
2026-08-18 17:55:39 [main] INFO org.dromara.test.TagUnitTest - Starting TagUnitTest using Java 17.0.17 with PID 29612 (started by admin in D:\code\watex\water\water-admin)
|
||||
2026-08-18 17:55:39 [main] INFO org.dromara.test.TagUnitTest - The following 1 profile is active: "dev"
|
||||
2026-08-18 17:55:44 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource detect P6SPY plugin and enabled it
|
||||
2026-08-18 17:55:44 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Starting...
|
||||
2026-08-18 17:55:45 [main] INFO com.zaxxer.hikari.pool.HikariPool - master - Added connection com.mysql.cj.jdbc.ConnectionImpl@1a18e68a
|
||||
2026-08-18 17:55:45 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Start completed.
|
||||
2026-08-18 17:55:45 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource - add a datasource named [master] success
|
||||
2026-08-18 17:55:45 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource initial loaded [1] datasource,primary datasource named [master]
|
||||
2026-08-18 17:55:47 [main] WARN c.b.m.c.injector.DefaultSqlInjector - class org.dromara.app.domain.AppSchedulingDevice ,Not found @TableId annotation, Cannot use Mybatis-Plus 'xxById' Method.
|
||||
2026-08-18 17:55:48 [main] INFO o.d.common.json.config.JacksonConfig - 初始化JSON序列化配置
|
||||
2026-08-18 17:55:48 [main] INFO o.d.app.mqtt.MqttMessageDispatcher - [MQTT] 消息分发器初始化完成,处理器数量=9
|
||||
2026-08-18 17:55:48 [main] INFO o.d.app.mqtt.MqttMessageDispatcher - [MQTT] 已注册处理器:DeviceCommandAckHandler -> ^/([^/]+)/publish/ack$
|
||||
2026-08-18 17:55:48 [main] INFO o.d.app.mqtt.MqttMessageDispatcher - [MQTT] 已注册处理器:DeviceDataHandler -> ^/([^/]+)/publish/power$
|
||||
2026-08-18 17:55:48 [main] INFO o.d.app.mqtt.MqttMessageDispatcher - [MQTT] 已注册处理器:DeviceRegisterHandler -> ^/([^/]+)/publish/register$
|
||||
2026-08-18 17:55:48 [main] INFO o.d.app.mqtt.MqttMessageDispatcher - [MQTT] 已注册处理器:DeviceStatusHandler -> ^/([^/]+)/publish/status$
|
||||
2026-08-18 17:55:48 [main] INFO o.d.app.mqtt.MqttMessageDispatcher - [MQTT] 已注册处理器:DeviceUnbindHandler -> ^/([^/]+)/publish/unbind$
|
||||
2026-08-18 17:55:48 [main] INFO o.d.app.mqtt.MqttMessageDispatcher - [MQTT] 已注册处理器:ErromesHandler -> ^/([^/]+)/publish/error$
|
||||
2026-08-18 17:55:48 [main] INFO o.d.app.mqtt.MqttMessageDispatcher - [MQTT] 已注册处理器:KeyFinishHandler -> ^/([^/]+)/publish/finish/key$
|
||||
2026-08-18 17:55:48 [main] INFO o.d.app.mqtt.MqttMessageDispatcher - [MQTT] 已注册处理器:ScheduleFinishHandler -> ^/([^/]+)/publish/finish/schedule$
|
||||
2026-08-18 17:55:48 [main] INFO o.d.app.mqtt.MqttMessageDispatcher - [MQTT] 已注册处理器:StartWaterHandler -> ^/([^/]+)/publish/start$
|
||||
2026-08-18 17:55:49 [main] INFO o.d.common.redis.config.RedisConfig - 初始化 Redis 配置
|
||||
2026-08-18 17:55:49 [main] INFO org.redisson.Version - Redisson 3.52.0
|
||||
2026-08-18 17:55:49 [redisson-netty-1-1] INFO o.r.connection.ConnectionsHolder - 1 connections initialized for 47.97.217.123/47.97.217.123:6379
|
||||
2026-08-18 17:55:50 [redisson-netty-1-3] INFO o.r.connection.ConnectionsHolder - 8 connections initialized for 47.97.217.123/47.97.217.123:6379
|
||||
2026-08-18 17:55:51 [main] INFO c.b.m.e.s.MybatisPlusApplicationContextAware - Register ApplicationContext instances org.springframework.web.context.support.GenericWebApplicationContext@212dfd39
|
||||
2026-08-18 17:55:54 [main] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已连接:ssl://www.mmipco.cn:8883
|
||||
2026-08-18 17:55:54 [main] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/finish/schedule 服务质量等级=1
|
||||
2026-08-18 17:55:54 [main] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/register 服务质量等级=1
|
||||
2026-08-18 17:55:54 [main] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/status 服务质量等级=1
|
||||
2026-08-18 17:55:54 [main] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/power 服务质量等级=1
|
||||
2026-08-18 17:55:54 [main] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/ack 服务质量等级=1
|
||||
2026-08-18 17:55:54 [main] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/start 服务质量等级=1
|
||||
2026-08-18 17:55:54 [main] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/finish/key 服务质量等级=1
|
||||
2026-08-18 17:55:54 [main] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/error 服务质量等级=1
|
||||
2026-08-18 17:55:54 [main] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/unbind 服务质量等级=1
|
||||
2026-08-18 17:55:55 [mqtt-consumer-6] WARN o.d.app.handler.DeviceStatusHandler - [MQTT] 忽略 retained 离线状态 时间=2026-08-18 17:55:55 设备编号=2087348193597157377 消息体={"deviceMac":"dc:da:0c:fa:27:7a","offline":"true","reason":"poweroff"}
|
||||
2026-08-18 17:55:55 [mqtt-consumer-8] WARN o.d.app.handler.DeviceStatusHandler - [MQTT] 忽略 retained 离线状态 时间=2026-08-18 17:55:55 设备编号=2087366163811627009 消息体={"deviceMac":"dc:da:0c:fa:14:7a","offline":"true","reason":"poweroff"}
|
||||
2026-08-18 17:55:55 [mqtt-consumer-8] WARN o.d.app.handler.DeviceStatusHandler - [MQTT] 忽略 retained 离线状态 时间=2026-08-18 17:55:55 设备编号=2074069050702561282 消息体={"deviceMac":"dc:da:0c:fa:27:5a","offline":"true","reason":"poweroff"}
|
||||
2026-08-18 17:55:55 [main] INFO org.dromara.test.TagUnitTest - Started TagUnitTest in 17.013 seconds (process running for 18.345)
|
||||
2026-08-18 17:55:55 [main] INFO o.d.c.sse.listener.SseTopicListener - 初始化SSE主题订阅监听器成功
|
||||
2026-08-18 17:55:56 [MQTT Rec: water-server-28082] WARN org.dromara.mqtt.MqttClientManager - [MQTT] 连接已断开:已断开连接
|
||||
2026-08-18 17:55:56 [main] INFO o.d.s.runner.SystemApplicationRunner - 初始化OSS配置成功
|
||||
2026-08-18 17:55:56 [main] INFO o.d.m.MqttPendingCommandCleanupListener - [MQTT] 应用启动清理待确认命令完成,清理数量: 1
|
||||
2026-08-18 17:55:57 [MQTT Call: water-server-28082] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已重新连接:ssl://www.mmipco.cn:8883
|
||||
2026-08-18 17:55:57 [MQTT Call: water-server-28082] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/finish/schedule 服务质量等级=1
|
||||
2026-08-18 17:55:57 [MQTT Call: water-server-28082] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/register 服务质量等级=1
|
||||
2026-08-18 17:55:57 [MQTT Call: water-server-28082] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/status 服务质量等级=1
|
||||
2026-08-18 17:55:57 [MQTT Call: water-server-28082] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/power 服务质量等级=1
|
||||
2026-08-18 17:55:57 [MQTT Call: water-server-28082] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/ack 服务质量等级=1
|
||||
2026-08-18 17:55:57 [MQTT Call: water-server-28082] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/start 服务质量等级=1
|
||||
2026-08-18 17:55:57 [MQTT Call: water-server-28082] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/finish/key 服务质量等级=1
|
||||
2026-08-18 17:55:57 [MQTT Call: water-server-28082] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/error 服务质量等级=1
|
||||
2026-08-18 17:55:57 [MQTT Call: water-server-28082] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/unbind 服务质量等级=1
|
||||
2026-08-18 17:55:57 [mqtt-consumer-6] WARN o.d.app.handler.DeviceStatusHandler - [MQTT] 忽略 retained 离线状态 时间=2026-08-18 17:55:57 设备编号=2087348193597157377 消息体={"deviceMac":"dc:da:0c:fa:27:7a","offline":"true","reason":"poweroff"}
|
||||
2026-08-18 17:55:57 [mqtt-consumer-8] WARN o.d.app.handler.DeviceStatusHandler - [MQTT] 忽略 retained 离线状态 时间=2026-08-18 17:55:57 设备编号=2087366163811627009 消息体={"deviceMac":"dc:da:0c:fa:14:7a","offline":"true","reason":"poweroff"}
|
||||
2026-08-18 17:55:58 [mqtt-consumer-8] WARN o.d.app.handler.DeviceStatusHandler - [MQTT] 忽略 retained 离线状态 时间=2026-08-18 17:55:58 设备编号=2074069050702561282 消息体={"deviceMac":"dc:da:0c:fa:27:5a","offline":"true","reason":"poweroff"}
|
||||
2026-08-18 17:55:59 [MQTT Rec: water-server-28082] WARN org.dromara.mqtt.MqttClientManager - [MQTT] 连接已断开:已断开连接
|
||||
2026-08-18 17:56:00 [SpringApplicationShutdownHook] WARN o.s.b.f.s.DisposableBeanAdapter - Invocation of close method failed on bean with name 'mqttConnect': 已在进行连接 (32110)
|
||||
2026-08-18 17:56:00 [SpringApplicationShutdownHook] WARN o.s.b.f.s.DisposableBeanAdapter - Invocation of destroy method failed on bean with name 'org.dromara.mqtt.MqttClientManager': 已在进行连接 (32110)
|
||||
2026-08-18 17:56:00 [SpringApplicationShutdownHook] INFO o.d.c.core.config.ThreadPoolConfig - ====关闭后台任务任务线程池====
|
||||
2026-08-18 17:56:00 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource start closing ....
|
||||
2026-08-18 17:56:00 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - master - Shutdown initiated...
|
||||
2026-08-18 17:56:00 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - master - Shutdown completed.
|
||||
2026-08-18 17:56:00 [SpringApplicationShutdownHook] INFO c.b.d.d.d.DefaultDataSourceDestroyer - dynamic-datasource close the datasource named [master] success,
|
||||
2026-08-18 17:56:00 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource all closed success,bye
|
||||
0
water-admin/logs/sys-error.log
Normal file
0
water-admin/logs/sys-error.log
Normal file
55
water-admin/logs/sys-info.log
Normal file
55
water-admin/logs/sys-info.log
Normal file
@@ -0,0 +1,55 @@
|
||||
2026-08-18 17:55:39 [background-preinit] INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final
|
||||
2026-08-18 17:55:39 [main] INFO org.dromara.test.TagUnitTest - Starting TagUnitTest using Java 17.0.17 with PID 29612 (started by admin in D:\code\watex\water\water-admin)
|
||||
2026-08-18 17:55:39 [main] INFO org.dromara.test.TagUnitTest - The following 1 profile is active: "dev"
|
||||
2026-08-18 17:55:44 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource detect P6SPY plugin and enabled it
|
||||
2026-08-18 17:55:44 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Starting...
|
||||
2026-08-18 17:55:45 [main] INFO com.zaxxer.hikari.pool.HikariPool - master - Added connection com.mysql.cj.jdbc.ConnectionImpl@1a18e68a
|
||||
2026-08-18 17:55:45 [main] INFO com.zaxxer.hikari.HikariDataSource - master - Start completed.
|
||||
2026-08-18 17:55:45 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource - add a datasource named [master] success
|
||||
2026-08-18 17:55:45 [main] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource initial loaded [1] datasource,primary datasource named [master]
|
||||
2026-08-18 17:55:48 [main] INFO o.d.common.json.config.JacksonConfig - 初始化JSON序列化配置
|
||||
2026-08-18 17:55:48 [main] INFO o.d.app.mqtt.MqttMessageDispatcher - [MQTT] 消息分发器初始化完成,处理器数量=9
|
||||
2026-08-18 17:55:48 [main] INFO o.d.app.mqtt.MqttMessageDispatcher - [MQTT] 已注册处理器:DeviceCommandAckHandler -> ^/([^/]+)/publish/ack$
|
||||
2026-08-18 17:55:48 [main] INFO o.d.app.mqtt.MqttMessageDispatcher - [MQTT] 已注册处理器:DeviceDataHandler -> ^/([^/]+)/publish/power$
|
||||
2026-08-18 17:55:48 [main] INFO o.d.app.mqtt.MqttMessageDispatcher - [MQTT] 已注册处理器:DeviceRegisterHandler -> ^/([^/]+)/publish/register$
|
||||
2026-08-18 17:55:48 [main] INFO o.d.app.mqtt.MqttMessageDispatcher - [MQTT] 已注册处理器:DeviceStatusHandler -> ^/([^/]+)/publish/status$
|
||||
2026-08-18 17:55:48 [main] INFO o.d.app.mqtt.MqttMessageDispatcher - [MQTT] 已注册处理器:DeviceUnbindHandler -> ^/([^/]+)/publish/unbind$
|
||||
2026-08-18 17:55:48 [main] INFO o.d.app.mqtt.MqttMessageDispatcher - [MQTT] 已注册处理器:ErromesHandler -> ^/([^/]+)/publish/error$
|
||||
2026-08-18 17:55:48 [main] INFO o.d.app.mqtt.MqttMessageDispatcher - [MQTT] 已注册处理器:KeyFinishHandler -> ^/([^/]+)/publish/finish/key$
|
||||
2026-08-18 17:55:48 [main] INFO o.d.app.mqtt.MqttMessageDispatcher - [MQTT] 已注册处理器:ScheduleFinishHandler -> ^/([^/]+)/publish/finish/schedule$
|
||||
2026-08-18 17:55:48 [main] INFO o.d.app.mqtt.MqttMessageDispatcher - [MQTT] 已注册处理器:StartWaterHandler -> ^/([^/]+)/publish/start$
|
||||
2026-08-18 17:55:49 [main] INFO o.d.common.redis.config.RedisConfig - 初始化 Redis 配置
|
||||
2026-08-18 17:55:49 [main] INFO org.redisson.Version - Redisson 3.52.0
|
||||
2026-08-18 17:55:49 [redisson-netty-1-1] INFO o.r.connection.ConnectionsHolder - 1 connections initialized for 47.97.217.123/47.97.217.123:6379
|
||||
2026-08-18 17:55:50 [redisson-netty-1-3] INFO o.r.connection.ConnectionsHolder - 8 connections initialized for 47.97.217.123/47.97.217.123:6379
|
||||
2026-08-18 17:55:51 [main] INFO c.b.m.e.s.MybatisPlusApplicationContextAware - Register ApplicationContext instances org.springframework.web.context.support.GenericWebApplicationContext@212dfd39
|
||||
2026-08-18 17:55:54 [main] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已连接:ssl://www.mmipco.cn:8883
|
||||
2026-08-18 17:55:54 [main] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/finish/schedule 服务质量等级=1
|
||||
2026-08-18 17:55:54 [main] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/register 服务质量等级=1
|
||||
2026-08-18 17:55:54 [main] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/status 服务质量等级=1
|
||||
2026-08-18 17:55:54 [main] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/power 服务质量等级=1
|
||||
2026-08-18 17:55:54 [main] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/ack 服务质量等级=1
|
||||
2026-08-18 17:55:54 [main] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/start 服务质量等级=1
|
||||
2026-08-18 17:55:54 [main] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/finish/key 服务质量等级=1
|
||||
2026-08-18 17:55:54 [main] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/error 服务质量等级=1
|
||||
2026-08-18 17:55:54 [main] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/unbind 服务质量等级=1
|
||||
2026-08-18 17:55:55 [main] INFO org.dromara.test.TagUnitTest - Started TagUnitTest in 17.013 seconds (process running for 18.345)
|
||||
2026-08-18 17:55:55 [main] INFO o.d.c.sse.listener.SseTopicListener - 初始化SSE主题订阅监听器成功
|
||||
2026-08-18 17:55:56 [main] INFO o.d.s.runner.SystemApplicationRunner - 初始化OSS配置成功
|
||||
2026-08-18 17:55:56 [main] INFO o.d.m.MqttPendingCommandCleanupListener - [MQTT] 应用启动清理待确认命令完成,清理数量: 1
|
||||
2026-08-18 17:55:57 [MQTT Call: water-server-28082] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已重新连接:ssl://www.mmipco.cn:8883
|
||||
2026-08-18 17:55:57 [MQTT Call: water-server-28082] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/finish/schedule 服务质量等级=1
|
||||
2026-08-18 17:55:57 [MQTT Call: water-server-28082] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/register 服务质量等级=1
|
||||
2026-08-18 17:55:57 [MQTT Call: water-server-28082] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/status 服务质量等级=1
|
||||
2026-08-18 17:55:57 [MQTT Call: water-server-28082] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/power 服务质量等级=1
|
||||
2026-08-18 17:55:57 [MQTT Call: water-server-28082] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/ack 服务质量等级=1
|
||||
2026-08-18 17:55:57 [MQTT Call: water-server-28082] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/start 服务质量等级=1
|
||||
2026-08-18 17:55:57 [MQTT Call: water-server-28082] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/finish/key 服务质量等级=1
|
||||
2026-08-18 17:55:57 [MQTT Call: water-server-28082] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/error 服务质量等级=1
|
||||
2026-08-18 17:55:57 [MQTT Call: water-server-28082] INFO org.dromara.mqtt.MqttClientManager - [MQTT] 已订阅 主题=/+/publish/unbind 服务质量等级=1
|
||||
2026-08-18 17:56:00 [SpringApplicationShutdownHook] INFO o.d.c.core.config.ThreadPoolConfig - ====关闭后台任务任务线程池====
|
||||
2026-08-18 17:56:00 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource start closing ....
|
||||
2026-08-18 17:56:00 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - master - Shutdown initiated...
|
||||
2026-08-18 17:56:00 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - master - Shutdown completed.
|
||||
2026-08-18 17:56:00 [SpringApplicationShutdownHook] INFO c.b.d.d.d.DefaultDataSourceDestroyer - dynamic-datasource close the datasource named [master] success,
|
||||
2026-08-18 17:56:00 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - dynamic-datasource all closed success,bye
|
||||
@@ -2,9 +2,16 @@ package org.dromara.web.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.app.domain.*;
|
||||
import org.dromara.app.mapper.*;
|
||||
import org.dromara.app.service.IDeviceCommandService;
|
||||
import org.dromara.app.domain.AppSchedule;
|
||||
import org.dromara.app.domain.AppScheduleDetail;
|
||||
import org.dromara.app.domain.AppSchedulingDevice;
|
||||
import org.dromara.app.domain.AppWateringLog;
|
||||
import org.dromara.app.domain.vo.AppDeviceVo;
|
||||
import org.dromara.app.mapper.AppScheduleDetailMapper;
|
||||
import org.dromara.app.mapper.AppScheduleMapper;
|
||||
import org.dromara.app.mapper.AppSchedulingDeviceMapper;
|
||||
import org.dromara.app.mapper.AppWateringLogMapper;
|
||||
import org.dromara.app.service.IAppDeviceBindingService;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
@@ -29,13 +36,12 @@ public class AccountCancellationService {
|
||||
private final SysUserRoleMapper sysUserRoleMapper;
|
||||
private final SysUserPostMapper sysUserPostMapper;
|
||||
private final SysSocialMapper sysSocialMapper;
|
||||
private final AppDeviceMapper appDeviceMapper;
|
||||
private final AppScheduleMapper appScheduleMapper;
|
||||
private final AppScheduleDetailMapper appScheduleDetailMapper;
|
||||
private final AppSchedulingDeviceMapper appSchedulingDeviceMapper;
|
||||
private final AppWateringLogMapper appWateringLogMapper;
|
||||
private final AccountCancelCodeService accountCancelCodeService;
|
||||
private final IDeviceCommandService deviceCommandService;
|
||||
private final IAppDeviceBindingService deviceBindingService;
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelCurrentAccount(String code) {
|
||||
@@ -52,9 +58,12 @@ public class AccountCancellationService {
|
||||
List<String> deviceNos = queryUserDeviceNos(userId);
|
||||
List<Long> scheduleIds = queryUserScheduleIds(userId);
|
||||
|
||||
sendInitDeviceCommands(deviceNos);
|
||||
if (!deviceNos.isEmpty()) {
|
||||
deviceBindingService.unbindByUser(deviceNos, userId);
|
||||
}
|
||||
deviceBindingService.removeAllListEntries(userId);
|
||||
deleteAppScheduleData(userId, scheduleIds);
|
||||
deleteAppDeviceData(userId, deviceNos);
|
||||
deleteAppUserData(userId);
|
||||
deleteSystemUserData(userId);
|
||||
accountCancelCodeService.delete(username);
|
||||
}
|
||||
@@ -68,12 +77,8 @@ public class AccountCancellationService {
|
||||
}
|
||||
|
||||
private List<String> queryUserDeviceNos(Long userId) {
|
||||
return appDeviceMapper.selectList(
|
||||
Wrappers.<AppDevice>lambdaQuery()
|
||||
.select(AppDevice::getDeviceNo)
|
||||
.eq(AppDevice::getUserId, userId)
|
||||
).stream()
|
||||
.map(AppDevice::getDeviceNo)
|
||||
return deviceBindingService.queryActiveDevices(userId).stream()
|
||||
.map(AppDeviceVo::getDeviceNo)
|
||||
.filter(StringUtils::isNotBlank)
|
||||
.distinct()
|
||||
.toList();
|
||||
@@ -91,12 +96,6 @@ public class AccountCancellationService {
|
||||
.toList();
|
||||
}
|
||||
|
||||
private void sendInitDeviceCommands(List<String> deviceNos) {
|
||||
for (String deviceNo : deviceNos) {
|
||||
deviceCommandService.sendInitDeviceCommand(deviceNo);
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteAppScheduleData(Long userId, List<Long> scheduleIds) {
|
||||
if (!scheduleIds.isEmpty()) {
|
||||
appSchedulingDeviceMapper.delete(
|
||||
@@ -114,25 +113,11 @@ public class AccountCancellationService {
|
||||
);
|
||||
}
|
||||
|
||||
private void deleteAppDeviceData(Long userId, List<String> deviceNos) {
|
||||
if (!deviceNos.isEmpty()) {
|
||||
appSchedulingDeviceMapper.delete(
|
||||
Wrappers.<AppSchedulingDevice>lambdaQuery()
|
||||
.in(AppSchedulingDevice::getDeviceNo, deviceNos)
|
||||
);
|
||||
appWateringLogMapper.delete(
|
||||
Wrappers.<AppWateringLog>lambdaQuery()
|
||||
.in(AppWateringLog::getDeviceNo, deviceNos)
|
||||
);
|
||||
}
|
||||
private void deleteAppUserData(Long userId) {
|
||||
appWateringLogMapper.delete(
|
||||
Wrappers.<AppWateringLog>lambdaQuery()
|
||||
.eq(AppWateringLog::getUserId, userId)
|
||||
);
|
||||
appDeviceMapper.delete(
|
||||
Wrappers.<AppDevice>lambdaQuery()
|
||||
.eq(AppDevice::getUserId, userId)
|
||||
);
|
||||
}
|
||||
|
||||
private void deleteSystemUserData(Long userId) {
|
||||
|
||||
@@ -69,7 +69,7 @@ public class SysRegisterService {
|
||||
sysUser.setUserName(username);
|
||||
|
||||
|
||||
sysUser.setNickName("用户"+new Date().getTime());
|
||||
sysUser.setNickName("Watex_"+new Date().getTime());
|
||||
sysUser.setPassword(BCrypt.hashpw(password));
|
||||
sysUser.setUserType(userType);
|
||||
boolean exist;
|
||||
|
||||
@@ -19,6 +19,13 @@ server:
|
||||
io: 8
|
||||
# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
|
||||
worker: 256
|
||||
|
||||
app:
|
||||
firmware-storage:
|
||||
# 固件持久化目录;生产环境应挂载到服务器持久化磁盘
|
||||
directory: ${FIRMWARE_STORAGE_DIRECTORY:./data/firmware}
|
||||
# 设备可访问的服务端公网地址;为空时根据上传请求生成
|
||||
download-base-url: ${FIRMWARE_DOWNLOAD_BASE_URL:}
|
||||
--- # mqtt配置信息
|
||||
mqtt:
|
||||
enabled: ${MQTT_ENABLED:true}
|
||||
@@ -26,13 +33,14 @@ mqtt:
|
||||
#broker-url: tcp://47.97.217.123
|
||||
username: admin
|
||||
password: 61e6062129e9
|
||||
client-id: water-server-1${server.port}
|
||||
client-id: water-server-2${server.port}
|
||||
qos: 1
|
||||
keep-alive: 300
|
||||
connection-timeout: 30
|
||||
max-inflight: 5000
|
||||
clean-session: false
|
||||
automatic-reconnect: true
|
||||
register-device-no-dedup-seconds: 30
|
||||
async:
|
||||
core-pool-size: 16
|
||||
max-pool-size: 64
|
||||
@@ -51,6 +59,7 @@ mqtt:
|
||||
scan-interval-ms: 5000
|
||||
pending-ttl-seconds: 86400
|
||||
ack-ttl-seconds: 86400
|
||||
startup-cleanup-wait-ms: 30000
|
||||
pending-key-prefix: "mqtt:command:pending:"
|
||||
ack-key-prefix: "mqtt:command:ack:"
|
||||
pending-set-key: "mqtt:command:pending:ids"
|
||||
@@ -63,6 +72,8 @@ mqtt:
|
||||
interval-ms: 30000
|
||||
topics:
|
||||
# 首次注册使用 MAC;注册后的业务主题使用 deviceNo;LWT 离线主题兼容 MAC
|
||||
# 同一共享组内仅一个后端实例消费每条上行消息,防止重复下发和重复处理 ACK
|
||||
shared-group: ${MQTT_SHARED_GROUP:water-backend}
|
||||
subscribe:
|
||||
|
||||
- /+/publish/finish/schedule #排程任务完成上报
|
||||
@@ -73,6 +84,7 @@ mqtt:
|
||||
- /+/publish/start #开始浇水上报
|
||||
- /+/publish/finish/key #按键浇水完成
|
||||
- /+/publish/error #硬件故障
|
||||
- /+/publish/unbind #设备长按解绑
|
||||
# - /+/subscriber/cmd #下发命令 0关闭浇水 1开始浇水
|
||||
|
||||
publish-prefix: ""
|
||||
@@ -173,6 +185,7 @@ security:
|
||||
- /*/api-docs/**
|
||||
- /warm-flow-ui/config
|
||||
- /app/v1/retrievePassword
|
||||
- /app/firmware/download/**
|
||||
|
||||
# 多租户配置
|
||||
tenant:
|
||||
|
||||
@@ -4,9 +4,16 @@ import com.baomidou.mybatisplus.core.MybatisConfiguration;
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
|
||||
import org.apache.ibatis.builder.MapperBuilderAssistant;
|
||||
import org.dromara.app.domain.*;
|
||||
import org.dromara.app.mapper.*;
|
||||
import org.dromara.app.service.IDeviceCommandService;
|
||||
import org.dromara.app.domain.AppSchedule;
|
||||
import org.dromara.app.domain.AppScheduleDetail;
|
||||
import org.dromara.app.domain.AppSchedulingDevice;
|
||||
import org.dromara.app.domain.AppWateringLog;
|
||||
import org.dromara.app.domain.vo.AppDeviceVo;
|
||||
import org.dromara.app.mapper.AppScheduleDetailMapper;
|
||||
import org.dromara.app.mapper.AppScheduleMapper;
|
||||
import org.dromara.app.mapper.AppSchedulingDeviceMapper;
|
||||
import org.dromara.app.mapper.AppWateringLogMapper;
|
||||
import org.dromara.app.service.IAppDeviceBindingService;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.exception.user.CaptchaExpireException;
|
||||
import org.dromara.common.core.exception.user.UserException;
|
||||
@@ -45,8 +52,6 @@ class AccountCancellationServiceUnitTest {
|
||||
@Mock
|
||||
private SysSocialMapper sysSocialMapper;
|
||||
@Mock
|
||||
private AppDeviceMapper appDeviceMapper;
|
||||
@Mock
|
||||
private AppScheduleMapper appScheduleMapper;
|
||||
@Mock
|
||||
private AppScheduleDetailMapper appScheduleDetailMapper;
|
||||
@@ -57,12 +62,11 @@ class AccountCancellationServiceUnitTest {
|
||||
@Mock
|
||||
private AccountCancelCodeService accountCancelCodeService;
|
||||
@Mock
|
||||
private IDeviceCommandService deviceCommandService;
|
||||
private IAppDeviceBindingService deviceBindingService;
|
||||
|
||||
@BeforeAll
|
||||
static void initTableInfo() {
|
||||
MapperBuilderAssistant assistant = new MapperBuilderAssistant(new MybatisConfiguration(), "");
|
||||
initTableInfo(assistant, AppDevice.class);
|
||||
initTableInfo(assistant, AppSchedule.class);
|
||||
initTableInfo(assistant, AppScheduleDetail.class);
|
||||
initTableInfo(assistant, AppSchedulingDevice.class);
|
||||
@@ -80,11 +84,11 @@ class AccountCancellationServiceUnitTest {
|
||||
@Test
|
||||
void cancelCurrentAccount_deletesCurrentUserAndRelatedData() {
|
||||
AccountCancellationService service = newService();
|
||||
AppDevice device = new AppDevice();
|
||||
AppDeviceVo device = new AppDeviceVo();
|
||||
device.setDeviceNo("D01");
|
||||
AppSchedule schedule = new AppSchedule();
|
||||
schedule.setId(10L);
|
||||
when(appDeviceMapper.selectList(any(Wrapper.class))).thenReturn(List.of(device));
|
||||
when(deviceBindingService.queryActiveDevices(100L)).thenReturn(List.of(device));
|
||||
when(appScheduleMapper.selectList(any(Wrapper.class))).thenReturn(List.of(schedule));
|
||||
when(sysUserMapper.deleteById(100L)).thenReturn(1);
|
||||
|
||||
@@ -96,12 +100,12 @@ class AccountCancellationServiceUnitTest {
|
||||
service.cancelCurrentAccount("123456");
|
||||
|
||||
verify(accountCancelCodeService).validate("zhangsan", "123456");
|
||||
verify(deviceCommandService).sendInitDeviceCommand("D01");
|
||||
verify(deviceBindingService).unbindByUser(List.of("D01"), 100L);
|
||||
verify(deviceBindingService).removeAllListEntries(100L);
|
||||
verify(appSchedulingDeviceMapper, atLeastOnce()).delete(any(Wrapper.class));
|
||||
verify(appScheduleDetailMapper).delete(any(Wrapper.class));
|
||||
verify(appScheduleMapper).delete(any(Wrapper.class));
|
||||
verify(appWateringLogMapper, atLeastOnce()).delete(any(Wrapper.class));
|
||||
verify(appDeviceMapper).delete(any(Wrapper.class));
|
||||
verify(sysSocialMapper).delete(any(Wrapper.class));
|
||||
verify(sysUserRoleMapper).delete(any(Wrapper.class));
|
||||
verify(sysUserPostMapper).delete(any(Wrapper.class));
|
||||
@@ -127,7 +131,7 @@ class AccountCancellationServiceUnitTest {
|
||||
sysUserRoleMapper,
|
||||
sysUserPostMapper,
|
||||
sysSocialMapper,
|
||||
appDeviceMapper,
|
||||
deviceBindingService,
|
||||
appScheduleMapper,
|
||||
appScheduleDetailMapper,
|
||||
appSchedulingDeviceMapper,
|
||||
@@ -156,7 +160,7 @@ class AccountCancellationServiceUnitTest {
|
||||
sysUserRoleMapper,
|
||||
sysUserPostMapper,
|
||||
sysSocialMapper,
|
||||
appDeviceMapper,
|
||||
deviceBindingService,
|
||||
appScheduleMapper,
|
||||
appScheduleDetailMapper,
|
||||
appSchedulingDeviceMapper,
|
||||
@@ -186,7 +190,7 @@ class AccountCancellationServiceUnitTest {
|
||||
sysUserRoleMapper,
|
||||
sysUserPostMapper,
|
||||
sysSocialMapper,
|
||||
appDeviceMapper,
|
||||
deviceBindingService,
|
||||
appScheduleMapper,
|
||||
appScheduleDetailMapper,
|
||||
appSchedulingDeviceMapper,
|
||||
@@ -203,13 +207,12 @@ class AccountCancellationServiceUnitTest {
|
||||
sysUserRoleMapper,
|
||||
sysUserPostMapper,
|
||||
sysSocialMapper,
|
||||
appDeviceMapper,
|
||||
appScheduleMapper,
|
||||
appScheduleDetailMapper,
|
||||
appSchedulingDeviceMapper,
|
||||
appWateringLogMapper,
|
||||
accountCancelCodeService,
|
||||
deviceCommandService
|
||||
deviceBindingService
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user