From eb5a6e5a54efa997971beffc909bcadc06dc8886 Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期一, 21 四月 2025 10:45:16 +0800 Subject: [PATCH] 1、江海测试系统设备类型默认为阀; 2、完善通信中间件测试消息推送代码; 3、增加队列数据结构注释; 4、121服务器相关的初始化配置文件bug修改; 5、其他注释完善。 --- pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java | 296 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 296 insertions(+), 0 deletions(-) diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java new file mode 100644 index 0000000..f50db60 --- /dev/null +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java @@ -0,0 +1,296 @@ +package com.dy.rtuMw.web.com; + +import com.dy.common.softUpgrade.state.UpgradeTaskVo; +import com.dy.common.webUtil.ResultCodeMsg; +import com.dy.rtuMw.resource.ResourceUnit; +import com.dy.rtuMw.server.ServerProperties; +import com.dy.rtuMw.server.forTcp.TcpSessionCache; +import com.dy.rtuMw.server.local.CommandInnerDeaLer; +import com.dy.rtuMw.server.local.ReturnCommand; +import com.dy.rtuMw.server.msCenter.MsCenterUnit; +import com.dy.rtuMw.server.tasks.WebDownComTask; +import com.dy.common.mw.core.CoreUnit; +import com.dy.common.mw.protocol.Command; +import com.dy.common.mw.protocol.CommandType; +import com.dy.common.webUtil.BaseResponse; +import com.dy.common.webUtil.BaseResponseUtils; +import com.dy.rtuMw.server.upgrade.UpgradeUnit; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; + +import java.io.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + + +/** + * @Author liurunyu + * @Date 2023/12/21 13:58 + * @LastEditTime 2023/12/21 13:58 + * @Description 鍛戒护鎺ユ敹 + */ +@Slf4j +@RestController +@RequestMapping(path="com") +@SuppressWarnings("unchecked")//java鐗堟湰瓒婇珮锛屽娉涘瀷绾︽潫瓒婁弗锛屾墍浠ラ厤缃甋uppressWarnings("unchecked") +public class CommandCtrl { + + @GetMapping(path = "test") + public BaseResponse<String> test(){ + return BaseResponseUtils.buildSuccess("ok"); + } + + /** + * 涓嬭浇鎺у埗鍣紙RTU锛変笂涓嬭鏁版嵁鐨刲og鏃ュ織鏂囦欢 + * @param rtuAddr + * @param req + * @param rep + */ + @GetMapping("/rtuLogFile") + public void rtuLogFile(String rtuAddr, HttpServletRequest req, HttpServletResponse rep){ + File logFile = ResourceUnit.getInstance().getLogFile(rtuAddr + ".log") ; + if(logFile != null && logFile.exists()){ + //鍦⊿pring Boot涓紝application/octet-stream;charset=UTF-8閫氬父琛ㄧず鍝嶅簲鐨勫唴瀹规槸瀛楄妭娴侊紝 + //骞朵笖瀛楃闆嗘槸UTF-8銆傚浜庤繖绉嶇被鍨嬬殑鍝嶅簲锛孲pring Boot榛樿浣跨敤ByteArrayHttpMessageConverter鏉ュ鐞嗭紝 + //鍥犱负瀹冨彲浠ュ鐞嗘墍鏈塧pplication/octet-stream绫诲瀷鐨勫搷搴斻�� + //鐒惰�岋紝ByteArrayHttpMessageConverter骞朵笉鐩存帴澶勭悊瀛楃闆嗭紙charset锛夈�� + //瀛楃闆嗛�氬父鐢ㄤ簬鏂囨湰鍐呭锛岃�宎pplication/octet-stream閫氬父鐢ㄤ簬浜岃繘鍒跺唴瀹癸紝鍥犳鍦ㄨ繖绉嶆儏鍐典笅鎸囧畾瀛楃闆嗗彲鑳芥槸涓嶅悎閫傜殑銆� + //涓嶈繃锛屽鏋滀綘纭疄闇�瑕佸鐞嗗甫鏈夌壒瀹氬瓧绗﹂泦鐨刟pplication/octet-stream鍝嶅簲锛屼綘鍙兘闇�瑕佽嚜瀹氫箟HttpMessageConverter銆� + rep.addHeader("content-type", "application/octet-stream;charset=UTF-8"); + rep.addHeader("Content-Disposition", "attachment;fileName=" + (rtuAddr + ".log")) ; + ServletOutputStream out = null; + FileInputStream in = null ; + try { + out = rep.getOutputStream() ; + } catch (Exception ee) { + out = null ; + }finally{ + if(out != null){ + byte[] bs = new byte[1024] ; + int len = -1 ; + try { + in = new FileInputStream(logFile); + len = in.read(bs) ; + while(len != -1){ + out.write(bs, 0, len); + len = in.read(bs) ; + } + } catch (Exception eee) { + } finally { + if(out != null){ + try{ + out.flush(); + out.close(); + }catch(Exception e){ + }finally{ + if(in != null){ + try{ + in.close(); + }catch(Exception e){ + } + } + } + } + } + } + } + } + } + /** + * 涓嬭浇鎺у埗鍣紙RTU锛変笂涓嬭鏁版嵁鐨刲og鏃ュ織鏂囦欢 + * @param rtuAddr + */ + @GetMapping("/rtuLogText") + public BaseResponse<List<String>> rtuLogText(String rtuAddr){ + List<String> list ; + File logFile = ResourceUnit.getInstance().getLogFile(rtuAddr + ".log") ; + if(logFile != null && logFile.exists()){ + BufferedReader reader = null ; + try { + reader = new BufferedReader(new FileReader(logFile)) ; + //鏂扮殑瀹炵幇鏂规硶 + Stream<String> linesStream = reader.lines() ; + //list = linesStream.toList() ; //鎸夊師鏉ラ『搴� + list = linesStream.sorted(Comparator.reverseOrder()).collect(Collectors.toList()) ;//鍊掑簭 + /* 鍘熸潵鐨勫疄鐜版柟娉� + list = new ArrayList() ; + String line ; + while((line = reader.readLine()) != null){ + list.add(line) ; + } + */ + return BaseResponseUtils.buildSuccess(list); + } catch (Exception e) { + list = new ArrayList() ; + list.add("璇诲彇鎺у埗鍣紙" + rtuAddr + "锛夌殑鏃ュ織鏂囦欢寮傚父锛�" + (e.getMessage() == null?"":("锛�" + e.getMessage()))) ; + return BaseResponseUtils.buildSuccess(list); + }finally{ + if(reader != null){ + try{ + reader.close(); + }catch(Exception e){ + } + } + } + }else{ + list = new ArrayList() ; + list.add("鏈緱鍒版帶鍒跺櫒锛�" + rtuAddr + "锛夌殑鏃ュ織鏂囦欢") ; + return BaseResponseUtils.buildSuccess(list); + } + } + + + /** + * 娉ㄥ唽娑堟伅鎺ユ敹鑰� + * @param msReceiverWebUrl 娑堟伅鎺ユ敹鑰厀eb http post url + * @return + */ + @GetMapping("/registerMsReceiverWebUrl") + public BaseResponse<Boolean> registerMsReceiverWebUrl(String msReceiverWebUrl){ + try{ + MsCenterUnit.getInstance().registerMsReceiver(msReceiverWebUrl); + }catch (Exception e){ + log.error("娉ㄥ唽娑堟伅鎺ユ敹鑰呮椂鍙戠敓寮傚父", e); + return BaseResponseUtils.buildError("娉ㄥ唽娑堟伅鎺ユ敹鑰呮椂鍙戠敓寮傚父" + (e.getMessage() == null?"":("锛�" + e.getMessage()))); + } + return BaseResponseUtils.buildSuccess(true); + } + + /** + * 鎺ユ敹web绯荤粺鍙戞潵鍗囩骇浠诲姟 + * @param vo + * @return + */ + @PostMapping(path = "upgradeRtu", consumes = MediaType.APPLICATION_JSON_VALUE) + public BaseResponse<Boolean> upgradeRtu(@RequestBody UpgradeTaskVo vo) { + log.info("鏀跺埌RTU鍗囩骇浠诲姟锛歕n" + vo.toString()) ; + try{ + UpgradeUnit.getInstance().setUpgradeTask(vo); + }catch (Exception e){ + log.error("璁剧疆RTU鍗囩骇浠诲姟鏃跺彂鐢熷紓甯�", e); + return BaseResponseUtils.buildError("璁剧疆RTU鍗囩骇浠诲姟鏃跺彂鐢熷紓甯�" + (e.getMessage() == null?"":("锛�" + e.getMessage()))); + } + return BaseResponseUtils.buildSuccess(true); + } + + /** + * 鎺ユ敹web绯荤粺鍙戞潵寮哄埗缁撴潫鍗囩骇浠诲姟 + * @return + */ + @GetMapping(path = "ugForceOver") + public BaseResponse<String> ugForceOver() { + log.info("鏀跺埌鍋滄RTU鍗囩骇浠诲姟鍛戒护") ; + try{ + String mes = UpgradeUnit.getInstance().forceOverUpgradeTask(); + if(mes == null){ + mes = "鍋滄鍗囩骇浠诲姟鎴愬姛" ; + return BaseResponseUtils.buildResult(ResultCodeMsg.RsCode.SUCCESS_CODE, mes, mes); + }else{ + return BaseResponseUtils.buildResult(ResultCodeMsg.RsCode.FAIL_CODE, mes, mes); + } + }catch (Exception e){ + log.error("鍋滄RTU鍗囩骇浠诲姟鏃跺彂鐢熷紓甯�", e); + return BaseResponseUtils.buildError("鍋滄RTU鍗囩骇浠诲姟鏃跺彂鐢熷紓甯�" + (e.getMessage() == null?"":("锛�" + e.getMessage()))); + } + } + + /** + * 鎺ユ敹web绯荤粺鍙戞潵鐨勫懡浠� + * @param com + * @return + */ + @PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE) + public BaseResponse<Command> send(@RequestBody Command com) { + log.info("鏀跺埌web绯荤粺鍙戞潵鐨勫懡浠わ細\n" + com.toString()) ; + + String commandType = com.getType() ; + if(commandType == null){ + return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛屾敹鍒板懡浠ょ殑鍛戒护绫诲瀷涓虹┖锛�", com.getId(), com.getCode())); + } + String commandId = com.getId() ; + if(commandId == null){ + return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛屾敹鍒板懡浠ょ殑鍛戒护ID涓虹┖锛�",null, com.getCode())); + } + + String code = com.getCode() ; + if(code == null){ + return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛屾敹鍒板懡浠ょ殑鍛戒护鍔熻兘鐮佷负绌猴紒", com.getId(), null)); + } + + if(commandType.equals(CommandType.innerCommand)){ + //閫氫俊涓棿浠跺唴閮ㄥ懡浠わ紝渚嬪鏌ヨ鐩戞帶涓棿浠舵椂閽燂紝鏌ヨRTU鍦ㄧ嚎鎯呭喌绛� + try{ + Command reCom = new CommandInnerDeaLer().deal(com) ; + return BaseResponseUtils.buildSuccess(reCom); + }catch(Exception e){ + return BaseResponseUtils.buildError(ReturnCommand.errored("澶勭悊鍐呴儴鍛戒护鍑洪敊" + (e.getMessage() == null?"":("锛�" + e.getMessage())), com.getId(), com.getCode()) ); + } + }else if(commandType.equals(CommandType.outerCommand)){ + //鍙戝悜RTU鐨勫閮ㄥ懡浠わ紝寮傛澶勭悊锛寃eb绔痡roups鎴愬憳鍚屾寰楀埌鍛戒护澶勭悊缁撴灉锛屼絾鏋勯�犲懡浠ゅ強涓嬪彂鍛戒护鍜屽懡浠ょ粨鏋滄帴鏀惰寮傛寰楀埌 + try{ + return this.dealOuterCommand(com) ; + }catch(Exception e){ + return BaseResponseUtils.buildError(ReturnCommand.errored("澶勭悊鍙戝悜RTU鐨勫閮ㄥ懡浠ゅ嚭閿�" + (e.getMessage() == null?"":("锛�" + e.getMessage())), com.getId(), com.getCode()) ); + } + }else if(commandType.equals(CommandType.resultCommand)){ + return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛岄�氫俊涓棿浠朵笉鎺ョ粨鏋滅被鍨嬬殑鍛戒护锛�", com.getId(), com.getCode())); + }else{ + return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛屾敹鍒板懡浠ょ殑鍛戒护鍔熻兘鐮佷负绌猴紒", com.getId(), com.getCode())); + } + } + + /** + * 鏈湴璋冪敤锛屼緥濡備换鍔℃爲涓煇涓换鍔′笅鍙戠殑鍛戒护锛堝娓呯┖鍛戒护锛� + * @param com + * @return + */ + public BaseResponse<Command> sendOutComFromLocal(Command com) { + try{ + return this.dealOuterCommand(com) ; + }catch(Exception e){ + return BaseResponseUtils.buildError(ReturnCommand.errored("澶勭悊鍙戝悜RTU鐨勫閮ㄥ懡浠ゅ嚭閿�" + (e.getMessage() == null?"":("锛�" + e.getMessage())), com.getId(), com.getCode()) ); + } + } + + + /** + * 澶勭悊鍙戝悜RTU鐨勫閮ㄥ懡浠� + * @return 缁撴灉 + */ + private BaseResponse<Command> dealOuterCommand(Command command){ + String rtuAddr = command.getRtuAddr() ; + if(rtuAddr == null || rtuAddr.trim().equals("")){ + return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛孯TU鍦板潃涓虹┖锛�", command.getId(), command.getCode())) ; + } + rtuAddr = rtuAddr.trim() ; + Boolean onLine = TcpSessionCache.isConnect(rtuAddr); + if(onLine == null){ + return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛孯TU锛堝湴鍧�=" + rtuAddr + "锛夋湭涓婄嚎锛�", command.getId(), command.getCode())) ; + }else if(!onLine.booleanValue()){ + if(!ServerProperties.isLowPower){ + return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛孯TU锛堝湴鍧�=" + rtuAddr + "锛夌绾匡紒", command.getId(), command.getCode())) ; + } + } + + //鐢熸垚寮傛浠诲姟 + WebDownComTask task = new WebDownComTask() ; + task.data = command ; + try{ + log.info("鏋勯�犱笅鍙戣繙绋嬪懡浠�" + command.getCode() + "鐨勬牳蹇冧换鍔★紝骞舵斁鍏ヤ换鍔¢槦鍒椾腑"); + CoreUnit.getInstance().pushCoreTask(task); + }catch(Exception e){ + log.error(e.getMessage(), e); + return BaseResponseUtils.buildError(ReturnCommand.successed("鍛戒护澶勭悊澶辫触" + e.getMessage(), command.getId(), command.getCode())) ; + } + + return BaseResponseUtils.buildSuccess(ReturnCommand.successed("鍛戒护宸叉帴鍙楋紝鍗冲皢鏋勯�犲苟涓嬪彂鍛戒护銆�", command.getId(), command.getCode())); + } + +} -- Gitblit v1.8.0