设备双MAC在线状态

This commit is contained in:
墨大叔 2024-10-06 18:03:03 +08:00
parent 334420cbe5
commit 903884cecb
7 changed files with 94 additions and 7 deletions

View File

@ -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----------------------------*/
}

View File

@ -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);
}

View File

@ -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();
}
}

View File

@ -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<BillCountVo> 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);

View File

@ -88,6 +88,16 @@ public class Device extends BaseEntity
@JsonView(JsonViewProfile.App.class)
private String onlineStatus;
@Excel(name = "在线状态10-不在线1-在线")
@ApiModelProperty("在线状态10-不在线1-在线")
@JsonView(JsonViewProfile.App.class)
private String onlineStatus1;
@Excel(name = "在线状态20-不在线1-在线")
@ApiModelProperty("在线状态20-不在线1-在线")
@JsonView(JsonViewProfile.App.class)
private String onlineStatus2;
/** 状态 */
@Excel(name = "状态")
@ApiModelProperty("状态")

View File

@ -28,6 +28,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
)
</if>
<if test="onlineStatus != null and onlineStatus != ''"> and sd.online_status = #{onlineStatus}</if>
<if test="onlineStatus1 != null and onlineStatus1 != ''"> and sd.online_status1 = #{onlineStatus1}</if>
<if test="onlineStatus2 != null and onlineStatus2 != ''"> and sd.online_status2 = #{onlineStatus2}</if>
<if test="status != null and status != ''"> and sd.status = #{status}</if>
<if test="userName != null and userName != ''"> and su.user_name like concat('%', #{userName}, '%')</if>
<if test="nickName != null and nickName != ''"> and sd.nick_name like concat('%', #{nickName}, '%')</if>
@ -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"
<if test="serviceMode != null">service_mode,</if>
<if test="monthFee != null">month_fee,</if>
<if test="lastRecoverTime != null">last_recover_time,</if>
<if test="onlineStatus1 != null">online_status1,</if>
<if test="onlineStatus2 != null">online_status2,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="storeId != null">#{storeId},</if>
@ -378,6 +384,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="serviceMode != null">#{serviceMode},</if>
<if test="monthFee != null">#{monthFee},</if>
<if test="lastRecoverTime != null">#{lastRecoverTime},</if>
<if test="onlineStatus1 != null">#{onlineStatus1},</if>
<if test="onlineStatus2 != null">#{onlineStatus2},</if>
</trim>
</insert>
@ -448,6 +456,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="serviceMode != null">service_mode = #{serviceMode},</if>
<if test="monthFee != null">month_fee = #{monthFee},</if>
<if test="lastRecoverTime != null">last_recover_time = #{lastRecoverTime},</if>
<if test="onlineStatus1 != null">online_status1 = #{onlineStatus1},</if>
<if test="onlineStatus2 != null">online_status2 = #{onlineStatus2},</if>
</trim>
where device_id = #{deviceId}
</update>

View File

@ -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);