|  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private WrkMastService wrkMastService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private LocMastService locMastService; | 
|---|
|  |  |  | private WrkMastLogMapper wrkMastLogMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private StaDescService staDescService; | 
|---|
|  |  |  | private LocMastService locMastService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private BasDevpService basDevpService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | 
|---|
|  |  |  | private ShuttleDispatchUtils shuttleDispatchUtils; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private RedisUtil redisUtil; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private WrkMastLogMapper wrkMastLogMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private BasLiftOptService basLiftOptService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | 
|---|
|  |  |  | //        return true; | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //    /** | 
|---|
|  |  |  | //     * 四向穿梭车任务完成 | 
|---|
|  |  |  | //     */ | 
|---|
|  |  |  | //    public synchronized void shuttleFinished() { | 
|---|
|  |  |  | //        try { | 
|---|
|  |  |  | //            for (ShuttleSlave shuttle : slaveProperties.getShuttle()) { | 
|---|
|  |  |  | //                //获取四向穿梭车信息 | 
|---|
|  |  |  | //                NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId()); | 
|---|
|  |  |  | //                NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); | 
|---|
|  |  |  | //                if (shuttleProtocol == null) { | 
|---|
|  |  |  | //                    continue; | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //                //四向穿梭车状态为等待确认、小车处于空闲状态 | 
|---|
|  |  |  | //                if (shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id  //任务完成等待确认 | 
|---|
|  |  |  | //                        && shuttleProtocol.getTaskNo() != 0 | 
|---|
|  |  |  | //                        && shuttleProtocol.getFree() == ShuttleStatusType.IDLE.id | 
|---|
|  |  |  | //                ) { | 
|---|
|  |  |  | //                    //将任务档标记为完成 | 
|---|
|  |  |  | //                    WrkMast wrkMast = wrkMastMapper.selectByWorkNo(shuttleProtocol.getTaskNo()); | 
|---|
|  |  |  | //                    if (wrkMast != null) { | 
|---|
|  |  |  | //                        switch (wrkMast.getWrkSts().intValue()) { | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 四向穿梭车任务完成 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void shuttleFinished() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | for (ShuttleSlave shuttle : slaveProperties.getShuttle()) { | 
|---|
|  |  |  | //获取四向穿梭车信息 | 
|---|
|  |  |  | ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId()); | 
|---|
|  |  |  | ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); | 
|---|
|  |  |  | if (shuttleProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //四向穿梭车状态为等待确认、小车处于空闲状态 | 
|---|
|  |  |  | if (shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id  //任务完成等待确认 | 
|---|
|  |  |  | && shuttleProtocol.getTaskNo() != 0 | 
|---|
|  |  |  | ) { | 
|---|
|  |  |  | //将任务档标记为完成 | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastService.selectByWorkNo(shuttleProtocol.getTaskNo()); | 
|---|
|  |  |  | if (wrkMast != null) { | 
|---|
|  |  |  | switch (wrkMast.getWrkSts().intValue()) { | 
|---|
|  |  |  | //                            case 5://5.小车搬运中 ==> 9.入库完成 | 
|---|
|  |  |  | //                                wrkMast.setWrkSts(9L); | 
|---|
|  |  |  | //                                shuttleProtocol.setTaskNo(0); | 
|---|
|  |  |  | 
|---|
|  |  |  | //                                    shuttleProtocol.setToken(0); | 
|---|
|  |  |  | //                                } | 
|---|
|  |  |  | //                                break; | 
|---|
|  |  |  | //                            case 102://102.小车移动至站点 ==> 103.小车移动至站点完成 | 
|---|
|  |  |  | //                                wrkMast.setWrkSts(103L); | 
|---|
|  |  |  | //                                break; | 
|---|
|  |  |  | //                            case 104://104.小车迁入提升机中 ==> 105.小车迁入提升机完成 | 
|---|
|  |  |  | //                                wrkMast.setWrkSts(105L); | 
|---|
|  |  |  | //                                shuttleProtocol.setTaskNo(0);//清理工作号 | 
|---|
|  |  |  | //                                break; | 
|---|
|  |  |  | //                            case 108://108.小车迁出提升机中 ==> 109.小车迁出提升机完成 | 
|---|
|  |  |  | //                                wrkMast.setWrkSts(109L); | 
|---|
|  |  |  | //                                break; | 
|---|
|  |  |  | //                            case 110://110.小车移动中 ==> 111.小车移动完成 | 
|---|
|  |  |  | //                                wrkMast.setWrkSts(111L); | 
|---|
|  |  |  | //                                shuttleProtocol.setTaskNo(0); | 
|---|
|  |  |  | //                                if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { | 
|---|
|  |  |  | //                                    //释放小车令牌 | 
|---|
|  |  |  | //                                    shuttleProtocol.setToken(0); | 
|---|
|  |  |  | //                                } | 
|---|
|  |  |  | //                                break; | 
|---|
|  |  |  | //                            default: | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //                        if (wrkMastMapper.updateById(wrkMast) > 0) { | 
|---|
|  |  |  | //                            if (wrkMast.getWrkSts() == 111) { | 
|---|
|  |  |  | //                                // 保存工作主档历史档 | 
|---|
|  |  |  | //                                if (wrkMastLogMapper.save(wrkMast.getWrkNo()) <= 0) { | 
|---|
|  |  |  | //                                    log.info("保存工作历史档[workNo={0}]失败", wrkMast.getWrkNo()); | 
|---|
|  |  |  | //                                } | 
|---|
|  |  |  | //                                // 删除工作主档 | 
|---|
|  |  |  | //                                if (!wrkMastService.deleteById(wrkMast)) { | 
|---|
|  |  |  | //                                    log.info("删除工作主档[workNo={0}]失败", wrkMast.getWrkNo()); | 
|---|
|  |  |  | //                                } | 
|---|
|  |  |  | //                            } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //                            //设置四向穿梭车为空闲状态 | 
|---|
|  |  |  | //                            shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); | 
|---|
|  |  |  | //                            //源库位清零 | 
|---|
|  |  |  | //                            shuttleProtocol.setSourceLocNo(null); | 
|---|
|  |  |  | //                            //目标库位清零 | 
|---|
|  |  |  | //                            shuttleProtocol.setLocNo(null); | 
|---|
|  |  |  | //                            //任务指令清零 | 
|---|
|  |  |  | //                            shuttleProtocol.setAssignCommand(null); | 
|---|
|  |  |  | //                            News.info("四向穿梭车已确认且任务完成状态,复位。四向穿梭车号={}", shuttleProtocol.getShuttleNo()); | 
|---|
|  |  |  | //                        } else { | 
|---|
|  |  |  | //                            News.error("四向穿梭车已确认且任务完成状态,复位失败,但未找到工作档。四向穿梭车号={},工作号={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo()); | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  | //                    } else { | 
|---|
|  |  |  | //                        ShuttleAssignCommand assignCommand = shuttleProtocol.getAssignCommand(); | 
|---|
|  |  |  | //                        if (!assignCommand.getAuto()) { | 
|---|
|  |  |  | //                            //手动模式 | 
|---|
|  |  |  | //                            //工作号清零 | 
|---|
|  |  |  | //                            shuttleProtocol.setTaskNo(0); | 
|---|
|  |  |  | //                            //设置四向穿梭车为空闲状态 | 
|---|
|  |  |  | //                            shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); | 
|---|
|  |  |  | //                            //源库位清零 | 
|---|
|  |  |  | //                            shuttleProtocol.setSourceLocNo(null); | 
|---|
|  |  |  | //                            //目标库位清零 | 
|---|
|  |  |  | //                            shuttleProtocol.setLocNo(null); | 
|---|
|  |  |  | //                            //任务指令清零 | 
|---|
|  |  |  | //                            shuttleProtocol.setAssignCommand(null); | 
|---|
|  |  |  | //                            //清零令牌 | 
|---|
|  |  |  | //                            shuttleProtocol.setToken(0); | 
|---|
|  |  |  | //                            News.info("四向穿梭车已确认且任务完成状态,复位。四向穿梭车号={}", shuttleProtocol.getShuttleNo()); | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //        } catch (Exception e) { | 
|---|
|  |  |  | //            e.printStackTrace(); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  | case 302://302.小车移动至站点 ==> 303.小车移动至站点完成 | 
|---|
|  |  |  | wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 110://310.小车移动中 ==> 311.小车移动完成 | 
|---|
|  |  |  | wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts); | 
|---|
|  |  |  | shuttleThread.setTaskNo(0); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (wrkMastService.updateById(wrkMast)) { | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 111) { | 
|---|
|  |  |  | // 保存工作主档历史档 | 
|---|
|  |  |  | if (wrkMastLogMapper.save(wrkMast.getWrkNo()) <= 0) { | 
|---|
|  |  |  | log.info("保存工作历史档[workNo={0}]失败", wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 删除工作主档 | 
|---|
|  |  |  | if (!wrkMastService.deleteById(wrkMast)) { | 
|---|
|  |  |  | log.info("删除工作主档[workNo={0}]失败", wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //设置四向穿梭车为空闲状态 | 
|---|
|  |  |  | shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.IDLE); | 
|---|
|  |  |  | News.info("四向穿梭车已确认且任务完成状态,复位。四向穿梭车号={}", shuttleProtocol.getShuttleNo()); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | News.error("四向穿梭车已确认且任务完成状态,复位失败,但未找到工作档。四向穿梭车号={},工作号={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | Object object = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + shuttleProtocol.getTaskNo()); | 
|---|
|  |  |  | if(object != null){ | 
|---|
|  |  |  | ShuttleAssignCommand assignCommand = JSON.parseObject(object.toString(), ShuttleAssignCommand.class); | 
|---|
|  |  |  | if (!assignCommand.getAuto()) { | 
|---|
|  |  |  | //手动模式 | 
|---|
|  |  |  | //工作号清零 | 
|---|
|  |  |  | shuttleThread.setTaskNo(0); | 
|---|
|  |  |  | //设置四向穿梭车为空闲状态 | 
|---|
|  |  |  | shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.IDLE); | 
|---|
|  |  |  | News.info("四向穿梭车已确认且任务完成状态,复位。四向穿梭车号={}", shuttleProtocol.getShuttleNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //    /** | 
|---|
|  |  |  | //     * 提升机任务 | 
|---|
|  |  |  | 
|---|
|  |  |  | //        return true; | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //    /** | 
|---|
|  |  |  | //     * 提升机任务完成 | 
|---|
|  |  |  | //     */ | 
|---|
|  |  |  | //    public synchronized void liftFinished() { | 
|---|
|  |  |  | //        try { | 
|---|
|  |  |  | //            for (LiftSlave liftSlave : slaveProperties.getLift()) { | 
|---|
|  |  |  | //                //获取提升机信息 | 
|---|
|  |  |  | //                LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId()); | 
|---|
|  |  |  | //                LiftProtocol liftProtocol = liftThread.getLiftProtocol(); | 
|---|
|  |  |  | //                if (liftProtocol == null) { | 
|---|
|  |  |  | //                    continue; | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //                //提升机为等待确认且空闲 | 
|---|
|  |  |  | //                if (liftProtocol.getProtocolStatus() == LiftProtocolStatusType.WAITING.id | 
|---|
|  |  |  | //                        && liftProtocol.getTaskNo() != 0 | 
|---|
|  |  |  | //                        && !liftProtocol.getBusy() | 
|---|
|  |  |  | //                ) { | 
|---|
|  |  |  | //                    int taskNo = liftProtocol.getTaskNo().intValue(); | 
|---|
|  |  |  | //                    if (taskNo >= 20000 && taskNo <= 30000) { | 
|---|
|  |  |  | //                        //提升机设备工作号,需要查询对应任务号 | 
|---|
|  |  |  | //                        BasLiftOpt basLiftOpt = basLiftOptService.selectByDeviceWrk(liftProtocol.getTaskNo().toString(), liftSlave.getId()); | 
|---|
|  |  |  | //                        if (basLiftOpt != null) { | 
|---|
|  |  |  | //                            taskNo = basLiftOpt.getWrkNo(); | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //                    //将任务档标记为完成 | 
|---|
|  |  |  | //                    WrkMast wrkMast = wrkMastMapper.selectByWorkNo324104(taskNo); | 
|---|
|  |  |  | //                    if (wrkMast != null) { | 
|---|
|  |  |  | //                        switch (wrkMast.getWrkSts().intValue()) { | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 货叉提升机任务完成 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void forkLiftFinished() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | for (ForkLiftSlave forkLiftSlave : slaveProperties.getForkLift()) { | 
|---|
|  |  |  | //获取提升机信息 | 
|---|
|  |  |  | ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, forkLiftSlave.getId()); | 
|---|
|  |  |  | ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); | 
|---|
|  |  |  | if (forkLiftProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //提升机为等待确认且空闲 | 
|---|
|  |  |  | if (forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.WAITING.id | 
|---|
|  |  |  | && forkLiftProtocol.getWrkNo() != 0 | 
|---|
|  |  |  | ) { | 
|---|
|  |  |  | //将任务档标记为完成 | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastService.selectByWorkNo(forkLiftProtocol.getWrkNo()); | 
|---|
|  |  |  | if (wrkMast != null) { | 
|---|
|  |  |  | switch (wrkMast.getWrkSts().intValue()) { | 
|---|
|  |  |  | //                            case 3://3.提升机搬运中 ==> 4.提升机搬运完成 | 
|---|
|  |  |  | //                                wrkMast.setWrkSts(4L); | 
|---|
|  |  |  | //                                wrkMast.setLiftNo(null);//释放提升机 | 
|---|
|  |  |  | 
|---|
|  |  |  | //                                        wrkMast.setModiTime(new Date()); | 
|---|
|  |  |  | //                                    } | 
|---|
|  |  |  | //                                } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //                                if (liftProtocol.getToken().equals(wrkMast.getWrkNo())) { | 
|---|
|  |  |  | //                                    //释放提升机令牌 | 
|---|
|  |  |  | //                                    liftProtocol.setToken(0); | 
|---|
|  |  |  | //                                } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //                                break; | 
|---|
|  |  |  | //                            case 106://106.提升机搬运中 ==> 107.提升机搬运完成 | 
|---|
|  |  |  | //                                wrkMast.setWrkSts(107L); | 
|---|
|  |  |  | //                                break; | 
|---|
|  |  |  | //                            default: | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //                        if (wrkMastMapper.updateById(wrkMast) > 0) { | 
|---|
|  |  |  | //                            //设置提升机为空闲状态 | 
|---|
|  |  |  | //                            liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); | 
|---|
|  |  |  | //                            //任务指令清零 | 
|---|
|  |  |  | //                            liftProtocol.setAssignCommand(null); | 
|---|
|  |  |  | //                            News.info("提升机已确认且任务完成状态。提升机号={}", liftProtocol.getLiftNo()); | 
|---|
|  |  |  | //                        } else { | 
|---|
|  |  |  | //                            News.error("提升机已确认且任务完成状态,复位失败,但未找到工作档。提升机号={},工作号={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo()); | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  | //                    } else { | 
|---|
|  |  |  | //                        LiftAssignCommand assignCommand = liftProtocol.getAssignCommand(); | 
|---|
|  |  |  | //                        if (assignCommand != null) { | 
|---|
|  |  |  | //                            if (!assignCommand.getAuto()) { | 
|---|
|  |  |  | //                                //手动操作 | 
|---|
|  |  |  | //                                //设置提升机为空闲状态 | 
|---|
|  |  |  | //                                liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); | 
|---|
|  |  |  | //                                //任务指令清零 | 
|---|
|  |  |  | //                                liftProtocol.setAssignCommand(null); | 
|---|
|  |  |  | //                                News.info("提升机已确认手动操作。提升机号={}", liftProtocol.getLiftNo()); | 
|---|
|  |  |  | //                            } | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //        } catch (Exception e) { | 
|---|
|  |  |  | //            e.printStackTrace(); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  | case 306://306.提升机搬运中 ==> 307.提升机搬运完成 | 
|---|
|  |  |  | wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts); | 
|---|
|  |  |  | //货叉提升机需要跳过迁出提升机流程 | 
|---|
|  |  |  | wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | wrkMast.setModiTime(new Date()); | 
|---|
|  |  |  | if (wrkMastService.updateById(wrkMast)) { | 
|---|
|  |  |  | forkLiftThread.reset(); | 
|---|
|  |  |  | News.info("提升机已确认且任务完成状态。提升机号={}", forkLiftProtocol.getLiftNo()); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | News.error("提升机已确认且任务完成状态,复位失败,但未找到工作档。提升机号={},工作号={}", forkLiftProtocol.getLiftNo(), forkLiftProtocol.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //    /** | 
|---|
|  |  |  | //     * 异常信息记录 | 
|---|