NewEnvTimer.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. package com.huimv.admin.timer;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  6. import com.huimv.admin.entity.*;
  7. import com.huimv.admin.service.*;
  8. import org.apache.commons.lang.StringUtils;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.context.annotation.Configuration;
  11. import org.springframework.http.HttpEntity;
  12. import org.springframework.http.HttpHeaders;
  13. import org.springframework.http.HttpMethod;
  14. import org.springframework.http.ResponseEntity;
  15. import org.springframework.scheduling.annotation.EnableScheduling;
  16. import org.springframework.scheduling.annotation.Scheduled;
  17. import org.springframework.util.LinkedMultiValueMap;
  18. import org.springframework.util.MultiValueMap;
  19. import org.springframework.web.client.RestTemplate;
  20. import java.math.BigDecimal;
  21. import java.text.ParseException;
  22. import java.util.Calendar;
  23. import java.util.Date;
  24. import java.util.List;
  25. @Configuration
  26. @EnableScheduling
  27. public class NewEnvTimer {
  28. @Autowired
  29. private RestTemplate restTemplate;
  30. @Autowired
  31. private IEnvDeviceService envDeviceService;
  32. @Autowired
  33. private IEnvDataService envDataService;
  34. @Autowired
  35. private IEnvWarningThresholdService envWarningThresholdService;
  36. @Autowired
  37. private IEnvWarningInfoService envWarningInfoService;
  38. @Autowired
  39. private IEnvNh3nService nh3nService;
  40. @Scheduled(cron = "0 0/59 * * * ?") //每10分钟执行一次
  41. // @Scheduled(cron = "0 * * * * ?") //每10分钟执行一次
  42. // @Scheduled(cron = "*/5 * * * * ?") //每10秒钟执行一次
  43. public void getDeviceFlowData() throws ParseException {
  44. String userId = "-1618620464";
  45. String farmCode = "26";
  46. List<EnvDevice> farm_id = envDeviceService.list(new QueryWrapper<EnvDevice>().eq("farm_id", farmCode));
  47. EnvWarningThreshold envWarningThreshold = envWarningThresholdService.getOne(new QueryWrapper<EnvWarningThreshold>().eq("farm_id", farmCode));
  48. System.out.println("开始");
  49. Date date = new Date();
  50. for (EnvDevice envDevice : farm_id) {
  51. String deviceCode = envDevice.getDeviceCode();
  52. if (StringUtils.isNotBlank(deviceCode)) {
  53. JSONObject resultJo = JSONObject.parseObject(getDeviceFlowFromRemoteURL(userId, deviceCode));
  54. System.out.println("resultJo >>>>>>>>>>>> =" + resultJo);
  55. if (resultJo.getInteger("code") != 1000) {
  56. System.out.println("牧场[" + farmCode + "]设备组编号(" + deviceCode + ")调用远程接口返回结果出错.");
  57. } else {
  58. JSONArray dataJa = resultJo.getJSONArray("data");
  59. JSONObject dataJo = dataJa.getJSONObject(0);
  60. JSONArray realTimeDataJa = dataJo.getJSONArray("realTimeData");
  61. JSONObject tempJo = realTimeDataJa.getJSONObject(0);
  62. String temp = tempJo.getString("dataValue");
  63. JSONObject humiJo = realTimeDataJa.getJSONObject(1);
  64. String humi = humiJo.getString("dataValue");
  65. if (StringUtils.isBlank(humi)) {
  66. humi = "0";
  67. }
  68. if (StringUtils.isBlank(temp)) {
  69. temp = "0";
  70. }
  71. EnvData envData = new EnvData();
  72. envData.setUnitId(envDevice.getUnitId());
  73. envData.setEnvTemp(temp);
  74. envData.setEnvHum(humi);
  75. envData.setFarmId(envDevice.getFarmId());
  76. envData.setCreateTime(date);
  77. envData.setDeviceId(envDevice.getDeviceCode());
  78. saveTemWarning(temp, envWarningThreshold, envDevice);
  79. saveHumWarning(humi, envWarningThreshold, envDevice);
  80. envDataService.save(envData);
  81. String remark = envDevice.getRemark();
  82. if (StringUtils.isNotBlank(remark)) {
  83. QueryWrapper<EnvNh3n> queryWrapper = new QueryWrapper<>();
  84. queryWrapper.eq("farm_id", farmCode).eq("device_code", remark);
  85. Calendar calendar = Calendar.getInstance();
  86. calendar.setTime(new Date());
  87. calendar.add(Calendar.MINUTE, -40);//
  88. queryWrapper.between("create_date", calendar.getTime(), new Date());
  89. List<EnvNh3n> list = nh3nService.list(queryWrapper);
  90. if (list.size() == 0 && humi.equals("0") && temp.equals("0")) {
  91. envDevice.setDeviceStatus(0);
  92. } else {
  93. envDevice.setDeviceStatus(1);
  94. }
  95. envDeviceService.updateById(envDevice);
  96. }
  97. }
  98. }
  99. }
  100. }
  101. //获取远程数据
  102. private String getDeviceFlowFromRemoteURL(String userId, String groupId) {
  103. //请求头
  104. HttpHeaders headers = new HttpHeaders();
  105. headers.add("userId", userId);
  106. //Body参数
  107. MultiValueMap<String, Object> paramsMap = new LinkedMultiValueMap<String, Object>();
  108. HttpEntity<MultiValueMap> objectHttpEntity = new HttpEntity<MultiValueMap>(paramsMap, headers);
  109. System.out.println("URL_ENVIRON_DEVICE_SERVICE=" + "http://www.0531yun.com/app/GetDeviceData");
  110. ResponseEntity<String> result = restTemplate.exchange("http://www.0531yun.com/app/GetDeviceData?groupId=" + groupId, HttpMethod.GET, objectHttpEntity, String.class);
  111. System.out.println("result.getBody()=" + result.getBody());
  112. return result.getBody();
  113. }
  114. private void saveTemWarning(String val, EnvWarningThreshold envWarningThreshold, EnvDevice envDevice) {
  115. if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(val)) {
  116. String maxTem;
  117. String minTem;
  118. if (ObjectUtil.isEmpty(envWarningThreshold) || com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(envWarningThreshold.getMaxTem())) {
  119. maxTem = "40";
  120. } else {
  121. maxTem = envWarningThreshold.getMaxTem();
  122. }
  123. if (ObjectUtil.isEmpty(envWarningThreshold) || com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(envWarningThreshold.getMinTem())) {
  124. minTem = "0";
  125. } else {
  126. minTem = envWarningThreshold.getMinTem();
  127. }
  128. System.out.println("maxTem:" + Double.parseDouble(maxTem) + " minTem:" + Double.parseDouble(minTem) + " val:" + Double.parseDouble(val));
  129. if (Double.parseDouble(maxTem) < Double.parseDouble(val)) {
  130. EnvWarningInfo envWarningInfo = new EnvWarningInfo();
  131. envWarningInfo.setBuildLocation(envDevice.getUnitName());
  132. envWarningInfo.setDate(new Date());
  133. envWarningInfo.setDeviceId(envDevice.getDeviceCode());
  134. envWarningInfo.setFarmId(envDevice.getFarmId());
  135. envWarningInfo.setUnitId(envDevice.getUnitId());
  136. envWarningInfo.setUnitName(envDevice.getUnitName());
  137. envWarningInfo.setUserIds(envWarningThreshold.getUserIds());
  138. envWarningInfo.setWarningContent("当前温度为" + val + "°超过阈值,请及时检查");
  139. envWarningInfo.setWarningType(1);
  140. envWarningInfoService.save(envWarningInfo);
  141. }
  142. if (Double.parseDouble(minTem) > Double.parseDouble(val)) {
  143. EnvWarningInfo envWarningInfo = new EnvWarningInfo();
  144. envWarningInfo.setBuildLocation(envDevice.getUnitName());
  145. envWarningInfo.setDate(new Date());
  146. envWarningInfo.setDeviceId(envDevice.getDeviceCode());
  147. envWarningInfo.setFarmId(envDevice.getFarmId());
  148. envWarningInfo.setUnitId(envDevice.getUnitId());
  149. envWarningInfo.setUnitName(envDevice.getUnitName());
  150. envWarningInfo.setUserIds(envWarningThreshold.getUserIds());
  151. envWarningInfo.setWarningContent("当前温度为" + val + "°低于阈值,请及时检查");
  152. envWarningInfo.setWarningType(1);
  153. envWarningInfoService.save(envWarningInfo);
  154. }
  155. }
  156. }
  157. public void saveHumWarning(String val, EnvWarningThreshold envWarningThreshold, EnvDevice envDevice) {
  158. if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(val)) {
  159. String maxHum;
  160. String minHum;
  161. if (ObjectUtil.isEmpty(envWarningThreshold) || com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(envWarningThreshold.getMaxHum())) {
  162. maxHum = "90";
  163. } else {
  164. maxHum = envWarningThreshold.getMaxHum();
  165. }
  166. if (ObjectUtil.isEmpty(envWarningThreshold) || com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(envWarningThreshold.getMinHum())) {
  167. minHum = "0";
  168. } else {
  169. minHum = envWarningThreshold.getMinHum();
  170. }
  171. if (Double.parseDouble(maxHum) < Double.parseDouble(val)) {
  172. EnvWarningInfo envWarningInfo = new EnvWarningInfo();
  173. envWarningInfo.setBuildLocation(envDevice.getUnitName());
  174. envWarningInfo.setDate(new Date());
  175. envWarningInfo.setDeviceId(envDevice.getDeviceCode());
  176. envWarningInfo.setFarmId(envDevice.getFarmId());
  177. envWarningInfo.setUnitId(envDevice.getUnitId());
  178. envWarningInfo.setUnitName(envDevice.getUnitName());
  179. envWarningInfo.setUserIds(envWarningThreshold.getUserIds());
  180. envWarningInfo.setWarningContent("当前湿度为" + val + "%超过阈值,请及时检查");
  181. envWarningInfo.setWarningType(2);
  182. envWarningInfoService.save(envWarningInfo);
  183. }
  184. if (Double.parseDouble(minHum) > Double.parseDouble(val)) {
  185. EnvWarningInfo envWarningInfo = new EnvWarningInfo();
  186. envWarningInfo.setBuildLocation(envDevice.getUnitName());
  187. envWarningInfo.setDate(new Date());
  188. envWarningInfo.setDeviceId(envDevice.getDeviceCode());
  189. envWarningInfo.setFarmId(envDevice.getFarmId());
  190. envWarningInfo.setUnitId(envDevice.getUnitId());
  191. envWarningInfo.setUnitName(envDevice.getUnitName());
  192. envWarningInfo.setUserIds(envWarningThreshold.getUserIds());
  193. envWarningInfo.setWarningContent("当前湿度为" + val + "%低于阈值,请及时检查");
  194. envWarningInfo.setWarningType(2);
  195. envWarningInfoService.save(envWarningInfo);
  196. }
  197. }
  198. }
  199. }