Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 339dbb7a
由
zshaohui
编写于
2025-08-26 16:40:39 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1.移库bug修改
2.增加库位是否锁定功能
1 个父辈
4864f134
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
121 行增加
和
29 行删除
src/main/java/com/neotel/smfcore/core/device/rest/DeviceController.java
src/main/java/com/neotel/smfcore/core/storage/rest/StoragePosController.java
src/main/java/com/neotel/smfcore/custom/Jkem21481/bean/StorageExportOutDetail.java
src/main/java/com/neotel/smfcore/custom/Jkem21481/controller/JkemController.java
src/main/java/com/neotel/smfcore/custom/Jkem21481/controller/StorageExportController.java
src/main/java/com/neotel/smfcore/custom/Jkem21481/controller/UmExportSettingController.java
src/main/java/com/neotel/smfcore/custom/Jkem21481/manager/impl/ReturnStorageManagerImpl.java
src/main/resources/config/application-prod.yml
src/main/java/com/neotel/smfcore/core/device/rest/DeviceController.java
查看文件 @
339dbb7
...
...
@@ -881,6 +881,10 @@ public class DeviceController {
posName
=
""
;
}
}
if
(
StringUtils
.
isEmpty
(
posName
)){
ReelLockPosUtil
.
removeReelLockPosInfo
(
getLockPosSKey
(
needMovePos
.
getStorageId
()));
}
//不从外侧库位进行查找
/*if (StringUtils.isEmpty(posName)) {
lockPosInfo = ReelLockPosUtil.getLockPosInfoByCode(getLockPosKey(needMovePos.getStorageId()));
...
...
src/main/java/com/neotel/smfcore/core/storage/rest/StoragePosController.java
查看文件 @
339dbb7
...
...
@@ -344,6 +344,18 @@ public class StoragePosController {
return
ResultBean
.
newOkResult
(
""
);
}
@ApiOperation
(
"批量解除锁定库位"
)
@RequestMapping
(
"/batchRemoveLockPosId"
)
public
ResultBean
batchRemoveLockPosId
(
@RequestBody
List
<
String
>
posIdList
)
{
if
(
posIdList
!=
null
&&
!
posIdList
.
isEmpty
())
{
for
(
String
posId
:
posIdList
)
{
ReelLockPosUtil
.
removeLockPosId
(
posId
);
}
}
return
ResultBean
.
newOkResult
(
""
);
}
private
Query
getPosFindCriteria
(
StoragePosFindCriteria
criteria
){
if
(
ObjectUtil
.
isNotEmpty
(
criteria
.
getStorageId
())
&&
criteria
.
getStorageId
().
equals
(
"0"
))
{
criteria
.
setStorageId
(
null
);
...
...
src/main/java/com/neotel/smfcore/custom/Jkem21481/bean/StorageExportOutDetail.java
查看文件 @
339dbb7
...
...
@@ -16,4 +16,6 @@ public class StorageExportOutDetail {
private
String
status
;
private
String
lastStatus
;
private
boolean
hasReel
=
true
;
}
src/main/java/com/neotel/smfcore/custom/Jkem21481/controller/JkemController.java
查看文件 @
339dbb7
...
...
@@ -154,49 +154,90 @@ public class JkemController {
if
(
barcode
==
null
)
{
throw
new
ValidateException
(
"smfcore.error.barcode.invalid"
,
"未找到有效的条码"
);
}
boolean
box
=
barcode
.
isBox
();
if
(
box
){
/*
boolean box = barcode.isBox();
if (box){
*/
int
checkingAmount
=
barcode
.
getCheckingAmount
();
if
(
checkingAmount
>
0
||
StringUtils
.
isNotEmpty
(
barcode
.
getOrderNo
())){
log
.
info
(
barcode
.
getBarcode
()+
"为治具盒,点料数量为:"
+
checkingAmount
+
"需要清空"
);
barcode
.
setCheckingAmount
(
0
);
barcode
.
setOrderId
(
""
);
barcode
.
setOrderNo
(
""
);
barcode
.
setOrderItemId
(
""
);
barcode
.
setFeederInfo
(
""
);
barcode
.
setMpn
(
""
);
barcodeManager
.
save
(
barcode
);
}
}
//判断是不是要入到指定的料仓
List
<
String
>
newCidList
=
new
ArrayList
<>();
List
<
Storage
>
newStorageList
=
new
ArrayList
<>();
//}
//判断是否为温湿度管控
int
msd
=
0
;
MJPartNumber
mjPartNumber
=
partNumberManager
.
findByJkemPartNumber
(
barcode
.
getPartNumber
());
if
(
mjPartNumber
!=
null
)
{
if
(
mjPartNumber
!=
null
){
log
.
info
(
barcode
.
getBarcode
()
+
"查询到的信息为:"
+
JSON
.
toJSONString
(
mjPartNumber
));
int
msd
=
mjPartNumber
.
getMsd
();
msd
=
mjPartNumber
.
getMsd
();
}
//判断是抛ng还是流水线
boolean
ngReel
=
true
;
for
(
Storage
storage
:
dataCache
.
getAllStorage
().
values
())
{
if
(
msd
==
1
)
{
for
(
String
cid
:
cidList
)
{
if
(
msdCidList
.
contains
(
cid
))
{
newCidList
.
add
(
cid
);
Storage
storage
=
dataCache
.
getStorage
(
cid
)
;
newStorageList
.
add
(
storage
)
;
if
(
storage
.
isMsdControl
()
)
{
boolean
canPutIn
=
storage
.
canPutIn
(
barcode
.
getPlateSize
(),
barcode
.
getHeight
());
if
(
canPutIn
)
{
ngReel
=
false
;
break
;
}
}
if
(
newCidList
==
null
||
newCidList
.
isEmpty
())
{
throw
new
ValidateException
(
"smf.barcode.msd.validate"
,
"该物料需要MSD管控不能在本料仓入库"
);
}
}
else
{
newCidList
.
addAll
(
cidList
);
newStorageList
.
addAll
(
storageList
);
if
(!
storage
.
isMsdControl
())
{
boolean
canPutIn
=
storage
.
canPutIn
(
barcode
.
getPlateSize
(),
barcode
.
getHeight
());
if
(
canPutIn
)
{
ngReel
=
false
;
break
;
}
}
}
}
else
{
newCidList
.
addAll
(
cidList
);
newStorageList
.
addAll
(
storageList
);
}
if
(
ngReel
)
{
errorMsg
=
barcode
.
getBarcode
()+
"没有符合条件可以入库的料仓"
;
log
.
info
(
errorMsg
);
resultMap
.
put
(
"result"
,
"-1"
);
resultMap
.
put
(
"msg"
,
errorMsg
);
return
resultMap
;
}
//判断是不是要入到指定的料仓
List
<
String
>
newCidList
=
new
ArrayList
<>();
List
<
Storage
>
newStorageList
=
new
ArrayList
<>();
if
(
msd
==
1
)
{
for
(
String
cid
:
cidList
)
{
if
(
msdCidList
.
contains
(
cid
))
{
newCidList
.
add
(
cid
);
Storage
storage
=
dataCache
.
getStorage
(
cid
);
newStorageList
.
add
(
storage
);
}
}
if
(
newCidList
==
null
||
newCidList
.
isEmpty
())
{
throw
new
ValidateException
(
"smf.barcode.msd.validate"
,
"该物料需要MSD管控不能在本料仓入库"
);
}
}
else
{
for
(
String
cid
:
cidList
)
{
Storage
storage
=
dataCache
.
getStorage
(
cid
);
if
(
storage
.
isMsdControl
())
{
continue
;
}
newCidList
.
add
(
cid
);
}
for
(
Storage
storage
:
storageList
)
{
if
(
storage
.
isMsdControl
())
{
continue
;
}
newStorageList
.
add
(
storage
);
}
}
//判断对应的尺寸,外侧的库位,是否保留5个
List
<
String
>
findCidList
=
new
ArrayList
<>();
List
<
Storage
>
findNewStorageList
=
new
ArrayList
<>();
for
(
Storage
storage
:
newStorageList
)
{
int
count
=
storagePosManager
.
getRemainPosCountByStorage
(
storage
,
barcode
,
taskService
.
excludePosIds
(),
""
,
"_F"
);
if
(
count
>
5
)
{
...
...
@@ -206,6 +247,8 @@ public class JkemController {
log
.
info
(
storage
.
getCid
()+
"对应的尺寸:"
+
barcode
.
getPlateSize
()+
"x"
+
barcode
.
getHeight
()+
"外侧库位数量小于等于5个,忽略不入库"
);
}
}
if
(
findNewStorageList
==
null
||
findNewStorageList
.
isEmpty
()){
throw
new
ValidateException
(
"smfcore.noValidStorage"
,
"[{0}]料仓列表中未找到可用的料仓"
,
new
String
[]{
barcode
.
getBarcode
()});
}
...
...
@@ -257,6 +300,8 @@ public class JkemController {
StoragePos
pos
=
null
;
int
loopCount
=
0
;
List
<
String
>
needRemoveLockPosId
=
new
ArrayList
<>();
while
(
pos
==
null
)
{
loopCount
++;
if
(
loopCount
>=
10
)
{
...
...
@@ -288,6 +333,7 @@ public class JkemController {
reelLocInfo
.
setLockPosName
(
pos
.
getPosName
());
reelLocInfo
.
setLockPosId
(
pos
.
getId
());
ReelLockPosUtil
.
addReelLockPosInfo
(
reelLocInfo
,
findCidList
);
needRemoveLockPosId
.
add
(
pos
.
getId
());
// needRemoveReelLockPosIdList.add(pos.getId());
pos
=
null
;
}
...
...
@@ -295,6 +341,14 @@ public class JkemController {
}
}
//判断有没有锁定的异常库位
if
(
needRemoveLockPosId
!=
null
&&
!
needRemoveLockPosId
.
isEmpty
()){
for
(
String
posId
:
needRemoveLockPosId
)
{
ReelLockPosUtil
.
removeReelLockPosInfo
(
posId
);
}
}
if
(
pos
!=
null
)
{
Storage
theStorage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
resultMap
.
put
(
"result"
,
"0"
);
...
...
@@ -548,6 +602,10 @@ public class JkemController {
newBarcode
.
setPartNumber
(
barcode
.
getPartNumber
());
barcodeManager
.
save
(
newBarcode
);
//设置分盘的信息
barcode
.
setTraySeparationBarcode
(
newBarcode
.
getBarcode
());
barcodeManager
.
save
(
barcode
);
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
resultMap
.
put
(
"barcode"
,
barcode
.
getBarcode
());
...
...
@@ -594,13 +652,21 @@ public class JkemController {
barcodeManager
.
save
(
barcode
);
DataLog
dataLog
=
new
DataLog
();
dataLog
.
setBarcode
(
barcode
.
getBarcode
());
if
(
StringUtils
.
isNotEmpty
(
barcode
.
getTraySeparationBarcode
())){
dataLog
.
setBarcode
(
barcode
.
getTraySeparationBarcode
());
}
else
{
dataLog
.
setBarcode
(
barcode
.
getBarcode
());
}
dataLog
.
setPartNumber
(
barcode
.
getPartNumber
());
dataLog
.
setNum
(
checkingAmount
);
dataLog
.
setType
(
OP
.
CHECKOUT
);
dataLog
.
setStatus
(
OP_STATUS
.
FINISHED
.
name
());
dataLog
.
setSourceId
(
barcode
.
getOrderId
());
dataLog
.
setSourceName
(
barcode
.
getOrderNo
());
dataLog
.
setSubSourceId
(
barcode
.
getOrderItemId
());
dataLog
.
setPosName
(
barcode
.
getBarcode
());
dataLog
.
setMpn
(
barcode
.
getMpn
());
dataLog
.
updateAppendData
(
"feederInfo"
,
barcode
.
getFeederInfo
());
dataLogManager
.
save
(
dataLog
);
return
ResultBean
.
newOkResult
(
""
);
}
...
...
src/main/java/com/neotel/smfcore/custom/Jkem21481/controller/StorageExportController.java
查看文件 @
339dbb7
...
...
@@ -211,9 +211,12 @@ public class StorageExportController {
if
(
detailList
!=
null
&&
!
detailList
.
isEmpty
()){
for
(
StorageExportOutDetail
detail
:
detailList
)
{
if
(
StringUtils
.
isNotEmpty
(
detail
.
getBarcode
())){
if
(!
OP_STATUS
.
ABNORMAL
.
name
().
equals
(
detail
.
getStatus
())
if
(
/*
!OP_STATUS.ABNORMAL.name().equals(detail.getStatus())
&& !OP_STATUS.FINISHED.name().equals(detail.getStatus())
&&
!
OP_STATUS
.
CANCEL
.
name
().
equals
(
detail
.
getStatus
())){
&& !OP_STATUS.CANCEL.name().equals(detail.getStatus())*/
OP_STATUS
.
WAIT
.
name
().
equals
(
detail
.
getStatus
())
||
OP_STATUS
.
EXECUTING
.
name
().
equals
(
detail
.
getStatus
())
){
showButton
=
false
;
break
;
}
...
...
src/main/java/com/neotel/smfcore/custom/Jkem21481/controller/UmExportSettingController.java
查看文件 @
339dbb7
...
...
@@ -155,6 +155,10 @@ public class UmExportSettingController {
String
export
=
lastTask
.
getExport
();
if
(
StringUtils
.
isNotEmpty
(
export
))
{
String
feederInfo
=
lastTask
.
getAppendData
(
"feederInfo"
);
Boolean
hasReel
=
lastTask
.
getAppendData
(
"hasReel"
);
if
(
hasReel
==
null
){
hasReel
=
true
;
}
StorageExportOutDetailDto
resultDto
=
new
StorageExportOutDetailDto
();
resultDto
.
setFeederInfo
(
feederInfo
);
resultDto
.
setExport
(
export
);
...
...
@@ -164,6 +168,7 @@ public class UmExportSettingController {
resultDto
.
setLastStatus
(
lastTask
.
getStatus
());
resultDto
.
setOrderFeederInfo
(
feederInfo
);
resultDto
.
setOrderNo
(
lastTask
.
getSourceName
());
resultDto
.
setHasReel
(
hasReel
);
return
ResultBean
.
newOkResult
(
resultDto
);
}
}
...
...
src/main/java/com/neotel/smfcore/custom/Jkem21481/manager/impl/ReturnStorageManagerImpl.java
查看文件 @
339dbb7
...
...
@@ -80,7 +80,7 @@ public class ReturnStorageManagerImpl implements IReturnStorageManager {
DataLog
dataLog
=
dataLogManager
.
findOne
(
new
Query
(
Criteria
.
where
(
"barcode"
).
is
(
task
.
getBarcode
())
.
and
(
"type"
).
is
(
OP
.
CHECKOUT
)
.
and
(
"posName"
).
exists
(
true
).
ne
(
""
)
//
.and("posName").exists(true).ne("")
).
with
(
Sort
.
by
(
Sort
.
Direction
.
DESC
,
"updateDate"
)));
if
(
dataLog
!=
null
)
{
log
.
info
(
dataLog
.
getBarcode
()
+
"找到上一个任务,对应的工单号为:"
+
dataLog
.
getStorageName
()
+
"任务状态为:"
+
dataLog
.
getStatus
()
+
",上次出库的任务数量为:"
+
dataLog
.
getNum
());
...
...
src/main/resources/config/application-prod.yml
查看文件 @
339dbb7
...
...
@@ -14,8 +14,8 @@ spring:
database
:
smf
# 数据库
username
:
password
:
maxConSize
:
6
00
minConsize
:
3
00
maxConSize
:
10
00
minConsize
:
5
00
#备份数据库,如果有,则开启,注意:如果主数据库设置了用户名和密码,备份服务器必须设置用户名和密码!!
#西门子的正式和备份数据库,用户名和密码都是Siemens
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论