package com.fzzy.gateway; import com.alibaba.fastjson.JSON; import com.fzzy.api.data.GatewayDeviceProtocol; import com.fzzy.api.data.GatewayDeviceType; import com.fzzy.api.utils.DateUtil; import com.fzzy.data.ConfigData; import com.fzzy.gateway.api.GatewayRemoteManager; import com.fzzy.gateway.api.GatewayRemoteService; import com.fzzy.gateway.api.GatewaySyncGranService; import com.fzzy.gateway.data.BaseReqData; import com.fzzy.gateway.data.BaseResp; import com.fzzy.gateway.data.WeatherWebDto; import com.fzzy.gateway.entity.GatewayConf; import com.fzzy.gateway.entity.GatewayDevice; import com.fzzy.gateway.service.GatewayConfService; import com.fzzy.gateway.service.GatewayDeviceTestPR; import com.fzzy.gateway.util.GatewayHttpUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.*; /** * 网关相关的定时器 */ @Slf4j @Component(GatewayTimerScheduled.BEAN_ID) public class GatewayTimerScheduled { public static String DEFAULT_URL = "https://v1.yiketianqi.com/api?unescape=1&version=v61&appid={appId}&appsecret={appsecret}&cityid={cityid}"; public static String DEFAULT_APP_ID = "49421971"; public static String DEFAULT_APP_SECRET = "JmJE48Fv"; public static String DEFAULT_CITYID = "101270101";//成都 public static final String BEAN_ID = "gateway.timerScheduled"; @Resource private GatewayConfService confService; @Resource private GatewayRemoteManager gatewayRemoteManager; @Resource private ConfigData configData; @Resource private GatewayDeviceTestPR gatewayDeviceTestPR; /** *

* 固定时间:每间隔10分钟执行一次 */ @Scheduled(cron = "0 0/10 * * * ?") public void scheduled() { //网关的心跳执行 doHeartbeat(); } /** *

* 粮情每天11点穿上区 */ // @Scheduled(cron = "0 0 11 * * ?") public void scheduledGrain() { //获取设备配置,只针对粮情设备进行执行 log.info("定时kafka粮情推送"); List list = gatewayDeviceTestPR.listAll(); if (null == list || list.isEmpty()) { log.error("为获取到系统中设备配置,取消执行\""); return ; } BaseReqData reqData; BaseResp resp; for (GatewayDevice device : list) { //如果不是粮情分机跳过 if (!GatewayDeviceType.TYPE_07.getCode().equals(device.getType())) { continue; } reqData = new BaseReqData(); reqData.setProductId(device.getProductId()); reqData.setDeviceName(device.getDeviceName()); reqData.setDeviceId(device.getDeviceId()); reqData.setDayTime(new Date()); reqData.setDevice(device); //获取到 resp = gatewayRemoteManager.getGatewayTestService(device.getPushProtocol()).testGrainKafka(reqData); log.info("resp = "+resp.toString()); //自动推送 if (BaseResp.CODE_200 == resp.getCode()) { reqData.setData(resp.getData()); gatewayRemoteManager.getDeviceReportService(device.getPushProtocol()).reportGrainDataByHand(reqData); } } } /** *

* 粮情每天8点采集粮情 * */ // @Scheduled(cron = "0 30 5 ? * *") // @Scheduled(cron = "0 32 11 ? * 1,4") @Scheduled(cron = "0 32 11 ? * *") public void scheduledGrain2() { //获取设备配置,只针对粮情设备进行执行 log.info("定时粮情采集kafka推送"); List list = gatewayDeviceTestPR.listAll(); if (null == list || list.isEmpty()) { log.error("为获取到系统中设备配置,取消执行\""); return ; } BaseReqData reqData = new BaseReqData(); BaseResp resp; for (GatewayDevice device : list) { for (int i = 0 ;i<3;i++){ try{ //如果不是粮情分机跳过 if (!GatewayDeviceType.TYPE_07.getCode().equals(device.getType())) { continue; } if( i>0 && !device.getDeviceSn().startsWith("91510704731594658J002")){ continue; } reqData.setDeviceId(device.getDeviceId()); reqData.setProductId(device.getProductId()); reqData.setDeviceName(device.getDeviceName()); reqData.setDevice(device); reqData.setAutoReplay(true); GatewaySyncGranService syncGrainService = gatewayRemoteManager.getSyncGrainService(device.getSyncProtocol()); resp = syncGrainService.syncGrain(reqData); log.info("命令发送结果:"+resp.toString()); Thread.sleep(60000); }catch (Exception e){ log.error(e.getMessage(),e); } } } } /** *

* 每间隔3秒执行一次事件 */ @Scheduled(cron = "0/3 * * * * ?") public void scheduled3() { try{ //执行HTTP地磅请求 exeHttpWeightReq(); }catch (Exception e){ log.error(e.getMessage(),e); } } /** * 每间隔30分钟执行一次 */ @Scheduled(cron = "0 0/30 * * * ?") public void scheduled30() { //定时获取气象信息 doWeatherExe(); } public void doWeatherExe() { try { String url = configData.getWeatherPath(); if (null == url) { url = DEFAULT_URL; } Map parameMap = new HashMap<>(); parameMap.put("unescape","1"); parameMap.put("version","v61"); parameMap.put("appid",DEFAULT_APP_ID); parameMap.put("appsecret",DEFAULT_APP_SECRET); parameMap.put("cityid",DEFAULT_CITYID); url = url.replace("{appId}", DEFAULT_APP_ID).replace("{appsecret}", DEFAULT_APP_SECRET).replace("{cityid}", DEFAULT_CITYID); url = url.replace("{appId}", DEFAULT_APP_ID).replace("{appsecret}", DEFAULT_APP_SECRET); if (StringUtils.isNotEmpty(configData.getCityId())) { url = url.replace("{cityid}", configData.getCityId()); } else { url = url.replace("{cityid}", DEFAULT_CITYID); } log.debug("------气象请求信息URL---{}", url); String result = GatewayHttpUtil.doGet(url,parameMap); if (null == result) { log.error("当前外网获取气象信息失败……"); return; } WeatherWebDto dto = JSON.parseObject(result, WeatherWebDto.class); if (StringUtils.isNotEmpty(dto.getErrcode())) { log.error("当前外网获取气象信息异常:{}", dto.getErrmsg()); return; } WeatherWebDto.contextMap.put("default", dto); log.info("===========================系统定时获获取气象信息===={}==================", dto); } catch (Exception e) { log.error(e.getMessage(),e); } } /** * 执行网关心跳 */ private void doHeartbeat() { //获取缓存中的网关信息 List list = confService.getCacheConfList(); if (null == list || list.isEmpty()) { log.warn("------系统为获取到网关配置信息,不执行定时心跳-----"); return; } for (GatewayConf conf : list) { gatewayRemoteManager.getRemoteService(conf.getPushProtocol()).heartbeat(conf); } } /** * 执行地磅HTTP请求协议 */ private void exeHttpWeightReq() { //获取设备 Collection list = GatewayUtils.listDeviceWeight(); if (null == list || list.isEmpty()) return; BaseReqData reqData; for (GatewayDevice device : list) { if (!GatewayDeviceProtocol.DEVICE_WEIGHT_HTTP.getCode().equals(device.getSyncProtocol())) { continue; } reqData = new BaseReqData(); reqData.setDevice(device); reqData.setDeviceName(device.getDeviceName()); reqData.setProductId(device.getProductId()); reqData.setDeviceId(device.getDeviceId()); gatewayRemoteManager.getSyncWeightService(device.getSyncProtocol()).syncWeightInfo(reqData); } } public static void main(String[] args) { try { Map parameMap = new HashMap<>(); parameMap.put("unescape","1"); parameMap.put("version","v61"); parameMap.put("appid","49421971"); parameMap.put("appsecret","JmJE48Fv"); parameMap.put("cityid","101270101"); String result = GatewayHttpUtil.doGet("https://v1.yiketianqi.com/api?unescape=1&version=v61&appid=49421971&appsecret=JmJE48Fv&cityid=101270101", parameMap); System.out.println(result); }catch (Exception e){ e.printStackTrace(); } } }