SysTelcomEnentTimmer.java 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  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 {
  79. sysTelecomEvent.setRemark("0");
  80. }
  81. System.out.println("存储" + sysTelecomEvent.getRemark());
  82. sysTelecomEventService.updateById(sysTelecomEvent);
  83. //System.out.println("事件时间=" + EventStartTime + sysTelecoms);
  84. }
  85. }
  86. //每小时执行一次
  87. //@Scheduled(cron = " 0 */59 * * * ? ")
  88. // @Scheduled(cron = " 0/5 * * * * ? ")
  89. @Scheduled(cron = " 0/50 * * * * ? ")
  90. private void updateBox() {
  91. //获得设备列表 查找烘干数据
  92. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  93. LambdaQueryWrapper<SysTelecom> lambdaQueryWrapper =
  94. new LambdaQueryWrapper<>();
  95. lambdaQueryWrapper
  96. .select(SysTelecom::getDeviceId);
  97. List<String> collect = sysTelecomMapper.selectObjs(lambdaQueryWrapper).stream().map(o -> (String) o).collect(Collectors.toList());
  98. //System.out.println(collect);
  99. for (String deviceId : collect) {
  100. Calendar TimeDeviceId = Calendar.getInstance();
  101. TimeDeviceId.setTime(new Date());
  102. TimeDeviceId.add(Calendar.HOUR, -300);
  103. Date began1time = TimeDeviceId.getTime();
  104. String startTime1 = format.format(began1time);
  105. String endTime1 = format.format(new Date());
  106. LambdaQueryWrapper<SysTelecom> wrapper = Wrappers.lambdaQuery();
  107. wrapper.eq(SysTelecom::getDeviceId, deviceId);
  108. wrapper.eq(SysTelecom::getFarmId, 1);
  109. wrapper.between(SysTelecom::getTimestamp, startTime1, endTime1);
  110. List<SysTelecom> sysTelecoms = sysTelecomMapper.selectList(wrapper);//System.out.println(sysTelecoms);
  111. for (SysTelecom sysTelecom : sysTelecoms) {
  112. if (Double.parseDouble(sysTelecom.getTemp()) > 50) {
  113. System.out.println("温度" + sysTelecom.getTemp() + sysTelecom.getDeviceId() + sysTelecom.getTimestamp());
  114. //产生时间段
  115. Calendar eventTime = Calendar.getInstance();
  116. eventTime.setTime(sysTelecom.getTimestamp());
  117. eventTime.add(Calendar.MINUTE, -60);
  118. Date began = eventTime.getTime();
  119. String EventStartTime = format.format(began);
  120. eventTime.add(Calendar.MINUTE, +110);
  121. Date EventEndTime1 = eventTime.getTime();
  122. String EventEndTime = format.format(EventEndTime1);
  123. //查询在大于50摄氏度这条记录的 前60分钟 后60分钟 时间里,有没有存储过报警事件 有就放弃 没有就加一条
  124. int count = sysTelecomEventService.count(Wrappers.<SysTelecomEvent>lambdaQuery()
  125. .eq(SysTelecomEvent::getDeviceId, sysTelecom.getDeviceId())
  126. .eq(SysTelecomEvent::getFarmId, sysTelecom.getFarmId())
  127. .between(SysTelecomEvent::getEventTime, EventStartTime, EventEndTime));
  128. System.out.println("插结果" + count);
  129. if (count == 0) {
  130. // System.out.println("保存了一条");
  131. SysTelecomEvent sysTelecomEvent = new SysTelecomEvent();
  132. sysTelecomEvent.setDeviceId(sysTelecom.getDeviceId());
  133. sysTelecomEvent.setEventTime(sysTelecom.getTimestamp());
  134. sysTelecomEvent.setEventId(sysTelecom.getId());
  135. sysTelecomEvent.setFarmId(sysTelecom.getFarmId());
  136. sysTelecomEvent.setRemark(sysTelecom.getTemp());
  137. sysTelecomEventService.save(sysTelecomEvent);
  138. }
  139. // System.out.println("抛弃");
  140. }
  141. }
  142. }
  143. }
  144. }