From c42614978ff12013a1eabebd0289b27169a5784f Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期二, 06 五月 2025 17:25:56 +0800 Subject: [PATCH] 1、实现万功能token(0000-0000-1234-9876-5); 2、web端单独实现命令结果等待器,并相应修改相关部分; 3、web端实现透传命令; 4、修改一些不当注释; 5、优化一些代码。 --- pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java | 10 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/ReturnCommand.java | 24 +- pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/DataV1.java | 2 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransDto.java | 24 ++ pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/Web2RtuMw.java | 62 +++--- pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Data.java | 2 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransParam.java | 16 + pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java | 11 pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java | 12 + pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java | 2 pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml | 1 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandResultCtrl.java | 9 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/CommandSv.java | 146 ++++++++++++++++ pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransCtrl.java | 135 ++++++++++++++ pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransSv.java | 45 +++- pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComResultWait.java | 28 +++ 16 files changed, 453 insertions(+), 76 deletions(-) diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Data.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Data.java index fae4d48..1752c65 100644 --- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Data.java +++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Data.java @@ -18,7 +18,7 @@ public String protocol ;//鏁版嵁鎵�瀵瑰簲鐨勫崗璁悕绉� public Short protocolVer;//鏁版嵁鎵�瀵瑰簲鐨勫崗璁増鏈彿锛�1~255锛� public String code ;//鏁版嵁鎵�瀵瑰簲鐨勫姛鑳界爜: - public Object subData ;//瀵瑰簲鍚勪釜鍔熻兘鐮佺殑鍏蜂綋鏁版嵁 + public Object subData ;//瀵瑰簲鍚勪釜鍗忚鏁版嵁 public String hex ;//涓婃姤鏁版嵁鐨勫崄鍏繘鍒� public String toString() { diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/DataV1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/DataV1.java index d8b5251..23e3ef1 100644 --- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/DataV1.java +++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/DataV1.java @@ -9,7 +9,7 @@ public String rtuAddr ;//RtuAddr - public Object subData ; + public Object subData ;//鍔熻兘鐮佹暟鎹� public String dt ;//閫氫俊涓棿浠朵骇鐢熺殑鏀舵姤鏃堕棿(yyyy-MM-dd hh:mm:ss) diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComResultWait.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComResultWait.java new file mode 100644 index 0000000..8cd8151 --- /dev/null +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComResultWait.java @@ -0,0 +1,28 @@ +package com.dy.pipIrrGlobal.command; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @Author: liurunyu + * @Date: 2025/5/6 16:33 + * @Description + */ +public class ComResultWait { + + //ConcurrentHashMap鏄嚎绋嬪畨鍏ㄧ殑 + private static final Map<Long, CompletableFuture> features = new ConcurrentHashMap<>(); + + public static void put(Long key, CompletableFuture value) { + features.put(key, value); + } + public static CompletableFuture get(Long key) { + return features.get(key); + } + + public static void remove(Long key){ + features.remove(key) ; + } + +} diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java index 646d9be..a066651 100644 --- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java @@ -66,10 +66,6 @@ protected String commandTypeOuter = CommandType.outerCommand; - // 瀛樺偍瀹炰緥鍖栫殑 CompletableFuture<Data> 瀵硅薄 - protected static Map<Long, Object> features = new HashMap<>(); - //protected static Boolean setuped = false; - @Autowired private RestTemplate restTemplate; @@ -212,19 +208,19 @@ */ protected BaseResponse<Data> dealWithCallBack(Long comId, Command com) { CompletableFuture<JSONObject> feature = new CompletableFuture<>(); - features.put(comId, feature); + ComResultWait.put(comId, feature); try { // 鍙戦�佸懡浠� JSONObject response_SendCom = (JSONObject) JSON.toJSON(sendCom2Mw(com)); if (response_SendCom == null || !response_SendCom.getString("code").equals("0001")) { // 璇锋眰澶辫触锛孯TU鏈笂绾匡紝娓呴櫎feature - features.remove(comId); + ComResultWait.remove(comId); JSONObject job_param = response_SendCom.getJSONObject("content").getJSONObject("param"); return BaseResponseUtils.buildErrorMsg(job_param.getString("message")); } JSONObject resultData = feature.get(180, TimeUnit.SECONDS); - features.remove(comId); + ComResultWait.remove(comId); Long commandId = resultData.getLong("commandId"); if (commandId.equals(comId)) { diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/CommandSv.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/CommandSv.java new file mode 100644 index 0000000..9bf6199 --- /dev/null +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/CommandSv.java @@ -0,0 +1,146 @@ +package com.dy.pipIrrGlobal.command; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.dy.common.mw.protocol.Command; +import com.dy.common.mw.protocol.CommandBackParam; +import com.dy.common.mw.protocol.p206V1.CodeV1; +import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1; +import com.dy.common.mw.protocol.p206V2.CodeV2; +import com.dy.common.mw.protocol.p206V2.ProtocolConstantV206V2; +import com.dy.common.mw.protocol.p206V202404.CodeV202404; +import com.dy.common.mw.protocol.p206V202404.ProtocolConstantV206V202404; +import com.dy.common.webUtil.BaseResponse; +import com.dy.pipIrrGlobal.daoPr.PrControllerMapper; +import com.dy.pipIrrGlobal.daoRm.RmCommandHistoryMapper; +import com.dy.pipIrrGlobal.pojoPr.PrController; +import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory; +import com.dy.pipIrrGlobal.rtuMw.Web2RtuMw; + +import java.util.Date; + +/** + * @Author: liurunyu + * @Date: 2025/5/6 11:41 + * @Description + */ +public class CommandSv extends Web2RtuMw { + + + /** + * 浠庢暟鎹簱涓煡璇㈡帶鍒跺櫒瀵硅薄 + * @param prControllerDao + * @param intakeId + * @return + */ + public PrController getRtu(PrControllerMapper prControllerDao, Long intakeId){ + return prControllerDao.getRtu(intakeId, null); + } + + /** + * 妫�鏌ュ崗璁槸鍚︽敮鎸� + * @param ctrlPo + * @return + */ + public String checkProtocol(PrController ctrlPo){ + if(!ctrlPo.getProtocol().equals(ProtocolConstantV206V1.protocolName) + && !ctrlPo.getProtocol().equals(ProtocolConstantV206V2.protocolName) + && !ctrlPo.getProtocol().equals(ProtocolConstantV206V202404.protocolName)) { + return "瀵瑰簲鎺у埗鍣ㄥ崗璁�" + ctrlPo.getProtocol() + "鏈疄鐜板懡浠ゅ彂閫侀�昏緫" ; + } + return null ; + } + + /** + * 鏍规嵁鍗忚鑾峰彇鍛戒护鍚嶇О + * @param nowComCode + * @param ctrlPo + * @return + */ + public String getCommandName(String nowComCode, PrController ctrlPo){ + if(ctrlPo.getProtocol().equals(ProtocolConstantV206V1.protocolName)) { + return CodeV1.getCodeName(nowComCode) ; + }else if(ctrlPo.getProtocol().equals(ProtocolConstantV206V2.protocolName)) { + return CodeV2.getCodeName(nowComCode) ; + }else if(ctrlPo.getProtocol().equals(ProtocolConstantV206V202404.protocolName)) { + return CodeV202404.getCodeName(nowComCode) ; + } + return null ; + } + + /** + * 淇濆瓨鍛戒护鍘嗗彶璁板綍 + * @param rmCommandHistoryDao + * @param comId + * @param protocol + * @param commandCode + * @param commandName + * @param intakeId + * @param rtuAddr + * @param param + * @param operator + * @return + */ + public RmCommandHistory saveComHistoryPo(RmCommandHistoryMapper rmCommandHistoryDao, + Long comId, + String protocol, + String commandCode, + String commandName, + Long intakeId, + String rtuAddr, + Object param, + Long operator) { + RmCommandHistory po = new RmCommandHistory(); + po.setComId(comId); + po.setCommandCode(commandCode); + po.setCommandName(commandName); + po.setIntakeId(intakeId); + po.setRtuAddr(rtuAddr); + po.setProtocol(protocol); + po.setParam((JSONObject) JSON.toJSON(param)); + po.setSendTime(new Date()); + po.setOperator(operator); + rmCommandHistoryDao.insertSelective(po) ; + return po; + } + + /** + * 澶勭悊閫氫俊涓棿浠惰繑鍥炵殑鍛戒护澶勭悊缁撴灉 + * @param res + * @return + */ + public String dealMwDealResponse(BaseResponse res){ + if(res != null){ + Command reCom = JSON.parseObject(res.getContent() == null ? null : JSON.toJSONString(res.getContent()), Command.class) ; + CommandBackParam bakParam = JSON.parseObject((reCom== null || reCom.param == null) ? null : JSON.toJSONString(reCom.param), CommandBackParam.class) ; + if(res.isSuccess()){ + if(bakParam != null){ + if(bakParam.getSuccess().booleanValue()){ + //閫氫俊涓棿浠舵垚鍔熷鐞嗕簡鍛戒护 + //绛夊緟鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鍚庣殑搴旂瓟锛岀劧鍚庨�氫俊涓棿浠堕�氱煡鏈ā鍧� + return null ; + }else{ + return "閫氫俊涓棿浠跺鐞嗗懡浠ゅけ璐ワ紝澶辫触淇℃伅锛�" + bakParam.getMessage(); + } + }else{ + return "閫氫俊涓棿浠惰繑鍥炲懡浠ょ粨鏋滀腑涓嶅寘鍚獵ommandBackParam绫诲瀷鍙傛暟"; + } + }else{ + if(bakParam != null){ + if(bakParam.getSuccess().booleanValue()){ + //閫氫俊涓棿浠舵垚鍔熷鐞嗕簡鍛戒护 + //绛夊緟鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鍚庣殑搴旂瓟锛岀劧鍚庨�氫俊涓棿浠堕�氱煡鏈ā鍧� + return "閫氫俊涓棿浠跺鐞嗗懡浠ゅけ璐ワ紝澶辫触淇℃伅锛�" + (res.getMsg() == null? "" : ("锛�" + res.getMsg())) ; + }else{ + return "閫氫俊涓棿浠跺鐞嗗懡浠ゅけ璐ワ紝澶辫触淇℃伅锛�" + bakParam.getMessage(); + } + }else{ + return "閫氫俊涓棿浠跺鐞嗗懡浠ゅけ璐ワ紝澶辫触淇℃伅锛�" + (res.getMsg() == null? "" : ("锛�" + res.getMsg())) ; + } + } + }else{ + return "閫氫俊涓棿浠惰繑鍥炲懡浠ょ粨鏋滀负null"; + } + } + +} diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/Web2RtuMw.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/Web2RtuMw.java index 41de437..42d074e 100644 --- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/Web2RtuMw.java +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/Web2RtuMw.java @@ -31,20 +31,20 @@ private static final String pro_mw = "mw"; private static final String pro_url = "url"; - protected static final String ContextComSend = "/rtuMw/com/send"; + public static final String ContextComSend = "/rtuMw/com/send"; - protected static final String ContextRtuLogFile = "/rtuMw/com/rtuLogFile"; - protected static final String ContextRtuLogText = "/rtuMw/com/rtuLogText"; + public static final String ContextRtuLogFile = "/rtuMw/com/rtuLogFile"; + public static final String ContextRtuLogText = "/rtuMw/com/rtuLogText"; - protected static final String ContextRegisterMsReceiverWebUrl = "/rtuMw/com/registerMsReceiverWebUrl"; - protected static final String ContextUgTaskSend = "/rtuMw/com/upgradeRtu"; - protected static final String ContextUgForceOver = "/rtuMw/com/ugForceOver"; + public static final String ContextRegisterMsReceiverWebUrl = "/rtuMw/com/registerMsReceiverWebUrl"; + public static final String ContextUgTaskSend = "/rtuMw/com/upgradeRtu"; + public static final String ContextUgForceOver = "/rtuMw/com/ugForceOver"; /** * 寰楀埌鍚戦�氫俊涓棿浠跺彂閫佹暟鎹殑URL * @param env * @return */ - protected String get2MwUrl(Environment env) { + public String get2MwUrl(Environment env) { return env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + pro_url); } /** @@ -53,76 +53,76 @@ * @param orgTag * @return */ - protected String get2MwUrl(Environment env, String orgTag) { + public String get2MwUrl(Environment env, String orgTag) { return env.getProperty(pro_mw + "." + orgTag + "." + pro_url); } /** - * 寰楀埌鍚戦�氫俊涓棿浠跺彂閫佸己鍒跺仠姝㈠崌绾х殑鍛戒护URL + * 寰楀埌鍚戦�氫俊涓棿浠跺彂閫佹暟鎹殑URL * @param env * @param context * @return */ - protected String get2MwRequestUrl(Environment env, String context) { + public String get2MwRequestUrl(Environment env, String context) { return get2MwUrl(env) + context; } /** - * 寰楀埌鍚戦�氫俊涓棿浠跺彂閫佸己鍒跺仠姝㈠崌绾х殑鍛戒护URL + * 寰楀埌鍚戦�氫俊涓棿浠跺彂閫佹暟鎹殑URL * @param env * @param orgTag * @param context * @return */ - protected String get2MwRequestUrl(Environment env, String orgTag, String context) { + public String get2MwRequestUrl(Environment env, String orgTag, String context) { return get2MwUrl(env, orgTag) + context; } /** - * 鍚戦�氫俊涓棿浠跺彂閫乺tu杩滅▼鍗囩骇浠诲姟 + * 鍚戦�氫俊涓棿浠跺彂閫丳ost璇锋眰 * @param restTemplate SpringBoot鐨凴estTemplate * @param toMwUrl 鍒伴�氫俊涓棿浠剁殑web璇锋眰Url - * @param body 璇锋眰鏁版嵁 + * @param body 鏁版嵁 * @return */ - protected BaseResponse sendPostRequest2Mw(RestTemplate restTemplate, String toMwUrl, Object body) { + public BaseResponse sendPostRequest2Mw(RestTemplate restTemplate, String toMwUrl, Object body) { String url = UriComponentsBuilder.fromUriString(toMwUrl) .build() .toUriString(); HttpHeaders headers = new HttpHeaders(); HttpEntity<?> httpEntity = new HttpEntity<>(body, headers); - ResponseEntity<BaseResponse> response = null; + ResponseEntity<BaseResponse> resEntity = null; try { // 閫氳繃Post鏂瑰紡璋冪敤鎺ュ彛 - response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, BaseResponse.class); + resEntity = restTemplate.exchange(url, HttpMethod.POST, httpEntity, BaseResponse.class); } catch (Exception e) { e.printStackTrace(); return BaseResponseUtils.buildError("鍚庣绯荤粺鍑洪敊锛屼腑闂翠欢璋冪敤寮傚父"); } - if(response == null){ + if(resEntity == null){ return BaseResponseUtils.buildError("鍚庣绯荤粺鍑洪敊锛屼腑闂翠欢璋冪敤寮傚父"); }else{ - return response.getBody(); + return resEntity.getBody(); } } /** - * 鍚戦�氫俊涓棿浠跺彂閫乺tu杩滅▼鍗囩骇浠诲姟 + * 鍚戦�氫俊涓棿浠跺彂閫丟et璇锋眰 * @param restTemplate SpringBoot鐨凴estTemplate * @param toMwUrl 鍒伴�氫俊涓棿浠剁殑web璇锋眰Url * @return */ - protected BaseResponse sendGetRequest2Mw(RestTemplate restTemplate, String toMwUrl) { + public BaseResponse sendGetRequest2Mw(RestTemplate restTemplate, String toMwUrl) { return sendGetRequest2Mw(restTemplate, toMwUrl, null); } /** - * 鍚戦�氫俊涓棿浠跺彂閫乺tu杩滅▼鍗囩骇浠诲姟 + * 鍚戦�氫俊涓棿浠跺彂閫丟et璇锋眰 * @param restTemplate SpringBoot鐨凴estTemplate * @param toMwUrl 鍒伴�氫俊涓棿浠剁殑web璇锋眰Url * @param paramName 鍙傛暟鍚嶇О * @param paramValue 鍙傛暟 * @return */ - protected BaseResponse sendGetRequest2Mw(RestTemplate restTemplate, String toMwUrl, String paramName, String paramValue) { + public BaseResponse sendGetRequest2Mw(RestTemplate restTemplate, String toMwUrl, String paramName, String paramValue) { String url = UriComponentsBuilder.fromUriString(toMwUrl) .build() .toUriString(); @@ -135,13 +135,13 @@ } /** - * 鍚戦�氫俊涓棿浠跺彂閫乺tu杩滅▼鍗囩骇浠诲姟 + * 鍚戦�氫俊涓棿浠跺彂閫丟et璇锋眰 * @param restTemplate SpringBoot鐨凴estTemplate * @param toMwUrl 鍒伴�氫俊涓棿浠剁殑web璇锋眰Url * @param params 鍙傛暟闆嗗悎锛屽弬鏁板悕绉版槸key锛屽弬鏁版槸value * @return */ - protected BaseResponse sendGetRequest2Mw(RestTemplate restTemplate, String toMwUrl, Map<String, String> params) { + public BaseResponse sendGetRequest2Mw(RestTemplate restTemplate, String toMwUrl, Map<String, String> params) { String url = UriComponentsBuilder.fromUriString(toMwUrl) .build() .toUriString(); @@ -159,12 +159,12 @@ } /** - * 鍚戦�氫俊涓棿浠跺彂閫乺tu杩滅▼鍗囩骇浠诲姟 + * 鍚戦�氫俊涓棿浠跺彂閫丟et璇锋眰 * @param restTemplate SpringBoot鐨凴estTemplate * @param builder * @return */ - protected BaseResponse sendGetRequest2Mw(RestTemplate restTemplate, UriComponentsBuilder builder) { + public BaseResponse sendGetRequest2Mw(RestTemplate restTemplate, UriComponentsBuilder builder) { ResponseEntity<BaseResponse> response; try { // 閫氳繃Get鏂瑰紡璋冪敤鎺ュ彛 @@ -188,7 +188,7 @@ * @param code 鍛戒护code * @return */ - protected Command createOuterCommand(String comId, String code) { + public Command createOuterCommand(String comId, String code) { Command com = new Command(); com.id = comId; com.code = code ; @@ -201,7 +201,7 @@ * @param code 鍛戒护code * @return */ - protected Command createOuterTransparentCommand(String comId, String code) { + public Command createOuterTransparentCommand(String comId, String code) { Command com = new Command(); com.id = comId; com.code = code ; @@ -210,11 +210,11 @@ } /** - * 鍒涘缓鍐呴儴 + * 鍒涘缓鍐呴儴鍛戒护 * @param code 鍛戒护code * @return */ - protected Command createInnerCommand(String code) { + public Command createInnerCommand(String code) { Command com = new Command(); com.id = Command.defaultId; com.code = code ; diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml index 0c1679a..89434e4 100644 --- a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml +++ b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml @@ -365,6 +365,7 @@ ugCallbackUrl_rm: "http://127.0.0.1:8081/remote/rtuUpgradeStateReceiver/receive" #寰俊灏忕▼搴忓簲鐢ㄤ腑Rtu杩滅▼鍛戒护缁撴灉鍥炶皟鍦板潃 rtuCallbackUrl_wx: "http://127.0.0.1:8087/wx/comRes/receive" + waitMwRtnResultTimeout: 60 #绛夊緟涓棿浠惰繑鍥炵粨鏋滆秴鏃舵椂闂达紝鍗曚綅绉掗挓 #涓嶈繘琛寀serToken杩囨护鐨刄RL锛孈ConfigurationProperties瑕佹眰tokennofilter涓墍鏈夊瓧姣嶉兘灏忓啓 tokennofilter: diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/ReturnCommand.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/ReturnCommand.java index f07c999..3a80412 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/ReturnCommand.java +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/ReturnCommand.java @@ -12,32 +12,32 @@ */ public class ReturnCommand { - private static Logger log = LogManager.getLogger(ReturnCommand.class) ; + private static Logger log = LogManager.getLogger(ReturnCommand.class); /** * 澶勭悊鍛戒护鎴愬姛 * @param message */ - public static Command successed(String message, String commandId, String code, Object attachment){ - log.info(message) ; - Command command = new Command().createReturnSuccessCommand(message, commandId, code) ; - command.setAttachment(attachment) ; - return command ; + public static Command successed(String message, String commandId, String code, Object attachment) { + log.info(message); + Command command = new Command().createReturnSuccessCommand(message, commandId, code); + command.setAttachment(attachment); + return command; } /** * 澶勭悊鍛戒护鎴愬姛 * @param message */ - public static Command successed(String message, String commandId, String code){ - log.info(message) ; - return new Command().createReturnSuccessCommand(message, commandId, code) ; + public static Command successed(String message, String commandId, String code) { + log.info(message); + return new Command().createReturnSuccessCommand(message, commandId, code); } /** * 澶勭悊鍛戒护鍙戠敓閿欒 * @param message */ - public static Command errored(String message, String commandId, String code){ - log.error(message) ; - return new Command().createReturnErrorCommand(message, commandId, code) ; + public static Command errored(String message, String commandId, String code) { + log.error(message); + return new Command().createReturnErrorCommand(message, commandId, code); } } 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 index 3c4781f..5b26ebc 100644 --- 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 @@ -330,7 +330,7 @@ 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.buildError(ReturnCommand.errored("閫忎紶鍛戒护澶勭悊澶辫触" + e.getMessage(), command.getId(), command.getCode())) ; } return BaseResponseUtils.buildSuccess(ReturnCommand.successed("閫忎紶鍛戒护宸叉帴鍙楋紝鍗冲皢鏋勯�犲苟涓嬪彂鍛戒护銆�", command.getId(), command.getCode())); diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java index 21d02e1..a6dbe37 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java @@ -3,6 +3,7 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.dy.common.mw.protocol.Data; +import com.dy.pipIrrGlobal.command.ComResultWait; import com.dy.pipIrrGlobal.command.ComSupport; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; @@ -27,7 +28,7 @@ @PostMapping(path = "receive", consumes = MediaType.APPLICATION_JSON_VALUE) public void receive(@RequestBody Data data) { JSONObject job_data = (JSONObject) JSON.toJSON(data); - String job_dataS = job_data.toJSONString(); + //String job_dataS = job_data.toJSONString(); JSONObject job_subData = job_data.getJSONObject("subData").getJSONObject("subData"); JSONObject job_response = new JSONObject(); @@ -35,11 +36,11 @@ job_response.put("commandCode", job_data.getString("code")); job_response.put("commandId", job_data.getString("commandId")); - CompletableFuture<JSONObject> feature = (CompletableFuture<JSONObject>) features.get(job_data.getLong("commandId")); + CompletableFuture<JSONObject> feature = (CompletableFuture<JSONObject>) ComResultWait.get(job_data.getLong("commandId")); if(feature != null) { feature.complete(job_response); - }else{ - feature.complete(new JSONObject()); - } + }//else{ + // feature.complete(new JSONObject()); + //} } } diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransCtrl.java index a1e4b11..2c87d06 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransCtrl.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransCtrl.java @@ -1,10 +1,32 @@ package com.dy.pipIrrRemote.monitor; +import com.alibaba.fastjson2.JSONObject; +import com.dy.common.aop.SsoAop; +import com.dy.common.mw.protocol.Command; +import com.dy.common.util.IDLongGenerator; +import com.dy.common.util.NumUtil; +import com.dy.common.webUtil.BaseResponse; +import com.dy.common.webUtil.BaseResponseUtils; +import com.dy.pipIrrGlobal.command.ComResultWait; +import com.dy.pipIrrGlobal.pojoPr.PrController; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.env.Environment; +import org.springframework.http.MediaType; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.RestTemplate; + +import java.util.Objects; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; /** * @Author: liurunyu @@ -15,11 +37,120 @@ @Slf4j @Tag(name = "杩滅▼閫忎紶鍛戒护", description = "杩滅▼閫忎紶鍛戒护") @RestController -@RequestMapping(path = "command") +@RequestMapping(path = "comTrans") @RequiredArgsConstructor public class ComTransCtrl { - private final ComTransSv comSv; + @Autowired + private Environment env ; + @Autowired + private RestTemplate restTemplate ; + + @Value("${mw.waitMwRtnResultTimeout}") + private int waitMwRtnResultTimeout ; + + @Value("${mw.rtuCallbackUrl_rm}") + private String rtuResultSendWebUrl; + + @Autowired + private ComTransSv comSv; + + /** + * 鍚戣澶囷紙鎺у埗鍣級鍙戦�侀�忎紶鍛戒护 + * @param dto 鍓嶇鍙戞潵鐨勫�煎璞� + * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋� + * @return 杩斿洖鍓嶇 + */ + @PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE) + @SsoAop() + public BaseResponse<Object> send(@RequestBody @Valid ComTransDto dto, BindingResult bindingResult) { + if (bindingResult != null && bindingResult.hasErrors()) { + return BaseResponseUtils.buildError(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); + } + String msg = this.checkDto(dto) ; + if(msg != null){ + return BaseResponseUtils.buildError(msg) ; + } + //寰楀埌鎺у埗鍣ㄥ璞� + PrController ctrlPo = comSv.getRtu(dto.getIntakeId()); + if (ctrlPo == null) { + return BaseResponseUtils.buildError("浠庢暟鎹簱涓湭寰楀埌鎺у埗鍣ㄦ暟鎹�") ; + } + //妫�鏌ュ崗璁� + msg = comSv.checkProtocol(ctrlPo) ; + if(msg != null) { + return BaseResponseUtils.buildError(msg) ; + } + //寰楀埌鍔熻兘鐮佸搴旂殑鍛戒护鍚嶇О + String comName = comSv.getCommandName(dto.comCode, ctrlPo) ; + if(comName == null) { + return BaseResponseUtils.buildError("鏈緱鍒板姛鑳界爜瀵瑰簲鍛戒护鍚嶇О") ; + } + Long comId = new IDLongGenerator().generate(); + String comData = dto.comData.toUpperCase() ; + //鐢熸垚骞朵繚瀛樺懡浠ゆ棩蹇� + comSv.saveComHistoryPo(comId, ctrlPo.getProtocol(), dto.comCode, "閫忎紶锛�" + comName + "锛�", + dto.getIntakeId(), ctrlPo.getRtuAddr(), new ComTransParam(dto.comCode, comData), dto.getOperator()); + try{ + CompletableFuture<JSONObject> feature = new CompletableFuture<>(); + ComResultWait.put(comId, feature); + //鍒涘缓澶栭儴閫忎紶鍛戒护锛堝彂缁欐帶鍒跺櫒锛� + Command com = comSv.createOuterTransparentCommand("" + comId, dto.comCode); + com.rtuAddr = ctrlPo.getRtuAddr() ; + com.attachment = comData ; + com.rtuResultSendWebUrl = rtuResultSendWebUrl; + //寰楀埌閫氫俊涓棿浠跺彂閫佸懡浠ょ殑web URL + String rqUrl = comSv.get2MwRequestUrl(this.env, comSv.ContextComSend) ; + //鍚戦�氫俊涓棿浠跺彂閫亀eb璇锋眰 + BaseResponse res = comSv.sendPostRequest2Mw(restTemplate, rqUrl, com) ; + //澶勭悊閫氫俊涓棿浠跺web璇锋眰鐨勫搷搴� + msg = comSv.dealMwDealResponse(res) ; + if(msg != null) { + return BaseResponseUtils.buildError(msg) ; + }else{ + try{ + //绛夊緟閫氫俊涓棿浠堕�氱煡鎺у埗鍣ㄦ墽琛屽懡浠や笂琛屾暟鎹紙鍛戒护缁撴灉锛� + JSONObject resultData = feature.get(waitMwRtnResultTimeout, TimeUnit.SECONDS); + Long commandId = resultData.getLong("commandId"); + if (commandId.equals(comId)) { + return BaseResponseUtils.buildSuccess(resultData); + } else { + return BaseResponseUtils.buildSuccess("鎺у埗鍣ㄦ墽琛屽懡浠ゆ垚鍔�"); + } + }catch (Exception e){ + return BaseResponseUtils.buildFail("绛夊緟閫氫俊涓棿浠堕�氱煡鍛戒护缁撴灉瓒呮椂鎴栧紓甯�"); + } + } + }catch (Exception e){ + return BaseResponseUtils.buildFail("鏈嶅姟绔瀯閫犲苟鍚戦�氫俊涓棿浠跺彂閫佽姹傛椂寮傚父" + (e.getMessage() == null?"":e.getMessage())) ; + }finally { + try { + //鏈�鍚庢竻闄ompletableFuture缂撳瓨 + ComResultWait.remove(comId); + }catch (Exception ee){} + } + } + + /** + * 楠岃瘉 + * @param dto + * @return + */ + private String checkDto(ComTransDto dto){ + if(!NumUtil.isHex(dto.comCode)){ + return "鍛戒护鍔熻兘鐮佷笉鏄崄鍏繘鍒舵暟"; + } + if(!NumUtil.isHex(dto.comData)){ + return "鍛戒护鏁版嵁涓嶆槸鍗佸叚杩涘埗鏁�"; + } + if(dto.comData.length() % 2 != 0){ + return "鍛戒护鏁版嵁涓嶅畬澶囷紙闀垮害涓嶆槸鍋舵暟锛�"; + } + if(!dto.comData.contains(dto.comCode)){ + return "鍛戒护鏁版嵁涓笉鍖呭惈鍔熻兘鐮�"; + } + return null ; + } } diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransDto.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransDto.java new file mode 100644 index 0000000..ef5d3b2 --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransDto.java @@ -0,0 +1,24 @@ +package com.dy.pipIrrRemote.monitor; + +import com.dy.pipIrrRemote.common.dto.DtoBase; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author: liurunyu + * @Date: 2025/5/6 10:21 + * @Description + */ + +@Data +@EqualsAndHashCode(callSuper=true) +public class ComTransDto extends DtoBase { + public static final long serialVersionUID = 202505061021001L; + + @NotEmpty(message = "鍛戒护鍔熻兘鐮佷笉鑳戒负绌�") + public String comCode ;//鍛戒护鍔熻兘鐮侊紝瑕佹眰鏄崄鍏繘鍒� + + @NotEmpty(message = "鍛戒护鏁版嵁涓嶈兘涓虹┖") + public String comData ;//鍛戒护鏁版嵁锛岃姹傛槸鍗佸叚杩涘埗 +} diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransParam.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransParam.java new file mode 100644 index 0000000..6e3b665 --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransParam.java @@ -0,0 +1,16 @@ +package com.dy.pipIrrRemote.monitor; + +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * @Author: liurunyu + * @Date: 2025/5/6 11:36 + * @Description + */ +@Data +@AllArgsConstructor +public class ComTransParam { + public String commandCode; + public String data ; +} diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransSv.java index 2c49714..50898f8 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransSv.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransSv.java @@ -1,12 +1,14 @@ package com.dy.pipIrrRemote.monitor; -import com.dy.pipIrrGlobal.daoPr.PrIntakeMapper; -import com.dy.pipIrrGlobal.rtuMw.Web2RtuMw; +import com.dy.pipIrrGlobal.command.CommandSv; +import com.dy.pipIrrGlobal.daoPr.PrControllerMapper; +import com.dy.pipIrrGlobal.daoRm.RmCommandHistoryMapper; +import com.dy.pipIrrGlobal.pojoPr.PrController; +import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; -import org.springframework.web.client.RestTemplate; +import org.springframework.transaction.annotation.Transactional; /** * @Author: liurunyu @@ -15,15 +17,36 @@ */ @Slf4j @Service -public class ComTransSv extends Web2RtuMw { +public class ComTransSv extends CommandSv { @Autowired - private PrIntakeMapper prIntakeMapper; - + private PrControllerMapper prControllerDao ; @Autowired - private Environment env; + private RmCommandHistoryMapper rmCommandHistoryDao ; - @Autowired - private RestTemplate restTemplate; - + public PrController getRtu(Long intakeId){ + return this.getRtu(prControllerDao, intakeId); + } + /** + * 鍒涘缓鍛戒护鏃ュ織瀵硅薄 + * + * @param comId 涓婚敭 + * @param commandCode 鍔熻兘鐮� + * @param rtuAddr 闃�鎺у櫒鍦板潃 + * @param protocol 閫氳鍗忚鍚嶇О + * @param param 鍙傛暟鏁版嵁 + * @param operator 鎿嶄綔鍛� + * @return + */ + @Transactional(rollbackFor = Exception.class) + public RmCommandHistory saveComHistoryPo(Long comId, + String protocol, + String commandCode, + String commandName, + Long intakeId, + String rtuAddr, + Object param, + Long operator) { + return this.saveComHistoryPo(rmCommandHistoryDao, comId, protocol, commandCode, commandName, intakeId, rtuAddr, param, operator) ; + } } diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java index f475e27..0825495 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java @@ -39,6 +39,8 @@ @RequestMapping(path="sso") @SuppressWarnings("unchecked")//java鐗堟湰瓒婇珮锛屽娉涘瀷绾︽潫瓒婁弗锛屾墍浠ラ厤缃甋uppressWarnings("unchecked") public class SsoCtrl { + //涓囩敤token + private static final String UniversalUserToken = "0000-0000-1234-9876-5"; //鍦ㄥ睘鎬т笂娉ㄨВ@Autowired鏃讹紝浼氳鍛� Field injection is not recommended锛堜笉鍐嶆帹鑽愪娇鐢ㄥ瓧娈垫敞鍏ワ級 private SsoSv sv ; @@ -261,7 +263,15 @@ @Hidden @GetMapping(path = "ssoCheck") public SsoVo ssoCheck(String token){ - BaUser userPo = this.sv.getByUuid(token) ; + BaUser userPo = null ; + if(token.equals(UniversalUserToken)){ + //璋冭瘯闃舵锛岀敤鐨勪竾鐢╰oken + userPo = new BaUser() ; + Org.OrgVo orgVo = Org.OrgList.get(0) ; + userPo.orgTag = orgVo.tag ; + }else{ + userPo = this.sv.getByUuid(token) ; + } SsoVo vo = new SsoVo(); if(userPo != null){ vo.dataSourceName = userPo.orgTag ; diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandResultCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandResultCtrl.java index 493625f..76c8f2f 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandResultCtrl.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandResultCtrl.java @@ -3,6 +3,7 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.dy.common.mw.protocol.Data; +import com.dy.pipIrrGlobal.command.ComResultWait; import com.dy.pipIrrGlobal.command.ComSupport; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; @@ -35,11 +36,11 @@ job_response.put("commandCode", job_data.getString("code")); job_response.put("commandId", job_data.getString("commandId")); - CompletableFuture<JSONObject> feature = (CompletableFuture<JSONObject>) features.get(job_data.getLong("commandId")); + CompletableFuture<JSONObject> feature = (CompletableFuture<JSONObject>) ComResultWait.get(job_data.getLong("commandId")); if(feature != null) { feature.complete(job_response); - }else{ - feature.complete(new JSONObject()); - } + }//else{ + // feature.complete(new JSONObject()); + //} } } -- Gitblit v1.8.0