#
lsh
2024-07-15 8c47919d892aaeb00cdef1b408c88a09113a6213
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -4483,6 +4483,84 @@
        }
    }
    /*
     * 堆垛机取货至工位任务
     * */
    public synchronized boolean crnExecuteTakeFullPair(Integer crnNo,WrkMastSplitTwin wrkMastSplitTwinOne,WrkMastSplitTwin wrkMastSplitTwinTwo, Integer crnStation){
        try{
            //  命令下发区 --------------------------------------------------------------------------
            // 1.堆垛机开始移动
            CrnCommandParam crnCommandParam = new CrnCommandParam();
            crnCommandParam.setCrnNo(crnNo); // 堆垛机编号
            crnCommandParam.setTaskNo(wrkMastSplitTwinOne.getWrkNo().shortValue()); // 工作号
            crnCommandParam.setAckFinish((short) 0);  // 任务完成确认位
            crnCommandParam.setTaskMode(CrnTaskModeType.SEPARATE_TAKE); // 任务模式:  单取货
            crnCommandParam.setSourcePosX(wrkMastSplitTwinOne.getStartRow().shortValue());     // 源库位排
            crnCommandParam.setSourcePosY(wrkMastSplitTwinOne.getStartBay().shortValue());     // 源库位列
            crnCommandParam.setSourcePosZ(wrkMastSplitTwinOne.getStartLev().shortValue());     // 源库位层
            crnCommandParam.setDestinationPosX((short)0);     // 目标库位排
            crnCommandParam.setDestinationPosY((short)0);     // 目标库位列
            crnCommandParam.setDestinationPosZ((short)0);     // 目标库位层
            crnCommandParam.setTaskNo2(wrkMastSplitTwinTwo.getWrkNo().shortValue()); // 工作号
            crnCommandParam.setAckFinish2((short) 0);  // 任务完成确认位
            crnCommandParam.setTaskMode2(CrnTaskModeType.SEPARATE_TAKE); // 任务模式:  单取货
            crnCommandParam.setSourcePosX2(wrkMastSplitTwinTwo.getStartRow().shortValue());     // 源库位排
            crnCommandParam.setSourcePosY2(wrkMastSplitTwinTwo.getStartBay().shortValue());     // 源库位列
            crnCommandParam.setSourcePosZ2(wrkMastSplitTwinTwo.getStartLev().shortValue());     // 源库位层
            crnCommandParam.setDestinationPosX2((short)0);     // 目标库位排
            crnCommandParam.setDestinationPosY2((short)0);     // 目标库位列
            crnCommandParam.setDestinationPosZ2((short)0);     // 目标库位层
            if (!MessageQueue.offer(SlaveType.Crn, crnCommandParam.getCrnNo(), new Task(9, crnCommandParam))) {
                log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", crnCommandParam.getCrnNo(), JSON.toJSONString(crnCommandParam));
                return false;
            } else {
                return true;
            }
        }catch (Exception e){
            return false;
        }
    }
    /*
     * 堆垛机放货货至出库站点任务
     * */
    public synchronized boolean crnExecutePutFullPair(Integer crnNo,WrkMastSplitTwin wrkMastSplitTwinOne,WrkMastSplitTwin wrkMastSplitTwinTwo, Integer crnStation){
        try{
            //  命令下发区 --------------------------------------------------------------------------
            // 1.堆垛机开始移动
            CrnCommandParam crnCommandParam = new CrnCommandParam();
            crnCommandParam.setCrnNo(crnNo); // 堆垛机编号
            crnCommandParam.setTaskNo(wrkMastSplitTwinOne.getWrkNo().shortValue()); // 工作号
            crnCommandParam.setAckFinish((short) 0);  // 任务完成确认位
            crnCommandParam.setTaskMode(CrnTaskModeType.SEPARATE_PUT); // 任务模式:  单放货
            crnCommandParam.setSourcePosX((short)0);     // 源库位排
            crnCommandParam.setSourcePosY((short)0);     // 源库位列
            crnCommandParam.setSourcePosZ((short)0);     // 源库位层
            crnCommandParam.setDestinationPosX(wrkMastSplitTwinOne.getEndRow().shortValue());     // 目标库位排
            crnCommandParam.setDestinationPosY(wrkMastSplitTwinOne.getEndBay().shortValue());     // 目标库位列
            crnCommandParam.setDestinationPosZ(wrkMastSplitTwinOne.getEndLev().shortValue());     // 目标库位层
            crnCommandParam.setTaskNo2(wrkMastSplitTwinTwo.getWrkNo().shortValue()); // 工作号
            crnCommandParam.setAckFinish2((short) 0);  // 任务完成确认位
            crnCommandParam.setTaskMode2(CrnTaskModeType.SEPARATE_PUT); // 任务模式:  单放货
            crnCommandParam.setSourcePosX2((short)0);     // 源库位排
            crnCommandParam.setSourcePosY2((short)0);     // 源库位列
            crnCommandParam.setSourcePosZ2((short)0);     // 源库位层
            crnCommandParam.setDestinationPosX2(wrkMastSplitTwinTwo.getEndRow().shortValue());     // 目标库位排
            crnCommandParam.setDestinationPosY2(wrkMastSplitTwinTwo.getEndBay().shortValue());     // 目标库位列
            crnCommandParam.setDestinationPosZ2(wrkMastSplitTwinTwo.getEndLev().shortValue());     // 目标库位层
            if (!MessageQueue.offer(SlaveType.Crn, crnCommandParam.getCrnNo(), new Task(9, crnCommandParam))) {
                log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", crnCommandParam.getCrnNo(), JSON.toJSONString(crnCommandParam));
                return false;
            } else {
                return true;
            }
        }catch (Exception e){
            return false;
        }
    }
    /**
     *  Jar任务创建  初始  //完成
     */
@@ -7460,6 +7538,9 @@
                                BasJarMast jarMastByWrkNo = new BasJarMast(basJar);
                                jarMastByWrkNo.setWrkNo(Integer.toUnsignedLong(wrkMastExecute.getWrkNo().intValue()));//工作号
                                jarMastByWrkNo.setJarEnterStaNo(basJar.getEnterRgvNo());
                                jarMastByWrkNo.setEnterStaNo(basJar.getEnterRgvNo());
                                jarMastByWrkNo.setOutStaNo(basJar.getOutRgvNo());
                                //B==>A
                                if (!jarWrkMastExecuteGenerateExecute(basJar,jarMastByWrkNo,basJar.getJarNo(),new int[]{basJar.getOutSteNo(),basJar.getOutRgvNo(),11,1})){
                                    log.error("JarWrkMastExecute任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(jarMastByWrkNo));
@@ -7512,6 +7593,9 @@
                                BasJarMast jarMastByWrkNo = new BasJarMast(basJar);
                                jarMastByWrkNo.setWrkNo(Integer.toUnsignedLong(wrkMastExecute.getWrkNo().intValue()));//工作号
                                jarMastByWrkNo.setJarEnterStaNo(basJar.getEnterRgvNo());
                                jarMastByWrkNo.setEnterStaNo(basJar.getEnterRgvNo());
                                jarMastByWrkNo.setOutStaNo(basJar.getOutRgvNo());
                                //C==>B
                                if (!jarWrkMastExecuteGenerateExecute(basJar,jarMastByWrkNo,basJar.getJarNo(),new int[]{basJar.getOutSteNo(),basJar.getOutRgvNo(),8,1})){
                                    log.error("JarWrkMastExecute任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(jarMastByWrkNo));
@@ -7579,6 +7663,8 @@
                    if (wrkMastExecuteService.selectMoveStart(steSlave.getId())!=0){
                        continue;
                    }
                } else {
                    continue;
                }
                try{
@@ -7590,6 +7676,9 @@
                        int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(7));//充电工作号
                        BasJarMast basJarMast = new BasJarMast(basJar);
                        basJarMast.setWrkNo(Integer.toUnsignedLong(workNo));//工作号
                        basJarMast.setJarEnterStaNo(basJar.getEnterRgvNo());
                        basJarMast.setEnterStaNo(basJar.getEnterRgvNo());
                        basJarMast.setOutStaNo(basJar.getOutRgvNo());
                        if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMast,basJar.getJarNo(),new int[]{basJar.getOutSteNo(),basJar.getOutRgvNo(),100,1})){
                            log.error("JarWrkMastExecute充电任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMast));
                        }
@@ -7632,6 +7721,9 @@
                        int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(7));//充电工作号
                        BasJarMast basJarMast = new BasJarMast(basJar);
                        basJarMast.setWrkNo(Integer.toUnsignedLong(workNo));//工作号
                        basJarMast.setJarEnterStaNo(basJar.getEnterRgvNo());
                        basJarMast.setEnterStaNo(basJar.getEnterRgvNo());
                        basJarMast.setOutStaNo(basJar.getOutRgvNo());
                        if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMast,basJar.getJarNo(),new int[]{basJar.getOutSteNo(),basJar.getOutRgvNo(),100,1})){
                            log.error("JarWrkMastExecute充电任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMast));
                        }
@@ -7661,27 +7753,41 @@
                if (steProtocol == null || steProtocol.getChargeStatus()!=1) {
                    continue;
                }
                WrkMastExecute wrkMastExecuteByCharge = wrkMastExecuteService.getWrkMastExecuteByCharge(steSlave.getId());
                if (!Cools.isEmpty(wrkMastExecuteByCharge)){
                    continue;
                }
                if (steProtocol.getCharge()>50.0F){
                    if (wrkMastExecuteService.selectNoStart(steSlave.getId())==0){
                if (steProtocol.getCharge()>95.0F || steProtocol.getFullCharge()){
                } else if (steProtocol.getCharge()>50.0F){
                    if (wrkMastExecuteService.selectNoStartCharge(steSlave.getId())==0){
                        if (wrkMastExecuteService.selectMoveStart(steSlave.getId())==0){
                            continue;
                        }
                    }
                } else if (steProtocol.getCharge()>95.0F || steProtocol.getFullCharge()){
                } else {
                    continue;
                }
                WrkMastExecute wrkMastExecuteByCharge = wrkMastExecuteService.getWrkMastExecuteByCharge(steSlave.getId());
                if (Cools.isEmpty(wrkMastExecuteByCharge)){
                    BasJar basJar = basJarMapper.selectById(steSlave.getId()==1? 1:3);
                    int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(7));//充电工作号
                    BasJarMast basJarMast = new BasJarMast(basJar);
                    basJarMast.setWrkNo(Integer.toUnsignedLong(workNo));//工作号
                    basJarMast.setJarEnterStaNo(basJar.getEnterRgvNo());
                    basJarMast.setEnterStaNo(basJar.getEnterRgvNo());
                    basJarMast.setOutStaNo(basJar.getOutRgvNo());
                    wrkMastExecuteByCharge = new WrkMastExecute(basJarMast);
                    wrkMastExecuteByCharge.setJarId(basJar.getJarNo());
                    wrkMastExecuteByCharge.setSteId(steSlave.getId());//穿梭板ID
                    wrkMastExecuteByCharge.setRgvId(basJar.getEnterRgvNo());//RGV ID  enter
                    wrkMastExecuteByCharge.setRgvEndId(basJar.getOutRgvNo());//RGV ID  out
                    wrkMastExecuteByCharge.setIoType(100);//任务类型 0: 未知  1: 开进料门  2: 关进料门  3: 开出料门  4: 关出料门  5: 入硫化罐  6: 入冷却槽  7: 穿梭车进冷却槽  8: 穿梭车离开冷却槽  9: 出冷却槽 10:A=>B 11:B=>A  100:小车充电任务
                    wrkMastExecuteByCharge.setType(1);//设备  0: 未知  1: 硫化罐  2: 冷却槽  3: 硫化罐==>冷却槽
                }
                try{
                    if (jarWrkMastExecuteGenerateSteStatusCharge(steSlave.getId(),1,SteStatusType.MOVING,true)){
                    if (jarWrkMastExecuteGenerateSteStatusCharge(steSlave.getId(),1,SteStatusType.CHARGE,true)){
                        //完成充电任务
                        //调车  == > 断开充电
                        if (!jarSteTake(wrkMastExecuteByCharge,SteLocaType.POINT20.id,SteLocaType.POINT20.id,SteTaskModeType.CLOSE_CHARGE,false,wrkMastExecuteByCharge.getJarId())){
                        if (!jarSteTake(wrkMastExecuteByCharge,SteLocaType.POINT20.id,SteLocaType.POINT20.id,SteTaskModeType.CLOSE_CHARGE,true,wrkMastExecuteByCharge.getJarId())){
                            log.error("穿梭板Ste命令下发失败,ste号={},任务数据={}",
                                    wrkMastExecuteByCharge.getSteId(), JSON.toJSONString(wrkMastExecuteByCharge));
                        }