From 7d84b6cbf8268a6993f661e22a842ffa12c13732 Mon Sep 17 00:00:00 2001 From: vince <757871790@qq.com> Date: 星期六, 01 七月 2023 11:03:33 +0800 Subject: [PATCH] 邦海控制柜 --- igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Req209.java | 16 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Req248.java | 22 igds-protocol-fzzy3/src/main/java/com/ld/igds/protocol/fzzy/CRC16Util.java | 4 igds-core/src/main/java/com/ld/igds/io/constant/ProtocolEnum.java | 1 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisGas.java | 150 ++++ igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/GasStopCommandBuilder.java | 47 + igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res248.java | 15 igds-web/src/main/resources/static/img/areation/5324/pfc_a.png | 0 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteGrainServiceImpl.java | 28 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/TempControlCommandBuilder.java | 98 ++ igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res247.java | 36 + igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbMessageConsumer.java | 88 ++ igds-core/src/main/java/com/ld/igds/models/DepotConf.java | 4 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res209.java | 24 igds-web/src/main/resources/static/img/aerial-5324_001.png | 0 igds-core/src/main/java/com/ld/igds/view/DepotConf.view.xml | 5 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/CommandBuilder.java | 68 ++ igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/GasCommandBuilder.java | 48 + igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisService.java | 87 ++ igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/IoMessage.java | 35 + igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbHeartbeatImpl.java | 43 + igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbServerUtils.java | 127 +++ igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/BaseRemoteImpl.java | 72 ++ igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemotePestServiceImpl.java | 35 + igds-basic/src/main/java/com/ld/igds/gas/manager/GasManager.java | 2 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/ControlCommandBuilder.java | 147 ++++ igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteGasServiceImpl.java | 78 ++ igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/msg/ReMessageBuilder.java | 35 + igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteControlServiceImpl.java | 177 +++++ igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbSessionListener.java | 65 + igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteCommonImpl.java | 99 ++ igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/package-info.java | 4 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/ServerRunner.java | 7 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbServerEngine.java | 118 +++ igds-web/src/main/resources/static/img/areation/5324/pfc_b.png | 0 igds-core/src/main/java/models/igds.model.xml | 4 igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisDevice.java | 193 +++++ igds-web/src/main/resources/verb-conf.properties | 27 38 files changed, 2,004 insertions(+), 5 deletions(-) diff --git a/igds-basic/src/main/java/com/ld/igds/gas/manager/GasManager.java b/igds-basic/src/main/java/com/ld/igds/gas/manager/GasManager.java index b99095b..02446e1 100644 --- a/igds-basic/src/main/java/com/ld/igds/gas/manager/GasManager.java +++ b/igds-basic/src/main/java/com/ld/igds/gas/manager/GasManager.java @@ -206,7 +206,7 @@ // 鑾峰彇鍒嗘満淇℃伅 DeviceSer deviceSer = coreSerService.getCacheSer(param.getCompanyId(), - depotConf.getGrainSer()); + depotConf.getGasSer()); CheckGasRequest request = new CheckGasRequest(); request.setDepotId(param.getDepotId()); diff --git a/igds-core/src/main/java/com/ld/igds/io/constant/ProtocolEnum.java b/igds-core/src/main/java/com/ld/igds/io/constant/ProtocolEnum.java index daa1f3b..99f2dc8 100644 --- a/igds-core/src/main/java/com/ld/igds/io/constant/ProtocolEnum.java +++ b/igds-core/src/main/java/com/ld/igds/io/constant/ProtocolEnum.java @@ -29,6 +29,7 @@ TCP_FZZY_QUANTITY_V35("TCP_FZZY_QUANTITY_V35", "鏁伴噺妫�娴媀35"), TCP_BHZH_GRAIN_FM_V1("TCP_BHZH_GRAIN_FM_V1", "閭︽捣鏅鸿兘鏃犵嚎涓绘満鐗圴1"), TCP_BHZH_GRAIN_V2("TCP_BHZH_GRAIN_V2", "閭︽捣鏅鸿兘鏈夌嚎鐗圴2"), + TCP_BHZH_VERB_V2("TCP_BHZH_VERB_V2", "閭︽捣鎺у埗鏌滄櫤鑳芥湁绾跨増V2"), FZZY_OPENAPI_HTTP("FZZY_OPENAPI_HTTP", "椋庢鑷磋繙API-HTTP鍗忚"); private String code; private String msg; diff --git a/igds-core/src/main/java/com/ld/igds/models/DepotConf.java b/igds-core/src/main/java/com/ld/igds/models/DepotConf.java index df5d095..ef59d56 100644 --- a/igds-core/src/main/java/com/ld/igds/models/DepotConf.java +++ b/igds-core/src/main/java/com/ld/igds/models/DepotConf.java @@ -43,6 +43,10 @@ @PropertyDef(label = "鑳借�楀垎鏈�") private String esSer; + @Column(name = "GAS_SER_", length = 40) + @PropertyDef(label = "姘斾綋鍒嗘満") + private String gasSer; + @Column(name = "GRAIN_FREQ_", length = 4) @PropertyDef(label = "绮儏淇濆瓨棰戠巼", description = "榛樿涓�澶╁娆�") private String grainFreq = GrainFrequence.FREQ_01.getCode(); diff --git a/igds-core/src/main/java/com/ld/igds/view/DepotConf.view.xml b/igds-core/src/main/java/com/ld/igds/view/DepotConf.view.xml index e968b49..0f9aaac 100644 --- a/igds-core/src/main/java/com/ld/igds/view/DepotConf.view.xml +++ b/igds-core/src/main/java/com/ld/igds/view/DepotConf.view.xml @@ -279,6 +279,11 @@ <Property name="labelSeparator">锛�</Property> <Property name="labelWidth">120</Property> <AutoFormElement> + <Property name="name">gasSer</Property> + <Property name="property">gasSer</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement> <Property name="name">gasStart</Property> <Property name="property">gasStart</Property> <Editor/> diff --git a/igds-core/src/main/java/models/igds.model.xml b/igds-core/src/main/java/models/igds.model.xml index 7dd3e2f..c1570ad 100644 --- a/igds-core/src/main/java/models/igds.model.xml +++ b/igds-core/src/main/java/models/igds.model.xml @@ -894,6 +894,10 @@ <Property name="valueProperty">name</Property> </Property> </PropertyDef> + <PropertyDef name="gasSer"> + <Property/> + <Property name="label">姘斾綋鍒嗘満</Property> + </PropertyDef> </DataType> <DataType name="dtDicSlogan"> <Property name="creationType">com.ld.igds.models.DicSlogan</Property> diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv2/ServerRunner.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/ServerRunner.java similarity index 81% rename from igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv2/ServerRunner.java rename to igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/ServerRunner.java index c3c0f92..2e86689 100644 --- a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv2/ServerRunner.java +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/ServerRunner.java @@ -1,7 +1,8 @@ -package com.ld.igds.protocol.bhzn.grainv2; +package com.ld.igds.protocol.bhzn; import com.ld.igds.data.ConfigData; import com.ld.igds.protocol.bhzn.grainv2.server.BhznGrainV2ServerEngine; +import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerEngine; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; @@ -20,12 +21,14 @@ private ConfigData configData; @Autowired private BhznGrainV2ServerEngine bhznGrainServerEngine; - + @Autowired + private BhznVerbServerEngine bhznVerbServerEngine; @Override public void run(String... strings) throws Exception { if (configData.getActive().indexOf("pro") >= 0) { bhznGrainServerEngine.start(BhznGrainV2ServerEngine.PORT); + bhznVerbServerEngine.start(BhznVerbServerEngine.PORT); } if (configData.getActive().indexOf("dev") >= 0) { bhznGrainServerEngine.start(BhznGrainV2ServerEngine.PORT); diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisDevice.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisDevice.java new file mode 100644 index 0000000..2718f04 --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisDevice.java @@ -0,0 +1,193 @@ +package com.ld.igds.protocol.bhzn.verb.analysis; + +import com.alibaba.fastjson.JSONObject; +import com.ld.igds.common.CoreDeviceService; +import com.ld.igds.constant.DeviceStatus; +import com.ld.igds.io.constant.OrderRespEnum; +import com.ld.igds.io.notify.NotifyWebInvoker; +import com.ld.igds.io.request.ExeDevice; +import com.ld.igds.models.Device; +import com.ld.igds.models.DeviceSer; +import com.ld.igds.protocol.bhzn.verb.command.BaseRemoteImpl; +import com.ld.igds.protocol.bhzn.verb.dto.IoMessage; +import com.ld.igds.protocol.bhzn.verb.dto.Res247; +import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerUtils; +import com.ld.igds.temp.dto.TempParam; +import com.ld.igds.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import java.util.ArrayList; +import java.util.List; +/** + * 璁惧鎿嶄綔绫� + */ +@Slf4j +@Component(AnalysisDevice.BEAN_ID) +public class AnalysisDevice extends BaseRemoteImpl { + + public static final String BEAN_ID = "bhzn.analysisDevice"; + + @Autowired + private CoreDeviceService deviceService; + @Autowired + private NotifyWebInvoker notifyInvoker; + + + + /** + * 璁惧鐘舵�� + * + * @param reMessage + * @param ser + */ + public void analysis(IoMessage reMessage, DeviceSer ser) { + Res247 res247 = JSONObject.parseObject(reMessage.getContentStr(),Res247.class); + AnalysisWin(ser,res247.getWin_Str()); + AnalysisFan(ser,res247.getFan_Str()); + AnalysisAir(ser,res247.getAir_Str()); + AnalysisLight(ser,res247.getLight_Str()); +// BhznVerbServerUtils.add2StatusMap(ser.getCompanyId(), ser.getId(),0, ""); +// } + deviceService.updateStatus(ser.getCompanyId(), ser.getId(), BhznVerbServerUtils.getStatusMap()); +// +// notifyInvoker.notifyAnalysisStatusSuccess(ser.getCompanyId(), ser.getId(), OrderRespEnum.MSG_SUCCESS, "璁惧鐘舵�佹煡璇㈡垚鍔熷苟瀹屾垚瑙f瀽锛�"); + } + + /** + * 瑙f瀽绐楁埛鐘舵�� + * @param ser + * @param winStr + */ + private void AnalysisWin(DeviceSer ser,Integer[] winStr){ + if(winStr == null || winStr.length == 0)return; + for (int i=1;i<= winStr.length;i++) { + BhznVerbServerUtils.add2StatusMap(ser.getCompanyId(), ser.getId(),i, getWinStatus(winStr[i-1])); + } + } + /** + * 瑙f瀽椋庢満鐘舵�� + * @param ser + * @param fanStr + */ + private void AnalysisFan(DeviceSer ser,Integer[] fanStr){ + if(fanStr == null || fanStr.length == 0)return; + for (int i=1;i<= fanStr.length;i++) { + BhznVerbServerUtils.add2StatusMap(ser.getCompanyId(), ser.getId(),i+20, getFanStatus(fanStr[i-1])); + } + } + /** + * 瑙f瀽绌鸿皟鐘舵�� + * @param ser + * @param airStr + */ + private void AnalysisAir(DeviceSer ser,Integer[] airStr){ + if(airStr == null || airStr.length == 0)return; + Integer s= 0; + for (int i=1;i<= airStr.length;i++) { + List<Device> devices = deviceService.getCacheDeviceBySerId(ser.getCompanyId(),ser.getId()); + // 璋冩暣缂撳瓨 + if (null == devices || devices.isEmpty()) + return; + // 鏇存柊缂撳瓨 + Device temp; + s = airStr[i-1]; + for (int j = 0; j < devices.size(); j++) { + if(i == (devices.get(j).getPassCode() - 40)){ + // 4608 -12 00 + String hexStr = BytesUtil.intToHexStr(s); + for (int k =0;k<4;k++){ + if(hexStr.length() < 16){ + hexStr = "0" + hexStr; + } + } + // 12 + String l = hexStr.substring(0,2); + //00 + String h = hexStr.substring(2,4); + String hb = BytesUtil.toBinary8String(BytesUtil.hexToInt(h)); + //00000000 0000 0 000 + Integer status = Integer.parseInt(hb.substring(4,5)); + Integer t = BytesUtil.hexToInt(l); + BhznVerbServerUtils.add2StatusMap(ser.getCompanyId(), ser.getId(), devices.get(j).getId(), getLightStatus(status)); + TempParam param = new TempParam(); + param.setId( devices.get(j).getId()); + param.setTargetTemp(t+""); + param.setTargetStatus(getLightStatus(status)); + param.setTargetModel("01"); + List<ExeDevice> exeDeviceList = new ArrayList<>(); + ExeDevice dev = new ExeDevice(); + dev.setSerId(ser.getId()); + exeDeviceList.add(dev); + param.setDeviceList(exeDeviceList); + param.setCompanyId(ser.getCompanyId()); + deviceService.updateTempControlInfo(param); + + log.info("绌鸿皟鐘舵�佽В鏋愬畬鎴愶細"+param.toString()); + //BhznVerbServerUtils.add2StatusMap(ser.getCompanyId(), ser.getId(),i+40, getWinStatus(airStr[i])); + + } + } + } + } + /** + * 瑙f瀽鐓ф槑鐘舵�� + * @param ser + * @param lightStr + */ + private void AnalysisLight(DeviceSer ser,Integer[] lightStr){ + if(lightStr == null || lightStr.length == 0)return; + for (int i=1;i<= lightStr.length;i++) { + BhznVerbServerUtils.add2StatusMap(ser.getCompanyId(), ser.getId(),i+60, getLightStatus(lightStr[i-1])); + } + } + + private String getWinStatus(Integer s){ + if(s == null)return DeviceStatus.ZERO.getCode(); + String hexStr = BytesUtil.intToHexStr(s); + for (int i =0;i<4;i++){ + if(hexStr.length() < 4){ + hexStr = "0" + hexStr; + } + } + String h = hexStr.substring(0,2); + String l = hexStr.substring(2,4); + h = BytesUtil.toBinary8String(BytesUtil.hexToInt(h)); + int kaidu = (BytesUtil.hexToInt(l)); + String temp = h.substring(6,8); + if("00".equals(temp ) && kaidu == 100){ + return DeviceStatus.OPEN.getCode(); + } + if("00".equals(temp ) && kaidu == 0){ + return DeviceStatus.CLOSE.getCode(); + } + if("01".equals(temp )){ + return DeviceStatus.OPEN.getCode(); + } + if("10".equals(temp )){ + return DeviceStatus.CLOSE.getCode(); + } + + return DeviceStatus.ZERO.getCode(); + } + private String getFanStatus(Integer s){ + if(0 == s){ + return DeviceStatus.CLOSE.getCode(); + } + if(1 == s){ + return DeviceStatus.OPEN.getCode(); + } + return DeviceStatus.ZERO.getCode(); + } + + private String getLightStatus(Integer s){ + if(0 == s){ + return DeviceStatus.CLOSE.getCode(); + } + if(1 == s){ + return DeviceStatus.OPEN.getCode(); + } + return DeviceStatus.ZERO.getCode(); + } + +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisGas.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisGas.java new file mode 100644 index 0000000..170c5a0 --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisGas.java @@ -0,0 +1,150 @@ +package com.ld.igds.protocol.bhzn.verb.analysis; + +import com.alibaba.fastjson.JSONObject; +import com.ld.igds.common.CoreCommonService; +import com.ld.igds.common.CoreDeviceService; +import com.ld.igds.constant.BizType; +import com.ld.igds.constant.DeviceStatus; +import com.ld.igds.gas.CoreGasService; +import com.ld.igds.io.constant.OrderRespEnum; +import com.ld.igds.io.notify.NotifyWebInvoker; +import com.ld.igds.io.request.ExeDevice; +import com.ld.igds.models.*; +import com.ld.igds.protocol.bhzn.verb.command.BaseRemoteImpl; +import com.ld.igds.protocol.bhzn.verb.dto.IoMessage; +import com.ld.igds.protocol.bhzn.verb.dto.Res209; +import com.ld.igds.protocol.bhzn.verb.dto.Res247; +import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerUtils; +import com.ld.igds.temp.dto.TempParam; +import com.ld.igds.util.BytesUtil; +import com.ld.igds.util.ContextUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * 姘斾綋瑙f瀽 + */ +@Slf4j +@Component(AnalysisGas.BEAN_ID) +public class AnalysisGas extends BaseRemoteImpl { + + public static final String BEAN_ID = "bhzn.analysisGas"; + + @Autowired + private CoreDeviceService deviceService; + @Autowired + private NotifyWebInvoker notifyInvoker; + @Autowired + private CoreGasService gasService; + @Autowired + private CoreCommonService commonService; + + + /** + * 璁惧鐘舵�� + * + * @param reMessage + * @param ser + */ + public void analysis(IoMessage reMessage, DeviceSer ser) { + + log.info("姘斾綋妫�娴嬪紑濮嬭В鏋�"); + Res209 res209 = JSONObject.parseObject(reMessage.getContentStr(),Res209.class); + + DepotConf depotConf = commonService.getCacheDepotConfBySerId(ser.getCompanyId(),ser.getId() ); + //涓讳綋淇℃伅 + Gas gas = new Gas(); + gas.setBatchId(ContextUtil.getDefaultBatchId()); + gas.setCheckNum(res209.getCO2ValArray().length); + gas.setCompanyId(ser.getCompanyId()); + gas.setDepotId(depotConf.getDepotId()); + gas.setGasEnd(depotConf.getPestEnd()); + gas.setGasStart(depotConf.getPestStart()); + gas.setReceiveDate(new Date()); + StringBuffer sb = new StringBuffer(); + List<GasInfo> items = new ArrayList<>(); + GasInfo info; + Integer[] n2ValArray = res209.getN2ValArray(); + Integer[] pH3ValArray = res209.getPH3ValArray(); + Integer[] cO2ValArray = res209.getCO2ValArray(); + for (int i=0;i<res209.getCO2ValArray().length;i++){ + info = new GasInfo(); + info.setId(ContextUtil.buildInfoId(gas.getCompanyId(), gas.getDepotId(), gas.getBatchId())); + info.setPassCode(i+1); + info.setPerCo2(cO2ValArray[i].doubleValue()); + info.setPerO2(99 - (n2ValArray[i].doubleValue() /10 )); + info.setPerPh3(pH3ValArray[i].doubleValue()); + info.setPerN2(n2ValArray[i].doubleValue() / 10); + items.add(info); + if(i == 0){ + //娣诲姞鏈�澶у�煎拰鏈�灏忓�� + gas.setPerCo2Max(info.getPerCo2()); + gas.setPerCo2Min(info.getPerCo2()); + gas.setPerO2Max(info.getPerO2()); + gas.setPerO2Min(info.getPerO2()); + gas.setPerPh3Max(info.getPerPh3()); + gas.setPerPh3Min(info.getPerPh3()); + gas.setPerN2Max(info.getPerN2()); + gas.setPerN2Min(info.getPerN2()); + } + if (info.getPerCo2() > gas.getPerCo2Max()) { + gas.setPerCo2Max(info.getPerCo2()); + } + if (info.getPerCo2() < gas.getPerCo2Min()) { + gas.setPerCo2Min(info.getPerCo2()); + } + + if (info.getPerO2() > gas.getPerO2Max()) { + gas.setPerO2Max(info.getPerO2()); + } + + if (info.getPerO2() < gas.getPerO2Min()) { + gas.setPerO2Min(info.getPerO2()); + } + + if (info.getPerPh3() > gas.getPerPh3Max()) { + gas.setPerPh3Max(info.getPerPh3()); + } + + if (info.getPerPh3() < gas.getPerPh3Min()) { + gas.setPerPh3Min(info.getPerPh3()); + } + + if (info.getPerN2() > gas.getPerN2Max()) { + gas.setPerN2Max(info.getPerN2()); + } + + if (info.getPerN2() < gas.getPerN2Min()) { + gas.setPerN2Min(info.getPerN2()); + } + + //鍥哄畾涓猴細passCode,co2,o2,ph3,n2;passCode,co2,o2,ph3,n2;" + sb.append(info.getPassCode()); + sb.append(","); + sb.append(info.getPerCo2()); + sb.append(","); + sb.append(info.getPerO2()); + sb.append(","); + sb.append(info.getPerPh3()); + sb.append(","); + sb.append(info.getPerN2()); + sb.append(";"); + } + gas.setPoints(sb.toString()); + gasService.saveInfoGas(items); + + gasService.saveOrUpdateData(gas); + + // 璋冪敤閫氱煡鍓嶇 + notifyInvoker.notifyWeb(gas.getCompanyId(), OrderRespEnum.MSG_SUCCESS, BizType.GAS, depotConf.getDepotName() + " 姘斾綋妫�娴嬶細缁撴灉杩斿洖鎴愬姛."); + + log.info("鎺у埗鏌�----->>>骞冲彴锛氭皵浣撹В鏋愬畬鎴�-浠撳簱={}", depotConf.getDepotName()); + + } + +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisService.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisService.java new file mode 100644 index 0000000..f6b00ce --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisService.java @@ -0,0 +1,87 @@ +package com.ld.igds.protocol.bhzn.verb.analysis; + +import com.ld.igds.common.CoreCommonService; +import com.ld.igds.common.CoreSerService; +import com.ld.igds.common.dto.THDto; +import com.ld.igds.constant.BizType; +import com.ld.igds.constant.Constant; +import com.ld.igds.grain.GrainUtil; +import com.ld.igds.grain.dto.GrainItemInfo; +import com.ld.igds.io.notify.NotifyGrainInvoker; +import com.ld.igds.models.DepotConf; +import com.ld.igds.models.DeviceSer; +import com.ld.igds.models.DicSysConf; +import com.ld.igds.models.Grain; +import com.ld.igds.order.ExeOrderService; +import com.ld.igds.protocol.bhzn.verb.dto.IoMessage; +import com.ld.igds.warn.WarnUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.*; + +/** + * 鍗忚瑙f瀽 + * + * @author vince + */ +@Slf4j +@Component(AnalysisService.BEAN_ID) +public class AnalysisService { + + + public static final String BEAN_ID = "bhznVerb.analysisService"; + + @Autowired + private CoreSerService coreSerService; + @Autowired + private CoreCommonService commonService; + @Autowired + private NotifyGrainInvoker notifyGrainInvoker; + @Autowired + private GrainUtil grainUtil; + @Autowired + private WarnUtils warnUtils; + @Autowired + private ExeOrderService exeOrderService; + @Autowired + private AnalysisDevice analysisDevice; + @Autowired + private AnalysisGas analysisGas; + + + /** + * @param message + */ + public void analysis(IoMessage message) { + try{ + DeviceSer ser = coreSerService.getCacheSerBySn(message.getCompanyId(), message.getSn()); + if (null == ser) { + log.warn("鎺у埗鏌�------>>>骞冲彴锛氬綋鍓嶇粍缁囩紪鐮�={}锛屽垎鏈篒D={}锛岀郴缁熸病鏈夎幏鍙栧埌鍒嗘満淇℃伅锛屾姤鏂囨棤娉曡繘琛岃В鏋�", message.getCompanyId(), message.getSn()); + + return; + }else{ + ser.setIp(message.getIp()); + ser.setPort(message.getPort()); + ser.setStatus(Constant.YN_Y); + coreSerService.updateByData(ser); + } + //鏍规嵁鎺ュ彛缂栧彿杩涜瑙f瀽璺敱 + switch (message.getCmd()) { + case 247: + analysisDevice.analysis(message, ser); + break; + case 209: + analysisGas.analysis(message, ser); + break; + default: + log.error("鎺у埗鏌滃懡浠ょ爜瑙f瀽澶辫触锛�"); + break; + } + }catch (Exception e){ + log.error("鎺у埗鏌滆В鏋愬け璐ュ嚭閿欙細" + e.getMessage(),e); + } + } + +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/CommandBuilder.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/CommandBuilder.java new file mode 100644 index 0000000..53d3290 --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/CommandBuilder.java @@ -0,0 +1,68 @@ +package com.ld.igds.protocol.bhzn.verb.builder; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SimplePropertyPreFilter; +import com.ld.igds.io.request.BaseRequest; +import com.ld.igds.protocol.bhzn.verb.dto.IoMessage; +import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerUtils; + + +/** + * 鍛戒护鐢熸垚 + * + * @author Andy + */ +public abstract class CommandBuilder { + + public IoMessage buildMessage(BaseRequest request) { + IoMessage message = new IoMessage(); + message.setIp(request.getIp()); + message.setPort(request.getPort()); + message.setBegin(BhznVerbServerUtils.MSG_START1); + // 璋冩暣淇℃伅 + buildInfo(message, request); + message.setSign("0000"); + message.setStNum(Integer.parseInt(request.getDepotId())); + message.setVersion("V1.0000000"); + message.setCmd(248); + message.setResult(""); + message.setOrderId(request.getOrderId()); + message.setContent(null); + message.setEnd(BhznVerbServerUtils.MSG_END); + + // 鐢熸垚鏁翠綋鍛戒护淇℃伅鍜孊Yte淇℃伅 + build(message); + + return message; + } + + public void buildInfo(IoMessage message, BaseRequest request) { + + + } + + /** + * 鏍规嵁鐢熸垚鐨勫懡浠わ紝杩涜璋冩暣 + * + * @param message + */ + public void build(IoMessage message) { + StringBuffer hexSb = new StringBuffer(); + hexSb.append(message.getBegin()); + SimplePropertyPreFilter filter = new SimplePropertyPreFilter(); + filter.getExcludes().add("ip"); + filter.getExcludes().add("port"); + filter.getExcludes().add("companyId"); + filter.getExcludes().add("strMsg"); + filter.getExcludes().add("begin"); + filter.getExcludes().add("end"); + filter.getExcludes().add("byteMsg"); + filter.getExcludes().add("contentSr"); + message.setContent(JSONObject.parseObject(message.getContentStr())); + message.setStrMsg(JSONObject.toJSONString(message,filter)); + hexSb.append(message.getStrMsg()); + hexSb.append(message.getEnd()); + message.setByteMsg(hexSb.toString().getBytes()); + } + +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/ControlCommandBuilder.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/ControlCommandBuilder.java new file mode 100644 index 0000000..1d1dc1f --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/ControlCommandBuilder.java @@ -0,0 +1,147 @@ +package com.ld.igds.protocol.bhzn.verb.builder; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.ld.igds.constant.DeviceStatus; +import com.ld.igds.constant.DeviceType; +import com.ld.igds.io.request.DeviceControlRequest; +import com.ld.igds.io.request.ExeDevice; +import com.ld.igds.protocol.bhzn.verb.dto.IoMessage; +import com.ld.igds.protocol.bhzn.verb.dto.Req248; +import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerUtils; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; + +public class ControlCommandBuilder extends CommandBuilder { + + private final static ControlCommandBuilder instance = new ControlCommandBuilder(); + + private ControlCommandBuilder() { + } + + public static ControlCommandBuilder getInstance() { + return instance; + } + + public IoMessage buildMessage(DeviceControlRequest request) { + + IoMessage message = new IoMessage(); + message.setIp(request.getIp()); + message.setPort(request.getPort()); + message.setBegin(BhznVerbServerUtils.MSG_START1); + // 璋冩暣淇℃伅 + buildInfo(message, request); + message.setSign("0000"); + message.setVersion("V1.0000000"); + message.setStNum(Integer.parseInt(request.getDepotId())); + message.setSn(request.getSerId()); + message.setCmd(248); + message.setResult(""); + message.setOrderId(request.getOrderId()); + message.setEnd(BhznVerbServerUtils.MSG_END); + + // 鐢熸垚鏁翠綋鍛戒护淇℃伅鍜孊Yte淇℃伅 + build(message); + + return message; + } + + public void buildInfo(IoMessage message, DeviceControlRequest request) { + Req248 info = new Req248(); + Integer[] winStr = new Integer[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; + Integer[] fanStr = new Integer[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; + Integer[] airStr = new Integer[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; + Integer[] lightStr = new Integer[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; + int winCount = 0,fanCount = 0,airCount = 0,lightCount = 0; + List<ExeDevice> deviceList = request.getDeviceList(); + for (ExeDevice exeDevice : deviceList) { + //绐楁埛绫诲瀷璁惧 鍖呭惈 + if( + DeviceType.TYPE_0B.getCode().equals(exeDevice.getType()) + || DeviceType.TYPE_01.getCode().equals(exeDevice.getType()) + || DeviceType.TYPE_02.getCode().equals(exeDevice.getType()) + || DeviceType.TYPE_0C.getCode().equals(exeDevice.getType()) + ){ + winStr[exeDevice.getPassCode()-1] = getVinStatus(exeDevice.getTargetStatus()); + if(exeDevice.getPassCode() > winCount){ + winCount = exeDevice.getPassCode(); + } + if(StringUtils.isNotEmpty(exeDevice.getLink()) && !"null".equals(exeDevice.getLink())){ + fanStr[Integer.parseInt(exeDevice.getLink())-21] = getFanStatus(exeDevice.getTargetStatus()); + if(Integer.parseInt(exeDevice.getLink()) > fanCount){ + fanCount = exeDevice.getPassCode(); + } + } + } + //椋庢満绫诲瀷璁惧 + if(DeviceType.TYPE_04.getCode().equals(exeDevice.getType()) + ){ + fanStr[exeDevice.getPassCode()-21] = getFanStatus(exeDevice.getTargetStatus()); + if(exeDevice.getPassCode() > fanCount){ + fanCount = exeDevice.getPassCode(); + } + } + //绌鸿皟绫诲瀷璁惧 +// if(DeviceType.TYPE_05.getCode().equals(exeDevice.getType()) +// ){ +// fanStr[exeDevice.getPassCode()-1] = getFanStatus(exeDevice.getTargetStatus()); +// if(exeDevice.getPassCode() > fanCount){ +// fanCount = exeDevice.getPassCode(); +// } +// } + //鐓ф槑绫诲瀷璁惧 + if(DeviceType.TYPE_06.getCode().equals(exeDevice.getType()) + ){ + lightStr[exeDevice.getPassCode()-61] = getFanStatus(exeDevice.getTargetStatus()); + if(exeDevice.getPassCode() > lightCount){ + lightCount = exeDevice.getPassCode(); + } + } + } + info.setWinCount(winCount); + info.setWin_Str(winStr); + info.setFanCount(fanCount); + info.setFan_Str(fanStr); + info.setAirCount(airCount); + info.setAir_Str(airStr); + info.setLightCount(lightCount); + info.setLight_Str(lightStr); + message.setContentStr(JSON.toJSONString(info)); + } + + + private int getVinStatus(String deviceStatus){ + if(DeviceStatus.W_OPEN.getCode().equals(deviceStatus) || DeviceStatus.OPEN.getCode().equals(deviceStatus)){ + return 1; + } + if(DeviceStatus.W_CLOSE.getCode().equals(deviceStatus) || DeviceStatus.CLOSE.getCode().equals(deviceStatus)){ + return 2; + } + if(DeviceStatus.F_CLOSE.getCode().equals(deviceStatus) ){ + return 0; + } + if(DeviceStatus.F_OPEN.getCode().equals(deviceStatus) ||DeviceStatus.F_OPEN_F.getCode().equals(deviceStatus) ){ + return 1; + } + return -1; + } + + private int getFanStatus(String deviceStatus){ + if(DeviceStatus.F_CLOSE.getCode().equals(deviceStatus) ){ + return 0; + } + if(DeviceStatus.F_OPEN.getCode().equals(deviceStatus) ||DeviceStatus.F_OPEN_F.getCode().equals(deviceStatus) ){ + return 1; + } + return -1; + } + +// private int getAirStatus(ExeDevice exeDevice){ +// String s = ""; +// s += "001"; +// if(exeDevice.) +// return 0; +// } +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/GasCommandBuilder.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/GasCommandBuilder.java new file mode 100644 index 0000000..bcdfe35 --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/GasCommandBuilder.java @@ -0,0 +1,48 @@ +package com.ld.igds.protocol.bhzn.verb.builder; + +import com.alibaba.fastjson.JSON; +import com.ld.igds.io.request.CheckGasRequest; +import com.ld.igds.protocol.bhzn.verb.dto.IoMessage; +import com.ld.igds.protocol.bhzn.verb.dto.Req209; +import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerUtils; + +public class GasCommandBuilder extends CommandBuilder { + private final static GasCommandBuilder instance = new GasCommandBuilder(); + + private GasCommandBuilder() { + } + + public static GasCommandBuilder getInstance() { + return instance; + } + + public IoMessage buildMessage(CheckGasRequest request) { + + + IoMessage message = new IoMessage(); + message.setIp(request.getIp()); + message.setPort(request.getPort()); + message.setBegin(BhznVerbServerUtils.MSG_START1); + // 璋冩暣淇℃伅 + buildInfo(message, request); + message.setSign("0000"); + message.setVersion("V1.0000000"); + message.setStNum(Integer.parseInt(request.getDepotId())); + message.setSn(request.getSerId()); + message.setCmd(209); + message.setResult(""); + message.setOrderId(request.getOrderId()); + message.setEnd(BhznVerbServerUtils.MSG_END); + + // 鐢熸垚鏁翠綋鍛戒护淇℃伅鍜孊Yte淇℃伅 + build(message); + return message; + } + + public void buildInfo(IoMessage message, CheckGasRequest request) { + Req209 info = new Req209(); + info.setStart(1); + info.setChannel(0); + message.setContentStr(JSON.toJSONString(info)); + } +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/GasStopCommandBuilder.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/GasStopCommandBuilder.java new file mode 100644 index 0000000..6f3638f --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/GasStopCommandBuilder.java @@ -0,0 +1,47 @@ +package com.ld.igds.protocol.bhzn.verb.builder; + +import com.alibaba.fastjson.JSON; +import com.ld.igds.io.request.CheckGasRequest; +import com.ld.igds.protocol.bhzn.verb.dto.IoMessage; +import com.ld.igds.protocol.bhzn.verb.dto.Req209; +import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerUtils; + +public class GasStopCommandBuilder extends CommandBuilder { + private final static GasStopCommandBuilder instance = new GasStopCommandBuilder(); + + private GasStopCommandBuilder() { + } + + public static GasStopCommandBuilder getInstance() { + return instance; + } + + public IoMessage buildMessage(CheckGasRequest request) { + + IoMessage message = new IoMessage(); + message.setIp(request.getIp()); + message.setPort(request.getPort()); + message.setBegin(BhznVerbServerUtils.MSG_START1); + // 璋冩暣淇℃伅 + buildInfo(message, request); + message.setSign("0000"); + message.setVersion("V1.0000000"); + message.setStNum(Integer.parseInt(request.getDepotId())); + message.setSn(request.getSerId()); + message.setCmd(209); + message.setResult(""); + message.setOrderId(request.getOrderId()); + message.setEnd(BhznVerbServerUtils.MSG_END); + + // 鐢熸垚鏁翠綋鍛戒护淇℃伅鍜孊Yte淇℃伅 + build(message); + return message; + } + + public void buildInfo(IoMessage message, CheckGasRequest request) { + Req209 info = new Req209(); + info.setStart(1); + info.setChannel(0); + message.setContentStr(JSON.toJSONString(info)); + } +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/TempControlCommandBuilder.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/TempControlCommandBuilder.java new file mode 100644 index 0000000..658f7d3 --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/builder/TempControlCommandBuilder.java @@ -0,0 +1,98 @@ +package com.ld.igds.protocol.bhzn.verb.builder; + +import com.alibaba.fastjson.JSON; +import com.ld.igds.constant.DeviceStatus; +import com.ld.igds.constant.DeviceType; +import com.ld.igds.io.request.ExeDevice; +import com.ld.igds.io.request.TempControlRequest; +import com.ld.igds.protocol.bhzn.verb.dto.IoMessage; +import com.ld.igds.protocol.bhzn.verb.dto.Req248; +import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerUtils; +import com.ld.igds.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.util.List; +@Slf4j +public class TempControlCommandBuilder extends CommandBuilder { + + private final static TempControlCommandBuilder instance = new TempControlCommandBuilder(); + + private TempControlCommandBuilder() { + } + + public static TempControlCommandBuilder getInstance() { + return instance; + } + + public IoMessage buildMessage(TempControlRequest request) { + + IoMessage message = new IoMessage(); + message.setIp(request.getIp()); + message.setPort(request.getPort()); + message.setBegin(BhznVerbServerUtils.MSG_START1); + // 璋冩暣淇℃伅 + buildInfo(message, request); + message.setSign("0000"); + message.setVersion("V1.0000000"); + message.setStNum(Integer.parseInt(request.getDepotId())); + message.setSn(request.getSerId()); + message.setCmd(248); + message.setResult(""); + message.setOrderId(request.getOrderId()); + message.setEnd(BhznVerbServerUtils.MSG_END); + // 鐢熸垚鏁翠綋鍛戒护淇℃伅鍜孊Yte淇℃伅 + build(message); + + return message; + } + + public void buildInfo(IoMessage message, TempControlRequest request) { + Req248 info = new Req248(); + Integer[] winStr = new Integer[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; + Integer[] fanStr = new Integer[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; + Integer[] airStr = new Integer[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; + Integer[] lightStr = new Integer[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; + int winCount = 0,fanCount = 0,airCount = 0,lightCount = 0; + ExeDevice exeDevice = request.getExeDevice(); + + //绌鸿皟绫诲瀷璁惧 + airStr[exeDevice.getPassCode()-41] = getAirStatus(request); + airCount = exeDevice.getPassCode()-41; + info.setWinCount(winCount); + info.setWin_Str(winStr); + info.setFanCount(fanCount); + info.setFan_Str(fanStr); + info.setAirCount(airCount); + info.setAir_Str(airStr); + info.setLightCount(lightCount); + info.setLight_Str(lightStr); + message.setContentStr(JSON.toJSONString(info)); + } + + + private Integer getAirStatus(TempControlRequest request){ + try{ + String h = ""; + String l = ""; + h = "001"+h; + if(DeviceStatus.OPEN.getCode().equals(request.getExeDevice().getTargetStatus())){ + h = "1"+h; + }else{ + h = "0"+h; + } + h = "0000"+h; + h = BytesUtil.hexToInt(BytesUtil.bin2Hex(h)) + ""; + if (h.length() < 2) { + h = "0" + h; + } + l = BytesUtil.intToHexStr1(Integer.parseInt(request.getTargetTemp())); + String s= l+ h ; + return BytesUtil.hexToInt(s); + }catch (Exception e){ + log.error(e.getMessage(),e); + return -1; + } + + } +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/BaseRemoteImpl.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/BaseRemoteImpl.java new file mode 100644 index 0000000..fdc3475 --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/BaseRemoteImpl.java @@ -0,0 +1,72 @@ +package com.ld.igds.protocol.bhzn.verb.command; + +import com.ld.igds.io.constant.ProtocolEnum; +import com.ld.igds.protocol.bhzn.verb.dto.IoMessage; +import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerEngine; +import com.ld.igds.util.BytesUtil; +import com.ld.igds.util.ContextUtil; +import com.ld.io.api.InvokeResult; +import com.ld.io.api.IoSession; +import com.ld.io.api.IoSessionQuery; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Slf4j +@Component(BaseRemoteImpl.BEAN_ID) +public class BaseRemoteImpl { + public static final String BEAN_ID = "bhzn.remoteBaseCommonService"; + public String getProtocol() { + return ProtocolEnum.TCP_BHZH_VERB_V2.getCode(); + } + + @Autowired + private BhznVerbServerEngine bhznVerbServerEngine; + + /** + * 鍙戦�佸懡浠� + * + * @param ip + * @param port + * @param msg + * @return + */ + public InvokeResult send(String ip, int port, byte[] msg) { + log.debug("骞冲彴鎺ㄩ�佹姤鏂囦俊鎭�--{}", BytesUtil.bytesToString(msg)); + IoSessionQuery sessionFactory = bhznVerbServerEngine.getSessionQuery(); + List<IoSession> sessions = sessionFactory.getAllSession(); + IoSession session = null; + for (IoSession ioSession : sessions) { + if (ContextUtil.getServerKey(ip, port).equals( + ioSession.getBusinessKey())) { + session = ioSession; + break; + } + } + if (null == session) { + return InvokeResult.CHANNEL_CLOSED; + } + return session.invoke(msg); + } + + public InvokeResult send(IoMessage message) { + log.debug("骞冲彴鎺ㄩ�佹姤鏂囦俊鎭�--{}", message.toString()); + IoSessionQuery sessionFactory = bhznVerbServerEngine.getSessionQuery(); + List<IoSession> sessions = sessionFactory.getAllSession(); + IoSession session = null; + for (IoSession ioSession : sessions) { + if (ContextUtil.getServerKey(message.getIp(), message.getPort()).equals( + ioSession.getBusinessKey())) { + session = ioSession; + break; + } + } + if (null == session) { + return InvokeResult.CHANNEL_CLOSED; + } + return session.invoke(message.getByteMsg()); + } + +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteCommonImpl.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteCommonImpl.java new file mode 100644 index 0000000..819b3ff --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteCommonImpl.java @@ -0,0 +1,99 @@ +package com.ld.igds.protocol.bhzn.verb.command; + +import com.ld.igds.constant.BizType; +import com.ld.igds.io.RemoteCommonService; +import com.ld.igds.io.constant.OrderRespEnum; +import com.ld.igds.io.notify.NotifyWebInvoker; +import com.ld.igds.io.request.*; +import com.ld.igds.io.response.BaseResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 褰撳墠鍗忚瀹炵幇锛岀伯鎯呮ā鍧楀懡浠ゆ帴鍙� + * + * @author jiazx + */ +@Slf4j +@Component(RemoteCommonImpl.BEAN_ID) +public class RemoteCommonImpl extends BaseRemoteImpl implements RemoteCommonService { + + public static final String BEAN_ID = "bhzn.remoteCommonService"; + + @Autowired + private NotifyWebInvoker notifyWebInvoker; + + @Override + public BaseResponse checkTh(CheckThRequest request) { + return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�"); + } + + @Override + public BaseResponse pullDevice(BaseRequest request) { + return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�"); + } + + + @Override + public BaseResponse pullDepot(BaseRequest request) { + return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�"); + } + + @Override + public BaseResponse pullAccess(AccessRequest request) { + return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�"); + } + + @Override + public BaseResponse pullDepotStatus(DepotStatusRequest request) { + + return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�"); + } + + @Override + public BaseResponse heartBeat(BaseRequest request) { + return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�"); + } + + @Override + public BaseResponse readConf(GrainSerConfRequest request) { + return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�"); + } + + @Override + public BaseResponse writeConf(GrainSerConfRequest request) { + return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�"); + } + + @Override + public BaseResponse initCable(BaseRequest request) { + return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�"); + } + + @Override + public BaseResponse updateGrainSerCable(GrainSerConfRequest request) { + return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�"); + } + + @Override + public BaseResponse destroyCon(BaseRequest request) { + return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�"); + } + + @Override + public BaseResponse checkGrainSerCable(GrainSerConfRequest request) { + return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�"); + } + + @Override + public BaseResponse sumGrainSerCable(GrainSerConfRequest request) { + return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�"); + } + + @Override + public BaseResponse updateSysDepotConf(BaseRequest request) { + return null; + } + +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteControlServiceImpl.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteControlServiceImpl.java new file mode 100644 index 0000000..f35fa8f --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteControlServiceImpl.java @@ -0,0 +1,177 @@ +package com.ld.igds.protocol.bhzn.verb.command; + +import com.ld.igds.constant.BizType; +import com.ld.igds.constant.DeviceStatus; +import com.ld.igds.constant.DeviceType; +import com.ld.igds.io.RemoteControlService; +import com.ld.igds.io.constant.OrderRespEnum; +import com.ld.igds.io.notify.NotifyWebInvoker; +import com.ld.igds.io.request.DeviceAutoControlRequest; +import com.ld.igds.io.request.DeviceControlRequest; +import com.ld.igds.io.request.ExeDevice; +import com.ld.igds.io.request.TempControlRequest; +import com.ld.igds.io.response.BaseResponse; +import com.ld.igds.io.response.DeviceControlResponse; +import com.ld.igds.protocol.bhzn.verb.builder.ControlCommandBuilder; +import com.ld.igds.protocol.bhzn.verb.builder.TempControlCommandBuilder; +import com.ld.igds.protocol.bhzn.verb.dto.IoMessage; +import com.ld.io.api.InvokeResult; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Slf4j +@Component(RemoteControlServiceImpl.BEAN_ID) +public class RemoteControlServiceImpl extends BaseRemoteImpl implements RemoteControlService { + + public static final String BEAN_ID = "bhzn.remoteControlService"; + + @Autowired + private NotifyWebInvoker notifyWebInvoker; + + + @Override + public DeviceControlResponse deviceControl(DeviceControlRequest request) { + try { + controlBatchExe(request); + } catch (Exception e) { + log.error("骞冲彴------>>>>鎺у埗鏌滐細璁惧鎿嶄綔-鍚庣寮傚父-{}", e); + return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), e.getMessage()); + } + return new DeviceControlResponse(OrderRespEnum.ORDER_SUCCESS); + } + + + /** + * 澶氫釜璁惧鎵ц + * + * @param request + * @throws Exception + */ + public void controlBatchExe(DeviceControlRequest request) throws Exception { + + IoMessage message = ControlCommandBuilder.getInstance().buildMessage(request); + + log.info("骞冲彴------>>>>鎺у埗鏌滐細璁惧鎿嶄綔-{}", message.toString()); + + InvokeResult result = send(request.getIp(), request.getPort(), message.getByteMsg()); + + // 濡傛灉鏈夋墽琛屽紓甯革紝鐩存帴閫氱煡鍒板墠绔� + if (InvokeResult.SUCCESS.getCode() != result.getCode()) { + log.error("骞冲彴------>>>>鎺у埗鏌滐細璁惧鎿嶄綔-鎵ц澶辫触-{}", result.getMessage()); + notifyWeb(request.getCompanyId(), OrderRespEnum.ORDER_ERROR, "璁惧鎿嶄綔寮傚父锛氬師鍥狅細" + result.getMessage()); + + return; + } + + List<ExeDevice> listDevice = request.getDeviceList(); + String deviceType = listDevice.get(0).getType(); + String targetStatus = listDevice.get(0).getTargetStatus(); + + //闂撮殧鏃堕棿瀹氫箟 + long longTime = 1000; + + if (DeviceType.TYPE_01.getCode().equals(deviceType)) { + longTime = 15 * 1000; + } + if (DeviceType.TYPE_0B.getCode().equals(deviceType)) { + longTime = 15 * 1000; + } + if (DeviceType.TYPE_07.getCode().equals(deviceType)) { + longTime = 15 * 1000; + } + if (DeviceType.TYPE_06.getCode().equals(deviceType)) { + longTime = 500; + } + if (DeviceType.TYPE_09.getCode().equals(deviceType)) { + longTime = 15 * 1000; + } + if (DeviceStatus.W_OPEN.getCode().equals(targetStatus) || DeviceStatus.W_CLOSE.getCode().equals(targetStatus)) { + longTime = 15 * 1000; + } + if (DeviceStatus.F_OPEN.getCode().equals(targetStatus) || DeviceStatus.F_OPEN_F.getCode().equals(targetStatus)) { + longTime = 3 * 1000; + } + + Thread.sleep(longTime); + + //濡傛灉涓嶆槸绯荤粺鎵ц锛岀洿鎺ヨ鑾峰彇璁惧鐘舵�� + if (!request.isSysExeTag()) { + log.debug("--------------------鎵ц瀹屾垚鍚庯紝绯荤粺鑷姩鍙戦�佺姸鎬佹煡璇�------------------{}", request.getDepotId()); + //queryStatus(request); + } + } + + @Override + public DeviceControlResponse closeAll(DeviceControlRequest request) { + return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�"); + } + + @Override + public DeviceControlResponse queryStatus(DeviceControlRequest request) { + + return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�"); + } + + + @Override + public DeviceControlResponse tempControl(TempControlRequest request) { + try { + IoMessage message = TempControlCommandBuilder.getInstance().buildMessage(request); + + log.info("骞冲彴------>>>>鎺у埗鏌滐細绌鸿皟璁惧鎿嶄綔-{}", message.toString()); + + InvokeResult result = send(request.getIp(), request.getPort(), message.getByteMsg()); + + // 濡傛灉鏈夋墽琛屽紓甯革紝鐩存帴閫氱煡鍒板墠绔� + if (InvokeResult.SUCCESS.getCode() != result.getCode()) { + log.error("骞冲彴------>>>>鎺у埗鏌滐細绌鸿皟璁惧鎿嶄綔-鎵ц澶辫触-{}", result.getMessage()); + + // notifyWeb(request.getCompanyId(), OrderRespEnum.ORDER_ERROR, "璁惧鎿嶄綔寮傚父锛氬師鍥狅細" + result.getMessage()); + + return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鎵ц寮傚父锛氬師鍥狅細" + result.getMessage()); + } + + } catch (Exception e) { + log.error("骞冲彴------>>>>鎺у埗鏌滐細绌鸿皟璁惧鎿嶄綔-鍚庣寮傚父-{}", e); + return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), e.getMessage()); + } + + return new DeviceControlResponse(OrderRespEnum.ORDER_SUCCESS); + } + + + @Override + public DeviceControlResponse n2AutoControl(DeviceAutoControlRequest request) { + return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�"); + } + + + /** + * 鑷姩閫氶锛屾櫤鑳芥帶鍒舵煖鎵ц + * + * @param request + * @return + */ + @Override + public DeviceControlResponse airAutoControl(DeviceAutoControlRequest request) { + return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), "褰撳墠鍗忚涓嶆敮鎸佸綋鍓嶆ā寮忥紒"); + } + + /** + * 椤甸潰閫氱煡 + * + * @param companyId + * @param orderResp + * @param notifyMsg + */ + private void notifyWeb(String companyId, OrderRespEnum orderResp, + String notifyMsg) { + notifyWebInvoker.notifyWeb(companyId, orderResp, BizType.AREATION, + notifyMsg); + } + + +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteGasServiceImpl.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteGasServiceImpl.java new file mode 100644 index 0000000..6f10778 --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteGasServiceImpl.java @@ -0,0 +1,78 @@ +package com.ld.igds.protocol.bhzn.verb.command; + +import com.ld.igds.io.RemoteGasService; +import com.ld.igds.io.constant.OrderRespEnum; +import com.ld.igds.io.request.CheckGasRequest; +import com.ld.igds.io.response.GasResponse; +import com.ld.igds.protocol.bhzn.verb.builder.GasCommandBuilder; +import com.ld.igds.protocol.bhzn.verb.builder.GasStopCommandBuilder; +import com.ld.igds.protocol.bhzn.verb.dto.IoMessage; +import com.ld.io.api.InvokeResult; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 姘斾綋閲囬泦鍛戒护瀹炵幇 + */ +@Slf4j +@Component(RemoteGasServiceImpl.BEAN_ID) +public class RemoteGasServiceImpl extends BaseRemoteImpl implements RemoteGasService { + + public static final String BEAN_ID = "bhzn.remoteGasService"; + + + @Override + public GasResponse checkGas(CheckGasRequest request) { + try { + IoMessage message = GasCommandBuilder.getInstance().buildMessage(request); + + InvokeResult result = send(request.getIp(), request.getPort(), + message.getByteMsg()); + + log.error("骞冲彴------>>>>鎺у埗鏌滐細姘斾綋妫�娴�-{}", message.toString()); + + if (InvokeResult.SUCCESS != result) { + log.error("骞冲彴------>>>>鎺у埗鏌滐細姘斾綋妫�娴�-澶辫触{}", result.getMessage()); + return new GasResponse(OrderRespEnum.ORDER_ERROR.getCode(), + "閲囬泦鎵ц澶辫触锛�" + result.getMessage()); + } + + } catch (Exception e) { + log.error("姘斾綋妫�娴嬪紓甯革細{}", e); + return new GasResponse(OrderRespEnum.ORDER_ERROR.getCode(), + "閲囬泦寮傚父锛屽師鍥狅細" + e.getMessage()); + } + return new GasResponse(OrderRespEnum.ORDER_SUCCESS.getCode(), + "姘斾綋閲囬泦鍛戒护鍙戦�佹垚鍔燂紒"); + } + + @Override + public GasResponse stopCheckGas(CheckGasRequest request) { + try { + IoMessage message = GasStopCommandBuilder.getInstance().buildMessage(request); + + InvokeResult result = send(request.getIp(), request.getPort(), + message.getByteMsg()); + + log.error("骞冲彴------>>>>鎺у埗鏌滐細姘斾綋妫�娴�-{}", message.toString()); + + if (InvokeResult.SUCCESS != result) { + log.error("骞冲彴------>>>>鎺у埗鏌滐細姘斾綋妫�娴�-澶辫触{}", result.getMessage()); + return new GasResponse(OrderRespEnum.ORDER_ERROR.getCode(), + "閲囬泦鎵ц澶辫触锛�" + result.getMessage()); + } + + } catch (Exception e) { + log.error("姘斾綋妫�娴嬪紓甯革細{}", e); + return new GasResponse(OrderRespEnum.ORDER_ERROR.getCode(), + "閲囬泦寮傚父锛屽師鍥狅細" + e.getMessage()); + } + return new GasResponse(OrderRespEnum.ORDER_SUCCESS.getCode(), + "姘斾綋閲囬泦鍛戒护鍙戦�佹垚鍔燂紒"); + } + + @Override + public GasResponse checkGasByPoint(CheckGasRequest request) { + return checkGas(request); + } +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteGrainServiceImpl.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteGrainServiceImpl.java new file mode 100644 index 0000000..2a5767c --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemoteGrainServiceImpl.java @@ -0,0 +1,28 @@ +package com.ld.igds.protocol.bhzn.verb.command; + +import com.ld.igds.io.RemoteGrainService; +import com.ld.igds.io.constant.OrderRespEnum; +import com.ld.igds.io.request.CheckGrainRequest; +import com.ld.igds.io.response.DeviceControlResponse; +import com.ld.igds.io.response.GrainResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 褰撳墠鍗忚瀹炵幇锛岀伯鎯呮ā鍧楀懡浠ゆ帴鍙� + * + * @author jiazx + */ +@Slf4j +@Component(RemoteGrainServiceImpl.BEAN_ID) +public class RemoteGrainServiceImpl extends BaseRemoteImpl implements + RemoteGrainService { + + public static final String BEAN_ID = "bhzn.remoteGrainService"; + + @Override + public GrainResponse checkGrain(CheckGrainRequest request) { + + return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�"); + } +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemotePestServiceImpl.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemotePestServiceImpl.java new file mode 100644 index 0000000..946e765 --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/command/RemotePestServiceImpl.java @@ -0,0 +1,35 @@ +package com.ld.igds.protocol.bhzn.verb.command; + +import com.ld.igds.io.RemotePestService; +import com.ld.igds.io.constant.OrderRespEnum; +import com.ld.igds.io.request.CheckPestRequest; +import com.ld.igds.io.response.GrainResponse; +import com.ld.igds.io.response.PestResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 妫�娴嬭櫕瀹� + */ +@Slf4j +@Component(RemotePestServiceImpl.BEAN_ID) +public class RemotePestServiceImpl extends BaseRemoteImpl implements RemotePestService { + + public static final String BEAN_ID = "bhzn.remotePestService"; + + @Override + public PestResponse checkPest(CheckPestRequest request) { + return new PestResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�"); + } + + @Override + public PestResponse stopCheckPest(CheckPestRequest request) { + return new PestResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍗忚涓嶆敮鎸�"); + } + + @Override + public PestResponse checkPestByPoint(CheckPestRequest request) { + return checkPest(request); + } + +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/IoMessage.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/IoMessage.java new file mode 100644 index 0000000..47ec0f8 --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/IoMessage.java @@ -0,0 +1,35 @@ +package com.ld.igds.protocol.bhzn.verb.dto; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +@Data +public class IoMessage { + @JSONField(serialize = false) + private String ip; + @JSONField(serialize = false) + private int port; + private String sn; + private Integer stNum; + private String sign; + private String version; + private Integer cmd; + private String result; + private String orderId; + + private JSONObject content; + @JSONField(serialize = false) + private String contentStr; + + @JSONField(serialize = false) + private String companyId; + @JSONField(serialize = false) + private String strMsg; + @JSONField(serialize = false) + private String begin; + @JSONField(serialize = false) + private String end; + @JSONField(serialize = false) + private byte[] byteMsg; +} \ No newline at end of file diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Req209.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Req209.java new file mode 100644 index 0000000..5fcb885 --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Req209.java @@ -0,0 +1,16 @@ +package com.ld.igds.protocol.bhzn.verb.dto; + +import lombok.Data; + +/** + * 姘斾綋妫�娴嬪懡浠� + */ +@Data +public class Req209 { + + private Integer Start; + /** + * 1-10 0鎴栬�呯┖琛ㄧず鎵�鏈夐�氶亾 + */ + private Integer Channel = 0; +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Req248.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Req248.java new file mode 100644 index 0000000..2407b61 --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Req248.java @@ -0,0 +1,22 @@ +package com.ld.igds.protocol.bhzn.verb.dto; + +import lombok.Data; + +/** + * 璁惧鎺у埗 + */ +@Data +public class Req248 { + + + private Integer WinCount; + private Integer[] Win_Str; + private Integer FanCount; + private Integer[] Fan_Str; + private Integer AirCount; + private Integer[] Air_Str; + private Integer LightCount; + private Integer[] Light_Str; + + +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res209.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res209.java new file mode 100644 index 0000000..30e543d --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res209.java @@ -0,0 +1,24 @@ +package com.ld.igds.protocol.bhzn.verb.dto; + +import lombok.Data; + +/** + * 姘斾綋妫�娴嬭繑鍥� + */ +@Data +public class Res209 { + + private Integer State; + private String Error; + private Integer N2Avage; + private Integer PH3Avage; + private Integer CO2Avage; + private Integer[] N2ValArray; + private Integer[] PH3ValArray; + private Integer[] CO2ValArray; + private Integer[] N2LayAvage; + private Integer[] PH3LayAvage; + private Integer[] CO2LayAvage; + private Integer[] WormVal; + +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res247.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res247.java new file mode 100644 index 0000000..cdde1ca --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res247.java @@ -0,0 +1,36 @@ +package com.ld.igds.protocol.bhzn.verb.dto; + +import com.alibaba.fastjson.JSONArray; +import lombok.Data; + +/** + * 璁惧鐘舵�佽繑鍥� + */ +@Data +public class Res247 { + + private Integer State; + private String Error; + private Integer THCount; + private Integer[] TH_Str; + private Integer WinCount; + private Integer[] Win_Str; + private Integer FanCount; + private Integer[] Fan_Str; + private Integer AirCount; + private Integer[] Air_Str; + private Integer Mode; + private Integer[] Light_Str; + private Integer LightCount; + private Integer GasDev; + private Integer N2Val; + private Integer PH3Val; + private Integer CO2Val; + private Integer N2Avage; + private Integer PH3Avage; + private Integer CO2Avage; + private Integer AirPVal; + private Integer[] ValveSt; + private Integer[] AriSt; + +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res248.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res248.java new file mode 100644 index 0000000..00e7ae2 --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/dto/Res248.java @@ -0,0 +1,15 @@ +package com.ld.igds.protocol.bhzn.verb.dto; + +import lombok.Data; + +/** + * 璁惧鎺у埗 + */ +@Data +public class Res248 { + + private Integer State; + private String Error; + + +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/msg/ReMessageBuilder.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/msg/ReMessageBuilder.java new file mode 100644 index 0000000..bf71521 --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/msg/ReMessageBuilder.java @@ -0,0 +1,35 @@ +package com.ld.igds.protocol.bhzn.verb.msg; + +import com.ld.igds.protocol.bhzn.verb.dto.IoMessage; +import com.ld.igds.util.BytesUtil; + +/** + * 鏍规嵁鎺ユ敹鍒扮殑淇℃伅杩涜灏佽 + * + * @author vince + */ +public class ReMessageBuilder { + + + public final static String ERROR_TAG = "3CF6"; + public static double FAULT_CHECK_TAG = 85.0; + public static double MAX_TEMP = -50.0; + public static double MIN_TEMP = 50.0; + private final static ReMessageBuilder instance = new ReMessageBuilder(); + + private ReMessageBuilder() { + } + + public static ReMessageBuilder getInstance() { + return instance; + } + + /** + * @param message + * @return + */ + public IoMessage buildMessage(String message) throws Exception { + IoMessage ioMessage = new IoMessage(); + return ioMessage; + } +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/package-info.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/package-info.java new file mode 100644 index 0000000..82aed49 --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/package-info.java @@ -0,0 +1,4 @@ +/** + * 閭︽捣鎺у埗鏌滃崗璁� + */ +package com.ld.igds.protocol.bhzn.verb; \ No newline at end of file diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbHeartbeatImpl.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbHeartbeatImpl.java new file mode 100644 index 0000000..0588072 --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbHeartbeatImpl.java @@ -0,0 +1,43 @@ +package com.ld.igds.protocol.bhzn.verb.server; + + +import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerUtils; +import com.ld.io.api.HeartbeatProvider; +import com.ld.io.api.IoSession; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 鎻愪緵蹇冭烦淇℃伅 + * + * @author Andy + */ +@Slf4j +@Service +public class BhznVerbHeartbeatImpl implements HeartbeatProvider { + + @Override + public byte[] provide(IoSession session) { + + + //鐩存帴鏍规嵁涓绘満SESSIOn鍒ゆ柇 + //IoSession session1 = BhznVerbServerUtils.getSession(); + + Long lastBeatTime = BhznVerbServerUtils.getHearBeat(session); + + if (null == lastBeatTime) { + return null; + } + + //濡傛灉鏈�鍚庝竴娆$粓绔績璺虫椂闂磋窛绂诲綋鍓嶆椂闂村ぇ浜� 缁堢蹇冭烦鏃堕棿鐨�3娆★紝鍒欏垽鏂负绂荤嚎 + long deTime = System.currentTimeMillis() - lastBeatTime; + + if (deTime > (BhznVerbServerUtils.HEART_BEAT_TIME * 3 * 1000)) { + log.info("-----------瓒呰繃{}绉掓湭鑾峰彇鍒板績璺充俊鎭紝鍒ゅ畾缁堢绂荤嚎锛岃涪鍑鸿繛鎺�------------{}-{}", deTime, session.getAddress(), session.getPort()); + + session.destroy(); + } + + return null; + } +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbMessageConsumer.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbMessageConsumer.java new file mode 100644 index 0000000..a358996 --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbMessageConsumer.java @@ -0,0 +1,88 @@ +package com.ld.igds.protocol.bhzn.verb.server; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; +import com.ld.igds.protocol.bhzn.verb.analysis.AnalysisService; +import com.ld.igds.protocol.bhzn.verb.dto.IoMessage; +import com.ld.igds.protocol.bhzn.verb.msg.ReMessageBuilder; +import com.ld.igds.util.BytesUtil; +import com.ld.igds.util.ContextUtil; +import com.ld.igds.util.SpringUtil; +import com.ld.io.api.IoMsgConsumer; +import com.ld.io.api.IoSession; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import static com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerUtils.CHARSET; + +/** + * + */ +@Slf4j +@Service +public class BhznVerbMessageConsumer implements IoMsgConsumer { + + + @Autowired + private AnalysisService analysisService; + + /** + * 澶勭悊娑堟伅 + * + * @param session + * @param bytes + */ + @Override + public void consume(IoSession session, byte[] bytes) { + if (null == bytes) { + log.error("Reply bytes is null"); + return; + } + //娣诲姞淇℃伅蹇冭烦鏍囪 + BhznVerbServerUtils.addHeartBeat(session); + IoMessage reMessage = null; + try { + String message = new String(bytes, CHARSET); + message = message.substring(message.indexOf(BhznVerbServerUtils.MSG_START1) + BhznVerbServerUtils.MSG_START1.length()); + log.info("銆�"+session.getAddress()+"銆戞帶鍒舵煖------>>>>骞冲彴锛�"+message); + reMessage = JSON.parseObject(message, IoMessage.class); + JSONObject jsonObject = JSON.parseObject(message); + reMessage.setContentStr(jsonObject.getString("content")); + if (StringUtils.isEmpty(reMessage.getSn()) || + reMessage.getStNum()== null || + reMessage.getCmd() == null) { + log.error("鎺у埗鏌�------>>>>骞冲彴锛氭姤鏂囦俊鎭笉瀹屾暣锛屼笉鍋氳В鏋�-IP={}锛宲ort={}锛宮sg={}", session.getAddress(), session.getPort(), message); + return; + } + + //鏍规嵁SN鑾峰彇缁勭粐缂栫爜 + String companyId = ContextUtil.getCompanyIdBySn(reMessage.getSn()); + if (null == companyId) { + log.error("鎺у埗鏌�------>>>>骞冲彴锛氭姤鏂囦俊鎭笉瀹屾暣锛屽綋鍓嶅垎鏈虹郴缁熸湭娉ㄥ唽锛屼笉鍋氳В鏋�-IP={}锛宲ort={}锛宮sg={}", session.getAddress(), session.getPort(), message); + return; + } + + reMessage.setCompanyId(companyId); + reMessage.setIp(session.getAddress()); + reMessage.setPort(session.getPort()); + reMessage.setStrMsg(message); + session.setCompanyId(companyId); + + log.info("鎺у埗鏌�------>>>>骞冲彴锛欼P={}锛孭ORT={}锛宮essage={}", reMessage.getIp(), reMessage.getPort(), message); + + } catch (Exception e) { + log.error("鎺у埗鏌�------>>>>骞冲彴锛氭敹鍒版姤鏂囪В鏋愬紓甯革細{}" , e.getMessage()); + log.error(e.getMessage(),e); + e.printStackTrace(); + } + + //璋冪敤瑙f瀽鎺ュ彛寮�濮嬭В鏋� + if (null == analysisService) { + analysisService = (AnalysisService) SpringUtil.getBean(AnalysisService.BEAN_ID); + } + analysisService.analysis(reMessage); + } +} \ No newline at end of file diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbServerEngine.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbServerEngine.java new file mode 100644 index 0000000..2188f0c --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbServerEngine.java @@ -0,0 +1,118 @@ +package com.ld.igds.protocol.bhzn.verb.server; + +import com.ld.io.api.*; +import com.ld.io.netty.NettyServer; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Desc: 閭︽捣鏅鸿兘绾伯鎯呭崗璁� + * @author: Andy + * @update-time: 2023/5/11 + */ +@Slf4j +@Service +public class BhznVerbServerEngine { + + public static final Integer PORT = 9310; + + @Autowired + private BhznVerbMessageConsumer defaultMessageConsumer; + @Autowired + private BhznVerbSessionListener defaultSessionListener; + // 蹇冭烦鎻愪緵 + private static HeartbeatProvider heartbeatProvider = new BhznVerbHeartbeatImpl(); + + private IoSessionQuery sessionQuery; + + public void start(Integer port) { + IoServerOption ioServerOption = new IoServerOption(); + + if (null != port) { + ioServerOption.setPort(port); + } else { + ioServerOption.setPort(PORT); + } + + //纭缁撳熬鏍囧織 + ioServerOption.setDelimiter(BhznVerbServerUtils.MSG_END.getBytes()); + + // 閰嶇疆绯荤粺蹇冭烦闂撮殧 + ioServerOption.setReaderIdleTime(5 * 60); + + NettyServer ioServer = new NettyServer(ioServerOption, defaultMessageConsumer, defaultSessionListener, heartbeatProvider); + ioServer.startup(); + + sessionQuery = ioServer.getSessionQuery(); + + + log.info("* "); + log.info("* ========================"); + log.info("* "); + log.info("* [VERB-SERVER锛欱HZN_VERB,PORT={}]", PORT); + log.info("* "); + log.info("* ========================"); + log.info("* "); + + System.out.println("* ========================"); + System.out.println("* "); + System.out.println("* [VERB-SERVER锛欱HZN_VERB,PORT={}]" + port); + System.out.println("* "); + System.out.println("* ========================"); + } + + public IoSessionQuery getSessionQuery() { + return sessionQuery; + } + + /** + * 鍙戦�佷俊鎭� + * + * @param ip + * @param port + * @param msg + * @return + */ + public InvokeResult push(String ip, int port, byte[] msg) { + IoSessionQuery sessionFactory = getSessionQuery(); + List<IoSession> sessions = sessionFactory.getAllSession(); + IoSession session = null; + for (IoSession ioSession : sessions) { + if (BhznVerbServerUtils.getServerKey(ip, port).equals(ioSession.getBusinessKey())) { + session = ioSession; + break; + } + } + if (null == session) { + return InvokeResult.CHANNEL_CLOSED; + } + return session.invoke(msg); + } + + +// public InvokeResult push(String ip, int port, String hexStr) { +// +// byte[] msg = BytesUtil.hexStrToBytes(hexStr); +// +// IoSessionQuery sessionFactory = getSessionQuery(); +// List<IoSession> sessions = sessionFactory.getAllSession(); +// IoSession session = null; +// for (IoSession ioSession : sessions) { +// if (BhznGrainV1ServerUtils.getServerKey(ip, port).equals(ioSession.getBusinessKey())) { +// session = ioSession; +// break; +// } +// } +// +// if (null == session) { +// return InvokeResult.CHANNEL_CLOSED; +// } +// return session.invoke(msg); +// } + + + +} \ No newline at end of file diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbServerUtils.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbServerUtils.java new file mode 100644 index 0000000..d72ee37 --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbServerUtils.java @@ -0,0 +1,127 @@ +package com.ld.igds.protocol.bhzn.verb.server; + + +import com.ld.igds.util.BytesUtil; +import com.ld.igds.util.ContextUtil; +import com.ld.io.api.IoSession; + +import java.util.HashMap; +import java.util.Map; + +/** + * 宸ュ叿绫� + * + * @author vince + */ +public class BhznVerbServerUtils { + + + /** + * 璁惧鐘舵�佽繑鍥炵殑缁撴灉 KEY= serId + "_STATUS_" + deviceId value = 缁撴灉鐘舵�� + */ + private static Map<String, String> contextStatusMap = new HashMap<>(); + + + /** + * 璁惧瑙f瀽鍚庣殑瑁呮硶瀛樻斁 + * + * @param serId + * @param passcode 璁惧閫氶亾ID + * @param status + */ + public static void add2StatusMap(String companyId, String serId, String passcode, String status) { + contextStatusMap.put(ContextUtil.buildDeviceStatusKey(companyId, serId, passcode), status); + } + public static void add2StatusMap(String companyId, String serId, int passcode, String status) { + contextStatusMap.put(ContextUtil.buildDeviceStatusKey(companyId, serId, passcode), status); + } + public static Map<String, String> getStatusMap() { + return contextStatusMap; + } + /** + * 璁板綍姣忎釜杩炴帴鐨勬渶鍚庝竴娆′俊鎭椂闂� key = 杩炴帴鐨凨YE锛宒ata =褰撳墠鏃堕棿鎴� + */ + public static Map<String, Long> contextMapHeart = new HashMap<>(); + + public static Map<String, IoSession> contextIoSession = new HashMap<>(); + + + public static int HEART_BEAT_TIME = 30;//蹇冭烦闂撮殧鏃堕棿 + + + public static String MSG_START = "3C42485A4E3E";//<BHZN> + public static String MSG_START1 = "<BHZN>";//<BHZN> + public static String MSG_START2 = "AA"; + public static String MSG_END = "<END>";//<END> + public static String MSG_END_16 = "3C454E443E";//<END> + public static final String CHARSET = "UTF-8"; + + + /** + * 閽堝鏃犵嚎绮儏涓绘満鐨勯粯璁D閰嶇疆 + */ + public static String DEFAULT_MAC_ID = "53681"; + + public static String FUNCTION_ID_00 = "00"; + public static String FUNCTION_ID_F1 = "F1"; + public static String FUNCTION_ID_F2 = "F2"; + public static String FUNCTION_ID_83 = "83"; + public static String FUNCTION_ID_93 = "93"; + public static String FUNCTION_ID_92 = "92"; + + + /** + * 鐢熸垚TCP杩炴帴鐨凨EY + * + * @param ip + * @param port + * @return + */ + public static String getServerKey(String ip, Integer port) { + return ip + ":" + port; + } + + + /** + * 娣诲姞鏈�鏂板績璺虫椂闂存埑 + * + * @param session + */ + public static void addHeartBeat(IoSession session) { + contextMapHeart.put(getServerKey(session.getAddress(), session.getPort()), System.currentTimeMillis()); + } + + public static Long getHearBeat(IoSession session) { + return contextMapHeart.get(getServerKey(session.getAddress(), session.getPort())); + } + + + /** + * 璁$畻鏍¢獙 + * + * @param content + * @return + */ + public static String getCheck(String content) { + int start = BhznVerbServerUtils.MSG_START.length() + BhznVerbServerUtils.MSG_START2.length(); + content = content.substring(start); + int sum = 0; + String hex; + for (int i = 0; i < content.length() / 2; i++) { + hex = content.substring(i * 2, i * 2 + 2); + sum += BytesUtil.hexToInt(hex); + } + String hexSum = BytesUtil.intToHexStr(sum); + int check = BytesUtil.hexToInt(hexSum.substring(hexSum.length() - 2)); + + return BytesUtil.intToHexStr(256 - check).substring(2); + } + +// public static void addSession(IoSession session) { +// contextIoSession.put(DEFAULT_MAC_ID, session); +// } +// +// public static IoSession getSession() { +// return contextIoSession.get(DEFAULT_MAC_ID); +// } +} diff --git a/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbSessionListener.java b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbSessionListener.java new file mode 100644 index 0000000..51928a7 --- /dev/null +++ b/igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbSessionListener.java @@ -0,0 +1,65 @@ +package com.ld.igds.protocol.bhzn.verb.server; + +import com.ld.igds.common.CoreSerService; +import com.ld.io.api.IoSession; +import com.ld.io.api.IoSessionListener; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * + */ +@Slf4j +@Service +public class BhznVerbSessionListener implements IoSessionListener { + + @Autowired + private CoreSerService coreSerService; + + /** + * 璁惧鍒涘缓鍦ㄧ嚎锛岄渶瑕佹敞鎰忓綋鍓嶄娇鐢ㄤ富鏈烘ā寮忥紝涓绘満涓婄嚎榛樿鎵�鏈夌浉鍚孲N閰嶇疆鐨勫垎鏈哄叏閮ㄤ笂绾� + * + * @param session + */ + @Override + public void onCreate(IoSession session) { + +// //娣诲姞鍒板唴瀛� +// BhznVerbServerUtils.addSession(session); + + log.info("++++鏂板缓杩炴帴++++-IP={}锛孭ORT={}", session.getAddress(), session.getPort()); + + // 娣诲姞鑷畾涔変笟鍔D + session.setBusinessKey(BhznVerbServerUtils.getServerKey(session.getAddress(), session.getPort())); + + //椤圭洰閲囩敤鏃犵嚎涓绘満妯″紡锛岀洿鎺ヨ幏鍙栭粯璁よ澶� + // DeviceSer deviceSer = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), BhznGrainV1ServerUtils.DEFAULT_MAC_ID); + + //if (null == deviceSer) return; + + //coreSerService.onlineBySn(session.getAddress(), session.getPort(), deviceSer.getSn(), Constant.YN_Y); + //鏇存柊缂撳瓨 + // coreSerService.refreshCache(deviceSer.getCompanyId()); + } + + /** + * 娉ㄦ剰锛屽綋鍓嶉噰鐢ㄤ富鏈烘ā寮忥紝涓绘満绂荤嚎鎵�鏈夌浉鍚孲N閰嶇疆鐨勫垎鏈哄叏閮ㄧ绾� + * + * @param session + */ + @Override + public void onDestroy(IoSession session) { + log.info("----杩炴帴鏂紑-----IP={}锛孭ORT={}", session.getAddress(), session.getPort()); + +// //椤圭洰閲囩敤鏃犵嚎涓绘満妯″紡锛岀洿鎺ヨ幏鍙栭粯璁よ澶� +// DeviceSer deviceSer = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), BhznGrainV1ServerUtils.DEFAULT_MAC_ID); +// +// if (null == deviceSer) return; + + //鐢变簬璁惧鎺夌嚎鍚庤嚜鍔ㄨ皟鏁� +// coreSerService.onlineBySn(session.getAddress(), session.getPort(), deviceSer.getSn(), Constant.YN_N); +// //鏇存柊缂撳瓨 +// coreSerService.refreshCache(deviceSer.getCompanyId()); + } +} diff --git a/igds-protocol-fzzy3/src/main/java/com/ld/igds/protocol/fzzy/CRC16Util.java b/igds-protocol-fzzy3/src/main/java/com/ld/igds/protocol/fzzy/CRC16Util.java index 30e1078..26e600e 100644 --- a/igds-protocol-fzzy3/src/main/java/com/ld/igds/protocol/fzzy/CRC16Util.java +++ b/igds-protocol-fzzy3/src/main/java/com/ld/igds/protocol/fzzy/CRC16Util.java @@ -169,7 +169,7 @@ public static void main(String[] args) { int i = calcCrc16(BytesUtil.hexStrToBytes("01050046000001")); - - System.out.println(BytesUtil.intToHexStr(i)); + String s = "<BHZN>"; + System.out.println(s.length()); } } \ No newline at end of file diff --git a/igds-web/src/main/resources/static/img/aerial-5324_001.png b/igds-web/src/main/resources/static/img/aerial-5324_001.png new file mode 100644 index 0000000..04cddbd --- /dev/null +++ b/igds-web/src/main/resources/static/img/aerial-5324_001.png Binary files differ diff --git a/igds-web/src/main/resources/static/img/areation/5324/pfc_a.png b/igds-web/src/main/resources/static/img/areation/5324/pfc_a.png new file mode 100644 index 0000000..8fa743b --- /dev/null +++ b/igds-web/src/main/resources/static/img/areation/5324/pfc_a.png Binary files differ diff --git a/igds-web/src/main/resources/static/img/areation/5324/pfc_b.png b/igds-web/src/main/resources/static/img/areation/5324/pfc_b.png new file mode 100644 index 0000000..8fa743b --- /dev/null +++ b/igds-web/src/main/resources/static/img/areation/5324/pfc_b.png Binary files differ diff --git a/igds-web/src/main/resources/verb-conf.properties b/igds-web/src/main/resources/verb-conf.properties index 1603509..2bc21bb 100644 --- a/igds-web/src/main/resources/verb-conf.properties +++ b/igds-web/src/main/resources/verb-conf.properties @@ -147,3 +147,30 @@ ## 5322_001 广东徐闻 verb.mapImg.5322_001.a=default_pfc_a.png verb.mapImg.5322_001.b=default_pfc_b.png + + +## 5322_001 广东徐闻 +verb.mapImg.5324_001.a=default_pfc_a.png +verb.mapImg.5324_001.b=default_pfc_b.png +verb.mapImg.5324_1.a=pfc_a.png +verb.mapImg.5324_1.b=pfc_b.png +verb.mapImg.5324_2.a=pfc_a.png +verb.mapImg.5324_2.b=pfc_b.png +verb.mapImg.5324_3.a=pfc_a.png +verb.mapImg.5324_3.b=pfc_b.png +verb.mapImg.5324_4.a=pfc_a.png +verb.mapImg.5324_4.b=pfc_b.png +verb.mapImg.5324_5.a=pfc_a.png +verb.mapImg.5324_5.b=pfc_b.png +verb.mapImg.5324_6.a=pfc_a.png +verb.mapImg.5324_6.b=pfc_b.png +verb.mapImg.5324_7.a=pfc_a.png +verb.mapImg.5324_7.b=pfc_b.png +verb.mapImg.5324_8.a=pfc_a.png +verb.mapImg.5324_8.b=pfc_b.png +verb.mapImg.5324_9.a=pfc_a.png +verb.mapImg.5324_9.b=pfc_b.png +verb.mapImg.5324_10.a=pfc_a.png +verb.mapImg.5324_10.b=pfc_b.png +verb.mapImg.5324_11.a=pfc_a.png +verb.mapImg.5324_11.b=pfc_b.png \ No newline at end of file -- Gitblit v1.9.3