package com.huimv.produce.timer; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.huimv.produce.entity.SysTelecom; import com.huimv.produce.entity.SysTelecomEvent; import com.huimv.produce.mapper.SysTelecomMapper; import com.huimv.produce.service.ISysTelecomEventService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.stream.Collectors; //主要用来生产烘干数据的 时间拿时间 @Component public class SysTelcomEnentTimmer { @Autowired private SysTelecomMapper sysTelecomMapper; @Autowired private ISysTelecomEventService sysTelecomEventService; //每小时执行一次 // @Scheduled(cron = " 0 */59 * * * ? ") private void updateBox() { //获得设备列表 查找烘干数据 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper .select(SysTelecom::getDeviceId); List collect = sysTelecomMapper.selectObjs(lambdaQueryWrapper).stream().map(o -> (String) o).collect(Collectors.toList()); //System.out.println(collect); for (String deviceId : collect) { Calendar TimeDeviceId = Calendar.getInstance(); TimeDeviceId.setTime(new Date()); TimeDeviceId.add(Calendar.HOUR, -3); Date began1time = TimeDeviceId.getTime(); String startTime1 = format.format(began1time); String endTime1 = format.format(new Date()); LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.eq(SysTelecom::getDeviceId, deviceId); wrapper.eq(SysTelecom::getFarmId, 1); wrapper.between(SysTelecom::getTimestamp, startTime1, endTime1); List sysTelecoms = sysTelecomMapper.selectList(wrapper);//System.out.println(sysTelecoms); for (SysTelecom sysTelecom : sysTelecoms) { if( Double.parseDouble(sysTelecom.getTemp())>50){ // System.out.println("温度"+sysTelecom.getTemp()+sysTelecom.getDeviceId()+sysTelecom.getTimestamp()); //产生时间段 Calendar eventTime = Calendar.getInstance(); eventTime.setTime(sysTelecom.getTimestamp()); eventTime.add(Calendar.MINUTE, -60); Date began = eventTime.getTime(); String EventStartTime = format.format(began); eventTime.add(Calendar.MINUTE, +110); Date EventEndTime1 = eventTime.getTime(); String EventEndTime = format.format(EventEndTime1); //查询在大于50摄氏度这条记录的 前60分钟 后60分钟 时间里,有没有存储过报警事件 有就放弃 没有就加一条 int count = sysTelecomEventService.count(Wrappers.lambdaQuery() .eq(SysTelecomEvent::getDeviceId,sysTelecom.getDeviceId()) .eq(SysTelecomEvent::getFarmId,sysTelecom.getFarmId()) .between(SysTelecomEvent::getEventTime, EventStartTime, EventEndTime)); // System.out.println("插结果"+count); if(count==0){ // System.out.println("保存了一条"); SysTelecomEvent sysTelecomEvent = new SysTelecomEvent(); sysTelecomEvent.setDeviceId(sysTelecom.getDeviceId()); sysTelecomEvent.setEventTime(sysTelecom.getTimestamp()); sysTelecomEvent.setEventId(sysTelecom.getId()); sysTelecomEvent.setFarmId(sysTelecom.getFarmId()); sysTelecomEvent.setRemark(sysTelecom.getTemp()); sysTelecomEventService.save(sysTelecomEvent); } // System.out.println("抛弃"); } } } } }