zjj
2024-06-19 c8339858cc25bc142d6b59e9ed08afc1b48b4f2d
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -702,7 +702,7 @@
                    if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue())
                            && crnProtocol.statusType == CrnStatusType.WAITING
                            && crnProtocol.forkPosType == CrnForkPosType.HOME) {
                        News.error("堆垛机出库完成 - 开始执行");
                        log.info("堆垛机出库完成 - 开始执行");
                        // 命令下发区 --------------------------------------------------------------------------
@@ -710,7 +710,10 @@
                        staProtocol.setWorkNo(wrkMast.getWrkNo());
                        staProtocol.setStaNo(RouteUtils.CrnStaEnd(wrkMast.getStaNo(),wrkMast.getSourceStaNo()));
                        if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
                            log.info(staProtocol.getWorkNo()+","+staProtocol.getStaNo()+"输送线出库命令下发失败");
                            continue;
                        }else {
                            log.info(staProtocol.getWorkNo()+","+staProtocol.getStaNo()+"输送线出库命令下发成功");
                        }
                        // 更新工作档状态为14失败
@@ -718,7 +721,7 @@
                        wrkMast.setCrnEndTime(new Date());
                        if (wrkMastMapper.updateById(wrkMast) != 0) {
                            // 复位堆垛机
                            News.error("出库任务完成下发堆垛机复位", wrkMast.getWrkNo());
                            log.error("出库任务完成下发堆垛机复位,{}", wrkMast.getWrkNo());
                            crnThread.setResetFlag(true);
                        } else {
                            News.error(""+mark+" - 1"+" - 更新工作档的工作状态为14失败!!! [工作号:{}]", wrkMast.getWrkNo());
@@ -1365,11 +1368,8 @@
            }
            //  状态:等待确认 并且  任务完成位 = 1
            if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
                News.warnNoLog(""+mark+" - 0"+" - 开始执行对工作档的完成操作");
                if (crnProtocol.getTaskNo() == 9999) {
                    // 堆垛机复位
                    crnThread.setResetFlag(true);
                } else {
                News.warnNoLog(""+mark+" - 0"+" - 开始执行对工作档的完成操作,任务号:"+crnProtocol.getTaskNo());
                    // 获取入库待确认工作档
                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
                    if (wrkMast == null) {
@@ -1388,12 +1388,13 @@
                    // 修改成功后复位堆垛机
                    if (wrkMastMapper.updateById(wrkMast) > 0) {
                        // 堆垛机复位
                        log.error(wrkMast.getWrkNo()+"任务修改状态4成功,复位堆垛机={}",crnThread.getCrnProtocol().getCrnNo());
                        News.warnNoLog(""+mark+" - 2"+" - 修改成功后复位堆垛机 : 堆垛机号={}",crnThread.getCrnProtocol().getCrnNo());
                        crnThread.setResetFlag(true);
                    }
                }
            }
        }
//        News.infoNoLog(""+mark+" - 0"+" - 对工作档的完成操作执行完成");
    }
@@ -1766,13 +1767,13 @@
                // 获取叉车站点
                StaProtocol staProtocol = devpThread.getStation().get(staNo);
                if (staProtocol == null) { continue; }
                if (staProtocol.getWorkNo() != 0) {
                if (staProtocol.getWorkNo() != 0 || staProtocol.isErr()) {
                    reset = false;
                    break;
                }
            }
            // 获取led线程
            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getDevpPlcId());
            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
            // led显示默认内容
            if (reset) {
                if (ledThread == null) {
@@ -2331,31 +2332,39 @@
     * 小车地图更新  更新锁
     * */
    public synchronized boolean rgvMapUpdate(BasRgvMap basRgvMapCurrent,Integer staStart,Integer staEnd,String sign){
        log.info("小车地图更新![标记:{}];[BasRgvMap:{}];[staStart:{}];[staEnd:{}];",sign,JSON.toJSONString(basRgvMapCurrent),staStart,staEnd);
//        List<Integer> integers = RouteUtils.RouteMapCurrentFar(basRgvMapCurrent.getNowRoute(),staStart,staEnd, basRgvMapCurrent.getLockStartRoute());
        //更新当前小车锁
        try{
            Integer farCurrentStaNo = RouteUtils.RouteIndexFarMas(basRgvMapCurrent.getNowRoute(), staStart, staEnd, basRgvMapCurrent.getLockStartRoute());//获取最远站点
            log.info("小车地图更新!获取最远站点;[farCurrentStaNo:{}]",farCurrentStaNo);
            Integer fallMerge = RouteUtils.RouteIndexFarMas(basRgvMapCurrent.getRgvNo(), farCurrentStaNo); //获取合并干涉项
            log.info("小车地图更新!获取合并干涉项;[fallMerge:{}]",fallMerge);
            basRgvMapCurrent.setLockEndRoute(fallMerge);
            Integer i = basRgvMapMapper.updateById(basRgvMapCurrent);
//            if (i>0){
                log.error("{}:==>{}:{}号车更新结束锁,{}",sign,new Date(),basRgvMapCurrent.getRgvNo(),JSON.toJSONString(basRgvMapCurrent));
//                log.error("{}:==>{}:{}号车更新结束锁,{}",sign,new Date(),basRgvMapCurrent.getRgvNo(),JSON.toJSONString(basRgvMapCurrent));
//            }
            //更新另一台小车地图
            Integer rgvNoOther = basRgvMapCurrent.getRgvNoOther(basRgvMapCurrent.getRgvNo());
            log.info("小车地图更新!另一台小车号;[rgvNoOther:{}]",rgvNoOther);
            BasRgvMap basRgvMapOther = basRgvMapMapper.selectById(rgvNoOther);
            log.info("小车地图更新!另一台小车;[basRgvMapOther:{}]",JSON.toJSONString(basRgvMapOther));
            List<Integer> integers = RouteUtils.RouteMapCurrentFar(fallMerge, basRgvMapCurrent.getLockStartRoute());
            Integer lockEndRoute = RouteUtils.RouteMapOtherFarStnNo(integers, basRgvMapCurrent.getLockStartRoute());//另一台小车可活动最远位置
            log.info("小车地图更新!另一台小车可活动最远位置;[lockEndRoute:{}]",lockEndRoute);
            basRgvMapOther.setEndRoute(lockEndRoute);
            Integer i1 = basRgvMapMapper.updateById(basRgvMapOther);
//            if (i1>0){
                log.error("{}:==>{}:{}号车更新结束位置,{}",sign,new Date(),basRgvMapOther.getRgvNo(),JSON.toJSONString(basRgvMapOther));
//                log.error("{}:==>{}:{}号车更新结束位置,{}",sign,new Date(),basRgvMapOther.getRgvNo(),JSON.toJSONString(basRgvMapOther));
//            }
            return true;
        }catch (Exception e){
            log.error("小车地图更新出错!");
            log.error("小车地图更新出错!异常原因:"+e);
            return false;
        }
    }
@@ -2539,7 +2548,7 @@
    /**
     * 执行小车搬运任务
     */
    public synchronized void rgvRunWrkMastFullSta() {
    public synchronized boolean rgvRunWrkMastFullSta() {
        boolean wrkEnable = false;
        try{
            List<BasRgvMap> basRgvMaps = basRgvMapService.selectList(new EntityWrapper<>());
@@ -2573,42 +2582,52 @@
                    basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号
                    List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);
                    for (WrkMastSta wrkMastSta : wrkMastStaList){
                        if (wrkMastSta.getType()!=0 || wrkMastSta.getWrkType()!=3){//1:满版   3:取放
                        if (wrkMastSta.getType()!=0 || wrkMastSta.getWrkType()!=3 || wrkMastSta.getWrkSts()!=0){//1:满版   3:取放
                            continue;
                        }
                        //判断工作结束位置状态
                        BasDevp devNo = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", wrkMastSta.getStaEnd()));
                        if (!Cools.isEmpty(devNo)){
                            if (devNo.getAutoing().equals("Y") || !devNo.getWrkNo().equals(0) || !devNo.getLoading().equals("N") || !devNo.getInEnable().equals("Y")){
                                continue;
                            }
                        }
                        boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); //命令下发
                        wrkEnable = true;
                        if (sign){
                            wrkMastSta.setWrkSts(1);
                            try{
                                wrkMastStaMapper.updateById(wrkMastSta);
                                log.error("更新小车任务成功");
                            }catch (Exception e){
                                log.error("更新小车任务失败");
                            }
                            rgvThread.setPakMk(false);
                            boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2526");
                            if (signMap){
                                Thread.sleep(300);
                                wrkMastSta.setWrkSts(1);
                                try{
                                    wrkMastStaMapper.updateById(wrkMastSta);
                                    return;
                                }catch (Exception e){
                                    log.error("更新小车任务失败");
                                }
                                break;
                                return wrkEnable;
//                                break;
                            }else {
                                log.error("3864行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo());
                                Thread.sleep(500);
                            }
                        } else {
                            log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo());
                            Thread.sleep(500);
                        }
                        break;
                    }
                }
            }
            if (!wrkEnable){
                rgvRunWrkMastEmptyStaAvoidance();
            }
//            if (!wrkEnable){
//                rgvRunWrkMastEmptyStaAvoidance();
//            }
        }catch (Exception e){
            log.error("3875行执行小车搬运任务下发失败");
            log.error("3875行"+e);
        }
        return wrkEnable;
    }
    /**
     * 执行小车搬运任务