#
lsh
3 天以前 0d8fcb1505ba869290cce9099b42370e4333b708
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -530,13 +530,13 @@
                }
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isPakMk() && staProtocol.getWorkNo()!=0) {//&& staProtocol.isInEnable()
                    if (staProtocol.isEmptyMk()){
                        log.error("站点号"+staProtocol.getSiteId()+"空板信号异常!");
                        continue;
                    }
                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo());
                    if (wrkMast == null || !wrkMast.getSheetNo().equals("3")) {
                        continue;
                    }
                    if (staProtocol.isEmptyMk()){
                        log.error("站点号"+staProtocol.getSiteId()+"空板信号异常!");
                        continue;
                    }
                    if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107)
@@ -877,10 +877,10 @@
//                        }
//                    }
//                } else
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isPakMk() && staProtocol.getWorkNo()>0) {
                if (staProtocol.isAutoing() && staProtocol.isLoading()  && staProtocol.isEmptyMk() && staProtocol.isPakMk() && staProtocol.getWorkNo()>0) {
//                    WrkMast wrkMast = wrkMastMapper.selectPakInStep4(staProtocol.getSiteId(),"3");
                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo());
                    if (wrkMast == null || wrkMast.getSheetNo().equals("3")) {
                    if (wrkMast == null || (wrkMast.getSheetNo().equals("3") && wrkMast.getIoType()==101)) {
                        WrkMast wrkMast1 = wrkMastMapper.selectPakInStep5(staProtocol.getSiteId(),"3");
                        if (Cools.isEmpty(wrkMast1) && staProtocol.isEmptyMk()){
                            WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(staProtocol.getSiteId() + 19999L);
@@ -1211,11 +1211,16 @@
                } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
                    // 此标记避免多次执行移库任务
                    if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) {
                        wrkMast.setUpdMk("Y");
                        wrkMast.setIoPri(14D);
                        wrkMastMapper.updateById(wrkMast);
                        // 生成工作档,将浅库位移转到新的库位中
                        moveLocForDeepLoc(slave, shallowLoc);
//                        wrkMast.setUpdMk("Y");
//                        wrkMast.setIoPri(14D);
//                        wrkMastMapper.updateById(wrkMast);
//                        // 生成工作档,将浅库位移转到新的库位中
//                        moveLocForDeepLoc(slave, shallowLoc);
                        if (moveLocForDeepLoc(slave, shallowLoc)){
                            wrkMast.setUpdMk("Y");
                            wrkMast.setIoPri(14D);
                            wrkMastMapper.updateById(wrkMast);
                        }
                        // 生成工作档、改变浅库位的源库/目标库 库位状态、下发堆垛机命令(立马执行)
//                        moveLocForDeepLocPakin(slave, shallowLoc, wrkMast);
                    }
@@ -1355,11 +1360,17 @@
                } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
                    // 此标记避免多次执行移库任务
                    if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) {
                        wrkMast.setUpdMk("Y");
                        wrkMast.setIoPri(14D);
                        wrkMastMapper.updateById(wrkMast);
                        // 生成工作档,将浅库位移转到新的库位中
                        moveLocForDeepLoc(slave, shallowLoc);
//                        wrkMast.setUpdMk("Y");
//                        wrkMast.setIoPri(14D);
//                        wrkMastMapper.updateById(wrkMast);
//                        // 生成工作档,将浅库位移转到新的库位中
//                        moveLocForDeepLoc(slave, shallowLoc);
                        if (moveLocForDeepLoc(slave, shallowLoc)){
                            wrkMast.setUpdMk("Y");
                            wrkMast.setIoPri(14D);
                            wrkMastMapper.updateById(wrkMast);
                        }
                        // 生成工作档、改变浅库位的源库/目标库 库位状态、下发堆垛机命令(立马执行)
//                        moveLocForDeepLocPakin(slave, shallowLoc, wrkMast);
                    }
@@ -1487,10 +1498,16 @@
//                            if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())
//                                || Cools.isEmpty(waitWrkMast)) {
                            if (Cools.isEmpty(waitWrkMast)) {
                                wrkMast.setUpdMk("Y");
                                wrkMastMapper.updateById(wrkMast);
                                // 生成工作档,将浅库位移转到新的库位中
                                moveLocForDeepLoc(slave, shallowLoc);
//                                wrkMast.setUpdMk("Y");
//                                wrkMastMapper.updateById(wrkMast);
//                                // 生成工作档,将浅库位移转到新的库位中
//                                moveLocForDeepLoc(slave, shallowLoc);
                                if (moveLocForDeepLoc(slave, shallowLoc)){
                                    wrkMast.setUpdMk("Y");
//                                    wrkMast.setIoPri(14D);
                                    wrkMastMapper.updateById(wrkMast);
                                }
                            }
                            log.error("{}任务出库失败,浅库位堵塞!浅库位号:{}", wrkMast.getWrkNo(), shallowLocNo);
                            continue;
@@ -1544,7 +1561,15 @@
     */
    public synchronized void locToCrnStn1(CrnSlave slave, CrnProtocol crnProtocol) {
        List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep12(slave.getId());
        Double pri = 0.0;
        for (WrkMast wrkMast : wrkMasts) {
            if (wrkMast.getIoType() != 110){
                if (wrkMast.getIoPri()>=pri){
                    pri = wrkMast.getIoPri();
                } else {
                    continue;
                }
            }
            if (wrkMast == null) {
                continue;
            }
@@ -1623,7 +1648,11 @@
                            log.error("{}库位异常,未检索到相应工作档!", shallowLocNo);
                        } else {
                            if (waitWrkMast.getWrkSts() == 11) {
                                waitWrkMast.setIoPri(15D);
                                if (waitWrkMast.getIoPri() + 100000D < 99999999) {
                                    waitWrkMast.setIoPri(waitWrkMast.getIoPri()+100000D);
                                } else {
                                    waitWrkMast.setIoPri(99999999D);
                                }
                                waitWrkMast.setModiTime(new Date());
                                if (wrkMastMapper.updateById(waitWrkMast) == 0) {
                                    log.error("调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo());
@@ -1641,10 +1670,16 @@
//                            if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())
//                                || Cools.isEmpty(waitWrkMast)) {
                        if (Cools.isEmpty(waitWrkMast)) {
                            wrkMast.setUpdMk("Y");
                            wrkMastMapper.updateById(wrkMast);
                            // 生成工作档,将浅库位移转到新的库位中
                            moveLocForDeepLoc(slave, shallowLoc);
//                            wrkMast.setUpdMk("Y");
//                            wrkMastMapper.updateById(wrkMast);
//                            // 生成工作档,将浅库位移转到新的库位中
//                            moveLocForDeepLoc(slave, shallowLoc);
                            if (moveLocForDeepLoc(slave, shallowLoc)){
                                wrkMast.setUpdMk("Y");
//                                wrkMast.setIoPri(14D);
                                wrkMastMapper.updateById(wrkMast);
                            }
                        }
                        log.error("{}任务出库失败,浅库位堵塞!浅库位号:{}", wrkMast.getWrkNo(), shallowLocNo);
                        continue;
@@ -1653,6 +1688,9 @@
                        if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
                            continue;
                        }
                    } else if (!shallowLoc.getLocSts().equals("O") ){
                        log.error("{}任务出库失败,浅库位堵塞!浅库位号:{},浅库位状态:{}", wrkMast.getWrkNo(), shallowLocNo,shallowLoc.getLocSts());
                        continue;
                    }
                }
@@ -2444,9 +2482,10 @@
                        continue;
                    }
                    Integer count1 = wrkDetlService.count1();
                    Integer count11 = wrkDetlService.count11();
                    Integer count2 = wrkDetlService.count2(wrkDetls.get(0).getOrderNo());
                    Integer count3 = wrkDetlService.count3();
                    wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl,count1,count2,count3)));
                    wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl,count1+count11,count2,count3)));
                }
                commands.add(ledCommand);
            }
@@ -2622,7 +2661,7 @@
     * 因双深库位阻塞,对浅库位进行移转(立即执行版)
     * tip:同步
     */
    private synchronized void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc) {
    private synchronized boolean moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc) {
        try {
            List<Integer> rows = locMastService.queryDistinctRow(crn.getId());
            LocMast loc = null;
@@ -2666,6 +2705,7 @@
            if (null == loc) {
                log.error("双深库位 --- 浅库位阻塞异常! 待移转浅库位:" + shallowLoc.getLocNo());
                return false;
//                throw new CoolException("双深库位 --- 浅库位阻塞异常! 待移转浅库位:" + shallowLoc.getLocNo());
            } else {
                // 获取工作号
@@ -2690,7 +2730,9 @@
                wrkMast.setModiTime(new Date());
                int res = wrkMastMapper.insert(wrkMast);
                if (res == 0) {
                    throw new CoolException("保存工作档失败");
                    log.error("双深库位 --- 浅库位阻塞异常! ====>保存工作档失败");
                    return true;
//                    throw new CoolException("保存工作档失败");
                }
                // 工作档明细保存
                if (shallowLoc.getLocSts().equals("F")) {
@@ -2704,7 +2746,9 @@
                        wrkDetl.setAppeTime(new Date());
                        wrkDetl.setModiTime(new Date());
                        if (!wrkDetlService.insert(wrkDetl)) {
                            throw new CoolException("保存工作档明细失败");
                            log.error("双深库位 --- 浅库位阻塞异常! ====>保存工作档明细失败");
                            return true;
//                            throw new CoolException("保存工作档明细失败");
                        }
                    }
                }
@@ -2713,28 +2757,38 @@
                    shallowLoc.setLocSts("R"); // R.出库预约
                    shallowLoc.setModiTime(new Date());
                    if (!locMastService.updateById(shallowLoc)) {
                        throw new CoolException("更新源库位状态失败");
                        log.error("双深库位 --- 浅库位阻塞异常! ====>更新源库位状态失败");
                        return true;
//                        throw new CoolException("更新源库位状态失败");
                    }
                } else {
                    throw new CoolException("源库位出库失败");
                    log.error("双深库位 --- 浅库位阻塞异常! ====>源库位出库失败");
                    return true;
//                    throw new CoolException("源库位出库失败");
                }
                // 修改目标库位状态
                if (loc.getLocSts().equals("O")) {
                    loc.setLocSts("S"); // S.入库预约
                    loc.setModiTime(new Date());
                    if (!locMastService.updateById(loc)) {
                        throw new CoolException("更新目标库位状态失败");
                        log.error("双深库位 --- 浅库位阻塞异常! ====>更新目标库位状态失败");
                        return true;
//                        throw new CoolException("更新目标库位状态失败");
                    }
                } else {
                    throw new CoolException("移转失败");
                    log.error("双深库位 --- 浅库位阻塞异常! ====>移转失败");
                    return true;
//                    throw new CoolException("移转失败");
                }
            }
        } catch (Exception e) {
            log.error("双深库位阻塞,对浅库位进行移转失败", e);
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return true;
//            e.printStackTrace();
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }
        return true;
    }
//    /**
@@ -3106,9 +3160,9 @@
                if (Cools.isEmpty(basDevp) || basDevp.getReportSign()!=1){
                    continue;
                }
                if (basDevp.getWrkNo()!=0 && (basDevp.getWrkNo()<9900 || basDevp.getWrkNo()>9999)){
                    continue;
                }
//                if (basDevp.getWrkNo()!=0 && (basDevp.getWrkNo()<9900 || basDevp.getWrkNo()>9999)){
//                    continue;
//                }
                WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne202(staNo);
                if (Cools.isEmpty(wrkMast)){
                    continue;
@@ -3127,35 +3181,35 @@
//                if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) {
//                    continue;
//                }
                if (staProtocol.isEmptyMk()){
                    log.info("{}站点无物,异常!",staNo);
                    continue;
                }
                if (!staProtocol.isLoading()){
                    log.info("{}站点无物,异常!",staNo);
                    continue;
                }
                // 判断是否满足入库条件
                if (staProtocol.isAutoing()
                        && staProtocol.isLoading()
                        && staProtocol.isInEnable()
                        && (staProtocol.getWorkNo() == 0 || (staProtocol.getWorkNo()>9899 && staProtocol.getWorkNo()<10000))
                ) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) {
                if (staProtocol.isAutoing() && staProtocol.getWorkNo() == 0) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) {
//                        && staProtocol.isInEnable()
                    //任务完成
                    boolean result1 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(3, staProtocol));
                    Thread.sleep(100);
                    staProtocol.setWorkNo(wrkMast.getWrkNo());
                    staProtocol.setStaNo(144);
                    devpThread.setPakMk(staProtocol.getSiteId(), false);
                    boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol));
//                    boolean result1 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(3, staProtocol));
//                    Thread.sleep(100);
                    StaProtocol staProtocolnew = new StaProtocol();
                    staProtocolnew.setSiteId(staProtocol.getSiteId());
                    staProtocolnew.setWorkNo(wrkMast.getWrkNo());
                    staProtocolnew.setStaNo(144);
                    devpThread.setPakMk(staProtocolnew.getSiteId(), false);
                    boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocolnew));
                    if (!result) {
                        throw new CoolException("更新plc站点信息失败==>驱动码垛位托盘前进失败!");
                    }
                    wrkMast.setWrkSts(52L);
                    wrkMastMapper.updateById(wrkMast);
                    Thread.sleep(100);
//                    Thread.sleep(100);
                    //任务完成
                    boolean result2 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(4, staProtocol));
//                    boolean result2 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(4, staProtocol));
                }
            }
@@ -3362,7 +3416,7 @@
            for (int staNo : staNos){
                BasDevp basDevp = basDevpService.selectById(staNo);
                BasDevp basDevp135 = basDevpService.selectById(135);
                if (basDevp.getWrkNo()==0 || (basDevp.getWrkNo()<10000 && basDevp.getWrkNo()>9899) ){
                if (basDevp.getWrkNo()==0){
                    continue;
                }
                if (basDevp135.getReportSign()!=0){
@@ -3388,8 +3442,8 @@
                } else {
                    staProtocol135 = staProtocol135.clone();
                }
                if (staProtocol135.getWorkNo()<9900 || staProtocol135.getWorkNo()>9999 || staProtocol135.getWorkNo()==0
                        || !staProtocol135.isLoading() || !staProtocol135.isAutoing()){
                if ( staProtocol135.getWorkNo()!=0
                        || !staProtocol135.isLoading() || !staProtocol135.isAutoing() || !staProtocol135.isEmptyMk()){
                    continue;
                }
                StaProtocol staProtocol = devpThread.getStation().get(staNo);
@@ -3435,21 +3489,25 @@
//                    }
                    //任务完成
                    boolean result1 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(3, staProtocol135));
                    try{
                        Thread.sleep(100);
                    }catch (Exception e){ }
//                    boolean result1 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(3, staProtocol135));
//                    try{
//                        Thread.sleep(100);
//                    }catch (Exception e){ }
                    basDevp135.setReportSign(2);
                    basDevpService.updateById(basDevp135);
                    int workNo = commonService.getWorkNo(5);
                    staProtocol135.setWorkNo(workNo);
                    staProtocol135.setStaNo(144);
                    devpThread.setPakMk(staProtocol135.getSiteId(), false);
                    boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol135));
                    StaProtocol staProtocolnew = new StaProtocol();
                    staProtocolnew.setSiteId(staProtocol135.getSiteId());
                    staProtocolnew.setWorkNo(workNo);
                    staProtocolnew.setStaNo(144);
                    devpThread.setPakMk(staProtocolnew.getSiteId(), false);
                    boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocolnew));
                    if (!result) {
                        throw new CoolException("更新plc站点信息失败==>驱动码垛位托盘前进失败!");
                    }
                    boolean result2 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(4, staProtocol135));
//                    boolean result2 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(4, staProtocol135));
                }
            }