package com.dy.pipIrrRemote.rtu; 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.*; import com.dy.common.mw.protocol.p206V202404.CodeV202404; import com.dy.common.mw.protocol.p206V202404.downVos.ComCdXyVo; import com.dy.common.util.IDLongGenerator; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; import com.dy.pipIrrGlobal.command.ComSupport; import com.dy.pipIrrGlobal.command.dto.Param; import com.dy.pipIrrRemote.common.CommandSv; import com.dy.pipIrrRemote.common.dto.Alarm; import com.dy.pipIrrRemote.common.dto.CollectPeriod; import com.dy.pipIrrRemote.common.dto.CommandGet; import com.dy.pipIrrRemote.common.dto.Domain; import com.dy.pipIrrRemote.result.RemoteResultCode; import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.http.MediaType; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; 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; //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 * @LastEditTime 2024-05-21 14:31 * @Description 设备终端控制类 */ @Slf4j @RestController @RequestMapping(path="rtu") //@RequiredArgsConstructor public class RtuCtrl extends ComSupport { private final CommandSv commandSv; private final IDLongGenerator idLongGenerator; @Value("${mw.rtuCallbackUrl_rm}") private String rtuCallbackUrl_rm; /** * pro_mw:属性 * tag从控制器中获取 * key_mw:url的key */ private Environment env = null; private String pro_mw = "mw"; private String key_mw = "comSendUrl"; @Autowired public RtuCtrl(CommandSv commandSv, IDLongGenerator idLongGenerator, Environment env) { this.commandSv = commandSv; this.idLongGenerator = idLongGenerator; this.env = env; } /** * 通用查询接口 * p206V1_0_1 * 66 查询IP和端口 * 67 查询流量采集周期 * 68 查询用户余额报警值 * 69 查询电池电压报警值 * 6A 查询阀门堵转电流值 * 6B 查询阀门超时时间 * @param po 查询传入对象 * @param bindingResult * @return 查询结果 */ @PostMapping(path = "common_get", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse commonGet(@RequestBody @Valid CommandGet po, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long intakeId = po.getIntakeId(); Long operator = po.getOperator(); 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"); String orgTag = job_rtu.getString("orgTag"); comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); // 获取功能码 String commandCode = po.getCommandCode(); if(protocol.equals("p206V202404")) { // 创建视图 ComCdXyVo param = new ComCdXyVo(); param.controllerType = controllerType; param.projectNo = projectNo; /** * 构造命令、发送命令并处理请求结果及执行结果 * 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(rtuCallbackUrl_rm); myParam.setOperator(operator); return dealWithCommandResult(myParam); } else if(protocol.equals("p206V1_0_1")) { // 创建视图 ComXyVo param = new ComXyVo(); param.setCommandCode(commandCode); /** * 构造命令、发送命令并处理请求结果及执行结果 * 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.buildFail("系统暂不支持该协议"); } } /** * 设置流量采集周期 * @param po * @param bindingResult * @return */ @PostMapping(path = "set_collect_period", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse setCollectPeriod(@RequestBody @Valid CollectPeriod po, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long intakeId = po.getIntakeId(); Long operator = po.getOperator(); 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"); String orgTag = job_rtu.getString("orgTag"); comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); // 获取功能码 String commandCode = po.getCommandCode(); if(protocol.equals("p206V202404")) { return BaseResponseUtils.buildSuccess(""); } else if(protocol.equals("p206V1_0_1")) { // 创建视图 Com37Vo param = new Com37Vo(); param.setSeconds(po.getSeconds()); /** * 构造命令、发送命令并处理请求结果及执行结果 * 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.buildFail("系统暂不支持该协议"); } } /** * 设置服务端IP和端口 * @param po * @param bindingResult * @return */ @PostMapping(path = "set_ip_port", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse setIpPort(@RequestBody @Valid Domain po, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long intakeId = po.getIntakeId(); Long operator = po.getOperator(); 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"); String orgTag = job_rtu.getString("orgTag"); comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); // 获取功能码 String commandCode = po.getCommandCode(); if(protocol.equals("p206V202404")) { return BaseResponseUtils.buildSuccess(""); } else if(protocol.equals("p206V1_0_1")) { // 创建视图 Com21Vo param = new Com21Vo(); param.setIp(po.getIp()); param.setPort(po.getPort()); /** * 构造命令、发送命令并处理请求结果及执行结果 * 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.buildFail("系统暂不支持该协议"); } } /** * 设置用户余额报警值 * @param po * @param bindingResult * @return */ @PostMapping(path = "set_remain_money_alarm", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse setRemainMoneyAlarm(@RequestBody @Valid Alarm po, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long intakeId = po.getIntakeId(); Long operator = po.getOperator(); 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"); String orgTag = job_rtu.getString("orgTag"); comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); // 获取功能码 String commandCode = po.getCommandCode(); if(protocol.equals("p206V202404")) { return BaseResponseUtils.buildSuccess(""); } else if(protocol.equals("p206V1_0_1")) { // 创建视图 Com38Vo param = new Com38Vo(); param.setRemainMoneyAlarm(po.getRemainMoneyAlarm()); /** * 构造命令、发送命令并处理请求结果及执行结果 * 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.buildFail("系统暂不支持该协议"); } } /** * 设置电池电压报警值 * @param po * @param bindingResult * @return */ @PostMapping(path = "set_battery_volt_alarm", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse setBatteryVoltAlarm(@RequestBody @Valid Alarm po, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long intakeId = po.getIntakeId(); Long operator = po.getOperator(); 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"); String orgTag = job_rtu.getString("orgTag"); comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw); // 获取功能码 String commandCode = po.getCommandCode(); if(protocol.equals("p206V202404")) { return BaseResponseUtils.buildSuccess(""); } else if(protocol.equals("p206V1_0_1")) { // 创建视图 Com39Vo param = new Com39Vo(); param.setBatteryVoltAlarm(po.getBatteryVoltAlarm()); /** * 构造命令、发送命令并处理请求结果及执行结果 * 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.buildFail("系统暂不支持该协议"); } } }