dubin
2025-08-21 73cf8ac847af5a3c22e83f64e92692e31e4576d0
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -4,6 +4,7 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.exception.CoolException;
@@ -94,6 +95,8 @@
    private WrkMastService wrkMastService;
    @Autowired
    private BasRgvMapService basRgvMapService;
    @Autowired
    private BasCrnOptService crnOptService;
    @Value("${wms.url}")
    private String wmsUrl;
@@ -413,11 +416,11 @@
            // 遍历拣料入库口
            for (DevpSlave.Sta pickSta : devp.getPickSta()) {
                // 获取条码扫描仪信息
                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode());
                if (barcodeThread == null) {
                    continue;
                }
                String barcode = barcodeThread.getBarcode();
//                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode());
//                if (barcodeThread == null) {
//                    continue;
//                }
//                String barcode = barcodeThread.getBarcode();
                // 获取拣料入库站信息
                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
@@ -488,29 +491,27 @@
//                    }
//                    continue;
//                }
                if(staProtocol.getSiteId() < 400){
                    if (!Cools.isEmpty(barcode)) {
                        News.infoNoLog("" + mark + " - 1" + " - {}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode);
                        if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
                            continue;
                        }
                    }
                        /*else {
                        continue;
                    }*/
                    if (!Cools.isEmpty(barcode)) {
//                    News.info(""+mark+" - 1"+" - {}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode);
                        if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
                            continue;
                        }
                    }
                   /* else {
                        continue;
                    }*/
                }
//                if(staProtocol.getSiteId() < 400){
//                    if (!Cools.isEmpty(barcode)) {
//                        News.infoNoLog("" + mark + " - 1" + " - {}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode);
//                        if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
//                            continue;
//                        }
//                    } else {
//                        continue;
//                    }
//
//
//                    if (!Cools.isEmpty(barcode)) {
////                    News.info(""+mark+" - 1"+" - {}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode);
//                        if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
//                            continue;
//                        }
//                    } else {
//                        continue;
//                    }
//
//                }
                if (staProtocol == null) {
@@ -524,10 +525,11 @@
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) {
                    News.warnNoLog("" + mark + " - 0" + " - 开始执行");
                    WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
                    if(staProtocol.getSiteId() > 400){
                        wrkMast = wrkMastMapper.selectPickStep3(staProtocol.getWorkNo());
                    }
//                    WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue());
//                    if(staProtocol.getSiteId() > 400){
//                        wrkMast = wrkMastMapper.selectPickStep3(staProtocol.getWorkNo());
//                    }
//                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue());
                    if (wrkMast == null) {
                        // 无拣料数据
@@ -554,12 +556,12 @@
                            .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号
                    StaDesc staDesc = staDescService.selectOne(wrapper);
                    if (Cools.isEmpty(staDesc)) {
                        News.error("" + mark + " - 2" + " - 入库路径不存在!type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo());
                        staProtocol.setWorkNo(wrkNo++);
                        staProtocol.setStaNo((short) (pickSta.getStaNo().shortValue() - (short) 1));
                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                        log.error("输送线下发4:" + 9989 + "," + (pickSta.getStaNo().shortValue() - (short) 1));
//                        News.error("" + mark + " - 2" + " - 入库路径不存在!type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo());
//                        staProtocol.setWorkNo(wrkNo++);
//                        staProtocol.setStaNo((short) (pickSta.getStaNo().shortValue() - (short) 1));
//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
//                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
//                        log.error("输送线下发4:" + 9989 + "," + (pickSta.getStaNo().shortValue() - (short) 1));
                        //LED
                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed());
                        // led 异常显示
@@ -612,9 +614,9 @@
                    // 更新站点信息 且 下发plc命令
                    staProtocol.setWorkNo(wrkMast.getWrkNo());
                    if(staProtocol.getSiteId() < 400){
//                    if(staProtocol.getSiteId() < 400){
                        staProtocol.setStaNo(Short.valueOf(wrkMast.getStaNo().toString()));
                    }
//                    }
                    devpThread.setPakMk(staProtocol.getSiteId(), false);
                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                    log.error("输送线下发5:" + wrkMast.getWrkNo() + "," + wrkMast.getStaNo());
@@ -630,7 +632,7 @@
            }
        }
//        News.infoNoLog(""+mark+" - 0"+" - 拣料、并板、盘点再入库  ===》执行完成");
        News.infoNoLog(""+mark+" - 0"+" - 拣料、并板、盘点再入库  ===》执行完成");
    }
@@ -3194,4 +3196,89 @@
        }
    }
    public synchronized void crnMove() {
        for (CrnSlave crn : slaveProperties.getCrn()) {
            // 获取堆垛机信息
            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
            if (crnProtocol == null) {
                continue;
            }
            BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
            if (basCrnp == null) {
                log.error("{}号堆垛机尚未在数据库进行维护!", crn.getId());
                continue;
            }
            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) {
//                if ((crnProtocol.getCrnNo()==3 || crnProtocol.getCrnNo()==4) && crnProtocol.getBay()==0 && crnProtocol.getLevel() == 1) {
//                    continue;
//                }
//                if ((crnProtocol.getCrnNo()==1 || crnProtocol.getCrnNo()==2) && crnProtocol.getBay()==1 && crnProtocol.getLevel() == 1) {
//                    continue;
//                }
                if (crnProtocol.getCrnNo()==1 && crnProtocol.getBay()==1 && crnProtocol.getLevel() == 1) {
                    continue;
                }
                Page<BasCrnOpt> basCrnOptPage = crnOptService.selectPage(new Page<>(1, 1), new EntityWrapper<BasCrnOpt>().eq("crn_no", crn.getId()).orderBy("send_time", false));
                if (basCrnOptPage != null && basCrnOptPage.getRecords() != null && basCrnOptPage.getRecords().size() > 0) {
                    if (System.currentTimeMillis() - basCrnOptPage.getRecords().get(0).getSendTime().getTime() < 1000 * 60 * 3) {
                        continue;
                    }
                } else {
                    if (System.currentTimeMillis() - crnProtocol.getLastCommandTime() < 1000 * 60 * 2) {
                        continue;
                    }
                }
                List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
                        .eq("crn_no", crn.getId())
                        .notIn("wrk_sts", 5, 14, 15)
                );
                if (!wrkMasts.isEmpty()) {
                    continue;
                }
                CrnSlave.CrnStn crnStn = crn.getCrnInStn().get(0);
                News.info("堆垛机无任务自动回入库口待机==>>" + crnProtocol.getCrnNo() + "号堆垛机");
                // 命令下发区 --------------------------------------------------------------------------
                CrnCommand crnCommand = new CrnCommand();
//                if (crnProtocol.getCrnNo()==3 || crnProtocol.getCrnNo()==4){
//                    crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 堆垛机编号
//                    crnCommand.setTaskNo((short) 9999); // 工作号
//                    crnCommand.setAckFinish((short) 0);  // 任务完成确认位
//                    crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式:  堆垛机移动
//                    crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 源库位排
//                    crnCommand.setSourcePosY((short) 0);     // 源库位列
//                    crnCommand.setSourcePosZ((short) 1);     // 源库位层
//                    crnCommand.setDestinationPosX((short) 0);     // 目标库位排
//                    crnCommand.setDestinationPosY((short) 0);     // 目标库位列
//                    crnCommand.setDestinationPosZ((short) 0);     // 目标库位层
//                    crnCommand.setCommand((short) 1);
//                }else {
                    crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 堆垛机编号
                    crnCommand.setTaskNo((short) 9999); // 工作号
                    crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                    crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式:  堆垛机移动
                    crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 源库位排
                    crnCommand.setSourcePosY((short) 1);     // 源库位列
                    crnCommand.setSourcePosZ((short) 1);     // 源库位层
                    crnCommand.setDestinationPosX((short) 0);     // 目标库位排
                    crnCommand.setDestinationPosY((short) 0);     // 目标库位列
                    crnCommand.setDestinationPosZ((short) 0);     // 目标库位层
                    crnCommand.setCommand((short) 1);
//                }
                if (!MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, crnCommand))) {
                    News.error("堆垛机移动命令下发失败,堆垛机号={},任务数据={}", crnProtocol.getCrnNo(), JSON.toJSON(crnCommand));
                }
                crnThread.setBackHpFlag(true);
                try {
                    Thread.sleep(500);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}