package com.huimv.admin.timer; import cn.hutool.core.codec.Base64; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.huimv.admin.common.utils.HttpClientSSLUtils; import com.huimv.admin.common.utils.Result; import com.huimv.admin.entity.*; import com.huimv.admin.entity.zengxindto.LoginOnlyDto; import com.huimv.admin.entity.zengxindto.LonginOnlyDtoToken; import com.huimv.admin.entity.zengxindto.ShackDatasDto; import com.huimv.admin.entity.zengxindto.ShackDatasSensor; import com.huimv.admin.service.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.client.RestTemplate; import javax.servlet.http.HttpServletRequest; import java.text.NumberFormat; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @Configuration @EnableScheduling public class EnvTimer { @Autowired private RestTemplate restTemplate; @Autowired private IEnvDeviceService envDeviceService; @Autowired private IEnvDeviceOnlineService envDeviceOnlineService; @Autowired private IFarmService farmService; @Autowired private IEnvDataService envDataService; @Autowired private IEnvWarningThresholdService envWarningThresholdService; @Autowired private IEnvWarningInfoService envWarningInfoService; //环控数据 String username = "江西增鑫"; String password = "888888"; String passwordMD5 = "21218cca77804d2ba1922c33e0151105"; String baseurl ="https://yzwlw.loongk.com/"; @Scheduled(cron = "0 0/11 * * * ? ") @Transactional private void getHuanKong() throws Exception { //目前是这家 Integer farmId = 21; String encode = loginOnly(); System.out.println("encode"+encode); //获取阈值 EnvWarningThreshold envWarningThreshold = envWarningThresholdService.getOne(new QueryWrapper().eq("farm_id", farmId)); HttpHeaders headers = new HttpHeaders(); headers.add("Authorization",encode); HttpEntity requestEntity = new HttpEntity<>(null, headers); //TODO 只有一家,先拿全部 List list = envDeviceService.list(); for (EnvDevice envDevice : list) { if (ObjectUtil.isNotEmpty(envDevice) && StringUtils.isNotBlank(envDevice.getDeviceCode())){ System.out.println(envDevice.getDeviceCode()); String shishiBody = ""; try { ResponseEntity exchange = restTemplate.exchange("https://yzwlw.loongk.com/mobile/loadShackDatas/" + envDevice.getDeviceCode(), HttpMethod.GET, requestEntity, String.class); shishiBody = exchange.getBody(); }catch (Exception e){ System.out.println(e); } if (StringUtils.isBlank(shishiBody)){ System.out.println(new Date() +"实时数据"+ shishiBody); return; } ShackDatasDto shackDatasDto = JSONUtil.toBean(shishiBody, ShackDatasDto.class); String onLine = shackDatasDto.getData().getOnLine(); if ("N".equals(onLine)){ envDevice.setDeviceStatus(0); }else { envDevice.setDeviceStatus(1); } envDeviceService.updateById(envDevice); List sensorDatas = shackDatasDto.getData().getSensorDatas(); EnvData envData = new EnvData(); for (ShackDatasSensor sensorData : sensorDatas) { if (sensorData.getId().equals(envDevice.getOhter1())){ String val = sensorData.getVal(); //TODO 预警 saveTemWarning(val,envWarningThreshold,envDevice,farmId); envData.setEnvTemp(val); } if (sensorData.getId().equals(envDevice.getOhter2())){ String val = sensorData.getVal(); //TODO 预警 saveHumWarning(val,envWarningThreshold,envDevice,farmId); envData.setEnvHum(val); } } envData.setCreateTime(new Date()); envData.setDeviceId(envDevice.getDeviceCode()); envData.setFarmId(farmId); envData.setUnitId(envDevice.getUnitId()); envDataService.save(envData); } } } private void saveHumWarning(String val, EnvWarningThreshold envWarningThreshold, EnvDevice envDevice, Integer farmId) { if (StringUtils.isNotBlank(val)){ String maxHum ; String minHum ; if (ObjectUtil.isEmpty(envWarningThreshold) || StringUtils.isBlank(envWarningThreshold.getMaxHum())){ maxHum ="90"; }else { maxHum = envWarningThreshold.getMaxHum(); } if (ObjectUtil.isEmpty(envWarningThreshold) || StringUtils.isBlank(envWarningThreshold.getMinHum())){ minHum ="0"; }else { minHum =envWarningThreshold.getMinHum(); } if (Double.parseDouble(maxHum) < Double.parseDouble(val)){ EnvWarningInfo envWarningInfo = new EnvWarningInfo(); envWarningInfo.setBuildLocation(envDevice.getUnitName()); envWarningInfo.setDate(new Date()); envWarningInfo.setDeviceId(envDevice.getDeviceCode()); envWarningInfo.setFarmId(farmId); envWarningInfo.setUnitId(envDevice.getUnitId()); envWarningInfo.setUnitName(envDevice.getUnitName()); envWarningInfo.setUserIds(envWarningThreshold.getUserIds()); envWarningInfo.setWarningContent("当前湿度为"+val+"%超过阈值,请及时检查"); envWarningInfo.setWarningType(2); envWarningInfoService.save(envWarningInfo); } if (Double.parseDouble(minHum) >Double.parseDouble(val)){ EnvWarningInfo envWarningInfo = new EnvWarningInfo(); envWarningInfo.setBuildLocation(envDevice.getUnitName()); envWarningInfo.setDate(new Date()); envWarningInfo.setDeviceId(envDevice.getDeviceCode()); envWarningInfo.setFarmId(farmId); envWarningInfo.setUnitId(envDevice.getUnitId()); envWarningInfo.setUnitName(envDevice.getUnitName()); envWarningInfo.setUserIds(envWarningThreshold.getUserIds()); envWarningInfo.setWarningContent("当前湿度为"+val+"%低于阈值,请及时检查"); envWarningInfo.setWarningType(2); envWarningInfoService.save(envWarningInfo); } } } private void saveTemWarning(String val, EnvWarningThreshold envWarningThreshold,EnvDevice envDevice,Integer farmId) { if (StringUtils.isNotBlank(val)){ String maxTem ; String minTem ; if (ObjectUtil.isEmpty(envWarningThreshold) || StringUtils.isBlank(envWarningThreshold.getMaxTem())){ maxTem ="40"; }else { maxTem = envWarningThreshold.getMaxTem(); } if (ObjectUtil.isEmpty(envWarningThreshold) || StringUtils.isBlank(envWarningThreshold.getMinTem())){ minTem ="0"; }else { minTem =envWarningThreshold.getMinTem(); } System.out.println("maxTem:"+Double.parseDouble(maxTem)+" minTem:"+Double.parseDouble(minTem)+" val:"+Double.parseDouble(val)); if (Double.parseDouble(maxTem) < Double.parseDouble(val)){ EnvWarningInfo envWarningInfo = new EnvWarningInfo(); envWarningInfo.setBuildLocation(envDevice.getUnitName()); envWarningInfo.setDate(new Date()); envWarningInfo.setDeviceId(envDevice.getDeviceCode()); envWarningInfo.setFarmId(farmId); envWarningInfo.setUnitId(envDevice.getUnitId()); envWarningInfo.setUnitName(envDevice.getUnitName()); envWarningInfo.setUserIds(envWarningThreshold.getUserIds()); envWarningInfo.setWarningContent("当前温度为"+val+"°超过阈值,请及时检查"); envWarningInfo.setWarningType(1); envWarningInfoService.save(envWarningInfo); } if (Double.parseDouble(minTem)>Double.parseDouble(val)){ EnvWarningInfo envWarningInfo = new EnvWarningInfo(); envWarningInfo.setBuildLocation(envDevice.getUnitName()); envWarningInfo.setDate(new Date()); envWarningInfo.setDeviceId(envDevice.getDeviceCode()); envWarningInfo.setFarmId(farmId); envWarningInfo.setUnitId(envDevice.getUnitId()); envWarningInfo.setUnitName(envDevice.getUnitName()); envWarningInfo.setUserIds(envWarningThreshold.getUserIds()); envWarningInfo.setWarningContent("当前温度为"+val+"°低于阈值,请及时检查"); envWarningInfo.setWarningType(1); envWarningInfoService.save(envWarningInfo); } } } private String loginOnly() throws Exception { Map map = new HashMap(); String s = HttpClientSSLUtils.doPost(baseurl + "/mobile/login?username=" + username + "&password=" + passwordMD5, JSON.toJSONString(map)); LoginOnlyDto loginDto = JSONUtil.toBean(s, LoginOnlyDto.class); LonginOnlyDtoToken token = loginDto.getData().getToken(); return Base64.encode(token.getUserId() + "_" + token.getToken()); } @Scheduled(cron = "0 0 0 * * ? ") private void update() throws Exception { Date date = new Date(); DateTime beginOfMonth = DateUtil.beginOfMonth(date); List list = farmService.list(); for (Farm farm : list) { Integer farmId = farm.getId(); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("farm_id", farmId); Integer count = envDeviceService.count(queryWrapper); QueryWrapper queryWrapper1 = new QueryWrapper<>(); queryWrapper1.eq("device_status", 1); Integer count1 = envDeviceService.count(queryWrapper1); Integer OffDeviceCount = count- count1; //创建一个数值格式化对象 NumberFormat numberFormat = NumberFormat.getInstance(); //设置精确到小数点后两位 numberFormat.setMaximumFractionDigits(2); String onDeviceRate = numberFormat.format((float)count1 / (float) count* 100); EnvDeviceOnline envDeviceOnline = envDeviceOnlineService.getOne(new QueryWrapper().eq("farm_id", farmId).ge("creat_time", beginOfMonth)); if (ObjectUtil.isEmpty(envDeviceOnline)){ envDeviceOnline = new EnvDeviceOnline(); envDeviceOnline.setCreatTime(date); envDeviceOnline.setDeviceOff(OffDeviceCount); envDeviceOnline.setDeviceOn(count1); envDeviceOnline.setFarmId(farmId+""); envDeviceOnline.setOnlineRate(onDeviceRate); envDeviceOnline.setNowMonth(beginOfMonth.month()); envDeviceOnline.setNowYear(beginOfMonth.year()); envDeviceOnlineService.save(envDeviceOnline); }else { envDeviceOnline = new EnvDeviceOnline(); envDeviceOnline.setCreatTime(date); envDeviceOnline.setDeviceOff(OffDeviceCount); envDeviceOnline.setDeviceOn(count1); envDeviceOnline.setFarmId(farmId+""); envDeviceOnline.setOnlineRate(onDeviceRate); envDeviceOnline.setNowMonth(beginOfMonth.month()); envDeviceOnline.setNowYear(beginOfMonth.year()); envDeviceOnlineService.updateById(envDeviceOnline); } } } }