package com.moral.task; import com.moral.service.DeviceAdjustValueService; import com.moral.service.DeviceAdjustValueTimingService; import com.moral.util.AlarmUtils_2; import com.moral.util.LengthOfTimeUtils; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.handler.annotation.XxlJob; import com.xxl.job.core.log.XxlJobLogger; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.Map; @Component public class DeviceAdjustValueTimingTask { private static transient Logger logger = LoggerFactory.getLogger(DeviceAdjustValueTimingTask.class); @Resource private DeviceAdjustValueTimingService deviceAdjustValueTimingService; @Resource private DeviceAdjustValueService deviceAdjustValueService; @XxlJob("DeviceAdjustValueTiming") public ReturnT DeviceAdjustValueTiming(String params) { //获取当前时间和五分钟前的时间 DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime time = LocalDateTime.now(); String endTime = df.format(time); // 当前时间 -5分钟 String startTime = df.format(time.minusMinutes(5)); try { //从device_adjust_value表中查询时间段内需要变更的设备列表 int startTimeSeconds = LengthOfTimeUtils.Seconds(startTime); int endTimeSeconds = LengthOfTimeUtils.Seconds(endTime); //创建list,接收要变更校准值公式的设备列表 List> deviceAdjusTimingList = new ArrayList(); //判断开始时间和结束时间是否处于同一天 if (startTimeSeconds>86100&&endTimeSeconds<300){ List> dayBeforeList = deviceAdjustValueTimingService.selectDataBySecondSolt(startTimeSeconds,86400); List> dayNextList = deviceAdjustValueTimingService.selectDataBySecondSolt(0,endTimeSeconds); deviceAdjusTimingList.addAll(dayBeforeList); deviceAdjusTimingList.addAll(dayNextList); }else { List> list = deviceAdjustValueTimingService.selectDataBySecondSolt(startTimeSeconds,endTimeSeconds); deviceAdjusTimingList.addAll(list); } //判断deviceAdjustimingList集合是否为空 if (deviceAdjusTimingList.isEmpty()){ ReturnT returnT = new ReturnT(500, "没有需要更新的设备!"); return returnT; }else { //遍历deviceAdjustimingList集合,根据集合中的设备对device_adjust_value表中的数据进行替换 for (Map deviceAdjustimingMap:deviceAdjusTimingList) { int device_id = Integer.parseInt(deviceAdjustimingMap.get("device_id").toString()); String value = deviceAdjustimingMap.get("value").toString(); //通过device_id查询device_adjust_value是否存在这台设备 List> deviceAdjustValueList = deviceAdjustValueService.getDataByDevice_id(device_id); //判断表里原来是否有这台设备的信息,没有的话需要插入 if (deviceAdjustValueList.isEmpty()){ deviceAdjustValueService.insertData(device_id,value,endTime); }else { deviceAdjustValueService.updateValueByDeviceID(device_id,value); } ReturnT returnT = new ReturnT(500, "校准值变更成功!"); return returnT; } } }catch (Exception e){ XxlJobLogger.log("DeviceAdjustValueTimingException:" + e.getMessage()); logger.error(e.getMessage()); e.printStackTrace(); } ReturnT returnT = new ReturnT(500, "校准值变更失败!"); return returnT; } }