这段代码是一个定时任务的执行方法。首先记录日志,然后调用'generateUsePower()'方法生成用电记录和定时关闭设备。接着调用'timingOpenDevice()'方法定时开启设备。最后记录日志,表示任务调度已经开始,并输出当前时间。

'generateUsePower()'方法中,首先通过LambdaQueryWrapper查询出所有状态为开启的设备。然后遍历设备列表,为每个设备生成一个用电记录,并计算出用电量。如果设备有定时关闭的设置,还会在此时判断是否需要关闭设备,并记录关闭通知。最后将所有用电记录批量保存到数据库中。

public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        log.info(' --- 设备任务调度开始 --- ');
        //生成用电记录 + 定时关闭
        generateUsePower();
        //定时开
        timingOpenDevice();
        //测试发现 每5秒执行一次
        log.info(' --- 设备任务调度开始,时间:' + DateUtils.now() + '---');
    }

    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进行查询,方便地筛选出状态为开启的设备。并使用随机数生成用电量,模拟实际用电情况。最后,代码还实现了定时关闭设备的功能,并记录关闭通知。

Java 定时任务代码解析:设备用电记录生成和定时开关

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

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