|  |  | 
 |  |  | import com.dy.pipIrrGlobal.command.enums.LastOperateENUM; | 
 |  |  | import com.dy.pipIrrGlobal.command.result.CommandResultCode; | 
 |  |  | import com.dy.pipIrrGlobal.daoBa.BaSettingsMapper; | 
 |  |  | import com.dy.pipIrrGlobal.daoIr.IrIntakeOperateMapper; | 
 |  |  | import com.dy.pipIrrGlobal.daoPr.PrCommonIntakesMapper; | 
 |  |  | import com.dy.pipIrrGlobal.daoPr.PrControllerMapper; | 
 |  |  | import com.dy.pipIrrGlobal.daoRm.RmCommandHistoryMapper; | 
 |  |  | 
 |  |  | import java.text.SimpleDateFormat; | 
 |  |  | import java.time.LocalDateTime; | 
 |  |  | import java.time.format.DateTimeFormatter; | 
 |  |  | import java.util.*; | 
 |  |  | import java.util.Date; | 
 |  |  | import java.util.HashMap; | 
 |  |  | import java.util.Map; | 
 |  |  | import java.util.Random; | 
 |  |  | import java.util.concurrent.CompletableFuture; | 
 |  |  | import java.util.concurrent.ExecutionException; | 
 |  |  | import java.util.concurrent.TimeUnit; | 
 |  |  | 
 |  |  |  | 
 |  |  |     protected String commandTypeOuter = CommandType.outerCommand; | 
 |  |  |  | 
 |  |  |     // 存储实例化的 CompletableFuture<Data> 对象 | 
 |  |  |     protected static Map<Long, Object> features = new HashMap<>(); | 
 |  |  |     //protected static Boolean setuped = false; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private RestTemplate restTemplate; | 
 |  |  |  | 
 |  |  | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private PrCommonIntakesMapper prCommonIntakesMapper; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private IrIntakeOperateMapper irIntakeOperateMapper; | 
 |  |  |  | 
 |  |  |     public static ComSupport comSupport; | 
 |  |  |  | 
 |  |  | 
 |  |  |      */ | 
 |  |  |     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")) { | 
 |  |  |                 // 请求失败,RTU未上线,清除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)) { | 
 |  |  | 
 |  |  |         Object param = po.getParam(); | 
 |  |  |         String rtuResultSendWebUrl = po.getRtuResultSendWebUrl(); | 
 |  |  |         Long operator = po.getOperator(); | 
 |  |  |         Byte openType = po.getOpenType(); | 
 |  |  |  | 
 |  |  |         // 构造命令 | 
 |  |  |         Command com = command(comId, commandCode, rtuAddr, protocol, rtuResultSendWebUrl, param); | 
 |  |  | 
 |  |  |             rmCommandHistory.setResult((byte) 0); | 
 |  |  |             rmCommandHistoryMapper.updateByPrimaryKeySelective(rmCommandHistory); | 
 |  |  |             //return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString()); | 
 |  |  |             irIntakeOperateMapper.updateByCommandId(comId, (byte)2, response_CallBack.getMsg()); | 
 |  |  |             return BaseResponseUtils.buildErrorMsg(response_CallBack.getMsg()); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | 
 |  |  |             rmCommandHistory.setComId(comId); | 
 |  |  |             rmCommandHistory.setResult((byte) 0); | 
 |  |  |             rmCommandHistoryMapper.updateByPrimaryKeySelective(rmCommandHistory); | 
 |  |  |             irIntakeOperateMapper.updateByCommandId(comId, (byte)2, "回调超时"); | 
 |  |  |             return BaseResponseUtils.buildErrorMsg(CommandResultCode.GET_RESULT_IN_ONE_MINUTE.getMessage()); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | 
 |  |  |             JSONObject job_param = (JSONObject) JSON.toJSON(param); | 
 |  |  |             JSONObject job_data = job_response.getJSONObject("content").getJSONObject("data"); | 
 |  |  |             if(!job_data.getBoolean("success")) { | 
 |  |  |                 // 开关阀失败 | 
 |  |  |                 // 开关阀失败,更新命令执行状态及虚拟卡状态 | 
 |  |  |  | 
 |  |  |                 rmCommandHistory = new RmCommandHistory(); | 
 |  |  |                 rmCommandHistory.setComId(comId); | 
 |  |  |                 rmCommandHistory.setResult((byte) 0); | 
 |  |  |                 rmCommandHistoryMapper.updateByPrimaryKeySelective(rmCommandHistory); | 
 |  |  |  | 
 |  |  |                 if(openType != null && openType == 1 ) { | 
 |  |  |                     irIntakeOperateMapper.updateByCommandId(comId, (byte)2, "开阀失败"); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 // 开阀失败则解除占用,关阀失败则占用 | 
 |  |  |                 if (comType != null) { | 
 |  |  | 
 |  |  |                 response_CallBack.setMsg(CommandResultCode.OPEN_CLOSE_FAIL.getMessage()); | 
 |  |  |                 response_CallBack.setSuccess(false); | 
 |  |  |             }else { | 
 |  |  |                 // 开关阀成功 | 
 |  |  |                 // 开关阀成功,更新命令执行状态及虚拟卡状态 | 
 |  |  |  | 
 |  |  |                 rmCommandHistory = new RmCommandHistory(); | 
 |  |  |                 rmCommandHistory.setComId(comId); | 
 |  |  |                 rmCommandHistory.setResult((byte) 1); | 
 |  |  |                 rmCommandHistoryMapper.updateByPrimaryKeySelective(rmCommandHistory); | 
 |  |  |  | 
 |  |  |                 if(openType != null && openType == 1) { | 
 |  |  |                     irIntakeOperateMapper.updateByCommandId(comId, (byte)1, null); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 // 开阀成功则占用,关阀成功不占用 | 
 |  |  |                 if (comType != null) { |