#
1
2025-12-19 aa6c2d4ed63195e007b44007c29547f1d66c7b49
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}")
@@ -3722,9 +3724,14 @@
            }
            if(rgvProtocol.getStatusType1() == RgvStatusType.IDLE &&
                    rgvProtocol.getModeType() == RgvModeType.AUTO && rgvThread.isPakMk()
                    && rgvThread.isPaking() && basRgv.getPakAll().equals("1")){
            RgvThread rgvThread1 = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
            RgvProtocol rgvProtocol1 = rgvThread.getRgvProtocol();
            if (rgvProtocol1 == null) {
                continue;
            }
            if(rgvProtocol1.getStatusType1() == RgvStatusType.IDLE &&
                    rgvProtocol1.getModeType() == RgvModeType.AUTO && rgvThread1.isPakMk()
                    && rgvThread1.isPaking() && basRgv.getPakAll().equals("1")){
                if(basRgv.getPakOut().equals("1") && basRgv.getPakIn().equals("1")){
                    rgvPreSchedulingIn(rgv, rgvProtocol);//若暂无下发任务预调度提前到取货点
                    if (rgvProtocol.getLastIo().equals("I")) {
@@ -4601,6 +4608,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");  // 按 send_time 降序排列
            BasRgvOpt basRgvOpt = basRgvOptService.selectOne(entityWrapper);
            // 防止重复下发命令
            if (basRgvOpt != null) {
                // 获取最新记录的 mode 对应的任务类型
                RgvTaskStatusType latestTaskStatus = RgvTaskStatusType.valueOf(basRgvOpt.getMode());
                // 判断当前命令与最新记录是否相同
                if (latestTaskStatus != null && latestTaskStatus == type && basRgvOpt.getPosSta().equals(wrkMastSta.getWorkSta())) {
                    // 如果最新记录的 mode 和 posSta 与当前命令相同,认为是重复命令
                    log.error("命令重复下发,当前命令与最新记录相同,任务不下发!");
                    return false;
                }
            }
            rgvCommand.setTaskNo(Math.toIntExact(wrkMastSta.getWrkNo())); // 工位工作号
            rgvCommand.setTaskStatus(type); // 工位任务模式:  取货