自动化立体仓库 - WCS系统
#
Junjie
昨天 e377f0ffba61c38f4f171d99e9ab6c3591f1d1b7
src/main/java/com/zy/asrs/controller/CrnController.java
@@ -17,10 +17,9 @@
import com.zy.asrs.mapper.BasCrnErrorMapper;
import com.zy.asrs.service.BasCrnpService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.service.impl.MainServiceImpl;
import com.zy.asrs.service.TaskWrkService;
import com.zy.asrs.utils.CommandUtils;
import com.zy.asrs.utils.VersionUtils;
import com.zy.asrs.utils.CrnOperaUtils;
import com.zy.core.CrnThread;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
@@ -39,7 +38,6 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -57,21 +55,18 @@
    private String wmsUrl;
    @Value("${wms.movePath}")
    private String movePath;
    @Autowired
    private SlaveProperties slaveProperties;
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private BasCrnErrorMapper basCrnErrorMapper;
    @Autowired
    private BasCrnpService basCrnpService;
    @Autowired
    private MainServiceImpl mainService;
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private CrnOperaUtils crnOperaUtils;
    @Autowired
    private TaskWrkService taskWrkService;
    @ManagerAuth(memo = "进行中的命令")
@@ -195,13 +190,13 @@
            vo.setWorkNo(crnProtocol.getTaskNo());  //  任务号
            if (crnProtocol.getTaskNo()>0) {
                WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo());
                if (wrkMast != null) {
                    vo.setStatus(CrnStatusType.process(wrkMast.getIoType()).getDesc());   //  模式状态
                    vo.setSourceStaNo(wrkMast.getSourceStaNo$());    //  源站
                    vo.setStaNo(wrkMast.getStaNo$());   //  目标站
                    vo.setSourceLocNo(wrkMast.getSourceLocNo());    //  源库位
                    vo.setLocNo(wrkMast.getLocNo());    //  目标库位
                TaskWrk taskWrk = taskWrkService.selectByWrkNo(crnProtocol.getTaskNo().intValue());
                if (taskWrk != null) {
                    vo.setStatus(CrnStatusType.process(taskWrk.getIoType()).getDesc());   //  模式状态
                    vo.setSourceStaNo(null);    //  源站
                    vo.setStaNo(null);   //  目标站
                    vo.setSourceLocNo(taskWrk.getStartPoint());    //  源库位
                    vo.setLocNo(taskWrk.getTargetPoint());    //  目标库位
                }
            } else {
                vo.setStatus(crnProtocol.modeType.equals(CrnModeType.AUTO)? CrnStatusType.MACHINE_AUTO.getDesc(): CrnStatusType.MACHINE_UN_AUTO.getDesc());   //  模式状态
@@ -236,13 +231,13 @@
        vo.setWorkNo(crnProtocol.getTaskNo());  //  任务号
        if (crnProtocol.getTaskNo()>0) {
            WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo());
            if (wrkMast != null) {
                vo.setStatus(CrnStatusType.process(wrkMast.getIoType()).getDesc());   //  模式状态
                vo.setSourceStaNo(wrkMast.getSourceStaNo$());    //  源站
                vo.setStaNo(wrkMast.getStaNo$());   //  目标站
                vo.setSourceLocNo(wrkMast.getSourceLocNo());    //  源库位
                vo.setLocNo(wrkMast.getLocNo());    //  目标库位
            TaskWrk taskWrk = taskWrkService.selectByWrkNo(crnProtocol.getTaskNo().intValue());
            if (taskWrk != null) {
                vo.setStatus(CrnStatusType.process(taskWrk.getIoType()).getDesc());   //  模式状态
                vo.setSourceStaNo(null);    //  源站
                vo.setStaNo(null);   //  目标站
                vo.setSourceLocNo(taskWrk.getStartPoint());    //  源库位
                vo.setLocNo(taskWrk.getTargetPoint());    //  目标库位
            }
        } else {
            vo.setStatus(crnProtocol.modeType.equals(CrnModeType.AUTO)? CrnStatusType.MACHINE_AUTO.getDesc(): CrnStatusType.MACHINE_UN_AUTO.getDesc());   //  模式状态
@@ -279,13 +274,13 @@
            vo.setWorkNo(crnProtocol.getTaskNo());  //  任务号
            if (crnProtocol.getTaskNo()>0) {
                WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo());
                if (wrkMast != null) {
                    vo.setDeviceStatus(CrnStatusType.process(wrkMast.getIoType()).getDesc());   //  模式状态
                    vo.setSourceStaNo(wrkMast.getSourceStaNo$());    //  源站
                    vo.setStaNo(wrkMast.getStaNo$());   //  目标站
                    vo.setSourceLocNo(wrkMast.getSourceLocNo());    //  源库位
                    vo.setLocNo(wrkMast.getLocNo());    //  目标库位
                TaskWrk taskWrk = taskWrkService.selectByWrkNo(crnProtocol.getTaskNo().intValue());
                if (taskWrk != null) {
                    vo.setDeviceStatus(CrnStatusType.process(taskWrk.getIoType()).getDesc());   //  模式状态
                    vo.setSourceStaNo(null);    //  源站
                    vo.setStaNo(null);   //  目标站
                    vo.setSourceLocNo(taskWrk.getStartPoint());    //  源库位
                    vo.setLocNo(taskWrk.getTargetPoint());    //  目标库位
                }
            } else {
                vo.setDeviceStatus(crnProtocol.modeType.equals(CrnModeType.AUTO)? CrnStatusType.MACHINE_AUTO.getDesc(): CrnStatusType.MACHINE_UN_AUTO.getDesc());   //  模式状态
@@ -376,110 +371,76 @@
    @ManagerAuth(memo = "入库")
    @PostMapping("/crn/operator/put")
    public R crnPut(CrnOperatorParam param){
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
        command.setAckFinish((short) 0);  // 任务完成确认位
        command.setTaskMode(CrnTaskModeType.PAKIN); // 任务模式
        command.setSourcePosZ(param.getSourceRow());     // 源库位排
        command.setSourcePosX(param.getSourceBay());     // 源库位列
        command.setSourcePosY(param.getSourceLev());     // 源库位层
        command.setDestinationPosZ(param.getRow());     // 目标库位排
        command.setDestinationPosX(param.getBay());     // 目标库位列
        command.setDestinationPosY(param.getLev());     // 目标库位层
        command.setCommand((short)1);
        return crnControl(command)?R.ok():R.error();
//        // 系统运行状态判断
//        if (SystemProperties.WCS_RUNNING_STATUS.get()) {
//            return R.error("wcs系统状态为开启");
//        }
//        command.setCommand((short)1);
        boolean result = crnOperaUtils.crnPut(param);
        return result ? R.ok() : R.error();
    }
    @ManagerAuth(memo = "出库")
    @PostMapping("/crn/operator/take")
    public R crnTake(CrnOperatorParam param){
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
        command.setAckFinish((short) 0);  // 任务完成确认位
        command.setTaskMode(CrnTaskModeType.PAKOUT); // 任务模式
        command.setSourcePosZ(param.getSourceRow());     // 源库位排
        command.setSourcePosX(param.getSourceBay());     // 源库位列
        command.setSourcePosY(param.getSourceLev());     // 源库位层
        command.setDestinationPosZ(param.getRow());     // 目标库位排
        command.setDestinationPosX(param.getBay());     // 目标库位列
        command.setDestinationPosY(param.getLev());     // 目标库位层
        return crnControl(command)?R.ok():R.error();
        // 系统运行状态判断
//        if (SystemProperties.WCS_RUNNING_STATUS.get()) {
//            return R.error("wcs系统状态为开启");
//        }
//        command.setCommand((short)1);
        boolean result = crnOperaUtils.crnTake(param);
        return result ? R.ok() : R.error();
    }
    @ManagerAuth(memo = "库位转移")
    @PostMapping("/crn/operator/stockMove")
    public R crnStockMove(CrnOperatorParam param){
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
        command.setAckFinish((short) 0);  // 任务完成确认位
        command.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式
        command.setSourcePosZ(param.getSourceRow());     // 源库位排
        command.setSourcePosX(param.getSourceBay());     // 源库位列
        command.setSourcePosY(param.getSourceLev());     // 源库位层
        command.setDestinationPosZ(param.getRow());     // 目标库位排
        command.setDestinationPosX(param.getBay());     // 目标库位列
        command.setDestinationPosY(param.getLev());     // 目标库位层
        command.setCommand((short)1);
        LocMast sourceLoc = locMastService.selectOne(new EntityWrapper<LocMast>().eq("row1", command.getSourcePosX())
                .eq("bay1", command.getSourcePosY()).eq("lev1", command.getSourcePosZ()));
        LocMast loc = locMastService.selectOne(new EntityWrapper<LocMast>().eq("row1", command.getDestinationPosX())
                .eq("bay1", command.getDestinationPosY()).eq("lev1", command.getDestinationPosZ()));
        VersionUtils.locMoveCheckLocType(sourceLoc, loc);
        return crnControl(command)?R.ok():R.error();
        // 系统运行状态判断
//        if (SystemProperties.WCS_RUNNING_STATUS.get()) {
//            return R.error("wcs系统状态为开启");
//        }
//        command.setCommand((short)1);
        boolean result = crnOperaUtils.crnStockMove(param);
        return result ? R.ok() : R.error();
    }
    @ManagerAuth(memo = "站到站")
    @PostMapping("/crn/operator/siteMove")
    public R crnSiteMove(CrnOperatorParam param){
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
        command.setAckFinish((short) 0);  // 任务完成确认位
        command.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式
        command.setSourcePosX(param.getSourceStaNo());     // 源库位排
        command.setSourcePosY((short) 0);     // 源库位列
        command.setSourcePosZ((short) 1);     // 源库位层
        command.setDestinationPosX(param.getStaNo());     // 目标库位排
        command.setDestinationPosY((short) 0);     // 目标库位列
        command.setDestinationPosZ((short) 1);     // 目标库位层
        return crnControl(command)?R.ok():R.error();
        // 系统运行状态判断
//        if (SystemProperties.WCS_RUNNING_STATUS.get()) {
//            return R.error("wcs系统状态为开启");
//        }
        boolean result = crnOperaUtils.crnSiteMove(param);
        return result ? R.ok() : R.error();
    }
    @ManagerAuth(memo = "回原点")
    @PostMapping("/crn/operator/bacOrigin")
    public R crnBacOrigin(CrnOperatorParam param){
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
        command.setAckFinish((short) 0);  // 任务完成确认位
        command.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式
        command.setSourcePosX((short) 0);     // 源库位排
        command.setSourcePosY((short) 0);     // 源库位列
        command.setSourcePosZ((short) 0);     // 源库位层
        command.setDestinationPosX((short) 0);     // 目标库位排
        command.setDestinationPosY((short) 0);     // 目标库位列
        command.setDestinationPosZ((short) 0);     // 目标库位层
        return crnControl(command)?R.ok():R.error();
        // 系统运行状态判断
//        if (SystemProperties.WCS_RUNNING_STATUS.get()) {
//            return R.error("wcs系统状态为开启");
//        }
        boolean result = crnOperaUtils.crnBacOrigin(param);
        return result ? R.ok() : R.error();
    }
    @ManagerAuth(memo = "反原点")
    @PostMapping("/crn/operator/reverseOrigin")
    public R reverseOrigin(CrnOperatorParam param){
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
        command.setAckFinish((short) 0);  // 任务完成确认位
        command.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式
        command.setSourcePosX((short) 0);     // 源库位排
        command.setSourcePosY((short) 0);     // 源库位列
        command.setSourcePosZ((short) 0);     // 源库位层
        command.setDestinationPosX((short) 0);     // 目标库位排
        command.setDestinationPosY((short) 22);     // 目标库位列
        command.setDestinationPosZ((short) 1);     // 目标库位层
        return crnControl(command)?R.ok():R.error();
        // 系统运行状态判断
//        if (SystemProperties.WCS_RUNNING_STATUS.get()) {
//            return R.error("wcs系统状态为开启");
//        }
        boolean result = crnOperaUtils.reverseOrigin(param);
        return result ? R.ok() : R.error();
    }
//    @ManagerAuth(memo = "坐标移动")
@@ -503,18 +464,12 @@
    @ManagerAuth(memo = "任务完成")
    @PostMapping("/crn/operator/taskComplete")
    public R crnTaskComplete(CrnOperatorParam param){
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
        command.setAckFinish((short) 1);  // 任务完成确认位
        command.setTaskMode(CrnTaskModeType.NONE); // 任务模式
        command.setSourcePosX((short) 0);     // 源库位排
        command.setSourcePosY((short) 0);     // 源库位列
        command.setSourcePosZ((short) 0);     // 源库位层
        command.setDestinationPosX((short) 0);     // 目标库位排
        command.setDestinationPosY((short) 0);     // 目标库位列
        command.setDestinationPosZ((short) 0);     // 目标库位层
        return crnControl(command)?R.ok():R.error();
        // 系统运行状态判断
//        if (SystemProperties.WCS_RUNNING_STATUS.get()) {
//            return R.error("wcs系统状态为开启");
//        }
        boolean result = crnOperaUtils.crnTaskComplete(param.getCrnNo());
        return result ? R.ok() : R.error();
    }
//    @ManagerAuth(memo = "暂停")
@@ -532,26 +487,25 @@
    @ManagerAuth(memo = "清除命令")
    @PostMapping("/crn/operator/clearCommand")
    public R crnClearCommand(CrnOperatorParam param){
        // 系统运行状态判断
//        if (SystemProperties.WCS_RUNNING_STATUS.get()) {
//            return R.error("wcs系统状态为开启");
//        }
        if (param.getCrnNo() == null) {
            throw new CoolException("请选择堆垛机");
        }
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
        command.setAckFinish((short) 0);  // 任务完成确认位
        command.setTaskMode(CrnTaskModeType.NONE); // 任务模式
        command.setSourcePosX((short) 0);     // 源库位排
        command.setSourcePosY((short) 0);     // 源库位列
        command.setSourcePosZ((short) 0);     // 源库位层
        command.setDestinationPosX((short) 0);     // 目标库位排
        command.setDestinationPosY((short) 0);     // 目标库位列
        command.setDestinationPosZ((short) 0);     // 目标库位层
        return crnControl(command)?R.ok():R.error();
        boolean result = crnOperaUtils.crnClearCommand(param);
        return result ? R.ok() : R.error();
    }
    @ManagerAuth(memo = "手动复位")
    @PostMapping("/crn/operator/handleReset")
    public R handleReset(CrnOperatorParam param) throws Exception {
        // 系统运行状态判断
//        if (SystemProperties.WCS_RUNNING_STATUS.get()) {
//            return R.error("wcs系统状态为开启");
//        }
        if (param.getCrnNo() == null) {
            throw new CoolException("请选择堆垛机");
        }
@@ -574,7 +528,7 @@
                crnCommand.setCommand((short) 0);  // 任务完成确认位
                // 延时发送
                Thread.sleep(1000L);
                if (CommandUtils.offer(SlaveType.Crn, crn.getId(), new Task(2, crnCommand), false)) {
                if (CommandUtils.offer(SlaveType.Crn, crn.getId(), new Task(5, crnCommand), false)) {
                    return R.ok();
                } else {
                    throw new CoolException("命令下发失败");
@@ -590,6 +544,10 @@
    @ManagerAuth(memo = "切换联机模式")
    @PostMapping("/crn/operator/auto")
    public R crnAuto(CrnOperatorParam param){
        // 系统运行状态判断
//        if (SystemProperties.WCS_RUNNING_STATUS.get()) {
//            return R.error("wcs系统状态为开启");
//        }
        short[] array = new short[9];
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
@@ -601,6 +559,10 @@
    @ManagerAuth(memo = "切换半手动模式")
    @PostMapping("/crn/operator/semiAutomatic")
    public R crnsemiAutomatic(CrnOperatorParam param){
        // 系统运行状态判断
//        if (SystemProperties.WCS_RUNNING_STATUS.get()) {
//            return R.error("wcs系统状态为开启");
//        }
        short[] array = new short[9];
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
@@ -612,6 +574,10 @@
    @ManagerAuth(memo = "切换手动模式")
    @PostMapping("/crn/operator/hand")
    public R onlineWrk1(CrnOperatorParam param){
        // 系统运行状态判断
//        if (SystemProperties.WCS_RUNNING_STATUS.get()) {
//            return R.error("wcs系统状态为开启");
//        }
        short[] array = new short[9];
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
@@ -623,6 +589,10 @@
    @ManagerAuth(memo = "申请完成任务")
    @PostMapping("/crn/operator/onlineWrk1")
    public R onlineWrk2(CrnOperatorParam param){
        // 系统运行状态判断
//        if (SystemProperties.WCS_RUNNING_STATUS.get()) {
//            return R.error("wcs系统状态为开启");
//        }
        short[] array = new short[9];
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
@@ -634,6 +604,10 @@
    @ManagerAuth(memo = "申请取消任务")
    @PostMapping("/crn/operator/onlineWrk2")
    public R onlineWrk3(CrnOperatorParam param){
        // 系统运行状态判断
//        if (SystemProperties.WCS_RUNNING_STATUS.get()) {
//            return R.error("wcs系统状态为开启");
//        }
        short[] array = new short[9];
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
@@ -645,6 +619,10 @@
    @ManagerAuth(memo = "清除联机任务")
    @PostMapping("/crn/operator/onlineWrk3")
    public R onlineWrk4(CrnOperatorParam param){
        // 系统运行状态判断
//        if (SystemProperties.WCS_RUNNING_STATUS.get()) {
//            return R.error("wcs系统状态为开启");
//        }
        short[] array = new short[9];
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
@@ -656,6 +634,10 @@
    @ManagerAuth(memo = "恢复联机任务")
    @PostMapping("/crn/operator/onlineWrk4")
    public R crnHand(CrnOperatorParam param){
        // 系统运行状态判断
//        if (SystemProperties.WCS_RUNNING_STATUS.get()) {
//            return R.error("wcs系统状态为开启");
//        }
        short[] array = new short[9];
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
@@ -665,6 +647,22 @@
        return crnControl2(command)?R.ok():R.error();
    }
    @ManagerAuth(memo = "复位")
    @PostMapping("/crn/operator/reset")
    public R crnReset(CrnOperatorParam param){
        // 系统运行状态判断
//        if (SystemProperties.WCS_RUNNING_STATUS.get()) {
//            return R.error("wcs系统状态为开启");
//        }
        short[] array = new short[9];
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
        command.setReset((short)1);
        return crnControl2(command)?R.ok():R.error();
    }
    private boolean crnControl2(CrnCommand command){