Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 3a5ac57b
由
LN
编写于
2023-03-22 16:20:15 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
工单出库:PN出库修改。
1 个父辈
691a7087
显示空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
122 行增加
和
23 行删除
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
src/main/java/com/neotel/smfcore/core/selfAudit/rest/SelfAuditController.java
src/main/java/com/neotel/smfcore/core/selfAudit/rest/query/SelfAuditCriteria.java
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
查看文件 @
3a5ac57
...
...
@@ -91,7 +91,7 @@ public class DataCache {
/**
* 库位占用Map, key为cid,value为已使用的库位列表
*/
private
static
Map
<
String
,
List
<
St
ring
>>
usedPosName
Map
=
new
ConcurrentHashMap
<>();
private
static
Map
<
String
,
List
<
St
oragePos
>>
usedPos
Map
=
new
ConcurrentHashMap
<>();
/**
* 锡膏料仓冷藏区和回温区使用库位数, key为cid, key为 WarmPos 时value表示回温区使用数量,key为 ColdingPos 时value为冷藏区使用数量
...
...
@@ -436,40 +436,75 @@ public class DataCache {
/**
* 出库时清除使用库位列表
*/
private
void
removeUsedPosNameList
(
String
cid
,
String
posName
)
{
List
<
String
>
usedPosNameList
=
getUsedPosNameList
(
cid
);
usedPosNameList
.
remove
(
posName
);
usedPosNameMap
.
put
(
cid
,
usedPosNameList
);
private
void
removeUsedPosList
(
String
cid
,
StoragePos
pos
)
{
List
<
StoragePos
>
usedPosNameList
=
getUsedPosList
(
cid
);
// usedPosNameList.remove(posName);
Iterator
<
StoragePos
>
iterator
=
usedPosNameList
.
iterator
();
while
(
iterator
.
hasNext
())
{
StoragePos
book
=
iterator
.
next
();
if
(
book
.
getPosName
()
.
equals
(
pos
.
getPosName
()))
{
iterator
.
remove
();
break
;
}
}
List
<
StoragePos
>
list
=
new
ArrayList
<>();
iterator
.
forEachRemaining
(
list:
:
add
);
usedPosMap
.
put
(
cid
,
list
);
}
/**
* 入库时增加使用库位列表
*/
private
void
addUsedPosNameList
(
String
cid
,
String
posName
)
{
List
<
String
>
usedPosNameList
=
getUsedPosNameList
(
cid
);
usedPosNameList
.
add
(
posName
);
usedPosNameMap
.
put
(
cid
,
usedPosNameList
);
private
void
addUsedPosList
(
String
cid
,
StoragePos
pos
)
{
List
<
StoragePos
>
usedPosList
=
getUsedPosList
(
cid
);
usedPosList
.
add
(
pos
);
usedPosMap
.
put
(
cid
,
usedPosList
);
}
/**
* 获取设备所有占用的库位名称列表
*/
public
List
<
StoragePos
>
getUsedPosList
(
String
cid
)
{
List
<
StoragePos
>
allPos
=
usedPosMap
.
get
(
cid
);
if
(
allPos
==
null
)
{
Storage
storage
=
getStorage
(
cid
);
if
(
storage
!=
null
)
{
log
.
info
(
"加载["
+
cid
+
"]所有已使用库位到缓存"
);
allPos
=
storagePosManager
.
findUsedPosNameByStorageId
(
storage
.
getId
());
// for (StoragePos pos : allPos) {
// posNameList.add(pos.getPosName());
// }
usedPosMap
.
put
(
cid
,
allPos
);
}
}
return
allPos
;
}
/**
* 获取设备所有占用的库位名称列表
*/
public
List
<
String
>
getUsedPosNameList
(
String
cid
)
{
List
<
String
>
posNameList
=
usedPosNameMap
.
get
(
cid
);
if
(
posNameList
==
null
)
{
List
<
String
>
posNameList
=
new
ArrayList
<>();
List
<
StoragePos
>
allPos
=
usedPosMap
.
get
(
cid
);
if
(
allPos
==
null
)
{
Storage
storage
=
getStorage
(
cid
);
posNameList
=
new
ArrayList
<>();
if
(
storage
!=
null
)
{
log
.
info
(
"加载["
+
cid
+
"]所有已使用库位到缓存"
);
List
<
StoragePos
>
allPos
=
storagePosManager
.
findUsedPosNameByStorageId
(
storage
.
getId
());
for
(
StoragePos
pos
:
allPos
)
{
posNameList
.
add
(
pos
.
getPosName
()
);
allPos
=
storagePosManager
.
findUsedPosNameByStorageId
(
storage
.
getId
());
usedPosMap
.
put
(
cid
,
allPos
);
}
usedPosNameMap
.
put
(
cid
,
posNameList
);
}
for
(
StoragePos
pos
:
allPos
)
{
posNameList
.
add
(
pos
.
getPosName
());
}
return
posNameList
;
}
public
List
<
List
<
StoragePos
>>
getAllUsedPosMap
()
{
List
<
List
<
StoragePos
>>
posList
=
new
ArrayList
<>(
usedPosMap
.
values
());
return
posList
;
}
/**
* 锁定库存
...
...
@@ -640,13 +675,13 @@ public class DataCache {
amount
=
-
barcode
.
getAmount
();
storage
.
emptyOnePos
(
pos
);
updateSpUsePosCount
(
storage
,
pos
,
-
1
);
removeUsedPos
NameList
(
cid
,
pos
.
getPosName
()
);
removeUsedPos
List
(
cid
,
pos
);
}
else
{
//入库
amount
=
barcode
.
getAmount
();
storage
.
useOnePos
(
pos
);
updateSpUsePosCount
(
storage
,
pos
,
1
);
addUsedPos
NameList
(
cid
,
pos
.
getPosName
()
);
addUsedPos
List
(
cid
,
pos
);
//入库单处理
if
(
ObjectUtil
.
isNotEmpty
(
storage
.
getInListName
()))
{
inListCache
.
UpdateInList
(
storage
.
getInListName
(),
pos
,
barcode
);
...
...
src/main/java/com/neotel/smfcore/core/selfAudit/rest/SelfAuditController.java
查看文件 @
3a5ac57
...
...
@@ -7,12 +7,12 @@ import com.neotel.smfcore.common.exception.ValidateException;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.QueryHelp
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.materialLog.rest.query.MaterialLogCriteria
;
import
com.neotel.smfcore.core.selfAudit.enums.SELFAUDIT_STATUS
;
import
com.neotel.smfcore.core.selfAudit.rest.dto.SelfAuditDto
;
import
com.neotel.smfcore.core.selfAudit.rest.dto.SelfAuditItemDto
;
import
com.neotel.smfcore.core.selfAudit.rest.mapstruct.SelfAuditItemMapper
;
import
com.neotel.smfcore.core.selfAudit.rest.mapstruct.SelfAuditMapper
;
import
com.neotel.smfcore.core.selfAudit.rest.query.SelfAuditCriteria
;
import
com.neotel.smfcore.core.selfAudit.service.manager.ISelfAuditManager
;
import
com.neotel.smfcore.core.selfAudit.service.po.SelfAudit
;
import
com.neotel.smfcore.core.selfAudit.service.po.SelfAuditItem
;
...
...
@@ -179,7 +179,7 @@ public class SelfAuditController {
}
@ApiOperation
(
"查询盘点日志"
)
@GetMapping
(
value
=
"/list"
)
public
PageData
<
SelfAuditDto
>
queryList
(
MaterialLog
Criteria
criteria
,
Pageable
pageable
)
{
public
PageData
<
SelfAuditDto
>
queryList
(
SelfAudit
Criteria
criteria
,
Pageable
pageable
)
{
Query
query
=
QueryHelp
.
getQuery
(
criteria
);
PageData
<
SelfAudit
>
pages
=
selfAuditManager
.
findByPage
(
query
,
pageable
);
...
...
src/main/java/com/neotel/smfcore/core/selfAudit/rest/query/SelfAuditCriteria.java
0 → 100644
查看文件 @
3a5ac57
package
com
.
neotel
.
smfcore
.
core
.
selfAudit
.
rest
.
query
;
import
com.neotel.smfcore.common.annotation.QueryCondition
;
import
com.neotel.smfcore.common.bean.BetweenData
;
import
io.swagger.annotations.ApiModelProperty
;
import
org.springframework.format.annotation.DateTimeFormat
;
import
java.util.Date
;
public
class
SelfAuditCriteria
{
@QueryCondition
(
blurry
=
"barcode,posName,locInfo"
)
private
String
blurry
;
@QueryCondition
(
type
=
QueryCondition
.
Type
.
BETWEEN
,
propName
=
"updateDate"
)
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd"
)
private
BetweenData
<
Date
>
createDate
;
@QueryCondition
(
blurry
=
"barcode"
)
private
String
barcode
;
@QueryCondition
(
blurry
=
"posName"
)
private
String
posName
;
@ApiModelProperty
(
"status"
)
@QueryCondition
(
blurry
=
"status"
)
private
String
status
;
}
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
查看文件 @
3a5ac57
...
...
@@ -32,6 +32,7 @@ import org.springframework.stereotype.Service;
import
java.text.ParseException
;
import
java.util.*
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.regex.Pattern
;
@Service
@Slf4j
...
...
@@ -261,9 +262,25 @@ public class StoragePosManagerImpl implements IStoragePosManager {
public
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
)
{
return
findPartNumberInStorages
(
storageIdList
,
""
,
pn
,
excludePosIds
,
checkOutType
);
}
private
String
escapeExprSpecialWord
(
String
keyword
)
{
if
(
ObjectUtil
.
isNotEmpty
(
keyword
))
{
String
[]
fbsArr
=
{
"\\"
,
"$"
,
"("
,
")"
,
"*"
,
"+"
,
"."
,
"["
,
"]"
,
"?"
,
"^"
,
"{"
,
"}"
,
"|"
};
for
(
String
key
:
fbsArr
)
{
if
(
keyword
.
contains
(
key
))
{
keyword
=
keyword
.
replace
(
key
,
"\\"
+
key
);
}
}
}
return
keyword
;
}
@Override
public
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
labelId
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
,
Map
<
String
,
String
>
appendDate
)
{
Criteria
c
=
Criteria
.
where
(
"barcode.partNumber"
).
is
(
pn
)
//
//criteria = criteria.and(attributeName).regex(pattern);
String
regex
=
"^"
+
escapeExprSpecialWord
(
pn
.
toString
())+
".*"
;
Pattern
pattern
=
Pattern
.
compile
(
regex
);
Criteria
c
=
Criteria
.
where
(
"barcode.partNumber"
).
regex
(
pattern
)
.
and
(
"id"
).
nin
(
excludePosIds
)
.
and
(
"enabled"
).
is
(
true
)
//可用
.
and
(
"barcode.lockId"
).
is
(
null
);
//没有被锁定的仓位;
...
...
@@ -281,14 +298,34 @@ public class StoragePosManagerImpl implements IStoragePosManager {
if
(
pos
==
null
)
{
log
.
info
(
"使用"
+
checkOutType
+
" 策略出库 partNumber="
+
pn
+
",未找到可以出库的物料 "
);
}
else
{
log
.
info
(
"使用"
+
checkOutType
+
" 策略出库 partNumber="
+
pn
+
",找到出仓位置【"
+
pos
.
getPosName
()
+
"】,RI【"
+
pos
.
getBarcode
().
getBarcode
()
+
"】 "
);
log
.
info
(
"使用"
+
checkOutType
+
" 策略出库 partNumber="
+
pn
+
",找到出仓位置【"
+
pos
.
getPosName
()
+
"】,RI【"
+
pos
.
getBarcode
().
getBarcode
()
+
"】
PN【"
+
pos
.
getBarcode
().
getPartNumber
()+
"】
"
);
}
return
pos
;
}
@Override
public
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
labelId
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
)
{
return
findPartNumberInStorages
(
storageIdList
,
labelId
,
pn
,
excludePosIds
,
checkOutType
,
new
HashMap
<>());
// return findPartNumberInStorages(storageIdList,labelId,pn,excludePosIds,checkOutType,new HashMap<>());
Criteria
c
=
Criteria
.
where
(
"barcode.partNumber"
).
is
(
pn
)
.
and
(
"id"
).
nin
(
excludePosIds
)
.
and
(
"enabled"
).
is
(
true
)
//可用
.
and
(
"barcode.lockId"
).
is
(
null
);
//没有被锁定的仓位;
if
(
storageIdList
!=
null
)
{
c
=
c
.
and
(
"storageId"
).
in
(
storageIdList
);
}
if
(
ObjectUtil
.
isNotEmpty
(
labelId
))
{
c
.
and
(
"labelId"
).
is
(
labelId
);
}
Query
q
=
new
Query
(
c
);
Sort
sort
=
getSortByCheckOutType
(
checkOutType
);
q
.
with
(
sort
);
StoragePos
pos
=
storagePosDao
.
findOne
(
q
);
if
(
pos
==
null
)
{
log
.
info
(
"使用"
+
checkOutType
+
" 策略出库 partNumber="
+
pn
+
",未找到可以出库的物料 "
);
}
else
{
log
.
info
(
"使用"
+
checkOutType
+
" 策略出库 partNumber="
+
pn
+
",找到出仓位置【"
+
pos
.
getPosName
()
+
"】,RI【"
+
pos
.
getBarcode
().
getBarcode
()
+
"】 "
);
}
return
pos
;
}
/**
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论