// 处理装船编moveOrder的过程 private int processL(WorkType wt, Map<Integer, MOSlotStack> bay, MOSlotBlock moSlotBlock) { List<MOSlot> moSlotList = this.getBottomMOSlotList(bay, moSlotBlock); List<Integer> rowList = TraverseOrder.getLRowList(moSlotList); int count = 0; // 对几个slot进行了编序号 F: for (int j = 0; j < rowList.size(); j++) { int row = rowList.get(j); MOSlotStack moSlotStack = bay.get(row); MOSlot moSlotBottom = moSlotStack.getBottomMOSlot(); if (moSlotBottom.getMoveOrderSeq() == -1) { MOContainer moContainer = moSlotBottom.getMoContainer(); Set<MOSlotPosition> moSlotPositionSet = moSlotBottom.getMoSlotPositionSet(); if (moContainer != null && !moSlotPositionSet.isEmpty()) { if (moContainer.size.startsWith(wt.size) && wt.n == moSlotPositionSet.size()) { boolean isMOYes = true; // 是否可以编序 for (MOSlotPosition moSlotPosition : moSlotPositionSet) { // 判断该位置底层是否有箱子没有编序,即下面有箱子还没有装 MOSlot underSlot = moSlotBlock.getUnderMOSlot(moSlotPosition); if (underSlot != null) { if (underSlot.getMoContainer() != null && underSlot.getMoveOrderSeq() == -1) { isMOYes = false; System.out.println( "the under container is not null and none moveOrder: " + moSlotPosition.getBayInt() + "--" + moSlotPosition.getRowInt() + "--" + moSlotPosition.getTierInt()); } } } if (isMOYes) { // 下面没有未编序的箱子,表示当前箱子可以进行编序 // 从moSlotPositionSet中先获取slot,然后编序编MoveOrder for (MOSlotPosition moSlotPosition : moSlotPositionSet) { MOSlot moSlot = moSlotBlock.getMOSlot(moSlotPosition); moSlot.setMoveOrderSeq(seq); } seq++; count++; // 编完序后,栈底标记上移 moSlotStack.bottomTierNoUpBy2(); break F; } } } } else { // 已经编了序号,栈底标记上移 moSlotStack.bottomTierNoUpBy2(); count++; break F; } } return count; }
// 处理卸船编MoveOrder的过程 public int processD(WorkType wt, Map<Integer, MOSlotStack> bay, MOSlotBlock moSlotBlock) { List<MOSlot> moSlotList = this.getTopMOSlotList(bay, moSlotBlock); List<Integer> rowList = TraverseOrder.getDRowList(moSlotList); int count = 0; // 对几个slot进行了编序号 F: for (int j = 0; j < rowList.size(); j++) { int row = rowList.get(j); MOSlotStack moSlotStack = bay.get(row); MOSlot moSlotTop = moSlotStack.getTopMOSlot(); if (moSlotTop.getMoveOrderSeq() == -1) { MOContainer moContainer = moSlotTop.getMoContainer(); Set<MOSlotPosition> moSlotPositionSet = moSlotTop.getMoSlotPositionSet(); if (moContainer != null && !moSlotPositionSet.isEmpty()) { if (moContainer.size.startsWith(wt.size) && wt.n == moSlotPositionSet.size()) { boolean isMOYes = true; // 是否可以编序 for (MOSlotPosition moSlotPosition : moSlotPositionSet) { // 判断该位置上层是否有箱子没有编序,即上面有箱子还没有卸 MOSlot upSlot = moSlotBlock.getUpMOSlot(moSlotPosition); if (upSlot != null) { if (upSlot.getMoContainer() != null && upSlot.getMoveOrderSeq() == -1) { isMOYes = false; System.out.println( "the up container is not null and none moveOrder: " + moSlotPosition.getBayInt() + "--" + moSlotPosition.getRowInt() + "--" + moSlotPosition.getTierInt()); } } } if (isMOYes) { // 从moSlotPositionSet中先获取slot,然后编序编MoveOrder for (MOSlotPosition moSlotPosition : moSlotPositionSet) { MOSlot moSlot = moSlotBlock.getMOSlot(moSlotPosition); moSlot.setMoveOrderSeq(seq); } seq++; count++; // 编完序后,栈顶标记下移 moSlotStack.topTierNoDownBy2(); break F; } } } } else { // 已经编了序号,下移栈顶 moSlotStack.topTierNoDownBy2(); } } return count; }
private List<MOSlot> getBottomMOSlotList(Map<Integer, MOSlotStack> bay, MOSlotBlock moSlotBlock) { List<MOSlot> moSlotList = new ArrayList<>(); for (int j = 0; j < moSlotBlock.getRowSeqList().size(); j++) { int row = moSlotBlock.getRowSeqList().get(j); MOSlotStack moSlotStack = bay.get(row); if (moSlotStack != null) { MOSlot moSlotBottom = moSlotStack.getBottomMOSlot(); if (moSlotBottom != null) { moSlotList.add(moSlotBottom); } } } return moSlotList; }
// 判断MOSlotBlock中所有箱子是否都被编序 public boolean isAllMOSlotStackEmpty(MOSlotBlock moSlotBlock) { boolean result = false; for (MOSlotPosition moSlotPosition : moSlotBlock.getSlotPositions()) { MOSlot moSlot = moSlotBlock.getMOSlot(moSlotPosition); if (moSlot != null) { if (moSlot.getMoveType() != null) { if (moSlot.getMoveOrderSeq() == -1) { result = true; } } } } return result; }
// 判断栈底有没有该作业工艺的slot public boolean isContinueSameTPBottom(WorkType wt, MOSlotBlock moSlotBlock) { boolean result = false; Map<Integer, MOSlotStack> bay01 = moSlotBlock.getBay01(); Map<Integer, MOSlotStack> bay03 = moSlotBlock.getBay03(); for (MOSlotStack moSlotStack : bay01.values()) { MOSlot moSlot = moSlotStack.getBottomMOSlot(); if (moSlot != null) { if (moSlot.getMoveOrderSeq() == -1) { // 没有编过MoveOrder MOContainer moContainer = moSlot.getMoContainer(); Set<MOSlotPosition> moSlotPositionSet = moSlot.getMoSlotPositionSet(); if (moContainer != null && !moSlotPositionSet.isEmpty()) { if (moContainer.size.startsWith(wt.size) && wt.n == moSlotPositionSet.size()) { result = true; } } else { moSlotStack.bottomTierNoUpBy2(); } } else { moSlotStack.bottomTierNoUpBy2(); } } } for (MOSlotStack moSlotStack : bay03.values()) { MOSlot moSlot = moSlotStack.getBottomMOSlot(); if (moSlot != null) { if (moSlot.getMoveOrderSeq() == -1) { // 没有编过MoveOrder MOContainer moContainer = moSlot.getMoContainer(); Set<MOSlotPosition> moSlotPositionSet = moSlot.getMoSlotPositionSet(); if (moContainer != null && !moSlotPositionSet.isEmpty()) { if (moContainer.size.startsWith(wt.size) && wt.n == moSlotPositionSet.size()) { result = true; } } else { moSlotStack.bottomTierNoUpBy2(); } } else { moSlotStack.bottomTierNoUpBy2(); } } } return result; }
public MOSlotBlock processOrderBL(MOSlotBlock moSlotBlock) { Map<Integer, MOSlotStack> bay01 = moSlotBlock.getBay01(); Map<Integer, MOSlotStack> bay03 = moSlotBlock.getBay03(); WorkType[] workTypes = new WorkType[] { new WorkType(1, "2"), new WorkType(2, "2"), new WorkType(1, "4"), new WorkType(2, "4"), new WorkType(1, "4"), new WorkType(2, "2"), new WorkType(1, "2") }; // int n = 0; // while (n < 10000) { // n++; while (isAllMOSlotStackEmpty(moSlotBlock)) { int i = 0; while (i < workTypes.length) { WorkType wt = workTypes[i]; if (isContinueSameTPBottom(wt, moSlotBlock)) { int count01 = -1, count03 = -1; W: while (isContinueSameTPBottomBay(wt, bay01)) { count01 = this.processL(wt, bay01, moSlotBlock); if (count01 == 0) { break W; } } W: while (isContinueSameTPBottomBay(wt, bay03)) { count03 = this.processL(wt, bay03, moSlotBlock); if (count03 == 0) { break W; } } if (count01 == 0 || count03 == 0) { i = 0; } else { if (!isContinueSameTPBottom(wt, moSlotBlock)) { i++; } } } else { i++; } // if (isContinueSameTPBottom(wt, moSlotBlock)) { // int count01, count03; // //先从01贝开始 // count01 = this.processL(wt, bay01, moSlotBlock); // //再从03贝开始 // count03 = this.processL(wt, bay03, moSlotBlock); // if (count01 == 0 && count03 == 0) { // i = 0; // } else { // if (!isContinueSameTPBottom(wt, moSlotBlock)) { // i = 0; // } // } // } else { // i++; // } } } return moSlotBlock; }