package com.dy.pipIrrRemote.monitor.mqttSd1.irr; 
 | 
  
 | 
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.protocol4Mqtt.pSdV1.CodeSdV1; 
 | 
import com.dy.common.mw.protocol4Mqtt.pSdV1.ProtocolConstantSdV1; 
 | 
import com.dy.common.mw.protocol4Mqtt.pSdV1.upVos.ManureVo; 
 | 
import com.dy.common.util.Callback; 
 | 
import com.dy.common.webUtil.BaseResponse; 
 | 
import com.dy.common.webUtil.BaseResponseUtils; 
 | 
import com.dy.pipIrrRemote.common.dto.Dto4MqttBase; 
 | 
import com.dy.pipIrrRemote.monitor.common.Com4MqttCtrl; 
 | 
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/6/16 17:35 
 | 
 * @Description 
 | 
 */ 
 | 
  
 | 
@Slf4j 
 | 
@Tag(name = "远程命令", description = "清除故障") 
 | 
@RestController("mqttSd1IrrCtrl") 
 | 
@RequestMapping(path = "mqttSd1/irrCtrl") 
 | 
@RequiredArgsConstructor 
 | 
@Scope("prototype") //因为有对象类属性,所以采用原型模式,每次请求新建一个实例对象 
 | 
public class CdCtrl extends Com4MqttCtrl { 
 | 
  
 | 
    private static final String RtuSuccessMsg = "控制器接收并执行命令成功,无返回数据"; 
 | 
  
 | 
    private static final String Protocol = ProtocolConstantSdV1.protocolName ; 
 | 
    private static final Short ProtocolVersion = ProtocolConstantSdV1.protocolVer ; 
 | 
    private static final String ComCode = CodeSdV1.cd_Irr ; 
 | 
  
 | 
  
 | 
    @Autowired 
 | 
    private CdSv sv ; 
 | 
    /** 
 | 
     * 向设备(Mqtt中间件->FBox)发送命令 
 | 
     * @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, Protocol, ProtocolVersion, ComCode, dto, bindingResult); 
 | 
            if (res == null) { 
 | 
                //发送命令前-3:保存命令日志 
 | 
                CdParam comParam = CdParam.builder().commandCode(ComCode).build(); 
 | 
                res = super.pre3(sv, dto.manureId, dto.getOperator(), Protocol, ProtocolVersion, ComCode, comParam); 
 | 
                if (res == null) { 
 | 
                    //发送命令前-4:准备Feature 
 | 
                    super.pre4(); 
 | 
                    try { 
 | 
                        //创建外部命令(发给控制器) 
 | 
                        Command com = sv.createOuterCommand(ctrlPo.fboxId, "" + comId, ComCode); 
 | 
                        com.rtuResultSendWebUrl = rtuResultSendWebUrl; 
 | 
                        com.param = comParam ; 
 | 
                        //发送命令 
 | 
                        res = super.doSend(sv, com); 
 | 
                        if (res == null) { 
 | 
                            //发送命令后 
 | 
                            res = super.after(ComCode, null); 
 | 
                        } 
 | 
                    } catch (Exception e) { 
 | 
                        res = BaseResponseUtils.buildFail("服务端构造并向通信中间件发送请求时异常" + (e.getMessage() == null ? "" : e.getMessage())); 
 | 
                    } finally { 
 | 
                        //最终 
 | 
                        super.end(); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return res ; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    protected String checkDto(Dto4MqttBase dto) { 
 | 
        return null; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    protected String dealComResult(String code, JSONObject resultData, Callback callback){ 
 | 
        String msg; 
 | 
        if(resultData != null){ 
 | 
            log.info(resultData.toString()); 
 | 
            JSONObject codeData = resultData.getJSONObject("data") ; 
 | 
            if(codeData == null){ 
 | 
                msg = RtuSuccessMsg ; 
 | 
            }else { 
 | 
                String json = codeData.toJSONString(); 
 | 
                ManureVo cvo = JSON.parseObject(json, ManureVo.class) ; 
 | 
                if(cvo != null){ 
 | 
                    msg = cvo.toString() ; 
 | 
                }else{ 
 | 
                    msg = RtuSuccessMsg ; 
 | 
                } 
 | 
            } 
 | 
        }else{ 
 | 
            msg = RtuSuccessMsg ; 
 | 
        } 
 | 
        return msg; 
 | 
    }} 
 |