pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java
@@ -315,7 +315,7 @@ } else { // 请求失败 JSONObject job_param = response_SendCom.getJSONObject("content").getJSONObject("param"); return BaseResponseUtils.buildFail(job_param.getString("message")); return BaseResponseUtils.buildErrorMsg(job_param.getString("message")); } } } pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
@@ -448,4 +448,5 @@ </if> </where> </select> </mapper> pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandSv.java
@@ -10,8 +10,10 @@ import com.dy.pipIrrGlobal.daoPr.PrIntakeVcMapper; import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper; import com.dy.pipIrrGlobal.daoRm.RmCommandHistoryMapper; import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper; import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper; import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory; import com.dy.pipIrrGlobal.pojoSe.SeClientCard; import com.dy.pipIrrGlobal.voPr.VoOnLineIntake; import com.dy.pipIrrGlobal.voRm.VoUnclosedParam; import com.dy.pipIrrGlobal.voRm.VoUnclosedValve; @@ -41,6 +43,7 @@ private final PrIntakeMapper prIntakeMapper; private final PrWaterPriceMapper prWaterPriceMapper; private final PrIntakeVcMapper prIntakeVcMapper; private final SeClientCardMapper seClientCardMapper; /** * 虚拟卡ID换虚拟卡对象 @@ -167,4 +170,13 @@ } } /** * 根据水卡编号获取水卡对象,远程充值使用 * @param cardId * @return */ public SeClientCard geClientCardByCardId(Long cardId) { return seClientCardMapper.selectByPrimaryKey(cardId); } } pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/Recharge.java
New file @@ -0,0 +1,34 @@ package com.dy.pipIrrRemote.common.dto; import jakarta.validation.constraints.NotNull; import lombok.Data; /** * @author ZhuBaoMin * @date 2024-06-26 8:44 * @LastEditTime 2024-06-26 8:44 * @Description */ @Data public class Recharge extends DtoBase { public static final long serialVersionUID = 202406260745001L; /** * 水卡ID */ @NotNull(message = "水卡ID不能为空") private Long cardId; /** * 充值金额 */ @NotNull(message = "充值金额不能为空") private Double chargeMoney; /** * 充值水量 */ private Double chargeWater; } pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/result/RemoteResultCode.java
@@ -24,9 +24,11 @@ /** * RTU */ RTU_NOT_EXIST(20001, "阀控器不存在"); RTU_NOT_EXIST(20001, "阀控器不存在"), //RTU_ADDR_CANNOT_BE_NULL(20002, "阀控器地址不能为空"); CLIENT_CARD_NOT_EXIST(30001, "水卡不存在"); private final Integer code; private final String message; } pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuCtrl.java
@@ -1,10 +1,7 @@ package com.dy.pipIrrRemote.rtu; 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.p206V1_0_0.CodeV1_0_1; import com.dy.common.mw.protocol.p206V1_0_0.downVos.Com97Vo; import com.dy.common.mw.protocol.p206V202404.CodeV202404; @@ -15,7 +12,6 @@ import com.dy.common.webUtil.BaseResponseUtils; import com.dy.pipIrrGlobal.command.ComSupport; import com.dy.pipIrrGlobal.command.dto.Param; import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory; import com.dy.pipIrrRemote.common.CommandSv; import com.dy.pipIrrRemote.common.dto.Addr; import com.dy.pipIrrRemote.common.dto.DtoBase; @@ -26,7 +22,10 @@ import org.springframework.http.MediaType; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; 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 java.util.Objects; @@ -88,75 +87,32 @@ // 创建视图 ComCd10Vo param = new ComCd10Vo() ; param.controllerType = controllerType; param.projectNo =projectNo; param.projectNo = projectNo; param.rtuNewAddr = newRtuAddr; // 发送命令并处理请求结果及执行结果 Param po = new Param(); po.setComId(comId); po.setCommandCode(commandCode); po.setIntakeId(intakeId); po.setRtuAddr(rtuAddr); po.setProtocol(protocol); po.setParam(param); po.setRtuResultSendWebUrl(rtuResultSendWebUrl); po.setOperator(operator); return dealWithCommandResult(po); /** * 构造命令、发送命令并处理请求结果及执行结果 * 1 准备参数 * 2 调用公共方法 */ Param myParam = new Param(); myParam.setComId(comId); myParam.setCommandCode(commandCode); myParam.setCommandName(CodeV202404.getCodeName(commandCode)); myParam.setIntakeId(intakeId); myParam.setRtuAddr(rtuAddr); myParam.setProtocol(protocol); myParam.setParam(param); myParam.setRtuResultSendWebUrl(rtuResultSendWebUrl); myParam.setOperator(operator); return dealWithCommandResult(myParam); } else if(protocol.equals("p206V1_0_1")) { // 获取功能码 commandCode = CodeV1_0_1.cd_10; // 创建视图 Com97Vo param = new Com97Vo() ; // 构造命令 Command com = command(comId, commandCode, rtuAddr, protocol, rtuResultSendWebUrl, param); // 发送命令 JSONObject response_SendCom= (JSONObject) JSON.toJSON(sendCom2Mw(com)); if(response_SendCom != null && response_SendCom.getString("code").equals("0001")) { //if(1 > 0) { // 请求成功 // 创建命令日志对象并添加到数据库中 String commandName = CodeV1_0_1.getCodeName(commandCode); RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, commandName, intakeId, rtuAddr, protocol, param, operator); commandSv.insert(rmCommandHistory); // 处理回调 BaseResponse response_CallBack = dealWithCallBack(comId); //回调失败 if(!response_CallBack.getCode().equals("0001")) { // 命令日志执行结果改为失败 rmCommandHistory = new RmCommandHistory(); rmCommandHistory.setId(comId); rmCommandHistory.setResult((byte)0); commandSv.updateCommandResult(rmCommandHistory); return BaseResponseUtils.buildFail(response_CallBack.getMsg()); //return BaseResponseUtils.buildFail(response_CallBack.getContent().toString()); } // 回调成功,再判断执行是否成功 JSONObject job_content = (JSONObject)JSON.toJSON(response_CallBack.getContent()); System.out.println(job_content); JSONObject job_subData = (JSONObject) job_content.getJSONObject("subData").getJSONObject("subData"); System.out.println(job_subData); Boolean dealResult = job_subData.getBoolean("success"); if(!dealResult) { return BaseResponseUtils.buildFail(response_CallBack.getContent().toString()); } /** * 执行成功,返回回调内容 */ Data myData = (Data)response_CallBack.getContent(); return BaseResponseUtils.buildSuccess(myData) ; } else { // 请求失败 JSONObject job_param = response_SendCom.getJSONObject("content").getJSONObject("param"); return BaseResponseUtils.buildFail(job_param.getString("message")); } return BaseResponseUtils.buildSuccess(""); } else { return BaseResponseUtils.buildFail("系统暂不支持该协议"); } @@ -176,32 +132,59 @@ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } String commandCode = CodeV202404.cd_97; //String commandCode = CodeV202404.cd_97; Long intakeId = po.getIntakeId(); Long operator = po.getOperator(); Long comId = idLongGenerator.generate(); // 获取系统参数 if(!setuped) { setUp(); } // 取水口ID换阀控器地址及通讯协议 //PrController prController = commandSv.getControllerByIntakeId(intakeId); //if(prController == null) { // return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_EXIST.getMessage()); //} //String rtuAddr = prController.getRtuAddr(); //String protocol = prController.getProtocol(); String rtuAddr = ""; String protocol = ""; 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"); // 创建视图 ComCdXyVo param = new ComCdXyVo(); param.controllerType = controllerType; param.projectNo = projectNo; String commandCode = null; if(protocol.equals("p206V202404")) { // 获取功能码 commandCode = CodeV202404.cd_97; // 创建命令日志对象并添加到数据库中 RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, "",intakeId, rtuAddr, protocol, param, operator); comId = commandSv.insert(rmCommandHistory); // 创建视图 ComCdXyVo param = new ComCdXyVo(); param.controllerType = controllerType; param.projectNo = projectNo; // 构造命令 Command com = command(comId, commandCode,"", rtuAddr, protocol, param); return sendCom2Mw(com); /** * 构造命令、发送命令并处理请求结果及执行结果 * 1 准备参数 * 2 调用公共方法 */ Param myParam = new Param(); myParam.setComId(comId); myParam.setCommandCode(commandCode); myParam.setCommandName(CodeV202404.getCodeName(commandCode)); myParam.setIntakeId(intakeId); myParam.setRtuAddr(rtuAddr); myParam.setProtocol(protocol); myParam.setParam(param); myParam.setRtuResultSendWebUrl(rtuResultSendWebUrl); myParam.setOperator(operator); return dealWithCommandResult(myParam); } else if(protocol.equals("p206V1_0_1")) { // 获取功能码 commandCode = CodeV1_0_1.cd_10; // 创建视图 Com97Vo param = new Com97Vo() ; return BaseResponseUtils.buildSuccess(""); } else { return BaseResponseUtils.buildFail("系统暂不支持该协议"); } } } pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java
@@ -6,6 +6,7 @@ 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.p206V202404.CodeV202404; import com.dy.common.mw.protocol.p206V202404.downVos.ComCd15Vo; import com.dy.common.mw.protocol.p206V202404.downVos.ComCd92_A2Vo; import com.dy.common.mw.protocol.p206V202404.downVos.ComCd93_A3Vo; import com.dy.common.util.IDLongGenerator; @@ -14,17 +15,20 @@ import com.dy.pipIrrGlobal.command.ComSupport; import com.dy.pipIrrGlobal.command.dto.Param; import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper; import com.dy.pipIrrGlobal.pojoSe.SeClientCard; import com.dy.pipIrrGlobal.voRm.VoUnclosedParam; import com.dy.pipIrrGlobal.voRm.VoUnclosedValve; import com.dy.pipIrrGlobal.voSe.VoVirtualCard; import com.dy.pipIrrRemote.common.CommandSv; import com.dy.pipIrrRemote.common.dto.DtoBase; import com.dy.pipIrrRemote.common.dto.Recharge; import com.dy.pipIrrRemote.common.dto.ValveOpen; import com.dy.pipIrrRemote.result.RemoteResultCode; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.RandomStringUtils; import org.springframework.http.MediaType; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; @@ -305,4 +309,90 @@ return BaseResponseUtils.buildException(e.getMessage()) ; } } /** * 平台远程充值 * @param po * @param bindingResult * @return */ @PostMapping(path = "recharge", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> recharge(@RequestBody @Valid Recharge po, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long intakeId = po.getIntakeId(); Long cardId = po.getCardId(); Double chargeMoney = po.getChargeMoney(); Double chargeWater = po.getChargeWater(); Long operator = po.getOperator(); String flowNo = RandomStringUtils.randomNumeric(12); // 生成12位随机数 Long comId = idLongGenerator.generate(); // 获取系统参数 if(!setuped) { setUp(); } // 取水口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"); // 水卡ID换水卡地址及水卡编号 SeClientCard seClientCard = commandSv.geClientCardByCardId(cardId); if(seClientCard == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.CLIENT_CARD_NOT_EXIST.getMessage()); } String icCardAddr = seClientCard.getCardaddr(); String icCardNo = seClientCard.getCardnum(); String commandCode = null; if(protocol.equals("p206V202404")) { // 获取功能码 commandCode = CodeV202404.cd_15; // 创建视图 ComCd15Vo param = new ComCd15Vo(); param.controllerType = controllerType; param.projectNo = projectNo; param.icCardAddr = icCardAddr; param.icCardNo = icCardNo; param.chargeMoney = chargeMoney; param.chargeWater = chargeWater; param.flowNo = flowNo; /** * 构造命令、发送命令并处理请求结果及执行结果 * 1 准备参数 * 2 调用公共方法 */ Param myParam = new Param(); myParam.setComId(comId); myParam.setCommandCode(commandCode); myParam.setCommandName(CodeV202404.getCodeName(commandCode)); myParam.setIntakeId(intakeId); myParam.setRtuAddr(rtuAddr); myParam.setProtocol(protocol); myParam.setParam(param); myParam.setRtuResultSendWebUrl(rtuResultSendWebUrl); myParam.setOperator(operator); return dealWithCommandResult(myParam); } else if(protocol.equals("p206V1_0_1")) { // 获取功能码 commandCode = CodeV1_0_1.cd_10; // 创建视图 Com97Vo param = new Com97Vo() ; return BaseResponseUtils.buildSuccess(""); } else { return BaseResponseUtils.buildFail("系统暂不支持该协议"); } } } pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java
@@ -10,8 +10,10 @@ import com.dy.pipIrrGlobal.daoPr.PrIntakeVcMapper; import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper; import com.dy.pipIrrGlobal.daoRm.RmCommandHistoryMapper; import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper; import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper; import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory; import com.dy.pipIrrGlobal.pojoSe.SeClientCard; import com.dy.pipIrrGlobal.voPr.VoOnLineIntake; import com.dy.pipIrrGlobal.voRm.VoUnclosedValve; import com.dy.pipIrrGlobal.voSe.VoVirtualCard; @@ -40,6 +42,7 @@ private final PrIntakeMapper prIntakeMapper; private final PrWaterPriceMapper prWaterPriceMapper; private final PrIntakeVcMapper prIntakeVcMapper; private final SeClientCardMapper seClientCardMapper; /** * 虚拟卡ID换虚拟卡对象 @@ -123,4 +126,13 @@ public Long getVcIdByIntakeId(Long intakeId) { return prIntakeVcMapper.getVcIdByIntakeId(intakeId); } /** * 根据水卡编号获取水卡对象,远程充值使用 * @param cardId * @return */ public SeClientCard geClientCardByCardId(Long cardId) { return seClientCardMapper.selectByPrimaryKey(cardId); } } pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java
@@ -5,6 +5,7 @@ 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.p206V202404.CodeV202404; import com.dy.common.mw.protocol.p206V202404.downVos.ComCd15Vo; import com.dy.common.mw.protocol.p206V202404.downVos.ComCd92_A2Vo; import com.dy.common.mw.protocol.p206V202404.downVos.ComCd93_A3Vo; import com.dy.common.util.IDLongGenerator; @@ -13,8 +14,10 @@ import com.dy.pipIrrGlobal.command.ComSupport; import com.dy.pipIrrGlobal.command.dto.Param; import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper; import com.dy.pipIrrGlobal.pojoSe.SeClientCard; import com.dy.pipIrrGlobal.voRm.VoUnclosedValve; import com.dy.pipIrrGlobal.voSe.VoVirtualCard; import com.dy.pipIrrWechat.command.dto.Recharge; import com.dy.pipIrrWechat.command.dto.ValveClose; import com.dy.pipIrrWechat.command.dto.ValveOpen; import com.dy.pipIrrWechat.result.WechatResultCode; @@ -22,6 +25,7 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.RandomStringUtils; import org.springframework.http.MediaType; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; @@ -288,4 +292,89 @@ return BaseResponseUtils.buildException(e.getMessage()); } } /** * 小程序远程充值 * @param po * @param bindingResult * @return */ @PostMapping(path = "recharge", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) public BaseResponse<Boolean> recharge(@RequestBody @Valid Recharge po, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long intakeId = po.getIntakeId(); Long cardId = po.getCardId(); Double chargeMoney = po.getChargeMoney(); Double chargeWater = po.getChargeWater(); Long operator = po.getOperator(); String flowNo = RandomStringUtils.randomNumeric(12); // 生成12位随机数 Long comId = idLongGenerator.generate(); // 获取系统参数 if(!setuped) { setUp(); } // 取水口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"); // 水卡ID换水卡地址及水卡编号 SeClientCard seClientCard = commandSv.geClientCardByCardId(cardId); if(seClientCard == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.CLIENT_CARD_NOT_EXIST.getMessage()); } String icCardAddr = seClientCard.getCardaddr(); String icCardNo = seClientCard.getCardnum(); String commandCode = null; if(protocol.equals("p206V202404")) { // 获取功能码 commandCode = CodeV202404.cd_15; // 创建视图 ComCd15Vo param = new ComCd15Vo(); param.controllerType = controllerType; param.projectNo = projectNo; param.icCardAddr = icCardAddr; param.icCardNo = icCardNo; param.chargeMoney = chargeMoney; param.chargeWater = chargeWater; param.flowNo = flowNo; /** * 构造命令、发送命令并处理请求结果及执行结果 * 1 准备参数 * 2 调用公共方法 */ Param myParam = new Param(); myParam.setComId(comId); myParam.setCommandCode(commandCode); myParam.setCommandName(CodeV202404.getCodeName(commandCode)); myParam.setIntakeId(intakeId); myParam.setRtuAddr(rtuAddr); myParam.setProtocol(protocol); myParam.setParam(param); myParam.setRtuResultSendWebUrl(rtuResultSendWebUrl); myParam.setOperator(operator); return dealWithCommandResult(myParam); } else if(protocol.equals("p206V1_0_1")) { // 获取功能码 commandCode = CodeV1_0_1.cd_10; // 创建视图 Com97Vo param = new Com97Vo() ; return BaseResponseUtils.buildSuccess(""); } else { return BaseResponseUtils.buildFail("系统暂不支持该协议"); } } } pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/Recharge.java
New file @@ -0,0 +1,33 @@ package com.dy.pipIrrWechat.command.dto; import jakarta.validation.constraints.NotNull; import lombok.Data; /** * @author ZhuBaoMin * @date 2024-06-26 10:45 * @LastEditTime 2024-06-26 10:45 * @Description */ @Data public class Recharge extends DtoBase { public static final long serialVersionUID = 202406261045001L; /** * 水卡ID */ @NotNull(message = "水卡ID不能为空") private Long cardId; /** * 充值金额 */ @NotNull(message = "充值金额不能为空") private Double chargeMoney; /** * 充值水量 */ private Double chargeWater; } pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/result/WechatResultCode.java
@@ -28,6 +28,8 @@ RTU_NOT_EXIST(20001, "阀控器不存在"), //RTU_ADDR_CANNOT_BE_NULL(20002, "阀控器地址不能为空"); CLIENT_CARD_NOT_EXIST(30001, "水卡不存在"), /** * 微信用户 */