| | |
| | | |
| | | //小车所在楼层 |
| | | int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo()); |
| | | // ShuttleChargeType shuttleCharge = null; |
| | | // |
| | | // //搜索小车所在楼层有没有充电桩 |
| | | // for (ShuttleChargeType chargeType : ShuttleChargeType.values()) { |
| | | // if (lev != Utils.getLev(chargeType.locNo)) { |
| | | // continue;//小车和充电桩不在同一层 |
| | | // } |
| | | // |
| | | // //小车和充电桩在同一层 |
| | | // if (wrkChargeService.selectWorkingOfCharge(chargeType.id) == null) { |
| | | // shuttleCharge = chargeType; |
| | | // break; |
| | | // } |
| | | // } |
| | | // |
| | | // if (shuttleCharge == null) { |
| | | // //同楼层没有找到充电桩,找可用充电桩 |
| | | // //小车同楼层没有充电桩,只要充电桩可用就生成充电任务 |
| | | // for (ShuttleChargeType chargeType : ShuttleChargeType.values()) { |
| | | // if (wrkChargeService.selectWorkingOfCharge(chargeType.id) == null) { |
| | | // //判断当前充电桩楼层是否有小车,如有小车,不分配该充电桩 |
| | | // int chargeLev = Utils.getLev(chargeType.locNo);//充电桩楼层 |
| | | // boolean checkLevHasShuttle = Utils.checkLevHasShuttle(chargeLev);//检测楼层是否有穿梭车 |
| | | // if (checkLevHasShuttle) { |
| | | // //当前充电桩楼层有穿梭车,不分配该充电桩 |
| | | // continue; |
| | | // } |
| | | // |
| | | // shuttleCharge = chargeType; |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // if (shuttleCharge == null) { |
| | | // continue; |
| | | // } |
| | | // |
| | | // String chargeLocNo = shuttleCharge.locNo; |
| | | // wrkCharge = new WrkCharge(); |
| | | // wrkCharge.setShuttleNo(shuttle.getId()); |
| | | // wrkCharge.setCharge(shuttleCharge.id); |
| | | // wrkCharge.setWrkNo(commonService.getChargeWorkNo(4)); |
| | | // wrkCharge.setWrkSts(51L); // 51.准备充电 |
| | | // wrkCharge.setIoPri((double) 10); |
| | | // wrkCharge.setLocNo(chargeLocNo); |
| | | // wrkCharge.setMemo("charge"); |
| | | // wrkCharge.setAppeTime(new Date()); |
| | | // if (!wrkChargeService.insert(wrkCharge)) { |
| | | // News.error("保存{}号四向穿梭车充电任务失败!!!", shuttle.getId()); |
| | | // continue; |
| | | // } |
| | | ShuttleChargeType shuttleCharge = null; |
| | | |
| | | //搜索小车所在楼层有没有充电桩 |
| | | for (ShuttleChargeType chargeType : ShuttleChargeType.values()) { |
| | | if (lev != Utils.getLev(chargeType.locNo)) { |
| | | continue;//小车和充电桩不在同一层 |
| | | } |
| | | |
| | | //小车和充电桩在同一层 |
| | | if (wrkMastService.selectChargeWorkingByChargeSta(chargeType.id) == null) { |
| | | shuttleCharge = chargeType; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | if (shuttleCharge == null) { |
| | | //同楼层没有找到充电桩,找可用充电桩 |
| | | //小车同楼层没有充电桩,只要充电桩可用就生成充电任务 |
| | | for (ShuttleChargeType chargeType : ShuttleChargeType.values()) { |
| | | if (wrkMastService.selectChargeWorkingByChargeSta(chargeType.id) == null) { |
| | | //判断当前充电桩楼层是否有小车,如有小车,不分配该充电桩 |
| | | int chargeLev = Utils.getLev(chargeType.locNo);//充电桩楼层 |
| | | boolean checkLevHasShuttle = Utils.checkLevHasShuttle(chargeLev);//检测楼层是否有穿梭车 |
| | | if (checkLevHasShuttle) { |
| | | //当前充电桩楼层有穿梭车,不分配该充电桩 |
| | | continue; |
| | | } |
| | | |
| | | shuttleCharge = chargeType; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (shuttleCharge == null) { |
| | | continue; |
| | | } |
| | | |
| | | String chargeLocNo = shuttleCharge.locNo; |
| | | wrkMast = new WrkMast(); |
| | | wrkMast.setMk(String.valueOf(shuttleCharge.id)); |
| | | wrkMast.setWrkNo(commonService.getWorkNo(WrkIoType.SHUTTLE_CHARGE.id)); |
| | | wrkMast.setWrkSts(WrkStsType.NEW_CHARGE.sts); |
| | | wrkMast.setIoType(WrkIoType.SHUTTLE_CHARGE.id);//300.充电 |
| | | wrkMast.setIoPri((double) 999); |
| | | wrkMast.setLocNo(chargeLocNo); |
| | | wrkMast.setShuttleNo(shuttle.getId()); |
| | | wrkMast.setMemo("charge"); |
| | | wrkMast.setAppeTime(new Date()); |
| | | if (!wrkMastService.insert(wrkMast)) { |
| | | News.error("保存{}号四向穿梭车充电任务失败!!!", shuttle.getId()); |
| | | continue; |
| | | } |
| | | |
| | | News.info("保存{}号四向穿梭车充电任务成功!!!", shuttle.getId()); |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | // /** |
| | | // * 执行四向穿梭车充电任务 |
| | | // */ |
| | | // public synchronized void executeShuttleCharge() { |
| | | // try { |
| | | // for (ShuttleSlave shuttle : slaveProperties.getShuttle()) { |
| | | // WrkCharge wrkCharge = wrkChargeService.selectWorking(shuttle.getId()); |
| | | // if (wrkCharge == null) { |
| | | // continue; |
| | | // } |
| | | // |
| | | // NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkCharge.getShuttleNo()); |
| | | // if (shuttleThread == null) { |
| | | // continue; |
| | | // } |
| | | // NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); |
| | | // if (shuttleProtocol == null) { |
| | | // continue; |
| | | // } |
| | | // |
| | | // if (wrkCharge.getWrkSts() == 51) { |
| | | // if (!shuttleProtocol.isIdleNoCharge()) { |
| | | // continue; |
| | | // } |
| | | // |
| | | // if (shuttleProtocol.getSuspendState() == 1) { |
| | | // continue;//管制中 |
| | | // } |
| | | // |
| | | // if (!shuttleProtocol.getCurrentLocNo().equals(wrkCharge.getLocNo())) { |
| | | // //小车不在充电桩位置 |
| | | // shuttleDispatchUtils.dispatchShuttle(wrkCharge.getWrkNo(), wrkCharge.getLocNo(), shuttle.getId());//调度小车去充电桩 |
| | | // continue; |
| | | // } |
| | | // |
| | | // //小车已经在充电桩位置,下发充电命令 |
| | | // NyShuttleHttpCommand chargeCommand = NyHttpUtils.getChargeCommand(shuttle.getId(), wrkCharge.getWrkNo(), true); |
| | | // ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>(); |
| | | // commands.add(chargeCommand); |
| | | // //创建分配命令 |
| | | // ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); |
| | | // assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//四向穿梭车号 |
| | | // assignCommand.setTaskNo(wrkCharge.getWrkNo().shortValue());//任务号 |
| | | // assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id.shortValue());//出库模式 |
| | | // assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//源库位(小车当前位置) |
| | | // assignCommand.setCommands(commands);//运行命令 |
| | | // |
| | | // wrkCharge.setWrkSts(52L);//51.生成充电任务 => 52.小车去充电中 |
| | | // wrkCharge.setModiTime(new Date()); |
| | | // if (wrkChargeMapper.updateById(wrkCharge) > 0) { |
| | | // //下发任务 |
| | | // MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); |
| | | // } |
| | | // } else if (wrkCharge.getWrkSts() == 52) { |
| | | // //检测小车是否满电 |
| | | // |
| | | // //获取满电阈值 |
| | | // int maxPower = 95; |
| | | // EntityWrapper<Config> wrapper = new EntityWrapper<>(); |
| | | // wrapper.eq("code", "chargeMaxValue"); |
| | | // Config config = configService.selectOne(wrapper); |
| | | // if (config != null) { |
| | | // maxPower = Integer.parseInt(config.getValue()); |
| | | // } |
| | | // |
| | | // if (shuttleProtocol.getPowerPercent() < maxPower) { |
| | | // continue; |
| | | // } |
| | | // |
| | | // //***************判断是否满充校准*************** |
| | | // EntityWrapper<Config> wrapper1 = new EntityWrapper<>(); |
| | | // wrapper.eq("code", "shuttleMaxPowerVerify"); |
| | | // Config config1 = configService.selectOne(wrapper1); |
| | | // if (config1 != null) { |
| | | // if (config1.getValue().equals("true")) { |
| | | // if (shuttleProtocol.getVoltage() < 5630) { |
| | | // continue;//电压不够继续充电 |
| | | // } |
| | | // } |
| | | // } |
| | | // //***************判断是否满充校准*************** |
| | | // |
| | | // //小车满电,结束充电任务 |
| | | // NyShuttleHttpCommand chargeCommand = NyHttpUtils.getChargeCommand(shuttle.getId(), wrkCharge.getWrkNo(), false); |
| | | // ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>(); |
| | | // commands.add(chargeCommand); |
| | | // //创建分配命令 |
| | | // ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); |
| | | // assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//四向穿梭车号 |
| | | // assignCommand.setTaskNo(wrkCharge.getWrkNo().shortValue());//任务号 |
| | | // assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id.shortValue());//出库模式 |
| | | // assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//源库位(小车当前位置) |
| | | // assignCommand.setCommands(commands);//运行命令 |
| | | // |
| | | // //下发任务 |
| | | // MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); |
| | | // try { |
| | | // Thread.sleep(3000); |
| | | // } catch (Exception e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | // |
| | | // wrkCharge.setWrkSts(53L);//52.小车去充电中 => 53.小车充电完成 |
| | | // wrkCharge.setModiTime(new Date()); |
| | | // if (wrkChargeMapper.updateById(wrkCharge) > 0) { |
| | | // shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE.id); |
| | | // shuttleProtocol.setTaskNo(0); |
| | | // shuttleProtocol.setPakMk(false); |
| | | // } |
| | | // } else if (wrkCharge.getWrkSts() == 53) { |
| | | // if (shuttleProtocol.getChargState() == 0) {//小车处于未充电状态 |
| | | // boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkCharge.getLocNo()), shuttleThread.getSlave().getId(), shuttleThread); |
| | | // if (!result) { |
| | | // continue; |
| | | // } |
| | | // |
| | | // wrkCharge.setWrkSts(60L);//53.小车充电完成 => 60.充电任务完成 |
| | | // wrkCharge.setModiTime(new Date()); |
| | | // if (wrkChargeMapper.updateById(wrkCharge) > 0) { |
| | | // |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // } |
| | | // } catch (Exception e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | // } |
| | | /** |
| | | * 执行四向穿梭车充电任务 |
| | | */ |
| | | public synchronized void executeShuttleCharge() { |
| | | try { |
| | | //查询小车移库任务 |
| | | for (ShuttleSlave shuttle : slaveProperties.getShuttle()) { |
| | | WrkMast wrkMast = wrkMastService.selectChargeWorking(shuttle.getId()); |
| | | if(wrkMast == null) { |
| | | continue; |
| | | } |
| | | |
| | | boolean result1 = this.executeShuttleChargeStepGoToChargeSta(wrkMast);//小车等待充电桩 |
| | | if (!result1) { |
| | | continue; |
| | | } |
| | | |
| | | boolean result2 = this.executeShuttleChargeStepArrivalChargeSta(wrkMast);//小车到达充电桩 |
| | | if (!result2) { |
| | | continue; |
| | | } |
| | | |
| | | boolean result3 = this.executeShuttleChargeStepStartCharge(wrkMast);//小车开始充电 |
| | | if (!result3) { |
| | | continue; |
| | | } |
| | | |
| | | boolean result4 = this.executeShuttleChargeStepStopCharge(wrkMast);//小车停止充电 |
| | | if (!result4) { |
| | | continue; |
| | | } |
| | | |
| | | boolean result5 = this.executeShuttleChargeStepLeaveCharge(wrkMast);//小车离开充电桩 |
| | | if (!result5) { |
| | | continue; |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 小车前往充电桩 |
| | | */ |
| | | private synchronized boolean executeShuttleChargeStepGoToChargeSta(WrkMast wrkMast) { |
| | | if (wrkMast.getWrkSts() == WrkStsType.NEW_CHARGE.sts) { |
| | | ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); |
| | | if (shuttleThread == null) { |
| | | return false; |
| | | } |
| | | ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); |
| | | if (shuttleProtocol == null) { |
| | | return false; |
| | | } |
| | | |
| | | if (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) { |
| | | //小车在充电桩位置 |
| | | wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_RUN_COMPLETE.sts); |
| | | wrkMast.setModiTime(new Date()); |
| | | wrkMastService.updateById(wrkMast); |
| | | return false; |
| | | } |
| | | |
| | | //调度小车去充电桩 |
| | | boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getLocNo(), wrkMast.getShuttleNo()); |
| | | if (!dispatched) { |
| | | return false; |
| | | } |
| | | |
| | | wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_RUN.sts);//小车前往充电桩 |
| | | wrkMast.setModiTime(new Date()); |
| | | wrkMastService.updateById(wrkMast); |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 小车到达充电桩 |
| | | */ |
| | | private synchronized boolean executeShuttleChargeStepArrivalChargeSta(WrkMast wrkMast) { |
| | | if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_RUN.sts) { |
| | | ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); |
| | | if (shuttleThread == null) { |
| | | return false; |
| | | } |
| | | ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); |
| | | if (shuttleProtocol == null) { |
| | | return false; |
| | | } |
| | | |
| | | //判断是否存在未完成的移动任务 |
| | | WrkMast moveWrk = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo()); |
| | | if(moveWrk != null) { |
| | | return false; |
| | | } |
| | | |
| | | if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) { |
| | | return false; |
| | | } |
| | | |
| | | //小车在充电桩位置 |
| | | wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_RUN_COMPLETE.sts);//小车到达充电桩 |
| | | wrkMast.setModiTime(new Date()); |
| | | wrkMastService.updateById(wrkMast); |
| | | |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | //小车开始充电 |
| | | private synchronized boolean executeShuttleChargeStepStartCharge(WrkMast wrkMast) { |
| | | if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_RUN_COMPLETE.sts) { |
| | | ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); |
| | | if (shuttleThread == null) { |
| | | return false; |
| | | } |
| | | ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); |
| | | if (shuttleProtocol == null) { |
| | | return false; |
| | | } |
| | | |
| | | //小车已经在充电桩位置,下发充电命令 |
| | | ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); |
| | | assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//四向穿梭车号 |
| | | assignCommand.setTaskNo(wrkMast.getWrkNo());//任务号 |
| | | assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id);//出库模式 |
| | | assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//源库位(小车当前位置) |
| | | |
| | | List<ShuttleCommand> commands = shuttleOperaUtils.shuttleChargeCommand(assignCommand, shuttleThread, true); |
| | | assignCommand.setCommands(commands);//运行命令 |
| | | |
| | | wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_WORKING.sts); |
| | | wrkMast.setModiTime(new Date()); |
| | | if (!wrkMastService.updateById(wrkMast)) { |
| | | return false; |
| | | } |
| | | |
| | | //下发任务 |
| | | shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | //小车停止充电 |
| | | private synchronized boolean executeShuttleChargeStepStopCharge(WrkMast wrkMast) { |
| | | if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_WORKING.sts) { |
| | | ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); |
| | | if (shuttleThread == null) { |
| | | return false; |
| | | } |
| | | ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); |
| | | if (shuttleProtocol == null) { |
| | | return false; |
| | | } |
| | | |
| | | if (!shuttleThread.isChargingCompleted()) { |
| | | return false; |
| | | } |
| | | |
| | | //小车已经在充电桩位置,下发停止充电命令 |
| | | ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); |
| | | assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//四向穿梭车号 |
| | | assignCommand.setTaskNo(wrkMast.getWrkNo());//任务号 |
| | | assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id);//出库模式 |
| | | assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//源库位(小车当前位置) |
| | | |
| | | List<ShuttleCommand> commands = shuttleOperaUtils.shuttleChargeCommand(assignCommand, shuttleThread, false); |
| | | assignCommand.setCommands(commands);//运行命令 |
| | | |
| | | wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_COMPLETE.sts); |
| | | wrkMast.setModiTime(new Date()); |
| | | if (!wrkMastService.updateById(wrkMast)) { |
| | | return false; |
| | | } |
| | | |
| | | //下发任务 |
| | | shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | //小车离开充电桩 |
| | | private synchronized boolean executeShuttleChargeStepLeaveCharge(WrkMast wrkMast) { |
| | | if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_COMPLETE.sts) { |
| | | ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); |
| | | if (shuttleThread == null) { |
| | | return false; |
| | | } |
| | | ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); |
| | | if (shuttleProtocol == null) { |
| | | return false; |
| | | } |
| | | |
| | | ShuttleChargeType chargeType = ShuttleChargeType.get(wrkMast.getMk()); |
| | | if(chargeType == null) { |
| | | return false; |
| | | } |
| | | |
| | | wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_COMPLETE.sts); |
| | | wrkMast.setModiTime(new Date()); |
| | | if (wrkMastService.updateById(wrkMast)) { |
| | | //调度小车去待机位 |
| | | boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), chargeType.waitLocNo, wrkMast.getShuttleNo()); |
| | | if (!dispatched) { |
| | | return false; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 执行小车移库任务 |