This commit is contained in:
磷叶 2025-01-09 10:46:47 +08:00
parent feeb63fed0
commit 88882831c8
4 changed files with 55 additions and 30 deletions
smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/domain/entity
smart-switch-service/src/main/java/com/ruoyi/ss/device

View File

@ -1,25 +1,25 @@
package com.ruoyi.common.core.domain.entity;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonView;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Sensitive;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.domain.JsonViewProfile;
import com.ruoyi.common.core.domain.ValidGroup;
import com.ruoyi.common.enums.DesensitizedType;
import com.ruoyi.common.utils.RegexpUtils;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
/**
* 普通用户信息对象 sm_user
@ -64,6 +64,7 @@ public class SmUser extends BaseEntity
@Sensitive(desensitizedType = DesensitizedType.PHONE)
@JsonView(JsonViewProfile.App.class)
@NotNull(message = "手机号码不允许为空", groups = {ValidGroup.Create.class})
@Pattern(regexp = RegexpUtils.MOBILE_PHONE_REGEXP, message = "请输入正确格式的手机号")
private String phonenumber;
/** 出生日期 */

View File

@ -1,7 +1,6 @@
package com.ruoyi.ss.device.domain.enums;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
/**
@ -13,7 +12,10 @@ import lombok.Getter;
public enum DeviceUserOperaType {
OPEN("1", "开启"),
CLOSE("2", "关闭");
CLOSE("2", "关闭"),
TIME("3", "时长"),
ELE("4", "电量"),
RESET("5", "归零");
private final String type;
private final String msg;

View File

@ -478,17 +478,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
(expire_ele is null) or (total_electri_quantity > expire_time),
total_electri_quantity + #{amount},
expire_ele + #{amount}
)
),
user_opera_type = '4'
where device_id = #{deviceId} and deleted = false
</update>
<update id="addTime">
update sm_device
set expire_time = IF (
(expire_time is null) or (now() > expire_time),
DATE_ADD(now(),INTERVAL #{num} SECOND),
DATE_ADD(expire_time,INTERVAL #{num} SECOND)
)
(expire_time is null) or (now() > expire_time),
DATE_ADD(now(),INTERVAL #{num} SECOND),
DATE_ADD(expire_time,INTERVAL #{num} SECOND)
),
user_opera_type = '3'
where device_id = #{deviceId} and deleted = false
</update>

View File

@ -1166,6 +1166,9 @@ public class DeviceServiceImpl implements DeviceService
data.setSurplusEle(BigDecimal.ZERO);
data.setExpireEle(device.getTotalElectriQuantity());
}
data.setUserOperaType(DeviceUserOperaType.RESET.getType());
data.setUserOperaEle(device.getTotalElectriQuantity());
data.setUserOperaTime(LocalDateTime.now());
int update = deviceMapper.updateSmDevice(data);
ServiceUtil.assertion(update != 1, "更新设备%s信息失败", device.getDeviceNo());
@ -1315,13 +1318,6 @@ public class DeviceServiceImpl implements DeviceService
}
DeviceVO device = selectById(deviceId);
// 若设备剩余电量大于0则补偿电量充值
// if (device.getSurplusEle().compareTo(BigDecimal.ZERO) > 0) {
// res = iotService.setEle(device, amount.add(device.getSurplusEle()), reason);
// } else {
// res = iotService.setEle(device, amount, reason);
// }
return iotService.setEle(device, device.getSurplusEleDb(), reason);
}
@ -1362,18 +1358,42 @@ public class DeviceServiceImpl implements DeviceService
}
// 若当前设备数据库的时长并且电量<=0且在这之后用户没有发open命令则执行一次同步关闭
boolean hasOpen = DeviceUserOperaType.OPEN.getType().equals(device.getUserOperaType()); // 是否开启过
LocalDateTime lastOperaTime = device.getUserOperaTime(); // 上次开启的时间
BigDecimal lastOperaEle = device.getUserOperaEle(); // 上次开启的总用电量
// boolean hasOpen = DeviceUserOperaType.OPEN.getType().equals(device.getUserOperaType()); // 是否开启过
// LocalDateTime lastOperaTime = device.getUserOperaTime(); // 上次操作的时间
// BigDecimal lastOperaEle = device.getUserOperaEle(); // 上次开启的总用电量
//
//
// BigDecimal expireEle = device.getExpireEle(); // 过期电量
// boolean hasOperaAfterExpireEle = lastOperaEle != null && ( expireEle == null || lastOperaEle.compareTo(expireEle) > 0); // 是否在结束电量后操作
// boolean hasOpenAfterExpireEle = hasOpen && hasOperaAfterExpireEle; // 是否在结束电量后开启
// boolean hasEle = device.getSurplusEleDb().compareTo(BigDecimal.ZERO) > 0; // 剩余电量
// if (!hasTime && !hasEle && !hasOpenAfterExpireTime && !hasOpenAfterExpireEle && !isClose) {
// this.switchDevice(device, DevicePowerStatus.OFF, "设备监控-发现异常未关闭设备");
// }
boolean hasOpenAfterExpireTime = hasOpen && lastOperaTime != null && lastOperaTime.isAfter(device.getExpireTime()); // 是否在时间结束后开启
boolean hasTime = device.getSurplusSecondsDb() > 0; // 剩余时间
boolean hasOpenAfterExpireEle = hasOpen && lastOperaEle != null && lastOperaEle.compareTo(device.getExpireEle()) > 0; // 是否在结束电量后开启
boolean hasEle = device.getSurplusEleDb().compareTo(BigDecimal.ZERO) > 0; // 剩余电量
// 根据上一次用户的操作来判断该怎么关闭设备
// 若上次操作为充值时间则判断是否还有剩余时间
boolean isClose = DevicePowerStatus.OFF.getStatus().equals(device.getPowerStatus()); // 是否关闭
if (!hasTime && !hasEle && !hasOpenAfterExpireTime && !hasOpenAfterExpireEle && !isClose) {
this.switchDevice(device, DevicePowerStatus.OFF, "设备监控-发现异常未关闭设备");
if (DeviceUserOperaType.TIME.getType().equals(device.getUserOperaType())) {
boolean hasTime = device.getSurplusSecondsDb() > 0; // 剩余时间
if (!isClose && !hasTime) {
this.switchDevice(device, DevicePowerStatus.OFF, "设备监控-发现异常未关闭设备(时长)");
}
}
// 若上次操作为充值电量则判断是否还有剩余电量
else if (DeviceUserOperaType.ELE.getType().equals(device.getUserOperaType())) {
boolean hasEle = device.getSurplusEleDb().compareTo(BigDecimal.ZERO) > 0; // 剩余电量
if (!isClose && !hasEle) {
this.switchDevice(device, DevicePowerStatus.OFF, "设备监控-发现异常未关闭设备(电量)");
}
}
// 若上次操作为归零则判断是否关闭
else if (DeviceUserOperaType.RESET.getType().equals(device.getUserOperaType())) {
if (!isClose) {
this.switchDevice(device, DevicePowerStatus.OFF, "设备监控-发现异常未关闭设备(归零)");
}
}
},0, TimeUnit.SECONDS);
} catch (Exception e) {