Commit b56dec73 zshaohui

计算逻辑提交

1 个父辈 dc0fc73d
此文件类型无法预览
...@@ -40,6 +40,8 @@ public class Box { ...@@ -40,6 +40,8 @@ public class Box {
Column column = new Column(validColumnHeight); Column column = new Column(validColumnHeight);
box.setColumn(column); box.setColumn(column);
box.setColumnCount(boxData.getColumnCount());
return box; return box;
} }
......
...@@ -37,6 +37,15 @@ public class AssignMethod1 extends BasicMethod { ...@@ -37,6 +37,15 @@ public class AssignMethod1 extends BasicMethod {
remainNum = 0; remainNum = 0;
pureBoxCount = pureBoxCount + 1; pureBoxCount = pureBoxCount + 1;
} }
}else{
Float rate = 1.0f * requestItem.getNum()/pureBoxCapacity;
int boxCount = rate.intValue();
if(rate - boxCount > 0.5){
boxCount = boxCount + 1;
}
pureBoxCount = boxCount;
remainNum = requestItem.getNum() - pureBoxCount * pureBoxCapacity;
} }
requestItem.setPureBoxCount(pureBoxCount); requestItem.setPureBoxCount(pureBoxCount);
requestItem.setRemainNum(remainNum); requestItem.setRemainNum(remainNum);
...@@ -49,7 +58,7 @@ public class AssignMethod1 extends BasicMethod { ...@@ -49,7 +58,7 @@ public class AssignMethod1 extends BasicMethod {
List<Box> mixBoxList = new ArrayList<>(); List<Box> mixBoxList = new ArrayList<>();
if(!onlyOneRequest){ if(!onlyOneRequest){
int mixBoxTotalValidHeight = boxData.getTotalValidHeight(maxPressHeight); /*int mixBoxTotalValidHeight = boxData.getTotalValidHeight(maxPressHeight);
//估算混合仓数量 //估算混合仓数量
Float estimateMixBoxCount = 1.0f * totalRemainNeedHeight / mixBoxTotalValidHeight; Float estimateMixBoxCount = 1.0f * totalRemainNeedHeight / mixBoxTotalValidHeight;
int mixBoxCount = estimateMixBoxCount.intValue(); int mixBoxCount = estimateMixBoxCount.intValue();
...@@ -59,129 +68,165 @@ public class AssignMethod1 extends BasicMethod { ...@@ -59,129 +68,165 @@ public class AssignMethod1 extends BasicMethod {
log.info("剩余物料需要 " + mixBoxCount +" 个混合仓"); log.info("剩余物料需要 " + mixBoxCount +" 个混合仓");
for(int i = 1; i<= mixBoxCount; i++){ for(int i = 1; i<= mixBoxCount; i++){
mixBoxList.add(Box.newBox(boxData,maxPressHeight)); mixBoxList.add(Box.newBox(boxData,maxPressHeight));
} }*/
//从需求大到小排序,优先满足大需求 //从需求大到小排序,优先满足大需求
requestList.sort(new Comparator<RequestItem>() { requestList.sort(new Comparator<RequestItem>() {
@Override @Override
public int compare(RequestItem o1, RequestItem o2) { public int compare(RequestItem o1, RequestItem o2) {
return o2.getNum() - o1.getNum(); return o1.getNum() - o2.getNum();
} }
}); });
int columnValidHeight = boxData.getColumnValidHeight(maxPressHeight); Box mixBox = Box.newBox(boxData, maxPressHeight);
//标准列
Column column = new Column(columnValidHeight);
//先每列均分,如果有剩余,安排到料仓口的上下位置 //先每列均分,如果有剩余,安排到料仓口的上下位置
for (RequestItem requestItem : requestList) { for (RequestItem requestItem : requestList) {
while (true) {
requestItem = fillMixBox(requestItem, mixBox);
if (requestItem.getRemainNum() > 0) {
//还有未安排的料盘,如果标准列有位置就添加进去,如果没有那就是放不下了
log.warn("" + requestItem.getRemainNum() + "个" + requestItem.getReelSizeStr() + "无处安放,新增一个混合仓");
mixBoxList.add(mixBox);
mixBox = Box.newBox(boxData, maxPressHeight);
//requestItem = fillMixBox(requestItem, column, mixBox);
} else {
break;
}
}
}
mixBoxList.add(mixBox);
log.info("需要混合仓的数量为:"+mixBoxList.size());
for (Box box : mixBoxList) {
// //填充料盘(需求数量最多的)
// RequestItem fillRequestItem = null;
// //用剩余的空间去放还未满足的料盘
// for (RequestItem requestItem : requestList) {
// if(fillRequestItem == null || requestItem.getNum() > fillRequestItem.getNum()){
// fillRequestItem = requestItem;
// }
// int remainNum = requestItem.getRemainNum();
// int addCount = fillToColumn(column,remainNum,requestItem.getReelData());
// if(addCount > 0){
// remainNum = remainNum - addCount;
// requestItem.setRemainNum(remainNum);
// log.info("添加"+addCount+"个"+ requestItem.getReelSizeStr()+"料盘到标准列,无处安放料盘数为:" + remainNum);
// }
// if(remainNum > 0){
// for (Box box : mixBoxList) {
// addCount = fillToColumn(box.getDoorUp(),remainNum,requestItem.getReelData());
// if(addCount > 0){
// remainNum = remainNum - addCount;
// requestItem.setRemainNum(remainNum);
// log.info("添加"+addCount+"个"+ requestItem.getReelSizeStr()+"料盘到门口上方列,无处安放料盘数为:" + remainNum);
// }
// addCount = fillToColumn(box.getDoorDown(),remainNum,requestItem.getReelData());
// if(addCount > 0){
// remainNum = remainNum - addCount;
// requestItem.setRemainNum(remainNum);
// log.info("添加"+addCount+"个"+ requestItem.getReelSizeStr()+"料盘到门口下方列,无处安放料盘数为:" + remainNum);
// }
// }
//
// }
// }
//进行填充
// int fillCount = fillToColumn(column,-1,fillRequestItem.getReelData());
// if(fillCount > 0){
// log.info("填充"+fillCount+"个"+ fillRequestItem.getReelSizeStr()+"料盘到标准列,标准列空闲高度为:" + column.getRemainHeight());
// }else{
// log.info("标准列空闲高度为: " + column.getRemainHeight()+" ");
// }
// for (Box box : mixBoxList) {
// fillCount = fillToColumn(box.getDoorUp(),-1,fillRequestItem.getReelData());
// if(fillCount > 0){
// log.info("填充"+fillCount+"个"+ fillRequestItem.getReelSizeStr()+"料盘到门口上方列,其空闲高度为:" + box.getDoorUp().getRemainHeight());
// }else{
// log.info("门口上方列空闲高度为:" + box.getDoorUp().getRemainHeight()+" ");
// }
// fillCount = fillToColumn(box.getDoorDown(),-1,fillRequestItem.getReelData());
// if(fillCount > 0){
// log.info("填充"+fillCount+"个"+ fillRequestItem.getReelSizeStr()+"料盘到门口下方列,其空闲高度为:" + box.getDoorDown().getRemainHeight());
// }else{
// log.info("门口下方列空闲高度为:" + box.getDoorDown().getRemainHeight()+" ");
// }
// }
// for (Box box : mixBoxList) {
// box.setColumn(column);
// box.setColumnCount(boxData.getColumnCount());
// }
}
}
return getBoxResult(requestList,boxData,mixBoxList);
}
private static RequestItem fillMixBox(RequestItem requestItem, Box mixBox){
int totalRemainNum = requestItem.getRemainNum(); int totalRemainNum = requestItem.getRemainNum();
int totalColumn = mixBoxList.size() * boxData.getColumnCount(); int totalColumn = mixBox.getColumnCount();
int countPerColumn = totalRemainNum/totalColumn; //int countPerColumn = totalRemainNum/totalColumn;
int assignReelCount = 0; int assignReelCount = 0;
if(requestItem.getReelData().is7Reel()){ /*if(requestItem.getReelData().is7Reel()){
//7寸盘会填充,这里不需要填充 //7寸盘会填充,这里不需要填充
countPerColumn = countPerColumn /2 * 2; countPerColumn = countPerColumn /2 * 2;
} }*/
SlotUnit slotUnit = getValidSlotUnit(countPerColumn, requestItem.getReelData(),column.getRemainHeight());
slotUnit = column.addSlotUnit(slotUnit);
//为null表示一个没填充进去, 不为null可能只填充了一部分
if(slotUnit != null){
assignReelCount = slotUnit.getReelCount() * totalColumn;
log.info("添加"+assignReelCount+"个"+ requestItem.getReelSizeStr()+"料盘到标准列,每列"+ slotUnit.getReelCount()+"个料盘");
}
//没有安排的料盘,安排到料口的上下两部分 //没有安排的料盘,安排到料口的上下两部分
int notArrangedNum = totalRemainNum - assignReelCount; int notArrangedNum = totalRemainNum - assignReelCount;
for (Box box : mixBoxList) {
Column doorDown = box.getDoorDown(); Column doorDown = mixBox.getDoorDown();
SlotUnit doorDownAddUnit = getValidSlotUnit(notArrangedNum, requestItem.getReelData(), doorDown.getRemainHeight()); SlotUnit doorDownAddUnit = getValidSlotUnit(notArrangedNum, requestItem.getReelData(), doorDown.getRemainHeight());
doorDownAddUnit = doorDown.addSlotUnit(doorDownAddUnit); doorDownAddUnit = doorDown.addSlotUnit(doorDownAddUnit);
if(doorDownAddUnit != null){ if (doorDownAddUnit != null) {
log.info("添加"+doorDownAddUnit.getReelCount()+"个"+ requestItem.getReelSizeStr()+"料盘到门口下方列"); log.info("添加" + doorDownAddUnit.getReelCount() + "个" + requestItem.getReelSizeStr() + "料盘到门口下方列");
notArrangedNum = notArrangedNum - doorDownAddUnit.getReelCount(); notArrangedNum = notArrangedNum - doorDownAddUnit.getReelCount();
} }
Column doorUp = box.getDoorUp(); Column doorUp = mixBox.getDoorUp();
SlotUnit doorUpAddUnit = getValidSlotUnit(notArrangedNum, requestItem.getReelData(), doorUp.getRemainHeight()); SlotUnit doorUpAddUnit = getValidSlotUnit(notArrangedNum, requestItem.getReelData(), doorUp.getRemainHeight());
doorUpAddUnit = doorUp.addSlotUnit(doorUpAddUnit); doorUpAddUnit = doorUp.addSlotUnit(doorUpAddUnit);
if(doorUpAddUnit != null){ if (doorUpAddUnit != null) {
log.info("添加"+doorUpAddUnit.getReelCount()+"个"+ requestItem.getReelSizeStr()+"料盘到门口上方列"); log.info("添加" + doorUpAddUnit.getReelCount() + "个" + requestItem.getReelSizeStr() + "料盘到门口上方列");
notArrangedNum = notArrangedNum - doorUpAddUnit.getReelCount(); notArrangedNum = notArrangedNum - doorUpAddUnit.getReelCount();
} }
}
requestItem.setRemainNum(notArrangedNum);
if(notArrangedNum > 0){
//还有未安排的料盘,如果标准列有位置就添加进去,如果没有那就是放不下了
log.warn(""+notArrangedNum+"个"+ requestItem.getReelSizeStr()+"无处安放");
}
}
//填充料盘(需求数量最多的)
RequestItem fillRequestItem = null;
//用剩余的空间去放还未满足的料盘
for (RequestItem requestItem : requestList) {
if(fillRequestItem == null || requestItem.getNum() > fillRequestItem.getNum()){
fillRequestItem = requestItem;
}
int remainNum = requestItem.getRemainNum();
int addCount = fillToColumn(column,remainNum,requestItem.getReelData());
if(addCount > 0){
remainNum = remainNum - addCount;
requestItem.setRemainNum(remainNum);
log.info("添加"+addCount+"个"+ requestItem.getReelSizeStr()+"料盘到标准列,无处安放料盘数为:" + remainNum);
}
if(remainNum > 0){
for (Box box : mixBoxList) {
addCount = fillToColumn(box.getDoorUp(),remainNum,requestItem.getReelData());
if(addCount > 0){
remainNum = remainNum - addCount;
requestItem.setRemainNum(remainNum);
log.info("添加"+addCount+"个"+ requestItem.getReelSizeStr()+"料盘到门口上方列,无处安放料盘数为:" + remainNum);
}
addCount = fillToColumn(box.getDoorDown(),remainNum,requestItem.getReelData());
if(addCount > 0){
remainNum = remainNum - addCount;
requestItem.setRemainNum(remainNum);
log.info("添加"+addCount+"个"+ requestItem.getReelSizeStr()+"料盘到门口下方列,无处安放料盘数为:" + remainNum);
}
}
if (notArrangedNum > 0) {
int countPerColumn = notArrangedNum / totalColumn;
if (notArrangedNum % totalColumn != 0){
countPerColumn = countPerColumn + 1;
} }
if (requestItem.getReelData().is7Reel()) {
//7寸盘会填充,这里不需要填充
countPerColumn = countPerColumn / 2 * 2;
} }
//进行填充 Column column = mixBox.getColumn();
SlotUnit slotUnit = getFixValidSlotUnit(countPerColumn, requestItem.getReelData(), column.getRemainHeight());
int fillCount = fillToColumn(column,-1,fillRequestItem.getReelData()); slotUnit = column.addSlotUnit(slotUnit);
if(fillCount > 0){ //为null表示一个没填充进去, 不为null可能只填充了一部分
log.info("填充"+fillCount+"个"+ fillRequestItem.getReelSizeStr()+"料盘到标准列,标准列空闲高度为:" + column.getRemainHeight()); if (slotUnit != null) {
}else{ assignReelCount = slotUnit.getReelCount() * totalColumn;
log.info("标准列空闲高度为: " + column.getRemainHeight()+" "); notArrangedNum = notArrangedNum - assignReelCount;
} log.info("添加" + assignReelCount + "个" + requestItem.getReelSizeStr() + "料盘到标准列,每列" + slotUnit.getReelCount() + "个料盘");
for (Box box : mixBoxList) {
fillCount = fillToColumn(box.getDoorUp(),-1,fillRequestItem.getReelData());
if(fillCount > 0){
log.info("填充"+fillCount+"个"+ fillRequestItem.getReelSizeStr()+"料盘到门口上方列,其空闲高度为:" + box.getDoorUp().getRemainHeight());
}else{
log.info("门口上方列空闲高度为:" + box.getDoorUp().getRemainHeight()+" ");
}
fillCount = fillToColumn(box.getDoorDown(),-1,fillRequestItem.getReelData());
if(fillCount > 0){
log.info("填充"+fillCount+"个"+ fillRequestItem.getReelSizeStr()+"料盘到门口下方列,其空闲高度为:" + box.getDoorDown().getRemainHeight());
}else{
log.info("门口下方列空闲高度为:" + box.getDoorDown().getRemainHeight()+" ");
}
}
for (Box box : mixBoxList) {
box.setColumn(column);
box.setColumnCount(boxData.getColumnCount());
} }
} }
requestItem.setRemainNum(notArrangedNum);
return requestItem;
return getBoxResult(requestList,boxData,mixBoxList);
} }
} }
...@@ -33,8 +33,14 @@ public class AssignMethod2 extends BasicMethod{ ...@@ -33,8 +33,14 @@ public class AssignMethod2 extends BasicMethod{
ReelData rd = requestItem.getReelData(); ReelData rd = requestItem.getReelData();
//纯放此料盘料仓容量 //纯放此料盘料仓容量
int pureBoxCapacity = boxData.getBoxPureSizeCapacity(requestItem.getReelData()); int pureBoxCapacity = boxData.getBoxPureSizeCapacity(requestItem.getReelData());
int pureBoxCount = requestItem.getNum()/pureBoxCapacity;
int remainNum = requestItem.getNum() % pureBoxCapacity; Float rate = 1.0f * requestItem.getNum()/pureBoxCapacity;
int boxCount = rate.intValue();
if(rate - boxCount > 0.85){
boxCount = boxCount + 1;
}
int pureBoxCount = boxCount;
int remainNum = requestItem.getNum() - pureBoxCount * pureBoxCapacity;
requestItem.setPureBoxCount(pureBoxCount); requestItem.setPureBoxCount(pureBoxCount);
requestItem.setRemainNum(remainNum); requestItem.setRemainNum(remainNum);
log.info("料盘["+rd.getReelSizeStr()+"]总需求:"+requestItem.getNum()+"需要纯料仓"+ pureBoxCount+"个,每个料仓可放:"+pureBoxCapacity+"盘,剩余:"+ remainNum+"盘需要放到混合仓"); log.info("料盘["+rd.getReelSizeStr()+"]总需求:"+requestItem.getNum()+"需要纯料仓"+ pureBoxCount+"个,每个料仓可放:"+pureBoxCapacity+"盘,剩余:"+ remainNum+"盘需要放到混合仓");
......
...@@ -36,6 +36,29 @@ public class BasicMethod { ...@@ -36,6 +36,29 @@ public class BasicMethod {
return new SlotUnit(reelData,validReelCount); return new SlotUnit(reelData,validReelCount);
} }
protected static SlotUnit getFixValidSlotUnit(int requestReelCount, ReelData reelData, int validHeight){
if(requestReelCount <=0){
return null;
}
//剩余空间可放多少层料格
int slotCount = validHeight/reelData.getReelSlotHeight();
if(slotCount < reelData.getMinUnit()){
slotCount = reelData.getMinUnit();
}
int validReelCount = slotCount;
if(reelData.is7Reel()){
validReelCount = validReelCount * 2;
}
if(validReelCount >= requestReelCount){
//可以全部放下
return new SlotUnit(reelData,requestReelCount);
}
//只可以放下部分
return new SlotUnit(reelData,validReelCount);
}
protected static int fillToColumn(Column column, int remainCount, ReelData reelData){ protected static int fillToColumn(Column column, int remainCount, ReelData reelData){
if(remainCount > 0 || remainCount == -1){ if(remainCount > 0 || remainCount == -1){
//剩余空间可放多少层料格 //剩余空间可放多少层料格
......
...@@ -128,7 +128,7 @@ ...@@ -128,7 +128,7 @@
methods: { methods: {
// 获取表格数据 // 获取表格数据
getList() { getList() {
axios.get('/baseData', { axios.get('/box/baseData', {
}) })
.then(res => { .then(res => {
this.typeOptions = res.data.data.boxDataList this.typeOptions = res.data.data.boxDataList
...@@ -233,7 +233,7 @@ ...@@ -233,7 +233,7 @@
} }
let data = Object.assign(query, newArr) let data = Object.assign(query, newArr)
axios axios
.post('/capacity', .post('/box/capacity',
data data
// data:JSON.stringify(Object.assign(query, newArr)) // data:JSON.stringify(Object.assign(query, newArr))
) )
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!