SysTelcomEnentTimmer.java 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. package com.huimv.video.dhicc.timmer;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  4. import com.huimv.video.dhicc.entity.SysTelecom;
  5. import com.huimv.video.dhicc.entity.SysTelecomEvent;
  6. import com.huimv.video.dhicc.entity.SysThreshold;
  7. import com.huimv.video.dhicc.mapper.SysTelecomEventMapper;
  8. import com.huimv.video.dhicc.mapper.SysTelecomMapper;
  9. import com.huimv.video.dhicc.mapper.SysThresholdMapper;
  10. import com.huimv.video.dhicc.service.ISysTelecomEventService;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.scheduling.annotation.Scheduled;
  13. import org.springframework.stereotype.Component;
  14. import java.text.SimpleDateFormat;
  15. import java.util.Calendar;
  16. import java.util.Date;
  17. import java.util.List;
  18. import java.util.stream.Collectors;
  19. //主要用来生产烘干数据的 时间拿时间 --可以吧大华的代码赋值出来 自己改一改 应该是OK的
  20. @Component
  21. public class SysTelcomEnentTimmer {
  22. @Autowired
  23. private SysTelecomMapper sysTelecomMapper;
  24. @Autowired
  25. private SysTelecomEventMapper sysTelecomEventMapperMapper;
  26. @Autowired
  27. private ISysTelecomEventService sysTelecomEventService;
  28. @Autowired
  29. private SysThresholdMapper sysThresholdMapper ;
  30. //检查烘干是否合格--找出时间 阈值直接计算
  31. // @Scheduled(cron = " 0/10 * * * * ? ")
  32. @Scheduled(cron = " 0 */59 * * * ? ")
  33. private void checkOk() {
  34. //拿对应牧场的阈值
  35. LambdaQueryWrapper<SysThreshold> wrapper1 = Wrappers.lambdaQuery();
  36. wrapper1.eq(SysThreshold::getFarmId, 1);
  37. SysThreshold sysThreshold = sysThresholdMapper.selectOne(wrapper1);//System.out.println(sysTelecoms);
  38. // System.out.println("yuzhi"+sysThreshold);
  39. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  40. Calendar TimeDeviceId = Calendar.getInstance();
  41. TimeDeviceId.setTime(new Date());
  42. TimeDeviceId.add(Calendar.HOUR_OF_DAY, -30);
  43. Date began1time = TimeDeviceId.getTime();
  44. String startTime1 = format.format(began1time);
  45. String endTime1 = format.format(new Date());
  46. //拿事件
  47. LambdaQueryWrapper<SysTelecomEvent> wrapper = Wrappers.lambdaQuery();
  48. wrapper.eq(SysTelecomEvent::getFarmId, 1);
  49. wrapper.between(SysTelecomEvent::getEventTime, startTime1, endTime1);
  50. List<SysTelecomEvent> SysTelecomEvent = sysTelecomEventMapperMapper.selectList(wrapper);//System.out.println(sysTelecoms);
  51. // System.out.println("yuzhi"+SysTelecomEvent);
  52. for (SysTelecomEvent sysTelecomEvent : SysTelecomEvent) {
  53. // System.out.println("yuzhi"+sysTelecomEvent);
  54. Calendar eventTime = Calendar.getInstance();
  55. eventTime.setTime(sysTelecomEvent.getEventTime());
  56. //事件时间就是开始时间
  57. String EventStartTime = format.format(sysTelecomEvent.getEventTime());
  58. //一次烘干50度以上一般在8次左右 就是说40分钟 这里取一小时
  59. eventTime.add(Calendar.MINUTE, +60);
  60. Date EventEndTime1 = eventTime.getTime();
  61. String EventEndTime = format.format(EventEndTime1);
  62. //查第一次五十度事件之后的数据 统计持续在设定温度之上的事件
  63. LambdaQueryWrapper<SysTelecom> wrapper3 = Wrappers.lambdaQuery();
  64. wrapper3.eq(SysTelecom::getDeviceId, sysTelecomEvent.getDeviceId());
  65. wrapper3.eq(SysTelecom::getFarmId, 1);
  66. wrapper3.between(SysTelecom::getTimestamp, EventStartTime, EventEndTime);
  67. List<SysTelecom> sysTelecoms = sysTelecomMapper.selectList(wrapper3);//System.out.println(sysTelecoms);
  68. Integer count =0;
  69. for (SysTelecom sysTelecom : sysTelecoms) {
  70. if (Double.parseDouble(sysTelecom.getTemp())>Double.parseDouble(sysThreshold.getBenconValue())){
  71. count++;
  72. }
  73. }
  74. if( Double.parseDouble(sysThreshold.getBenconValue())< count*5){
  75. System.out.println("高于阈值温度时间"+count*5);
  76. //正确烘干为1
  77. sysTelecomEvent.setRemark("1");
  78. }else { sysTelecomEvent.setRemark("0");}
  79. System.out.println("存储"+sysTelecomEvent.getRemark());
  80. sysTelecomEventService.updateById(sysTelecomEvent);
  81. //System.out.println("事件时间=" + EventStartTime + sysTelecoms);
  82. }
  83. }
  84. //每小时执行一次
  85. //@Scheduled(cron = " 0 */59 * * * ? ")
  86. // @Scheduled(cron = " 0/5 * * * * ? ")
  87. // @Scheduled(cron = " 0/50 * * * * ? ")
  88. private void updateBox() {
  89. //获得设备列表 查找烘干数据
  90. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  91. LambdaQueryWrapper<SysTelecom> lambdaQueryWrapper =
  92. new LambdaQueryWrapper<>();
  93. lambdaQueryWrapper
  94. .select(SysTelecom::getDeviceId);
  95. List<String> collect = sysTelecomMapper.selectObjs(lambdaQueryWrapper).stream().map(o -> (String) o).collect(Collectors.toList());
  96. //System.out.println(collect);
  97. for (String deviceId : collect) {
  98. Calendar TimeDeviceId = Calendar.getInstance();
  99. TimeDeviceId.setTime(new Date());
  100. TimeDeviceId.add(Calendar.HOUR, -300);
  101. Date began1time = TimeDeviceId.getTime();
  102. String startTime1 = format.format(began1time);
  103. String endTime1 = format.format(new Date());
  104. LambdaQueryWrapper<SysTelecom> wrapper = Wrappers.lambdaQuery();
  105. wrapper.eq(SysTelecom::getDeviceId, deviceId);
  106. wrapper.eq(SysTelecom::getFarmId, 1);
  107. wrapper.between(SysTelecom::getTimestamp, startTime1, endTime1);
  108. List<SysTelecom> sysTelecoms = sysTelecomMapper.selectList(wrapper);//System.out.println(sysTelecoms);
  109. for (SysTelecom sysTelecom : sysTelecoms) {
  110. if( Double.parseDouble(sysTelecom.getTemp())>50){
  111. System.out.println("温度"+sysTelecom.getTemp()+sysTelecom.getDeviceId()+sysTelecom.getTimestamp());
  112. //产生时间段
  113. Calendar eventTime = Calendar.getInstance();
  114. eventTime.setTime(sysTelecom.getTimestamp());
  115. eventTime.add(Calendar.MINUTE, -60);
  116. Date began = eventTime.getTime();
  117. String EventStartTime = format.format(began);
  118. eventTime.add(Calendar.MINUTE, +110);
  119. Date EventEndTime1 = eventTime.getTime();
  120. String EventEndTime = format.format(EventEndTime1);
  121. //查询在大于50摄氏度这条记录的 前60分钟 后60分钟 时间里,有没有存储过报警事件 有就放弃 没有就加一条
  122. int count = sysTelecomEventService.count(Wrappers.<SysTelecomEvent>lambdaQuery()
  123. .eq(SysTelecomEvent::getDeviceId,sysTelecom.getDeviceId())
  124. .eq(SysTelecomEvent::getFarmId,sysTelecom.getFarmId())
  125. .between(SysTelecomEvent::getEventTime, EventStartTime, EventEndTime));
  126. System.out.println("插结果"+count);
  127. if(count==0){
  128. // System.out.println("保存了一条");
  129. SysTelecomEvent sysTelecomEvent = new SysTelecomEvent();
  130. sysTelecomEvent.setDeviceId(sysTelecom.getDeviceId());
  131. sysTelecomEvent.setEventTime(sysTelecom.getTimestamp());
  132. sysTelecomEvent.setEventId(sysTelecom.getId());
  133. sysTelecomEvent.setFarmId(sysTelecom.getFarmId());
  134. sysTelecomEvent.setRemark(sysTelecom.getTemp());
  135. sysTelecomEventService.save(sysTelecomEvent);
  136. }
  137. // System.out.println("抛弃");
  138. }
  139. }
  140. }
  141. }
  142. }