cpT
2025-06-27 29247d82ea56dfbd42b494deaadde07679560571
#改造
2个文件已修改
362 ■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 359 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -742,7 +742,7 @@
                    }
                }
            } catch (Exception e){
                log.error("堆垛机5分钟无任务则回到源点失败");
            }
        }
    }
@@ -774,8 +774,12 @@
                }
            }
            // 库位移转
            this.locToLoc(crn, crnProtocol);
            try{
                // 库位移转
                this.locToLoc(crn, crnProtocol);
            } catch (Exception e) {
                log.error("库位移转失败");
            }
            // 只有当堆垛机空闲 并且 无任务时才继续执行
            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO
@@ -1253,80 +1257,81 @@
     */
    public void storeFinished() throws InterruptedException {
        for (CrnSlave crnSlave : slaveProperties.getCrn()) {
            // 获取堆垛机信息
            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId());
            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
            if (crnProtocol == null) {
                continue;
            }
            CrnSlave crn = new CrnSlave(crnSlave);
            if (!crnSlave.getId().equals(crnProtocol.getLaneNo())) {
                for (CrnSlave crnOther : slaveProperties.getCrn()) {
                    if (crnOther.getId().equals(crnProtocol.getLaneNo())) {
                        crn.updateCrnInStn(crnOther);
                    }
                }
            }
            //  状态:等待确认 并且  任务完成位 = 1
            if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
                //获取入库待确认工作档
                TaskWrk taskWrk = taskWrkMapper.selectCrnNoInWorking(crnProtocol.getLaneNo(), crnProtocol.getTaskNo().intValue());
                if (Cools.isEmpty(taskWrk) && crnProtocol.getTaskNo() != 999) {
                    log.error("堆垛机处于等待确认且任务完成状态,但未找到工作档。堆垛机号={},巷道号={},工作号={}", crn.getId(), crnProtocol.getLaneNo(), crnProtocol.getTaskNo());
            try{
                // 获取堆垛机信息
                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId());
                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
                if (crnProtocol == null) {
                    continue;
                }
//                Thread.sleep(300);
                //确认完成信号
                CrnOperatorParam crnOperatorParam = new CrnOperatorParam();
                crnOperatorParam.setCrnNo(crn.getId());
                Date now = new Date();
                crnController.crnTaskComplete(crnOperatorParam);
                if (!Cools.isEmpty(taskWrk)) {
                    if (taskWrk.getIoType() == 1 && taskWrk.getWrkSts() == 3) {
                        taskWrk.setWrkSts(4);//入库完成
                        taskWrk.setStatus(TaskStatusType.OVER.id);//完结
                        //更新库位状态
                        LocMast locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint());
                        locMast.setLocSts("F");//F.在库
                        locMast.setBarcode(taskWrk.getBarcode());//托盘码
                        locMast.setModiTime(now);
                        locMast.setModiUser(9999L);
                        locMastService.updateById(locMast);
                    } else if (taskWrk.getIoType() == 2 && taskWrk.getWrkSts() == 12) {
                        taskWrk.setWrkSts(13);//出库完成
                        taskWrk.setStatus(TaskStatusType.OVER.id);//完结
                        //更新库位状态
                        LocMast locMast = locMastService.selectByLocNo(taskWrk.getStartPoint());
                        locMast.setLocSts("O");//O.空库位
                        locMast.setBarcode("");//托盘码
                        locMast.setModiTime(now);
                        locMast.setModiUser(9999L);
                        locMastService.updateById(locMast);
                    } else if (taskWrk.getIoType() == 3 && taskWrk.getWrkSts() == 12) {
                        taskWrk.setWrkSts(4);//入库完成
                        taskWrk.setStatus(TaskStatusType.OVER.id);//完结
                        //更新库位状态
                        LocMast locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint());
                        locMast.setLocSts("F");//F.在库
                        locMast.setBarcode(taskWrk.getBarcode());//托盘码
                        locMast.setModiTime(now);
                        locMast.setModiUser(9999L);
                        locMastService.updateById(locMast);
                CrnSlave crn = new CrnSlave(crnSlave);
                        LocMast locMast1 = locMastService.selectByLocNo(taskWrk.getStartPoint());
                        locMast1.setLocSts("O");//O.空库位
                        locMast1.setBarcode("");//托盘码
                        locMast1.setModiTime(now);
                        locMast1.setModiUser(9999L);
                        locMastService.updateById(locMast1);
                if (!crnSlave.getId().equals(crnProtocol.getLaneNo())) {
                    for (CrnSlave crnOther : slaveProperties.getCrn()) {
                        if (crnOther.getId().equals(crnProtocol.getLaneNo())) {
                            crn.updateCrnInStn(crnOther);
                        }
                    }
                    taskWrk.setModiTime(now);
                    taskWrk.setCompleteTime(now);
                    taskWrkService.updateById(taskWrk);
                }
                //  状态:等待确认 并且  任务完成位 = 1
                if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
                    //获取入库待确认工作档
                    TaskWrk taskWrk = taskWrkMapper.selectCrnNoInWorking(crnProtocol.getLaneNo(), crnProtocol.getTaskNo().intValue());
                    if (Cools.isEmpty(taskWrk) && crnProtocol.getTaskNo() != 999) {
                        log.error("堆垛机处于等待确认且任务完成状态,但未找到工作档。堆垛机号={},巷道号={},工作号={}", crn.getId(), crnProtocol.getLaneNo(), crnProtocol.getTaskNo());
                        continue;
                    }
//                Thread.sleep(300);
                    //确认完成信号
                    CrnOperatorParam crnOperatorParam = new CrnOperatorParam();
                    crnOperatorParam.setCrnNo(crn.getId());
                    Date now = new Date();
                    crnController.crnTaskComplete(crnOperatorParam);
                    if (!Cools.isEmpty(taskWrk)) {
                        if (taskWrk.getIoType() == 1 && taskWrk.getWrkSts() == 3) {
                            taskWrk.setWrkSts(4);//入库完成
                            taskWrk.setStatus(TaskStatusType.OVER.id);//完结
                            //更新库位状态
                            LocMast locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint());
                            locMast.setLocSts("F");//F.在库
                            locMast.setBarcode(taskWrk.getBarcode());//托盘码
                            locMast.setModiTime(now);
                            locMast.setModiUser(9999L);
                            locMastService.updateById(locMast);
                        } else if (taskWrk.getIoType() == 2 && taskWrk.getWrkSts() == 12) {
                            taskWrk.setWrkSts(13);//出库完成
                            taskWrk.setStatus(TaskStatusType.OVER.id);//完结
                            //更新库位状态
                            LocMast locMast = locMastService.selectByLocNo(taskWrk.getStartPoint());
                            locMast.setLocSts("O");//O.空库位
                            locMast.setBarcode("");//托盘码
                            locMast.setModiTime(now);
                            locMast.setModiUser(9999L);
                            locMastService.updateById(locMast);
                        } else if (taskWrk.getIoType() == 3 && taskWrk.getWrkSts() == 12) {
                            taskWrk.setWrkSts(4);//入库完成
                            taskWrk.setStatus(TaskStatusType.OVER.id);//完结
                            //更新库位状态
                            LocMast locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint());
                            locMast.setLocSts("F");//F.在库
                            locMast.setBarcode(taskWrk.getBarcode());//托盘码
                            locMast.setModiTime(now);
                            locMast.setModiUser(9999L);
                            locMastService.updateById(locMast);
                            LocMast locMast1 = locMastService.selectByLocNo(taskWrk.getStartPoint());
                            locMast1.setLocSts("O");//O.空库位
                            locMast1.setBarcode("");//托盘码
                            locMast1.setModiTime(now);
                            locMast1.setModiUser(9999L);
                            locMastService.updateById(locMast1);
                        }
                        taskWrk.setModiTime(now);
                        taskWrk.setCompleteTime(now);
                        taskWrkService.updateById(taskWrk);
//                    try {
@@ -1366,8 +1371,11 @@
//                        log.error("wcs完结任务上报wms失败,报错信息:", e);
////                        throw new CoolException("wcs派发入库任务上报wms失败");
//                    }
                }
                    }
                }
            } catch (Exception e){
                log.error("堆垛机执行对工作档的完成操作失败 ===>> [id:{}] [error:{}]", crnSlave.getId(), e.getMessage());
            }
        }
    }
@@ -1378,114 +1386,117 @@
    public void recCrnErr() {
        Date now = new Date();
        for (CrnSlave crn : slaveProperties.getCrn()) {
            // 获取堆垛机信息
            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
            if (crnProtocol == null) {
                continue;
            }
            if (crnProtocol.getModeType() != CrnModeType.STOP) {
                // 有任务
                if (crnProtocol.getTaskNo() != 0) {
                    BasErrLog latest = basErrLogService.findLatestByTaskNo(crn.getId(), crnProtocol.getTaskNo().intValue());
                    // 有异常
                    if (latest == null) {
            try{
                // 获取堆垛机信息
                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
                if (crnProtocol == null) {
                    continue;
                }
                if (crnProtocol.getModeType() != CrnModeType.STOP) {
                    // 有任务
                    if (crnProtocol.getTaskNo() != 0) {
                        BasErrLog latest = basErrLogService.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,    // 异常情况
                                        now,    // 添加时间
                                        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) {
                            TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(crnProtocol.getTaskNo()));
                            if (taskWrk == null) {
                                continue;
                            // 记录新异常
                            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);
                                }
                            }
                            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,    // 异常情况
                                    now,    // 添加时间
                                    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());
                            // 无异常
                        } 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 e){
                log.error("堆垛机异常信息记录失败 ===>> [id:{}] [error:{}]", crn.getId(), e.getMessage());
            }
        }
    }
src/main/java/com/zy/core/MainProcess.java
@@ -32,7 +32,7 @@
                try {
                    // 间隔
                    Thread.sleep(500);
                    Thread.sleep(400);
                    // 系统运行状态判断
                    if (!SystemProperties.WCS_RUNNING_STATUS.get()) {
@@ -52,6 +52,7 @@
                    mainService.crnIoExecute();
                    // 入库  ===>> 执行对工作档的完成操作
                    mainService.storeFinished();
                    Thread.sleep(100);
                    // 出库  ===>>  堆垛机出库站到出库站
                    mainService.crnStnToOutStn();
                    // 出库  ===>>  堆垛机5分钟无任务则回到源点