From 59b3bcf5b615361ae6402a51878cfec3c21cd646 Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期六, 10 五月 2025 09:01:49 +0800 Subject: [PATCH] 实现表阀一体机协议远程命令功能子模块通用框架 --- pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/CdParam.java | 16 + pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/DtoBase.java | 1 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/Cd50Param.java | 17 + pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransDto.java | 5 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/ComCtrl.java | 189 +++++++++++++++++ pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/Cd50Dto.java | 17 + pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransParam.java | 13 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/ComSv.java | 48 ++++ pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/Cd50Ctrl.java | 108 +++++++++ pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/Cd50Sv.java | 15 + pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/CommandSv.java | 5 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransCtrl.java | 136 ++++------- pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/ComTransSv.java | 41 --- pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComResultWait.java | 4 14 files changed, 483 insertions(+), 132 deletions(-) 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 index 8cd8151..4cfb473 100644 --- 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 @@ -21,6 +21,10 @@ return features.get(key); } + public static boolean contain(Long key) { + return features.containsKey(key); + } + public static void remove(Long key){ features.remove(key) ; } 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 index 9bf6199..a862c21 100644 --- 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 @@ -100,7 +100,10 @@ po.setParam((JSONObject) JSON.toJSON(param)); po.setSendTime(new Date()); po.setOperator(operator); - rmCommandHistoryDao.insertSelective(po) ; + int count = rmCommandHistoryDao.insertSelective(po) ; + if(count == 0){ + po = null ; + } return po; } diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/DtoBase.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/DtoBase.java index e960b9e..bebddc7 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/DtoBase.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/DtoBase.java @@ -2,6 +2,7 @@ import jakarta.validation.constraints.NotNull; import lombok.Data; +import lombok.experimental.SuperBuilder; /** * @author ZhuBaoMin 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 96d3d20..a85d0fd 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 @@ -3,30 +3,23 @@ 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 com.dy.pipIrrRemote.common.dto.DtoBase; +import com.dy.pipIrrRemote.monitor.common.ComCtrl; 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.context.annotation.Scope; 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 @@ -38,24 +31,13 @@ @RestController @RequestMapping(path = "comTrans") @RequiredArgsConstructor -public class ComTransCtrl { +@Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞� +public class ComTransCtrl extends ComCtrl { private static final String RtuSuccessMsg = "鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鎴愬姛"; @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; + private ComTransSv sv ; /** * 鍚戣澶囷紙鎺у埗鍣級鍙戦�侀�忎紶鍛戒护 @@ -66,66 +48,43 @@ @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); - return BaseResponseUtils.buildSuccess(this.createRtnMsg(dto.comCode, resultData)); - }catch (Exception e){ - return BaseResponseUtils.buildFail("绛夊緟閫氫俊涓棿浠堕�氱煡鍛戒护缁撴灉瓒呮椂"); + BaseResponse<Object> res ; + //鍙戦�佸懡浠ゅ墠-1锛氶獙璇� + res = super.pre1(sv, dto.comCode, dto, bindingResult); + if(res == null) { + //鍙戦�佸懡浠ゅ墠-2锛氳幏寰楁暟鎹� + res = super.pre2(sv, dto.comCode, dto, bindingResult); + if(res == null) { + //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇� + this.comName = "閫忎紶锛�" + comName + "锛�" ; + String comData = dto.comData.toUpperCase() ; + ComTransParam comParam = ComTransParam.builder().commandCode(dto.comCode).data(comData).build(); + res = super.pre3(sv, dto.getIntakeId(), dto.getOperator(), dto.comCode, comParam); + if(res == null) { + //鍙戦�佸懡浠ゅ墠-4锛氬噯澶嘑eature + super.pre4(); + try{ + //鍒涘缓澶栭儴閫忎紶鍛戒护锛堝彂缁欐帶鍒跺櫒锛� + Command com = sv.createOuterTransparentCommand("" + comId, dto.comCode); + com.rtuAddr = ctrlPo.getRtuAddr() ; + com.attachment = comData ; + com.rtuResultSendWebUrl = rtuResultSendWebUrl; + //鍙戦�佸懡浠� + res = super.doSend(sv, com) ; + if(res == null) { + //鍙戦�佸懡浠ゅ悗 + res = super.after(dto.comCode); + } + }catch (Exception e){ + res = BaseResponseUtils.buildFail("鏈嶅姟绔瀯閫犲苟鍚戦�氫俊涓棿浠跺彂閫佽姹傛椂寮傚父" + (e.getMessage() == null?"":e.getMessage())) ; + }finally { + //鏈�缁� + super.end() ; + } } } - }catch (Exception e){ - return BaseResponseUtils.buildFail("鏈嶅姟绔瀯閫犲苟鍚戦�氫俊涓棿浠跺彂閫佽姹傛椂寮傚父" + (e.getMessage() == null?"":e.getMessage())) ; - }finally { - try { - //鏈�鍚庢竻闄ompletableFuture缂撳瓨 - ComResultWait.remove(comId); - }catch (Exception ee){} } + return res ; } /** @@ -133,23 +92,26 @@ * @param dto * @return */ - private String checkDto(ComTransDto dto){ - if(!NumUtil.isHex(dto.comCode)){ + @Override + protected String checkDto(DtoBase dto){ + ComTransDto myDto = (ComTransDto)dto; + if(!NumUtil.isHex(myDto.comCode)){ return "鍛戒护鍔熻兘鐮佷笉鏄崄鍏繘鍒舵暟"; } - if(!NumUtil.isHex(dto.comData)){ + if(!NumUtil.isHex(myDto.comData)){ return "鍛戒护鏁版嵁涓嶆槸鍗佸叚杩涘埗鏁�"; } - if(dto.comData.length() % 2 != 0){ + if(myDto.comData.length() % 2 != 0){ return "鍛戒护鏁版嵁涓嶅畬澶囷紙闀垮害涓嶆槸鍋舵暟锛�"; } - if(!dto.comData.contains(dto.comCode)){ + if(!myDto.comData.contains(myDto.comCode)){ return "鍛戒护鏁版嵁涓笉鍖呭惈鍔熻兘鐮�"; } return null ; } - private String createRtnMsg(String code, JSONObject resultData){ + @Override + protected String createRtnMsg(String code, JSONObject resultData){ String msg; if(resultData != null){ JSONObject codeData = resultData.getJSONObject("data") ; 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 index ef5d3b2..b7c069c 100644 --- 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 @@ -4,6 +4,8 @@ import jakarta.validation.constraints.NotEmpty; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.ToString; +import lombok.experimental.SuperBuilder; /** * @Author: liurunyu @@ -12,7 +14,8 @@ */ @Data -@EqualsAndHashCode(callSuper=true) +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) public class ComTransDto extends DtoBase { public static final long serialVersionUID = 202505061021001L; 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 index 6e3b665..bae27e1 100644 --- 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 @@ -1,7 +1,11 @@ package com.dy.pipIrrRemote.monitor; +import com.dy.pipIrrRemote.monitor.common.CdParam; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import lombok.experimental.SuperBuilder; /** * @Author: liurunyu @@ -9,8 +13,9 @@ * @Description */ @Data -@AllArgsConstructor -public class ComTransParam { - public String commandCode; +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +@SuperBuilder +public class ComTransParam extends CdParam { public String data ; -} +} \ No newline at end of file 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 50898f8..88846a0 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,14 +1,8 @@ package com.dy.pipIrrRemote.monitor; -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 com.dy.pipIrrRemote.monitor.common.ComSv; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; /** * @Author: liurunyu @@ -17,36 +11,5 @@ */ @Slf4j @Service -public class ComTransSv extends CommandSv { - - @Autowired - private PrControllerMapper prControllerDao ; - @Autowired - private RmCommandHistoryMapper rmCommandHistoryDao ; - - 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) ; - } +public class ComTransSv extends ComSv { } diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/CdParam.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/CdParam.java new file mode 100644 index 0000000..773f487 --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/CdParam.java @@ -0,0 +1,16 @@ +package com.dy.pipIrrRemote.monitor.common; + +import lombok.*; +import lombok.experimental.SuperBuilder; + +/** + * @Author: liurunyu + * @Date: 2025/5/9 16:11 + * @Description + */ +@Data +@SuperBuilder +public class CdParam { + //鍛戒护鍔熻兘鐮� + public String commandCode; +} diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/ComCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/ComCtrl.java new file mode 100644 index 0000000..27657cc --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/ComCtrl.java @@ -0,0 +1,189 @@ +package com.dy.pipIrrRemote.monitor.common; + +import com.alibaba.fastjson2.JSONObject; +import com.dy.common.mw.protocol.Command; +import com.dy.common.util.IDLongGenerator; +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 com.dy.pipIrrGlobal.pojoRm.RmCommandHistory; +import com.dy.pipIrrRemote.common.dto.DtoBase; +import com.dy.pipIrrRemote.monitor.p202404V201.Cd50Param; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.env.Environment; +import org.springframework.validation.BindingResult; +import org.springframework.web.client.RestTemplate; + +import java.util.Objects; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; + +/** + * @Author: liurunyu + * @Date: 2025/5/9 14:53 + * @Description + */ +public abstract class ComCtrl { + + @Autowired + protected Environment env ; + + @Autowired + protected RestTemplate restTemplate ; + + @Value("${mw.waitMwRtnResultTimeout}") + protected int waitMwRtnResultTimeout ; + + @Value("${mw.rtuCallbackUrl_rm}") + protected String rtuResultSendWebUrl; + + //鎺у埗鍣ㄥ璞� + protected PrController ctrlPo ; + //寮傛绛夊緟鍣� + protected CompletableFuture<JSONObject> feature; + //鍛戒护鍚嶇О + protected String comName ; + //鍛戒护鏃ュ織id + protected Long comId ; + + /** + * 鍙戦�佸懡浠ゅ墠-1锛氶獙璇� + * @param comSv + * @param comCode + * @param dto + * @param bindingResult + * @return + */ + public BaseResponse<Object> pre1(ComSv comSv, String comCode, DtoBase 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) ; + } + return null ; + } + + /** + * 鍙戦�佸懡浠ゅ墠-2锛氳幏寰楁暟鎹� + * @param comSv + * @param comCode + * @param dto + * @param bindingResult + * @return + */ + public BaseResponse<Object> pre2(ComSv comSv, String comCode, DtoBase dto, BindingResult bindingResult) { + //寰楀埌鎺у埗鍣ㄥ璞� + ctrlPo = comSv.getRtu(dto.getIntakeId()); + if (ctrlPo == null) { + return BaseResponseUtils.buildError("鏈嶅姟绔嚭閿欙紝浠庢暟鎹簱涓湭寰楀埌鎺у埗鍣ㄦ暟鎹�") ; + } + //妫�鏌ュ崗璁� + String msg = comSv.checkProtocol(ctrlPo) ; + if(msg != null) { + return BaseResponseUtils.buildError("鏈嶅姟绔嚭閿欙紝" + msg) ; + } + //寰楀埌鍔熻兘鐮佸搴旂殑鍛戒护鍚嶇О + comName = comSv.getCommandName(comCode, ctrlPo) ; + if(comName == null) { + return BaseResponseUtils.buildError("鏈嶅姟绔嚭閿欙紝鏈緱鍒板姛鑳界爜瀵瑰簲鍛戒护鍚嶇О") ; + } + return null ; + } + /** + * 鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇� + * @param comSv sv瀵硅薄 + * @param intakeId 鍙栨按鍙D + * @param operator 褰撳墠鐢ㄧ櫥褰曠敤鎴穒d(鎿嶄綔浜�) + * @param comCode 鍔熻兘鐮� + * @param param 鍛戒护鍙傛暟 + * @return + */ + public BaseResponse<Object> pre3(ComSv comSv, Long intakeId, Long operator, String comCode, CdParam param) { + comId = new IDLongGenerator().generate(); + //鐢熸垚骞朵繚瀛樺懡浠ゆ棩蹇� + RmCommandHistory po = comSv.saveComHistoryPo(comId, + ctrlPo.getProtocol(), + comCode, comName, + intakeId, + ctrlPo.getRtuAddr(), + param, + operator); + if(po == null){ + return BaseResponseUtils.buildError("鏈嶅姟绔嚭閿欙紝鏈兘鐢熸垚骞朵繚瀛樺懡浠ゆ棩蹇�") ; + } + return null ; + } + /** + * 鍙戦�佸懡浠ゅ墠-4锛氬噯澶嘑eature + * @return + */ + public void pre4() { + feature = new CompletableFuture<>(); + ComResultWait.put(comId, feature); + } + + /** + * 鍙戦�佸懡浠� + * @param comSv + * @param com + * @return + */ + public BaseResponse<Object> doSend(ComSv comSv, Command com){ + //寰楀埌閫氫俊涓棿浠跺彂閫佸懡浠ょ殑web URL + String rqUrl = comSv.get2MwRequestUrl(env, comSv.ContextComSend) ; + //鍚戦�氫俊涓棿浠跺彂閫亀eb璇锋眰 + BaseResponse res = comSv.sendPostRequest2Mw(restTemplate, rqUrl, com) ; + //澶勭悊閫氫俊涓棿浠跺web璇锋眰鐨勫搷搴� + String msg = comSv.dealMwDealResponse(res) ; + if(msg != null) { + return BaseResponseUtils.buildError(msg) ; + }else{ + return null ; + } + } + + /** + * 鍙戦�佸懡浠ゅ悗 + * @return + */ + public BaseResponse<Object> after(String comCode) { + try{ + //绛夊緟閫氫俊涓棿浠堕�氱煡鎺у埗鍣ㄦ墽琛屽懡浠や笂琛屾暟鎹紙鍛戒护缁撴灉锛� + JSONObject resultData = feature.get(waitMwRtnResultTimeout, TimeUnit.SECONDS); + return BaseResponseUtils.buildSuccess(this.createRtnMsg(comCode, resultData)); + }catch (Exception e){ + return BaseResponseUtils.buildFail("绛夊緟閫氫俊涓棿浠堕�氱煡鍛戒护缁撴灉瓒呮椂"); + } + } + + /** + * 鍙戦�佸懡浠ゆ渶鍚� + * @return + */ + public void end(){ + try { + //鏈�鍚庢竻闄ompletableFuture缂撳瓨 + if(ComResultWait.contain(comId)){ + ComResultWait.remove(comId); + } + }catch (Exception ee){} + } + + /** + * 楠岃瘉 + * @param dto + * @return + */ + protected abstract String checkDto(DtoBase dto) ; + + + /** + * 鐢熸垚鍛戒护杩斿洖淇℃伅 + */ + protected abstract String createRtnMsg(String code, JSONObject resultData); +} diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/ComSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/ComSv.java new file mode 100644 index 0000000..8fc35f5 --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/common/ComSv.java @@ -0,0 +1,48 @@ +package com.dy.pipIrrRemote.monitor.common; + +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 org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +/** + * @Author: liurunyu + * @Date: 2025/5/9 14:45 + * @Description + */ +public class ComSv extends CommandSv { + + @Autowired + protected PrControllerMapper prControllerDao ; + @Autowired + protected RmCommandHistoryMapper rmCommandHistoryDao ; + + 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-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/Cd50Ctrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/Cd50Ctrl.java new file mode 100644 index 0000000..f699aac --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/Cd50Ctrl.java @@ -0,0 +1,108 @@ +package com.dy.pipIrrRemote.monitor.p202404V201; + +import com.alibaba.fastjson2.JSONObject; +import com.dy.common.aop.SsoAop; +import com.dy.common.mw.protocol.Command; +import com.dy.common.webUtil.BaseResponse; +import com.dy.common.webUtil.BaseResponseUtils; +import com.dy.pipIrrRemote.common.dto.DtoBase; +import com.dy.pipIrrRemote.monitor.common.ComCtrl; +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.context.annotation.Scope; +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; + +/** + * @Author: liurunyu + * @Date: 2025/5/9 14:41 + * @Description + */ +@Slf4j +@Tag(name = "杩滅▼閫忎紶鍛戒护", description = "杩滅▼閫忎紶鍛戒护") +@RestController +@RequestMapping(path = "p202404V201") +@RequiredArgsConstructor +@Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞� +public class Cd50Ctrl extends ComCtrl { + + private static final String RtuSuccessMsg = "鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鎴愬姛"; + + private static final String ComCode = "50" ; + + @Autowired + private Cd50Sv sv ; + /** + * 鍚戣澶囷紙鎺у埗鍣級鍙戦�侀�忎紶鍛戒护 + * @param dto 鍓嶇鍙戞潵鐨勫�煎璞� + * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋� + * @return 杩斿洖鍓嶇 + */ + @PostMapping(path = "cd50", consumes = MediaType.APPLICATION_JSON_VALUE) + @SsoAop() + public BaseResponse<Object> send(@RequestBody @Valid Cd50Dto dto, BindingResult bindingResult) { + BaseResponse<Object> res ; + //鍙戦�佸懡浠ゅ墠-1锛氶獙璇� + res = super.pre1(sv, ComCode, dto, bindingResult); + if(res == null) { + //鍙戦�佸懡浠ゅ墠-2锛氳幏寰楁暟鎹� + res = super.pre2(sv, ComCode, dto, bindingResult); + if (res == null) { + //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇� + Cd50Param comParam = Cd50Param.builder().commandCode(ComCode).build(); + res = super.pre3(sv, dto.getIntakeId(), dto.getOperator(), ComCode, comParam); + if (res == null) { + //鍙戦�佸懡浠ゅ墠-4锛氬噯澶嘑eature + super.pre4(); + try { + //鍒涘缓澶栭儴鍛戒护锛堝彂缁欐帶鍒跺櫒锛� + Command com = sv.createOuterCommand("" + comId, ComCode); + com.rtuAddr = ctrlPo.getRtuAddr(); + com.rtuResultSendWebUrl = rtuResultSendWebUrl; + //鍙戦�佸懡浠� + res = super.doSend(sv, com); + if (res == null) { + //鍙戦�佸懡浠ゅ悗 + res = super.after(ComCode); + } + } catch (Exception e) { + res = BaseResponseUtils.buildFail("鏈嶅姟绔瀯閫犲苟鍚戦�氫俊涓棿浠跺彂閫佽姹傛椂寮傚父" + (e.getMessage() == null ? "" : e.getMessage())); + } finally { + //鏈�缁� + super.end(); + } + } + } + } + return res ; + } + + @Override + protected String checkDto(DtoBase dto) { + return null; + } + + @Override + protected String createRtnMsg(String code, JSONObject resultData){ + String msg; + if(resultData != null){ + JSONObject codeData = resultData.getJSONObject("data") ; + if(codeData == null){ + return RtuSuccessMsg ; + }else { + Integer minute = codeData.getInteger("minute"); + return "鏌ヨ鎴愬姛锛岃嚜鎶ュ懆鏈燂細" + minute + "鍒嗛挓"; + } + }else{ + msg = RtuSuccessMsg ; + } + return msg; + } +} diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/Cd50Dto.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/Cd50Dto.java new file mode 100644 index 0000000..6b05774 --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/Cd50Dto.java @@ -0,0 +1,17 @@ +package com.dy.pipIrrRemote.monitor.p202404V201; + +import com.dy.pipIrrRemote.common.dto.DtoBase; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Author: liurunyu + * @Date: 2025/5/9 14:42 + * @Description + */ + +@Data +@EqualsAndHashCode(callSuper=true) +public class Cd50Dto extends DtoBase { + public static final long serialVersionUID = 202505091450001L; +} diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/Cd50Param.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/Cd50Param.java new file mode 100644 index 0000000..f0dfbc4 --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/Cd50Param.java @@ -0,0 +1,17 @@ +package com.dy.pipIrrRemote.monitor.p202404V201; + +import com.dy.pipIrrRemote.monitor.common.CdParam; +import lombok.*; +import lombok.experimental.SuperBuilder; + +/** + * @Author: liurunyu + * @Date: 2025/5/9 14:43 + * @Description + */ +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +@SuperBuilder +public class Cd50Param extends CdParam { +} diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/Cd50Sv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/Cd50Sv.java new file mode 100644 index 0000000..08f7bcc --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/Cd50Sv.java @@ -0,0 +1,15 @@ +package com.dy.pipIrrRemote.monitor.p202404V201; + +import com.dy.pipIrrRemote.monitor.common.ComSv; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Author: liurunyu + * @Date: 2025/5/9 14:42 + * @Description + */ +@Slf4j +@Service +public class Cd50Sv extends ComSv { +} \ No newline at end of file -- Gitblit v1.8.0