cpT
2025-06-30 3c9e4d85af794e00e94de44d934f806da40f5db2
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -104,6 +104,8 @@
    private Long avoidDistance;
    @Autowired
    private TaskWrkLogServiceImpl taskWrkLogService;
    @Autowired
    private BasPlcerrorLogServiceImpl basPlcerrorLogService;
    public void generateStoreWrkFile() {
        try {
@@ -225,7 +227,7 @@
                            TaskWrk taskWrk1 = taskWrkService.selectOne(new EntityWrapper<TaskWrk>().eq("barcode", barcode));
                            if (!Cools.isEmpty(taskWrk1)) {
                                log.info("托盘码:" + barcode + "任务档存在");
                                if (taskWrk1.getIoType() == 1 && taskWrk1.getStatus() < 3 && taskWrk1.getStartPoint().equals(staProtocol.getSiteId().toString())) {
                                if (taskWrk1.getIoType() == 1 && taskWrk1.getStatus() < 3 && (taskWrk1.getStartPoint().equals(staProtocol.getSiteId().toString()) || taskWrk1.getStartPoint().equals(String.valueOf((staProtocol.getSiteId()+1))))) {
                                    StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
                                            .eq("CRN_NO", taskWrk1.getCrnNo()).eq("TYPE_NO", 1).eq("STN_NO", staProtocol.getSiteId()));
@@ -1500,6 +1502,132 @@
        }
    }
    /**
     * 堆垛机异常信息记录
     */
    public void recDevErr() {
        Date now = new Date();
        for (DevpSlave devpSlave : slaveProperties.getDevp()) {
            try{
                // 获取堆垛机信息
                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpSlave.getId());
                Map<Integer, StaProtocol> station = devpThread.getStation();
                for (StaProtocol staProtocol : station.values()){
                    try{
                        if (staProtocol == null) {
                            continue;
                        }
//                        if (staProtocol.isAutoing() != CrnModeType.STOP) {
//                            // 有任务
//                            if (crnProtocol.getTaskNo() != 0) {
//                                BasErrLog latest = basPlcerrorLogService.findLatestByTaskNo(crn.getId(), crnProtocol.getTaskNo().intValue());
//                                // 有异常
//                                if (latest == null) {
//                                    if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
//                                        TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(crnProtocol.getTaskNo()));
//                                        if (taskWrk == null) {
//                                            continue;
//                                        }
//                                        BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm().intValue());
//                                        String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
//                                        BasErrLog basErrLog = new BasErrLog(
//                                                null,    // 编号
//                                                taskWrk.getWrkNo(),    // 工作号
//                                                now,    // 发生时间
//                                                null,    // 结束时间
//                                                taskWrk.getWrkSts().longValue(),    // 工作状态
//                                                taskWrk.getIoType(),    // 入出库类型
//                                                crn.getId(),    // 堆垛机
//                                                null,    // plc
//                                                taskWrk.getTargetPoint(),    // 目标库位
//                                                0,    // 目标站
//                                                0,    // 源站
//                                                taskWrk.getStartPoint(),    // 源库位
//                                                taskWrk.getBarcode(),    // 条码
//                                                (int) crnProtocol.getAlarm(),    // 异常码
//                                                errName,    // 异常
//                                                1,    // 异常情况
//                                                taskWrk.getCreateTime(),    // 任务时间(接收时间)
//                                                null,    // 添加人员
//                                                now,    // 修改时间
//                                                null,    // 修改人员
//                                                "任务中异常"    // 备注
//                                        );
//                                        if (!basErrLogService.insert(basErrLog)) {
//                                            log.error("堆垛机plc异常记录失败 ===>> [id:{}] [error:{}]", crn.getId(), errName);
//                                        }
//                                    }
//                                } else {
//                                    // 异常修复
//                                    if (crnProtocol.getAlarm() == null || crnProtocol.getAlarm() == 0) {
//                                        latest.setEndTime(now);
//                                        latest.setUpdateTime(now);
//                                        latest.setStatus(2);
//                                        if (!basErrLogService.updateById(latest)) {
//                                            log.error("堆垛机plc异常记录修复失败 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
//                                        }
//                                    }
//                                }
//                                // 无任务
//                            } else {
//                                BasErrLog latest = basErrLogService.findLatest(crn.getId());
//                                // 有异常
//                                if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
//                                    // 记录新异常
//                                    if (latest == null || (latest.getErrCode() != crnProtocol.getAlarm().intValue())) {
//                                        BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
//                                        String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
//                                        BasErrLog basErrLog = new BasErrLog(
//                                                null,    // 编号
//                                                null,    // 工作号
//                                                now,    // 发生时间
//                                                null,    // 结束时间
//                                                null,    // 工作状态
//                                                null,    // 入出库类型
//                                                crn.getId(),    // 堆垛机
//                                                null,    // plc
//                                                null,    // 目标库位
//                                                null,    // 目标站
//                                                null,    // 源站
//                                                null,    // 源库位
//                                                null,    // 条码
//                                                (int) crnProtocol.getAlarm(),    // 异常码
//                                                errName,    // 异常
//                                                1,    // 异常情况
//                                                now,    // 添加时间
//                                                null,    // 添加人员
//                                                now,    // 修改时间
//                                                null,    // 修改人员
//                                                "无任务异常"    // 备注
//                                        );
//                                        if (!basErrLogService.insert(basErrLog)) {
//                                            log.error("堆垛机plc异常记录失败 ===>> [id:{}] [error:{}]", crn.getId(), errName);
//                                        }
//                                    }
//                                    // 无异常
//                                } else {
//                                    // 异常修复
//                                    if (latest != null && latest.getStatus() == 1) {
//                                        latest.setEndTime(now);
//                                        latest.setUpdateTime(now);
//                                        latest.setStatus(2);
//                                        if (!basErrLogService.updateById(latest)) {
//                                            log.error("堆垛机plc异常记录修复失败 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
//                                        }
//                                    }
//                                }
//                            }
//                        }
                    } catch (Exception devErr){
                        log.error("输送线站点异常信息记录失败 ===>> [id:{}] [error:{}]", staProtocol.getStaNo(), devErr.getMessage());
                    }
                }
            } catch (Exception e){
                log.error("输送线异常信息记录失败 ===>> [id:{}] [error:{}]", devpSlave.getId(), e.getMessage());
            }
        }
    }
    private TaskWrk createTask(GetWmsDto dto, String barcode) {
        String wcsLocNo = dto.getLocNo();
        if (Cools.isEmpty(wcsLocNo)) {
@@ -1774,6 +1902,52 @@
        }
        return null;
    }
    public boolean deviceDetection(RgvSlave.RgvStn inSta,Integer rgvNo) {
        ArrayList<Integer> arrayList = new ArrayList<Integer>() {{
            add(1009);
            add(1011);
            add(1012);
            add(1014);
            add(1016);
        }};
        try{
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, inSta.getDevpPlcId());
            ArrayList<Integer> listW = new ArrayList<Integer>();
            ArrayList<Integer> listL = new ArrayList<Integer>();
            for (Integer staNo : arrayList){
                StaProtocol staProtocol = devpThread.getStation().get(staNo);
                if (staProtocol == null) {
                    RgvErrCache.updateRgvErr(rgvNo,staNo+"站点数据丢失");
                    return false;
                }
                // 判断是否满足取货条件
                if (staProtocol.getWorkNo() != 0) {
                    if (!listW.contains(staProtocol.getWorkNo())) {
                        listW.add(staProtocol.getWorkNo());
                    }
                }
                // 判断是否满足取货条件
                if (staProtocol.isLoading()) {
                    if (!listL.contains(staProtocol.getStaNo())) {
                        listL.add(staProtocol.getStaNo());
                    }
                }
            }
            if (listW.size()>=3){
                RgvErrCache.updateRgvErr(rgvNo,"等待1012拣选,防止堵塞");
                return false;
            }
            if (listL.size()>=3){
                RgvErrCache.updateRgvErr(rgvNo,"等待1012拣选,防止堵塞");
                return false;
            }
        } catch (Exception e){
            RgvErrCache.updateRgvErr(rgvNo,"1012检测异常:"+e.getMessage());
            return false;
        }
        return true;
    }
    public boolean rgvOtherStatusEnable(RgvSlave slave) {
        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
@@ -1836,6 +2010,7 @@
                            if (rgvOtherIDLEOther(rgvSlave)){
                                if (!rgvOtherIDLE(rgvSlave,staList.get(0))){
                                    System.out.println("空闲就近跳过==="+rgvSlave.getId()+"===");
                                    RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"空闲就近跳过");
                                    sign=true;
                                }
@@ -1916,6 +2091,8 @@
                            if (rgvOtherIDLEOther2(rgvSlave)){
                                if (!rgvOtherIDLE2(rgvSlave,staList.get(0))){
                                    System.out.println("运行就近跳过==="+rgvSlave.getId()+"===");
                                    RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"运行就近跳过");
                                    sign=true;
                                }
                            }
@@ -2078,6 +2255,8 @@
                            }
                        }
                        RgvErrCache.updateRgvErr(rgvSlave.getId(),"未查询到可执行任务");
                    } else {
                        //可用区域就近取货
                        //就近排序
@@ -2164,6 +2343,11 @@
                if (targetPointConvert == null) {
                    return false;
                }
                if (targetPointConvert == 1009){
                    if (!deviceDetection(rgvStn, rgvSlave.getId())){
                        return false;
                    }
                }
                BasDevpPosition basDevpPositionSou = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStn.getStaNo()));
                BasDevpPosition basDevpPositionEnd = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", targetPointConvert));
@@ -2200,6 +2384,8 @@
                }
            } catch (Exception e) {
                log.error("任务生成失败issued1===》异常信息:{}", e.getMessage());
                RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"站点任务生成失败issued1");
                return false;
            }
@@ -2217,6 +2403,7 @@
            }
        } catch (Exception e) {
            log.error("任务生成失败issued2===》异常信息:{}", e.getMessage());
            RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"站点任务生成失败issued2");
        }
        return true;
    }