Java 定时任务代码解析:设备用电记录生成和定时开关
这段代码是一个定时任务的执行方法。首先记录日志,然后调用'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进行查询,方便地筛选出状态为开启的设备。并使用随机数生成用电量,模拟实际用电情况。最后,代码还实现了定时关闭设备的功能,并记录关闭通知。
原文地址: http://www.cveoy.top/t/topic/kObj 著作权归作者所有。请勿转载和采集!