package com.huimv.produce.timer; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.huimv.common.utils.DataUill; import com.huimv.produce.entity.*; import com.huimv.produce.service.*; import com.huimv.produce.sgd.Global; import com.huimv.produce.sgd.entity.Item; import com.huimv.produce.sgd.entity.Monitory; import com.huimv.produce.sgd.entity.MonitoryGetArgs; import com.huimv.produce.sgd.entity.MonitoryValue; import com.huimv.produce.sgd.fbox.ConsoleLoggerFactory; import com.huimv.produce.sgd.fbox.ServerCaller; import com.huimv.produce.sgd.fbox.StaticCredentialProvider; import com.huimv.produce.sgd.fbox.TokenManager; import com.huimv.produce.sgd.fbox.models.BoxGroup; import com.huimv.produce.sgd.fbox.models.BoxReg; import com.zhenzi.sms.ZhenziSmsClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; 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; private Integer hyFarmId = 1; /* //更新盒子,房间信息 @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(); } }*/ //更新环境数据 @Scheduled(cron = "0 0/30 * * * ?") // @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)) { 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 value = (Double)monitoryValue.getValue() * 0.1; sysTemperature.setId(monitoryValue.getId()); sysTemperature.setFarmId(hyFarmId); 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); } } } 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 (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 != 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); } } } catch (IOException e) { e.printStackTrace(); } System.out.println("更新月用水信息,更新时间------------->"+ new Date()); } //更新料控 @Scheduled(cron = "0 0/3 * * * ? ") // @Scheduled(cron = "0 0/5 * * * ?") 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); 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); 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); fodderService.save(fodder); } MonitoryValue[] twoMonitoryValues = apiBaseServer.executePost("/v2/box/" + twoUid + "/dmon/value/get", new MonitoryGetArgs(names, null, new ArrayList()), MonitoryValue[].class); 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); 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); 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); 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); fodderService.updateById(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); fodderService.save(fodder); }else { } 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(); } } } }