这段代码的作用是生成使用电力记录。首先,通过LambdaQueryWrapper查询所有状态为开启的空调设备。然后,对于每一个设备,生成一个DevicePower对象,设置其各个属性,包括设备ID、用电量、记录时间等。其中,用电量的计算是根据设备的额定用电量和一个90-110之间的随机整数计算出来的,精确到小数点后两位。最后,将所有的DevicePower对象保存到数据库中。如果设备设置了定时关闭,则在保存记录前关闭设备并发送通知。

代码示例:

public void generateUsePower() {
    LambdaQueryWrapper<DeviceAirCondition> queryWrapper = new LambdaQueryWrapper<DeviceAirCondition>();
    queryWrapper.eq(DeviceAirCondition::getStatus, ValueCode.OPEN);
    //获取所有开启的设备
    List<DeviceAirCondition> deviceAirConditionList = iDeviceAirConditionService.list(queryWrapper);
    List<DevicePower> devicePowers = new ArrayList<>();
    Date nowTime = timeFormatTool();
    String nowTimeStr = timeFormatStrTool();
    for (DeviceAirCondition deviceAirCondition : deviceAirConditionList) {
        DevicePower devicePower = new DevicePower();
        devicePower.setId(UUID.randomUUID().toString().replace('-', ''));
        devicePower.setCreateTime(new Date());
        devicePower.setCreateBy('System');
        devicePower.setSysOrgCode(deviceAirCondition.getSysOrgCode());
        devicePower.setAirConditionId(deviceAirCondition.getId());
        devicePower.setPower(deviceAirCondition.getPower());
        devicePower.setRecordTime(nowTime);
        //产生90-110随机数
        Random rand = new Random();
        int randomInt = rand.nextInt(20) + 90;//[90,110]内的随机整数
        //用电计算 精确到两位小数  每分钟用电量 = (每小时额定用电量/60)*随机数/100
        BigDecimal PrUsePower = new BigDecimal((deviceAirCondition.getPower() / 60) * randomInt / 100);
        double usePower = PrUsePower.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        devicePower.setUsePower(usePower);
        devicePowers.add(devicePower);

        if (deviceAirCondition.getTimingOff() != null && checkTimingOff(deviceAirCondition.getTimingOff())) {
            //关闭空调
            iDeviceAirConditionService.closeDevice(deviceAirCondition.getId());
            //空调关闭通知
            doOutLineAnnouncement(deviceAirCondition.getDeviceId(), '空调定时关闭', deviceAirCondition.getCreateBy(), nowTimeStr);
        }
    }
    iDevicePowerService.saveOrUpdateBatch(devicePowers);
}

代码中用到的主要类和方法:

  • LambdaQueryWrapper:用于查询数据,支持Lambda表达式语法
  • DeviceAirCondition:空调设备对象
  • DevicePower:用电记录对象
  • UUID:生成唯一标识符
  • BigDecimal:用于精确计算小数
  • Random:生成随机数
  • iDeviceAirConditionService:空调设备服务接口
  • iDevicePowerService:用电记录服务接口

代码还涉及了一些其他方法,例如timeFormatTool()timeFormatStrTool()checkTimingOff()closeDevice()doOutLineAnnouncement()等,这些方法的具体实现需要根据实际情况进行编写。


原文地址: https://www.cveoy.top/t/topic/kOaL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录