pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java
@@ -352,7 +352,12 @@ 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 (comType != null) { @@ -375,7 +380,12 @@ 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 (comType != null) { pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmCommandHistoryMapper.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory; import com.dy.pipIrrGlobal.voRm.VoCommand; import com.dy.pipIrrGlobal.voRm.VoRtuAndVc; import com.dy.pipIrrGlobal.voRm.VoUnclosedParam; import com.dy.pipIrrGlobal.voRm.VoUnclosedValve; import org.apache.ibatis.annotations.Mapper; @@ -32,13 +33,39 @@ int updateByPrimaryKey(RmCommandHistory record); /** * 根据operator获取未关阀的RTU地址及虚拟卡编号数据对,获取未关阀记录使用 * @param operator * @return */ List<VoRtuAndVc> getUnclosedRtus(Long operator); /** * 根据RTU地址和虚拟卡编号获取成功开阀的最后一条记录,获取未关阀记录使用 * @param rtuAddr * @param vcNum * @return */ Long getLastComId(@Param("rtuAddr")String rtuAddr, @Param("vcNum")String vcNum); /** * 根据命令日志编号集合获取未关阀记录 * @param onLineMap * @param comIds * @return */ List<VoUnclosedValve> getUnclosedValves(@Param("onLineMap") String onLineMap, @Param("comIds") String comIds); /** * 根据操作员ID获取未关阀记录(包含在线情况) * @param onLineMap * @param operator * @return */ List<VoUnclosedValve> getUnclosedValves(@Param("onLineMap") String onLineMap, @Param("operator") Long operator); List<VoUnclosedValve> getUnclosedValves2(@Param("onLineMap") String onLineMap, @Param("operator") Long operator); /** * 根据取水口ID获取该取水口未关阀参数,平台选择取水口关阀使用 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoRtuAndVc.java
New file @@ -0,0 +1,28 @@ package com.dy.pipIrrGlobal.voRm; import com.dy.common.po.BaseEntity; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import lombok.Data; /** * @author ZhuBaoMin * @date 2024-11-13 15:44 * @LastEditTime 2024-11-13 15:44 * @Description RTU地址及虚拟卡编号视图对象,获取未关阀记录使用 */ @Data @JsonPropertyOrder({"rtuAddr", "vcNum"}) public class VoRtuAndVc implements BaseEntity { private static final long serialVersionUID = 202411131548001L; /** * 阀控器地址 */ private String rtuAddr; /** * 虚拟卡编号 */ private String vcNum; } pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml
@@ -195,8 +195,110 @@ where com_id = #{comId,jdbcType=BIGINT} </update> <!--根据操作员ID获取未关阀记录(包含在线情况)--> <!--根据operator获取未关阀的RTU地址及虚拟卡编号数据对,获取未关阀记录使用--> <select id="getUnclosedRtus" resultType="com.dy.pipIrrGlobal.voRm.VoRtuAndVc"> SELECT com.rtu_addr AS rtuAddr, com.param ->> '$.icCardNo' AS vcNum FROM rm_command_history com where 1=1 AND com.operator = #{operator} AND com.result = 1 AND ((com.protocol = 'p206V1' OR com.protocol = 'p206V2') AND (com.command_code = '92' OR com.command_code = '97' OR com.command_code = '99' OR com.command_code = 'A0' OR com.command_code = 'A1' OR com.command_code = 'A2')) AND ( SELECT op_dt FROM rm_open_close_valve_last WHERE rtu_addr = com.rtu_addr AND op_ic_card_no = com.param ->> '$.icCardNo' ORDER BY op_dt DESC LIMIT 1 ) IS NOT NULL AND ( SELECT cl_dt FROM rm_open_close_valve_last WHERE rtu_addr = com.rtu_addr AND op_ic_card_no = com.param ->> '$.icCardNo' ORDER BY op_dt DESC LIMIT 1 ) IS NULL GROUP BY com.rtu_addr, com.param ->> '$.icCardNo' </select> <!--根据RTU地址和虚拟卡编号获取成功开阀的最后一条记录,获取未关阀记录使用--> <select id="getLastComId" resultType="java.lang.Long"> SELECT com_id AS comId FROM rm_command_history WHERE result = 1 AND ((protocol = 'p206V1' OR protocol = 'p206V2') AND (command_code = '92' OR command_code = '97' OR command_code = '99' OR command_code = 'A0' OR command_code = 'A1' OR command_code = 'A2')) AND rtu_addr = #{rtuAddr} AND param ->> '$.icCardNo' = #{vcNum} ORDER BY send_time DESC LIMIT 1 </select> <select id="getUnclosedValves" resultType="com.dy.pipIrrGlobal.voRm.VoUnclosedValve"> SELECT inta.name AS intakeNum, IFNULL(rtus.isOnLine, false) AS isOnLine, com.rtu_addr AS rtuAddr, com.param ->> '$.icCardNo' AS vcNum, ( SELECT param ->> '$.orderNo' AS orderNo FROM rm_command_history WHERE rtu_addr = com.rtu_addr ORDER BY send_time desc LIMIT 0,1 ) AS orderNo, 'toClose' AS state, CASE WHEN com.command_code = 'A1' OR com.command_code = 'A2' THEN 1 ELSE 0 END AS planned, com.send_time AS sendTime, (SELECT dt FROM rm_work_report_last WHERE rtu_addr = com.rtu_addr AND ic_card_no = com.param ->> '$.icCardNo' AND dt > com.send_time ORDER BY dt DESC LIMIT 1) AS dt, (SELECT water_instant FROM rm_work_report_last WHERE rtu_addr = com.rtu_addr AND ic_card_no = com.param ->> '$.icCardNo' AND dt > com.send_time ORDER BY dt DESC LIMIT 1) AS waterInstant FROM rm_command_history com INNER JOIN pr_controller con ON com.rtu_addr = con.rtuAddr INNER JOIN pr_intake inta ON con.intakeId = inta.id LEFT JOIN JSON_TABLE( <!--'[{"rtuAddr":"620201000030","isOnLine":true}]',--> #{onLineMap}, '$[*]' COLUMNS ( rtuAddr VARCHAR(20) PATH '$.rtuAddr', isOnLine BOOLEAN PATH '$.isOnLine' ) ) rtus ON com.rtu_addr = rtus.rtuAddr <where> AND com.com_id in #{comIds} AND ( SELECT op_dt FROM rm_open_close_valve_last WHERE rtu_addr = com.rtu_addr AND op_ic_card_no = com.param ->> '$.icCardNo' ORDER BY op_dt DESC LIMIT 1 ) IS NOT NULL AND ( SELECT cl_dt FROM rm_open_close_valve_last WHERE rtu_addr = com.rtu_addr AND op_ic_card_no = com.param ->> '$.icCardNo' ORDER BY op_dt DESC LIMIT 1 ) IS NULL </where> GROUP BY inta.name, rtus.isOnLine, com.rtu_addr, com.param ->> '$.icCardNo', com.command_code, com.send_time, dt, waterInstant ORDER BY com.send_time DESC </select> <!--根据操作员ID获取未关阀记录(包含在线情况)--> <select id="getUnclosedValves2" resultType="com.dy.pipIrrGlobal.voRm.VoUnclosedValve"> SELECT inta.name AS intakeNum, IFNULL(rtus.isOnLine, false) AS isOnLine, @@ -243,6 +345,7 @@ ) rtus ON com.rtu_addr = rtus.rtuAddr <where> AND com.operator = #{operator} AND com.result = 1 AND ((com.protocol = 'p206V1' OR com.protocol = 'p206V2') AND (com.command_code = '92' OR com.command_code = '97' OR com.command_code = '99' OR com.command_code = 'A0' OR com.command_code = 'A1' OR com.command_code = 'A2')) AND ( SELECT op_dt FROM rm_open_close_valve_last pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/issue/IssueCtrl.java
@@ -7,6 +7,7 @@ import com.dy.pipIrrApp.issue.dto.DtoDeleteParam; import com.dy.pipIrrApp.issue.qo.QoIssueReport; import com.dy.pipIrrGlobal.pojoOp.OpeIssueReport; import com.dy.pipIrrGlobal.pojoOp.OpeReportReply; import com.dy.pipIrrGlobal.voOp.VoIssueReport; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -92,4 +93,26 @@ } /** * 回复巡检员问题上报 * @param po * @param bindingResult * @return */ @PostMapping(path = "replyReport") @Transactional(rollbackFor = Exception.class) public BaseResponse<Boolean> replyReport(@RequestBody @Valid OpeReportReply po, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } String result = issueSv.replyReport(po); if(!result.equals("sucess")) { return BaseResponseUtils.buildErrorMsg(result); } return BaseResponseUtils.buildSuccess() ; } } pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/issue/IssueSv.java
@@ -114,6 +114,13 @@ return "回复记录添加失败"; } OpeIssueReport issueReport = new OpeIssueReport(); issueReport.setId(po.getReportId()); issueReport.setState((byte)2); Integer rec = opeIssueReportMapper.updateByPrimaryKeySelective(issueReport); if(rec == 0) { return "巡检员问题上报状态修改失败"; } return "sucess"; } pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java
@@ -18,6 +18,7 @@ import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory; import com.dy.pipIrrGlobal.pojoSe.SeClientCard; import com.dy.pipIrrGlobal.voRm.VoIrrigaterProfile; import com.dy.pipIrrGlobal.voRm.VoRtuAndVc; import com.dy.pipIrrGlobal.voRm.VoUnclosedValve; import com.dy.pipIrrGlobal.voSe.VoVirtualCard; import lombok.RequiredArgsConstructor; @@ -116,13 +117,30 @@ System.out.println(jsonArray.toJSONString()); } List<VoUnclosedValve> res = rmCommandHistoryMapper.getUnclosedValves(jsonArray.toJSONString(), operator); /** * 获取未关阀的RTU地址和虚拟卡编号对数组 * 遍历数组获取最后命令日志ID集合 */ List<VoRtuAndVc> rtus = rmCommandHistoryMapper.getUnclosedRtus(operator); String comIds = ""; if(rtus != null && rtus.size() > 0) { for (int i = 0; i < rtus.size(); i++) { Long comId = rmCommandHistoryMapper.getLastComId(rtus.get(i).getRtuAddr(), rtus.get(i).getVcNum()); if(comId > 0) { comIds = comIds + comId + ","; } } } if(comIds.length() > 0) { comIds = "(" + comIds.substring(0,comIds.length()) + ")"; List<VoUnclosedValve> res = rmCommandHistoryMapper.getUnclosedValves(jsonArray.toJSONString(), comIds); if(res != null) { return res; } else { return new ArrayList<>(); } } return new ArrayList<>(); } /** * 为指定(阀控器地址、水卡编号、无关阀记录)开关阀最新记录添加关阀时间,使之不在未关阀记录中显示