package com.ruoyi.iot.service; import com.ruoyi.common.constant.IotConstants; import com.ruoyi.common.utils.NumberUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.iot.constants.ReceiveConstants; import com.ruoyi.iot.domain.ReceiveMsg; import com.ruoyi.iot.enums.ReceiveType; import com.ruoyi.ss.device.domain.SmDevice; import com.ruoyi.ss.device.domain.enums.DeviceOutageWay; import com.ruoyi.ss.device.service.ISmDeviceService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; /** * @author wjh * 2024/5/6 */ @Service @Slf4j public class IotReceiveServiceImpl implements IotReceiveService{ @Autowired private ISmDeviceService deviceService; @Override public void handleReceive(ReceiveMsg msg) { log.info("handleReceive {}", msg.toString()); if (ReceiveType.DATA_POINT.getType().equals(msg.getType())) { if (ReceiveConstants.DS_SSID.equals(msg.getDsId()) && ReceiveConstants.DSV_SSID_CT.equals((String) msg.getValue())) { // 当数据点推送ssid的值为ChangteA时,录入设备 SmDevice device = this.parseToDevice(msg); device.setDeviceName("未命名"); deviceService.addInitDevice(device); } else { // 其他情况,更新设备信息 deviceService.updateByIot(this.parseToDevice(msg)); } } } private SmDevice parseToDevice(ReceiveMsg msg) { SmDevice device = new SmDevice(); device.setMac(msg.getDevName()); if (StringUtils.hasText(msg.getDsId())) { String value = msg.getValue().toString(); switch(msg.getDsId()) { case ReceiveConstants.DS_SSID: device.setWifi(value); break; case ReceiveConstants.DS_V: device.setVoltage(NumberUtils.nonNullDecimal(value)); break; case ReceiveConstants.DS_P: device.setRealTimePower(NumberUtils.nonNullDecimal(value)); break; case ReceiveConstants.DS_A: device.setElectricity(NumberUtils.nonNullDecimal(value)); break; case ReceiveConstants.DS_W: device.setTotalElectriQuantity(NumberUtils.nonNullDecimal(value).divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP)); break; case ReceiveConstants.DS_S: device.setPowerStatus(value); break; case ReceiveConstants.DS_SET: DeviceOutageWay deviceOutageWay = DeviceOutageWay.parse(value); device.setOutageWay(deviceOutageWay.getValue()); break; case ReceiveConstants.DS_TIME: device.setRemainTime(NumberUtils.nonNullDecimal(value)); break; default: break; } } return device; } }