#
lty
2025-12-24 e7543347b5065d0047ec7706dbdb7281c3ae4463
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -114,6 +114,8 @@
    @Autowired
    private BasDevpOptService basDevpOptService;
    @Autowired
    private BasRgvOptService basRgvOptService;
    @Autowired
    private MatService matService;
    @Value("${wms.url}")
@@ -1171,11 +1173,14 @@
                    new EntityWrapper<BasCrnp>().eq("crn_no", crnProtocol.getCrnNo())
            );
            boolean result = true;
            if(crnProtocol.getCrnNo() != 5){
            if(crnProtocol.getCrnNo() != 3 ){
                return;
            }
            for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
                if(crnStn.getStaNo() == 4001){
                    continue;
                }
                StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo2());
                if (staProtocol == null) {
                    News.infoNoLog(" - 堆垛机入库站信息(staProtocol!=null继续执行):staProtocol="+staProtocol);
@@ -1203,10 +1208,6 @@
                    return;
                }
            }
            if(crnProtocol.getCrnNo() != 5){
                return;
            }
            // 已经存在吊车执行任务时,则过滤3,12
            if (wrkMastMapper.selectWorking(crnProtocol.getCrnNo()) != null) {
                return;
@@ -1669,9 +1670,9 @@
                }
                if (wrkMast.getIoType() == 107){
                    int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type", wrkMast.getIoType()).eq("wrk_sts", 14));
                    if (count >= inventoryNumber) {
                        continue;
                    }
//                    if (count >= inventoryNumber) {
//                        continue;
//                    }
                }
                // 工作档状态判断
                if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null) {
@@ -2433,7 +2434,7 @@
                        } else {
                            total = locDetl.getAnfme();
                        }
                        if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) {
                        if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1 ||wrkMast.getIoType() == 57 || wrkMast.getIoType() == 53) {
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getBoxType3(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),wrkDetl.getAnfme(),total));
                        }
                        if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
@@ -3721,7 +3722,29 @@
                rgvThread.setPakMk(false);  //小车双工位锁定
            }
        }
    }
    public synchronized void rgvIoExecuteScheduling() {
        for (RgvSlave rgv : slaveProperties.getRgv()) {
            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
            if (rgvProtocol == null) {
                continue;
            }
            BasRgv basRgv = basRgvService.selectById(rgv.getId());
            if (basRgv == null) {
                log.error("{}号RGV尚未在数据库进行维护!4", rgv.getId());
                continue;
            }
            if(rgvProtocol.getStatusType1() == RgvStatusType.WORKING){
                rgvThread.setPaking(true);
            }
            if(rgvProtocol.isLoaded1ing() && rgvProtocol.isLoaded2ing()){
                basRgv.setPakAll("1");
                basRgvService.updateById(basRgv);
            }
            if(rgvProtocol.getStatusType1() == RgvStatusType.IDLE &&
                    rgvProtocol.getModeType() == RgvModeType.AUTO && rgvThread.isPakMk()
                    && rgvThread.isPaking() && basRgv.getPakAll().equals("1")){
@@ -3989,7 +4012,7 @@
            sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); //命令下发
            if (sign){
                if(wrkMastSta.getMk() == 1){//若已执行
                if(wrkMastSta.getMk() != null && wrkMastSta.getMk() == 1){//若已执行
                    basRgv.setPakAll("1");
                    basRgvService.updateById(basRgv);
                }
@@ -4043,6 +4066,8 @@
            //遍历rgv入库取货站点
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId());
            StaProtocol staProtocol = devpThread.getStation().get(rgvStn.getStaNo2());
            StaProtocol staProtocol2 = devpThread.getStation().get(rgvStn.getStaNo());
            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, (int) rgvProtocol.getRgvNo());
            BasRgv basRgv = basRgvService.selectById(slave.getId());
            if (basRgv == null) {
@@ -4052,7 +4077,9 @@
            if(staProtocol.getWorkNo() == 0){
                continue;
            }
            StaProtocol staProtocol2 = null;
            if(staProtocol2.getWorkNo() != 0 ){
                continue;
            }
            WrkMastSta wrkMastSta3 = null;
//            if(rgvStn.getStaNo2()!= null ){
@@ -4601,6 +4628,21 @@
                System.out.println("小车下发命令时间:" +
                        new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(now));
            }
            EntityWrapper<BasRgvOpt> entityWrapper = new EntityWrapper<>();
            entityWrapper.eq("rgv_no", rgvId)
                    .orderBy("send_time");
            BasRgvOpt basRgvOpt = basRgvOptService.selectOne(entityWrapper);
            // 防止重复下发命令
            if (basRgvOpt != null) {
                // 获取最新记录的 mode 对应的任务类型
                RgvTaskStatusType latestTaskStatus = RgvTaskStatusType.valueOf(basRgvOpt.getMode());
                // 判断当前命令与最新记录是否相同
                if (latestTaskStatus == type && basRgvOpt.getPosSta().equals(wrkMastSta.getWorkSta())) {
                    // 如果最新记录的 mode 和 posSta 与当前命令相同,认为是重复命令
                    log.error("命令重复下发,当前命令与最新记录相同,任务不下发!");
                    return false;
                }
            }
            rgvCommand.setTaskNo(Math.toIntExact(wrkMastSta.getWrkNo())); // 工位工作号
            rgvCommand.setTaskStatus(type); // 工位任务模式:  取货
@@ -4796,11 +4838,9 @@
                        continue;
                    }
                    List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>().eq("arm_no",armSta.getArmNo()));
                    boolean sign = true;
                    BasArmMast basArmMastFinal = null;
                    Integer num = 0;
                    for (BasArm basArm : basArmList){
//                        if (basArm.getStaNo()==2){//NG
//                            continue;
//                        }
                        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", basArm.getStaNoSou()));
                        if (Cools.isEmpty(locMast) || !locMast.getLocSts().equals("D")){
                            continue;
@@ -4822,26 +4862,14 @@
                        basArmMast.setArmNo(basArm.getArmNo());
                        basArmMast.setStaNo(basArm.getStaNoSou());
                        basArmMast.setSortingLine(basArm.getSortingLineSou());
                        basArmMastService.insert(basArmMast);
                        sign = false;
                        if(basArmMastList2.size() > num){
                            basArmMastFinal = basArmMast;
                        }
                    }
                    if(basArmMastFinal != null){
                        basArmMastService.insert(basArmMastFinal);
                        break;
                    }
//                    if (sign){
//                        for (BasArm basArm : basArmList){
//                            if (basArm.getStaNo()==2){//NG
//                                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", basArm.getStaNoSou()));
//                                if (Cools.isEmpty(locMast) || !locMast.getLocSts().equals("D")){
//                                    continue;
//                                }
//                                BasArmMast basArmMast = new BasArmMast(armBarcodeTwoParam);
//                                basArmMast.setArmNo(basArm.getArmNo());
//                                basArmMast.setStaNo(basArm.getStaNoSou());
//                                basArmMast.setSortingLine(basArm.getSortingLineSou());
//                                basArmMastService.insert(basArmMast);
//                                break;
//                            }
//                        }
//                    }
                }
            }
        } catch (Exception e){
@@ -5129,11 +5157,11 @@
                    String barcode = locMastEnd.getBarcode();
                    if(!Cools.isEmpty(barcode)) {
                        if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "0".equals(barcode)) {
                            armTaskAssignmentCallApiLogSave(locMastEnd, "取货条码为空", basArm.getStaNoSou()+"码垛位置,===》托盘条码为空", false);
                            log.error( "取货条码为空", basArm.getStaNoSou());
                            continue;
                        }
                    } else {
                        armTaskAssignmentCallApiLogSave(locMastEnd, "取货条码为空", basArm.getStaNoSou()+"码垛位置,===》托盘条码为空", false);
                        log.error( "取货条码为空", basArm.getStaNoSou());
                        continue;
                    }
@@ -5397,6 +5425,7 @@
                            SearchLocParam param = new SearchLocParam();
                            param.setBarcode(staProtocol.getWorkNo().toString());
                            param.setIoType(1);
                            param.setOutArea(wrkMast.getCtnKind());
                            param.setSourceStaNo(outStaAgv.getStaNo());
                            param.setLocType1(locTypeDto.getLocType1());
                            String response = new HttpHandler.Builder()
@@ -5455,6 +5484,7 @@
                        SearchLocParam param = new SearchLocParam();
                        param.setBarcode(wrkMast.getBarcode());
                        param.setIoType(1);
                        param.setOutArea(wrkMast.getCtnKind());
                        param.setSourceStaNo(outStaAgv.getStaNo());
                        param.setLocType1(locTypeDto.getLocType1());
                        String response = new HttpHandler.Builder()