From 9ad36b2b910aa15e45d5fb40b7e39d8d887a7cb7 Mon Sep 17 00:00:00 2001 From: Administrator <zhubaomin> Date: 星期二, 28 五月 2024 08:26:47 +0800 Subject: [PATCH] 2024-05-27 朱宝民 远程开关阀、RTU在线情况 --- pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java | 296 +++++++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 239 insertions(+), 57 deletions(-) diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java index e986f2e..b2af522 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java @@ -1,18 +1,27 @@ package com.dy.pipIrrRemote.valve; -import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.JSONObject; import com.dy.common.aop.SsoAop; +import com.dy.common.mw.protocol.Command; +import com.dy.common.mw.protocol.Data; +import com.dy.common.mw.protocol.p206V202404.CodeV202404; +import com.dy.common.mw.protocol.p206V202404.downVos.ComCd92_A2Vo; +import com.dy.common.mw.protocol.p206V202404.downVos.ComCd93_A3Vo; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; -import com.dy.common.webUtil.ResultCodeMsg; +import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper; +import com.dy.pipIrrGlobal.daoRm.RmCommandHistoryMapper; +import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper; +import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory; +import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard; +import com.dy.pipIrrGlobal.voRm.VoUnclosedValve; +import com.dy.pipIrrGlobal.voSe.VoVirtualCard; +import com.dy.pipIrrRemote.common.ComSupport; +import com.dy.pipIrrRemote.common.CommandSv; +import com.dy.pipIrrRemote.common.dto.ValveClose; +import com.dy.pipIrrRemote.common.dto.ValveOpen; +import com.dy.pipIrrRemote.result.RemoteResultCode; import com.dy.pipIrrRemote.utils.RestTemplateUtils; -import com.dy.pipIrrRemote.valve.dto.DTOValve; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; +import com.dy.pipIrrSell.virtualCard.enums.LastOperateENUM; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -22,13 +31,12 @@ import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; -import java.util.HashMap; -import java.util.Map; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Date; +import java.util.List; import java.util.Objects; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; +import java.util.Random; /** * @author ZhuBaoMin @@ -42,67 +50,241 @@ @RestController @RequestMapping(path="valve") @RequiredArgsConstructor -public class ValveCtrl { +public class ValveCtrl extends ComSupport { private final RestTemplateUtils restTemplateUtils; - - private CompletableFuture<String> futureValue = new CompletableFuture<>(); + private final CommandSv commandSv; + private final SeVirtualCardMapper seVirtualCardMapper; + private final PrWaterPriceMapper prWaterPriceMapper; + private final RmCommandHistoryMapper rmCommandHistoryMapper; /** - * 杩滅▼寮�鍏抽榾 - * @param po 寮�鍏抽榾浼犲叆瀵硅薄 + * 杩滅▼寮�闃�锛堝钩鍙般�丄PP锛� + * @param valve * @param bindingResult * @return */ - @Operation(summary = "杩滅▼寮�鍏抽榾", description = "杩滅▼寮�鍏抽榾") - @ApiResponses(value = { - @ApiResponse( - responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, - description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�", - content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, - schema = @Schema(implementation = Boolean.class))} - ) - }) - @PostMapping(path = "operate", consumes = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(path = "open", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() - public BaseResponse<Boolean> open(@RequestBody @Valid DTOValve po, BindingResult bindingResult) throws ExecutionException, InterruptedException { + public BaseResponse<Boolean> open(@RequestBody @Valid ValveOpen valve, BindingResult bindingResult) { + DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyMMddHHmmss"); if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } - String a = null; - try { - a = futureValue.get(10, TimeUnit.SECONDS); - } catch (TimeoutException e) { - return BaseResponseUtils.buildFail("1鍒嗛挓鍚庡幓鏌ョ湅缁撴灉"); + Long intakeId = valve.getIntakeId(); + Long vcId = valve.getVcId(); + Integer userType = valve.getUserType(); + Long operator = valve.getOperator(); + String comId = null; + + // 鑾峰彇绯荤粺鍙傛暟 + if(!setuped) { + setUp(); } - futureValue = new CompletableFuture<>(); - Map<String, Object> param = new HashMap<>(); - param.put("controllerType", "01"); - param.put("projectNo", 100); - param.put("rtuNewAddr", "202405061656120001"); + // 铏氭嫙鍗D鎹㈣櫄鎷熷崱瀵硅薄 + VoVirtualCard vc = seVirtualCardMapper.getVcById(vcId); + // 鑾峰彇姘翠环 + Double waterPrice = prWaterPriceMapper.getPrice(); - Map<String, Object> postParams = new HashMap<>(); - postParams.put("id", 2024050616450001L); - postParams.put("protocol", "p1"); - postParams.put("rtuAddr", "20001"); - postParams.put("type", "outerCommand"); - postParams.put("code", "10"); - postParams.put("noRtMwDealRes", false); - postParams.put("rtuResultSendWebUrl", "127.0.0.1/remote/"); - postParams.put("param", param); + // 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃 + String rtuAddr = commandSv.getRtuAddrByIntakeId(intakeId); + if(rtuAddr == null || rtuAddr.length() == 0) { + return BaseResponseUtils.buildError(RemoteResultCode.RTU_ADDR_CANNOT_BE_NULL.getMessage()); + } - Map<String, String> headerParams = new HashMap<>(); + // 鐢熸垚璁㈠崟鍙� + LocalDateTime dateTime = LocalDateTime.now(); + Random random = new Random(); + String CHARACTERS = "0123456789"; + StringBuilder sb = new StringBuilder(4); + for (int i = 0; i < 4; i++) { + int index = random.nextInt(CHARACTERS.length()); + sb.append(CHARACTERS.charAt(index)); + } + String orderNo = dtf.format(dateTime) + sb.toString(); - JSONObject job_result = restTemplateUtils.post("http://localhost:8070/accMw/com/send", JSON.toJSONString(postParams), headerParams); + String commandCode = null; + if(protocolName.equals("p206V202404")) { + // 鑾峰彇鍔熻兘鐮� + if(userType == 1) { + // 骞冲彴寮�闃� + commandCode = CodeV202404.cd_92; + }else { + // APP寮�闃� + commandCode = CodeV202404.cd_A2; + } - return BaseResponseUtils.buildSuccess(a) ; + // 鍒涘缓瑙嗗浘 + ComCd92_A2Vo param = new ComCd92_A2Vo(); + param.controllerType = controllerType; + param.projectNo = projectNo; + param.icCardNo = vc.getVcNum(); + param.waterRemain = 0.0; + param.moneyRemain = vc.getMoney(); + param.waterPrice = waterPrice; + param.elePrice = 0.0; + param.orderNo = orderNo; + + // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑 + RmCommandHistory rmCommandHistory = getComHistory(commandCode, rtuAddr, param, operator); + comId = commandSv.insert(rmCommandHistory); + + // 鏋勯�犲苟鍙戦�佸懡浠� + Command com = command(comId, commandCode, rtuAddr, param); + sendCom2Mw(com); + } else { + // 鑾峰彇鍔熻兘鐮� + if(userType == 1) { + // 骞冲彴寮�闃� + commandCode = "92"; + }else { + // APP寮�闃� + commandCode = "97"; + } + + // 鍒涘缓瑙嗗浘 + ComCd92_A2Vo param = new ComCd92_A2Vo(); + + // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑 + RmCommandHistory rmCommandHistory = getComHistory(commandCode, rtuAddr, param, operator); + comId = commandSv.insert(rmCommandHistory); + + // 鏋勯�犲苟鍙戦�佸懡浠� + Command com = command(comId, commandCode, rtuAddr, param); + sendCom2Mw(com); + } + + // 澶勭悊鍥炶皟 + BaseResponse response = dealWithCallBack(comId); + if(!response.getCode().equals("0001")) { + return BaseResponseUtils.buildError(RemoteResultCode.GET_RESULT_ERROR.getMessage()); + } + + // 鏇存敼铏氭嫙鍗$姸鎬侊細鏄惁浣跨敤涓�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂� + SeVirtualCard virtualCard = new SeVirtualCard(); + virtualCard.setId(vcId); + virtualCard.setInUse((byte) 1); + virtualCard.setLastOperate(LastOperateENUM.OPEN_VALVE.getCode()); + virtualCard.setLastOperateTime(new Date()); + seVirtualCardMapper.updateByPrimaryKeySelective(virtualCard); + + Data myData = (Data)response.getContent(); + return BaseResponseUtils.buildSuccess(myData) ; } - @GetMapping("/setValue") - public String setValue(String name) { - futureValue.complete(name); - return "Value set"; + /** + * 杩滅▼鍏抽榾锛堝钩鍙般�丄PP锛� + * @param valve + * @param bindingResult + * @return + */ + @PostMapping(path = "close", consumes = MediaType.APPLICATION_JSON_VALUE) + @Transactional(rollbackFor = Exception.class) + @SsoAop() + public BaseResponse<Boolean> close(@RequestBody @Valid ValveClose valve, BindingResult bindingResult) { + DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyMMddHHmmss"); + if(bindingResult != null && bindingResult.hasErrors()){ + return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); + } + + String rtuAddr = valve.getRtuAddr(); + String vcNum = valve.getVcNum(); + String orderNo = valve.getOrderNo(); + Integer userType = valve.getUserType(); + Long operator = valve.getOperator(); + String comId = null; + + // 鑾峰彇绯荤粺鍙傛暟 + if(!setuped) { + setUp(); + } + + String commandCode = null; + if(protocolName.equals("p206V202404")) { + // 鑾峰彇鍔熻兘鐮� + if (userType == 1) { + // 骞冲彴鍏抽榾 + commandCode = CodeV202404.cd_93; + } else { + // APP鍏抽榾 + commandCode = CodeV202404.cd_A3; + } + + // 鍒涘缓瑙嗗浘 + ComCd93_A3Vo param = new ComCd93_A3Vo(); + param.controllerType = controllerType; + param.projectNo = projectNo; + param.icCardNo = vcNum; + param.orderNo = orderNo; + + // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑 + RmCommandHistory rmCommandHistory = getComHistory(commandCode, rtuAddr, param, operator); + comId = commandSv.insert(rmCommandHistory); + + // 鏋勯�犲苟鍙戦�佸懡浠� + Command com = command(comId, commandCode, rtuAddr, param); + sendCom2Mw(com); + } else { + // 鑾峰彇鍔熻兘鐮� + if (userType == 1) { + // 骞冲彴鍏抽榾 + commandCode = "93"; + } else { + // APP鍏抽榾 + commandCode = "98"; + } + + // 鍒涘缓瑙嗗浘 + ComCd93_A3Vo param = new ComCd93_A3Vo(); + param.controllerType = controllerType; + param.projectNo = projectNo; + param.icCardNo = vcNum; + param.orderNo = orderNo; + + // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑 + RmCommandHistory rmCommandHistory = getComHistory(commandCode, rtuAddr, param, operator); + comId = commandSv.insert(rmCommandHistory); + + // 鏋勯�犲苟鍙戦�佸懡浠� + Command com = command(comId, commandCode, rtuAddr, param); + sendCom2Mw(com); + } + + // 澶勭悊鍥炶皟 + BaseResponse response = dealWithCallBack(comId); + if(!response.getCode().equals("0001")) { + return BaseResponseUtils.buildError(RemoteResultCode.GET_RESULT_ERROR.getMessage()); + } + + // 鏇存敼铏氭嫙鍗$姸鎬侊細鏄惁浣跨敤涓�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂� + Long vcId = seVirtualCardMapper.getVcIdByNum(vcNum); + SeVirtualCard virtualCard = new SeVirtualCard(); + virtualCard.setId(vcId); + virtualCard.setInUse((byte) 0); + virtualCard.setLastOperate(LastOperateENUM.CLOSE_VALVE.getCode()); + virtualCard.setLastOperateTime(new Date()); + seVirtualCardMapper.updateByPrimaryKeySelective(virtualCard); + + Data myData = (Data)response.getContent(); + return BaseResponseUtils.buildSuccess(myData) ; + } + + /** + * 鏍规嵁鎿嶄綔鍛業D鑾峰彇鏈叧闃�璁板綍 + * @param operator + * @return + */ + @GetMapping(path = "/get") + @SsoAop() + public BaseResponse<List<VoUnclosedValve>> getUnclosedValves(@RequestParam Long operator){ + try { + List<VoUnclosedValve> res = rmCommandHistoryMapper.getUnclosedValves(operator); + return BaseResponseUtils.buildSuccess(res); + } catch (Exception e) { + log.error("鑾峰彇鏈叧闃�璁板綍寮傚父", e); + return BaseResponseUtils.buildException(e.getMessage()) ; + } } } -- Gitblit v1.8.0