Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 12c1121a
由
hjh
编写于
2024-08-06 14:51:08 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
UID出库增加线体和PN出库回显
1 个父辈
fa9b0cbe
隐藏空白字符变更
内嵌
并排
正在显示
10 个修改的文件
包含
229 行增加
和
146 行删除
src/main/java/com/neotel/smfcore/core/barcode/service/po/Barcode.java
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
src/main/java/com/neotel/smfcore/core/storage/bean/InventoryItem.java
src/main/java/com/neotel/smfcore/core/storage/rest/StoragePosController.java
src/main/java/com/neotel/smfcore/core/storage/rest/dto/CheckOutDto.java
src/main/java/com/neotel/smfcore/core/storage/rest/dto/InventoryItemDto.java
src/main/java/com/neotel/smfcore/core/storage/rest/dto/TacticsOutDto.java
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStoragePosManager.java
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
src/main/java/com/neotel/smfcore/core/system/util/TaskService.java
src/main/java/com/neotel/smfcore/core/barcode/service/po/Barcode.java
查看文件 @
12c1121
...
...
@@ -83,6 +83,9 @@ public class Barcode extends BasePo implements Serializable {
* 盘高
*/
private
int
height
=
0
;
/**
* 供应商
*/
private
String
provider
;
/**
* 批次
...
...
@@ -561,4 +564,7 @@ public class Barcode extends BasePo implements Serializable {
}
}
}
public
String
getPartNumberAndProvider
(){
return
this
.
partNumber
+
"_"
+
this
.
provider
;
}
}
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
查看文件 @
12c1121
...
...
@@ -468,10 +468,12 @@ public class DataCache {
for
(
InventoryItem
item
:
map
.
values
())
{
if
(
ObjectUtil
.
isNotEmpty
(
blurry
))
{
if
(
item
.
getPartNumber
().
contains
(
blurry
))
{
resultMap
.
put
(
item
.
getPartNumber
(),
item
);
resultMap
.
put
(
item
.
getPartNumberAndProvider
(),
item
);
// resultMap.put(item.getPartNumber(), item);
}
}
else
{
resultMap
.
put
(
item
.
getPartNumber
(),
item
);
resultMap
.
put
(
item
.
getPartNumberAndProvider
(),
item
);
// resultMap.put(item.getPartNumber(), item);
}
}
return
resultMap
;
...
...
@@ -488,7 +490,9 @@ public class DataCache {
for
(
InventoryItem
storageInventoryItem
:
storageInventory
.
values
()){
storageInventoryItem
.
setStorageName
(
storage
.
getName
());
String
partNumber
=
storageInventoryItem
.
getPartNumber
();
InventoryItem
pnInventoryItem
=
resultMap
.
get
(
storageInventoryItem
.
getPartNumber
());
String
provider
=
storageInventoryItem
.
getProvider
();
InventoryItem
pnInventoryItem
=
resultMap
.
get
(
storageInventoryItem
.
getPartNumberAndProvider
());
// InventoryItem pnInventoryItem = resultMap.get(storageInventoryItem.getPartNumber());
if
(
pnInventoryItem
==
null
){
pnInventoryItem
=
new
InventoryItem
();
pnInventoryItem
.
setStorageName
(
storageInventoryItem
.
getStorageName
());
...
...
@@ -498,12 +502,13 @@ public class DataCache {
pnInventoryItem
.
setStorageId
(
null
);
}
pnInventoryItem
.
setPartNumber
(
partNumber
);
pnInventoryItem
.
setProvider
(
provider
);
pnInventoryItem
.
setStockCount
(
pnInventoryItem
.
getStockCount
()
+
storageInventoryItem
.
getStockCount
());
pnInventoryItem
.
setLockCount
(
pnInventoryItem
.
getLockCount
()
+
storageInventoryItem
.
getLockCount
());
pnInventoryItem
.
setStockReel
(
pnInventoryItem
.
getStockReel
()
+
storageInventoryItem
.
getStockReel
());
pnInventoryItem
.
setLockReel
(
pnInventoryItem
.
getLockReel
()
+
storageInventoryItem
.
getLockReel
());
resultMap
.
put
(
partNumber
,
pnInventoryItem
);
resultMap
.
put
(
storageInventoryItem
.
getPartNumberAndProvider
(),
pnInventoryItem
);
//
resultMap.put(partNumber,pnInventoryItem);
}
}
return
resultMap
;
...
...
@@ -523,10 +528,13 @@ public class DataCache {
public
InventoryItem
getStorageInventoryByPartNumber
(
String
cid
,
String
partNumber
){
Map
<
String
,
InventoryItem
>
storageInventory
=
getStorageInventory
(
cid
);
// 修改
InventoryItem
partNumberInventoryItem
=
storageInventory
.
get
(
partNumber
);
if
(
partNumberInventoryItem
==
null
){
partNumberInventoryItem
=
new
InventoryItem
();
partNumberInventoryItem
.
setPartNumber
(
partNumber
);
// 添加供货商
partNumberInventoryItem
.
setProvider
(
""
);
}
return
partNumberInventoryItem
;
}
...
...
src/main/java/com/neotel/smfcore/core/storage/bean/InventoryItem.java
查看文件 @
12c1121
...
...
@@ -18,6 +18,13 @@ public class InventoryItem {
*/
private
String
partNumber
;
//加个字段(供应商)
/**
* 供货商编号
*/
private
String
provider
;
/**
* 库存数量
*/
...
...
@@ -154,4 +161,8 @@ public class InventoryItem {
public
void
setLockCount
(
int
lockCount
)
{
this
.
lockCount
=
lockCount
;
}
public
String
getPartNumberAndProvider
(){
return
this
.
partNumber
+
"_"
+
this
.
provider
;
}
}
src/main/java/com/neotel/smfcore/core/storage/rest/StoragePosController.java
查看文件 @
12c1121
...
...
@@ -704,6 +704,10 @@ public class StoragePosController {
if
(
checkOutDto
.
getSingleOut
()
==
null
)
{
checkOutDto
.
setSingleOut
(
true
+
""
);
}
// 判断线体是否为空
if
(
StringUtils
.
isNotEmpty
(
checkOutDto
.
getLine
()))
{
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"线体"
});
}
String
isSingleOutStr
=
checkOutDto
.
getSingleOut
();
boolean
isSingleOut
=
Boolean
.
valueOf
(
isSingleOutStr
);
...
...
@@ -724,9 +728,8 @@ public class StoragePosController {
// if(!result) {
// throw new ValidateException("smfcore.error.getMaterialLot.out", "条码[{0}]验证失败,无法出库", new String[]{pos.getBarcode().getBarcode()});
// }
log
.
info
(
"出库料仓【"
+
storage
.
getName
()
+
"_"
+
storage
.
getCid
()
+
"】位置仓位【"
+
pos
.
getPosName
()
+
"】"
);
String
outResult
=
taskService
.
checkout
(
storage
,
pos
,
isSingleOut
,
SecurityUtils
.
getCurrentUsername
(),
null
,
ExtendType
.
MANUAL_CHECKOUT
);
String
outResult
=
taskService
.
checkout
(
storage
,
pos
,
isSingleOut
,
SecurityUtils
.
getCurrentUsername
(),
null
,
ExtendType
.
MANUAL_CHECKOUT
,
checkOutDto
.
getLine
()
);
if
(!
Strings
.
isNullOrEmpty
(
outResult
))
{
throw
new
ValidateException
(
"smfcore.error"
,
outResult
);
}
...
...
src/main/java/com/neotel/smfcore/core/storage/rest/dto/CheckOutDto.java
查看文件 @
12c1121
...
...
@@ -5,8 +5,11 @@ import lombok.Data;
@Data
public
class
CheckOutDto
{
@ApiModelProperty
(
"库位ID号 "
)
private
String
[]
pids
;
@ApiModelProperty
(
"是否是单盘出库"
)
private
String
singleOut
;
@ApiModelProperty
(
"线体"
)
private
String
line
;
}
src/main/java/com/neotel/smfcore/core/storage/rest/dto/InventoryItemDto.java
查看文件 @
12c1121
...
...
@@ -12,6 +12,9 @@ public class InventoryItemDto implements Serializable {
@ApiModelProperty
(
"物编"
)
private
String
partNumber
;
@ApiModelProperty
(
"供应商"
)
private
String
provider
;
@ApiModelProperty
(
"库存数量"
)
private
int
stockCount
=
0
;
...
...
src/main/java/com/neotel/smfcore/core/storage/rest/dto/TacticsOutDto.java
查看文件 @
12c1121
...
...
@@ -12,6 +12,9 @@ public class TacticsOutDto implements Serializable {
@ApiModelProperty
(
"物编"
)
private
String
partNumber
;
@ApiModelProperty
(
"供应商"
)
private
String
provider
;
@ApiModelProperty
(
"出库盘数"
)
private
Integer
plateNumber
;
...
...
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStoragePosManager.java
查看文件 @
12c1121
...
...
@@ -33,6 +33,10 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
);
StoragePos
findPartNumberAndProviderInStorages
(
List
<
String
>
storageIdList
,
String
pn
,
String
provider
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
);
StoragePos
findPartNumberAndProviderNumberInStorages
(
List
<
String
>
storageIdList
,
String
labelId
,
String
pn
,
String
provider
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
);
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
labelId
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
);
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
,
String
brand
);
...
...
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
查看文件 @
12c1121
...
...
@@ -46,10 +46,10 @@ public class StoragePosManagerImpl implements IStoragePosManager {
private DataCache dataCache;
*/
@Override
public
List
<
PlateSizeBean
>
getStoragePosUsage
(
String
storageId
){
public
List
<
PlateSizeBean
>
getStoragePosUsage
(
String
storageId
)
{
Aggregation
agg
=
Aggregation
.
newAggregation
(
Aggregation
.
match
(
Criteria
.
where
(
"storageId"
).
is
(
storageId
).
and
(
"enabled"
).
is
(
true
)),
Aggregation
.
group
(
"w"
,
"h"
,
"used"
).
count
().
as
(
"count"
),
Aggregation
.
group
(
"w"
,
"h"
,
"used"
).
count
().
as
(
"count"
),
Aggregation
.
project
(
"count"
).
and
(
"plateSize"
).
previousOperation
()
);
AggregationResults
<
PlateSizeBean
>
results
=
storagePosDao
.
getMongoTemplate
().
aggregate
(
agg
,
StoragePos
.
class
,
PlateSizeBean
.
class
);
...
...
@@ -58,30 +58,32 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}
@Override
public
Map
<
String
,
InventoryItem
>
getInventory
(
String
storageId
){
public
Map
<
String
,
InventoryItem
>
getInventory
(
String
storageId
)
{
return
getInventory
(-
1
,
storageId
);
}
private
List
<
InventoryItem
>
inventory
(
int
type
,
String
...
storageIds
)
{
private
List
<
InventoryItem
>
inventory
(
int
type
,
String
...
storageIds
)
{
Criteria
c
=
Criteria
.
where
(
"barcode"
).
exists
(
true
).
and
(
"storageId"
).
in
(
storageIds
);
if
(
type
!=
-
1
)
{
if
(
type
!=
-
1
)
{
c
=
c
.
and
(
"barcode.type"
).
is
(
type
);
}
Aggregation
agg
=
Aggregation
.
newAggregation
(
Aggregation
.
match
(
c
),
Aggregation
.
group
(
"barcode.partNumber"
).
sum
(
"barcode.amount"
).
as
(
"stockCount"
).
count
().
as
(
"stockReel"
),
Aggregation
.
project
(
"stockCount"
,
"stockReel"
).
and
(
"partNumber"
).
previousOperation
()
Aggregation
.
group
(
"barcode.partNumber"
)
.
first
(
"barcode.provider"
).
as
(
"provider"
)
.
sum
(
"barcode.amount"
).
as
(
"stockCount"
).
count
().
as
(
"stockReel"
),
Aggregation
.
project
(
"stockCount"
,
"stockReel"
,
"provider"
).
and
(
"partNumber"
).
previousOperation
()
);
AggregationResults
<
InventoryItem
>
results
=
storagePosDao
.
getMongoTemplate
().
aggregate
(
agg
,
StoragePos
.
class
,
InventoryItem
.
class
);
return
results
.
getMappedResults
();
}
private
List
<
InventoryItem
>
lockInventory
(
int
type
,
String
...
storageIds
)
{
private
List
<
InventoryItem
>
lockInventory
(
int
type
,
String
...
storageIds
)
{
//被锁定的仓位
//TODO:这里还需要去掉被指定批次锁定的,因为出错,暂时不加了..
Criteria
c
=
Criteria
.
where
(
"barcode"
).
exists
(
true
).
and
(
"storageId"
).
in
(
storageIds
)
.
andOperator
(
Criteria
.
where
(
"canCheckOutTime"
).
gt
(
System
.
currentTimeMillis
()));
if
(
type
!=
-
1
)
{
if
(
type
!=
-
1
)
{
c
=
c
.
and
(
"barcode.type"
).
is
(
type
);
}
...
...
@@ -94,47 +96,43 @@ public class StoragePosManagerImpl implements IStoragePosManager {
return
results
.
getMappedResults
();
}
private
Map
<
String
,
InventoryItem
>
getInventory
(
int
type
,
String
...
storageIds
)
{
private
Map
<
String
,
InventoryItem
>
getInventory
(
int
type
,
String
...
storageIds
)
{
Map
<
String
,
InventoryItem
>
inventoryMap
=
Maps
.
newHashMap
();
List
<
InventoryItem
>
inventory
=
inventory
(
type
,
storageIds
);
List
<
InventoryItem
>
inventory
=
inventory
(
type
,
storageIds
);
List
<
InventoryItem
>
lockInventory
=
lockInventory
(
type
,
storageIds
);
for
(
InventoryItem
inventoryItem
:
inventory
)
{
inventoryMap
.
put
(
inventoryItem
.
getPartNumber
(),
inventoryItem
);
inventoryMap
.
put
(
inventoryItem
.
getPartNumber
AndProvider
(),
inventoryItem
);
}
for
(
InventoryItem
lockInventoryItem
:
lockInventory
)
{
String
partNumber
=
lockInventoryItem
.
getPartNumber
();
InventoryItem
inventoryItem
=
inventoryMap
.
get
(
partNumber
);
if
(
inventoryItem
!=
null
){
InventoryItem
inventoryItem
=
inventoryMap
.
get
(
lockInventoryItem
.
getPartNumberAndProvider
());
if
(
inventoryItem
!=
null
)
{
inventoryItem
.
setLockReel
(
lockInventoryItem
.
getLockReel
());
}
inventoryMap
.
put
(
partNumber
,
inventoryItem
);
inventoryMap
.
put
(
lockInventoryItem
.
getPartNumberAndProvider
(),
inventoryItem
);
}
List
<
InventoryItem
>
expireInventory
=
expireInventory
(
type
,
0
,
storageIds
);
List
<
InventoryItem
>
expireInventory
=
expireInventory
(
type
,
0
,
storageIds
);
for
(
InventoryItem
expireInventoryItem
:
expireInventory
)
{
String
partNumber
=
expireInventoryItem
.
getPartNumber
();
InventoryItem
inventoryItem
=
inventoryMap
.
get
(
partNumber
);
if
(
inventoryItem
!=
null
){
InventoryItem
inventoryItem
=
inventoryMap
.
get
(
expireInventoryItem
.
getPartNumberAndProvider
());
if
(
inventoryItem
!=
null
)
{
inventoryItem
.
setExpireReel
(
expireInventoryItem
.
getExpireReel
());
}
inventoryMap
.
put
(
partNumber
,
inventoryItem
);
inventoryMap
.
put
(
expireInventoryItem
.
getPartNumberAndProvider
(),
inventoryItem
);
}
//统计2个小时内即将过期的
int
inHours
=
2
;
List
<
InventoryItem
>
willExpireInventory
=
expireInventory
(
type
,
inHours
,
storageIds
);
List
<
InventoryItem
>
willExpireInventory
=
expireInventory
(
type
,
inHours
,
storageIds
);
for
(
InventoryItem
wiilExpireInventoryItem
:
willExpireInventory
)
{
String
partNumber
=
wiilExpireInventoryItem
.
getPartNumber
();
InventoryItem
inventoryItem
=
inventoryMap
.
get
(
partNumber
);
if
(
inventoryItem
!=
null
){
InventoryItem
inventoryItem
=
inventoryMap
.
get
(
wiilExpireInventoryItem
.
getPartNumberAndProvider
());
if
(
inventoryItem
!=
null
)
{
inventoryItem
.
setWillExireReel
(
wiilExpireInventoryItem
.
getWillExireReel
());
}
inventoryMap
.
put
(
partNumber
,
inventoryItem
);
inventoryMap
.
put
(
wiilExpireInventoryItem
.
getPartNumberAndProvider
(),
inventoryItem
);
}
//获取agv类型的库存
Map
<
String
,
InventoryItem
>
agvInventory
=
getAgvBoxInventory
(
storageIds
);
if
(
agvInventory
!=
null
&&
agvInventory
.
size
()
>
0
)
{
Map
<
String
,
InventoryItem
>
agvInventory
=
getAgvBoxInventory
(
storageIds
);
if
(
agvInventory
!=
null
&&
agvInventory
.
size
()
>
0
)
{
inventoryMap
.
putAll
(
agvInventory
);
}
...
...
@@ -149,10 +147,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
/**
* 得到agvBox存储信息
*
* @param storageIds
* @return
*/
private
Map
<
String
,
InventoryItem
>
getAgvBoxInventory
(
String
...
storageIds
)
{
private
Map
<
String
,
InventoryItem
>
getAgvBoxInventory
(
String
...
storageIds
)
{
Map
<
String
,
InventoryItem
>
resultMap
=
new
HashMap
<>();
for
(
String
storageId
:
storageIds
)
{
/*Storage storage = dataCache.getStorageById(storageId);
...
...
@@ -166,17 +165,18 @@ public class StoragePosManagerImpl implements IStoragePosManager {
List
<
Barcode
>
subCodeList
=
pos
.
getBarcode
().
getSubCodeList
();
if
(
subCodeList
!=
null
&&
!
subCodeList
.
isEmpty
())
{
for
(
Barcode
barcode
:
subCodeList
)
{
InventoryItem
item
=
resultMap
.
get
(
barcode
.
getPartNumber
());
InventoryItem
item
=
resultMap
.
get
(
barcode
.
getPartNumber
()
+
"_"
+
barcode
.
getProvider
()
);
if
(
item
!=
null
)
{
item
.
setStockReel
(
item
.
getStockReel
()
+
1
);
item
.
setStockCount
(
item
.
getStockCount
()
+
barcode
.
getAmount
());
}
else
{
item
=
new
InventoryItem
();
item
.
setPartNumber
(
barcode
.
getPartNumber
());
item
.
setProvider
(
barcode
.
getProvider
());
item
.
setStockCount
(
barcode
.
getAmount
());
item
.
setStockReel
(
1
);
}
resultMap
.
put
(
barcode
.
getPartNumb
er
(),
item
);
resultMap
.
put
(
item
.
getPartNumberAndProvid
er
(),
item
);
}
}
}
...
...
@@ -188,22 +188,23 @@ public class StoragePosManagerImpl implements IStoragePosManager {
/**
* 统计多少个小时内即将过期的物料(inHours 为0表示截止到目前已经过期的,为1表示1个小时后过期,但现在还没过期的)
*
* @param storageIds
* @param type
* @param inHours
* @return
*/
private
List
<
InventoryItem
>
expireInventory
(
int
type
,
int
inHours
,
String
[]
storageIds
)
{
private
List
<
InventoryItem
>
expireInventory
(
int
type
,
int
inHours
,
String
[]
storageIds
)
{
//过期的仓位
Criteria
c
=
Criteria
.
where
(
"barcode"
).
exists
(
true
).
and
(
"storageId"
).
in
(
storageIds
);
if
(
type
!=
-
1
)
{
if
(
type
!=
-
1
)
{
c
=
c
.
and
(
"barcode.type"
).
is
(
type
);
}
Criteria
expireCriteria
=
Criteria
.
where
(
"expireTime"
).
gt
(
System
.
currentTimeMillis
());
if
(
inHours
>
0
)
{
if
(
inHours
>
0
)
{
expireCriteria
=
Criteria
.
where
(
"expireTime"
).
gt
(
System
.
currentTimeMillis
()).
lte
(
System
.
currentTimeMillis
()
+
inHours
*
60
*
60
*
1000
);
}
else
{
}
else
{
expireCriteria
=
Criteria
.
where
(
"expireTime"
).
lte
(
System
.
currentTimeMillis
());
}
...
...
@@ -211,8 +212,8 @@ public class StoragePosManagerImpl implements IStoragePosManager {
Aggregation
.
match
(
c
),
Aggregation
.
project
(
"barcode"
).
andExpression
(
"barcode.putInTime + barcode.maxStorageTime * 60 * 60 * 1000"
).
as
(
"expireTime"
),
Aggregation
.
match
(
expireCriteria
),
Aggregation
.
group
(
"barcode.partNumber"
).
count
().
as
(
"expireReel"
),
Aggregation
.
project
(
"expireReel"
).
and
(
"partNumber"
).
previousOperation
()
Aggregation
.
group
(
"barcode.partNumber"
).
first
(
"barcode.provider"
).
as
(
"provider"
).
count
().
as
(
"expireReel"
),
Aggregation
.
project
(
"expireReel"
,
"provider"
).
and
(
"partNumber"
).
previousOperation
()
);
AggregationResults
<
InventoryItem
>
results
=
storagePosDao
.
getMongoTemplate
().
aggregate
(
agg
,
StoragePos
.
class
,
InventoryItem
.
class
);
return
results
.
getMappedResults
();
...
...
@@ -221,11 +222,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override
public
StoragePos
getByPosName
(
String
posName
)
{
StoragePos
pos
=
storagePosDao
.
findOneByCondition
(
new
String
[]{
"posName"
},
new
String
[]{
posName
});
if
(
pos
==
null
)
{
if
(
pos
==
null
)
{
//库位的条码有可能是前面带了SOxxx-,所以这里去除SO-再查一遍库位,保持与之前的兼容
int
index
=
posName
.
indexOf
(
"-"
);
if
(
index
>=
0
)
{
String
posNameStr
=
posName
.
substring
(
index
+
1
);
int
index
=
posName
.
indexOf
(
"-"
);
if
(
index
>=
0
)
{
String
posNameStr
=
posName
.
substring
(
index
+
1
);
pos
=
storagePosDao
.
findOneByCondition
(
new
String
[]{
"posName"
},
new
String
[]{
posNameStr
});
}
}
...
...
@@ -238,8 +239,8 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}
@Override
public
List
<
StoragePos
>
findPosList
(
String
storageId
,
List
<
String
>
posNames
){
if
(
posNames
==
null
||
posNames
.
isEmpty
())
{
public
List
<
StoragePos
>
findPosList
(
String
storageId
,
List
<
String
>
posNames
)
{
if
(
posNames
==
null
||
posNames
.
isEmpty
())
{
return
Lists
.
newArrayList
();
}
Criteria
c
=
Criteria
.
where
(
"storageId"
).
is
(
storageId
)
...
...
@@ -247,9 +248,10 @@ public class StoragePosManagerImpl implements IStoragePosManager {
Query
q
=
new
Query
(
c
);
return
storagePosDao
.
findByQuery
(
q
);
}
@Override
public
StoragePos
save
(
StoragePos
storagePos
)
throws
ValidateException
{
if
(!
storagePos
.
isUsed
())
{
if
(!
storagePos
.
isUsed
())
{
//出库
List
<
String
>
mergePosNames
=
storagePos
.
getMergePosList
();
List
<
StoragePos
>
mergePosList
=
findPosList
(
storagePos
.
getStorageId
(),
mergePosNames
);
...
...
@@ -262,7 +264,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
allPos
+=
mergePos
.
getPosName
()
+
","
;
}
if
(
ObjectUtil
.
isNotEmpty
(
allPos
))
{
log
.
info
(
"设置库位["
+
storagePos
.
getPosName
()+
"]合并的关联库位[ "
+
allPos
+
" ]使用状态为:false"
);
log
.
info
(
"设置库位["
+
storagePos
.
getPosName
()
+
"]合并的关联库位[ "
+
allPos
+
" ]使用状态为:false"
);
}
storagePos
.
setMergePosList
(
null
);
}
...
...
@@ -274,11 +276,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override
public
void
delete
(
StoragePos
object
)
throws
ValidateException
{
storagePosDao
.
removeOneById
(
object
.
getId
());
storagePosDao
.
removeOneById
(
object
.
getId
());
}
@Override
public
StoragePos
getByBarcode
(
String
barcode
){
public
StoragePos
getByBarcode
(
String
barcode
)
{
List
<
Criteria
>
orCriterialList
=
Lists
.
newArrayList
();
orCriterialList
.
add
(
Criteria
.
where
(
"barcode.barcode"
).
is
(
barcode
));
orCriterialList
.
add
(
Criteria
.
where
(
"barcode.subCodeList.barcode"
).
is
(
barcode
));
...
...
@@ -287,10 +289,10 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}
@Override
public
List
<
StoragePos
>
findNotEmptyByStorageId
(
String
storageId
){
public
List
<
StoragePos
>
findNotEmptyByStorageId
(
String
storageId
)
{
Criteria
c
=
Criteria
.
where
(
"barcode"
).
exists
(
true
)
.
and
(
"enabled"
).
is
(
true
);
//可用;
if
(!
Strings
.
isNullOrEmpty
(
storageId
))
{
if
(!
Strings
.
isNullOrEmpty
(
storageId
))
{
c
=
c
.
and
(
"storageId"
).
is
(
storageId
);
}
Query
query
=
new
Query
(
c
);
...
...
@@ -302,7 +304,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
public
List
<
StoragePos
>
findNotEmptyByStorageIdList
(
List
<
String
>
storageIdList
)
{
Criteria
c
=
Criteria
.
where
(
"barcode"
).
exists
(
true
)
.
and
(
"enabled"
).
is
(
true
);
//可用;
if
(
storageIdList
!=
null
&&
!
storageIdList
.
isEmpty
()){
if
(
storageIdList
!=
null
&&
!
storageIdList
.
isEmpty
())
{
c
=
c
.
and
(
"storageId"
).
in
(
storageIdList
);
}
Query
query
=
new
Query
(
c
);
...
...
@@ -319,10 +321,44 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override
public
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
)
{
return
findPartNumberInStorages
(
storageIdList
,
""
,
pn
,
excludePosIds
,
checkOutType
);
return
findPartNumberInStorages
(
storageIdList
,
""
,
pn
,
excludePosIds
,
checkOutType
);
}
@Override
public
StoragePos
findPartNumberAndProviderInStorages
(
List
<
String
>
storageIdList
,
String
pn
,
String
provider
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
)
{
return
findPartNumberAndProviderNumberInStorages
(
storageIdList
,
""
,
pn
,
provider
,
excludePosIds
,
checkOutType
);
}
@Override
public
StoragePos
findPartNumberAndProviderNumberInStorages
(
List
<
String
>
storageIdList
,
String
labelId
,
String
pn
,
String
provider
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
)
{
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
);
}
if
(
ObjectUtil
.
isNotEmpty
(
provider
))
{
c
.
and
(
"provider"
).
is
(
provider
);
}
Query
q
=
new
Query
(
c
);
//Sort sort = getSortByCheckOutType(checkOutType);
Sort
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"barcode.amount"
,
"barcode.putInDate"
);
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
;
}
@Override
public
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
labelId
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
)
{
public
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
labelId
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
)
{
Criteria
c
=
Criteria
.
where
(
"barcode.partNumber"
).
is
(
pn
)
.
and
(
"id"
).
nin
(
excludePosIds
)
.
and
(
"enabled"
).
is
(
true
)
//可用
...
...
@@ -335,7 +371,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}
Query
q
=
new
Query
(
c
);
//Sort sort = getSortByCheckOutType(checkOutType);
Sort
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"barcode.amount"
,
"barcode.putInDate"
);
Sort
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"barcode.amount"
,
"barcode.putInDate"
);
q
.
with
(
sort
);
StoragePos
pos
=
storagePosDao
.
findOne
(
q
);
if
(
pos
==
null
)
{
...
...
@@ -360,7 +396,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}
Query
q
=
new
Query
(
c
);
//Sort sort = getSortByCheckOutType(checkOutType);
Sort
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"barcode.amount"
,
"barcode.expireDate"
,
"barcode.createDate"
);
Sort
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"barcode.amount"
,
"barcode.expireDate"
,
"barcode.createDate"
);
q
.
with
(
sort
);
StoragePos
pos
=
storagePosDao
.
findOne
(
q
);
if
(
pos
==
null
)
{
...
...
@@ -388,11 +424,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
if
(
ObjectUtil
.
isNotEmpty
(
pn
))
{
c
.
and
(
"barcode.subCodeList.partNumber"
).
is
(
pn
);
}
if
(
isOut
){
if
(
isOut
)
{
c
.
and
(
"barcode.subCodeList.isOut"
).
is
(
isOut
);
}
//Sort sort = getSortByCheckOutType(checkOutType);
Sort
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"barcode.subCodeList.amount"
,
"barcode.subCodeList.createDate"
/*,"canCheckOutTime", "barcode.usedCount"*/
);
Sort
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"barcode.subCodeList.amount"
,
"barcode.subCodeList.createDate"
/*,"canCheckOutTime", "barcode.usedCount"*/
);
Query
q
=
new
Query
(
c
);
q
.
with
(
sort
);
StoragePos
pos
=
storagePosDao
.
findOne
(
q
);
...
...
@@ -413,7 +449,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
public
List
<
StoragePos
>
findNotEmptyPosNameByStorageId
(
String
storageId
)
{
Criteria
c
=
Criteria
.
where
(
"barcode"
).
exists
(
true
)
.
and
(
"enabled"
).
is
(
true
);
//可用;
if
(!
Strings
.
isNullOrEmpty
(
storageId
))
{
if
(!
Strings
.
isNullOrEmpty
(
storageId
))
{
c
=
c
.
and
(
"storageId"
).
is
(
storageId
);
}
Query
query
=
new
Query
(
c
);
...
...
@@ -422,7 +458,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}
@Override
public
StoragePos
findOneEmptyPosNameByStorageId
(
String
storageId
,
String
posName
)
{
public
StoragePos
findOneEmptyPosNameByStorageId
(
String
storageId
,
String
posName
)
{
Criteria
c
=
Criteria
.
where
(
"barcode"
).
exists
(
false
)
.
and
(
"enabled"
).
is
(
true
);
//可用;
if
(!
Strings
.
isNullOrEmpty
(
storageId
))
{
...
...
@@ -438,10 +474,10 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}
@Override
public
List
<
StoragePos
>
findEmptyByStorageId
(
String
storageId
){
public
List
<
StoragePos
>
findEmptyByStorageId
(
String
storageId
)
{
Criteria
c
=
Criteria
.
where
(
"barcode"
).
exists
(
false
)
.
and
(
"enabled"
).
is
(
true
);
//可用;
if
(!
Strings
.
isNullOrEmpty
(
storageId
))
{
if
(!
Strings
.
isNullOrEmpty
(
storageId
))
{
c
=
c
.
and
(
"storageId"
).
is
(
storageId
);
}
Query
query
=
new
Query
(
c
);
...
...
@@ -453,18 +489,18 @@ public class StoragePosManagerImpl implements IStoragePosManager {
/**
* 根据出库方式获取不同的 Sort
*/
private
Sort
getSortByCheckOutType
(
CHECKOUT_TYPE
checkoutType
){
private
Sort
getSortByCheckOutType
(
CHECKOUT_TYPE
checkoutType
)
{
Sort
sort
=
null
;
if
(
CHECKOUT_TYPE
.
EXPIRE_FIRST
.
equals
(
checkoutType
))
{
//先过期先出
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"barcode.expTime"
,
"barcode.expireDate"
,
"canCheckOutTime"
);
}
else
if
(
CHECKOUT_TYPE
.
FIFO
.
equals
(
checkoutType
))
{
//严格的先进先出
if
(
CHECKOUT_TYPE
.
EXPIRE_FIRST
.
equals
(
checkoutType
))
{
//先过期先出
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"barcode.expTime"
,
"barcode.expireDate"
,
"canCheckOutTime"
);
}
else
if
(
CHECKOUT_TYPE
.
FIFO
.
equals
(
checkoutType
))
{
//严格的先进先出
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"canCheckOutTime"
,
"barcode.usedCount"
);
}
else
if
(
CHECKOUT_TYPE
.
USED_FIRST
.
equals
(
checkoutType
))
{
//尾料优先
}
else
if
(
CHECKOUT_TYPE
.
USED_FIRST
.
equals
(
checkoutType
))
{
//尾料优先
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"barcode.amount"
,
"canCheckOutTime"
);
}
else
if
(
CHECKOUT_TYPE
.
PRODUCE_DATE
.
equals
(
checkoutType
))
{
}
else
if
(
CHECKOUT_TYPE
.
PRODUCE_DATE
.
equals
(
checkoutType
))
{
//先生产先出
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"barcode.amount"
,
"barcode.produceDate"
,
"canCheckOutTime"
);
}
else
{
//效率优先
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"barcode.amount"
,
"barcode.produceDate"
,
"canCheckOutTime"
);
}
else
{
//效率优先
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"canCheckOutTime"
,
"createDate"
);
}
return
sort
;
...
...
@@ -474,7 +510,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
public
PageData
<
StoragePos
>
findByPage
(
Query
query
,
Pageable
pageable
)
{
int
totalCount
=
storagePosDao
.
countByQuery
(
query
);
List
<
StoragePos
>
list
=
storagePosDao
.
findByQuery
(
query
,
pageable
);
return
new
PageData
<
StoragePos
>(
list
,
totalCount
);
return
new
PageData
<
StoragePos
>(
list
,
totalCount
);
}
@Override
...
...
@@ -490,31 +526,32 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override
public
void
removePosByStorageId
(
String
storageId
)
{
Query
query
=
new
Query
(
Criteria
.
where
(
"storageId"
).
is
(
storageId
));
Query
query
=
new
Query
(
Criteria
.
where
(
"storageId"
).
is
(
storageId
));
storagePosDao
.
removeByQuery
(
query
);
}
@Override
public
void
deletePoss
(
Set
<
String
>
ids
)
{
Query
query
=
new
Query
(
Criteria
.
where
(
"id"
).
in
(
ids
));
List
<
StoragePos
>
poss
=
storagePosDao
.
findByQuery
(
query
);
String
delPosName
=
""
;
Query
query
=
new
Query
(
Criteria
.
where
(
"id"
).
in
(
ids
));
List
<
StoragePos
>
poss
=
storagePosDao
.
findByQuery
(
query
);
String
delPosName
=
""
;
for
(
StoragePos
pos
:
poss
)
{
if
(
pos
.
getBarcode
()==
null
||
pos
.
getBarcode
().
equals
(
""
))
{
if
(
pos
.
getBarcode
()
==
null
||
pos
.
getBarcode
().
equals
(
""
))
{
}
else
{
throw
new
ValidateException
(
"smfcore.thePosIsused"
,
" 库位[{0}]有料[{1}],不能删除"
,
new
String
[]{
pos
.
getPosName
(),
pos
.
getBarcode
().
getBarcode
()});
}
else
{
throw
new
ValidateException
(
"smfcore.thePosIsused"
,
" 库位[{0}]有料[{1}],不能删除"
,
new
String
[]{
pos
.
getPosName
(),
pos
.
getBarcode
().
getBarcode
()});
// throw new BadRequestException("库位[" + pos.getPosName() + "]中有料[" + pos.getBarcode() + "],不能删除");
}
delPosName
+=
"["
+
pos
.
getId
()+
"_"
+
pos
.
getPosName
()+
"]"
;
delPosName
+=
"["
+
pos
.
getId
()
+
"_"
+
pos
.
getPosName
()
+
"]"
;
}
log
.
info
(
"手动删除库位:"
+
delPosName
+
" 完成 "
);
log
.
info
(
"手动删除库位:"
+
delPosName
+
" 完成 "
);
storagePosDao
.
removeByQuery
(
query
);
}
@Override
public
StoragePos
getEmptyPosByStorage
(
Storage
storage
,
Barcode
barcode
,
Collection
<
String
>
excludePosIds
)
throws
ValidateException
{
return
getEmptyPos
(
storage
,
barcode
,
excludePosIds
,
true
);
public
StoragePos
getEmptyPosByStorage
(
Storage
storage
,
Barcode
barcode
,
Collection
<
String
>
excludePosIds
)
throws
ValidateException
{
return
getEmptyPos
(
storage
,
barcode
,
excludePosIds
,
true
);
}
private
StoragePos
getEmptyPos
(
Storage
storage
,
Barcode
barcode
,
Collection
<
String
>
excludePosIds
,
boolean
warmPos
)
throws
ValidateException
{
...
...
@@ -522,26 +559,26 @@ public class StoragePosManagerImpl implements IStoragePosManager {
Criteria
c
=
Criteria
.
where
(
"storageId"
).
is
(
storage
.
getId
());
COMPATIBLE_TYPE
compatibleType
=
storage
.
getCompatibleType
();
if
(
compatibleType
==
COMPATIBLE_TYPE
.
EXACT_MATCH
)
{
//完全匹配
if
(
compatibleType
==
COMPATIBLE_TYPE
.
EXACT_MATCH
)
{
//完全匹配
c
=
c
.
and
(
"w"
).
is
(
barcode
.
getPlateSize
()).
and
(
"h"
).
is
(
barcode
.
getHeight
());
}
else
if
(
compatibleType
==
COMPATIBLE_TYPE
.
FULLY_COMPATIBLE
)
{
//完全兼容
}
else
if
(
compatibleType
==
COMPATIBLE_TYPE
.
FULLY_COMPATIBLE
)
{
//完全兼容
c
=
c
.
and
(
"w"
).
gte
(
barcode
.
getPlateSize
()).
and
(
"h"
).
gte
(
barcode
.
getHeight
());
//宽度大于等于料盘宽度,高度大于等于料盘高度
}
else
if
(
compatibleType
==
COMPATIBLE_TYPE
.
SIZE_COMPATIBLE
)
{
//同尺寸兼容
}
else
if
(
compatibleType
==
COMPATIBLE_TYPE
.
SIZE_COMPATIBLE
)
{
//同尺寸兼容
c
=
c
.
and
(
"w"
).
is
(
barcode
.
getPlateSize
()).
and
(
"h"
).
gte
(
barcode
.
getHeight
());
//宽度等于料盘宽度,高度大于等于料盘高度
}
c
=
c
.
and
(
"enabled"
).
is
(
true
)
//可用
.
and
(
"used"
).
is
(
false
);
//未使用
if
(
storage
.
isSolderPaste
())
{
if
(
warmPos
)
{
if
(
storage
.
isSolderPaste
())
{
if
(
warmPos
)
{
c
=
c
.
and
(
"warmPos"
).
is
(
true
);
//回温库位
}
else
{
}
else
{
c
=
c
.
and
(
"warmPos"
).
ne
(
true
);
//不是回温库位
}
}
//去除的仓位
if
(
excludePosIds
!=
null
&&
!
excludePosIds
.
isEmpty
())
{
if
(
excludePosIds
!=
null
&&
!
excludePosIds
.
isEmpty
())
{
c
=
c
.
and
(
"id"
).
nin
(
excludePosIds
);
}
Query
query
=
new
Query
(
c
);
...
...
@@ -552,7 +589,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}
@Override
public
StoragePos
getEmptyPosByStorage
(
Storage
storage
,
Barcode
barcode
,
Collection
<
String
>
excludePosIds
,
String
lastPosId
)
throws
ValidateException
{
public
StoragePos
getEmptyPosByStorage
(
Storage
storage
,
Barcode
barcode
,
Collection
<
String
>
excludePosIds
,
String
lastPosId
)
throws
ValidateException
{
Criteria
c
=
Criteria
.
where
(
"storageId"
).
is
(
storage
.
getId
());
...
...
@@ -578,29 +615,31 @@ public class StoragePosManagerImpl implements IStoragePosManager {
String
msg
=
""
;
// if (lastPosId == null || lastPosId.equals("")) {
//优先放入最合适的位置(根据尺寸),相同尺寸按优先级排序
query
.
with
(
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"w"
).
and
(
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"h"
)).
and
(
Sort
.
by
(
Sort
.
Direction
.
DESC
,
"priority"
)));
//优先放入最合适的位置(根据尺寸),相同尺寸按优先级排序
query
.
with
(
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"w"
).
and
(
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"h"
)).
and
(
Sort
.
by
(
Sort
.
Direction
.
DESC
,
"priority"
)));
// } else {
// Point point = PointUtil.getPosPoint(lastPosId, false);
// query.addCriteria(Criteria.where("coordinate").nearSphere(point));
// msg += "getEmptyPosByStorage 根据就近坐标查询[" + lastPosId + "][" + point.getX() + "," + point.getY() + "]";
// }
StoragePos
pos
=
storagePosDao
.
findOne
(
query
);
if
((!
ObjectUtil
.
isNotEmpty
(
msg
)
)
&&
(
pos
!=
null
))
{
if
((!
ObjectUtil
.
isNotEmpty
(
msg
)
)
&&
(
pos
!=
null
))
{
Point
targetP
=
PointUtil
.
getPosPoint
(
lastPosId
,
false
);
log
.
info
(
msg
+
"结果:["
+
pos
.
getPosName
()
+
"]["
+
targetP
.
getX
()
+
","
+
targetP
.
getY
()
+
"]"
);
}
return
pos
;
}
@Override
public
List
<
StoragePos
>
findNotEmpty
(){
public
List
<
StoragePos
>
findNotEmpty
()
{
return
findNotEmptyByStorageId
(
null
);
}
@Override
public
List
<
StoragePos
>
findByStorage
(
String
storageId
)
{
return
storagePosDao
.
findListByCondition
(
new
String
[]{
"storageId"
},
new
String
[]{
storageId
});
return
storagePosDao
.
findListByCondition
(
new
String
[]{
"storageId"
},
new
String
[]{
storageId
});
}
@Override
public
void
insertAll
(
List
<
StoragePos
>
posList
)
{
storagePosDao
.
insertAll
(
posList
);
...
...
@@ -619,27 +658,26 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override
public
void
clearStoragePosLabel
(
String
labelId
)
{
Query
query
=
new
Query
(
Criteria
.
where
(
"labelId"
).
is
(
labelId
));
storagePosDao
.
updateMulti
(
query
,
Update
.
update
(
"labelId"
,
""
));
storagePosDao
.
updateMulti
(
query
,
Update
.
update
(
"labelName"
,
""
));
storagePosDao
.
updateMulti
(
query
,
Update
.
update
(
"labelId"
,
""
));
storagePosDao
.
updateMulti
(
query
,
Update
.
update
(
"labelName"
,
""
));
}
@Override
public
void
updatePosLabel
(
String
[]
posIds
,
String
labelId
,
String
labelName
)
{
public
void
updatePosLabel
(
String
[]
posIds
,
String
labelId
,
String
labelName
)
{
Query
query
=
new
Query
(
Criteria
.
where
(
"id"
).
in
(
posIds
));
storagePosDao
.
updateMulti
(
query
,
Update
.
update
(
"labelId"
,
labelId
));
storagePosDao
.
updateMulti
(
query
,
Update
.
update
(
"labelName"
,
labelName
));
storagePosDao
.
updateMulti
(
query
,
Update
.
update
(
"labelId"
,
labelId
));
storagePosDao
.
updateMulti
(
query
,
Update
.
update
(
"labelName"
,
labelName
));
}
@Override
public
void
clearLockPos
(
String
lockId
)
{
Query
query
=
new
Query
(
Criteria
.
where
(
"barcode.lockId"
).
is
(
lockId
));
storagePosDao
.
updateMulti
(
query
,
Update
.
update
(
"barcode.lockId"
,
""
));
Query
query
=
new
Query
(
Criteria
.
where
(
"barcode.lockId"
).
is
(
lockId
));
storagePosDao
.
updateMulti
(
query
,
Update
.
update
(
"barcode.lockId"
,
""
));
}
@Override
public
StoragePos
autoFindNextEmptyPos
(
Storage
storage
,
Collection
<
String
>
excludePosIds
,
StoragePos
currentPos
)
{
public
StoragePos
autoFindNextEmptyPos
(
Storage
storage
,
Collection
<
String
>
excludePosIds
,
StoragePos
currentPos
)
{
Criteria
c
=
Criteria
.
where
(
"storageId"
).
is
(
storage
.
getId
());
// c.and("priority").lt(currentPos.getPriority());
...
...
@@ -671,16 +709,18 @@ public class StoragePosManagerImpl implements IStoragePosManager {
StoragePos
pos
=
storagePosDao
.
findOne
(
query
);
return
pos
;
}
@Override
public
void
updateBarcodeMsd
(
String
pn
,
String
msl
,
String
thickness
)
{
Query
query
=
new
Query
(
Criteria
.
where
(
"barcode.partNumber"
).
is
(
pn
));
storagePosDao
.
updateMulti
(
query
,
Update
.
update
(
"barcode.msl"
,
msl
));
storagePosDao
.
updateMulti
(
query
,
Update
.
update
(
"barcode.thickness"
,
thickness
));
public
void
updateBarcodeMsd
(
String
pn
,
String
msl
,
String
thickness
)
{
Query
query
=
new
Query
(
Criteria
.
where
(
"barcode.partNumber"
).
is
(
pn
));
storagePosDao
.
updateMulti
(
query
,
Update
.
update
(
"barcode.msl"
,
msl
));
storagePosDao
.
updateMulti
(
query
,
Update
.
update
(
"barcode.thickness"
,
thickness
));
}
/**
* 查找同尺寸连续的库位,合并库位放置料盘,仅用于智能料架
*
* @param storage
* @param barcode
* @return
...
...
@@ -688,17 +728,17 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override
public
List
<
StoragePos
>
getSameSizeContinuityEmptyPosList
(
Storage
storage
,
Barcode
barcode
)
throws
ValidateException
{
if
(
storage
==
null
||(!
storage
.
isNLMShelf
()))
{
if
(
storage
==
null
||
(!
storage
.
isNLMShelf
()))
{
//只适合移动料架NLM
throw
new
ValidateException
(
"smfcore.shelf.nlm.notFound"
,
"未找到移动料架{0}"
,
new
String
[]{
storage
.
getId
()});
throw
new
ValidateException
(
"smfcore.shelf.nlm.notFound"
,
"未找到移动料架{0}"
,
new
String
[]{
storage
.
getId
()});
}
if
(!
storage
.
isMergePos
())
{
if
(!
storage
.
isMergePos
())
{
return
new
ArrayList
<>();
}
Criteria
c
=
Criteria
.
where
(
"storageId"
).
is
(
storage
.
getId
());
if
(
barcode
.
getPlateSize
()
>
7
)
{
if
(
barcode
.
getPlateSize
()
>
7
)
{
c
=
c
.
and
(
"w"
).
gte
(
barcode
.
getPlateSize
());
}
else
{
}
else
{
c
=
c
.
and
(
"w"
).
is
(
barcode
.
getPlateSize
());
}
c
=
c
.
and
(
"h"
).
gte
(
0
);
//宽度大于等于料盘宽度,高度大于等于料盘高度
...
...
@@ -709,9 +749,9 @@ public class StoragePosManagerImpl implements IStoragePosManager {
query
.
with
(
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"posName"
));
List
<
StoragePos
>
posList
=
storagePosDao
.
findByQuery
(
query
);
//把不连续的过滤掉
Map
<
String
,
StoragePos
>
posMap
=
new
ConcurrentHashMap
<>();
for
(
StoragePos
pos
:
posList
)
{
posMap
.
put
(
pos
.
getPosName
(),
pos
);
Map
<
String
,
StoragePos
>
posMap
=
new
ConcurrentHashMap
<>();
for
(
StoragePos
pos
:
posList
)
{
posMap
.
put
(
pos
.
getPosName
(),
pos
);
}
Set
<
String
>
posNames
=
posMap
.
keySet
();
for
(
String
posName
:
posNames
)
{
...
...
@@ -720,13 +760,13 @@ public class StoragePosManagerImpl implements IStoragePosManager {
List
<
StoragePos
>
emptyPosList
=
new
ArrayList
<>();
emptyPosList
.
add
(
currentPos
);
String
nextPosName
=
posName
;
while
(
true
){
if
(
totalHeight
>=
barcode
.
getHeight
())
{
while
(
true
)
{
if
(
totalHeight
>=
barcode
.
getHeight
())
{
return
emptyPosList
;
}
nextPosName
=
getNextPosName
(
nextPosName
);
StoragePos
nextPos
=
posMap
.
get
(
nextPosName
);
if
(
nextPos
==
null
)
{
if
(
nextPos
==
null
)
{
break
;
}
emptyPosList
.
add
(
nextPos
);
...
...
@@ -760,8 +800,8 @@ public class StoragePosManagerImpl implements IStoragePosManager {
c
=
c
.
and
(
"id"
).
nin
(
excludePosIds
);
}
if
(
StringUtils
.
isNotBlank
(
logo
)){
Pattern
pattern
=
Pattern
.
compile
(
QueryHelp
.
escapeExprSpecialWord
(
logo
),
Pattern
.
CASE_INSENSITIVE
);
if
(
StringUtils
.
isNotBlank
(
logo
))
{
Pattern
pattern
=
Pattern
.
compile
(
QueryHelp
.
escapeExprSpecialWord
(
logo
),
Pattern
.
CASE_INSENSITIVE
);
c
.
and
(
"posName"
).
regex
(
pattern
);
}
...
...
@@ -777,7 +817,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
// msg += "getEmptyPosByStorage 根据就近坐标查询[" + lastPosId + "][" + point.getX() + "," + point.getY() + "]";
// }
StoragePos
pos
=
storagePosDao
.
findOne
(
query
);
if
((!
ObjectUtil
.
isNotEmpty
(
msg
)
)
&&
(
pos
!=
null
))
{
if
((!
ObjectUtil
.
isNotEmpty
(
msg
)
)
&&
(
pos
!=
null
))
{
Point
targetP
=
PointUtil
.
getPosPoint
(
lastPosId
,
false
);
log
.
info
(
msg
+
"结果:["
+
pos
.
getPosName
()
+
"]["
+
targetP
.
getX
()
+
","
+
targetP
.
getY
()
+
"]"
);
}
...
...
@@ -788,27 +828,27 @@ public class StoragePosManagerImpl implements IStoragePosManager {
/**
* 获取下一库位的库位名(后缀数字+1)
*/
private
String
getNextPosName
(
String
posName
){
private
String
getNextPosName
(
String
posName
)
{
String
posIndexStr
=
""
;
String
prefixStr
=
""
;
for
(
int
i
=
1
;
i
<=
posName
.
length
();
i
++)
{
for
(
int
i
=
1
;
i
<=
posName
.
length
();
i
++)
{
char
c
=
posName
.
charAt
(
posName
.
length
()
-
i
);
if
(!
Character
.
isDigit
(
c
))
{
if
(!
Character
.
isDigit
(
c
))
{
prefixStr
=
posName
.
substring
(
0
,
posName
.
length
()
-
i
+
1
);
break
;
}
posIndexStr
=
c
+
posIndexStr
;
}
if
(
posIndexStr
.
isEmpty
())
{
if
(
posIndexStr
.
isEmpty
())
{
return
""
;
}
int
posIndex
=
Integer
.
valueOf
(
posIndexStr
);
int
nextPosIndex
=
posIndex
+
1
;
return
prefixStr
+
String
.
format
(
"%0"
+
posIndexStr
.
length
()+
"d"
,
nextPosIndex
);
return
prefixStr
+
String
.
format
(
"%0"
+
posIndexStr
.
length
()
+
"d"
,
nextPosIndex
);
}
public
List
<
StoragePos
>
findNotEmptyPosName
(){
public
List
<
StoragePos
>
findNotEmptyPosName
()
{
Criteria
c
=
Criteria
.
where
(
"barcode"
).
exists
(
true
)
.
and
(
"enabled"
).
is
(
true
);
//可用;
Query
query
=
new
Query
(
c
);
...
...
@@ -817,7 +857,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}
@Override
public
StoragePos
getPosNameByPnAndStrId
(
String
partNumber
,
String
storageId
)
{
public
StoragePos
getPosNameByPnAndStrId
(
String
partNumber
,
String
storageId
)
{
return
storagePosDao
.
findOne
(
new
Query
(
Criteria
.
where
(
"partNumber"
).
is
(
partNumber
).
and
(
"storageId"
).
is
(
storageId
)));
}
...
...
@@ -839,7 +879,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
Criteria
c
=
Criteria
.
where
(
"barcode.partNumber"
).
is
(
pn
)
.
and
(
"id"
).
nin
(
excludePosIds
)
.
and
(
"enabled"
).
is
(
true
);
//可用
//.and("barcode.lockId").is(null);//没有被锁定的仓位;
//.and("barcode.lockId").is(null);//没有被锁定的仓位;
if
(
storageIdList
!=
null
)
{
c
=
c
.
and
(
"storageId"
).
in
(
storageIdList
);
}
...
...
@@ -854,8 +894,8 @@ public class StoragePosManagerImpl implements IStoragePosManager {
public
void
batchUpdatePosEnabled
(
List
<
String
>
idList
,
boolean
enabled
)
{
Query
query
=
new
Query
(
Criteria
.
where
(
"id"
).
in
(
idList
));
Update
update
=
new
Update
();
update
.
set
(
"enabled"
,
enabled
);
storagePosDao
.
updateMulti
(
query
,
update
);
update
.
set
(
"enabled"
,
enabled
);
storagePosDao
.
updateMulti
(
query
,
update
);
}
@Override
...
...
src/main/java/com/neotel/smfcore/core/system/util/TaskService.java
查看文件 @
12c1121
...
...
@@ -141,7 +141,7 @@ public class TaskService {
public
synchronized
String
checkout
(
Storage
storage
,
StoragePos
pos
,
boolean
isSingleOut
,
String
opUserName
,
String
stationName
)
throws
ValidateException
{
return
checkout
(
storage
,
pos
,
isSingleOut
,
opUserName
,
stationName
,
-
1
);
return
checkout
(
storage
,
pos
,
isSingleOut
,
opUserName
,
stationName
,
-
1
,
""
);
}
/**
...
...
@@ -153,13 +153,11 @@ public class TaskService {
* @return
* @throws ValidateException
*/
public
synchronized
String
checkout
(
Storage
storage
,
StoragePos
pos
,
boolean
isSingleOut
,
String
opUserName
,
String
stationName
,
int
extendType
)
throws
ValidateException
{
public
synchronized
String
checkout
(
Storage
storage
,
StoragePos
pos
,
boolean
isSingleOut
,
String
opUserName
,
String
stationName
,
int
extendType
,
String
line
)
throws
ValidateException
{
if
(
pos
.
getBarcode
()
==
null
)
{
String
msg
=
"库位["
+
pos
.
getPosName
()
+
"]中已无物料,忽略"
;
log
.
info
(
msg
);
throw
new
ValidateException
(
"smfcore.allBoxView.noReel"
,
"库位{0}中无物料"
,
new
String
[]{
pos
.
getPosName
()});
// Barcode barcode=new Barcode();
// SimpleDateFormat formatter= new SimpleDateFormat("HHmmss");
// Date date = new Date(System.currentTimeMillis());
...
...
@@ -207,6 +205,9 @@ public class TaskService {
if
(
extendType
!=
-
1
)
{
task
.
setExtendType
(
extendType
);
}
if
(
StringUtils
.
isNotEmpty
(
line
)){
task
.
setLine
(
line
);
}
addTaskToExecute
(
task
);
//}
return
""
;
...
...
@@ -1211,17 +1212,18 @@ public class TaskService {
//其他出库模式一次性全部生成任务
for
(
TacticsOutDto
item
:
tacticsOutDtos
)
{
log
.
info
(
"开始执行策略出库["
+
item
.
getPartNumber
()
+
"] ["
+
item
.
getStorageId
()
+
"] 盘数="
+
item
.
getPlateNumber
());
log
.
info
(
"开始执行策略出库["
+
item
.
getPartNumber
()
+
"]
["
+
item
.
getProvider
()
+
"]
["
+
item
.
getStorageId
()
+
"] 盘数="
+
item
.
getPlateNumber
());
String
partNumber
=
item
.
getPartNumber
();
String
provider
=
item
.
getProvider
();
for
(
int
i
=
1
;
i
<=
item
.
getPlateNumber
();
i
++)
{
Collection
<
String
>
excludePosIds
=
excludePosIds
();
StoragePos
pos
=
null
;
if
(
item
.
getStorageId
()
!=
null
)
{
String
[]
storageIds
=
new
String
[]{
item
.
getStorageId
()};
pos
=
storagePosManager
.
findPartNumber
InStorages
(
Lists
.
newArrayList
(
storageIds
),
partNumb
er
,
excludePosIds
,
checkoutType
);
pos
=
storagePosManager
.
findPartNumber
AndProviderInStorages
(
Lists
.
newArrayList
(
storageIds
),
partNumber
,
provid
er
,
excludePosIds
,
checkoutType
);
}
else
{
pos
=
storagePosManager
.
findPartNumber
InStorages
(
availableStorageIds
,
partNumb
er
,
excludePosIds
,
checkoutType
);
pos
=
storagePosManager
.
findPartNumber
AndProviderInStorages
(
availableStorageIds
,
partNumber
,
provid
er
,
excludePosIds
,
checkoutType
);
}
if
(
pos
==
null
)
{
log
.
error
(
"策略出库["
+
item
.
getPartNumber
()
+
"] 未找到可以出库的物料["
+
partNumber
+
"]"
);
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论