Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 6bc63691
由
sunke
编写于
2022-08-06 14:11:51 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
西门子普通料架
1 个父辈
fe95fc30
显示空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
112 行增加
和
130 行删除
src/main/java/com/neotel/smfcore/core/api/SmfApi.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/NLShelfHandler.java
src/main/java/com/neotel/smfcore/core/storage/rest/MaterialController.java
src/main/java/com/neotel/smfcore/core/system/util/TaskService.java
src/main/java/com/neotel/smfcore/custom/siemens/SiemensApi.java
src/main/java/com/neotel/smfcore/custom/siemens/bean/LotCheckInfo.java
src/main/java/com/neotel/smfcore/core/api/SmfApi.java
查看文件 @
6bc6369
...
@@ -152,7 +152,7 @@ public class SmfApi {
...
@@ -152,7 +152,7 @@ public class SmfApi {
}
}
}
}
return
null
;
return
barcode
;
}
}
public
LiteOrder
fetchOrder
(
String
orderNumber
,
String
username
){
public
LiteOrder
fetchOrder
(
String
orderNumber
,
String
username
){
...
...
src/main/java/com/neotel/smfcore/core/device/handler/impl/NLShelfHandler.java
查看文件 @
6bc6369
...
@@ -52,6 +52,9 @@ public class NLShelfHandler extends BaseDeviceHandler {
...
@@ -52,6 +52,9 @@ public class NLShelfHandler extends BaseDeviceHandler {
@Autowired
@Autowired
private
InListCache
inListCache
;
private
InListCache
inListCache
;
String
putInColor
=
"green"
;
int
delayCloseTime
=
30000
;
@Override
@Override
public
StatusBean
handleClientRequest
(
StatusBean
statusBean
,
HttpServletRequest
request
)
{
public
StatusBean
handleClientRequest
(
StatusBean
statusBean
,
HttpServletRequest
request
)
{
statusBean
.
setClientIp
(
request
.
getRemoteHost
());
statusBean
.
setClientIp
(
request
.
getRemoteHost
());
...
@@ -115,8 +118,9 @@ public class NLShelfHandler extends BaseDeviceHandler {
...
@@ -115,8 +118,9 @@ public class NLShelfHandler extends BaseDeviceHandler {
String
psession
=
sessionId
.
substring
(
sessionId
.
length
()-
10
);
String
psession
=
sessionId
.
substring
(
sessionId
.
length
()-
10
);
log
.
info
(
psession
+
"关闭上一个操作库位:"
+
posToClose
.
getPosName
());
log
.
info
(
psession
+
"关闭上一个操作库位:"
+
posToClose
.
getPosName
());
operateBean
.
setPosToClose
(
null
);
operateBean
.
setPosToClose
(
null
);
operateBean
.
setOpPos
(
null
);
shelfPutInBeanMap
.
put
(
sessionId
,
operateBean
);
shelfPutInBeanMap
.
put
(
sessionId
,
operateBean
);
opPosLight
(
"close"
,
posToClose
,
""
,
false
);
opPosLight
(
"close"
,
posToClose
,
""
);
}
}
}
}
...
@@ -144,50 +148,54 @@ public class NLShelfHandler extends BaseDeviceHandler {
...
@@ -144,50 +148,54 @@ public class NLShelfHandler extends BaseDeviceHandler {
* @param pos
* @param pos
* @param colorStr
* @param colorStr
*/
*/
private
void
opPosLight
(
String
opKey
,
StoragePos
pos
,
String
colorStr
,
boolean
neeCheck
){
private
void
opPosLight
(
String
opKey
,
StoragePos
pos
,
String
colorStr
){
String
opStr
=
pos
.
getPosName
();
String
opStr
=
pos
.
getPosName
();
if
(!
Strings
.
isNullOrEmpty
(
colorStr
)){
if
(!
Strings
.
isNullOrEmpty
(
colorStr
)){
opStr
=
opStr
+
"="
+
colorStr
;
opStr
=
opStr
+
"="
+
colorStr
;
}
}
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
if
(
neeCheck
){
//判断库位是否有料,若已有料,不需要处理
StoragePos
newPos
=
storagePosManager
.
get
(
pos
.
getId
());
if
(
newPos
.
getBarcode
()!=
null
){
log
.
info
(
"自动关闭库位:"
+
pos
.
getPosName
()+
"时,库位已有料,不需要处理自动关闭"
);
return
;
}
else
{
log
.
info
(
"自动关闭库位:"
+
pos
.
getPosName
());
}
}
DevicesStatusUtil
.
appendOp
(
storage
.
getCid
(),
opKey
,
opStr
);
DevicesStatusUtil
.
appendOp
(
storage
.
getCid
(),
opKey
,
opStr
);
//
log.info("操作库位["+pos.getPosName()+"]" + opKey + " : " + opStr);
log
.
info
(
"操作库位["
+
pos
.
getPosName
()+
"]"
+
opKey
+
" : "
+
opStr
);
}
}
/**
/**
* 开灯, 等30秒后关闭
* 开灯, 等30秒后关闭
*/
*/
private
void
openAndCloseLights
(
final
String
sessionId
,
final
StoragePos
pos
,
String
color
,
final
long
delayCloseTime
){
private
void
openAndCloseLights
(
final
String
token
,
final
StoragePos
pos
,
String
color
,
final
long
delayCloseTime
){
if
(
pos
==
null
){
if
(
pos
==
null
){
return
;
return
;
}
}
final
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
opPosLight
(
"open"
,
pos
,
color
);
final
String
cid
=
storage
.
getCid
();
String
lightOnStr
=
pos
.
getPosName
()
+
"="
+
color
;
DevicesStatusUtil
.
appendOp
(
cid
,
"open"
,
lightOnStr
);
log
.
info
(
"点亮库位:"
+
lightOnStr
);
//30秒后灭灯
//30秒后灭灯
Thread
closeTask
=
new
Thread
(
new
Runnable
()
{
Thread
closeTask
=
new
Thread
(
new
Runnable
()
{
@Override
@Override
public
void
run
()
{
public
void
run
()
{
try
{
try
{
Thread
.
sleep
(
delayCloseTime
);
Thread
.
sleep
(
delayCloseTime
);
// log.info("自动关闭库位:"+ pos.getPosName());
NLShelfOperateBean
operateBean
=
getOperateBean
(
token
);
opPosLight
(
"close"
,
pos
,
""
,
true
);
StoragePos
posToClose
=
operateBean
.
getPosToClose
();
}
catch
(
Exception
e
){
if
(
posToClose
!=
null
&&
posToClose
.
getPosName
().
equals
(
pos
.
getPosName
())){
boolean
autoClose
=
true
;
Collection
<
DataLog
>
queueTasks
=
taskService
.
getQueueTasks
();
for
(
DataLog
queueTask
:
queueTasks
)
{
//如果有同一个库位正在执行的任务就不关闭了
if
(
queueTask
.
getPosName
().
equals
(
posToClose
.
getPosName
())){
if
(
queueTask
.
isCheckOutTask
()){
autoClose
=
false
;
}
}
}
if
(
autoClose
){
log
.
info
(
"自动关闭库位:"
+
posToClose
.
getPosName
());
opPosLight
(
"close"
,
posToClose
,
""
);
operateBean
.
setOpPos
(
null
);
operateBean
.
setPosToClose
(
null
);
shelfPutInBeanMap
.
put
(
token
,
operateBean
);
}
}
}
catch
(
Exception
e
){
log
.
error
(
"自动关闭库位灯出错:"
+
e
.
getMessage
());
}
}
}
}
});
});
...
@@ -234,6 +242,7 @@ public class NLShelfHandler extends BaseDeviceHandler {
...
@@ -234,6 +242,7 @@ public class NLShelfHandler extends BaseDeviceHandler {
String
token
=
tokenProvider
.
getToken
(
request
);
String
token
=
tokenProvider
.
getToken
(
request
);
String
ptoken
=
token
.
substring
(
token
.
length
()-
10
);
String
ptoken
=
token
.
substring
(
token
.
length
()-
10
);
String
loginUser
=
SecurityUtils
.
getLoginUsername
();
String
loginUser
=
SecurityUtils
.
getLoginUsername
();
log
.
info
(
storageId
+
"扫到条码["
+
code
+
"]"
);
if
(
ObjectUtils
.
isEmpty
(
code
))
{
if
(
ObjectUtils
.
isEmpty
(
code
))
{
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"code"
});
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"code"
});
}
}
...
@@ -251,8 +260,6 @@ public class NLShelfHandler extends BaseDeviceHandler {
...
@@ -251,8 +260,6 @@ public class NLShelfHandler extends BaseDeviceHandler {
if
(
groupId
!=
null
&&
groupId
.
equals
(
"-1"
))
{
if
(
groupId
!=
null
&&
groupId
.
equals
(
"-1"
))
{
groupId
=
""
;
groupId
=
""
;
}
}
int
delayCloseTime
=
30000
;
String
putInColor
=
"green"
;
StoragePos
pos
=
storagePosManager
.
getByPosName
(
code
);
StoragePos
pos
=
storagePosManager
.
getByPosName
(
code
);
if
(
pos
==
null
){
if
(
pos
==
null
){
...
@@ -264,9 +271,11 @@ public class NLShelfHandler extends BaseDeviceHandler {
...
@@ -264,9 +271,11 @@ public class NLShelfHandler extends BaseDeviceHandler {
}
}
}
}
if
(
pos
!=
null
)
{
if
(
pos
!=
null
)
{
//扫描的为库位条码,先关掉上一个库位灯, 当前库位中没有物料的话点亮库位灯
closeLastPos
(
token
);
//判断库位是否是对应设备或者租
//判断库位是否是对应设备或者租
if
(
currentStorage
!=
null
)
{
if
(
currentStorage
!=
null
)
{
if
(
!
pos
.
getStorageId
().
equals
(
storageId
))
{
if
(
!
pos
.
getStorageId
().
equals
(
storageId
))
{
return
ResultBean
.
newErrorResult
(
1
,
"smfcore.shelf.pos.notInStorage"
,
"料架[{0}]中未找到库位[{1}]"
,
new
String
[]{
currentStorage
.
getName
(),
pos
.
getPosName
()});
return
ResultBean
.
newErrorResult
(
1
,
"smfcore.shelf.pos.notInStorage"
,
"料架[{0}]中未找到库位[{1}]"
,
new
String
[]{
currentStorage
.
getName
(),
pos
.
getPosName
()});
}
}
}
else
{
}
else
{
...
@@ -278,8 +287,6 @@ public class NLShelfHandler extends BaseDeviceHandler {
...
@@ -278,8 +287,6 @@ public class NLShelfHandler extends BaseDeviceHandler {
return
ResultBean
.
newErrorResult
(
1
,
"smfcore.shelf.pos.notInGroup"
,
"组中未找到库位[{0}]"
,
new
String
[]{
pos
.
getPosName
()});
return
ResultBean
.
newErrorResult
(
1
,
"smfcore.shelf.pos.notInGroup"
,
"组中未找到库位[{0}]"
,
new
String
[]{
pos
.
getPosName
()});
}
}
}
}
//扫描的为库位条码,先关掉上一个库位灯, 当前库位中没有物料的话点亮库位灯
closeLastPos
(
token
);
if
(
pos
.
getBarcode
()
!=
null
)
{
if
(
pos
.
getBarcode
()
!=
null
)
{
return
ResultBean
.
newErrorResult
(
1
,
"smfcore.shelf.msg.hasReel"
,
"库位中[{0}]已有物料"
,
new
String
[]{
pos
.
getPosName
()});
return
ResultBean
.
newErrorResult
(
1
,
"smfcore.shelf.msg.hasReel"
,
"库位中[{0}]已有物料"
,
new
String
[]{
pos
.
getPosName
()});
}
else
{
}
else
{
...
@@ -288,38 +295,30 @@ public class NLShelfHandler extends BaseDeviceHandler {
...
@@ -288,38 +295,30 @@ public class NLShelfHandler extends BaseDeviceHandler {
NLShelfOperateBean
operateBean
=
getOperateBean
(
token
);
NLShelfOperateBean
operateBean
=
getOperateBean
(
token
);
operateBean
.
setOpPos
(
pos
);
operateBean
.
setOpPos
(
pos
);
operateBean
.
setPosToClose
(
pos
);
operateBean
.
setPosToClose
(
pos
);
operateBean
.
setNextPosId
(
null
);
shelfPutInBeanMap
.
put
(
token
,
operateBean
);
shelfPutInBeanMap
.
put
(
token
,
operateBean
);
log
.
info
(
ptoken
+
":库位["
+
pos
.
getPosName
()
+
"]操作成功,请扫描要放入的物料"
);
log
.
info
(
ptoken
+
":库位["
+
pos
.
getPosName
()
+
"]操作成功,请扫描要放入的物料"
);
return
ResultBean
.
newOkResult
(
"smfcore.shelf.msg.tipScanReel"
,
"库位["
+
pos
.
getPosName
()
+
"]操作成功,请扫描要放入的物料"
,
new
String
[]{
pos
.
getPosName
()},
pos
.
getPosName
());
return
ResultBean
.
newOkResult
(
"smfcore.shelf.msg.tipScanReel"
,
"库位["
+
pos
.
getPosName
()
+
"]操作成功,请扫描要放入的物料"
,
new
String
[]{
pos
.
getPosName
()},
pos
.
getPosName
());
}
}
}
else
{
}
else
{
//扫的是物料条码
//先判断库存中有没有此条码
Barcode
barcode
=
codeResolve
.
resolveOneValideBarcode
(
"=1x1="
+
code
);
ResultBean
resultBean
=
outProcess
(
code
,
sourceId
,
loginUser
);
Date
expireDate
=
barcode
.
getExpireDate
();
if
(
resultBean
!=
null
){
if
(
expireDate
!=
null
)
{
return
resultBean
;
if
(
System
.
currentTimeMillis
()
>
expireDate
.
getTime
())
{
throw
new
ValidateException
(
"smfcore.error.barcode.expired"
,
"物料已过期,无法入库."
);
}
}
resultBean
=
putInProcess
(
code
,
token
,
loginUser
);
if
(
resultBean
!=
null
){
return
resultBean
;
}
}
}
try
{
return
ResultBean
.
newOkResult
(
""
);
// if(barcode.getPlateSize() == 1){
// //长宽为1的需要弹框设置尺寸
// throw new ValidateException("error.barcode.errorSize","条码未设置尺寸");
// }
long
now
=
System
.
currentTimeMillis
();
//5秒内同一个条码忽略
Date
usedDate
=
barcode
.
getUsedDate
();
if
(
usedDate
!=
null
&&
now
-
usedDate
.
getTime
()
<
5000
)
{
return
ResultBean
.
newErrorResult
(
1
,
"smfcore.shelf.msg.fastop"
,
"条码操作频繁,请稍后再试"
);
}
}
StoragePos
inPos
=
storagePosManager
.
getByBarcodeId
(
barcode
.
getId
());
private
ResultBean
outProcess
(
String
code
,
String
sourceId
,
String
loginUser
){
StoragePos
inPos
=
storagePosManager
.
getByBarcode
(
code
);
if
(
inPos
!=
null
)
{
if
(
inPos
!=
null
)
{
Collection
<
DataLog
>
allTasks
=
taskService
.
getQueueTasks
();
Collection
<
DataLog
>
allTasks
=
taskService
.
getQueueTasks
();
for
(
DataLog
task
:
allTasks
)
{
for
(
DataLog
task
:
allTasks
)
{
if
(
task
.
isCheckOutTask
()
&&
task
.
getBarcode
()
!=
null
&&
task
.
getBarcode
().
equals
(
barcode
.
getBarcode
()
))
{
if
(
task
.
isCheckOutTask
()
&&
task
.
getBarcode
()
!=
null
&&
task
.
getBarcode
().
equals
(
code
))
{
if
(
ObjectUtil
.
isNotEmpty
(
sourceId
)
&&
!
sourceId
.
equals
(
task
.
getSourceId
()))
{
if
(
ObjectUtil
.
isNotEmpty
(
sourceId
)
&&
!
sourceId
.
equals
(
task
.
getSourceId
()))
{
LiteOrder
liteOrder
=
liteOrderManager
.
get
(
sourceId
);
LiteOrder
liteOrder
=
liteOrderManager
.
get
(
sourceId
);
if
(
liteOrder
!=
null
)
{
if
(
liteOrder
!=
null
)
{
...
@@ -330,62 +329,52 @@ public class NLShelfHandler extends BaseDeviceHandler {
...
@@ -330,62 +329,52 @@ public class NLShelfHandler extends BaseDeviceHandler {
}
}
}
}
taskService
.
addTaskToFinished
(
inPos
,
null
,
loginUser
);
taskService
.
addTaskToFinished
(
inPos
,
null
,
loginUser
);
opPosLight
(
"close"
,
inPos
,
null
,
false
);
opPosLight
(
"close"
,
inPos
,
""
);
log
.
info
(
barcode
.
getBarcode
()
+
" 出库完成, 库位["
+
inPos
.
getPosName
()
+
"]灭灯"
);
log
.
info
(
code
+
" 出库完成, 库位["
+
inPos
.
getPosName
()
+
"]灭灯"
);
return
ResultBean
.
newOkResult
(
"smfcore.shelf.msg.outConfirm"
,
"出库完成, 库位[{0}]灭灯"
,
new
String
[]{
inPos
.
getPosName
()}
);
return
ResultBean
.
newOkResult
(
"smfcore.shelf.msg.outConfirm"
,
"出库完成, 库位[{0}]灭灯"
,
new
String
[]{
inPos
.
getPosName
()}
);
}
}
}
}
return
ResultBean
.
newErrorResult
(
1
,
"smfcore.shelf.msg.noTask"
,
"操作失败,已在库位[{0}]中,未找到对应的出库任务"
,
new
String
[]{
inPos
.
getPosName
()});
return
ResultBean
.
newErrorResult
(
1
,
"smfcore.shelf.msg.noTask"
,
"操作失败,已在库位[{0}]中,未找到对应的出库任务"
,
new
String
[]{
inPos
.
getPosName
()});
}
}
return
null
;
}
private
ResultBean
putInProcess
(
String
code
,
String
token
,
String
loginUser
){
String
barcodeStr
=
"=1x1="
+
code
;
//扫的是物料条码
Barcode
barcode
=
smfApi
.
canPutInBeforeResolve
(
barcodeStr
);
if
(
barcode
==
null
){
barcode
=
codeResolve
.
resolveOneValideBarcode
(
barcodeStr
);
}
barcode
=
smfApi
.
canPutInAfterResolve
(
barcode
);
if
(
barcode
==
null
){
throw
new
ValidateException
(
"smfcore.error.barcode.invalid"
,
"{0}不是有效的条码"
,
new
String
[]{
code
});
}
Date
expireDate
=
barcode
.
getExpireDate
();
if
(
expireDate
!=
null
)
{
if
(
System
.
currentTimeMillis
()
>
expireDate
.
getTime
())
{
throw
new
ValidateException
(
"smfcore.error.barcode.expired"
,
"物料已过期,无法入库."
);
}
}
try
{
long
now
=
System
.
currentTimeMillis
();
//5秒内同一个条码忽略
Date
usedDate
=
barcode
.
getUsedDate
();
if
(
usedDate
!=
null
&&
now
-
usedDate
.
getTime
()
<
5000
)
{
return
ResultBean
.
newErrorResult
(
1
,
"smfcore.shelf.msg.fastop"
,
"条码操作频繁,请稍后再试"
);
}
String
ptoken
=
token
.
substring
(
token
.
length
()-
10
);
//入库
//入库
NLShelfOperateBean
operateBean
=
getOperateBean
(
token
);
NLShelfOperateBean
operateBean
=
getOperateBean
(
token
);
StoragePos
opPos
=
operateBean
.
getOpPos
();
StoragePos
opPos
=
operateBean
.
getOpPos
();
currentStorage
=
dataCache
.
getStorageById
(
opPos
.
getStorageId
());
if
(
opPos
==
null
)
{
if
(
opPos
==
null
)
{
//未扫描库位
//未扫描库位
String
operatePosId
=
operateBean
.
getNextPosId
();
if
(
Strings
.
isNullOrEmpty
(
operatePosId
))
{
log
.
info
(
ptoken
+
":条码["
+
code
+
"],请先扫描库位码"
);
log
.
info
(
ptoken
+
":条码["
+
code
+
"],请先扫描库位码"
);
return
ResultBean
.
newErrorResult
(
1
,
"smfcore.shelf.msg.scanPos"
,
"请先扫描库位码"
);
return
ResultBean
.
newErrorResult
(
1
,
"smfcore.shelf.msg.scanPos"
,
"请先扫描库位码"
);
}
else
{
}
else
{
//有下一个库位
Storage
currentStorage
=
dataCache
.
getStorageById
(
opPos
.
getStorageId
());
StoragePos
currentPos
=
storagePosManager
.
get
(
String
.
valueOf
(
operatePosId
));
if
(
currentPos
!=
null
)
{
//入库单验证
ResultBean
resultBean
=
inListCache
.
inListValidate
(
currentStorage
.
getInListName
(),
barcode
.
getPartNumber
()
);
if
(!
resultBean
.
isOkResult
()){
return
resultBean
;
}
canBarcodePutInPos
(
currentPos
,
barcode
);
//验证通过,先灭上一个库位灯
closeLastPos
(
token
);
//打开下一个库位灯
openAndCloseLights
(
token
,
currentPos
,
putInColor
,
delayCloseTime
);
taskService
.
addTaskToFinished
(
currentPos
,
barcode
,
loginUser
);
operateBean
.
setOpPos
(
null
);
operateBean
.
setPosToClose
(
currentPos
);
Collection
<
String
>
operatingPosIds
=
taskService
.
excludePosIds
();
StoragePos
nextPos
=
storagePosManager
.
autoFindNextEmptyPos
(
currentStorage
,
operatingPosIds
,
currentPos
);
String
nextPosId
=
nextPos
==
null
?
"null"
:
nextPos
.
getId
()
+
"["
+
nextPos
.
getPosName
()
+
"]"
;
String
data
=
nextPos
==
null
?
""
:
nextPos
.
getPosName
();
//
operateBean
.
setNextPosId
(
null
);
if
(
nextPos
!=
null
)
{
operateBean
.
setNextPosId
(
nextPos
.
getId
());
}
shelfPutInBeanMap
.
put
(
token
,
operateBean
);
log
.
info
(
ptoken
+
":条码["
+
code
+
"]入库操作成功,请放入库位 ["
+
currentPos
.
getPosName
()
+
"],下一个库位号:"
+
nextPosId
);
return
ResultBean
.
newOkResult
(
"smfcore.shelf.msg.inOk"
,
"操作成功,请放入库位["
+
currentPos
.
getPosName
()
+
"]"
,
new
String
[]{
currentPos
.
getPosName
()},
data
);
}
}
}
else
{
//入库单验证
//入库单验证
ResultBean
resultBean
=
inListCache
.
inListValidate
(
currentStorage
.
getInListName
(),
barcode
.
getPartNumber
()
);
ResultBean
resultBean
=
inListCache
.
inListValidate
(
currentStorage
.
getInListName
(),
barcode
.
getPartNumber
()
);
if
(!
resultBean
.
isOkResult
()){
if
(!
resultBean
.
isOkResult
()){
...
@@ -399,32 +388,15 @@ public class NLShelfHandler extends BaseDeviceHandler {
...
@@ -399,32 +388,15 @@ public class NLShelfHandler extends BaseDeviceHandler {
//放入后不需要灭灯,也不需要亮灯,等下一个条码扫到时再灭灯
//放入后不需要灭灯,也不需要亮灯,等下一个条码扫到时再灭灯
operateBean
.
setOpPos
(
null
);
operateBean
.
setOpPos
(
null
);
// Long nextPosId = Long.valueOf(opPos.getId()) + 1;
// operateBean.setNextPosId(String.valueOf(nextPosId));
// shelfPutInBeanMap.put(token, operateBean);
Collection
<
String
>
operatingPosIds
=
taskService
.
excludePosIds
();
StoragePos
nextPos
=
storagePosManager
.
autoFindNextEmptyPos
(
currentStorage
,
operatingPosIds
,
opPos
);
String
nextPosId
=
nextPos
==
null
?
"null"
:
nextPos
.
getId
()
+
"["
+
nextPos
.
getPosName
()
+
"]"
;
String
data
=
nextPos
==
null
?
""
:
nextPos
.
getPosName
();
//
operateBean
.
setNextPosId
(
null
);
if
(
nextPos
!=
null
)
{
operateBean
.
setNextPosId
(
nextPos
.
getId
());
}
shelfPutInBeanMap
.
put
(
token
,
operateBean
);
shelfPutInBeanMap
.
put
(
token
,
operateBean
);
log
.
info
(
ptoken
+
":条码["
+
code
+
"]入库操作成功,请放入库位 ["
+
opPos
.
getPosName
()+
"],下一个库位号:"
+
nextPosId
);
log
.
info
(
ptoken
+
":条码["
+
code
+
"]入库操作成功,请放入库位 ["
+
opPos
.
getPosName
()+
"]"
);
return
ResultBean
.
newOkResult
(
"smfcore.shelf.msg.inOk"
,
"操作成功,请放入库位["
+
opPos
.
getPosName
()+
"]"
,
new
String
[]{
opPos
.
getPosName
()},
data
);
return
ResultBean
.
newOkResult
(
"smfcore.shelf.msg.inOk"
,
"操作成功,请放入库位["
+
opPos
.
getPosName
()+
"]"
,
new
String
[]{
opPos
.
getPosName
()},
""
);
}
}
}
catch
(
ValidateException
e
)
{
}
catch
(
ValidateException
e
)
{
log
.
error
(
"Error:"
+
e
.
getMessage
());
log
.
error
(
"Error:"
+
e
.
getMessage
());
return
ResultBean
.
newErrorResult
(
1
,
e
.
getMessage
(),
e
.
getMessage
(),
e
.
getMsgParam
());
return
ResultBean
.
newErrorResult
(
1
,
e
.
getMessage
(),
e
.
getMessage
(),
e
.
getMsgParam
());
}
}
}
}
return
ResultBean
.
newOkResult
(
""
);
}
/**
/**
* 获取料架的库位占用情况
* 获取料架的库位占用情况
...
...
src/main/java/com/neotel/smfcore/core/storage/rest/MaterialController.java
查看文件 @
6bc6369
...
@@ -132,12 +132,16 @@ public class MaterialController {
...
@@ -132,12 +132,16 @@ public class MaterialController {
Sort
.
Order
partNumberOrder
=
pageable
.
getSort
().
getOrderFor
(
"partNumber"
);
Sort
.
Order
partNumberOrder
=
pageable
.
getSort
().
getOrderFor
(
"partNumber"
);
if
(
partNumberOrder
!=
null
){
if
(
partNumberOrder
!=
null
){
comparator
=
Comparator
.
comparing
(
InventoryItemDto:
:
getPartNumber
,
Comparator
.
nullsFirst
(
String:
:
compareTo
));
comparator
=
Comparator
.
comparing
(
InventoryItemDto:
:
getPartNumber
,
Comparator
.
nullsFirst
(
String:
:
compareTo
));
if
(
stockCount
Order
.
isDescending
()){
if
(
partNumber
Order
.
isDescending
()){
comparator
=
comparator
.
reversed
();
comparator
=
comparator
.
reversed
();
}
}
}
}
resultList
=
resultList
.
stream
().
sorted
(
comparator
).
collect
(
Collectors
.
toList
());
resultList
=
resultList
.
stream
().
sorted
(
comparator
).
collect
(
Collectors
.
toList
());
// System.out.println("================");
// for (InventoryItemDto dto : resultList) {
// System.out.println(dto.getPartNumber() + "---" + dto.getStockCount() + " --- " + dto.getStockReel());
// }
return
resultList
;
return
resultList
;
}
}
...
...
src/main/java/com/neotel/smfcore/core/system/util/TaskService.java
查看文件 @
6bc6369
...
@@ -176,6 +176,7 @@ public class TaskService {
...
@@ -176,6 +176,7 @@ public class TaskService {
for
(
DataLog
task
:
tasks
)
{
for
(
DataLog
task
:
tasks
)
{
String
barcode
=
taskToExecute
.
getBarcode
();
String
barcode
=
taskToExecute
.
getBarcode
();
String
posName
=
taskToExecute
.
getPosName
();
String
posName
=
taskToExecute
.
getPosName
();
if
(
task
.
getType
()
==
taskToExecute
.
getType
()){
if
(!
Strings
.
isNullOrEmpty
(
barcode
)
&&
task
.
getBarcode
().
equals
(
barcode
))
{
if
(!
Strings
.
isNullOrEmpty
(
barcode
)
&&
task
.
getBarcode
().
equals
(
barcode
))
{
log
.
info
(
"二维码:["
+
barcode
+
"]已在操作队列中,操作失败"
);
log
.
info
(
"二维码:["
+
barcode
+
"]已在操作队列中,操作失败"
);
throw
new
ValidateException
(
"smfcore.error.barcode.inQueue"
,
"二维码[{0}]已在操作队列中,操作失败"
,
new
String
[]{
barcode
});
throw
new
ValidateException
(
"smfcore.error.barcode.inQueue"
,
"二维码[{0}]已在操作队列中,操作失败"
,
new
String
[]{
barcode
});
...
@@ -184,6 +185,7 @@ public class TaskService {
...
@@ -184,6 +185,7 @@ public class TaskService {
throw
new
ValidateException
(
"smfcore.error.pos.inQueue"
,
"位置:[{0}}]已在操作队列中,操作失败"
,
new
String
[]{
posName
});
throw
new
ValidateException
(
"smfcore.error.pos.inQueue"
,
"位置:[{0}}]已在操作队列中,操作失败"
,
new
String
[]{
posName
});
}
}
}
}
}
updateQueueTask
(
taskToExecute
);
updateQueueTask
(
taskToExecute
);
}
}
...
...
src/main/java/com/neotel/smfcore/custom/siemens/SiemensApi.java
查看文件 @
6bc6369
...
@@ -21,13 +21,11 @@ import java.util.HashMap;
...
@@ -21,13 +21,11 @@ import java.util.HashMap;
import
java.util.Map
;
import
java.util.Map
;
/**
/**
* Siemens
* api:
* #host: "140.231.193.101"
* name: Siemens
* port:
* inCheckUrl: http://cnctu04053:8014/api/JsonC
* #url: "http://cnctu04053:8014/api/JsonC"
* outNotifyUrl: http://cnctu04053:8014/api/JsonC
* #url_checkIn: "http://cnctu04053:8014/api/JsonC"
* inNotifyUrl: http://cnctu04053:8014/api/JsonC
* #url: "http://cnctu041p059:8014/api/JsonC"
* #url: "http://cnctu04053:8014/api/JsonC"
*
*
* action:
* action:
* GetMaterialLot: "http://siplace.com/facts/materiallot/2010/01/MaterialLot/GetMaterialLot"
* GetMaterialLot: "http://siplace.com/facts/materiallot/2010/01/MaterialLot/GetMaterialLot"
...
@@ -72,7 +70,6 @@ public class SiemensApi extends BaseSmfApiListener {
...
@@ -72,7 +70,6 @@ public class SiemensApi extends BaseSmfApiListener {
private
static
boolean
lotInOut
(
String
url
,
String
lot
,
int
inoutType
)
{
private
static
boolean
lotInOut
(
String
url
,
String
lot
,
int
inoutType
)
{
//String url=config.url;
//String url=config.url;
if
(
ObjectUtil
.
isEmpty
(
url
))
{
if
(
ObjectUtil
.
isEmpty
(
url
))
{
log
.
info
(
"没有配置Siemens,无需通知"
);
log
.
info
(
"没有配置Siemens,无需通知"
);
...
@@ -129,13 +126,15 @@ public class SiemensApi extends BaseSmfApiListener {
...
@@ -129,13 +126,15 @@ public class SiemensApi extends BaseSmfApiListener {
@Override
@Override
public
Barcode
canPutInBeforeResolve
(
String
inCheckUrl
,
String
codeStr
)
throws
ValidateException
{
public
Barcode
canPutInBeforeResolve
(
String
inCheckUrl
,
String
codeStr
)
throws
ValidateException
{
if
(
ObjectUtil
.
isEmpty
(
inCheckUrl
))
{
log
.
info
(
"没有配置Siemens,无需验证"
);
return
null
;
}
try
{
try
{
Collection
<
CodeBean
>
codeBeans
=
codeResolve
.
resolveCodeStr
(
codeStr
,
COMPONENT_TYPE
.
COMPONENT
);
Collection
<
CodeBean
>
codeBeans
=
codeResolve
.
resolveCodeStr
(
codeStr
,
COMPONENT_TYPE
.
COMPONENT
);
boolean
ok
=
false
;
for
(
CodeBean
codebean
:
codeBeans
)
{
for
(
CodeBean
codebean
:
codeBeans
)
{
if
(
codebean
.
hasReelSizeInfo
())
{
if
(
codebean
.
hasReelSizeInfo
())
{
LotCheckInfo
info
=
lotCheckIn
(
codebean
.
getCodeStr
());
LotCheckInfo
info
=
lotCheckIn
(
codebean
.
getCodeStr
()
,
inCheckUrl
);
if
(
info
!=
null
&&
info
.
isStatus
()
&&
ObjectUtil
.
isNotEmpty
(
info
.
getPartnum
())
&&
ObjectUtil
.
isNotEmpty
(
info
.
getQuantity
()))
{
if
(
info
!=
null
&&
info
.
isStatus
()
&&
ObjectUtil
.
isNotEmpty
(
info
.
getPartnum
())
&&
ObjectUtil
.
isNotEmpty
(
info
.
getQuantity
()))
{
//查找元器件是否存在
//查找元器件是否存在
com
.
neotel
.
smfcore
.
core
.
barcode
.
service
.
po
.
Component
component
=
componentManager
.
findOneByPN
(
info
.
getPartnum
());
com
.
neotel
.
smfcore
.
core
.
barcode
.
service
.
po
.
Component
component
=
componentManager
.
findOneByPN
(
info
.
getPartnum
());
...
@@ -155,7 +154,7 @@ public class SiemensApi extends BaseSmfApiListener {
...
@@ -155,7 +154,7 @@ public class SiemensApi extends BaseSmfApiListener {
}
}
//判断条码是否存在
//判断条码是否存在
Barcode
barcode
=
barcodeManager
.
get
(
codebean
.
getCodeStr
());
Barcode
barcode
=
barcodeManager
.
findByBarcode
(
codebean
.
getCodeStr
());
if
(
barcode
==
null
)
{
if
(
barcode
==
null
)
{
barcode
=
new
Barcode
();
barcode
=
new
Barcode
();
barcode
.
setPlateSize
(
component
.
getPlateSize
());
barcode
.
setPlateSize
(
component
.
getPlateSize
());
...
@@ -179,15 +178,14 @@ public class SiemensApi extends BaseSmfApiListener {
...
@@ -179,15 +178,14 @@ public class SiemensApi extends BaseSmfApiListener {
}
}
}
}
throw
new
ValidateException
(
"siemens.barcode.failed"
,
"SIEMENS条码验证失败"
);
}
catch
(
Exception
ex
)
{
}
catch
(
Exception
ex
)
{
log
.
info
(
"siemensCheckCode 验证条码 ["
+
codeStr
+
"] 出错:"
,
ex
);
log
.
info
(
"siemensCheckCode 验证条码 ["
+
codeStr
+
"] 出错:"
,
ex
);
throw
new
ValidateException
(
"siemens.barcode.error"
,
"SIEMENS条码验证出错:"
+
ex
.
getMessage
());
}
}
return
null
;
}
}
public
static
LotCheckInfo
lotCheckIn
(
String
lot
)
{
public
static
LotCheckInfo
lotCheckIn
(
String
lot
,
String
url
)
{
//String url = config.url_checkIn;
String
url
=
""
;
if
(
ObjectUtil
.
isEmpty
(
url
))
{
if
(
ObjectUtil
.
isEmpty
(
url
))
{
log
.
info
(
"没有配置Siemens,无需验证"
);
log
.
info
(
"没有配置Siemens,无需验证"
);
return
null
;
return
null
;
...
...
src/main/java/com/neotel/smfcore/custom/siemens/bean/LotCheckInfo.java
查看文件 @
6bc6369
...
@@ -40,10 +40,16 @@ public class LotCheckInfo implements Serializable {
...
@@ -40,10 +40,16 @@ public class LotCheckInfo implements Serializable {
lotCheckInfo
.
setCode
(
map
.
get
(
"Code"
).
toString
());
lotCheckInfo
.
setCode
(
map
.
get
(
"Code"
).
toString
());
}
}
if
(
map
.
containsKey
(
"partnum"
))
{
if
(
map
.
containsKey
(
"partnum"
))
{
lotCheckInfo
.
setPartnum
(
map
.
get
(
"partnum"
).
toString
());
Object
partnum
=
map
.
get
(
"partnum"
);
if
(
partnum
!=
null
){
lotCheckInfo
.
setPartnum
(
partnum
.
toString
());
}
}
}
if
(
map
.
containsKey
(
"quantity"
))
{
if
(
map
.
containsKey
(
"quantity"
))
{
lotCheckInfo
.
setQuantity
(
Integer
.
parseInt
(
map
.
get
(
"quantity"
).
toString
()));
Object
quantity
=
map
.
get
(
"quantity"
);
if
(
quantity
!=
null
){
lotCheckInfo
.
setQuantity
(
Integer
.
parseInt
(
quantity
.
toString
()));
}
}
}
return
lotCheckInfo
;
return
lotCheckInfo
;
}
}
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论