pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/ByteArrayHttpMessageConverter.java
File was renamed from pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/ByteArrayHttpMessageConverter.java @@ -1,4 +1,4 @@ package com.dy.pipIrrMwTestWeb.rtuLog; package com.dy.pipIrrGlobal.config; import org.springframework.http.HttpInputMessage; import org.springframework.http.HttpOutputMessage; @@ -6,6 +6,7 @@ import org.springframework.http.converter.AbstractHttpMessageConverter; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.http.converter.HttpMessageNotWritableException; import org.springframework.util.StreamUtils; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -29,7 +30,7 @@ @Override protected byte[] readInternal(Class<? extends byte[]> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException { // Read the byte array from the input message return org.springframework.util.StreamUtils.copyToByteArray(inputMessage.getBody()); return StreamUtils.copyToByteArray(inputMessage.getBody()); } @Override pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/ByteArrayHttpMessageConverterConfig.java
File was renamed from pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/ByteArrayConverterConfig.java @@ -1,4 +1,4 @@ package com.dy.pipIrrMwTestWeb.rtuLog; package com.dy.pipIrrGlobal.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -10,7 +10,7 @@ * @Description */ @Configuration public class ByteArrayConverterConfig { public class ByteArrayHttpMessageConverterConfig { @Bean public HttpMessageConverter<byte[]> logFileByteArrayHttpMessageConverter() { return new ByteArrayHttpMessageConverter(); pipIrr-platform/pipIrr-global/src/main/resources/application-database-ym.yml
@@ -5,10 +5,10 @@ #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://8.130.130.233: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://127.0.0.1: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 username: root password: dysql,;.abc!@# druid: pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
@@ -71,7 +71,7 @@ pipIrr: global: dev: true #是否开发阶段,true或false dev: false #是否开发阶段,true或false dsName: ym #开发阶段,设置临时的数据库名称 mw: webPort: 8070 @@ -149,8 +149,12 @@ #命令发送地址(中缀是机构tag,其也是数据源后缀名称) ym: comSendUrl: "http://127.0.0.1:8070/rtuMw/com/send" rtuLogFileUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogFile" rtuLogTextUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogText" pj: comSendUrl: "http://127.0.0.1:8071/rtuMw/com/send" rtuLogFileUrl: "http://127.0.0.1:8071/rtuMw/com/rtuLogFile" rtuLogTextUrl: "http://127.0.0.1:8071/rtuMw/com/rtuLogText" #监测控制模块回调地址 rtuCallbackUrl_rm: "http://127.0.0.1:8081/remote/comRes/receive" #微信小程序回调地址 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml
@@ -4,7 +4,7 @@ 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://8.130.130.233:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull # url: jdbc:mysql://8.130.130.233: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://127.0.0.1:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull username: root pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/p206V202404test/ComSupportP206V202404.java
@@ -19,10 +19,13 @@ * @Description */ public class ComSupportP206V202404 { protected static String mwUrlTest = "http://127.0.0.1:8070/rtuMw/com/test" ; protected static String mwUrlSendCom = "http://127.0.0.1:8070/rtuMw/com/send" ; protected static final String mwIp = "romq9311819.vicp.fun" ; //http://romq9311819.vicp.fun:16583 protected static final String mwPort = "16583" ; protected static String rtuAddr = "37142501020100215" ; protected static String mwUrlTest = "http://" + mwIp + ":" + mwPort + "/rtuMw/com/test" ; protected static String mwUrlSendCom = "http://" + mwIp + ":" + mwPort + "/rtuMw/com/send" ; protected static String rtuAddr = "41162810400100001" ; protected static String rtuResultSendWebUrl = "http://127.0.0.1:65535/test/comRes/receive" ; protected static String controllerType = "57" ;//控制器类型 pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/p206V202404test/CommandP206V202404Ctrl.java
@@ -18,23 +18,56 @@ public class CommandP206V202404Ctrl extends ComSupportP206V202404 { @GetMapping(path = "test") public BaseResponse<String> test() { //return this.connect() ;//连接通信中间件测试 //return this.cdXY(CodeV202404.cd_9C) ;//发送固定参数XY的命令 //return this.cd55(1) ; //return this.cd15() ; //return this.cd16() ; //return this.cd21() ; //return this.cd22() ; //return this.cd23() ; //return this.cd24() ; //return this.cd26() ; //return this.cd31() ; //return this.cd86() ; //return this.cd87() ; return this.cd92() ; //return this.cd93() ; //return this.cd9C() ; public BaseResponse<String> test(String com) { BaseResponse<String> rt = null ; if(com == null){ rt = this.connect() ;//连接通信中间件测试 }else{ try{ if(com.equals("10")){ rt = this.cd10() ; }else if(com.equals("15")){ rt = this.cd15() ; }else if(com.equals("16")){ rt = this.cd16() ; }else if(com.equals("21")){ rt = this.cd21() ; }else if(com.equals("22")){ rt = this.cd22() ; }else if(com.equals("23")){ rt = this.cd23() ; }else if(com.equals("24")){ rt = this.cd24() ; }else if(com.equals("26")){ rt = this.cd26() ; }else if(com.equals("31")){ rt = this.cd31() ; }else if(com.equals("55")){ rt = this.cd55(1) ; }else if(com.equals("65")){ rt = this.cd65(1) ; }else if(com.equals("86")){ rt = this.cd86() ; }else if(com.equals("87")){ rt = this.cd87() ; }else if(com.equals("92")){ rt = this.cd92() ; }else if(com.equals("93")){ rt = this.cd93() ; }else if(com.equals("9C")){ rt = this.cd9C() ; }else if(com.equals("A2")){ rt = this.cdA2() ; }else if(com.equals("A3")){ rt = this.cdA3() ; }else{ rt = this.cdXY(com) ;//发送固定参数XY的命令, 例命令CodeV202404.cd_9C } }catch (Exception e){ e.printStackTrace(); } } return rt ; } /** pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/rtuLog/RtuLogSupport.java
@@ -3,7 +3,6 @@ import com.dy.common.webUtil.BaseResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.*; import org.springframework.http.HttpRequest; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/DtoBase.java
@@ -21,6 +21,11 @@ private Long intakeId; /** * 取水口名称 */ private String intakeName; /** * 操作人 */ @NotNull(message = "操作人不能为空") pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/ValveOpen.java
@@ -18,9 +18,4 @@ */ private Long vcId; /** * 用户类型 1-平台,2-APP */ //@NotNull(message = "操作类型不能为空") //private Integer userType; } pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/result/RemoteResultCode.java
@@ -21,11 +21,14 @@ IN_USE_VC_CANNOT_OPEN_VALVE(10004, "使用中虚拟卡不能用来开阀"), VALVE_CLOSED(10005, "该取水口不在线或已关阀"), THE_DEVICE_DOES_NOT_HAVE_THIS_FUNCTION(10006, "该设备无此同能"), NO_WATER_PRICE(10007, "未取到水价"), NO_ORDER_NUMBER(10008, "未生成订单号"), /** * RTU */ RTU_NOT_EXIST(20001, "阀控器不存在"), RTU_NOT_SET_DATA_SOURCE(20002, "阀控器未设置数据源"), CLIENT_CARD_NOT_EXIST(30001, "水卡不存在"); pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuLogCtrl.java
New file @@ -0,0 +1,136 @@ package com.dy.pipIrrRemote.rtu; import com.dy.common.aop.SsoAop; import com.dy.common.multiDataSource.DataSourceContext; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; import java.net.URLEncoder; import java.util.List; /** * @Author: liurunyu * @Date: 2024/8/29 9:22 * @Description */ @Slf4j @RestController @RequestMapping(path="rtuLog") public class RtuLogCtrl { private static final String pro_mw = "mw"; private static final String key_mw_file = "rtuLogFileUrl"; private static final String key_mw_text = "rtuLogTextUrl"; private Environment env ; private RestTemplate restTemplate; @Autowired public RtuLogCtrl(Environment env, RestTemplate restTemplate) { this.env = env; this.restTemplate = restTemplate; } /** * 发送命令,请求下载rtu上下行数据日志文件 * @param rtuAddr rtu地址 * @return */ @GetMapping(path = "file") @SsoAop() public BaseResponse<List<String>> rtuLogFile(String rtuAddr, HttpServletRequest req, HttpServletResponse rep){ String mwUrlRtuLogFile = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw_file); ServletOutputStream out = null ; try{ byte[] bs = this.requestMw4File(rtuAddr, mwUrlRtuLogFile) ; if(bs != null && bs.length > 0){ String fileReName = rtuAddr + ".log" ; //URLEncoder.encode可以防止中文乱码 fileReName = URLEncoder.encode(fileReName, "UTF-8").replaceAll("\\+", "%20"); rep.addHeader("content-type", "application/octet-stream;charset=UTF-8"); rep.addHeader("Content-Disposition", "attachment;fileName=" + fileReName); out = rep.getOutputStream() ; out.write(bs, 0, (bs==null?0:bs.length)); out.flush(); }else{ return BaseResponseUtils.buildError("获取文件失败") ; } }catch (Exception e){ }finally { if(out != null){ try{ out.close(); }catch(Exception e){ } } } return null ; } /** * 发送命令,请求rtu上下行数据日志文件内容 * @param rtuAddr rtu地址 * @return */ @GetMapping(path="text") @SsoAop() public BaseResponse<List<String>> rtuLogText(String rtuAddr){ String mwUrlRtuLogText = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw_text); return this.requestMw4Text(rtuAddr, mwUrlRtuLogText) ; } /** * 发送命令,请求下载rtu上下行数据日志文件 * @param rtuAddr rtu地址 * @param mwUrl mw服务器地址 * @return */ private byte[] requestMw4File(String rtuAddr, String mwUrl) throws Exception{ String url = UriComponentsBuilder.fromUriString(mwUrl) .build() .toUriString(); UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url) .queryParam("rtuAddr", rtuAddr); return restTemplate.getForObject(builder.toUriString(), byte[].class); } /** * 发送命令,请求rtu上下行数据日志文件内容 * @param rtuAddr rtu地址 * @param mwUrl mw服务器地址 * @return */ private BaseResponse<List<String>> requestMw4Text(String rtuAddr, String mwUrl){ String url = UriComponentsBuilder.fromUriString(mwUrl) .build() .toUriString(); UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url) .queryParam("rtuAddr", rtuAddr); ResponseEntity<BaseResponse> response = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, new HttpEntity<>(new HttpHeaders()), BaseResponse.class); return (response==null?null:response.getBody()); } } pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java
@@ -78,7 +78,7 @@ } /** * 平台远程开阀 * 平台远程开阀(强制开阀) * @param valve * @param bindingResult * @return @@ -97,31 +97,11 @@ Long operator = valve.getOperator(); Long comId = idLongGenerator.generate(); /** * 如果农户选择了虚拟卡,则使用该虚拟卡 * 如果农户未选择虚拟卡,则根据取水口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()); } //嘉峪关项目虚拟卡不扣费,不做使用中判断 //if(vc.getInUse() == 1) { // return BaseResponseUtils.buildErrorMsg(RemoteResultCode.IN_USE_VC_CANNOT_OPEN_VALVE.getMessage()); //} // 获取水价 Double waterPrice = commandSv.getPrice(); if(waterPrice == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.NO_WATER_PRICE.getMessage()); } // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); @@ -131,13 +111,37 @@ String rtuAddr = job_rtu.getString("rtuAddr"); String protocol = job_rtu.getString("protocol"); String orgTag = job_rtu.getString("orgTag"); if(orgTag == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_SET_DATA_SOURCE.getMessage()); } comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); // 生成订单号 String orderNo = generateOrderNo(); if(orderNo == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.NO_ORDER_NUMBER.getMessage()); } String commandCode = null; if(protocol.equals("p206V202404")) { // 新协议参数中需要虚拟卡 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()); } if(vc.getInUse()) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.IN_USE_VC_CANNOT_OPEN_VALVE.getMessage()); } // 获取功能码 commandCode = CodeV202404.cd_92; @@ -174,13 +178,6 @@ // 获取功能码 commandCode = CodeV1_0_1.cd_92; // 创建视图 Com97Vo param = new Com97Vo() ; param.icCardNo = vc.getVcNum().toString(); param.moneyRemain = vc.getMoney(); param.waterPrice = waterPrice; param.orderNo = orderNo; /** * 构造命令、发送命令并处理请求结果及执行结果 * 1 准备参数 @@ -195,7 +192,7 @@ myParam.setRtuAddr(rtuAddr); myParam.setProtocol(protocol); myParam.setVcId(vcId); myParam.setParam(param); //myParam.setParam(param); myParam.setRtuResultSendWebUrl(rtuCallbackUrl_rm); myParam.setOperator(operator); return dealWithCommandResult(myParam); @@ -205,7 +202,7 @@ } /** * 平台远程关阀_取水口模式 * 平台远程关阀(强制关阀) * @param dtoBase * @param bindingResult * @return @@ -245,6 +242,9 @@ //Long intakeId = job_rtu.getLong("intakeId"); String protocol = job_rtu.getString("protocol"); String orgTag = job_rtu.getString("orgTag"); if(orgTag == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_SET_DATA_SOURCE.getMessage()); } comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); String commandCode = null; @@ -281,8 +281,247 @@ // 获取功能码 commandCode = CodeV1_0_1.cd_93; /** * 构造命令、发送命令并处理请求结果及执行结果 * 1 准备参数 * 2 调用公共方法 */ Param myParam = new Param(); myParam.setComId(comId); myParam.setComType((byte)2); myParam.setCommandCode(commandCode); myParam.setCommandName(CodeV1_0_1.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 valve * @param bindingResult * @return */ @PostMapping(path = "open_client", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> openClient(@RequestBody @Valid ValveOpen valve, BindingResult bindingResult) { if (bindingResult != null && bindingResult.hasErrors()) { return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long intakeId = valve.getIntakeId(); Long vcId = valve.getVcId(); Long operator = valve.getOperator(); Long comId = idLongGenerator.generate(); /** * 如果农户选择了虚拟卡,则使用该虚拟卡 * 如果农户未选择虚拟卡,则根据取水口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()); } // 虚拟卡状态为使用中,且不是强制开阀时提示 if (vc.getInUse()) { return BaseResponseUtils.buildCodeMsg(RemoteResultCode.IN_USE_VC_CANNOT_OPEN_VALVE.getCode(), RemoteResultCode.IN_USE_VC_CANNOT_OPEN_VALVE.getMessage()); } // 获取水价 Double waterPrice = commandSv.getPrice(); if(waterPrice == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.NO_WATER_PRICE.getMessage()); } // 取水口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"); if(orgTag == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_SET_DATA_SOURCE.getMessage()); } comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); // 生成订单号 String orderNo = generateOrderNo(); if(orderNo == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.NO_ORDER_NUMBER.getMessage()); } String commandCode = null; if (protocol.equals("p206V202404")) { // 获取功能码 commandCode = CodeV202404.cd_A2; // 创建视图 Com98Vo param = new Com98Vo() ; ComCd92_A2Vo param = new ComCd92_A2Vo(); param.controllerType = controllerType; param.projectNo = projectNo; param.icCardNo = vc.getVcNum().toString(); param.waterRemain = 0.0; param.moneyRemain = vc.getMoney(); param.waterPrice = waterPrice; param.elePrice = 0.0; param.orderNo = orderNo; /** * 构造命令、发送命令并处理请求结果及执行结果 * 1 准备参数 * 2 调用公共方法 */ Param myParam = new Param(); myParam.setComId(comId); myParam.setComType((byte)1); 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 if (protocol.equals("p206V1_0_1")) { // 获取功能码 commandCode = CodeV1_0_1.cd_97; // 创建视图 Com97Vo param = new Com97Vo(); param.icCardNo = vc.getVcNum().toString(); param.moneyRemain = vc.getMoney(); param.waterPrice = waterPrice; param.orderNo = orderNo; /** * 构造命令、发送命令并处理请求结果及执行结果 * 1 准备参数 * 2 调用公共方法 */ Param myParam = new Param(); myParam.setComId(comId); myParam.setComType((byte)1); myParam.setCommandCode(commandCode); myParam.setCommandName(CodeV1_0_1.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 dtoBase * @param bindingResult * @return */ @PostMapping(path = "close_client", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> closeClient(@RequestBody @Valid DtoBase dtoBase, BindingResult bindingResult) { if (bindingResult != null && bindingResult.hasErrors()) { return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long intakeId = dtoBase.getIntakeId(); Long operator = dtoBase.getOperator(); VoUnclosedParam voUnclosedParam = null; try { voUnclosedParam = commandSv.getUncloseParam(intakeId); }catch (Exception e) { return BaseResponseUtils.buildErrorMsg("获取未关阀信息错误"); } if(voUnclosedParam == null) { return BaseResponseUtils.buildSuccess(RemoteResultCode.VALVE_CLOSED.getMessage()); } String rtuAddr = voUnclosedParam.getRtuAddr(); String vcNum = voUnclosedParam.getVcNum(); Long vcId = Optional.ofNullable(seVirtualCardMapper.getVcIdByNum(vcNum)).orElse(0L); String orderNo = voUnclosedParam.getOrderNo(); Long comId = idLongGenerator.generate(); // 阀控器地址换取水口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"); if(orgTag == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_SET_DATA_SOURCE.getMessage()); } comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); String commandCode = null; if (protocol.equals("p206V202404")) { // 获取功能码 commandCode = CodeV202404.cd_A3; // 创建视图 ComCd93_A3Vo param = new ComCd93_A3Vo(); param.controllerType = controllerType; param.projectNo = projectNo; param.icCardNo = vcNum; param.orderNo = 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 if (protocol.equals("p206V1_0_1")) { // 获取功能码 commandCode = CodeV1_0_1.cd_98; // 创建视图 Com98Vo param = new Com98Vo(); param.icCardNo = vcNum; param.orderNo = orderNo; @@ -310,7 +549,7 @@ } /** * 定时关阀 * 定时关阀式开阀 * @param automaticClose * @param bindingResult * @return @@ -351,6 +590,9 @@ // 获取水价 Double waterPrice = commandSv.getPrice(); if(waterPrice == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.NO_WATER_PRICE.getMessage()); } // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); @@ -360,10 +602,16 @@ String rtuAddr = job_rtu.getString("rtuAddr"); String protocol = job_rtu.getString("protocol"); String orgTag = job_rtu.getString("orgTag"); if(orgTag == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_SET_DATA_SOURCE.getMessage()); } comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); // 生成订单号 String orderNo = generateOrderNo(); if(orderNo == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.NO_ORDER_NUMBER.getMessage()); } String commandCode = null; if(protocol.equals("p206V202404")) { @@ -404,7 +652,7 @@ } /** * 定量关阀 * 定量关阀式开阀 * @param automaticClose * @param bindingResult * @return @@ -445,6 +693,9 @@ // 获取水价 Double waterPrice = commandSv.getPrice(); if(waterPrice == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.NO_WATER_PRICE.getMessage()); } // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); @@ -454,10 +705,16 @@ String rtuAddr = job_rtu.getString("rtuAddr"); String protocol = job_rtu.getString("protocol"); String orgTag = job_rtu.getString("orgTag"); if(orgTag == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_SET_DATA_SOURCE.getMessage()); } comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); // 生成订单号 String orderNo = generateOrderNo(); if(orderNo == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.NO_ORDER_NUMBER.getMessage()); } String commandCode = null; if(protocol.equals("p206V202404")) { @@ -498,7 +755,7 @@ } /** * 计划开阀定时关阀 * 定时关阀式计划开阀 * @param automaticClose * @param bindingResult * @return @@ -546,6 +803,9 @@ // 获取水价 Double waterPrice = commandSv.getPrice(); if(waterPrice == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.NO_WATER_PRICE.getMessage()); } // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); @@ -555,10 +815,16 @@ String rtuAddr = job_rtu.getString("rtuAddr"); String protocol = job_rtu.getString("protocol"); String orgTag = job_rtu.getString("orgTag"); if(orgTag == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_SET_DATA_SOURCE.getMessage()); } comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); // 生成订单号 String orderNo = generateOrderNo(); if(orderNo == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.NO_ORDER_NUMBER.getMessage()); } String commandCode = null; if(protocol.equals("p206V202404")) { @@ -604,7 +870,7 @@ } /** * 计划开阀定量关阀 * 定量关阀式计划开阀 * @param automaticClose * @param bindingResult * @return @@ -652,6 +918,9 @@ // 获取水价 Double waterPrice = commandSv.getPrice(); if(waterPrice == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.NO_WATER_PRICE.getMessage()); } // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); @@ -661,10 +930,16 @@ String rtuAddr = job_rtu.getString("rtuAddr"); String protocol = job_rtu.getString("protocol"); String orgTag = job_rtu.getString("orgTag"); if(orgTag == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_SET_DATA_SOURCE.getMessage()); } comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); // 生成订单号 String orderNo = generateOrderNo(); if(orderNo == null) { return BaseResponseUtils.buildErrorMsg(RemoteResultCode.NO_ORDER_NUMBER.getMessage()); } String commandCode = null; if(protocol.equals("p206V202404")) { pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java
@@ -51,7 +51,6 @@ @Tag(name = "小程序阀控器控制", description = "小程序阀控器控制") @RestController @RequestMapping(path = "valve") //@RequiredArgsConstructor public class ValveCtrl extends ComSupport { private final CommandSv commandSv; private final SeVirtualCardMapper seVirtualCardMapper; @@ -134,6 +133,9 @@ // 获取水价 Double waterPrice = commandSv.getPrice(); if(waterPrice == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.NO_WATER_PRICE.getMessage()); } // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); @@ -143,10 +145,16 @@ String rtuAddr = job_rtu.getString("rtuAddr"); String protocol = job_rtu.getString("protocol"); String orgTag = job_rtu.getString("orgTag"); if(orgTag == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_SET_DATA_SOURCE.getMessage()); } comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); // 生成订单号 String orderNo = generateOrderNo(); if(orderNo == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.NO_ORDER_NUMBER.getMessage()); } String commandCode = null; if (protocol.equals("p206V202404")) { @@ -246,6 +254,9 @@ Long intakeId = job_rtu.getLong("intakeId"); String protocol = job_rtu.getString("protocol"); String orgTag = job_rtu.getString("orgTag"); if(orgTag == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_SET_DATA_SOURCE.getMessage()); } comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); String commandCode = null; @@ -351,6 +362,9 @@ // 获取水价 Double waterPrice = commandSv.getPrice(); if(waterPrice == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.NO_WATER_PRICE.getMessage()); } // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); @@ -360,10 +374,16 @@ String rtuAddr = job_rtu.getString("rtuAddr"); String protocol = job_rtu.getString("protocol"); String orgTag = job_rtu.getString("orgTag"); if(orgTag == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_SET_DATA_SOURCE.getMessage()); } comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); // 生成订单号 String orderNo = generateOrderNo(); if(orderNo == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.NO_ORDER_NUMBER.getMessage()); } String commandCode = null; if(protocol.equals("p206V202404")) { @@ -444,6 +464,9 @@ // 获取水价 Double waterPrice = commandSv.getPrice(); if(waterPrice == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.NO_WATER_PRICE.getMessage()); } // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); @@ -453,10 +476,17 @@ String rtuAddr = job_rtu.getString("rtuAddr"); String protocol = job_rtu.getString("protocol"); String orgTag = job_rtu.getString("orgTag"); if(orgTag == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_SET_DATA_SOURCE.getMessage()); } comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); // 生成订单号 String orderNo = generateOrderNo(); if(orderNo == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.NO_ORDER_NUMBER.getMessage()); } String commandCode = null; if(protocol.equals("p206V202404")) { return BaseResponseUtils.buildSuccess(); @@ -543,6 +573,9 @@ // 获取水价 Double waterPrice = commandSv.getPrice(); if(waterPrice == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.NO_WATER_PRICE.getMessage()); } // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); @@ -552,10 +585,16 @@ String rtuAddr = job_rtu.getString("rtuAddr"); String protocol = job_rtu.getString("protocol"); String orgTag = job_rtu.getString("orgTag"); if(orgTag == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_SET_DATA_SOURCE.getMessage()); } comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); // 生成订单号 String orderNo = generateOrderNo(); if(orderNo == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.NO_ORDER_NUMBER.getMessage()); } String commandCode = null; if(protocol.equals("p206V202404")) { @@ -648,6 +687,9 @@ // 获取水价 Double waterPrice = commandSv.getPrice(); if(waterPrice == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.NO_WATER_PRICE.getMessage()); } // 取水口ID换阀控器地址及通讯协议 JSONObject job_rtu = getRtu(intakeId, null); @@ -657,10 +699,16 @@ String rtuAddr = job_rtu.getString("rtuAddr"); String protocol = job_rtu.getString("protocol"); String orgTag = job_rtu.getString("orgTag"); if(orgTag == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_SET_DATA_SOURCE.getMessage()); } comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); // 生成订单号 String orderNo = generateOrderNo(); if(orderNo == null) { return BaseResponseUtils.buildErrorMsg(WechatResultCode.NO_ORDER_NUMBER.getMessage()); } String commandCode = null; if(protocol.equals("p206V202404")) { pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/result/WechatResultCode.java
@@ -23,13 +23,16 @@ PLEASE_SELECT_A_INTAKE(10004, "请选择一个取水口"), IN_USE_VC_CANNOT_OPEN_VALVE(10005, "使用中虚拟卡不能用来开阀"), THE_DEVICE_DOES_NOT_HAVE_THIS_FUNCTION(10006, "该设备无此同能"), NO_WATER_PRICE(10007, "未取到水价"), NO_ORDER_NUMBER(10008, "未生成订单号"), /** * RTU */ RTU_NOT_EXIST(20001, "阀控器不存在"), //RTU_ADDR_CANNOT_BE_NULL(20002, "阀控器地址不能为空"); CLIENT_CARD_NOT_EXIST(30001, "水卡不存在"), CLIENT_CARD_NOT_EXIST(20002, "水卡不存在"), RTU_NOT_SET_DATA_SOURCE(20003, "阀控器未设置数据源"), /** * 微信用户