diff --git a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/constant/IotConstants.java b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/constant/IotConstants.java index 1a2e51e5..fff48fc0 100644 --- a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/constant/IotConstants.java +++ b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/constant/IotConstants.java @@ -91,6 +91,11 @@ public class IotConstants { */ public static final String COMMAND_SET_VOICE = "dj_set"; + /** + * 命令 设置总用电量 + */ + public static final String COMMAND_SET_TOTAL_ELE = ""; + /**----------------------------命令end----------------------------*/ } diff --git a/smart-switch-service/src/main/java/com/ruoyi/iot/service/IotService.java b/smart-switch-service/src/main/java/com/ruoyi/iot/service/IotService.java index e466667a..e6851c3f 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/iot/service/IotService.java +++ b/smart-switch-service/src/main/java/com/ruoyi/iot/service/IotService.java @@ -5,6 +5,7 @@ import com.ruoyi.iot.domain.IotDeviceInfo; import com.ruoyi.iot.domain.response.CommandResponse; import com.ruoyi.iot.interfaces.IotDevice; import com.ruoyi.ss.device.domain.enums.DeviceOnlineStatus; +import com.ruoyi.ss.device.domain.vo.DeviceVO; import java.math.BigDecimal; import java.util.List; @@ -153,4 +154,19 @@ public interface IotService { boolean setVoice(IotDevice device, long seconds); boolean setVoice(String mac, String productId, long seconds); + + /** + * 设置总用电量 + * @param device 设备 + * @param totalEle 总用电量(度) + */ + boolean setTotalEle(IotDevice device, BigDecimal totalEle); + + /** + * 设置总用电量 + * @param deviceName 设备MAC + * @param productId 产品ID + * @param totalEle 总用电量(度) + */ + boolean setTotalEle(String deviceName, String productId, BigDecimal totalEle); } diff --git a/smart-switch-service/src/main/java/com/ruoyi/iot/service/impl/IotServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/iot/service/impl/IotServiceImpl.java index 204ff10f..cf6ea007 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/iot/service/impl/IotServiceImpl.java +++ b/smart-switch-service/src/main/java/com/ruoyi/iot/service/impl/IotServiceImpl.java @@ -65,7 +65,7 @@ public class IotServiceImpl implements IotService { // 查询OneNet设备在线状态 @Override public DeviceOnlineStatus getOnlineStatus(String deviceName, String productId) { - if (StringUtils.isBlank(deviceName)) { + if (StringUtils.isAnyBlank(deviceName, productId)) { return DeviceOnlineStatus.OFFLINE; } // CommandResponse response = sendCommand(deviceName, "111"); @@ -476,5 +476,33 @@ public class IotServiceImpl implements IotService { return res.isSuccess(); } + @Override + public boolean setTotalEle(IotDevice device, BigDecimal totalEle) { + if (device == null || totalEle.compareTo(BigDecimal.ZERO) < 0) { + return false; + } + + try { + boolean res = this.setTotalEle(device.iotMac1(), device.getProductId(), totalEle); + ServiceUtil.assertion(!res, "设备MAC1设置总电量失败"); + return res; + } catch (Exception e) { + log.warn("设备MAC1设置总电量失败: {}", e.getMessage()); + return this.setTotalEle(device.iotMac2(), device.getProductId(), totalEle); + } + } + + @Override + public boolean setTotalEle(String deviceName, String productId, BigDecimal totalEle) { + if (StringUtils.isAnyBlank(deviceName, productId)) { + return false; + } + if (totalEle.compareTo(BigDecimal.ZERO) < 0) { + return false; + } + + CommandResponse res = this.sendCommand(deviceName, IotConstants.COMMAND_SET_TOTAL_ELE + totalEle + IotConstants.COMMAND_SEPARATOR, productId); + return res != null && res.isSuccess(); + } } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/balancePeriod/service/SmBalancePeriodServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/balancePeriod/service/SmBalancePeriodServiceImpl.java index 6413d90d..7abc426c 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/balancePeriod/service/SmBalancePeriodServiceImpl.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/balancePeriod/service/SmBalancePeriodServiceImpl.java @@ -131,9 +131,9 @@ public class SmBalancePeriodServiceImpl implements ISmBalancePeriodService dto.setCreateDate(now); dto.setHour(now.getHours()); dto.setGroupBy(TransactionBillGroupBy.create_hour.name()); - dto.setStatus(TransactionBillStatus.SUCCESS.getStatus()); + dto.setStatusList(TransactionBillStatus.payedOrder()); List billCount = transactionBillMapper.selectCount(dto); - data.setRecharge(CollectionUtils.isEmpty(billCount) ? BigDecimal.ZERO : billCount.get(0).getRecharge()); + data.setRecharge(CollectionUtils.isEmpty(billCount) ? BigDecimal.ZERO : billCount.get(0).getRechargeAmount()); data.setCreateTime(now); smBalancePeriodMapper.insertSmBalancePeriod(data); diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/Device.java b/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/Device.java index 688dd4e1..f7a2bba4 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/Device.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/Device.java @@ -88,6 +88,16 @@ public class Device extends BaseEntity @JsonView(JsonViewProfile.App.class) private String onlineStatus; + @Excel(name = "在线状态1:0-不在线;1-在线") + @ApiModelProperty("在线状态1:0-不在线;1-在线") + @JsonView(JsonViewProfile.App.class) + private String onlineStatus1; + + @Excel(name = "在线状态2:0-不在线;1-在线") + @ApiModelProperty("在线状态2:0-不在线;1-在线") + @JsonView(JsonViewProfile.App.class) + private String onlineStatus2; + /** 状态 */ @Excel(name = "状态") @ApiModelProperty("状态") 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 184c1fc5..d60f3475 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 @@ -28,6 +28,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ) and sd.online_status = #{onlineStatus} + and sd.online_status1 = #{onlineStatus1} + and sd.online_status2 = #{onlineStatus2} and sd.status = #{status} and su.user_name like concat('%', #{userName}, '%') and sd.nick_name like concat('%', #{nickName}, '%') @@ -109,6 +111,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" sd.activation_time, sd.total_electri_quantity, sd.online_status, + sd.online_status1, + sd.online_status2, sd.status, sd.real_time_power, sd.electricity, @@ -329,6 +333,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" service_mode, month_fee, last_recover_time, + online_status1, + online_status2, #{storeId}, @@ -378,6 +384,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{serviceMode}, #{monthFee}, #{lastRecoverTime}, + #{onlineStatus1}, + #{onlineStatus2}, @@ -448,6 +456,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" service_mode = #{serviceMode}, month_fee = #{monthFee}, last_recover_time = #{lastRecoverTime}, + online_status1 = #{onlineStatus1}, + online_status2 = #{onlineStatus2}, where device_id = #{deviceId} 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 44a6f336..360630cf 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 @@ -879,13 +879,26 @@ public class DeviceServiceImpl implements DeviceService device.setDeviceId(device.getDeviceId()); if (deviceInfo != null) { device.setLastPullTime(deviceInfo.getAt()); - device.setTotalElectriQuantity(deviceInfo.getW()); device.setPowerStatus(deviceInfo.getS()); device.setRemainTime(deviceInfo.getTime()); device.setRealTimePower(deviceInfo.getP()); device.setVoltage(deviceInfo.getV()); device.setElectricity(deviceInfo.getA()); + // 总用电量 + if (deviceInfo.getW() != null) { + // 若有数据点中的值大于数据库中的值,则更新 + if (deviceInfo.getW().compareTo(device.getTotalElectriQuantity()) >= 0) { + device.setTotalElectriQuantity(deviceInfo.getW()); + } + // TODO 若数据点小于数据库中的值,则发命令恢复物联网设备的总用电量 + else { +// scheduledExecutorService.schedule(() -> { +// iotService.setTotalEle(device, device.getTotalElectriQuantity()); +// }, 0, TimeUnit.SECONDS); + } + } + // 是否有WIFI if (ModelTag.hasTag(device.getModelTags(), ModelTag.WIFI)) { device.setWifi(deviceInfo.getWifi()); @@ -913,10 +926,15 @@ public class DeviceServiceImpl implements DeviceService } // 是否在线 - String onlineStatus = iotService.getOnlineStatus(device).getStatus(); - device.setOnlineStatus(onlineStatus); - if (DeviceOnlineStatus.ONLINE.getStatus().equals(onlineStatus)) { + String onlineStatus1 = iotService.getOnlineStatus(device.getMac(), device.getProductId()).getStatus(); + String onlineStatus2 = iotService.getOnlineStatus(device.getMac2(), device.getProductId()).getStatus(); + device.setOnlineStatus1(onlineStatus1); + device.setOnlineStatus2(onlineStatus2); + if (DeviceOnlineStatus.ONLINE.getStatus().equals(onlineStatus1) || DeviceOnlineStatus.ONLINE.getStatus().equals(onlineStatus2)) { + device.setOnlineStatus(DeviceOnlineStatus.ONLINE.getStatus()); device.setLastOnlineTime(now); + } else { + device.setOnlineStatus(DeviceOnlineStatus.OFFLINE.getStatus()); } this.updateIotInfo(device);