pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/AutomaticClose.java
@@ -1,12 +1,15 @@ package com.dy.pipIrrRemote.common.dto; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.util.Date; /** * @author ZhuBaoMin * @date 2024-07-23 10:36 * @LastEditTime 2024-07-23 10:36 * @Description 自动关阀(定时关阀、定量关阀)传输对象 * @Description 自动关阀开阀传输对象 */ @Data @@ -19,6 +22,12 @@ private Long vcId; /** * 计划开阀时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date plannedOpenTime; /** * 用水时长,拥有定时关阀 */ private Integer minutes; @@ -27,4 +36,5 @@ * 预用水量,拥有定量关阀 */ private Integer waterAmount; } pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java
@@ -3,10 +3,7 @@ import com.alibaba.fastjson2.JSONObject; import com.dy.common.aop.SsoAop; import com.dy.common.mw.protocol.p206V1_0_0.CodeV1_0_1; import com.dy.common.mw.protocol.p206V1_0_0.downVos.Com97Vo; import com.dy.common.mw.protocol.p206V1_0_0.downVos.Com98Vo; import com.dy.common.mw.protocol.p206V1_0_0.downVos.Com99Vo; import com.dy.common.mw.protocol.p206V1_0_0.downVos.ComA0Vo; import com.dy.common.mw.protocol.p206V1_0_0.downVos.*; import com.dy.common.mw.protocol.p206V202404.CodeV202404; import com.dy.common.mw.protocol.p206V202404.downVos.ComCd15Vo; import com.dy.common.mw.protocol.p206V202404.downVos.ComCd92_A2Vo; @@ -38,6 +35,7 @@ import org.springframework.web.bind.annotation.*; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -500,6 +498,218 @@ } /** * 计划开阀定时关阀 * @param automaticClose * @param bindingResult * @return */ @PostMapping(path = "planed_open_timed_close", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> planedOpenTimedClose(@RequestBody @Valid AutomaticClose automaticClose, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long intakeId = automaticClose.getIntakeId(); Long vcId = automaticClose.getVcId(); Date plannedOpenTime = automaticClose.getPlannedOpenTime(); Integer minutes = automaticClose.getMinutes(); Long operator = automaticClose.getOperator(); Long comId = idLongGenerator.generate(); Integer year = Integer.parseInt(String.format("%tY", plannedOpenTime)); Integer month = Integer.parseInt(String.format("%tm", plannedOpenTime)); Integer day = Integer.parseInt(String.format("%td", plannedOpenTime)); Integer hour = Integer.parseInt(String.format("%tH", plannedOpenTime)); Integer minute = Integer.parseInt(String.format("%tM", plannedOpenTime)); /** * 如果农户选择了虚拟卡,则使用该虚拟卡 * 如果农户未选择虚拟卡,则根据取水口ID获取与之绑定的虚拟卡 * 如果取水口没有与之绑定的虚拟卡,则提示农户选择一张虚拟卡 */ if(vcId == null) { vcId = commandSv.getVcIdByIntakeId(intakeId); if(vcId == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.PLEASE_SELECT_A_VC.getMessage()); } } // 虚拟卡ID换虚拟卡对象 VoVirtualCard vc = commandSv.getVcById(vcId); if(vc == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.PLEASE_SELECT_A_VC.getMessage()); } String vcNum = vc.getVcNum().toString(); Double moneyRemain = vc.getMoney(); // 获取水价 Double waterPrice = commandSv.getPrice(); // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); if(job_rtu == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_EXIST.getMessage()); } String rtuAddr = job_rtu.getString("rtuAddr"); String protocol = job_rtu.getString("protocol"); String orgTag = job_rtu.getString("orgTag"); comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); // 生成订单号 String orderNo = generateOrderNo(); String commandCode = null; if(protocol.equals("p206V202404")) { return BaseResponseUtils.buildSuccess(); } else if(protocol.equals("p206V1_0_1")) { // 获取功能码 commandCode = CodeV1_0_1.cd_A1; // 创建视图 ComA1Vo param = new ComA1Vo(); param.setIcCardNo(vcNum); param.setMoneyRemain(moneyRemain); param.setWaterPrice(waterPrice); param.setMinutes(minutes); param.setYear(year); param.setMonth(month); param.setDay(day); param.setHour(hour); param.setMinute(minute); param.setOrderNo(orderNo); /** * 构造命令、发送命令并处理请求结果及执行结果 * 1 准备参数 * 2 调用公共方法 */ Param myParam = new Param(); myParam.setComId(comId); myParam.setComType((byte)2); myParam.setCommandCode(commandCode); myParam.setCommandName(CodeV202404.getCodeName(commandCode)); myParam.setIntakeId(intakeId); myParam.setRtuAddr(rtuAddr); myParam.setProtocol(protocol); myParam.setVcId(vcId); myParam.setParam(param); myParam.setRtuResultSendWebUrl(rtuCallbackUrl_rm); myParam.setOperator(operator); return dealWithCommandResult(myParam); } else { return BaseResponseUtils.buildErrorMsg("系统暂不支持该协议"); } } /** * 计划开阀定量关阀 * @param automaticClose * @param bindingResult * @return */ @PostMapping(path = "planed_open_quantify_close", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> planedOpenQuantifyClose(@RequestBody @Valid AutomaticClose automaticClose, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long intakeId = automaticClose.getIntakeId(); Long vcId = automaticClose.getVcId(); Date plannedOpenTime = automaticClose.getPlannedOpenTime(); Integer waterAmount = automaticClose.getWaterAmount(); Long operator = automaticClose.getOperator(); Long comId = idLongGenerator.generate(); Integer year = Integer.parseInt(String.format("%tY", plannedOpenTime)); Integer month = Integer.parseInt(String.format("%tm", plannedOpenTime)); Integer day = Integer.parseInt(String.format("%td", plannedOpenTime)); Integer hour = Integer.parseInt(String.format("%tH", plannedOpenTime)); Integer minute = Integer.parseInt(String.format("%tM", plannedOpenTime)); /** * 如果农户选择了虚拟卡,则使用该虚拟卡 * 如果农户未选择虚拟卡,则根据取水口ID获取与之绑定的虚拟卡 * 如果取水口没有与之绑定的虚拟卡,则提示农户选择一张虚拟卡 */ if(vcId == null) { vcId = commandSv.getVcIdByIntakeId(intakeId); if(vcId == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.PLEASE_SELECT_A_VC.getMessage()); } } // 虚拟卡ID换虚拟卡对象 VoVirtualCard vc = commandSv.getVcById(vcId); if(vc == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.PLEASE_SELECT_A_VC.getMessage()); } String vcNum = vc.getVcNum().toString(); Double moneyRemain = vc.getMoney(); // 获取水价 Double waterPrice = commandSv.getPrice(); // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); if(job_rtu == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_EXIST.getMessage()); } String rtuAddr = job_rtu.getString("rtuAddr"); String protocol = job_rtu.getString("protocol"); String orgTag = job_rtu.getString("orgTag"); comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); // 生成订单号 String orderNo = generateOrderNo(); String commandCode = null; if(protocol.equals("p206V202404")) { return BaseResponseUtils.buildSuccess(); } else if(protocol.equals("p206V1_0_1")) { // 获取功能码 commandCode = CodeV1_0_1.cd_A2; // 创建视图 ComA2Vo param = new ComA2Vo(); param.setIcCardNo(vcNum); param.setMoneyRemain(moneyRemain); param.setWaterPrice(waterPrice); param.setWaterAmount(waterAmount); param.setYear(year); param.setMonth(month); param.setDay(day); param.setHour(hour); param.setMinute(minute); param.setOrderNo(orderNo); /** * 构造命令、发送命令并处理请求结果及执行结果 * 1 准备参数 * 2 调用公共方法 */ Param myParam = new Param(); myParam.setComId(comId); myParam.setComType((byte)2); myParam.setCommandCode(commandCode); myParam.setCommandName(CodeV202404.getCodeName(commandCode)); myParam.setIntakeId(intakeId); myParam.setRtuAddr(rtuAddr); myParam.setProtocol(protocol); myParam.setVcId(vcId); myParam.setParam(param); myParam.setRtuResultSendWebUrl(rtuCallbackUrl_rm); myParam.setOperator(operator); return dealWithCommandResult(myParam); } else { return BaseResponseUtils.buildErrorMsg("系统暂不支持该协议"); } } /** * 根据操作员ID获取未关阀记录 * @param operator * @return pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java
@@ -3,10 +3,7 @@ import com.alibaba.fastjson2.JSONObject; import com.dy.common.aop.SsoAop; import com.dy.common.mw.protocol.p206V1_0_0.CodeV1_0_1; import com.dy.common.mw.protocol.p206V1_0_0.downVos.Com97Vo; import com.dy.common.mw.protocol.p206V1_0_0.downVos.Com98Vo; import com.dy.common.mw.protocol.p206V1_0_0.downVos.Com99Vo; import com.dy.common.mw.protocol.p206V1_0_0.downVos.ComA0Vo; import com.dy.common.mw.protocol.p206V1_0_0.downVos.*; import com.dy.common.mw.protocol.p206V202404.CodeV202404; import com.dy.common.mw.protocol.p206V202404.downVos.ComCd15Vo; import com.dy.common.mw.protocol.p206V202404.downVos.ComCd92_A2Vo; @@ -37,6 +34,7 @@ import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -499,6 +497,218 @@ } /** * 计划开阀定时关阀 * @param automaticClose * @param bindingResult * @return */ @PostMapping(path = "planed_open_timed_close", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> planedOpenTimedClose(@RequestBody @Valid AutomaticClose automaticClose, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long intakeId = automaticClose.getIntakeId(); Long vcId = automaticClose.getVcId(); Date plannedOpenTime = automaticClose.getPlannedOpenTime(); Integer minutes = automaticClose.getMinutes(); Long operator = automaticClose.getOperator(); Long comId = idLongGenerator.generate(); Integer year = Integer.parseInt(String.format("%tY", plannedOpenTime)); Integer month = Integer.parseInt(String.format("%tm", plannedOpenTime)); Integer day = Integer.parseInt(String.format("%td", plannedOpenTime)); Integer hour = Integer.parseInt(String.format("%tH", plannedOpenTime)); Integer minute = Integer.parseInt(String.format("%tM", plannedOpenTime)); /** * 如果农户选择了虚拟卡,则使用该虚拟卡 * 如果农户未选择虚拟卡,则根据取水口ID获取与之绑定的虚拟卡 * 如果取水口没有与之绑定的虚拟卡,则提示农户选择一张虚拟卡 */ if(vcId == null) { vcId = commandSv.getVcIdByIntakeId(intakeId); if(vcId == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.PLEASE_SELECT_A_VC.getMessage()); } } // 虚拟卡ID换虚拟卡对象 VoVirtualCard vc = commandSv.getVcById(vcId); if(vc == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.PLEASE_SELECT_A_VC.getMessage()); } String vcNum = vc.getVcNum().toString(); Double moneyRemain = vc.getMoney(); // 获取水价 Double waterPrice = commandSv.getPrice(); // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); if(job_rtu == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_EXIST.getMessage()); } String rtuAddr = job_rtu.getString("rtuAddr"); String protocol = job_rtu.getString("protocol"); String orgTag = job_rtu.getString("orgTag"); comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); // 生成订单号 String orderNo = generateOrderNo(); String commandCode = null; if(protocol.equals("p206V202404")) { return BaseResponseUtils.buildSuccess(); } else if(protocol.equals("p206V1_0_1")) { // 获取功能码 commandCode = CodeV1_0_1.cd_A1; // 创建视图 ComA1Vo param = new ComA1Vo(); param.setIcCardNo(vcNum); param.setMoneyRemain(moneyRemain); param.setWaterPrice(waterPrice); param.setMinutes(minutes); param.setYear(year); param.setMonth(month); param.setDay(day); param.setHour(hour); param.setMinute(minute); param.setOrderNo(orderNo); /** * 构造命令、发送命令并处理请求结果及执行结果 * 1 准备参数 * 2 调用公共方法 */ Param myParam = new Param(); myParam.setComId(comId); myParam.setComType((byte)2); myParam.setCommandCode(commandCode); myParam.setCommandName(CodeV202404.getCodeName(commandCode)); myParam.setIntakeId(intakeId); myParam.setRtuAddr(rtuAddr); myParam.setProtocol(protocol); myParam.setVcId(vcId); myParam.setParam(param); myParam.setRtuResultSendWebUrl(rtuCallbackUrl_wx); myParam.setOperator(operator); return dealWithCommandResult(myParam); } else { return BaseResponseUtils.buildErrorMsg("系统暂不支持该协议"); } } /** * 计划开阀定量关阀 * @param automaticClose * @param bindingResult * @return */ @PostMapping(path = "planed_open_quantify_close", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> planedOpenQuantifyClose(@RequestBody @Valid AutomaticClose automaticClose, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long intakeId = automaticClose.getIntakeId(); Long vcId = automaticClose.getVcId(); Date plannedOpenTime = automaticClose.getPlannedOpenTime(); Integer waterAmount = automaticClose.getWaterAmount(); Long operator = automaticClose.getOperator(); Long comId = idLongGenerator.generate(); Integer year = Integer.parseInt(String.format("%tY", plannedOpenTime)); Integer month = Integer.parseInt(String.format("%tm", plannedOpenTime)); Integer day = Integer.parseInt(String.format("%td", plannedOpenTime)); Integer hour = Integer.parseInt(String.format("%tH", plannedOpenTime)); Integer minute = Integer.parseInt(String.format("%tM", plannedOpenTime)); /** * 如果农户选择了虚拟卡,则使用该虚拟卡 * 如果农户未选择虚拟卡,则根据取水口ID获取与之绑定的虚拟卡 * 如果取水口没有与之绑定的虚拟卡,则提示农户选择一张虚拟卡 */ if(vcId == null) { vcId = commandSv.getVcIdByIntakeId(intakeId); if(vcId == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.PLEASE_SELECT_A_VC.getMessage()); } } // 虚拟卡ID换虚拟卡对象 VoVirtualCard vc = commandSv.getVcById(vcId); if(vc == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.PLEASE_SELECT_A_VC.getMessage()); } String vcNum = vc.getVcNum().toString(); Double moneyRemain = vc.getMoney(); // 获取水价 Double waterPrice = commandSv.getPrice(); // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); if(job_rtu == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_EXIST.getMessage()); } String rtuAddr = job_rtu.getString("rtuAddr"); String protocol = job_rtu.getString("protocol"); String orgTag = job_rtu.getString("orgTag"); comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); // 生成订单号 String orderNo = generateOrderNo(); String commandCode = null; if(protocol.equals("p206V202404")) { return BaseResponseUtils.buildSuccess(); } else if(protocol.equals("p206V1_0_1")) { // 获取功能码 commandCode = CodeV1_0_1.cd_A2; // 创建视图 ComA2Vo param = new ComA2Vo(); param.setIcCardNo(vcNum); param.setMoneyRemain(moneyRemain); param.setWaterPrice(waterPrice); param.setWaterAmount(waterAmount); param.setYear(year); param.setMonth(month); param.setDay(day); param.setHour(hour); param.setMinute(minute); param.setOrderNo(orderNo); /** * 构造命令、发送命令并处理请求结果及执行结果 * 1 准备参数 * 2 调用公共方法 */ Param myParam = new Param(); myParam.setComId(comId); myParam.setComType((byte)2); myParam.setCommandCode(commandCode); myParam.setCommandName(CodeV202404.getCodeName(commandCode)); myParam.setIntakeId(intakeId); myParam.setRtuAddr(rtuAddr); myParam.setProtocol(protocol); myParam.setVcId(vcId); myParam.setParam(param); myParam.setRtuResultSendWebUrl(rtuCallbackUrl_wx); myParam.setOperator(operator); return dealWithCommandResult(myParam); } else { return BaseResponseUtils.buildErrorMsg("系统暂不支持该协议"); } } /** * 根据操作员ID获取未关阀记录 * * @param operator pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/AutomaticClose.java
@@ -1,6 +1,9 @@ package com.dy.pipIrrWechat.command.dto; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.util.Date; /** * @author ZhuBaoMin @@ -18,6 +21,12 @@ private Long vcId; /** * 计划开阀时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date plannedOpenTime; /** * 用水时长,拥有定时关阀 */ private Integer minutes;