From fbcbe6c975554786683c38798ce8527d27993543 Mon Sep 17 00:00:00 2001 From: jiazx0107@163.com <jiazx0107@163.com> Date: 星期六, 20 一月 2024 17:49:59 +0800 Subject: [PATCH] 测试调整筒仓的逻辑 --- src/main/java/com/fzzy/gateway/hx2023/data/GrainData.java | 3 src/main/java/com/fzzy/gateway/service/GatewayDeviceTestPR.java | 2 src/main/java/com/fzzy/protocol/bhzn/analysis/AnalysisService.java | 34 + src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java | 7 src/main/java/com/fzzy/api/data/DepotType.java | 49 +++ src/main/java/com/fzzy/gateway/GatewayUtils.java | 12 src/main/java/com/fzzy/gateway/view/GatewayDevice.view.xml | 14 + src/main/java/com/fzzy/gateway/hx2023/data/KafkaGrainDataDetail1.java | 14 src/main/java/com/fzzy/gateway/entity/GatewayDevice.java | 4 src/main/java/com/fzzy/gateway/hx2023/service/ScGatewayTestServiceImpl.java | 230 ++++++++------- src/main/java/com/fzzy/api/view/pr/ApiTriggerPR.java | 12 /dev/null | 0 src/main/java/com/fzzy/gateway/data/GrainCableData.java | 10 src/main/java/com/fzzy/gateway/hx2023/data/KafaGrainData.java | 2 src/main/java/com/fzzy/gateway/hx2023/data/WebSocketPacket.java | 2 src/main/java/com/fzzy/protocol/bhzn/v0/analysis/AnalysisService.java | 30 + src/main/java/com/fzzy/gateway/hx2023/service/DeviceReportServiceImpl.java | 369 ++++++++++++++++++------- 17 files changed, 554 insertions(+), 240 deletions(-) diff --git a/src/main/java/com/fzzy/api/data/DepotType.java b/src/main/java/com/fzzy/api/data/DepotType.java new file mode 100644 index 0000000..91ad932 --- /dev/null +++ b/src/main/java/com/fzzy/api/data/DepotType.java @@ -0,0 +1,49 @@ +package com.fzzy.api.data; + +import com.fzzy.api.entity.ApiTrigger; + +import java.util.ArrayList; +import java.util.List; + +/** + * 浠撳簱绫诲瀷锛岄拡瀵瑰綋鍓嶇郴缁熸墍鏀寔鐨勪粨鎴跨被鍨嬶紝闈炲浗鏍囩被鍨� + * + * @author jiazx + */ +public enum DepotType { + + TYPE_01("01", "骞虫埧浠�"), + TYPE_02("02", "娴呭渾浠�"), + TYPE_03("03", "鍌ㄦ补缃�"), + TYPE_04("04", "绔嬬瓛浠�"), + TYPE_99("99", "鍏朵粬"); + + private String code; + private String msg; + + DepotType(String code, String msg) { + this.code = code; + this.msg = msg; + } + + public String getCode() { + return code; + } + + public String getMsg() { + return msg; + } + + + public static List<ApiTrigger> list() { + List<ApiTrigger> result = new ArrayList<>(); + result.add(new ApiTrigger(TYPE_01.getCode(), TYPE_01.getMsg())); + result.add(new ApiTrigger(TYPE_02.getCode(), TYPE_02.getMsg())); + result.add(new ApiTrigger(TYPE_03.getCode(), TYPE_03.getMsg())); + result.add(new ApiTrigger(TYPE_04.getCode(), TYPE_04.getMsg())); + result.add(new ApiTrigger(TYPE_99.getCode(), TYPE_99.getMsg())); + return result; + } + + +} diff --git a/src/main/java/com/fzzy/api/view/pr/ApiTriggerPR.java b/src/main/java/com/fzzy/api/view/pr/ApiTriggerPR.java index 912a13b..48fe4fd 100644 --- a/src/main/java/com/fzzy/api/view/pr/ApiTriggerPR.java +++ b/src/main/java/com/fzzy/api/view/pr/ApiTriggerPR.java @@ -3,6 +3,7 @@ import com.bstek.dorado.annotation.DataProvider; import com.bstek.dorado.annotation.Expose; import com.fzzy.api.Constant; +import com.fzzy.api.data.DepotType; import com.fzzy.api.entity.ApiTrigger; import com.fzzy.api.utils.ContextUtil; import com.fzzy.api.view.repository.ApiTriggerRep; @@ -12,6 +13,7 @@ import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; +import java.util.ArrayList; import java.util.List; /** @@ -89,4 +91,14 @@ return null; } + + /** + * 浠撳簱绫诲瀷 + * ${dorado.getDataProvider("apiTriggerPR#listDepotType").getResult()} + */ + @DataProvider + public List<ApiTrigger> listDepotType() { + return DepotType.list(); + } + } diff --git a/src/main/java/com/fzzy/gateway/GatewayUtils.java b/src/main/java/com/fzzy/gateway/GatewayUtils.java index a0aa2d3..00fc7f8 100644 --- a/src/main/java/com/fzzy/gateway/GatewayUtils.java +++ b/src/main/java/com/fzzy/gateway/GatewayUtils.java @@ -2,6 +2,7 @@ import com.fzzy.api.Constant; import com.fzzy.api.data.ApiCommonDevice; +import com.fzzy.api.data.DepotType; import com.fzzy.api.data.GatewayDeviceType; import com.fzzy.gateway.data.GrainCableData; import com.fzzy.gateway.entity.GatewayDevice; @@ -147,10 +148,13 @@ String cableCir = gatewayDevice.getCableCir(); GrainCableData result = new GrainCableData(); + result.setCableRule(cableRule); + result.setCableCir(cableCir); int cableY, cableX; String[] attCable = cableRule.split("-"); int cableZ = Integer.valueOf(attCable[0]); + if (StringUtils.isEmpty(cableCir)) { cableY = Integer.valueOf(attCable[1]); cableX = Integer.valueOf(attCable[2]); @@ -159,12 +163,10 @@ cableZ = Integer.valueOf(attCir[0]); cableY = 1; cableX = 0; - //閽堝澶氬湀璁$畻 + //閽堝澶氬湀璁$畻鎬昏繃澶氬皯鏍圭數缂� for (int i = 0; i < cableCir.length(); i++) { - cableX += Integer.valueOf(attCir[i]); + cableX += Integer.valueOf(attCable[i]); } - - result.setCir(true); } result.setCableY(cableY); @@ -172,6 +174,8 @@ result.setCableX(cableX); result.setSumNum(cableZ * cableY * cableX); + result.setTotalCircle(attCable.length); + return result; } } diff --git a/src/main/java/com/fzzy/gateway/data/GrainCableData.java b/src/main/java/com/fzzy/gateway/data/GrainCableData.java index 59167fe..8ea627e 100644 --- a/src/main/java/com/fzzy/gateway/data/GrainCableData.java +++ b/src/main/java/com/fzzy/gateway/data/GrainCableData.java @@ -14,6 +14,14 @@ private int sumNum; - private boolean isCir = false; + //绀轰緥锛歿\"totalCircle\":3,\"smallCircle\":\"4,10,16\"}锛宼otalCircle锛氭�诲湀鏁帮紝smallCircle锛氭瘡鍦堟湁鍑犳牴缂� + private int totalCircle; + + ////绀轰緥锛歿\"totalCircle\":3,\"smallCircle\":\"4,10,16\"}锛宼otalCircle锛氭�诲湀鏁帮紝smallCircle锛氭瘡鍦堟湁鍑犳牴缂� + private String smallCircle; + + private String cableRule; + + private String cableCir; } diff --git a/src/main/java/com/fzzy/gateway/entity/GatewayDevice.java b/src/main/java/com/fzzy/gateway/entity/GatewayDevice.java index d2dd7be..f65eead 100644 --- a/src/main/java/com/fzzy/gateway/entity/GatewayDevice.java +++ b/src/main/java/com/fzzy/gateway/entity/GatewayDevice.java @@ -59,6 +59,10 @@ @PropertyDef(label = "搴撳尯绯荤粺浠撳簱缂栫爜") private String depotIdSys; + @Column(name = "DEPOT_TYPE_", length = 10) + @PropertyDef(label = "浠撳簱绫诲瀷", description = "骞虫埧浠�") + private String depotType; + @Column(name = "IP_", length = 20) @PropertyDef(label = "閫氳IP") private String ip; diff --git a/src/main/java/com/fzzy/gateway/hx2023/data/GrainData.java b/src/main/java/com/fzzy/gateway/hx2023/data/GrainData.java index bbc6cf4..8fc8ad1 100644 --- a/src/main/java/com/fzzy/gateway/hx2023/data/GrainData.java +++ b/src/main/java/com/fzzy/gateway/hx2023/data/GrainData.java @@ -1,5 +1,6 @@ package com.fzzy.gateway.hx2023.data; +import com.alibaba.fastjson.JSONObject; import lombok.Data; @@ -25,6 +26,6 @@ private String weatherStation; - private String properties; + private JSONObject properties; } diff --git a/src/main/java/com/fzzy/gateway/hx2023/data/KafaGrainData.java b/src/main/java/com/fzzy/gateway/hx2023/data/KafaGrainData.java index 422b608..a6a849a 100644 --- a/src/main/java/com/fzzy/gateway/hx2023/data/KafaGrainData.java +++ b/src/main/java/com/fzzy/gateway/hx2023/data/KafaGrainData.java @@ -1,6 +1,6 @@ package com.fzzy.gateway.hx2023.data; -import com.alibaba.fastjson2.JSONObject; +import com.alibaba.fastjson.JSONObject; import lombok.Data; diff --git a/src/main/java/com/fzzy/gateway/hx2023/data/KafkaGrainDataDetail1.java b/src/main/java/com/fzzy/gateway/hx2023/data/KafkaGrainDataDetail1.java index ee8dd3d..0fc7c81 100644 --- a/src/main/java/com/fzzy/gateway/hx2023/data/KafkaGrainDataDetail1.java +++ b/src/main/java/com/fzzy/gateway/hx2023/data/KafkaGrainDataDetail1.java @@ -27,8 +27,7 @@ private String rowy; //娴呭渾浠撱�佺瓛浠撳繀濉紝绀轰緥锛歿\"totalCircle\":3,\"smallCircle\":\"4,10,16\"}锛宼otalCircle锛氭�诲湀鏁帮紝smallCircle锛氭瘡鍦堟湁鍑犳牴缂� - private String total_circle; - + private String totalCircle; //鍏蜂綋鍦堟暟--娴呭渾浠撱�佺瓛浠撳繀濉� private String circle; @@ -44,4 +43,15 @@ this.linex = linex; this.rowy = rowy; } + + public KafkaGrainDataDetail1(String cableNum, String layerNumber, String temperature, String position, String linex, String rowy, String circle, String totalCircle) { + this.cableNum = cableNum; + this.layerNumber = layerNumber; + this.temperature = temperature; + this.position = position; + this.linex = linex; + this.rowy = rowy; + this.circle = circle; + this.totalCircle = totalCircle; + } } diff --git a/src/main/java/com/fzzy/gateway/hx2023/data/WebSocketPacket.java b/src/main/java/com/fzzy/gateway/hx2023/data/WebSocketPacket.java index 2a04034..460b42a 100644 --- a/src/main/java/com/fzzy/gateway/hx2023/data/WebSocketPacket.java +++ b/src/main/java/com/fzzy/gateway/hx2023/data/WebSocketPacket.java @@ -1,6 +1,6 @@ package com.fzzy.gateway.hx2023.data; -import com.alibaba.fastjson2.JSONObject; +import com.alibaba.fastjson.JSONObject; import lombok.Data; @Data diff --git a/src/main/java/com/fzzy/gateway/hx2023/service/DeviceReportServiceImpl.java b/src/main/java/com/fzzy/gateway/hx2023/service/DeviceReportServiceImpl.java index e7af6a7..c163ba9 100644 --- a/src/main/java/com/fzzy/gateway/hx2023/service/DeviceReportServiceImpl.java +++ b/src/main/java/com/fzzy/gateway/hx2023/service/DeviceReportServiceImpl.java @@ -1,8 +1,8 @@ package com.fzzy.gateway.hx2023.service; -import com.alibaba.fastjson2.JSONObject; +import com.alibaba.fastjson.JSONObject; +import com.fzzy.api.data.DepotType; import com.fzzy.api.data.PushProtocol; -import com.fzzy.api.utils.NumberUtil; import com.fzzy.async.fzzy40.entity.Fz40Grain; import com.fzzy.data.ConfigData; import com.fzzy.gateway.GatewayUtils; @@ -15,7 +15,6 @@ import com.fzzy.gateway.hx2023.data.*; import com.fzzy.gateway.hx2023.kafka.KafkaDeviceReportService; import com.fzzy.mqtt.MqttGatewayService; -import jdk.nashorn.internal.runtime.regexp.joni.Config; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.time.DateFormatUtils; @@ -92,7 +91,7 @@ weightInfo.setNetWeight(reqData.getWeight()); weightInfo.setWeightUnit("KG"); JSONObject jsonObject = new JSONObject(); - jsonObject.put("weightInfo", JSONObject.toJSONString(weightInfo)); + jsonObject.put("weightInfo", weightInfo); packet.setProperties(jsonObject); @@ -170,6 +169,21 @@ BaseResp resp = new BaseResp(); + GrainCableData cableData = GatewayUtils.getCableData(device); + + if (null == device.getDepotType()) device.setDepotType(DepotType.TYPE_01.getCode()); + + //琛ㄧず绛掍粨 + if (DepotType.TYPE_02.getCode().equals(device.getDepotType()) || DepotType.TYPE_04.getCode().equals(device.getDepotType())) { + return grainData2GatewayApiInfo2(grainData, device, cableData); + } + + //琛ㄧず涓虹瓛浠撳寘鎷补缃愪粨 + if (DepotType.TYPE_03.getCode().equals(device.getDepotType())) { + return grainData2GatewayApiInfo3(grainData, device, cableData); + } + + KafaGrainData result = new KafaGrainData(); result.setMessageId(ScConstant.getMessageId()); @@ -179,13 +193,6 @@ result.setMinTemperature(grainData.getTempMin() + ""); result.setMaxTemperature(grainData.getTempMax() + ""); result.setCollectTime(DateFormatUtils.format(grainData.getReceiveDate(), "yyyy-MM-dd HH:mm:ss")); - - - GrainCableData cableData = GatewayUtils.getCableData(device); - - if(cableData.isCir()){ - return grainData2GatewayApiInfo2(grainData, device,cableData); - } //灞傝鍒� int cableZ = cableData.getCableZ(); @@ -254,7 +261,7 @@ temperatureAndhumidity.add(grainTH); trhInfo.put("temperatureAndhumidity", temperatureAndhumidity); - //trhInfo.put("temperatureAndhumidity",grainTH); + JSONObject params = new JSONObject(); params.put("TRHInfo", trhInfo); @@ -262,113 +269,265 @@ result.setParams(params); - //resp.setObj(result); - resp.setData(JSONObject.toJSONString(result)); return resp; } - private BaseResp grainData2GatewayApiInfo2(Fz40Grain grainData, GatewayDevice device,GrainCableData cableData) { + /** + * 绛掍粨 + * + * @param grainData + * @param device + * @param cableData + * @return + */ + private BaseResp grainData2GatewayApiInfo2(Fz40Grain grainData, GatewayDevice device, GrainCableData cableData) { BaseResp resp = new BaseResp(); -// int cableZ = cableData.getCableZ(); -// int cableY = cableData.getCableY(); -// int cableX = cableData.getCableX(); -// -// int sumNum = cableData.getSumNum(); -// -// //鏁版嵁灏佽 -// GrainData grain = new GrainData(); -// grain.setMessageId(ScConstant.getMessageId()); -// grain.setDeviceId(device.getDeviceId()); -// grain.setTimestamp(System.currentTimeMillis() + ""); -// -// ClientHeaders headers = new ClientHeaders(); -// headers.setDeviceName(device.getDeviceName()); -// headers.setProductId(device.getProductId()); -// headers.setOrgId(device.getOrgId()); -// headers.setMsgId(ScConstant.getMessageId()); -// grain.setHeaders(headers); -// -// -// GrainOutPut outPut = new GrainOutPut(); -// -// -// double max = com.fzzy.protocol.bhzn.v0.cmd.ReMessageBuilder.MAX_TEMP, min = com.fzzy.protocol.bhzn.v0.cmd.ReMessageBuilder.MIN_TEMP, sumT = 0.0; -// -// List<GrainTemp> temperature = new ArrayList<>(); -// //鏍瑰彿 -// int cableNum = 1, position = 0; -// -// double curTemp; -// int x = 0, y = 0, z = 0; -// for (int i = 0; i < sumNum; i++) { -// curTemp = temps.get(i); -// position = i; -// -// z = i % cableZ + 1; -// x = i / (cableZ * cableY); -// y = x * (cableZ * cableY); -// y = (i - y) / cableZ; -// //鏍瑰彿 -// cableNum = (i / cableZ) + 1; -// -// temperature.add(new GrainTemp(cableNum + "", z + "", curTemp + "", position + "")); -// -// //姹傛渶澶ф渶灏忓�� -// if (curTemp < -900) { -// sumNum--; -// } else { -// sumT += curTemp; -// if (curTemp > max) { -// max = curTemp; -// } -// if (curTemp < min) { -// min = curTemp; -// } -// } -// } -// -// if (sumNum == 0) { -// sumNum = 1; -// log.warn("---褰撳墠绮儏閲囬泦寮傚父--"); -// } -// //杩囨护姣旇緝鐢ㄧ殑鏈�澶ф渶灏忓�� -// if (max == com.fzzy.protocol.bhzn.v0.cmd.ReMessageBuilder.MAX_TEMP) { -// max = 0.0; -// } -// if (min == com.fzzy.protocol.bhzn.v0.cmd.ReMessageBuilder.MIN_TEMP) { -// min = 0.0; -// } -// -// outPut.setTemperature(temperature); -// outPut.setAvgTemperature(NumberUtil.keepPrecision((sumT / sumNum), 1) + ""); -// outPut.setMinTemperature(min + ""); -// outPut.setMaxTemperature(min + ""); -// -// -// com.alibaba.fastjson.JSONObject properties = new com.alibaba.fastjson.JSONObject(); -// properties.put("data", com.alibaba.fastjson.JSONObject.toJSONString(outPut)); -// properties.put("timestamp", grain.getTimestamp()); -// -// String height = this.getCacheHeight(device); -// if (org.apache.commons.lang3.StringUtils.isEmpty(height)) height = "0.0"; -// properties.put("liquidHeight", height); -// -// grain.setProperties(properties.toJSONString()); -// -// //灏佽濂界殑鏁版嵁 -// log.info("---娴呭渾浠撳皝瑁呭畬鎴�----寮�濮嬫墽琛屾帹閫�"); + KafaGrainData result = new KafaGrainData(); + + result.setMessageId(ScConstant.getMessageId()); + result.setMessgeId(result.getMessageId()); + result.setDeviceID(device.getDeviceId()); + result.setAvgTemperature(grainData.getTempAve() + ""); + result.setMinTemperature(grainData.getTempMin() + ""); + result.setMaxTemperature(grainData.getTempMax() + ""); + result.setCollectTime(DateFormatUtils.format(grainData.getReceiveDate(), "yyyy-MM-dd HH:mm:ss")); + + //灞傝鍒� + int cableZ = cableData.getCableZ(); + + //娓╁害闆嗗悎 + String[] attr = grainData.getPoints().split(","); + + //鏍瑰彿 + int cableNum = 1, position = 0; + String curTemp; + List<KafkaGrainDataDetail1> temperature = new ArrayList<>(); + JSONObject totalCircle = new JSONObject(); + totalCircle.put("totalCircle", cableData.getTotalCircle() + ""); + totalCircle.put("smallCircle", cableData.getSmallCircle()); + String totalCircleStr = totalCircle.toJSONString(); + int x = 0, y = 0, z = 0, circle = 1; + for (int i = 0; i < attr.length; i++) { + position = i; + z = i % cableZ + 1; + //鏍瑰彿 + cableNum = (i / cableZ) + 1; + curTemp = attr[i]; + + circle = this.getCirCle(position, cableNum, cableData); + + y = 1; + //濡傛灉鏄紓甯稿��,鎵ц璋冩暣鏁版嵁 TODO + if (Double.valueOf(curTemp) < -99.9) { - resp.setCode(BaseResp.CODE_500); - resp.setMsg("绛掍粨瑙f瀽鏆傛湭瀹炵幇"); + curTemp = grainData.getTempAve() + ""; + + } else { + //鍒ゆ柇鏈�澶� + if (curTemp.equals(result.getMaxTemperature())) { + result.setMaxX(cableNum + ""); + result.setMaxY(y + ""); + result.setMaxZ(position + ""); + } + //鍒ゆ柇鏈�灏� + if (curTemp.equals(result.getMinTemperature())) { + result.setMinX(cableNum + ""); + result.setMinY(y + ""); + result.setMinZ(position + ""); + } + } + + temperature.add(new KafkaGrainDataDetail1(cableNum + "", z + "", curTemp, position + "", null, null, circle + "", totalCircleStr)); + } + + //绮俯淇℃伅 + JSONObject trhInfo = new JSONObject(); + trhInfo.put("temperature", temperature); + + + //浠撴俯搴︿俊鎭� + KafkaGrainTH grainTH = new KafkaGrainTH(); + grainTH.setHumidity(grainData.getHumidityIn() + ""); + grainTH.setTemperature(grainData.getTempIn() + ""); + grainTH.setAirHumidity(grainData.getHumidityOut() + ""); + grainTH.setAirTemperature(grainData.getTempOut() + ""); + + List<KafkaGrainTH> temperatureAndhumidity = new ArrayList<>(); + temperatureAndhumidity.add(grainTH); + + trhInfo.put("temperatureAndhumidity", temperatureAndhumidity); + + JSONObject params = new JSONObject(); + params.put("TRHInfo", trhInfo); + + result.setParams(params); + + + resp.setData(JSONObject.toJSONString(result)); + return resp; + } + + /** + * 鑾峰彇褰撶偣鎵�鍦ㄥ湀 + * + * @param cableNum + * @param cableData + * @return + */ + private int getCirCle(int position, int cableNum, GrainCableData cableData) { + + int num1 = 1, num2 = 2; + String[] attCable = cableData.getCableRule().split("-"); + + if (cableData.getTotalCircle() == 1) return 1; + + if (cableData.getTotalCircle() == 2) { + num1 = Integer.valueOf(attCable[0]); + + if (cableNum <= num1) return 1; + + return 2; + } + + if (cableData.getTotalCircle() == 3) { + num1 = Integer.valueOf(attCable[0]); + num2 = num1 + Integer.valueOf(attCable[1]); + if (cableNum <= num1) return 1; + + if (cableNum <= num2) return 2; + + return 3; + } + + if (cableData.getTotalCircle() == 4) { + num1 = Integer.valueOf(attCable[0]); + num2 = num1 + Integer.valueOf(attCable[1]); + if (cableNum <= num1) return 1; + + if (cableNum <= num2) return 2; + + num2 = num1 + Integer.valueOf(attCable[1]) + Integer.valueOf(attCable[2]); + + if (cableNum <= num2) return 3; + + return 4; + } + + return 1; + } + + + /** + * 娌圭綈浠撶殑澶勭悊 + * <p> + * 2024骞�1鏈�20鏃� 鏆傛椂鐢ㄧ殑骞虫埧浠撴姤鏂� + * + * @param grainData + * @param device + * @param cableData + * @return + */ + private BaseResp grainData2GatewayApiInfo3(Fz40Grain grainData, GatewayDevice device, GrainCableData cableData) { + + BaseResp resp = new BaseResp(); + + + KafaGrainData result = new KafaGrainData(); + + result.setMessageId(ScConstant.getMessageId()); + result.setMessgeId(result.getMessageId()); + result.setDeviceID(device.getDeviceId()); + result.setAvgTemperature(grainData.getTempAve() + ""); + result.setMinTemperature(grainData.getTempMin() + ""); + result.setMaxTemperature(grainData.getTempMax() + ""); + result.setCollectTime(DateFormatUtils.format(grainData.getReceiveDate(), "yyyy-MM-dd HH:mm:ss")); + + //灞傝鍒� + int cableZ = cableData.getCableZ(); + int cableY = cableData.getCableY(); + int cableX = cableData.getCableX(); + + //娓╁害闆嗗悎 + String[] attr = grainData.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]; + + + //濡傛灉鏄紓甯稿��,鎵ц璋冩暣鏁版嵁 TODO + if (Double.valueOf(curTemp) < -99.9) { + + curTemp = grainData.getTempAve() + ""; + + } else { + //鍒ゆ柇鏈�澶� + 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(grainData.getHumidityIn() + ""); + grainTH.setTemperature(grainData.getTempIn() + ""); + grainTH.setAirHumidity(grainData.getHumidityOut() + ""); + grainTH.setAirTemperature(grainData.getTempOut() + ""); + + List<KafkaGrainTH> temperatureAndhumidity = new ArrayList<>(); + temperatureAndhumidity.add(grainTH); + + trhInfo.put("temperatureAndhumidity", temperatureAndhumidity); + + + JSONObject params = new JSONObject(); + params.put("TRHInfo", trhInfo); + + result.setParams(params); + + + resp.setData(JSONObject.toJSONString(result)); + return resp; } diff --git a/src/main/java/com/fzzy/gateway/hx2023/service/ScGatewayTestServiceImpl.java b/src/main/java/com/fzzy/gateway/hx2023/service/ScGatewayTestServiceImpl.java index fca810d..aeb01f0 100644 --- a/src/main/java/com/fzzy/gateway/hx2023/service/ScGatewayTestServiceImpl.java +++ b/src/main/java/com/fzzy/gateway/hx2023/service/ScGatewayTestServiceImpl.java @@ -1,23 +1,27 @@ package com.fzzy.gateway.hx2023.service; -import com.alibaba.fastjson2.JSONObject; +import com.alibaba.fastjson.JSONObject; +import com.fzzy.api.data.DepotType; import com.fzzy.api.data.GatewayDeviceType; import com.fzzy.api.data.PushProtocol; import com.fzzy.api.utils.DateUtil; import com.fzzy.api.utils.NumberUtil; +import com.fzzy.api.utils.RedisConst; +import com.fzzy.api.utils.RedisUtil; import com.fzzy.async.fzzy40.Fzzy40CommonService; import com.fzzy.async.fzzy40.entity.Fz40Grain; +import com.fzzy.data.ConfigData; import com.fzzy.gateway.GatewayUtils; import com.fzzy.gateway.api.GatewayDeviceTestService; import com.fzzy.gateway.data.BaseReqData; import com.fzzy.gateway.data.BaseResp; +import com.fzzy.gateway.data.GrainCableData; import com.fzzy.gateway.data.WeatherWebDto; import com.fzzy.gateway.entity.GatewayDevice; import com.fzzy.gateway.hx2023.ScConstant; import com.fzzy.gateway.hx2023.data.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.time.DateFormatUtils; import org.apache.commons.lang3.RandomUtils; import org.springframework.stereotype.Component; @@ -34,6 +38,11 @@ @Resource private DeviceReportServiceImpl deviceReportService; + @Resource + private ConfigData configData; + @Resource + private RedisUtil redisUtil; + @Override public String getProtocol() { return PushProtocol.GATEWAY_SC_2023.getCode(); @@ -44,14 +53,120 @@ GatewayDevice device = reqData.getDevice(); - if (StringUtils.isEmpty(device.getCableCir())) { + if (DepotType.TYPE_02.getCode().equals(device.getDepotType())) { + return getGrainTest2(reqData, device); + } else if (DepotType.TYPE_04.getCode().equals(device.getDepotType())) { + return getGrainTest2(reqData, device); + } else if (DepotType.TYPE_03.getCode().equals(device.getDepotType())) { + return getGrainTest3(reqData, device); + } else { return getGrainTest1(reqData, device); } + } + + private BaseResp getGrainTest2(BaseReqData reqData, GatewayDevice device) { BaseResp resp = new BaseResp(); resp.setCode(500); - resp.setMsg("娌℃湁鍖归厤鍒拌鍒�"); + resp.setMsg("绛掍粨娴嬭瘯鏆傛湭瀹炵幇"); return resp; + } + + private BaseResp getGrainTest3(BaseReqData reqData, GatewayDevice device) { + BaseResp resp = new BaseResp(); + + GrainCableData cableData = GatewayUtils.getCableData(device); + int cableZ = cableData.getCableZ(); + int cableY = cableData.getCableY(); + int sumNum = cableData.getSumNum(); + + + WeatherWebDto weather = WeatherWebDto.contextMap.get("default"); + double tMIn = 10, tMax = 15; + if (null != weather) { + double tOut = Double.valueOf(weather.getTem()); + tMIn = tOut - 5; + tMax = tOut; + } + if (tMIn < 10) tMIn = 10; + if (tMIn > 20) tMIn = 20; + if (tMax < 15) tMax = 15; + if (tMax > 25) tMax = 25; + + //鏁版嵁灏佽 + GrainData grain = new GrainData(); + grain.setMessageId(ScConstant.getMessageId()); + grain.setDeviceId(device.getDeviceId()); + grain.setTimestamp(System.currentTimeMillis() + ""); + grain.setMessageType("REPORT_PROPERTY"); + + ClientHeaders headers = new ClientHeaders(); + headers.setDeviceName(device.getDeviceName()); + headers.setProductId(device.getProductId()); + headers.setOrgId(device.getOrgId()); + headers.setMsgId(reqData.getMessageId()); + grain.setHeaders(headers); + + GrainOutPut outPut = new GrainOutPut(); + + List<GrainTemp> temperature = new ArrayList<>(); + //鏍瑰彿 + int cableNum = 1, position = 0; + + double curTemp = tMIn; + double randomNumber = tMIn; + int x = 0, y = 0, z = 0; + for (int i = 0; i < sumNum; i++) { + + randomNumber = Math.random() * (tMax - tMIn + 1) + tMIn; + curTemp = NumberUtil.keepPrecision(randomNumber, 1); + position = i; + + z = i % cableZ + 1; + x = i / (cableZ * cableY); + y = x * (cableZ * cableY); + y = (i - y) / cableZ; + + //鏍瑰彿 + cableNum = (i / cableZ) + 1; + + temperature.add(new GrainTemp(cableNum + "", z + "", curTemp + "", position + "")); + } + + outPut.setTemperature(temperature); + outPut.setAvgTemperature(NumberUtil.keepPrecision((tMax + tMIn) / 2, 1) + ""); + outPut.setMinTemperature(tMax + ""); + outPut.setMaxTemperature(tMIn + ""); + + + JSONObject properties = new JSONObject(); + properties.put("data", outPut); + properties.put("timestamp", grain.getTimestamp()); + + String height = this.getCacheHeight(device); + if (StringUtils.isEmpty(height)) height = "1.0"; + properties.put("liquidHeight", height); + + + grain.setProperties(properties); + + //灏佽濂界殑鏁版嵁 + log.info("---娌圭綈浠撲俊鎭皝瑁呭畬鎴�----寮�濮嬫墽琛屾帹閫�"); + + + return new BaseResp(JSONObject.toJSONString(grain)); + } + + /** + * 浠嶳EDIS涓幏鍙栨恫浣嶉珮搴︿俊鎭� + * + * @param device + * @return + */ + private String getCacheHeight(GatewayDevice device) { + //缁欏叾浠栬蒋浣跨敤 + String key = RedisConst.KEY_DEPOT_HEIGHT + ":" + configData.getCompanyId() + "_" + device.getDepotIdSys(); + return (String) redisUtil.get(key); } @Override @@ -81,110 +196,8 @@ //鑾峰彇绗竴鏉℃暟鎹墽琛屾帹閫� Fz40Grain lastData = listGrain.get(0); log.info(lastData.toString()); - return deviceReportService.grainData2GatewayApiInfo(lastData,device); + return deviceReportService.grainData2GatewayApiInfo(lastData, device); } - -// /** -// * 灏嗙伯鎯呮暟鎹浆鎹负鎺ㄩ�侀渶瑕佺殑鏁版嵁鏍煎紡 -// * -// * @param grainData -// * @return -// */ -// private KafaGrainData lastData2PushData(Fz40Grain grainData, GatewayDevice device) { -// KafaGrainData result = new KafaGrainData(); -// -// result.setMessageId(ScConstant.getMessageId()); -// result.setMessgeId(result.getMessageId()); -// result.setDeviceID(device.getDeviceId()); -// result.setAvgTemperature(grainData.getTempAve() + ""); -// result.setMinTemperature(grainData.getTempMin() + ""); -// result.setMaxTemperature(grainData.getTempMax() + ""); -// result.setCollectTime(DateFormatUtils.format(grainData.getReceiveDate(), "yyyy-MM-dd HH:mm:ss")); -// -// //灞�-琛�-鍒� -// String[] attrCable = grainData.getCable().split("-"); -// if (StringUtils.isNotEmpty(grainData.getCableCir())) { -// return lastData2PushData2(grainData, device); -// } -// -// //灞傝鍒� -// int cableZ = Integer.valueOf(attrCable[0]); -// int cableY = Integer.valueOf(attrCable[1]); -// int cableX = Integer.valueOf(attrCable[2]); -// -// //娓╁害闆嗗悎 -// String[] attr = grainData.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]; -// -// -// //濡傛灉鏄紓甯稿��,鎵ц璋冩暣鏁版嵁 TODO -// if (Double.valueOf(curTemp) < -99.9) { -// -// curTemp = grainData.getTempAve() + ""; -// -// } else { -// //鍒ゆ柇鏈�澶� -// 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(grainData.getHumidityIn() + ""); -// grainTH.setTemperature(grainData.getTempIn() + ""); -// grainTH.setAirHumidity(grainData.getHumidityOut() + ""); -// grainTH.setAirTemperature(grainData.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; -// } - - @Override public BaseResp testWeight(BaseReqData reqData) { @@ -205,8 +218,9 @@ weightInfo.setNetWeight(reqData.getWeight()); weightInfo.setNetWeight(reqData.getWeight()); weightInfo.setWeightUnit("KG"); + JSONObject jsonObject = new JSONObject(); - jsonObject.put("weightInfo", JSONObject.toJSONString(weightInfo)); + jsonObject.put("weightInfo", weightInfo); packet.setProperties(jsonObject); diff --git a/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java b/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java index 4bbe59a..7b7b5f4 100644 --- a/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java +++ b/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java @@ -5,6 +5,7 @@ import com.bstek.dorado.annotation.Expose; import com.fzzy.api.Constant; import com.fzzy.api.data.ApiCommonDevice; +import com.fzzy.api.data.DepotType; import com.fzzy.api.data.GatewayDeviceType; import com.fzzy.api.utils.ContextUtil; import com.fzzy.gateway.GatewayUtils; @@ -70,9 +71,11 @@ if (null == data2.getStatus()) { data.setStatus(Constant.YN_Y); + if (GatewayDeviceType.TYPE_07.equals(data2.getType())) { data.setStatus(Constant.YN_N); } + } if (null == data2.getDeviceSn()) { @@ -83,6 +86,10 @@ } } + if (null == data2.getDepotType()) { + data2.setDepotType(DepotType.TYPE_01.getCode()); + } + if (null == data2.getId()) { data2.setId(ContextUtil.getUUID()); gatewayDeviceRep.save(data2); diff --git a/src/main/java/com/fzzy/gateway/service/GatewayDeviceTestPR.java b/src/main/java/com/fzzy/gateway/service/GatewayDeviceTestPR.java index 7cd3ec7..484a0e8 100644 --- a/src/main/java/com/fzzy/gateway/service/GatewayDeviceTestPR.java +++ b/src/main/java/com/fzzy/gateway/service/GatewayDeviceTestPR.java @@ -1,6 +1,6 @@ package com.fzzy.gateway.service; -import com.alibaba.fastjson2.JSONObject; +import com.alibaba.fastjson.JSONObject; import com.bstek.dorado.annotation.Expose; import com.fzzy.api.data.GatewayDeviceType; import com.fzzy.api.utils.DateUtil; diff --git a/src/main/java/com/fzzy/gateway/view/GatewayDevice.view.xml b/src/main/java/com/fzzy/gateway/view/GatewayDevice.view.xml index d37fa01..b7e1133 100644 --- a/src/main/java/com/fzzy/gateway/view/GatewayDevice.view.xml +++ b/src/main/java/com/fzzy/gateway/view/GatewayDevice.view.xml @@ -149,6 +149,15 @@ <Property></Property> <Property name="label">鐢电紗绫诲瀷</Property> </PropertyDef> + <PropertyDef name="depotType"> + <Property/> + <Property name="label">浠撳簱绫诲瀷</Property> + <Property name="mapping"> + <Property name="mapValues">${dorado.getDataProvider("apiTriggerPR#listDepotType").getResult()}</Property> + <Property name="keyProperty">code</Property> + <Property name="valueProperty">name</Property> + </Property> + </PropertyDef> </DataType> <DataType name="dtParam" parent="Map"> <PropertyDef name="start"> @@ -534,6 +543,11 @@ <Editor/> </AutoFormElement> <AutoFormElement> + <Property name="name">depotType</Property> + <Property name="property">depotType</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement> <Property name="name">cableRule</Property> <Property name="property">cableRule</Property> <Editor/> diff --git a/src/main/java/com/fzzy/protocol/bhzn/analysis/AnalysisService.java b/src/main/java/com/fzzy/protocol/bhzn/analysis/AnalysisService.java index 423a4af..2010ea8 100644 --- a/src/main/java/com/fzzy/protocol/bhzn/analysis/AnalysisService.java +++ b/src/main/java/com/fzzy/protocol/bhzn/analysis/AnalysisService.java @@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSONObject; import com.fzzy.api.Constant; import com.fzzy.api.data.ApiCommonDevice; +import com.fzzy.api.data.DepotType; import com.fzzy.api.data.GatewayDeviceType; import com.fzzy.api.utils.BytesUtil; import com.fzzy.api.utils.NumberUtil; @@ -197,9 +198,6 @@ private void analysisGrain2(IoMessage message, BaseReqData reqData, String grainStr, GrainCableData cableData) { GatewayDevice device = reqData.getDevice(); // 鑾峰彇瀹屾暣鐨勭伯鎯呭寘淇℃伅 - int cableZ = cableData.getCableZ(); - int cableY = cableData.getCableY(); - int cableX = cableData.getCableX(); int sumNum = cableData.getSumNum(); // 鏍规嵁灞傝鍒楄幏鍙栨寚瀹氶暱搴� @@ -240,9 +238,13 @@ String key = "GRAIN_" + message.getAddr(); contextMapGrain.put(key, null); - if (cableData.isCir()) { + + if (DepotType.TYPE_02.getCode().equals(device.getDepotType()) || DepotType.TYPE_04.getCode().equals(device.getDepotType())) { //绛掍粨 analysisAndPush2(temps, reqData, thDto, cableData); + } else if (DepotType.TYPE_03.getCode().equals(device.getDepotType())) { + //鍌ㄦ补缃� + analysisAndPush3(temps, reqData, thDto, cableData); } else { //骞虫埧浠� analysisAndPush1(temps, reqData, thDto, cableData); @@ -250,18 +252,30 @@ } /** - * 绛掍粨瑙f瀽锛岃В鏋愮浜屾锛岃В鏋愬埌鍧愭爣鏁版嵁 + * 绛掍粨鎺ㄩ�� + * + * @param temps + * @param reqData + * @param thDto + * @param cableData + */ + private void analysisAndPush2(List<Double> temps, BaseReqData reqData, THDto thDto, GrainCableData cableData) { + //TODO + log.info("---------------------------绛掍粨鏆傛棤瀹炵幇---------------------------"); + } + + /** + * 鍌ㄦ补缃� * * @param temps * @throws Exception */ - private void analysisAndPush2(List<Double> temps, BaseReqData reqData, THDto thDto, GrainCableData cableData) { + private void analysisAndPush3(List<Double> temps, BaseReqData reqData, THDto thDto, GrainCableData cableData) { GatewayDevice device = reqData.getDevice(); int cableZ = cableData.getCableZ(); int cableY = cableData.getCableY(); - int cableX = cableData.getCableX(); int sumNum = temps.size(); @@ -336,17 +350,17 @@ JSONObject properties = new JSONObject(); - properties.put("data", JSONObject.toJSONString(outPut)); + properties.put("data", outPut); properties.put("timestamp", grain.getTimestamp()); String height = this.getCacheHeight(device); if (StringUtils.isEmpty(height)) height = "0.0"; properties.put("liquidHeight", height); - grain.setProperties(properties.toJSONString()); + grain.setProperties(properties); //灏佽濂界殑鏁版嵁 - log.info("---娴呭渾浠撳皝瑁呭畬鎴�----寮�濮嬫墽琛屾帹閫�"); + log.info("---娌圭綈浠撲俊鎭皝瑁呭畬鎴�----寮�濮嬫墽琛屾帹閫�"); reqData.setData(JSONObject.toJSONString(grain)); diff --git a/src/main/java/com/fzzy/protocol/bhzn/v0/analysis/AnalysisService.java b/src/main/java/com/fzzy/protocol/bhzn/v0/analysis/AnalysisService.java index 1af6419..2f8cb56 100644 --- a/src/main/java/com/fzzy/protocol/bhzn/v0/analysis/AnalysisService.java +++ b/src/main/java/com/fzzy/protocol/bhzn/v0/analysis/AnalysisService.java @@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSONObject; import com.fzzy.api.Constant; import com.fzzy.api.data.ApiCommonDevice; +import com.fzzy.api.data.DepotType; import com.fzzy.api.data.GatewayDeviceType; import com.fzzy.api.utils.BytesUtil; import com.fzzy.api.utils.NumberUtil; @@ -239,22 +240,39 @@ contextMapGrain.put(key, null); - if (cableData.isCir()) { + + if(DepotType.TYPE_03.getCode().equals(device.getDepotType())){ //绛掍粨 + analysisAndPush3(temps, reqData, thDto, cableData); + }else if(DepotType.TYPE_02.getCode().equals(device.getDepotType())){ analysisAndPush2(temps, reqData, thDto, cableData); - } else { + }else if(DepotType.TYPE_04.getCode().equals(device.getDepotType())){ + analysisAndPush2(temps, reqData, thDto, cableData); + }else { //骞虫埧浠� analysisAndPush1(temps, reqData, thDto, cableData); } } /** - * 绛掍粨瑙f瀽锛岃В鏋愮浜屾锛岃В鏋愬埌鍧愭爣鏁版嵁 + * 绛掍粨锛岃В鏋愮浜屾锛岃В鏋愬埌鍧愭爣鏁版嵁 + * @param temps + * @param reqData + * @param thDto + * @param cableData + */ + private void analysisAndPush2(List<Double> temps, BaseReqData reqData, THDto thDto, GrainCableData cableData) { + //TODO + log.info("-------------------------鏆傛湭瀹炵幇----------------"); + } + + /** + * 娌圭綈浠擄紝瑙f瀽绗簩姝ワ紝瑙f瀽鍒板潗鏍囨暟鎹� * * @param temps * @throws Exception */ - private void analysisAndPush2(List<Double> temps, BaseReqData reqData, THDto thDto, GrainCableData cableData) { + private void analysisAndPush3(List<Double> temps, BaseReqData reqData, THDto thDto, GrainCableData cableData) { GatewayDevice device = reqData.getDevice(); @@ -335,14 +353,14 @@ JSONObject properties = new JSONObject(); - properties.put("data", JSONObject.toJSONString(outPut)); + properties.put("data", outPut); properties.put("timestamp", grain.getTimestamp()); String height = this.getCacheHeight(device); if (StringUtils.isEmpty(height)) height = "0.0"; properties.put("liquidHeight", height); - grain.setProperties(properties.toJSONString()); + grain.setProperties(properties); //灏佽濂界殑鏁版嵁 log.info("---娴呭渾浠撳皝瑁呭畬鎴�----寮�濮嬫墽琛屾帹閫�"); diff --git a/velocity.log b/velocity.log deleted file mode 100644 index e69de29..0000000 --- a/velocity.log +++ /dev/null -- Gitblit v1.9.3