pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/downVos/Com99Vo.java
@@ -10,7 +10,7 @@ @Data public class Com99Vo { public String icCardNo ;//17位虚拟IC卡编号(协议是10位数字) public Integer moneyRemain;//剩余金额(取值范围0.00~999999.99,单位为元) public Double moneyRemain;//剩余金额(取值范围0.00~999999.99,单位为元) public Double waterPrice;//水价(取值范围0.00~99.99元/m3) public Integer minutes ;//用水时长(0~9999分钟) public String orderNo ;//订单号(16位数字) pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/downVos/ComA0Vo.java
@@ -10,7 +10,7 @@ @Data public class ComA0Vo { public String icCardNo ;//17位虚拟IC卡编号(协议是10位数字) public Integer moneyRemain;//剩余金额(取值范围0.00~999999.99,单位为元) public Double moneyRemain;//剩余金额(取值范围0.00~999999.99,单位为元) public Double waterPrice;//水价(取值范围0.00~99.99元/m3) public Integer waterAmount ;//预用水量(0~9999 m3) public String orderNo ;//订单号(16位数字) pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java
@@ -19,6 +19,7 @@ import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard; import jakarta.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; @@ -48,13 +49,20 @@ //@Value("${mw.comSendUrl}") protected String comSendUrl; protected static String controllerType = null; protected static Integer projectNo = null; //protected static String controllerType = null; //protected static Integer projectNo = null; @Value("${project.projectNo}") protected Integer projectNo; @Value("${project.controllerType}") protected String controllerType; protected String commandTypeOuter = CommandType.outerCommand; // 存储实例化的 CompletableFuture<Data> 对象 protected static Map<Long, Object> features = new HashMap<>(); protected static Boolean setuped = false; //protected static Boolean setuped = false; @Autowired private RestTemplate restTemplate; @@ -89,11 +97,11 @@ /** * 获取系统配置参数 */ public void setUp() { controllerType = comSupport.baSettingsMapper.getItemValue("controllerType"); projectNo = Integer.parseInt(comSupport.baSettingsMapper.getItemValue("projectNo")); setuped = true; } //public void setUp() { // controllerType = comSupport.baSettingsMapper.getItemValue("controllerType"); // projectNo = Integer.parseInt(comSupport.baSettingsMapper.getItemValue("projectNo")); // setuped = true; //} /** * 生成订单号 @@ -322,6 +330,21 @@ seVirtualCardMapper.updateByPrimaryKeySelective(virtualCard); } // 如果是开发命令(92-平台开阀,91-小程序开阀),返回结果中添加阀控器地址、虚拟卡编号、订单号 if(commandCode.equals("92") || commandCode.equals("97")) { JSONObject job_response = (JSONObject) JSON.toJSON(response_CallBack); JSONObject job_param = (JSONObject) JSON.toJSON(param); JSONObject job_data = job_response.getJSONObject("content").getJSONObject("data"); job_data.remove("success"); job_data.put("intakeId", intakeId); job_data.put("rtuAddr", rtuAddr); job_data.put("vcNum", job_param.getString("icCardNo")); job_data.put("orderNo", job_param.getString("orderNo")); response_CallBack = JSON.parseObject(job_response.toJSONString(), BaseResponse.class); } // 回调返回的内容,回调结果写入命令日志表的任务由中间件完成 return response_CallBack; pipIrr-platform/pipIrr-global/src/main/resources/application-database-pj.yml
@@ -5,9 +5,9 @@ #name: pj type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver # url: jdbc:mysql://192.168.40.166:3306/pipIrr_pj?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull url: jdbc:mysql://192.168.40.166:3306/pipIrr_pj?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull # url: jdbc:mysql://127.0.0.1:3306/pipIrr_pj?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull url: jdbc:mysql://8.140.179.55:3306/pipIrr_pj?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull # url: jdbc:mysql://8.140.179.55:3306/pipIrr_pj?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull username: root password: dysql,;.abc!@# druid: pipIrr-platform/pipIrr-global/src/main/resources/application-database-sp.yml
@@ -5,9 +5,9 @@ #name: sp type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver # url: jdbc:mysql://192.168.40.166:3306/pipIrr_sp?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull url: jdbc:mysql://192.168.40.166:3306/pipIrr_sp?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull # url: jdbc:mysql://127.0.0.1:3306/pipIrr_sp?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull url: jdbc:mysql://8.140.179.55:3306/pipIrr_sp?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull # url: jdbc:mysql://8.140.179.55:3306/pipIrr_sp?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull username: root password: dysql,;.abc!@# druid: pipIrr-platform/pipIrr-global/src/main/resources/application-database-ym.yml
@@ -5,9 +5,9 @@ #name: ym type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver # url: jdbc:mysql://192.168.40.166:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull url: jdbc:mysql://192.168.40.166:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull # url: jdbc:mysql://127.0.0.1:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull url: jdbc:mysql://8.140.179.55:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull # url: jdbc:mysql://8.140.179.55:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull username: root password: dysql,;.abc!@# druid: pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
@@ -72,7 +72,7 @@ pipIrr: global: dev: true #是否开发阶段,true或false dev: false #是否开发阶段,true或false dsName: ym #开发阶段,设置临时的数据库名称 mw: webPort: 8070 @@ -130,6 +130,14 @@ # ym: 100 # pj: 101 #项目配置 project: #项目编码 projectNo: 10 #控制器类型 controllerType: 57 #通讯协议 #protocol: DYJS_2023,DYJS_2024 mw: pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml
@@ -3,9 +3,9 @@ datasource: #配置数据源 type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver # url: jdbc:mysql://192.168.40.166:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull url: jdbc:mysql://192.168.40.166:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull # url: jdbc:mysql://127.0.0.1:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull url: jdbc:mysql://8.140.179.55:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull # url: jdbc:mysql://8.140.179.55:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull username: root password: dysql,;.abc!@# druid: pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java
@@ -27,7 +27,7 @@ @PostMapping(path = "receive", consumes = MediaType.APPLICATION_JSON_VALUE) public void receive(@RequestBody Data data) { JSONObject job_data = (JSONObject) JSON.toJSON(data); //System.out.println(job_data.toJSONString()); String job_dataS = job_data.toJSONString(); JSONObject job_subData = job_data.getJSONObject("subData").getJSONObject("subData"); JSONObject job_response = new JSONObject(); pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/AutomaticClose.java
New file @@ -0,0 +1,44 @@ package com.dy.pipIrrRemote.common.dto; import jakarta.validation.constraints.NotBlank; import lombok.Data; /** * @author ZhuBaoMin * @date 2024-07-23 10:36 * @LastEditTime 2024-07-23 10:36 * @Description 自动关阀(定时关阀、定量关阀)传输对象 */ @Data public class AutomaticClose extends DtoBase { public static final long serialVersionUID = 202407231039001L; /** * 阀控器地址 */ @NotBlank(message = "阀控器地址不能为空") private String rtuAddr; /** * 虚拟卡编号 */ @NotBlank(message = "虚拟卡编号不能为空") private String vcNum; /** * 订单号 */ @NotBlank(message = "订单号不能为空") private String orderNo; /** * 用水时长,拥有定时关阀 */ private Integer minutes; /** * 预用水量,拥有定量关阀 */ private Integer waterAmount; } pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuCtrl.java
@@ -32,9 +32,6 @@ import java.util.Objects; //import com.dy.common.mw.protocol.p206V1_0_0.downVos.Com97Vo; //import com.dy.common.mw.protocol.p206V1_0_0.downVos.ComXyVo; /** * @author ZhuBaoMin * @date 2024-05-21 14:31 @@ -93,11 +90,6 @@ Long intakeId = po.getIntakeId(); Long operator = po.getOperator(); Long comId = idLongGenerator.generate(); // 获取系统参数 if(!setuped) { setUp(); } // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); @@ -179,11 +171,6 @@ Long operator = po.getOperator(); Long comId = idLongGenerator.generate(); // 获取系统参数 if(!setuped) { setUp(); } // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); if(job_rtu == null) { @@ -243,11 +230,6 @@ Long intakeId = po.getIntakeId(); Long operator = po.getOperator(); Long comId = idLongGenerator.generate(); // 获取系统参数 if(!setuped) { setUp(); } // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); @@ -310,11 +292,6 @@ Long operator = po.getOperator(); Long comId = idLongGenerator.generate(); // 获取系统参数 if(!setuped) { setUp(); } // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); if(job_rtu == null) { @@ -374,11 +351,6 @@ Long intakeId = po.getIntakeId(); Long operator = po.getOperator(); Long comId = idLongGenerator.generate(); // 获取系统参数 if(!setuped) { setUp(); } // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java
@@ -5,8 +5,13 @@ 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.p206V202404.CodeV202404; import com.dy.common.mw.protocol.p206V202404.downVos.*; 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.mw.protocol.p206V202404.downVos.ComCd9CVo; import com.dy.common.util.IDLongGenerator; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; @@ -104,11 +109,6 @@ if(vcId == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.PLEASE_SELECT_A_VC.getMessage()); } } // 获取系统参数 if(!setuped) { setUp(); } // 虚拟卡ID换虚拟卡对象 @@ -239,11 +239,6 @@ String orderNo = voUnclosedParam.getOrderNo(); Long comId = idLongGenerator.generate(); // 获取系统参数 if(!setuped) { setUp(); } // 阀控器地址换取水口ID和通讯协议 JSONObject job_rtu = getRtu(null, rtuAddr); if(job_rtu == null) { @@ -317,6 +312,168 @@ } /** * 定时关阀 * @param automaticClose * @param bindingResult * @return */ @PostMapping(path = "timed_close", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> timedClose(@RequestBody @Valid AutomaticClose automaticClose, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long intakeId = automaticClose.getIntakeId(); String rtuAddr = automaticClose.getRtuAddr(); String vcNum = automaticClose.getVcNum(); String orderNo = automaticClose.getOrderNo(); Integer minutes = automaticClose.getMinutes(); Long operator = automaticClose.getOperator(); Long vcId = Optional.ofNullable(seVirtualCardMapper.getVcIdByNum(vcNum)).orElse(0L); Long comId = idLongGenerator.generate(); // 虚拟卡ID换虚拟卡对象 VoVirtualCard vc = commandSv.getVcById(vcId); if (vc == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.PLEASE_SELECT_A_VC.getMessage()); } Double moneyRemain = vc.getMoney(); // 获取水价 Double waterPrice = commandSv.getPrice(); // 阀控器地址换取水口ID和通讯协议 JSONObject job_rtu = getRtu(null, rtuAddr); if(job_rtu == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_EXIST.getMessage()); } String protocol = job_rtu.getString("protocol"); String orgTag = job_rtu.getString("orgTag"); comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); String commandCode = null; if(protocol.equals("p206V202404")) { return BaseResponseUtils.buildSuccess(); } else if(protocol.equals("p206V1_0_1")) { // 获取功能码 commandCode = CodeV1_0_1.cd_99; // 创建视图 Com99Vo param = new Com99Vo(); param.setIcCardNo(vcNum); param.setMoneyRemain(moneyRemain); param.setWaterPrice(waterPrice); param.setMinutes(minutes); 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 = "quantify_close", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> quantifyClose(@RequestBody @Valid AutomaticClose automaticClose, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long intakeId = automaticClose.getIntakeId(); String rtuAddr = automaticClose.getRtuAddr(); String vcNum = automaticClose.getVcNum(); String orderNo = automaticClose.getOrderNo(); Integer waterAmount = automaticClose.getWaterAmount(); Long operator = automaticClose.getOperator(); Long vcId = Optional.ofNullable(seVirtualCardMapper.getVcIdByNum(vcNum)).orElse(0L); Long comId = idLongGenerator.generate(); // 虚拟卡ID换虚拟卡对象 VoVirtualCard vc = commandSv.getVcById(vcId); if (vc == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.PLEASE_SELECT_A_VC.getMessage()); } Double moneyRemain = vc.getMoney(); // 获取水价 Double waterPrice = commandSv.getPrice(); // 阀控器地址换取水口ID和通讯协议 JSONObject job_rtu = getRtu(null, rtuAddr); if(job_rtu == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_EXIST.getMessage()); } String protocol = job_rtu.getString("protocol"); String orgTag = job_rtu.getString("orgTag"); comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); String commandCode = null; if(protocol.equals("p206V202404")) { return BaseResponseUtils.buildSuccess(); } else if(protocol.equals("p206V1_0_1")) { // 获取功能码 commandCode = CodeV1_0_1.cd_A0; // 创建视图 ComA0Vo param = new ComA0Vo(); param.setIcCardNo(vcNum); param.setMoneyRemain(moneyRemain); param.setWaterPrice(waterPrice); param.setWaterAmount(waterAmount); 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 @@ -354,11 +511,6 @@ Long operator = po.getOperator(); String flowNo = RandomStringUtils.randomNumeric(12); // 生成12位随机数 Long comId = idLongGenerator.generate(); // 获取系统参数 if(!setuped) { setUp(); } // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); @@ -433,11 +585,6 @@ Long operator = card.getOperator(); Long comId = idLongGenerator.generate(); // 获取系统参数 if(!setuped) { setUp(); } // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); if(job_rtu == null) { @@ -498,11 +645,6 @@ // Boolean valid = usability.getValid(); // Long operator = usability.getOperator(); // Long comId = idLongGenerator.generate(); // // // 获取系统参数 // if(!setuped) { // setUp(); // } // // // 取水口ID换阀控器地址及通讯协议 // JSONObject job_rtu = getRtu(intakeId, null); pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandResultCtrl.java
@@ -1,8 +1,8 @@ package com.dy.pipIrrWechat.command; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.dy.common.mw.protocol.Data; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; import com.dy.pipIrrGlobal.command.ComSupport; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; @@ -25,16 +25,21 @@ @RequestMapping(path="comRes") public class CommandResultCtrl extends ComSupport { @PostMapping(path = "receive", consumes = MediaType.APPLICATION_JSON_VALUE) public BaseResponse<String> receive(@RequestBody Data data) { Long comId = 0L; if(data.getCommandId() != null) { comId = Long.parseLong(data.getCommandId()); } public void receive(@RequestBody Data data) { JSONObject job_data = (JSONObject) JSON.toJSON(data); String job_dataS = job_data.toJSONString(); JSONObject job_subData = job_data.getJSONObject("subData").getJSONObject("subData"); CompletableFuture<Data> feature = (CompletableFuture<Data>) features.get(comId); JSONObject job_response = new JSONObject(); job_response.put("data", job_subData); job_response.put("commandCode", job_data.getString("code")); job_response.put("commandId", job_data.getString("commandId")); CompletableFuture<JSONObject> feature = (CompletableFuture<JSONObject>) features.get(job_data.getLong("commandId")); if(feature != null) { feature.complete(data); feature.complete(job_response); }else{ feature.complete(new JSONObject()); } return BaseResponseUtils.buildSuccess("ok"); } } pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java
@@ -1,9 +1,12 @@ package com.dy.pipIrrWechat.command; 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.p206V202404.CodeV202404; import com.dy.common.mw.protocol.p206V202404.downVos.ComCd15Vo; import com.dy.common.mw.protocol.p206V202404.downVos.ComCd92_A2Vo; @@ -17,6 +20,7 @@ import com.dy.pipIrrGlobal.pojoSe.SeClientCard; import com.dy.pipIrrGlobal.voRm.VoUnclosedValve; import com.dy.pipIrrGlobal.voSe.VoVirtualCard; import com.dy.pipIrrWechat.command.dto.AutomaticClose; import com.dy.pipIrrWechat.command.dto.Recharge; import com.dy.pipIrrWechat.command.dto.ValveClose; import com.dy.pipIrrWechat.command.dto.ValveOpen; @@ -116,11 +120,6 @@ if (vcId == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.PLEASE_SELECT_A_VC.getMessage()); } } // 获取系统参数 if (!setuped) { setUp(); } // 虚拟卡ID换虚拟卡对象 @@ -240,11 +239,6 @@ Long operator = valve.getOperator(); Long comId = idLongGenerator.generate(); // 获取系统参数 if (!setuped) { setUp(); } // 阀控器地址换取水口ID和通讯协议 JSONObject job_rtu = getRtu(null, rtuAddr); if (job_rtu == null) { @@ -318,6 +312,168 @@ } /** * 定时关阀 * @param automaticClose * @param bindingResult * @return */ @PostMapping(path = "timed_close", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> timedClose(@RequestBody @Valid AutomaticClose automaticClose, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long intakeId = automaticClose.getIntakeId(); String rtuAddr = automaticClose.getRtuAddr(); String vcNum = automaticClose.getVcNum(); String orderNo = automaticClose.getOrderNo(); Integer minutes = automaticClose.getMinutes(); Long operator = automaticClose.getOperator(); Long vcId = Optional.ofNullable(seVirtualCardMapper.getVcIdByNum(vcNum)).orElse(0L); Long comId = idLongGenerator.generate(); // 虚拟卡ID换虚拟卡对象 VoVirtualCard vc = commandSv.getVcById(vcId); if (vc == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.PLEASE_SELECT_A_VC.getMessage()); } Double moneyRemain = vc.getMoney(); // 获取水价 Double waterPrice = commandSv.getPrice(); // 阀控器地址换取水口ID和通讯协议 JSONObject job_rtu = getRtu(null, rtuAddr); if(job_rtu == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_EXIST.getMessage()); } String protocol = job_rtu.getString("protocol"); String orgTag = job_rtu.getString("orgTag"); comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); String commandCode = null; if(protocol.equals("p206V202404")) { return BaseResponseUtils.buildSuccess(); } else if(protocol.equals("p206V1_0_1")) { // 获取功能码 commandCode = CodeV1_0_1.cd_99; // 创建视图 Com99Vo param = new Com99Vo(); param.setIcCardNo(vcNum); param.setMoneyRemain(moneyRemain); param.setWaterPrice(waterPrice); param.setMinutes(minutes); 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 = "quantify_close", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> quantifyClose(@RequestBody @Valid AutomaticClose automaticClose, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long intakeId = automaticClose.getIntakeId(); String rtuAddr = automaticClose.getRtuAddr(); String vcNum = automaticClose.getVcNum(); String orderNo = automaticClose.getOrderNo(); Integer waterAmount = automaticClose.getWaterAmount(); Long operator = automaticClose.getOperator(); Long vcId = Optional.ofNullable(seVirtualCardMapper.getVcIdByNum(vcNum)).orElse(0L); Long comId = idLongGenerator.generate(); // 虚拟卡ID换虚拟卡对象 VoVirtualCard vc = commandSv.getVcById(vcId); if (vc == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.PLEASE_SELECT_A_VC.getMessage()); } Double moneyRemain = vc.getMoney(); // 获取水价 Double waterPrice = commandSv.getPrice(); // 阀控器地址换取水口ID和通讯协议 JSONObject job_rtu = getRtu(null, rtuAddr); if(job_rtu == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_EXIST.getMessage()); } String protocol = job_rtu.getString("protocol"); String orgTag = job_rtu.getString("orgTag"); comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); String commandCode = null; if(protocol.equals("p206V202404")) { return BaseResponseUtils.buildSuccess(); } else if(protocol.equals("p206V1_0_1")) { // 获取功能码 commandCode = CodeV1_0_1.cd_A0; // 创建视图 ComA0Vo param = new ComA0Vo(); param.setIcCardNo(vcNum); param.setMoneyRemain(moneyRemain); param.setWaterPrice(waterPrice); param.setWaterAmount(waterAmount); 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 @@ -354,11 +510,6 @@ Long operator = po.getOperator(); String flowNo = RandomStringUtils.randomNumeric(12); // 生成12位随机数 Long comId = idLongGenerator.generate(); // 获取系统参数 if(!setuped) { setUp(); } // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/AutomaticClose.java
New file @@ -0,0 +1,43 @@ package com.dy.pipIrrWechat.command.dto; import jakarta.validation.constraints.NotBlank; import lombok.Data; /** * @author ZhuBaoMin * @date 2024-07-23 10:55 * @LastEditTime 2024-07-23 10:55 * @Description */ @Data public class AutomaticClose extends DtoBase { public static final long serialVersionUID = 202407231056001L; /** * 阀控器地址 */ @NotBlank(message = "阀控器地址不能为空") private String rtuAddr; /** * 虚拟卡编号 */ @NotBlank(message = "虚拟卡编号不能为空") private String vcNum; /** * 订单号 */ @NotBlank(message = "订单号不能为空") private String orderNo; /** * 用水时长,拥有定时关阀 */ private Integer minutes; /** * 预用水量,拥有定量关阀 */ private Integer waterAmount; }