/* package com.huimv.eco.timer; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.huimv.eco.entity.*; import com.huimv.eco.service.*; import com.huimv.eco.sgd.Global; import com.huimv.eco.sgd.entity.Item; import com.huimv.eco.sgd.entity.Monitory; import com.huimv.eco.sgd.entity.MonitoryGetArgs; import com.huimv.eco.sgd.entity.MonitoryValue; import com.huimv.eco.sgd.fbox.ConsoleLoggerFactory; import com.huimv.eco.sgd.fbox.ServerCaller; import com.huimv.eco.sgd.fbox.StaticCredentialProvider; import com.huimv.eco.sgd.fbox.TokenManager; import com.zhenzi.sms.ZhenziSmsClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import java.io.IOException; import java.text.DecimalFormat; import java.util.*; @Component public class SgdTimer { private static final long SLEEP_TIME = 1000; @Autowired private IBaseBoxService baseBoxService; @Autowired private IBaseRoomService baseRoomService; @Autowired private ISysHumidityService humidityService; @Autowired private ISysTemperatureService temperatureService; @Autowired private ISysDayWaterService dayWaterService; @Autowired private ISysMonthWaterService monthWaterService; @Autowired private ISysFodderService fodderService; @Autowired private ISysWarningSetService warningSetService; @Autowired private IBaseWarningInfoService warningInfoService; @Autowired private ISysWarningPhoneService warningPhoneService; //阈值 @Autowired private ISysThresholdService thresholdService; @Autowired private RestTemplate restTemplate; private Integer hyFarmId = 1; String url = "http://120.27.234.126:8010/receiver/receiver/eco/save"; //更新环境数据 // @Scheduled(cron = "0 0/3 * * * ?") //// @Scheduled(cron = "0 * * * * ?") // private void updateEnv(){ // // ConsoleLoggerFactory loggerFactory = new ConsoleLoggerFactory(); // // 指定连接服务器的凭据参数 // TokenManager tokenManager = new TokenManager(new StaticCredentialProvider(Global.clientId, Global.clientSecret, Global.username, Global.password), Global.idServerUrl, loggerFactory); // ServerCaller apiBaseServer = new ServerCaller(tokenManager, Global.apiBaserUrl, Global.signalrClientId, loggerFactory); // Global.apiBaseServer = apiBaseServer; // DecimalFormat df = new DecimalFormat("#.00"); // // SysThreshold byId = thresholdService.getById(hyFarmId); // String maxHum = byId.getMaxHum(); // String minHum = byId.getMinHum(); // String maxTem = byId.getMaxTem(); // String minTem = byId.getMinTem(); // try { // List boxes = baseBoxService.list(); // for (BaseBox box : boxes) { // String uid = box.getUid(); // Monitory[] monitories = apiBaseServer.executeGet("/v2/box/" + uid + "/dmon/grouped", Monitory[].class); // List names = new ArrayList(); // for (Monitory monitory : monitories) { // for (Item item : monitory.items) { // String name = item.name; // if (monitory.name.contains("房间状态") && name != null&& name.startsWith("房舍")) { // if (name.contains("平均温度") || name.contains("湿度")) { // names.add(name); // } // } // } // } // // // if (ObjectUtil.isNotEmpty(names)) { // String str = apiBaseServer.executePost("/v2/box/" +uid + "/dmon/value/get", new MonitoryGetArgs(names, null, new ArrayList()), String.class); // System.out.println(str); // MonitoryValue[] monitoryValues = apiBaseServer.executePost("/v2/box/" +uid + "/dmon/value/get", new MonitoryGetArgs(names, null, new ArrayList()), MonitoryValue[].class); // List temList = new ArrayList(); // List humList = new ArrayList<>(); // for (MonitoryValue monitoryValue : monitoryValues) { // if (ObjectUtil.isEmpty(monitoryValue)){ // continue; // } // String name = monitoryValue.getName(); // String[] split = name.split("-"); // BaseRoom room = baseRoomService.getOne(new QueryWrapper().eq("room_name", split[0]).eq("box_id", uid)); // Integer roomId = room.getId(); // if (split[1].contains("温度")){ // SysTemperature sysTemperature = new SysTemperature(); // if (ObjectUtil.isNotEmpty(monitoryValue.getValue())){ // Double value1 = (Double)monitoryValue.getValue(); // Double value = value1* 0.1; // sysTemperature.setId(monitoryValue.getId()); // sysTemperature.setFarmId(hyFarmId); // sysTemperature.setOriginal(value1); // sysTemperature.setRoomId(roomId); // if (value != 0.0){ // sysTemperature.setValue(Double.parseDouble(df.format(value))); // }else { // sysTemperature.setValue(value); // } // sysTemperature.setCreateTime(monitoryValue.getTimestamp()); // temList.add(sysTemperature); // } // // } // if (split[1].contains("湿度")){ // SysHumidity humidity = new SysHumidity(); // Double value = (Double)monitoryValue.getValue() ; // humidity.setId(monitoryValue.getId()); // humidity.setRoomId(roomId); // humidity.setFarmId(hyFarmId); // if (ObjectUtil.isNotEmpty(value)){ // if (value != 0.0){ // humidity.setValue(Double.parseDouble(df.format(value))); // }else{ // humidity.setValue(value); // } // // humidity.setCreateTime(monitoryValue.getTimestamp()); // humList.add(humidity); // } // // } // // } // humidityService.saveBatch(humList); // temperatureService.saveBatch(temList); // // humWarning(humList,minHum,maxHum); // temWarning(temList,minTem,maxTem); // // } // } // // } catch (IOException e) { // e.printStackTrace(); // } // System.out.println("更新温湿度信息,更新时间------------->"+ new Date()); // } //温度报警 private void temWarning(List temList, String minTem, String maxTem) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("content","高温报警"); SysWarningSet maxWarning = warningSetService.getOne(wrapper); wrapper.clear(); wrapper.eq("content","低温报警"); SysWarningSet minWarning = warningSetService.getOne(wrapper); Double min = null; Double max = null; try { min = Double.valueOf(minTem); }catch (NumberFormatException e) { e.printStackTrace(); } try { max = Double.valueOf(maxTem); }catch (NumberFormatException e) { e.printStackTrace(); } for ( SysTemperature temperature : temList) { BaseRoom baseRoom = baseRoomService.getById(temperature.getRoomId()); Double value = temperature.getValue(); Date now = new Date(); if (min != null && value max){ if (maxWarning.getFirstLevel() || maxWarning.getSecondLevel() || maxWarning.getThirdlyLevel()) { BaseWarningInfo baseWarningInfo = new BaseWarningInfo(); baseWarningInfo.setFarmId(hyFarmId); baseWarningInfo.setWarningName("高温报警"); baseWarningInfo.setMsg(baseRoom.getAlias() + baseRoom.getRoomName() + "出现高温报警,温度为:" + value); baseWarningInfo.setWarningTime(now); baseWarningInfo.setUploadTime(temperature.getCreateTime()); baseWarningInfo.setAlarmType(7); if (maxWarning.getFirstLevel()) { baseWarningInfo.setLevel(1); baseWarningInfo.setLevelName("一级报警"); } if (maxWarning.getSecondLevel()) { baseWarningInfo.setLevel(2); baseWarningInfo.setLevelName("二级报警"); //这个写短信内容 send(baseRoom.getAlias(), baseRoom.getRoomName(), value + "℃"); } if (maxWarning.getThirdlyLevel()) { baseWarningInfo.setLevel(3); baseWarningInfo.setLevelName("三级报警"); //这个写短信内容 } warningInfoService.save(baseWarningInfo); } } } } //湿度报警 private void humWarning(List humList, String minHum, String maxHum) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("content","高湿度报警"); SysWarningSet maxWarning = warningSetService.getOne(wrapper); wrapper.clear(); wrapper.eq("content","低湿度报警"); SysWarningSet minWarning = warningSetService.getOne(wrapper); Double min = null; Double max = null; try { min = Double.valueOf(minHum); }catch (NumberFormatException e) { e.printStackTrace(); } try { max = Double.valueOf(maxHum); }catch (NumberFormatException e) { e.printStackTrace(); } for (SysHumidity humidity : humList) { BaseRoom baseRoom = baseRoomService.getById(humidity.getRoomId()); Double value = humidity.getValue(); Date now = new Date(); if (min != null && value max) { if (maxWarning.getFirstLevel() || maxWarning.getSecondLevel() || maxWarning.getThirdlyLevel()) { BaseWarningInfo baseWarningInfo = new BaseWarningInfo(); baseWarningInfo.setFarmId(hyFarmId); baseWarningInfo.setWarningName("高湿度报警"); baseWarningInfo.setMsg(baseRoom.getAlias() + baseRoom.getRoomName() + "出现高湿度报警,湿度为:" + value); baseWarningInfo.setWarningTime(now); baseWarningInfo.setUploadTime(humidity.getCreateTime()); baseWarningInfo.setAlarmType(9); if (maxWarning.getFirstLevel()) { baseWarningInfo.setLevel(1); baseWarningInfo.setLevelName("一级报警"); } if (maxWarning.getSecondLevel()) { baseWarningInfo.setLevel(2); baseWarningInfo.setLevelName("二级报警"); //这个写短信内容 send(baseRoom.getAlias(), baseRoom.getRoomName(), value + "%"); } if (maxWarning.getThirdlyLevel()) { baseWarningInfo.setLevelName("三级报警"); baseWarningInfo.setAlarmType(9); //这个写短信内容 } warningInfoService.save(baseWarningInfo); } } } } //更新日用水 9 @Scheduled(cron = "0 55 8 * * ? ") // @Scheduled(cron = "0 * * * * ?") private void updateDayWater(){ ConsoleLoggerFactory loggerFactory = new ConsoleLoggerFactory(); // 指定连接服务器的凭据参数 TokenManager tokenManager = new TokenManager(new StaticCredentialProvider(Global.clientId, Global.clientSecret, Global.username, Global.password), Global.idServerUrl, loggerFactory); ServerCaller apiBaseServer = new ServerCaller(tokenManager, Global.apiBaserUrl, Global.signalrClientId, loggerFactory); Global.apiBaseServer = apiBaseServer; DecimalFormat df = new DecimalFormat("#.00"); try { List boxes = baseBoxService.list(); for (BaseBox box : boxes) { String uid = box.getUid(); Monitory[] monitories = apiBaseServer.executeGet("/v2/box/" + uid + "/dmon/grouped", Monitory[].class); List names = new ArrayList(); if (ObjectUtil.isEmpty(monitories)){ continue; } for (Monitory monitory : monitories) { for (Item item : monitory.items) { String name = item.name; if (monitory.name.contains("房间状态") && name != null&& name.startsWith("房舍")) { if (name.contains("日用水量") ) { names.add(name); } } } } if (ObjectUtil.isNotEmpty(names)) { MonitoryValue[] monitoryValues = apiBaseServer.executePost("/v2/box/" +uid + "/dmon/value/get", new MonitoryGetArgs(names, null, new ArrayList()), MonitoryValue[].class); List dayWatersList = new ArrayList(); for (MonitoryValue monitoryValue : monitoryValues) { if (ObjectUtil.isEmpty(monitoryValue)){ continue; } String name = monitoryValue.getName(); String[] split = name.split("-"); BaseRoom room = baseRoomService.getOne(new QueryWrapper().eq("room_name", split[0]).eq("box_id", uid)); Integer roomId = room.getId(); SysDayWater dayWater = new SysDayWater(); Double value = (Double)monitoryValue.getValue(); dayWater.setId(monitoryValue.getId()); dayWater.setRoomId(roomId); dayWater.setFarmId(hyFarmId); if (value == null){ continue; } if (0.0 != value){ String format = df.format(value); if (format.length()==3){ dayWater.setValue(0+format); }else { dayWater.setValue(format); } }else { dayWater.setValue(value+""); } dayWater.setCreateTime(monitoryValue.getTimestamp()); dayWatersList.add(dayWater); } dayWaterService.saveBatch(dayWatersList); HumAndTemDto humAndTemDto = new HumAndTemDto(); humAndTemDto.setDayWaters(dayWatersList); humAndTemDto.setType(0); String s = restTemplate.postForObject(url, humAndTemDto, String.class); System.out.println(s); } } } catch (IOException e) { e.printStackTrace(); } System.out.println("更新日用水信息,更新时间------------->"+ new Date()); } //更新两个小时用水数据 @Scheduled(cron = "0 59 0,2,4,6,8,10,12,14,16,18,20,22 * * ? ") // @Scheduled(cron = "0 0/2 * * * ?") private void updateMonthWater(){ ConsoleLoggerFactory loggerFactory = new ConsoleLoggerFactory(); // 指定连接服务器的凭据参数 TokenManager tokenManager = new TokenManager(new StaticCredentialProvider(Global.clientId, Global.clientSecret, Global.username, Global.password), Global.idServerUrl, loggerFactory); ServerCaller apiBaseServer = new ServerCaller(tokenManager, Global.apiBaserUrl, Global.signalrClientId, loggerFactory); Global.apiBaseServer = apiBaseServer; DecimalFormat df = new DecimalFormat("#.00"); try { List boxes = baseBoxService.list(); for (BaseBox box : boxes) { String uid = box.getUid(); Monitory[] monitories = apiBaseServer.executeGet("/v2/box/" + uid + "/dmon/grouped", Monitory[].class); List names = new ArrayList(); for (Monitory monitory : monitories) { for (Item item : monitory.items) { String name = item.name; if (monitory.name.contains("房间状态") && name != null&& name.startsWith("房舍")) { if (name.contains("日用水量") ) { names.add(name); } } } } if (ObjectUtil.isNotEmpty(names)) { MonitoryValue[] monitoryValues = apiBaseServer.executePost("/v2/box/" +uid + "/dmon/value/get", new MonitoryGetArgs(names, null, new ArrayList()), MonitoryValue[].class); List dayWatersList = new ArrayList(); for (MonitoryValue monitoryValue : monitoryValues) { if (ObjectUtil.isEmpty(monitoryValue)){ continue; } String name = monitoryValue.getName(); String[] split = name.split("-"); BaseRoom room = baseRoomService.getOne(new QueryWrapper().eq("room_name", split[0]).eq("box_id", uid)); Integer roomId = room.getId(); SysMonthWater oldWater = monthWaterService.getOne( new QueryWrapper() .eq("room_id", roomId) .eq("farm_id",hyFarmId) .orderByDesc("month_water_id") .last("LIMIT 1")); SysMonthWater monthWater = new SysMonthWater(); monthWater.setFarmId(hyFarmId); Double newValue = (Double)monitoryValue.getValue(); Double add ; if (newValue == null){ newValue=0.0; } if (ObjectUtil.isEmpty(oldWater)){ if (newValue == null){ add = 0.0; }else { add = newValue; } }else { Double oldValue = Double.parseDouble(oldWater.getValue()); if (newValue >= oldValue){ add = newValue -oldValue; }else { add = newValue; } } if (add != 0.0){ String format = df.format(add); if (format.length()==3){ monthWater.setIncreaseValue(0+format); }else { monthWater.setIncreaseValue(format); } }else { monthWater.setIncreaseValue(add+""); } monthWater.setId(monitoryValue.getId()); monthWater.setRoomId(roomId); if (newValue ==null){ newValue = 0.0; } if (newValue != 0.0){ String format = df.format(newValue); if (format.length()==3){ monthWater.setValue(0+format); }else { monthWater.setValue(format); } }else { monthWater.setValue(newValue+""); } monthWater.setCreateTime(monitoryValue.getTimestamp()); dayWatersList.add(monthWater); } monthWaterService.saveBatch(dayWatersList); HumAndTemDto humAndTemDto = new HumAndTemDto(); humAndTemDto.setMonthWaters(dayWatersList); humAndTemDto.setType(0); String s = restTemplate.postForObject(url, humAndTemDto, String.class); System.out.println(s); } } } catch (IOException e) { e.printStackTrace(); } System.out.println("更新月用水信息,更新时间------------->"+ new Date()); } //更新料控 // @Scheduled(cron = "0 0/6 * * * ? ") // @Scheduled(cron = "0 * * * * ?") // private void updateFodder() throws IOException { // ConsoleLoggerFactory loggerFactory = new ConsoleLoggerFactory(); // // 指定连接服务器的凭据参数 // TokenManager tokenManager = new TokenManager(new StaticCredentialProvider(Global.clientId, Global.clientSecret, Global.username, Global.password), Global.idServerUrl, loggerFactory); // ServerCaller apiBaseServer = new ServerCaller(tokenManager, Global.apiBaserUrl, Global.signalrClientId, loggerFactory); // Global.apiBaseServer = apiBaseServer; // // List names = new ArrayList(); // String oneUid = "-1277226674647203111"; // String twoUid = "-1277176930335980834"; // String threeUid = "-1277075358654397725"; // names.add("累计重量"); // // MonitoryValue[] monitoryValues = apiBaseServer.executePost("/v2/box/" + oneUid + "/dmon/value/get", new MonitoryGetArgs(names, null, new ArrayList()), MonitoryValue[].class); // for (MonitoryValue monitoryValue : monitoryValues) { // // System.out.println(monitoryValue); // } // MonitoryValue monitoryValue = monitoryValues[0]; // Double value = (Double)monitoryValue.getValue(); // SysFodder oneFodder = fodderService.getOne(new QueryWrapper().eq("floor_id", 1).last("ORDER BY fodder_id DESC limit 1")); // Double oldVale = oneFodder.getValue(); // // if (oldVale < value){ // oneFodder.setValue(value); // oneFodder.setUpdateTime(new Date()); // fodderService.updateById(oneFodder); // }else if (value < oldVale){ // SysFodder fodder = new SysFodder(); // fodder.setValue(value); // fodder.setCreateTime(monitoryValue.getTimestamp()); // fodder.setFloorId(1); // fodder.setId(monitoryValue.getId()); // fodder.setFarmId(hyFarmId); // fodder.setUpdateTime(new Date()); // // fodderService.save(fodder); // // } // // // // MonitoryValue[] twoMonitoryValues = apiBaseServer.executePost("/v2/box/" + twoUid + "/dmon/value/get", new MonitoryGetArgs(names, null, new ArrayList()), MonitoryValue[].class); // for (MonitoryValue twoMonitoryValue : twoMonitoryValues) { // System.out.println(twoMonitoryValue); // } // MonitoryValue twoMonitoryValue = twoMonitoryValues[0]; // Double twoValue = (Double)twoMonitoryValue.getValue(); // SysFodder twoFodder = fodderService.getOne(new QueryWrapper().eq("floor_id", 2).last("ORDER BY fodder_id DESC limit 1")); // Double twoOldVale = twoFodder.getValue(); // if (twoOldVale < twoValue){ // twoFodder.setValue(twoValue); // twoFodder.setUpdateTime(new Date()); // fodderService.updateById(twoFodder); //// System.out.println("二号楼更新------------>"+twoFodder); // }else if (twoValue < twoOldVale){ // SysFodder fodder = new SysFodder(); // fodder.setValue(twoValue); // fodder.setCreateTime(twoMonitoryValue.getTimestamp()); // fodder.setFloorId(2); // fodder.setId(twoMonitoryValue.getId()); // fodder.setFarmId(hyFarmId); // fodder.setUpdateTime(new Date()); // fodderService.save(fodder); //// System.out.println("二号楼新增------------>"+twoMonitoryValue); // }else { //// System.out.println("二号楼舍弃------------>"+twoMonitoryValue); // } // // // MonitoryValue[] threeMonitoryValues = apiBaseServer.executePost("/v2/box/" + threeUid + "/dmon/value/get", new MonitoryGetArgs(names, null, new ArrayList()), MonitoryValue[].class); // for (MonitoryValue threeMonitoryValue : threeMonitoryValues) { // // System.out.println(threeMonitoryValue); // } // MonitoryValue threeMonitoryValue = threeMonitoryValues[0]; // Double threeValue = (Double)threeMonitoryValue.getValue(); // SysFodder threeFodder = fodderService.getOne(new QueryWrapper().eq("floor_id", 3).last("ORDER BY fodder_id DESC limit 1")); // Double threeOldVale = threeFodder.getValue(); // // if (threeOldVale < threeValue){ // threeFodder.setValue(threeValue); // threeFodder.setUpdateTime(new Date()); // fodderService.updateById(threeFodder); // System.out.println(threeFodder); // //// System.out.println("三号楼更新------------>"+threeFodder); // }else if (threeValue < threeOldVale){ // SysFodder fodder = new SysFodder(); // fodder.setValue(threeValue); // fodder.setCreateTime(threeMonitoryValue.getTimestamp()); // fodder.setFloorId(3); // fodder.setId(threeMonitoryValue.getId()); // fodder.setFarmId(hyFarmId); // fodder.setUpdateTime(new Date()); // fodderService.save(fodder); // // } // // // System.out.println("更新料塔信息,更新时间------------->" + new Date()); // // } public void send(String alias, String roomName, String value) { ZhenziSmsClient client = new ZhenziSmsClient("https://sms_developer.zhenzikj.com", "109928", "2684d129-1946-43fc-9074-93cee1687eb7"); Map params = new HashMap(); //从数据库查询 SysWarningPhone one = warningPhoneService.getOne(new QueryWrapper().eq("farm_id", hyFarmId).eq("level", 2)); String[] split = one.getPhone().split(","); for (String phone : split) { params.put("number",phone); params.put("templateId", "7445"); String[] templateParams = new String[3]; templateParams[0] = alias; templateParams[1] = roomName; templateParams[2] = value; params.put("templateParams", templateParams); try { System.out.println(client.send(params)); } catch (Exception e) { e.printStackTrace(); } } } */ /* //更新盒子,房间信息 @Scheduled(cron = "0 0 0 1/7 * ?") // @Scheduled(cron = "0 0/6 * * * ?") private void updateBox(){ ConsoleLoggerFactory loggerFactory = new ConsoleLoggerFactory(); // 指定连接服务器的凭据参数 TokenManager tokenManager = new TokenManager(new StaticCredentialProvider(Global.clientId, Global.clientSecret, Global.username, Global.password), Global.idServerUrl, loggerFactory); ServerCaller appServer = new ServerCaller(tokenManager, Global.appServerApiUrl, Global.signalrClientId, loggerFactory); ServerCaller apiBaseServer = new ServerCaller(tokenManager, Global.apiBaserUrl, Global.signalrClientId, loggerFactory); Global.appServer = appServer; Global.apiBaseServer = apiBaseServer; try { BoxGroup[] boxGroups = appServer.executeGet("api/client/box/grouped", BoxGroup[].class); List boxs = new ArrayList<>(); List rooms = new ArrayList<>(); for (BoxGroup group : boxGroups) { //盒子 for (BoxReg boxReg : group.boxRegs) { String alias = boxReg.alias; if (alias.endsWith("层环控系统")) { if (alias.startsWith("海盐青莲1号楼")){ boxs.add( new BaseBox(boxReg.boxUid,alias,1)); } if (alias.startsWith("海盐青莲2号楼")){ boxs.add( new BaseBox(boxReg.boxUid,alias,2)); } if (alias.startsWith("海盐青莲3号楼")){ boxs.add( new BaseBox(boxReg.boxUid,alias,3)); } for (int i= 1 ;i <= 6 ;i++){ BaseRoom baseRoom = new BaseRoom(); baseRoom.setBoxId(boxReg.boxUid); baseRoom.setRoomName("房舍"+i); baseRoom.setAlias(alias.substring(4,9)); rooms.add(baseRoom); } } } } baseBoxService.remove(null); baseBoxService.saveBatch(boxs); baseRoomService.remove(null); baseRoomService.saveBatch(rooms); System.out.println("更新房舍信息,更新时间------------->"+ new Date()); } catch (IOException e) { e.printStackTrace(); } }*//* } */