Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit a7048ed6
由
zshaohui
编写于
2024-12-27 14:50:36 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1.料串分配到指定料仓,逻辑修改
1 个父辈
c4ac20cb
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
85 行增加
和
29 行删除
src/main/java/com/neotel/smfcore/custom/Jkem21481/bean/StackerAvailableStorage.java
src/main/java/com/neotel/smfcore/custom/Jkem21481/controller/StackerController.java
src/main/java/com/neotel/smfcore/custom/Jkem21481/bean/StackerAvailableStorage.java
0 → 100644
查看文件 @
a7048ed
package
com
.
neotel
.
smfcore
.
custom
.
Jkem21481
.
bean
;
import
lombok.Data
;
@Data
public
class
StackerAvailableStorage
{
private
int
w
;
private
int
h
;
private
int
count
;
private
String
storageName
;
private
int
emptyCount
;
}
src/main/java/com/neotel/smfcore/custom/Jkem21481/controller/StackerController.java
查看文件 @
a7048ed
...
...
@@ -4,9 +4,11 @@ import com.alibaba.fastjson.JSON;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.storage.bean.UsageItem
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.custom.Jkem21481.bean.MJPartNumber
;
import
com.neotel.smfcore.custom.Jkem21481.bean.StackerAvailableStorage
;
import
com.neotel.smfcore.custom.Jkem21481.bean.StackerCache
;
import
com.neotel.smfcore.custom.Jkem21481.manager.IPartNumberManager
;
import
com.neotel.smfcore.custom.Jkem21481.util.StackerUtil
;
...
...
@@ -79,7 +81,7 @@ public class StackerController {
@RequestMapping
(
"/getAvailableStorageByStacker"
)
@AnonymousAccess
public
ResultBean
getAvailableStorageByStacker
(
String
stacker
)
{
log
.
info
(
"
移除料串
[{}]信息"
,
stacker
);
log
.
info
(
"
获取可用料仓
[{}]信息"
,
stacker
);
if
(
StringUtils
.
isEmpty
(
stacker
))
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"stacker"
});
}
...
...
@@ -94,57 +96,99 @@ public class StackerController {
private
static
final
List
<
String
>
msdCidList
=
Arrays
.
asList
(
"XLR4A"
,
"XLR4B"
,
"XLR5A"
,
"XLR5B"
,
"XLR6A"
,
"XLR6B"
);
private
List
<
String
>
getAvailableStorage
(
String
stacker
)
{
List
<
StackerCache
>
stackerCacheList
=
StackerUtil
.
getDetailByStacker
(
stacker
);
//Msd和非Msd列表
List
<
StackerCache
>
msdList
=
new
ArrayList
<>();
List
<
StackerCache
>
noMsdList
=
new
ArrayList
<>();
for
(
StackerCache
cache
:
stackerCacheList
)
{
if
(
cache
.
getMsd
()
==
1
)
{
msdList
.
add
(
cache
);
}
else
{
noMsdList
.
add
(
cache
);
}
}
if
(
msdList
!=
null
&&
!
msdList
.
isEmpty
())
{
log
.
info
(
"料串[{}]的msd不为空,信息为[{}],直接返回Msd列表"
,
stacker
,
JSON
.
toJSONString
(
msdList
));
return
msdCidList
;
}
List
<
String
>
availableStorageList
=
new
ArrayList
<>();
//不是msd的料仓
List
<
Storage
>
noMsdStorageList
=
new
ArrayList
<>();
for
(
Storage
storage
:
dataCache
.
getAllStorage
().
values
())
{
if
(
msdCidList
.
contains
(
storage
.
getCid
())){
continue
;
}
for
(
StackerCache
stackerCache
:
noMsdList
)
{
if
(
storage
.
canPutIn
(
stackerCache
.
getW
(),
stackerCache
.
getH
())){
availableStorageList
.
add
(
storage
.
getCid
());
}
if
(!
msdCidList
.
contains
(
storage
.
getCid
()))
{
noMsdStorageList
.
add
(
storage
);
}
}
if
(
availableStorageList
!=
null
&&
!
availableStorageList
.
isEmpty
()){
availableStorageList
=
availableStorageList
.
stream
().
distinct
().
collect
(
Collectors
.
toList
());
return
a
vailableStorageList
;
List
<
String
>
noMsdAvailableStorageList
=
getAvailableStorage
(
stacker
,
noMsdStorageList
,
stackerCacheList
);
if
(
noMsdAvailableStorageList
!=
null
&&
!
noMsdAvailableStorageList
.
isEmpty
())
{
return
noMsdA
vailableStorageList
;
}
//msd的料仓
List
<
Storage
>
msdStorageList
=
new
ArrayList
<>();
for
(
Storage
storage
:
dataCache
.
getAllStorage
().
values
())
{
if
(
!
msdCidList
.
contains
(
storage
.
getCid
()))
{
continue
;
if
(
msdCidList
.
contains
(
storage
.
getCid
()))
{
msdStorageList
.
add
(
storage
)
;
}
for
(
StackerCache
stackerCache
:
noMsdList
)
{
if
(
storage
.
canPutIn
(
stackerCache
.
getW
(),
stackerCache
.
getH
())){
availableStorageList
.
add
(
storage
.
getCid
());
}
List
<
String
>
msdAvailableStorageList
=
getAvailableStorage
(
stacker
,
msdStorageList
,
stackerCacheList
);
if
(
msdAvailableStorageList
!=
null
&&
!
msdAvailableStorageList
.
isEmpty
())
{
return
msdAvailableStorageList
;
}
return
new
ArrayList
<>();
}
private
List
<
String
>
getAvailableStorage
(
String
stacker
,
List
<
Storage
>
storageList
,
List
<
StackerCache
>
stackerList
)
{
List
<
String
>
availableStorageList
=
new
ArrayList
<>();
List
<
StackerAvailableStorage
>
stackerAvailableStorageList
=
new
ArrayList
<>();
//按数量最多的进行排序
stackerList
=
stackerList
.
stream
().
sorted
(
Comparator
.
comparing
(
StackerCache:
:
getCount
).
reversed
()).
collect
(
Collectors
.
toList
());
for
(
StackerCache
stackerCache
:
stackerList
)
{
String
sizeStr
=
stackerCache
.
getW
()
+
"x"
+
stackerCache
.
getH
();
log
.
info
(
"料串[{}],包含的尺寸信息有[{}]"
,
stacker
,
sizeStr
);
//根据尺寸找到空库位最多的料仓进行入库
for
(
Storage
storage
:
storageList
)
{
Map
<
String
,
UsageItem
>
usageMap
=
storage
.
getUsageMap
();
UsageItem
usageItem
=
usageMap
.
get
(
sizeStr
);
if
(
usageItem
!=
null
)
{
int
emptyCount
=
usageItem
.
getTotalCount
()
-
usageItem
.
getUsedCount
();
log
.
info
(
"获取到料仓[{}],对应的空库位数量[{}],尺寸为[{}]"
,
storage
.
getName
(),
emptyCount
,
sizeStr
);
if
(
emptyCount
>
0
)
{
StackerAvailableStorage
stackerAvailableStorage
=
new
StackerAvailableStorage
();
stackerAvailableStorage
.
setStorageName
(
storage
.
getCid
());
stackerAvailableStorage
.
setCount
(
stackerCache
.
getCount
());
stackerAvailableStorage
.
setEmptyCount
(
emptyCount
);
stackerAvailableStorage
.
setW
(
stackerCache
.
getW
());
stackerAvailableStorage
.
setH
(
stackerCache
.
getH
());
stackerAvailableStorageList
.
add
(
stackerAvailableStorage
);
}
}
else
{
//判断是否为同尺寸兼容
for
(
UsageItem
item
:
usageMap
.
values
())
{
if
(
storage
.
canPutInPos
(
stackerCache
.
getW
(),
stackerCache
.
getH
(),
item
.
getW
(),
item
.
getH
())){
int
emptyCount
=
item
.
getTotalCount
()
-
item
.
getUsedCount
();
log
.
info
(
"同尺寸没有可放入的,找到兼容料仓,料仓为[{}],尺寸为[{}],料串为[{}],找到对应料仓尺寸为[{}]"
,
storage
.
getName
(),
sizeStr
,
stacker
,
item
.
getSizeStr
());
if
(
emptyCount
>
0
)
{
StackerAvailableStorage
stackerAvailableStorage
=
new
StackerAvailableStorage
();
stackerAvailableStorage
.
setStorageName
(
storage
.
getCid
());
stackerAvailableStorage
.
setCount
(
stackerCache
.
getCount
());
stackerAvailableStorage
.
setEmptyCount
(
emptyCount
);
stackerAvailableStorage
.
setW
(
stackerCache
.
getW
());
stackerAvailableStorage
.
setH
(
stackerCache
.
getH
());
stackerAvailableStorageList
.
add
(
stackerAvailableStorage
);
}
}
}
}
}
}
if
(
availableStorageList
!=
null
&&
!
availableStorageList
.
isEmpty
()){
//按空库位进行排序
if
(
stackerAvailableStorageList
!=
null
&&
!
stackerAvailableStorageList
.
isEmpty
()){
stackerAvailableStorageList
=
stackerAvailableStorageList
.
stream
().
sorted
(
Comparator
.
comparing
(
StackerAvailableStorage
::
getCount
).
reversed
()
.
thenComparing
(
Comparator
.
comparing
(
StackerAvailableStorage:
:
getEmptyCount
).
reversed
())).
collect
(
Collectors
.
toList
());
log
.
info
(
JSON
.
toJSONString
(
stackerAvailableStorageList
));
for
(
StackerAvailableStorage
stackerAvailableStorage
:
stackerAvailableStorageList
)
{
availableStorageList
.
add
(
stackerAvailableStorage
.
getStorageName
());
}
availableStorageList
=
availableStorageList
.
stream
().
distinct
().
collect
(
Collectors
.
toList
());
return
availableStorageList
;
}
return
new
ArrayList
<>();
return
availableStorageList
;
}
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论