Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
webBox
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit b56dec73
由
zshaohui
编写于
2023-12-06 16:38:03 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
计算逻辑提交
1 个父辈
dc0fc73d
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
179 行增加
和
103 行删除
data_new.xlsx
src/main/java/com/neotel/webbox/capacity/box/Box.java
src/main/java/com/neotel/webbox/capacity/method/AssignMethod1.java
src/main/java/com/neotel/webbox/capacity/method/AssignMethod2.java
src/main/java/com/neotel/webbox/capacity/method/BasicMethod.java
src/main/resources/static/calculation.html
data_new.xlsx
查看文件 @
b56dec7
此文件类型无法预览
src/main/java/com/neotel/webbox/capacity/box/Box.java
查看文件 @
b56dec7
...
...
@@ -40,6 +40,8 @@ public class Box {
Column
column
=
new
Column
(
validColumnHeight
);
box
.
setColumn
(
column
);
box
.
setColumnCount
(
boxData
.
getColumnCount
());
return
box
;
}
...
...
src/main/java/com/neotel/webbox/capacity/method/AssignMethod1.java
查看文件 @
b56dec7
...
...
@@ -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
o
2
.
getNum
()
-
o1
.
getNum
();
return
o
1
.
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
;
}
}
src/main/java/com/neotel/webbox/capacity/method/AssignMethod2.java
查看文件 @
b56dec7
...
...
@@ -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
+
"盘需要放到混合仓"
);
...
...
src/main/java/com/neotel/webbox/capacity/method/BasicMethod.java
查看文件 @
b56dec7
...
...
@@ -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
){
//剩余空间可放多少层料格
...
...
src/main/resources/static/calculation.html
查看文件 @
b56dec7
...
...
@@ -128,7 +128,7 @@
methods
:
{
// 获取表格数据
getList
()
{
axios
.
get
(
'/baseData'
,
{
axios
.
get
(
'/b
ox/b
aseData'
,
{
})
.
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!
Cancel
请
注册
或
登录
后发表评论