zjj
2024-04-20 52b397b5901c0ec428d0dc6589cbf4c9c2729c24
src/main/java/com/zy/asrs/controller/RgvController.java
@@ -2,9 +2,11 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.annotations.ManagerAuth;
import com.core.common.Cools;
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.domain.enums.RgvStatusType;
import com.zy.asrs.domain.param.CrnDemoParam;
import com.zy.asrs.domain.param.CrnOperatorParam;
import com.zy.asrs.domain.param.RgvOperatorParam;
import com.zy.asrs.domain.vo.RgvMsgTableVo;
@@ -33,15 +35,19 @@
import com.zy.core.model.protocol.CrnProtocol;
import com.zy.core.model.protocol.RgvProtocol;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.properties.SystemProperties;
import com.zy.core.thread.SiemensRgvThread;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * RGV接口
@@ -64,20 +70,172 @@
    private MainServiceImpl mainService;
    @Autowired
    private LocMastService locMastService;
    int wrkNo = 9990;
    @ManagerAuth(memo = "演示命令下发")
    @GetMapping("/rgvDemoTask")
    public R rgvDemoTask(Integer rgvNo, Integer sta,Integer end){
        wrkNo++;
        RgvCommand command = new RgvCommand();
        command.setRgvNo(rgvNo); // RGV编号
        command.setAckFinish1(false);  // 任务完成确认位
        command.setTaskNo1(wrkNo); // 工作号
        command.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 任务模式: 取放货
        command.setSourceStaNo1(sta.shortValue()); // 源站
        command.setDestinationStaNo1(end.shortValue());  // 目标站
//        command.setAckFinish2((short) 0);  // 任务完成确认位
//        command.setTaskNo2((short) 0); // 工作号
//        command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 任务模式: 取放货
//        command.setSourceStaNo2(param.getSourceStaNo2()); // 源站
//        command.setDestinationStaNo2(param.getStaNo2());  // 目标站
        command.setCommand((short) 0);
        return rgvControl(command)? R.ok(): R.error();
    }
    @ManagerAuth(memo = "解锁小车")
    @PostMapping("/lock")
    public R lock(RgvOperatorParam param ){
        SiemensRgvThread rgvThread = (SiemensRgvThread) SlaveConnection.get(SlaveType.Rgv, param.getRgvNo());
        rgvThread.setPakMk(true);
        return R.ok();
    }
    @GetMapping("/demo/status")
    public R demoStatus(Integer rgvNo){
        if (Cools.isEmpty(rgvNo)){
            return R.ok("X");
        }
        String demo = "X";
//        List<Map<String, Object>> res = new ArrayList<>();
        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
            if (rgvSlave.getId() == rgvNo){
               demo = rgvSlave.getDemo()?"Y":"N";
            }
        }
        return R.ok(demo);
    }
    @GetMapping("/demo/status/true")
    public R demoStatusTrue(Integer rgvNo){
        if (Cools.isEmpty(rgvNo)){
            return R.error("请选择rgv");
        }
//        List<Map<String, Object>> res = new ArrayList<>();
        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
            if (rgvSlave.getId() == rgvNo){
                rgvSlave.setDemo(true);
            }
        }
        return R.ok();
    }
    @GetMapping("/demo/status/false")
    public R demoStatusFalse(Integer rgvNo){
        if (Cools.isEmpty(rgvNo)){
            return R.error("请选择rgv");
        }
//        List<Map<String, Object>> res = new ArrayList<>();
        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
            if (rgvSlave.getId() == rgvNo){
                rgvSlave.setDemo(false);
            }
        }
        return R.ok();
    }
    @PostMapping("/demo/switch")
    @ManagerAuth(memo = "RGV演示")
    public R crnDemo(CrnDemoParam param) throws InterruptedException {
        if (Cools.isEmpty(param.getCrnId())){
            return R.error();
        }
        if (Cools.isEmpty(param.getPassword())){
            return R.error("请输入口令");
        }
        if (!param.getPassword().equals(SystemProperties.WCS_PASSWORD)){
            return R.error("口令错误");
        }
        Thread.sleep(200L);
        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
            if (rgvSlave.getId().equals(param.getCrnId())) {
                rgvSlave.setDemo(param.getOpt());
            }
        }
//        mainService.crnDemoOfLocMove(param.getCrnId());
        return R.ok();
    }
    @ManagerAuth(memo = "取放货")
    @PostMapping("/operator/put")
    public R rgvFetchPut(RgvOperatorParam param){
        wrkNo++;
        RgvCommand command = new RgvCommand();
        command.setRgvNo(param.getRgvNo()); // RGV编号
        command.setAckFinish1(false);  // 任务完成确认位
        command.setTaskNo1(wrkNo); // 工作号
        command.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 任务模式: 取放货
        command.setSourceStaNo1(param.getSourceRow().shortValue()); // 源站
        command.setDestinationStaNo1(param.getSourceBay().shortValue());  // 目标站
//        command.setAckFinish2((short) 0);  // 任务完成确认位
//        command.setTaskNo2((short) 0); // 工作号
//        command.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 任务模式: 取放货
//        command.setSourceStaNo2(param.getSourceStaNo2()); // 源站
//        command.setDestinationStaNo2(param.getStaNo2());  // 目标站
        command.setCommand((short) 0);
        return rgvControl(command)? R.ok(): R.error();
    }
    @ManagerAuth(memo = "复位")
    @PostMapping("/operator/reset")
    public R crnReset(RgvOperatorParam param){
        // 系统运行状态判断
//        if (SystemProperties.WCS_RUNNING_STATUS.get()) {
//            return R.error("wcs系统状态为开启");
//        }
        short[] array = new short[9];
        RgvCommand command = new RgvCommand();
        command.setRgvNo(param.getRgvNo()); // 堆垛机编号
        command.setReset(true);
        return rgvControl2(command)?R.ok():R.error();
    }
    @ManagerAuth(memo = "联机")
    @PostMapping("/operator/auto")
    public R crnAuto(RgvOperatorParam param){
        RgvCommand command = new RgvCommand();
        command.setRgvNo(param.getRgvNo()); // 堆垛机编号
        command.setAuto(true);
        return rgvControl2(command)?R.ok():R.error();
    }
    @ManagerAuth(memo = "恢复任务")
    @PostMapping("/operator/restoreTask")
    public R crnRestoreTask(RgvOperatorParam param){
        RgvCommand command = new RgvCommand();
        command.setRgvNo(param.getRgvNo()); // 堆垛机编号
        command.setRestoreTask(true);
        return rgvControl2(command)?R.ok():R.error();
    }
    @ManagerAuth(memo = "完成任务")
    @PostMapping("/operator/compTask")
    public R rgvCompTask(RgvOperatorParam param){
        RgvCommand command = new RgvCommand();
        command.setRgvNo(param.getRgvNo()); // 堆垛机编号
        command.setCompTask(true);
        return rgvControl2(command)?R.ok():R.error();
    }
    @ManagerAuth(memo = "急停")
    @PostMapping("/operator/stop")
    public R rgvStop(RgvOperatorParam param){
        RgvCommand command = new RgvCommand();
        command.setRgvNo(param.getRgvNo()); // 堆垛机编号
        command.setStop(true);
        return rgvControl2(command)?R.ok():R.error();
    }
    @ManagerAuth(memo = "取消急停")
    @PostMapping("/operator/noStop")
    public R rgvNoStop(RgvOperatorParam param){
        RgvCommand command = new RgvCommand();
        command.setRgvNo(param.getRgvNo()); // 堆垛机编号
        command.setNoStop(true);
        return rgvControl2(command)?R.ok():R.error();
    }
@@ -131,19 +289,14 @@
                continue;
            }
            vo.setStatusType(rgvProtocol.modeType.desc);   //  模式状态
            vo.setStatus(rgvProtocol.getStatusType().desc);     //  状态
            vo.setStatus(rgvProtocol.getStatusType1().desc);     //  状态
            vo.setWorkNo1(rgvProtocol.getTaskNo1());  //  工位1任务号
            vo.setStatus1(rgvProtocol.getStatusType1().desc);  // 工位1状态
            vo.setLoading1(rgvProtocol.getLoaded1()==1?"有物":"无物");  // 工位1有物
            vo.setRgvPos(rgvProtocol.getRgvPos());
            vo.setRgvPos1(rgvProtocol.getRgvPosI());
            vo.setWalkPos(rgvProtocol.getWalkPos()==1?"在定位":"不在定位");
            vo.setPakMk(rgvThread.isPakMk()?"无锁":"锁定");
//            vo.setWorkNo2(rgvProtocol.getTaskNo2());  //  工位2任务号
//            vo.setStatus2(rgvProtocol.getStatusType2().desc);  // 工位2状态
//            vo.setLoading2(rgvProtocol.getLoaded2()==1?"有物":"无物");  // 工位2有物
            vo.setWalkPos(rgvProtocol.getAlarm() == 0?"正常":"报警");
            vo.setWarnCode(String.valueOf(rgvProtocol.getAlarm()));
//            vo.setStaNo(rgvProtocol.getSouSta().intValue());
//            vo.setSourceStaNo(rgvProtocol.getEndSta().intValue());
            if (rgvProtocol.getAlarm() > 0) {
                BasRgvErr rgvErr = basRgvErrMapper.selectById(rgvProtocol.getAlarm());
                vo.setAlarm(rgvErr==null?"未知异常":rgvErr.getErrName());
@@ -217,8 +370,8 @@
    public R rgvTaskComplete(RgvOperatorParam param){
        RgvCommand command = new RgvCommand();
        command.setRgvNo(param.getRgvNo()); // RGV编号
        command.setAckFinish1((short) 1);  // 任务完成确认位
        command.setTaskNo1((short) 0); // 工作号
        command.setAckFinish1(false);  // 任务完成确认位
        command.setTaskNo1( 0); // 工作号
        command.setTaskMode1(RgvTaskModeType.NONE); // 任务模式
        command.setSourceStaNo1((short) 0); // 源站
        command.setDestinationStaNo1((short) 0);  // 目标站
@@ -240,8 +393,8 @@
        }
        RgvCommand command = new RgvCommand();
        command.setRgvNo(param.getRgvNo()); // RGV编号
        command.setAckFinish1((short) 0);  // 任务完成确认位
        command.setTaskNo1((short) 0); // 工作号
        command.setAckFinish1(false);  // 任务完成确认位
        command.setTaskNo1(0); // 工作号
        command.setTaskMode1(RgvTaskModeType.NONE); // 任务模式
        command.setSourceStaNo1((short) 0); // 源站
        command.setDestinationStaNo1((short) 0);  // 目标站
@@ -276,7 +429,7 @@
                RgvCommand Command = new RgvCommand();
                Command.setRgvNo(rgv.getId()); // RGV编号
                Command.setTaskMode1(RgvTaskModeType.NONE);
                Command.setAckFinish1((short) 0);  // 任务完成确认位
                Command.setAckFinish1(false);  // 任务完成确认位
                Command.setAckFinish2((short) 0);  // 任务完成确认位
                Command.setCommand((short) 0);  // 任务完成确认位
                // 延时发送