diff --git a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/domain/entity/SmUser.java b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/domain/entity/SmUser.java index 39103629..a5175609 100644 --- a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/domain/entity/SmUser.java +++ b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/domain/entity/SmUser.java @@ -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; /** 出生日期 */ diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/enums/DeviceUserOperaType.java b/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/enums/DeviceUserOperaType.java index 28af01b7..015611fe 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/enums/DeviceUserOperaType.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/enums/DeviceUserOperaType.java @@ -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; diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/DeviceMapper.xml b/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/DeviceMapper.xml index fff54f48..d30e6c88 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/DeviceMapper.xml +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/DeviceMapper.xml @@ -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 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 diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/DeviceServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/DeviceServiceImpl.java index bedfab62..aacd98d9 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/DeviceServiceImpl.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/DeviceServiceImpl.java @@ -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) {