From 46203ee88249d9a4046f3d453deb41edc562cf6c Mon Sep 17 00:00:00 2001 From: jiazx0107@163.com <jiazx0107@163.com> Date: 星期二, 12 十二月 2023 12:36:53 +0800 Subject: [PATCH] 提交网关心跳和设备状态 --- src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java | 365 ++++++--------------------------------------------- 1 files changed, 44 insertions(+), 321 deletions(-) diff --git a/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java b/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java index d571fc3..4f68178 100644 --- a/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java +++ b/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java @@ -1,42 +1,23 @@ package com.fzzy.gateway.service; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson2.JSONObject; import com.bstek.dorado.annotation.DataProvider; import com.bstek.dorado.annotation.DataResolver; import com.bstek.dorado.annotation.Expose; -import com.fzzy.api.data.GatewayDeviceType; +import com.fzzy.api.Constant; +import com.fzzy.api.data.ApiCommonDevice; import com.fzzy.api.utils.ContextUtil; -import com.fzzy.api.utils.DateUtil; -import com.fzzy.async.fzzy40.Fzzy40CommonService; -import com.fzzy.async.fzzy40.entity.Fz40Grain; import com.fzzy.gateway.GatewayUtils; -import com.fzzy.gateway.api.DeviceReportService; -import com.fzzy.gateway.api.GatewayRemoteManager; -import com.fzzy.gateway.data.BaseResp; import com.fzzy.gateway.entity.GatewayDevice; -import com.fzzy.gateway.hx2023.ScConstant; -import com.fzzy.gateway.hx2023.data.*; import com.fzzy.gateway.service.repository.GatewayDeviceRep; - -import com.fzzy.mqtt.MqttProviderConfig; -import com.fzzy.mqtt.MqttPublishService; import lombok.extern.slf4j.Slf4j; - -import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.time.DateFormatUtils; import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Component; import javax.annotation.Resource; - import java.util.ArrayList; import java.util.Date; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; @Slf4j @Component @@ -44,14 +25,6 @@ @Resource private GatewayDeviceRep gatewayDeviceRep; - @Resource - private Fzzy40CommonService fzzy40CommonService; - @Resource - private GatewayRemoteManager gatewayRemoteManager; - @Resource - private MqttPublishService mqttPublishService; - @Resource - private MqttProviderConfig providerClient; /** * gatewayDeviceService#listAll @@ -61,7 +34,27 @@ @DataProvider public List<GatewayDevice> listAll() { Sort sort = new Sort(Sort.Direction.ASC, "deviceId"); - return gatewayDeviceRep.findAll(sort); + + + List<GatewayDevice> list = gatewayDeviceRep.findAll(sort); + + if (null == list || list.isEmpty()) return list; + + List<GatewayDevice> result = new ArrayList<>(); + + GatewayDevice cacheDevice; + for (GatewayDevice device : list) { + device.setStatus(Constant.YN_Y); + cacheDevice = GatewayUtils.getCacheByDeviceId(device.getDeviceId()); + if (null != cacheDevice) { + device.setIp(cacheDevice.getIp()); + device.setPort(cacheDevice.getPort()); + device.setStatus(cacheDevice.getStatus()); + device.setOnlineTime(cacheDevice.getOnlineTime()); + } + result.add(device); + } + return result; } /** @@ -108,7 +101,6 @@ return null; } - public void flushCache() { List<GatewayDevice> list = listAll(); if (null == list || list.isEmpty()) return; @@ -118,311 +110,42 @@ } - /** - * gatewayDeviceService#ajaxTestWeight - * 鍦扮鎺ㄩ�佹祴璇� - * - * @param parameter - * @return - */ @Expose - public String ajaxTestWeight(GateWayTestParam parameter) { - double weigh = (double) parameter.getWeight(); - //double weigh = Double.parseDouble("3500.0"); - List<GatewayDevice> devices = listAll(); - if (devices == null || devices.size() <= 0) { - return "娌℃湁璁惧"; - } - List<GatewayDevice> weights = devices.stream().filter(s -> (GatewayDeviceType.TYPE_01.getCode().equals(s.getType()))).collect(Collectors.toList()); - if (weights == null || weights.size() <= 0) { - return "娌℃湁鑾峰彇鍒板湴纾呰澶�"; - } - String topic = "/device/hx-weigh-big-01/91511424746940066Y001_91511424746940066Y0010000_002_004_002_001/message/property/report"; - - for (GatewayDevice device : weights) { - - WebSocketPacket packet = new WebSocketPacket(); - - //productId鐨勫�煎湪webSocket鎵ц鍙戦�佹柟娉曚腑琛ュ厖 - WebSocketPacketHeader header = new WebSocketPacketHeader(); - header.setDeviceName(device.getDeviceName()); - header.setProductId("hx-weigh-big-01"); - //header.set - packet.setHeaders(header); - packet.setMessageType(ScConstant.MESSAGE_TYPE_REPORT_PROPERTY); - packet.setDeviceId(device.getDeviceId()); - - //璁剧疆淇℃伅涓讳綋 - WeightInfo weightInfo = new WeightInfo(); - weightInfo.setGrossWeight(weigh); - weightInfo.setNetWeight(weigh); - weightInfo.setNetWeight(weigh); - weightInfo.setWeightUnit("KG"); - JSONObject jsonObject = new JSONObject(); - jsonObject.put("weightInfo", JSONObject.toJSONString(weightInfo)); - - packet.setProperties(jsonObject); - - packet.setTimestamp(System.currentTimeMillis()); - - topic = "/device/" + header.getProductId() + "/" + device.getDeviceId() + "/message/property/report"; - mqttPublishService.publishMsg(topic, JSON.toJSONString(packet)); - } + public String test() { + log.info("-----------test-------------------"); return "SUCCESS"; } /** - * gatewayDeviceService#ajaxTestLpr - * 鍦扮鎺ㄩ�佹祴璇� + * 鏍规嵁瀹為檯閫氳鍒嗘満璁剧疆锛屽綋鍓嶅垎鏈哄湪绾� * - * @return + * @param commonDevice 瀹為檯閫氳璁惧 */ - @Expose - public String ajaxTestLpr() { - //String carNumber = parameter.getCarNumber(); - String carNumber = "宸滱12345"; - List<GatewayDevice> devices = listAll(); - if (devices == null || devices.size() <= 0) { - return "娌℃湁璁惧"; - } - List<GatewayDevice> weights = devices.stream().filter(s -> (GatewayDeviceType.TYPE_02.getCode().equals(s.getType()))).collect(Collectors.toList()); - if (weights == null || weights.size() <= 0) { - return "娌℃湁鑾峰彇鍒拌澶�"; - } - String topic = "/device/hx-weigh-big-01/91511424746940066Y001_91511424746940066Y0010000_002_004_002_001/message/property/report"; + public void onlineByCommonDevice(ApiCommonDevice commonDevice) { + List<GatewayDevice> list = GatewayUtils.getCacheByDeviceSn2(commonDevice.getSn()); + if (null == list || list.isEmpty()) return; - for (GatewayDevice device : weights) { - - WebSocketPacket packet = new WebSocketPacket(); - - //productId鐨勫�煎湪webSocket鎵ц鍙戦�佹柟娉曚腑琛ュ厖 - WebSocketPacketHeader header = new WebSocketPacketHeader(); - header.setDeviceName(device.getDeviceName()); - header.setProductId("hx-catch-01"); - //header.set - packet.setHeaders(header); - packet.setMessageType(ScConstant.MESSAGE_TYPE_REPORT_PROPERTY); - packet.setDeviceId(device.getDeviceId()); - - //璁剧疆淇℃伅涓讳綋 - LprData lpr = new LprData(); - lpr.setDeviceId(device.getDeviceId()); - lpr.setCarNumber(carNumber); - JSONObject jsonObject = new JSONObject(); - jsonObject.put("carNumber", carNumber); - jsonObject.put("position", "big"); - packet.setProperties(jsonObject); - - packet.setTimestamp(System.currentTimeMillis()); - - topic = "/device/" + header.getProductId() + "/" + device.getDeviceId() + "/message/property/report"; - mqttPublishService.publishMsg(topic, JSON.toJSONString(packet)); - } - return "SUCCESS"; - } - - /** - * gatewayDeviceService#ajaxTestGrain - * 绮儏鎺ㄩ�佹祴璇� - * - * @param parameter - * @return - */ - @Expose - public String ajaxTestGrain(GateWayTestParam parameter) { - - //鑾峰彇璁惧閰嶇疆锛屽彧閽堝绮儏璁惧杩涜鎵ц - - List<GatewayDevice> list = this.listAll(); - - if (null == list || list.isEmpty()) { - return "ERROR锛氫负鑾峰彇鍒扮郴缁熶腑璁惧閰嶇疆锛屽彇娑堟墽琛�"; - } - - Date dayTime = (Date) parameter.getDayTime(); - if (null == dayTime) dayTime = new Date(); - - Date start = DateUtil.getCurZero(dayTime); - Date end = DateUtil.getNextZero(dayTime); - - - //濡傛灉閮ㄧ讲FZZY-IGDS-V40鐗堟湰绯荤粺 - return this.pushByV40(list, start, end); - - } - - - - - private String pushByV40(List<GatewayDevice> list, Date start, Date end) { - - String depotIdSys; - List<Fz40Grain> listGrain; - - Fz40Grain lastData; - - KafaGrainData pushData; - - DeviceReportService deviceReportService = null; for (GatewayDevice device : list) { - depotIdSys = device.getDepotIdSys(); + device.setIp(commonDevice.getIp()); + device.setPort(commonDevice.getPort()); + device.setOnlineTime(new Date()); + device.setStatus(Constant.YN_Y); - if (StringUtils.isEmpty(depotIdSys)) { - log.info("--------璁惧--{}-鏈厤缃郴缁熺浉鍏充粨搴撶紪鐮侊紝鏃犳硶鎵ц褰撳墠鎿嶄綔", device.getDeviceName()); - continue; - } - - listGrain = fzzy40CommonService.listGrain(depotIdSys, start, end); - - if (null == listGrain || listGrain.isEmpty()) { - log.info("---------璁惧---{}--鏈悓姝ュ埌绮儏淇℃伅锛岃纭褰撳墠鏉′欢涓嬫槸鍚︽湁鏁版嵁", device.getDeviceName()); - continue; - } - - - //鑾峰彇鏈�鍚庝竴鏉$伯鎯呬綔涓哄綋鍓嶆暟鎹� - lastData = listGrain.get(listGrain.size() - 1); - - pushData = this.lastData2PushData(lastData, device); - - - if (null == deviceReportService) { - deviceReportService = gatewayRemoteManager.getDeviceReportService(device.getProvinceProtocol()); - } - - - deviceReportService.pushGrainData2Cloud(pushData); - + GatewayUtils.add2Cache(device); } - - return "SUCCESS"; } - /** - * 灏嗙伯鎯呮暟鎹浆鎹负鎺ㄩ�侀渶瑕佺殑鏁版嵁鏍煎紡 - * - * @param lastData - * @return - */ - private KafaGrainData lastData2PushData(Fz40Grain lastData, GatewayDevice device) { - KafaGrainData result = new KafaGrainData(); + public void OfflineByCommonDevice(ApiCommonDevice commonDevice) { + List<GatewayDevice> list = GatewayUtils.getCacheByDeviceSn2(commonDevice.getSn()); + if (null == list || list.isEmpty()) return; - result.setMessageId(ScConstant.getMessageId()); - result.setMessgeId(result.getMessageId()); - result.setDeviceID(device.getDeviceId()); - result.setAvgTemperature(lastData.getTempAve() + ""); - result.setMinTemperature(lastData.getTempMin() + ""); - result.setMaxTemperature(lastData.getTempMax() + ""); - result.setCollectTime(DateFormatUtils.format(lastData.getReceiveDate(), "yyyy-MM-dd HH:mm:ss")); + for (GatewayDevice device : list) { + device.setIp(commonDevice.getIp()); + device.setPort(commonDevice.getPort()); + //device.setOnlineTime(new Date()); + device.setStatus(Constant.YN_N); - //灞�-琛�-鍒� - String[] attrCable = lastData.getCable().split("-"); - - - if (StringUtils.isNotEmpty(lastData.getCableCir())) { - return lastData2PushData2(lastData, device); + GatewayUtils.add2Cache(device); } - - //灞傝鍒� - int cableZ = Integer.valueOf(attrCable[0]); - int cableY = Integer.valueOf(attrCable[1]); - int cableX = Integer.valueOf(attrCable[2]); - - //娓╁害闆嗗悎 - String[] attr = lastData.getPoints().split(","); - - //鏍瑰彿 - int cableNum = 1, position = 0; - - String curTemp; - List<KafkaGrainDataDetail1> temperature = new ArrayList<>(); - - int x = 0, y = 0, z = 0; - for (int i = 0; i < attr.length; i++) { - - position = i; - - z = i % cableZ + 1; - x = i / (cableZ * cableY); - y = x * (cableZ * cableY); - y = (i - y) / cableZ; - - // 鍊掕浆X杞� - x = cableX - 1 - x; - - //鏍瑰彿 - cableNum = (i / cableZ) + 1; - - curTemp = attr[i]; - - - //鍒ゆ柇鏈�澶� - if (curTemp.equals(result.getMaxTemperature())) { - result.setMaxX(x + ""); - result.setMaxY(y + ""); - result.setMaxZ(position + ""); - } - - - //鍒ゆ柇鏈�灏� - if (curTemp.equals(result.getMinTemperature())) { - result.setMinX(x + ""); - result.setMinY(y + ""); - result.setMinZ(position + ""); - } - - temperature.add(new KafkaGrainDataDetail1(cableNum + "", z + "", curTemp, position + "", x + "", y + "")); - } - - //绮俯淇℃伅 - - JSONObject trhInfo = new JSONObject(); - // TRHInfo trhInfo = new TRHInfo(); - trhInfo.put("temperature", temperature); - - - //浠撴俯搴︿俊鎭� - KafkaGrainTH grainTH = new KafkaGrainTH(); - grainTH.setHumidity(lastData.getHumidityIn() + ""); - grainTH.setTemperature(lastData.getTempIn() + ""); - grainTH.setAirHumidity(lastData.getHumidityOut() + ""); - grainTH.setAirTemperature(lastData.getTempOut() + ""); - - List<KafkaGrainTH> temperatureAndhumidity = new ArrayList<>(); - temperatureAndhumidity.add(grainTH); - - trhInfo.put("temperatureAndhumidity", temperatureAndhumidity); - //trhInfo.put("temperatureAndhumidity",grainTH); - - JSONObject params = new JSONObject(); - params.put("TRHInfo", trhInfo); - - result.setParams(params); - - return result; } - - /** - * 閽堝绛掍粨 TODO ----- - * - * @param lastData - * @param device - * @return - */ - private KafaGrainData lastData2PushData2(Fz40Grain lastData, GatewayDevice device) { - - return null; - } - - private int getCurCir(int curRoot, String[] cableRuleAtt) { - - int sum = 0; - for (int i = 0; i < cableRuleAtt.length; i++) { - sum += Integer.valueOf(cableRuleAtt[i]); - if (curRoot <= sum) return i + 1; - } - - return 1; - } - } -- Gitblit v1.9.3