Commit b56dec73 zshaohui

计算逻辑提交

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