1、中间件设备日志文件针对FBox设备优化;2、表阀一体机功能码92返回结果判断bug修改;3、remote模块中实现表阀一体机协议的功能码9D(正常远程关阀)。
4个文件已添加
2个文件已修改
233 ■■■■■ 已修改文件
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/resource/rtuLog/RtuLogManager.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd92/CdCtrl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd9D/CdCtrl.java 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd9D/CdDto.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd9D/CdParam.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd9D/CdSv.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/resource/rtuLog/RtuLogManager.java
@@ -172,7 +172,9 @@
                                return new Object[]{null, 3} ;
                            }
                            if(!oldLog.delete()){
                                return new Object[]{null, 4} ;
                                //2025-06-28 对于水肥机FBox上报数据比较频繁,实测老文件常有删除不了的情况发生,
                                //一次删除不了,下次再可删除,所以下面return去除
                                //return new Object[]{null, 4} ;
                            }
                        }
                    }
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd92/CdCtrl.java
@@ -170,7 +170,7 @@
                DataCd92_A2Vo cvo = JSON.parseObject(json, DataCd92_A2Vo.class) ;
                if(cvo != null){
                    if(callback != null){
                        if(cvo.opResult != null && cvo.opResult.byteValue() == (byte)0){
                        if(cvo.opResult != null && cvo.opResult.byteValue() == (byte)1){
                            callback.call(true);//开阀成功
                        }else{
                            callback.call(false);//开阀失败
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd9D/CdCtrl.java
New file
@@ -0,0 +1,150 @@
package com.dy.pipIrrRemote.monitor.p202404V201.cd9D;
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.p206V202404.upVos.DataCd93_9D_A3Vo;
import com.dy.common.util.Callback;
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.pipIrrGlobal.pojoRm.RmOpenCloseValveLast;
import com.dy.pipIrrRemote.common.dto.DtoBase;
import com.dy.pipIrrRemote.monitor.common.ComCtrl;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.http.MediaType;
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;
/**
 * @Author: liurunyu
 * @Date: 2025/5/28 11:30
 * @Description
 */
@Slf4j
@Tag(name = "远程命令", description = "平台远程关阀")
@RestController("p202404V201Cd9DCtrl")
@RequestMapping(path = "p202404V201/cd9D")
@RequiredArgsConstructor
@Scope("prototype") //因为有对象类属性,所以采用原型模式,每次请求新建一个实例对象
public class CdCtrl extends ComCtrl {
    private static final String RtuSuccessMsg = "控制器接收并执行命令成功,无返回数据";
    private static final String ComCode = "9D" ;
    @Autowired
    private CdSv sv ;
    /**
     * 向设备(控制器)发送命令
     * @param dto 前端发来的值对象
     * @param bindingResult 对dto验证的结果
     * @return 返回前端
     */
    @PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE)
    @SsoAop()
    public BaseResponse<Object> send(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
        BaseResponse<Object> res ;
        //发送命令前-1:验证
        res = super.pre1(sv, ComCode, dto, bindingResult);
        if(res == null) {
            //发送命令前-2:获得数据
            res = super.pre2(sv, ComCode, dto, bindingResult);
            if (res == null) {
                //获取开阀命令参数
                RmOpenCloseValveLast lastOpPo = sv.getLastOpenValve(dto.getIntakeId()) ;
                if(lastOpPo == null || lastOpPo.opType == null) {
                    return BaseResponseUtils.buildFail("该取水口上无最近的开阀操作");
                }
                if(lastOpPo.clType != null) {
                    return BaseResponseUtils.buildFail("该取水口上无最近的开阀操作");
                }
                //发送命令前-3:保存命令日志
                CdParam comParam = CdParam.builder().commandCode(ComCode).projectNo(projectNo).controllerType(controllerType)
                        .icCardAddr(lastOpPo.opIcCardAddr)//开阀ic卡地址
                        .icCardNo(lastOpPo.opIcCardNo)//开阀IC卡编号
                        .orderNo(lastOpPo.opOrderNo)//订单号
                        .build();
                res = super.pre3(sv, dto.getIntakeId(), dto.getOperator(), ComCode, comParam);
                if (res == null) {
                    //发送命令前-4:准备Feature
                    super.pre4();
                    try {
                        //创建外部命令(发给控制器)
                        Command com = sv.createOuterCommand(ctrlPo.getRtuAddr(), "" + comId, ComCode);
                        com.rtuResultSendWebUrl = rtuResultSendWebUrl;
                        com.param = comParam;
                        //发送命令
                        res = super.doSend(sv, com);
                        if (res == null) {
                            //发送命令后
                            res = super.after(ComCode, new Callback() {
                                @Override
                                public void call(Object obj) {
                                    //Boolean success = (Boolean) obj;
                                    //if(success){
                                    //    //关阀成功
                                    //}
                                }
                                @Override
                                public void call(Object... objs) {
                                }
                                @Override
                                public void exception(Exception e) {
                                }
                            });
                        }
                    } catch (Exception e) {
                        res = BaseResponseUtils.buildFail("服务端构造并向通信中间件发送请求时异常" + (e.getMessage() == null ? "" : e.getMessage()));
                    } finally {
                        //最终
                        super.end();
                    }
                }
            }
        }
        return res ;
    }
    @Override
    protected String checkDto(DtoBase dto) {
        return null;
    }
    @Override
    protected String dealComResult(String code, JSONObject resultData, Callback callback){
        String msg;
        if(resultData != null){
            JSONObject codeData = resultData.getJSONObject("data") ;
            if(codeData == null){
                msg = RtuSuccessMsg ;
            }else {
                String json = codeData.toJSONString();
                DataCd93_9D_A3Vo cvo = JSON.parseObject(json, DataCd93_9D_A3Vo.class) ;
                if(cvo != null){
                    if(callback != null){
                        if(cvo.clResult != null && cvo.clResult == 0){
                            callback.call(true);//关阀成功
                        }else{
                            callback.call(false);//关阀失败
                        }
                    }
                    msg = cvo.toStr(false) ;
                }else{
                    msg = RtuSuccessMsg ;
                }
            }
        }else{
            msg = RtuSuccessMsg ;
        }
        return msg;
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd9D/CdDto.java
New file
@@ -0,0 +1,17 @@
package com.dy.pipIrrRemote.monitor.p202404V201.cd9D;
import com.dy.pipIrrRemote.common.dto.DtoBase;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * @Author: liurunyu
 * @Date: 2025/5/28 11:30
 * @Description
 */
@Data
@EqualsAndHashCode(callSuper=true)
public class CdDto extends DtoBase {
    public static final long serialVersionUID = 202506281131001L;
}
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd9D/CdParam.java
New file
@@ -0,0 +1,22 @@
package com.dy.pipIrrRemote.monitor.p202404V201.cd9D;
import com.dy.pipIrrRemote.monitor.common.CdParameter;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.SuperBuilder;
/**
 * @Author: liurunyu
 * @Date: 2025/5/28 11:30
 * @Description
 */
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
public class CdParam extends CdParameter {
    public String icCardAddr ;//用户卡地址(4字节HEX)
    public String icCardNo ;//用户卡序列号(17位数字)(6字节BCD,2字节HEX)
    public String orderNo ;//订单号(16位数字)
}
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd9D/CdSv.java
New file
@@ -0,0 +1,38 @@
package com.dy.pipIrrRemote.monitor.p202404V201.cd9D;
import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper;
import com.dy.pipIrrGlobal.daoRm.RmOpenCloseValveLastMapper;
import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper;
import com.dy.pipIrrGlobal.pojoRm.RmOpenCloseValveLast;
import com.dy.pipIrrRemote.monitor.common.ComSv;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * @Author: liurunyu
 * @Date: 2025/5/28 11:30
 * @Description
 */
@Slf4j
@Service("cd9DSv")
public class CdSv extends ComSv {
    @Autowired
    protected SeVirtualCardMapper seVirtualCardDao ;
    @Autowired
    protected PrWaterPriceMapper prWaterPriceDao ;
    @Autowired
    protected RmOpenCloseValveLastMapper rmOpenCloseValveLastDao ;
    public RmOpenCloseValveLast getLastOpenValve(Long intakeId){
        List<RmOpenCloseValveLast> list = rmOpenCloseValveLastDao.selectByIntakeId(intakeId) ;
        if(list != null && list.size() > 0){
            return list.get(0) ;
        }
        return null ;
    }
}