Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 467324c9
由
sunke
编写于
2023-01-11 14:55:58 +0800
浏览文件
选项
浏览文件
标签
下载
差异文件
Merge remote-tracking branch 'origin/master'
2 个父辈
f11f6c78
ef46faa2
显示空白字符变更
内嵌
并排
正在显示
15 个修改的文件
包含
568 行增加
和
140 行删除
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
src/main/java/com/neotel/smfcore/core/inList/rest/InListController.java
src/main/java/com/neotel/smfcore/core/inList/service/po/InList.java
src/main/java/com/neotel/smfcore/core/kanban/rest/BoxKanbanController.java
src/main/java/com/neotel/smfcore/custom/micron1053/controller/MicronApi.java
src/main/java/com/neotel/smfcore/custom/micron20031/Micron20031Api.java
src/main/java/com/neotel/smfcore/custom/micron20031/MicronSpApiListener.java
src/main/java/com/neotel/smfcore/custom/micron20031/MicronSpController.java
src/main/java/com/neotel/smfcore/custom/micron20031/MicronSpLoadController.java
src/main/java/com/neotel/smfcore/custom/micron20031/MicronSpUnloadController.java
src/main/java/com/neotel/smfcore/custom/micron20031/bean/OrderInfoDto.java → src/main/java/com/neotel/smfcore/custom/micron20031/bean/dto/OrderInfoDto.java
src/main/java/com/neotel/smfcore/custom/micron20031/bean/PosInfoDto.java → src/main/java/com/neotel/smfcore/custom/micron20031/bean/dto/PosInfoDto.java
src/main/java/com/neotel/smfcore/custom/micron20031/bean/PosRowDto.java → src/main/java/com/neotel/smfcore/custom/micron20031/bean/dto/PosRowDto.java
src/main/java/com/neotel/smfcore/custom/micron20031/bean/PosValueInfo.java → src/main/java/com/neotel/smfcore/custom/micron20031/bean/dto/PosValueInfo.java
src/main/java/com/neotel/smfcore/custom/micron20031/bean/dto/SpUnloadDto.java
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
查看文件 @
467324c
...
@@ -6,9 +6,6 @@ import com.google.common.collect.Lists;
...
@@ -6,9 +6,6 @@ import com.google.common.collect.Lists;
import
com.google.common.collect.Maps
;
import
com.google.common.collect.Maps
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.QueryHelp
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.common.utils.YmlUpdateUtil
;
import
com.neotel.smfcore.core.barcode.service.manager.IComponentManager
;
import
com.neotel.smfcore.core.barcode.service.manager.IComponentManager
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.barcode.service.po.Component
;
import
com.neotel.smfcore.core.barcode.service.po.Component
;
...
@@ -16,7 +13,6 @@ import com.neotel.smfcore.core.barcode.utils.CodeResolve;
...
@@ -16,7 +13,6 @@ import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
import
com.neotel.smfcore.core.inList.util.InListCache
;
import
com.neotel.smfcore.core.inList.util.InListCache
;
import
com.neotel.smfcore.core.language.service.bean.LanguageInfo
;
import
com.neotel.smfcore.core.language.service.bean.LanguageInfo
;
import
com.neotel.smfcore.core.language.service.po.LanguageMsg
;
import
com.neotel.smfcore.core.language.util.MessageUtils
;
import
com.neotel.smfcore.core.language.util.MessageUtils
;
import
com.neotel.smfcore.core.storage.bean.InventoryItem
;
import
com.neotel.smfcore.core.storage.bean.InventoryItem
;
import
com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE
;
import
com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE
;
...
@@ -41,8 +37,6 @@ import org.springframework.stereotype.Repository;
...
@@ -41,8 +37,6 @@ import org.springframework.stereotype.Repository;
import
javax.annotation.PostConstruct
;
import
javax.annotation.PostConstruct
;
import
java.util.*
;
import
java.util.*
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
/**
/**
* 缓存
* 缓存
...
@@ -92,7 +86,15 @@ public class DataCache {
...
@@ -92,7 +86,15 @@ public class DataCache {
/**
/**
* 库位占用Map, key为cid,value为已使用的库位列表
* 库位占用Map, key为cid,value为已使用的库位列表
*/
*/
private
static
Map
<
String
,
List
<
String
>>
usedPosNameMap
=
new
ConcurrentHashMap
<>();
private
static
Map
<
String
,
List
<
String
>>
usedPosNameMap
=
new
ConcurrentHashMap
<>();
/**
* 锡膏料仓冷藏区和回温区使用库位数, key为cid, key为 WarmPos 时value表示回温区使用数量,key为 ColdingPos 时value为冷藏区使用数量
*/
private
static
Map
<
String
,
Map
<
String
,
Integer
>>
spUsedPosCountMap
=
new
ConcurrentHashMap
<>();
public
static
String
warmPosUseCount
=
"warmPosUseCount"
;
public
static
String
coldingPosUseCount
=
"coldingPosUseCount"
;
/**
/**
* 禁用库位名称列表
* 禁用库位名称列表
...
@@ -121,14 +123,15 @@ public class DataCache {
...
@@ -121,14 +123,15 @@ public class DataCache {
/**
/**
* 获取缓存信息
* 获取缓存信息
*
* @param cacheKey
* @param cacheKey
* @param <T>
* @param <T>
* @return
* @return
*/
*/
public
<
T
>
T
getCache
(
String
cacheKey
){
public
<
T
>
T
getCache
(
String
cacheKey
)
{
Object
value
=
cacheMap
.
get
(
cacheKey
);
Object
value
=
cacheMap
.
get
(
cacheKey
);
if
(
value
!=
null
)
{
if
(
value
!=
null
)
{
return
(
T
)
value
;
return
(
T
)
value
;
}
}
return
null
;
return
null
;
}
}
...
@@ -141,7 +144,7 @@ public class DataCache {
...
@@ -141,7 +144,7 @@ public class DataCache {
return
orderSetting
;
return
orderSetting
;
}
}
public
List
<
LanguageInfo
>
getLanguageList
(){
public
List
<
LanguageInfo
>
getLanguageList
()
{
List
<
LanguageInfo
>
lanList
=
getCache
(
Constants
.
CACHE_languageType
);
List
<
LanguageInfo
>
lanList
=
getCache
(
Constants
.
CACHE_languageType
);
if
(
lanList
==
null
||
lanList
.
size
()
<=
0
)
{
if
(
lanList
==
null
||
lanList
.
size
()
<=
0
)
{
lanList
=
MessageUtils
.
getDefaultLanList
();
lanList
=
MessageUtils
.
getDefaultLanList
();
...
@@ -153,27 +156,27 @@ public class DataCache {
...
@@ -153,27 +156,27 @@ public class DataCache {
/**
/**
* 更新缓存信息
* 更新缓存信息
*/
*/
public
void
updateCache
(
String
cacheKey
,
Object
value
){
public
void
updateCache
(
String
cacheKey
,
Object
value
)
{
cacheItemDao
.
updateCacheItem
(
cacheKey
,
value
);
cacheItemDao
.
updateCacheItem
(
cacheKey
,
value
);
cacheMap
.
put
(
cacheKey
,
value
);
cacheMap
.
put
(
cacheKey
,
value
);
if
(
cacheKey
.
equals
(
Constants
.
CACHE_CodeRule
))
{
if
(
cacheKey
.
equals
(
Constants
.
CACHE_CodeRule
))
{
List
<
String
>
ruleList
=(
List
<
String
>)
value
;
List
<
String
>
ruleList
=
(
List
<
String
>)
value
;
codeResolve
.
updateBarcodeRuleList
(
ruleList
);
codeResolve
.
updateBarcodeRuleList
(
ruleList
);
}
}
log
.
info
(
"updateCache ["
+
cacheKey
+
"]=["
+
value
+
"]"
);
log
.
info
(
"updateCache ["
+
cacheKey
+
"]=["
+
value
+
"]"
);
}
}
/**
/**
* 获取配置信息同时插入数据库,如果配置值为空,使用数据库配置的值
* 获取配置信息同时插入数据库,如果配置值为空,使用数据库配置的值
*/
*/
public
String
getConfigCache
(
String
configKey
,
String
configValue
)
{
public
String
getConfigCache
(
String
configKey
,
String
configValue
)
{
if
(
Strings
.
isNullOrEmpty
(
configValue
))
{
if
(
Strings
.
isNullOrEmpty
(
configValue
))
{
//没有配置,使用数据库的配置值
//没有配置,使用数据库的配置值
return
getCache
(
configKey
);
return
getCache
(
configKey
);
}
else
{
}
else
{
//有配置值,将配置值写入数据库
//有配置值,将配置值写入数据库
updateCache
(
configKey
,
configValue
);
updateCache
(
configKey
,
configValue
);
return
configValue
;
return
configValue
;
}
}
}
}
...
@@ -181,9 +184,9 @@ public class DataCache {
...
@@ -181,9 +184,9 @@ public class DataCache {
/**
/**
* 是否需要推送温湿度报警值
* 是否需要推送温湿度报警值
*/
*/
public
boolean
needUpdateHumidiy
(
String
cid
){
public
boolean
needUpdateHumidiy
(
String
cid
)
{
Boolean
needUpdateHumidiy
=
needUpdateHumidityMap
.
get
(
cid
);
Boolean
needUpdateHumidiy
=
needUpdateHumidityMap
.
get
(
cid
);
if
(
needUpdateHumidiy
==
null
||
needUpdateHumidiy
)
{
if
(
needUpdateHumidiy
==
null
||
needUpdateHumidiy
)
{
needUpdateHumidityMap
.
put
(
cid
,
false
);
needUpdateHumidityMap
.
put
(
cid
,
false
);
return
true
;
return
true
;
}
}
...
@@ -191,14 +194,14 @@ public class DataCache {
...
@@ -191,14 +194,14 @@ public class DataCache {
}
}
public
Settings
getSettings
(){
public
Settings
getSettings
()
{
if
(
settings
==
null
)
{
if
(
settings
==
null
)
{
List
<
Settings
>
allSettings
=
settingsDao
.
findAll
();
List
<
Settings
>
allSettings
=
settingsDao
.
findAll
();
if
(
allSettings
==
null
||
allSettings
.
isEmpty
())
{
if
(
allSettings
==
null
||
allSettings
.
isEmpty
())
{
settings
=
new
Settings
();
settings
=
new
Settings
();
// settings.setOutType(CHECKOUT_TYPE.EFFICIENCY.name());
// settings.setOutType(CHECKOUT_TYPE.EFFICIENCY.name());
settings
=
settingsDao
.
save
(
settings
);
settings
=
settingsDao
.
save
(
settings
);
}
else
{
}
else
{
settings
=
allSettings
.
get
(
0
);
settings
=
allSettings
.
get
(
0
);
}
}
...
@@ -212,18 +215,18 @@ public class DataCache {
...
@@ -212,18 +215,18 @@ public class DataCache {
/**
/**
* 出库方式
* 出库方式
*/
*/
public
CHECKOUT_TYPE
getCheckOutType
(){
public
CHECKOUT_TYPE
getCheckOutType
()
{
// String outType = getSettings().getOutType();
// String outType = getSettings().getOutType();
String
outType
=
getCache
(
Constants
.
CACHE_CheckOutType
);
String
outType
=
getCache
(
Constants
.
CACHE_CheckOutType
);
if
(
ObjectUtil
.
isEmpty
(
outType
))
{
if
(
ObjectUtil
.
isEmpty
(
outType
))
{
outType
=
CHECKOUT_TYPE
.
EFFICIENCY
.
name
();
outType
=
CHECKOUT_TYPE
.
EFFICIENCY
.
name
();
updateCache
(
Constants
.
CACHE_CheckOutType
,
outType
);
updateCache
(
Constants
.
CACHE_CheckOutType
,
outType
);
log
.
info
(
"未配置 出库策略配置类型,默认为"
+
outType
);
log
.
info
(
"未配置 出库策略配置类型,默认为"
+
outType
);
}
}
return
CHECKOUT_TYPE
.
valueOf
(
outType
);
return
CHECKOUT_TYPE
.
valueOf
(
outType
);
}
}
public
Settings
updateSettings
(
Settings
newSetting
){
public
Settings
updateSettings
(
Settings
newSetting
)
{
settings
=
settingsDao
.
save
(
newSetting
);
settings
=
settingsDao
.
save
(
newSetting
);
List
<
String
>
ruleItems
=
settings
.
getCodeRuleList
();
List
<
String
>
ruleItems
=
settings
.
getCodeRuleList
();
codeResolve
.
updateBarcodeRuleList
(
ruleItems
);
codeResolve
.
updateBarcodeRuleList
(
ruleItems
);
...
@@ -272,8 +275,7 @@ public class DataCache {
...
@@ -272,8 +275,7 @@ public class DataCache {
/**
/**
* 库存 map, key 为 cid,value 为料盘存量 map(key为 PartNumber,value 为 库存数量及盘数的Bean)
* 库存 map, key 为 cid,value 为料盘存量 map(key为 PartNumber,value 为 库存数量及盘数的Bean)
*/
*/
private
static
Map
<
String
,
Map
<
String
,
InventoryItem
>>
inventoryMap
=
new
ConcurrentHashMap
<>();
private
static
Map
<
String
,
Map
<
String
,
InventoryItem
>>
inventoryMap
=
new
ConcurrentHashMap
<>();
/**
/**
...
@@ -296,14 +298,14 @@ public class DataCache {
...
@@ -296,14 +298,14 @@ public class DataCache {
// return storageIds;
// return storageIds;
// }
// }
//
//
public
Map
<
String
,
Storage
>
getAllStorage
(){
public
Map
<
String
,
Storage
>
getAllStorage
()
{
if
(
allStorage
.
isEmpty
())
{
if
(
allStorage
.
isEmpty
())
{
synchronized
(
allStorage
){
synchronized
(
allStorage
)
{
if
(
allStorage
.
isEmpty
())
{
if
(
allStorage
.
isEmpty
())
{
List
<
Storage
>
all
=
storageManager
.
findAll
();
List
<
Storage
>
all
=
storageManager
.
findAll
();
if
(
all
!=
null
)
{
if
(
all
!=
null
)
{
Map
<
String
,
Storage
>
map
=
new
ConcurrentHashMap
<>();
Map
<
String
,
Storage
>
map
=
new
ConcurrentHashMap
<>();
for
(
Storage
storage
:
all
)
{
for
(
Storage
storage
:
all
)
{
List
<
PlateSizeBean
>
plateSizeBeanList
=
storagePosManager
.
getStoragePosUsage
(
storage
.
getId
());
List
<
PlateSizeBean
>
plateSizeBeanList
=
storagePosManager
.
getStoragePosUsage
(
storage
.
getId
());
storage
.
initUsage
(
plateSizeBeanList
);
storage
.
initUsage
(
plateSizeBeanList
);
...
@@ -313,7 +315,7 @@ public class DataCache {
...
@@ -313,7 +315,7 @@ public class DataCache {
}
}
allStorage
=
map
;
allStorage
=
map
;
log
.
info
(
"加载所有料仓["
+
all
.
size
()+
"]信息到缓存"
);
log
.
info
(
"加载所有料仓["
+
all
.
size
()
+
"]信息到缓存"
);
}
}
}
}
}
}
...
@@ -336,8 +338,8 @@ public class DataCache {
...
@@ -336,8 +338,8 @@ public class DataCache {
/**
/**
* 根据 cid 获取料仓信息
* 根据 cid 获取料仓信息
*/
*/
public
Storage
getStorage
(
String
cid
){
public
Storage
getStorage
(
String
cid
)
{
if
(
Strings
.
isNullOrEmpty
(
cid
))
{
if
(
Strings
.
isNullOrEmpty
(
cid
))
{
return
null
;
return
null
;
}
}
return
getAllStorage
().
get
(
cid
);
return
getAllStorage
().
get
(
cid
);
...
@@ -346,9 +348,9 @@ public class DataCache {
...
@@ -346,9 +348,9 @@ public class DataCache {
/**
/**
* 根据 Id 获取料仓信息
* 根据 Id 获取料仓信息
*/
*/
public
Storage
getStorageById
(
String
storageId
){
public
Storage
getStorageById
(
String
storageId
)
{
for
(
Storage
storage
:
getAllStorage
().
values
())
{
for
(
Storage
storage
:
getAllStorage
().
values
())
{
if
(
storage
.
getId
().
equals
(
storageId
))
{
if
(
storage
.
getId
().
equals
(
storageId
))
{
return
storage
;
return
storage
;
}
}
}
}
...
@@ -357,15 +359,15 @@ public class DataCache {
...
@@ -357,15 +359,15 @@ public class DataCache {
/**
/**
* 根据 料仓名称 Name 获取料仓信息
* 根据 料仓名称 Name 获取料仓信息
*/
*/
public
Storage
getStorageByName
(
String
storageName
){
public
Storage
getStorageByName
(
String
storageName
)
{
for
(
Storage
storage
:
getAllStorage
().
values
())
{
for
(
Storage
storage
:
getAllStorage
().
values
())
{
if
(
storage
.
getName
().
equals
(
storageName
))
{
if
(
storage
.
getName
().
equals
(
storageName
))
{
return
storage
;
return
storage
;
}
}
}
}
return
null
;
return
null
;
}
}
public
Storage
reloadStorage
(
Storage
storage
,
String
oldCid
)
throws
ValidateException
{
public
Storage
reloadStorage
(
Storage
storage
,
String
oldCid
)
throws
ValidateException
{
if
(!
oldCid
.
equals
(
""
)
&&
allStorage
.
containsKey
(
oldCid
))
{
if
(!
oldCid
.
equals
(
""
)
&&
allStorage
.
containsKey
(
oldCid
))
{
allStorage
.
remove
(
oldCid
);
allStorage
.
remove
(
oldCid
);
...
@@ -390,7 +392,7 @@ public class DataCache {
...
@@ -390,7 +392,7 @@ public class DataCache {
/**
/**
* 获取禁用库位缓存
* 获取禁用库位缓存
*/
*/
public
Set
<
String
>
getDisabledPosNameSet
(){
public
Set
<
String
>
getDisabledPosNameSet
()
{
initDisabledPosNameSet
();
initDisabledPosNameSet
();
return
disabledPosNameSet
;
return
disabledPosNameSet
;
}
}
...
@@ -398,8 +400,8 @@ public class DataCache {
...
@@ -398,8 +400,8 @@ public class DataCache {
/**
/**
* 初始化禁用库位缓存
* 初始化禁用库位缓存
*/
*/
private
synchronized
void
initDisabledPosNameSet
(){
private
synchronized
void
initDisabledPosNameSet
()
{
if
(
disabledPosNameSet
==
null
)
{
if
(
disabledPosNameSet
==
null
)
{
disabledPosNameSet
=
new
HashSet
<>();
disabledPosNameSet
=
new
HashSet
<>();
List
<
StoragePos
>
disabledPosList
=
storagePosManager
.
findDisabled
();
List
<
StoragePos
>
disabledPosList
=
storagePosManager
.
findDisabled
();
for
(
StoragePos
disabledPos
:
disabledPosList
)
{
for
(
StoragePos
disabledPos
:
disabledPosList
)
{
...
@@ -412,11 +414,11 @@ public class DataCache {
...
@@ -412,11 +414,11 @@ public class DataCache {
/**
/**
* 更新禁用库位缓存
* 更新禁用库位缓存
*/
*/
public
void
updateDisablePos
(
StoragePos
pos
){
public
void
updateDisablePos
(
StoragePos
pos
)
{
initDisabledPosNameSet
();
initDisabledPosNameSet
();
if
(
pos
.
isEnabled
())
{
if
(
pos
.
isEnabled
())
{
disabledPosNameSet
.
remove
(
pos
.
getPosName
());
disabledPosNameSet
.
remove
(
pos
.
getPosName
());
}
else
{
}
else
{
disabledPosNameSet
.
add
(
pos
.
getPosName
());
disabledPosNameSet
.
add
(
pos
.
getPosName
());
}
}
}
}
...
@@ -424,7 +426,7 @@ public class DataCache {
...
@@ -424,7 +426,7 @@ public class DataCache {
/**
/**
* 出库时清除使用库位列表
* 出库时清除使用库位列表
*/
*/
private
void
removeUsedPosNameList
(
String
cid
,
String
posName
){
private
void
removeUsedPosNameList
(
String
cid
,
String
posName
)
{
List
<
String
>
usedPosNameList
=
getUsedPosNameList
(
cid
);
List
<
String
>
usedPosNameList
=
getUsedPosNameList
(
cid
);
usedPosNameList
.
remove
(
posName
);
usedPosNameList
.
remove
(
posName
);
usedPosNameMap
.
put
(
cid
,
usedPosNameList
);
usedPosNameMap
.
put
(
cid
,
usedPosNameList
);
...
@@ -433,7 +435,7 @@ public class DataCache {
...
@@ -433,7 +435,7 @@ public class DataCache {
/**
/**
* 入库时增加使用库位列表
* 入库时增加使用库位列表
*/
*/
private
void
addUsedPosNameList
(
String
cid
,
String
posName
){
private
void
addUsedPosNameList
(
String
cid
,
String
posName
)
{
List
<
String
>
usedPosNameList
=
getUsedPosNameList
(
cid
);
List
<
String
>
usedPosNameList
=
getUsedPosNameList
(
cid
);
usedPosNameList
.
add
(
posName
);
usedPosNameList
.
add
(
posName
);
usedPosNameMap
.
put
(
cid
,
usedPosNameList
);
usedPosNameMap
.
put
(
cid
,
usedPosNameList
);
...
@@ -441,18 +443,18 @@ public class DataCache {
...
@@ -441,18 +443,18 @@ public class DataCache {
/**
/**
* 获取设备所有占用的库位名称列表
* 获取设备所有占用的库位名称列表
*/
*/
public
List
<
String
>
getUsedPosNameList
(
String
cid
){
public
List
<
String
>
getUsedPosNameList
(
String
cid
)
{
List
<
String
>
posNameList
=
usedPosNameMap
.
get
(
cid
);
List
<
String
>
posNameList
=
usedPosNameMap
.
get
(
cid
);
if
(
posNameList
==
null
)
{
if
(
posNameList
==
null
)
{
Storage
storage
=
getStorage
(
cid
);
Storage
storage
=
getStorage
(
cid
);
posNameList
=
new
ArrayList
<>();
posNameList
=
new
ArrayList
<>();
if
(
storage
!=
null
)
{
if
(
storage
!=
null
)
{
log
.
info
(
"加载["
+
cid
+
"]所有已使用库位到缓存"
);
log
.
info
(
"加载["
+
cid
+
"]所有已使用库位到缓存"
);
List
<
StoragePos
>
allPos
=
storagePosManager
.
findUsedPosNameByStorageId
(
storage
.
getId
());
List
<
StoragePos
>
allPos
=
storagePosManager
.
findUsedPosNameByStorageId
(
storage
.
getId
());
for
(
StoragePos
pos
:
allPos
)
{
for
(
StoragePos
pos
:
allPos
)
{
posNameList
.
add
(
pos
.
getPosName
());
posNameList
.
add
(
pos
.
getPosName
());
}
}
usedPosNameMap
.
put
(
cid
,
posNameList
);
usedPosNameMap
.
put
(
cid
,
posNameList
);
}
}
}
}
return
posNameList
;
return
posNameList
;
...
@@ -463,38 +465,38 @@ public class DataCache {
...
@@ -463,38 +465,38 @@ public class DataCache {
* 锁定库存
* 锁定库存
* @param cid
* @param cid
* @param partNumber 物料编号
* @param partNumber 物料编号
* @return 锁定结果,true 表示有足够的库存,锁定成功;false表示库存不足,锁定失败
* @return 锁定结果,
true 表示有足够的库存,锁定成功;false表示库存不足,锁定失败
*/
*/
public
boolean
lockOneReel
(
String
cid
,
String
partNumber
){
public
boolean
lockOneReel
(
String
cid
,
String
partNumber
)
{
boolean
result
=
false
;
boolean
result
=
false
;
InventoryItem
inventoryItem
=
getStorageInventoryByPartNumber
(
cid
,
partNumber
);
InventoryItem
inventoryItem
=
getStorageInventoryByPartNumber
(
cid
,
partNumber
);
if
(
inventoryItem
!=
null
)
{
if
(
inventoryItem
!=
null
)
{
int
lockReel
=
inventoryItem
.
getLockReel
();
int
lockReel
=
inventoryItem
.
getLockReel
();
//理论上这里是同一个对象,不需要再显式的放入map 中
//理论上这里是同一个对象,不需要再显式的放入map 中
result
=
inventoryItem
.
lockOne
();
result
=
inventoryItem
.
lockOne
();
log
.
info
(
"锁定料仓["
+
cid
+
"]物料["
+
partNumber
+
"],锁定数量["
+
lockReel
+
"]=>["
+
inventoryItem
.
getLockReel
()+
"],当前库存:"
+
inventoryItem
.
getStockReel
());
log
.
info
(
"锁定料仓["
+
cid
+
"]物料["
+
partNumber
+
"],锁定数量["
+
lockReel
+
"]=>["
+
inventoryItem
.
getLockReel
()
+
"],当前库存:"
+
inventoryItem
.
getStockReel
());
updateStorageInventory
(
cid
,
inventoryItem
);
updateStorageInventory
(
cid
,
inventoryItem
);
}
}
return
result
;
return
result
;
}
}
/**
/**
* 解除锁定库存(出库任务完成或取消时调用)
* 解除锁定库存(出库任务完成或取消时调用)
*/
*/
public
void
unLockOneReel
(
String
cid
,
String
partNumber
){
public
void
unLockOneReel
(
String
cid
,
String
partNumber
)
{
InventoryItem
partNumberInventory
=
getStorageInventoryByPartNumber
(
cid
,
partNumber
);
InventoryItem
partNumberInventory
=
getStorageInventoryByPartNumber
(
cid
,
partNumber
);
if
(
partNumberInventory
!=
null
)
{
if
(
partNumberInventory
!=
null
)
{
int
lockReel
=
partNumberInventory
.
getLockReel
();
int
lockReel
=
partNumberInventory
.
getLockReel
();
//理论上这里是同一个对象,不需要再显式的放入map 中
//理论上这里是同一个对象,不需要再显式的放入map 中
partNumberInventory
.
unLock
(
1
);
partNumberInventory
.
unLock
(
1
);
log
.
info
(
"解除锁定料仓["
+
cid
+
"]物料["
+
partNumber
+
"],锁定数量["
+
lockReel
+
"]=>["
+
partNumberInventory
.
getLockReel
()+
"],当前库存:"
+
partNumberInventory
.
getStockReel
());
log
.
info
(
"解除锁定料仓["
+
cid
+
"]物料["
+
partNumber
+
"],锁定数量["
+
lockReel
+
"]=>["
+
partNumberInventory
.
getLockReel
()
+
"],当前库存:"
+
partNumberInventory
.
getStockReel
());
updateStorageInventory
(
cid
,
partNumberInventory
);
updateStorageInventory
(
cid
,
partNumberInventory
);
}
}
}
}
/**
/**
* 获取库存信息,key 为 PN
* 获取库存信息,key 为 PN
*/
*/
public
Map
<
String
,
InventoryItem
>
getAllInventory
(
List
<
String
>
storageIds
,
String
blurry
)
{
public
Map
<
String
,
InventoryItem
>
getAllInventory
(
List
<
String
>
storageIds
,
String
blurry
)
{
Map
<
String
,
Storage
>
allStorages
=
getAllStorage
();
Map
<
String
,
Storage
>
allStorages
=
getAllStorage
();
List
<
Storage
>
storages
=
Lists
.
newArrayList
();
List
<
Storage
>
storages
=
Lists
.
newArrayList
();
for
(
Storage
storage
:
allStorages
.
values
())
{
for
(
Storage
storage
:
allStorages
.
values
())
{
...
@@ -506,7 +508,7 @@ public class DataCache {
...
@@ -506,7 +508,7 @@ public class DataCache {
Map
<
String
,
InventoryItem
>
resultMap
=
new
HashMap
<>();
Map
<
String
,
InventoryItem
>
resultMap
=
new
HashMap
<>();
for
(
InventoryItem
item
:
map
.
values
())
{
for
(
InventoryItem
item
:
map
.
values
())
{
if
(
ObjectUtil
.
isNotEmpty
(
blurry
))
{
if
(
ObjectUtil
.
isNotEmpty
(
blurry
))
{
if
(
item
.
getPartNumber
().
contains
(
blurry
))
{
if
(
item
.
getPartNumber
().
contains
(
blurry
))
{
resultMap
.
put
(
item
.
getPartNumber
(),
item
);
resultMap
.
put
(
item
.
getPartNumber
(),
item
);
}
}
}
else
{
}
else
{
...
@@ -519,19 +521,19 @@ public class DataCache {
...
@@ -519,19 +521,19 @@ public class DataCache {
/**
/**
* 获取某些料仓的库存信息
* 获取某些料仓的库存信息
*/
*/
private
Map
<
String
,
InventoryItem
>
getInventory
(
Collection
<
Storage
>
storageList
)
{
private
Map
<
String
,
InventoryItem
>
getInventory
(
Collection
<
Storage
>
storageList
)
{
Map
<
String
,
InventoryItem
>
resultMap
=
Maps
.
newHashMap
();
Map
<
String
,
InventoryItem
>
resultMap
=
Maps
.
newHashMap
();
for
(
Storage
storage
:
storageList
)
{
for
(
Storage
storage
:
storageList
)
{
Map
<
String
,
InventoryItem
>
storageInventory
=
getStorageInventory
(
storage
.
getCid
());
Map
<
String
,
InventoryItem
>
storageInventory
=
getStorageInventory
(
storage
.
getCid
());
for
(
InventoryItem
storageInventoryItem
:
storageInventory
.
values
())
{
for
(
InventoryItem
storageInventoryItem
:
storageInventory
.
values
())
{
storageInventoryItem
.
setStorageName
(
storage
.
getName
());
storageInventoryItem
.
setStorageName
(
storage
.
getName
());
String
partNumber
=
storageInventoryItem
.
getPartNumber
();
String
partNumber
=
storageInventoryItem
.
getPartNumber
();
InventoryItem
pnInventoryItem
=
resultMap
.
get
(
storageInventoryItem
.
getPartNumber
());
InventoryItem
pnInventoryItem
=
resultMap
.
get
(
storageInventoryItem
.
getPartNumber
());
if
(
pnInventoryItem
==
null
)
{
if
(
pnInventoryItem
==
null
)
{
pnInventoryItem
=
new
InventoryItem
();
pnInventoryItem
=
new
InventoryItem
();
pnInventoryItem
.
setStorageName
(
storageInventoryItem
.
getStorageName
());
pnInventoryItem
.
setStorageName
(
storageInventoryItem
.
getStorageName
());
pnInventoryItem
.
setStorageId
(
storage
.
getId
());
pnInventoryItem
.
setStorageId
(
storage
.
getId
());
}
else
{
}
else
{
pnInventoryItem
.
setStorageName
(
null
);
pnInventoryItem
.
setStorageName
(
null
);
pnInventoryItem
.
setStorageId
(
null
);
pnInventoryItem
.
setStorageId
(
null
);
}
}
...
@@ -541,7 +543,7 @@ public class DataCache {
...
@@ -541,7 +543,7 @@ public class DataCache {
pnInventoryItem
.
setStockReel
(
pnInventoryItem
.
getStockReel
()
+
storageInventoryItem
.
getStockReel
());
pnInventoryItem
.
setStockReel
(
pnInventoryItem
.
getStockReel
()
+
storageInventoryItem
.
getStockReel
());
pnInventoryItem
.
setLockReel
(
pnInventoryItem
.
getLockReel
()
+
storageInventoryItem
.
getLockReel
());
pnInventoryItem
.
setLockReel
(
pnInventoryItem
.
getLockReel
()
+
storageInventoryItem
.
getLockReel
());
resultMap
.
put
(
partNumber
,
pnInventoryItem
);
resultMap
.
put
(
partNumber
,
pnInventoryItem
);
}
}
}
}
return
resultMap
;
return
resultMap
;
...
@@ -550,26 +552,26 @@ public class DataCache {
...
@@ -550,26 +552,26 @@ public class DataCache {
/**
/**
* 获取料仓的库存信息
* 获取料仓的库存信息
*/
*/
public
Map
<
String
,
InventoryItem
>
getStorageInventory
(
String
cid
){
public
Map
<
String
,
InventoryItem
>
getStorageInventory
(
String
cid
)
{
Map
<
String
,
InventoryItem
>
storageInventory
=
inventoryMap
.
get
(
cid
);
Map
<
String
,
InventoryItem
>
storageInventory
=
inventoryMap
.
get
(
cid
);
if
(
storageInventory
==
null
)
{
if
(
storageInventory
==
null
)
{
storageInventory
=
initInventory
(
cid
);
storageInventory
=
initInventory
(
cid
);
}
}
return
storageInventory
;
return
storageInventory
;
}
}
public
InventoryItem
getStorageInventoryByPartNumber
(
String
cid
,
String
partNumber
){
public
InventoryItem
getStorageInventoryByPartNumber
(
String
cid
,
String
partNumber
)
{
Map
<
String
,
InventoryItem
>
storageInventory
=
getStorageInventory
(
cid
);
Map
<
String
,
InventoryItem
>
storageInventory
=
getStorageInventory
(
cid
);
InventoryItem
partNumberInventoryItem
=
storageInventory
.
get
(
partNumber
);
InventoryItem
partNumberInventoryItem
=
storageInventory
.
get
(
partNumber
);
if
(
partNumberInventoryItem
==
null
)
{
if
(
partNumberInventoryItem
==
null
)
{
partNumberInventoryItem
=
new
InventoryItem
();
partNumberInventoryItem
=
new
InventoryItem
();
partNumberInventoryItem
.
setPartNumber
(
partNumber
);
partNumberInventoryItem
.
setPartNumber
(
partNumber
);
}
}
return
partNumberInventoryItem
;
return
partNumberInventoryItem
;
}
}
private
synchronized
Map
<
String
,
InventoryItem
>
initInventory
(
String
cid
){
private
synchronized
Map
<
String
,
InventoryItem
>
initInventory
(
String
cid
)
{
Storage
storage
=
getStorage
(
cid
);
Storage
storage
=
getStorage
(
cid
);
Map
<
String
,
InventoryItem
>
storageInventoryMap
=
storagePosManager
.
getInventory
(
storage
.
getId
());
Map
<
String
,
InventoryItem
>
storageInventoryMap
=
storagePosManager
.
getInventory
(
storage
.
getId
());
//未完成的 Task 也需要锁定
//未完成的 Task 也需要锁定
...
@@ -587,7 +589,7 @@ public class DataCache {
...
@@ -587,7 +589,7 @@ public class DataCache {
// }
// }
// }
// }
log
.
info
(
"初始化料仓["
+
cid
+
"]的库存信息["
+
storageInventoryMap
.
size
()+
"]条"
);
log
.
info
(
"初始化料仓["
+
cid
+
"]的库存信息["
+
storageInventoryMap
.
size
()
+
"]条"
);
inventoryMap
.
put
(
cid
,
storageInventoryMap
);
inventoryMap
.
put
(
cid
,
storageInventoryMap
);
return
storageInventoryMap
;
return
storageInventoryMap
;
}
}
...
@@ -599,10 +601,10 @@ public class DataCache {
...
@@ -599,10 +601,10 @@ public class DataCache {
* @param amount
* @param amount
* @return
* @return
*/
*/
public
int
updateInventoryAmount
(
String
cid
,
String
partNumber
,
int
amount
)
{
public
int
updateInventoryAmount
(
String
cid
,
String
partNumber
,
int
amount
)
{
if
(
amount
!=
0
)
{
if
(
amount
!=
0
)
{
InventoryItem
inventoryItem
=
getStorageInventoryByPartNumber
(
cid
,
partNumber
);
InventoryItem
inventoryItem
=
getStorageInventoryByPartNumber
(
cid
,
partNumber
);
if
(
inventoryItem
==
null
)
{
if
(
inventoryItem
==
null
)
{
inventoryItem
=
new
InventoryItem
();
inventoryItem
=
new
InventoryItem
();
inventoryItem
.
setPartNumber
(
partNumber
);
inventoryItem
.
setPartNumber
(
partNumber
);
}
}
...
@@ -616,46 +618,48 @@ public class DataCache {
...
@@ -616,46 +618,48 @@ public class DataCache {
/**
/**
* 修改库存,出库为负,入库为正
* 修改库存,出库为负,入库为正
*/
*/
public
int
updateInventory
(
StoragePos
pos
,
Barcode
barcode
){
public
int
updateInventory
(
StoragePos
pos
,
Barcode
barcode
)
{
Storage
storage
=
getStorageById
(
pos
.
getStorageId
());
Storage
storage
=
getStorageById
(
pos
.
getStorageId
());
String
cid
=
storage
.
getCid
();
String
cid
=
storage
.
getCid
();
String
partNumber
=
barcode
.
getPartNumber
();
String
partNumber
=
barcode
.
getPartNumber
();
int
amount
=
0
;
int
amount
=
0
;
String
sizeStr
=
pos
.
getSizeStr
();
String
sizeStr
=
pos
.
getSizeStr
();
if
(
pos
.
getBarcode
()
==
null
)
{
if
(
pos
.
getBarcode
()
==
null
)
{
//出库
//出库
amount
=
-
barcode
.
getAmount
();
amount
=
-
barcode
.
getAmount
();
storage
.
emptyOnePos
(
pos
);
storage
.
emptyOnePos
(
pos
);
updateSpUsePosCount
(
storage
,
pos
,
-
1
);
removeUsedPosNameList
(
cid
,
pos
.
getPosName
());
removeUsedPosNameList
(
cid
,
pos
.
getPosName
());
}
else
{
}
else
{
//入库
//入库
amount
=
barcode
.
getAmount
();
amount
=
barcode
.
getAmount
();
storage
.
useOnePos
(
pos
);
storage
.
useOnePos
(
pos
);
updateSpUsePosCount
(
storage
,
pos
,
1
);
addUsedPosNameList
(
cid
,
pos
.
getPosName
());
addUsedPosNameList
(
cid
,
pos
.
getPosName
());
//入库单处理
//入库单处理
if
(
ObjectUtil
.
isNotEmpty
(
storage
.
getInListName
()))
{
if
(
ObjectUtil
.
isNotEmpty
(
storage
.
getInListName
()))
{
inListCache
.
UpdateInList
(
storage
.
getInListName
(),
pos
,
barcode
);
inListCache
.
UpdateInList
(
storage
.
getInListName
(),
pos
,
barcode
);
}
}
}
}
allStorage
.
put
(
cid
,
storage
);
allStorage
.
put
(
cid
,
storage
);
return
updateInventoryAmount
(
cid
,
partNumber
,
amount
);
return
updateInventoryAmount
(
cid
,
partNumber
,
amount
);
}
}
private
void
updateStorageInventory
(
String
cid
,
InventoryItem
inventoryItem
){
private
void
updateStorageInventory
(
String
cid
,
InventoryItem
inventoryItem
)
{
Map
<
String
,
InventoryItem
>
storageInventory
=
inventoryMap
.
get
(
cid
);
Map
<
String
,
InventoryItem
>
storageInventory
=
inventoryMap
.
get
(
cid
);
storageInventory
.
put
(
inventoryItem
.
getPartNumber
(),
inventoryItem
);
storageInventory
.
put
(
inventoryItem
.
getPartNumber
(),
inventoryItem
);
inventoryMap
.
put
(
cid
,
storageInventory
);
inventoryMap
.
put
(
cid
,
storageInventory
);
}
}
public
List
<
String
>
getCidsByGroupId
(
String
groupId
,
boolean
nullReturnAll
)
{
public
List
<
String
>
getCidsByGroupId
(
String
groupId
,
boolean
nullReturnAll
)
{
if
(
groupId
!=
null
&&
groupId
.
equals
(
"-1"
))
{
if
(
groupId
!=
null
&&
groupId
.
equals
(
"-1"
))
{
groupId
=
""
;
groupId
=
""
;
}
}
List
<
String
>
cidList
=
Lists
.
newArrayList
();
List
<
String
>
cidList
=
Lists
.
newArrayList
();
for
(
Storage
storage
:
getAllStorage
().
values
())
{
for
(
Storage
storage
:
getAllStorage
().
values
())
{
if
(
groupId
!=
null
)
{
if
(
groupId
!=
null
)
{
// String storageGroupId = storage.getGroupId();
// String storageGroupId = storage.getGroupId();
// if(ObjectUtils.isEmpty(storageGroupId)){
// if(ObjectUtils.isEmpty(storageGroupId)){
// storageGroupId="";
// storageGroupId="";
...
@@ -663,48 +667,48 @@ public class DataCache {
...
@@ -663,48 +667,48 @@ public class DataCache {
// if ( storageGroupId.equals(groupId)) {
// if ( storageGroupId.equals(groupId)) {
// cidList.add(storage.getCid());
// cidList.add(storage.getCid());
// }
// }
if
(
storage
.
IsRightGroup
(
groupId
))
{
if
(
storage
.
IsRightGroup
(
groupId
))
{
cidList
.
add
(
storage
.
getCid
());
cidList
.
add
(
storage
.
getCid
());
}
}
}
else
if
(
nullReturnAll
)
{
}
else
if
(
nullReturnAll
)
{
cidList
.
add
(
storage
.
getCid
());
cidList
.
add
(
storage
.
getCid
());
}
}
}
}
return
cidList
;
return
cidList
;
}
}
public
List
<
String
>
getStorageIdsByGroupId
(
String
groupId
,
boolean
nullReturnAll
)
{
public
List
<
String
>
getStorageIdsByGroupId
(
String
groupId
,
boolean
nullReturnAll
)
{
if
(
groupId
!=
null
&&
groupId
.
equals
(
"-1"
))
{
if
(
groupId
!=
null
&&
groupId
.
equals
(
"-1"
))
{
groupId
=
""
;
groupId
=
""
;
}
}
List
<
String
>
storageIds
=
Lists
.
newArrayList
();
List
<
String
>
storageIds
=
Lists
.
newArrayList
();
for
(
Storage
storage
:
getAllStorage
().
values
())
{
for
(
Storage
storage
:
getAllStorage
().
values
())
{
if
(
groupId
!=
null
)
{
if
(
groupId
!=
null
)
{
if
(
storage
.
IsRightGroup
(
groupId
))
{
if
(
storage
.
IsRightGroup
(
groupId
))
{
storageIds
.
add
(
storage
.
getId
());
storageIds
.
add
(
storage
.
getId
());
}
}
}
else
if
(
nullReturnAll
)
{
}
else
if
(
nullReturnAll
)
{
storageIds
.
add
(
storage
.
getId
());
storageIds
.
add
(
storage
.
getId
());
}
}
}
}
return
storageIds
;
return
storageIds
;
}
}
public
void
clearGroup
(
String
groupId
){
public
void
clearGroup
(
String
groupId
)
{
if
(
ObjectUtil
.
isEmpty
(
groupId
)||
groupId
.
equals
(
"-1"
))
{
if
(
ObjectUtil
.
isEmpty
(
groupId
)
||
groupId
.
equals
(
"-1"
))
{
return
;
return
;
}
}
for
(
String
key
:
for
(
String
key
:
allStorage
.
keySet
())
{
allStorage
.
keySet
())
{
if
(
allStorage
.
get
(
key
).
getGroupId
().
equals
(
groupId
))
{
if
(
allStorage
.
get
(
key
).
getGroupId
().
equals
(
groupId
))
{
allStorage
.
get
(
key
).
setGroupId
(
""
);
allStorage
.
get
(
key
).
setGroupId
(
""
);
}
}
}
}
}
}
public
List
<
String
>
getAvailableStorageIds
(){
public
List
<
String
>
getAvailableStorageIds
()
{
List
<
String
>
availableStorageIds
=
new
ArrayList
<>();
List
<
String
>
availableStorageIds
=
new
ArrayList
<>();
for
(
Storage
storage
:
getAllStorage
().
values
())
{
for
(
Storage
storage
:
getAllStorage
().
values
())
{
StatusBean
bean
=
DevicesStatusUtil
.
getStatusBean
(
storage
.
getCid
());
StatusBean
bean
=
DevicesStatusUtil
.
getStatusBean
(
storage
.
getCid
());
...
@@ -715,10 +719,10 @@ public class DataCache {
...
@@ -715,10 +719,10 @@ public class DataCache {
}
}
return
availableStorageIds
;
return
availableStorageIds
;
}
}
public
List
<
String
>
getAvailableStorageIds
(
DeviceType
deviceType
){
public
List
<
String
>
getAvailableStorageIds
(
DeviceType
deviceType
)
{
List
<
String
>
availableStorageIds
=
new
ArrayList
<>();
List
<
String
>
availableStorageIds
=
new
ArrayList
<>();
for
(
Storage
storage
:
getAllStorage
().
values
())
{
for
(
Storage
storage
:
getAllStorage
().
values
())
{
if
(
storage
.
getType
().
equals
(
deviceType
.
name
()))
{
if
(
storage
.
getType
().
equals
(
deviceType
.
name
()))
{
StatusBean
bean
=
DevicesStatusUtil
.
getStatusBean
(
storage
.
getCid
());
StatusBean
bean
=
DevicesStatusUtil
.
getStatusBean
(
storage
.
getCid
());
if
(
bean
==
null
||
bean
.
timeOut
()
||
!
bean
.
isAvailable
())
{
if
(
bean
==
null
||
bean
.
timeOut
()
||
!
bean
.
isAvailable
())
{
continue
;
continue
;
...
@@ -728,7 +732,7 @@ public class DataCache {
...
@@ -728,7 +732,7 @@ public class DataCache {
}
}
return
availableStorageIds
;
return
availableStorageIds
;
}
}
public
Storage
AutoCreateStorage
(
String
cid
,
String
deviceType
)
{
public
Storage
AutoCreateStorage
(
String
cid
,
String
deviceType
)
{
//判断cid存在
//判断cid存在
Storage
storage
=
null
;
Storage
storage
=
null
;
storage
=
getStorage
(
cid
);
storage
=
getStorage
(
cid
);
...
@@ -751,14 +755,77 @@ public class DataCache {
...
@@ -751,14 +755,77 @@ public class DataCache {
storage
=
storageManager
.
save
(
storage
);
storage
=
storageManager
.
save
(
storage
);
reloadStorage
(
storage
,
""
);
reloadStorage
(
storage
,
""
);
log
.
info
(
"AutoCreateStorage :自动创建料仓完成:cid["
+
storage
.
getCid
()+
"]name["
+
storage
.
getName
()+
"]type["
+
storage
.
getType
()+
"]"
);
log
.
info
(
"AutoCreateStorage :自动创建料仓完成:cid["
+
storage
.
getCid
()
+
"]name["
+
storage
.
getName
()
+
"]type["
+
storage
.
getType
()
+
"]"
);
return
storage
;
return
storage
;
}
}
public
int
getPNsluggishDay
(
String
pn
){
public
int
getPNsluggishDay
(
String
pn
)
{
Component
component
=
componentManager
.
findOneByPN
(
pn
);
Component
component
=
componentManager
.
findOneByPN
(
pn
);
if
(
component
!=
null
)
{
if
(
component
!=
null
)
{
return
component
.
getSluggishDay
();
return
component
.
getSluggishDay
();
}
}
return
0
;
return
0
;
}
}
public
Storage
getOneStorageByType
(
DeviceType
type
)
{
//查找mimo的cid
String
cid
=
""
;
DeviceType
[]
types
=
new
DeviceType
[]{
type
};
for
(
Storage
storage
:
allStorage
.
values
())
{
if
(
storage
.
isType
(
types
))
{
return
storage
;
}
}
return
null
;
}
public
void
updateSpUsePosCount
(
Storage
storage
,
StoragePos
pos
,
int
addCount
)
{
try
{
if
(!
storage
.
isSolderPaste
())
{
return
;
}
String
cid
=
storage
.
getCid
();
String
type
=
pos
.
isWarmPos
()
?
warmPosUseCount
:
coldingPosUseCount
;
if
(!
spUsedPosCountMap
.
containsKey
(
cid
))
{
LoadStorageUsePosCount
(
cid
);
}
Map
<
String
,
Integer
>
map
=
spUsedPosCountMap
.
get
(
cid
);
Integer
value
=
map
.
get
(
type
)
+
addCount
;
map
.
put
(
type
,
value
);
spUsedPosCountMap
.
put
(
cid
,
map
);
}
catch
(
Exception
ex
)
{
log
.
error
(
"updateSpUsePosCount "
+
storage
.
getCid
()
+
","
+
pos
.
getPosName
()
+
","
+
addCount
+
" 出错:"
+
ex
.
getMessage
());
}
}
private
void
LoadStorageUsePosCount
(
String
cid
)
{
Storage
storage
=
getStorage
(
cid
);
int
waramCount
=
0
;
int
coldingCount
=
0
;
if
(
ObjectUtil
.
isNotEmpty
(
storage
))
{
List
<
StoragePos
>
allPos
=
storagePosManager
.
findUsedPosNameByStorageId
(
storage
.
getId
());
for
(
StoragePos
pos
:
allPos
)
{
if
(
pos
.
isWarmPos
())
{
waramCount
++;
}
else
{
coldingCount
++;
}
}
}
Map
<
String
,
Integer
>
map
=
new
HashMap
<>();
map
.
put
(
warmPosUseCount
,
waramCount
);
map
.
put
(
coldingPosUseCount
,
coldingCount
);
spUsedPosCountMap
.
put
(
cid
,
map
);
}
public
Integer
getSpUsePosCount
(
String
cid
,
String
type
)
{
if
(!
spUsedPosCountMap
.
containsKey
(
cid
))
{
LoadStorageUsePosCount
(
cid
);
}
Map
<
String
,
Integer
>
map
=
spUsedPosCountMap
.
get
(
cid
);
return
map
.
get
(
type
);
}
}
}
src/main/java/com/neotel/smfcore/core/inList/rest/InListController.java
查看文件 @
467324c
...
@@ -99,7 +99,7 @@ public class InListController {
...
@@ -99,7 +99,7 @@ public class InListController {
if
(
inListItems
.
size
()
<=
0
)
{
if
(
inListItems
.
size
()
<=
0
)
{
continue
;
continue
;
}
}
InList
inList
=
new
InList
(
name
,
INLIST_STATUS
.
WAIT
,
inListItems
);
InList
inList
=
new
InList
(
name
,
INLIST_STATUS
.
WAIT
,
inListItems
,
0L
);
InList
dbList
=
inListManager
.
findByName
(
name
);
InList
dbList
=
inListManager
.
findByName
(
name
);
if
(
dbList
!=
null
)
{
if
(
dbList
!=
null
)
{
...
...
src/main/java/com/neotel/smfcore/core/inList/service/po/InList.java
查看文件 @
467324c
...
@@ -26,4 +26,8 @@ public class InList extends BasePo implements Serializable {
...
@@ -26,4 +26,8 @@ public class InList extends BasePo implements Serializable {
private
List
<
InListItem
>
inListItems
;
private
List
<
InListItem
>
inListItems
;
/**
* 开始入库单入库时间,超时需要发送邮件
*/
private
long
startTime
=
0L
;
}
}
src/main/java/com/neotel/smfcore/core/kanban/rest/BoxKanbanController.java
查看文件 @
467324c
...
@@ -2,7 +2,6 @@ package com.neotel.smfcore.core.kanban.rest;
...
@@ -2,7 +2,6 @@ package com.neotel.smfcore.core.kanban.rest;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.base.Strings
;
import
com.google.common.base.Strings
;
import
com.google.common.collect.Lists
;
import
com.neotel.smfcore.common.bean.PageData
;
import
com.neotel.smfcore.common.bean.PageData
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.exception.ValidateException
;
...
@@ -23,20 +22,16 @@ import com.neotel.smfcore.core.storage.service.po.Storage;
...
@@ -23,20 +22,16 @@ import com.neotel.smfcore.core.storage.service.po.Storage;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.system.service.manager.impl.DataLogManagerImpl
;
import
com.neotel.smfcore.core.system.service.manager.impl.DataLogManagerImpl
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.service.po.Humiture
;
import
com.neotel.smfcore.core.system.util.DevicesStatusUtil
;
import
com.neotel.smfcore.core.system.util.DevicesStatusUtil
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
com.neotel.smfcore.security.annotation.AnonymousPutMapping
;
import
com.neotel.smfcore.security.annotation.AnonymousPutMapping
;
import
com.neotel.smfcore.security.service.manager.IGroupManager
;
import
com.neotel.smfcore.security.service.manager.IGroupManager
;
import
com.neotel.smfcore.security.service.manager.impl.GroupManagerImpl
;
import
com.neotel.smfcore.security.service.manager.impl.UserManagerImpl
;
import
com.neotel.smfcore.security.service.manager.impl.UserManagerImpl
;
import
com.neotel.smfcore.security.service.po.Group
;
import
com.neotel.smfcore.security.service.po.Group
;
import
com.neotel.smfcore.security.service.po.User
;
import
com.neotel.smfcore.security.service.po.User
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
import
javafx.concurrent.Task
;
import
lombok.Data
;
import
lombok.RequiredArgsConstructor
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -44,7 +39,6 @@ import org.springframework.data.domain.Pageable;
...
@@ -44,7 +39,6 @@ import org.springframework.data.domain.Pageable;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.util.ObjectUtils
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
...
@@ -470,6 +464,13 @@ public class BoxKanbanController {
...
@@ -470,6 +464,13 @@ public class BoxKanbanController {
}
}
}
}
}
}
//如果是锡膏料仓,需要把回温区物料数量,冷藏区物料数量显示
if
(
storage
.
isSolderPaste
()){
Integer
warmUseCount
=
dataCache
.
getSpUsePosCount
(
storage
.
getCid
(),
DataCache
.
warmPosUseCount
);
Integer
coldingUseCount
=
dataCache
.
getSpUsePosCount
(
storage
.
getCid
(),
DataCache
.
coldingPosUseCount
);
boxDto
.
getData
().
put
(
DataCache
.
warmPosUseCount
,
warmUseCount
.
toString
());
boxDto
.
getData
().
put
(
DataCache
.
warmPosUseCount
,
coldingUseCount
.
toString
());
}
return
boxDto
;
return
boxDto
;
}
}
...
...
src/main/java/com/neotel/smfcore/custom/micron1053/controller/MicronApi.java
查看文件 @
467324c
...
@@ -17,7 +17,6 @@ import java.util.List;
...
@@ -17,7 +17,6 @@ import java.util.List;
import
java.util.Map
;
import
java.util.Map
;
@Controller
@Controller
@RequestMapping
(
"/rest/api/micron"
)
@Slf4j
@Slf4j
public
class
MicronApi
extends
BaseSmfApiListener
{
public
class
MicronApi
extends
BaseSmfApiListener
{
...
...
src/main/java/com/neotel/smfcore/custom/micron20031/Micron20031Api.java
查看文件 @
467324c
...
@@ -17,6 +17,10 @@ import java.util.*;
...
@@ -17,6 +17,10 @@ import java.util.*;
*/
*/
@Slf4j
@Slf4j
public
class
Micron20031Api
{
public
class
Micron20031Api
{
public
static
String
MODE_DISABLE_SAP
=
"DISABLE_SAP"
;
public
static
String
MODE_DISABLE_MAM
=
"DISABLE_MAM"
;
public
static
String
MODE_DISABLE_MAM_AND_SAP
=
"DISABLE_MAM_AND_SAP"
;
public
static
String
MODE_ENABLE_MAM_SAP
=
"ENABLE_MAM_SAP"
;
private
static
String
AUTH_TOKEN
=
""
;
private
static
String
AUTH_TOKEN
=
""
;
...
@@ -151,19 +155,24 @@ public class Micron20031Api {
...
@@ -151,19 +155,24 @@ public class Micron20031Api {
* //Input: MatReqNo, MaterialType
* //Input: MatReqNo, MaterialType
* //Output: MatReqNo, Micron Part Number, Lot No, Quantity, UnitOfMeasures, MaterialType, Message, Status
* //Output: MatReqNo, Micron Part Number, Lot No, Quantity, UnitOfMeasures, MaterialType, Message, Status
*/
*/
public
static
DepositMatReqBean
getMatReqDetail
(
String
matReqNo
)
throws
ApiException
{
public
static
List
<
DepositMatReqBean
>
getMatReqDetail
(
String
matReqNo
)
throws
ApiException
{
//pnMap的key为pn, value为库存数量
//pnMap的key为pn, value为库存数量
String
getMatReqDetailUrl
=
""
;
String
getMatReqDetailUrl
=
""
;
String
auth
=
getAuthToken
();
String
auth
=
getAuthToken
();
Map
<
String
,
Object
>
dataMap
=
new
HashMap
<>();
Map
<
String
,
Object
>
dataMap
=
new
HashMap
<>();
dataMap
.
put
(
"MatReqNo"
,
matReqNo
);
dataMap
.
put
(
"MatReqNo"
,
matReqNo
);
dataMap
.
put
(
"MaterialType"
,
MATERIAL_TYPE
);
dataMap
.
put
(
"MaterialType"
,
MATERIAL_TYPE
);
log
.
info
(
"调用MES接口 getMatReqDetail,参数:"
+
JsonUtil
.
toJsonStr
(
dataMap
));
log
.
info
(
"调用MES接口 getMatReqDetail,参数:"
+
JsonUtil
.
toJsonStr
(
dataMap
));
String
resultStr
=
HttpHelper
.
postJsonWithAuth
(
getMatReqDetailUrl
,
dataMap
,
auth
);
String
resultStr
=
HttpHelper
.
postJsonWithAuth
(
getMatReqDetailUrl
,
dataMap
,
auth
);
log
.
info
(
"调用MES接口 getMatReqDetail 返回:"
+
resultStr
);
log
.
info
(
"调用MES接口 getMatReqDetail 返回:"
+
resultStr
);
DepositMatReqBean
depositMatReqBean
=
JsonUtil
.
toObj
(
resultStr
,
DepositMatReqBean
.
class
);
Map
<
String
,
Object
>
resultMap
=
JsonUtil
.
toMap
(
resultStr
);
return
depositMatReqBean
;
List
<
DepositMatReqBean
>
beans
=
new
ArrayList
<>();
if
(
resultMap
.
containsKey
(
"materialDocList"
))
{
beans
=
(
List
<
DepositMatReqBean
>)
resultMap
.
get
(
"materialDocList"
);
}
// DepositMatReqBean depositMatReqBean = JsonUtil.toObj(resultStr,DepositMatReqBean.class);
return
beans
;
}
}
/**
/**
...
...
src/main/java/com/neotel/smfcore/custom/micron20031/MicronSpApiListener.java
0 → 100644
查看文件 @
467324c
package
com
.
neotel
.
smfcore
.
custom
.
micron20031
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.neotel.smfcore.common.exception.ApiException
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.core.api.bean.CodeValidateParam
;
import
com.neotel.smfcore.core.api.listener.BaseSmfApiListener
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.inList.enums.INLIST_STATUS
;
import
com.neotel.smfcore.core.inList.service.po.InList
;
import
com.neotel.smfcore.core.inList.util.InListCache
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
javax.swing.text.html.InlineView
;
@Slf4j
public
class
MicronSpApiListener
extends
BaseSmfApiListener
{
@Autowired
private
InListCache
inListCache
;
@Override
public
boolean
isForThisApi
(
String
apiName
)
{
return
false
;
}
@Override
public
Barcode
canPutInAfterResolve
(
String
inCheckUrl
,
CodeValidateParam
params
,
Barcode
barcode
)
throws
ValidateException
{
//判断是否是入库单入库
for
(
Storage
storage
:
params
.
getStorageList
())
{
if
(
ObjectUtil
.
isNotEmpty
(
storage
.
getInListName
()))
{
//如果入库单还在执行中,验证是否可以入库
InList
inList
=
inListCache
.
getInList
(
storage
.
getInListName
());
if
(
inList
.
getStatus
()
<
INLIST_STATUS
.
WAIT
)
{
try
{
Barcode
resultBarcode
=
Micron20031Api
.
depositCreateMA
(
barcode
,
params
.
getLoginUser
());
if
(
resultBarcode
!=
null
){
return
resultBarcode
;
}
}
catch
(
ApiException
apiException
)
{
log
.
error
(
"MicronSpApiListener canPutInAfterResolve depositCreateMA error: "
+
apiException
.
getMessage
());
return
null
;
}
}
//普通入库验证 调用return
try
{
Barcode
resultBarcode
=
Micron20031Api
.
returnMaterial
(
barcode
,
Micron20031Api
.
MODE_ENABLE_MAM_SAP
,
params
.
getLoginUser
());
if
(
resultBarcode
!=
null
){
return
resultBarcode
;
}
}
catch
(
ApiException
apiException
)
{
log
.
error
(
"MicronSpApiListener canPutInAfterResolve returnMaterial error: "
+
apiException
.
getMessage
());
return
null
;
}
}
}
return
null
;
}
}
src/main/java/com/neotel/smfcore/custom/micron20031/MicronSpController.java
查看文件 @
467324c
...
@@ -53,6 +53,10 @@ public class MicronSpController {
...
@@ -53,6 +53,10 @@ public class MicronSpController {
Integer
used
=
0
;
Integer
used
=
0
;
if
(
pos
.
isUsed
())
{
if
(
pos
.
isUsed
())
{
used
=
1
;
used
=
1
;
boolean
AuthoriseNg
=
pos
.
getBarcode
().
getAppendData
(
"AuthoriseNg"
)
;
if
(
AuthoriseNg
){
used
=
2
;
}
}
}
// used=1;
// used=1;
...
...
src/main/java/com/neotel/smfcore/custom/micron20031/MicronSpLoadController.java
0 → 100644
查看文件 @
467324c
package
com
.
neotel
.
smfcore
.
custom
.
micron20031
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ApiException
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.inList.rest.bean.dto.InListDto
;
import
com.neotel.smfcore.core.inList.rest.bean.mapstruct.InListMapper
;
import
com.neotel.smfcore.core.inList.service.manager.IInListManager
;
import
com.neotel.smfcore.core.inList.service.po.InList
;
import
com.neotel.smfcore.core.inList.service.po.InListItem
;
import
com.neotel.smfcore.core.inList.util.InListCache
;
import
com.neotel.smfcore.core.storage.enums.DeviceType
;
import
com.neotel.smfcore.core.storage.service.manager.IStorageManager
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.custom.micron20031.bean.DepositMatReqBean
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.ArrayList
;
import
java.util.List
;
@Slf4j
@RestController
@Api
(
tags
=
"20031:load Desposit/Return"
)
@RequestMapping
(
"/rest/micron/sp"
)
public
class
MicronSpLoadController
{
@Autowired
private
InListCache
inListCache
;
@Autowired
private
IInListManager
inListManager
;
@Autowired
private
InListMapper
inListMapper
;
@Autowired
private
IStorageManager
storageManager
;
@Autowired
private
DataCache
dataCache
;
@ApiOperation
(
"获取入库单详情"
)
@GetMapping
(
value
=
"/desposit/getMatReqDetail"
)
public
ResultBean
getMatReqDetail
(
String
matReqNo
)
{
if
(
ObjectUtil
.
isEmpty
(
matReqNo
))
{
return
ResultBean
.
newOkResult
(
null
);
}
try
{
//先查询入库单是否存在
InList
inList
=
inListCache
.
getInList
(
matReqNo
);
if
(
inList
==
null
)
{
List
<
DepositMatReqBean
>
beans
=
Micron20031Api
.
getMatReqDetail
(
matReqNo
);
inList
=
new
InList
();
inList
.
setName
(
matReqNo
);
List
<
InListItem
>
items
=
new
ArrayList
<>();
for
(
DepositMatReqBean
bean
:
beans
)
{
InListItem
item
=
new
InListItem
();
item
.
setPN
(
bean
.
getMicronPN
());
item
.
setNum
(
bean
.
getQuantity
());
item
.
setName
(
matReqNo
);
items
.
add
(
item
);
}
inList
.
setInListItems
(
items
);
log
.
info
(
"load 获取到入库单:"
+
inList
.
getName
()
+
",共"
+
items
.
size
()
+
"条工单详情"
);
inList
=
inListManager
.
createWithItems
(
inList
);
inListCache
.
addInListToMap
(
inList
);
//保存入库单
// return ResultBean.newOkResult(reqBean);
}
InListDto
inListDto
=
inListMapper
.
toDto
(
inList
);
return
ResultBean
.
newOkResult
(
inListDto
);
}
catch
(
ApiException
e
)
{
return
ResultBean
.
newErrorResult
(
1
,
e
.
getMessage
(),
e
.
getMessage
());
}
}
@ApiOperation
(
"开始入库单 入库"
)
@RequestMapping
(
value
=
"/desposit/start"
)
public
ResultBean
startDesposit
(
String
matReqNo
)
{
InList
inList
=
inListCache
.
getInList
(
matReqNo
);
if
(
inList
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
Storage
storage
=
dataCache
.
getOneStorageByType
(
DeviceType
.
AUTO
);
if
(
storage
==
null
)
{
//未找到料仓,无法开始入库
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
inList
.
setStartTime
(
System
.
currentTimeMillis
());
inListManager
.
save
(
inList
);
inListCache
.
addInListToMap
(
inList
);
storage
.
setInListName
(
matReqNo
);
log
.
info
(
"设置料仓["
+
storage
.
getName
()
+
"]的入库单为:["
+
matReqNo
+
"],同时更新入库单开始时间"
);
storageManager
.
save
(
storage
);
dataCache
.
reloadStorage
(
storage
,
storage
.
getCid
());
return
ResultBean
.
newOkResult
(
matReqNo
);
}
@ApiOperation
(
"开始回库 "
)
@RequestMapping
(
value
=
"/return/start"
)
public
ResultBean
startReturn
()
{
Storage
storage
=
dataCache
.
getOneStorageByType
(
DeviceType
.
AUTO
);
if
(
storage
==
null
)
{
//未找到料仓,无法开始入库
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
storage
.
setInListName
(
""
);
log
.
info
(
"设置料仓["
+
storage
.
getName
()
+
"]开始 return "
);
storageManager
.
save
(
storage
);
dataCache
.
reloadStorage
(
storage
,
storage
.
getCid
());
return
ResultBean
.
newOkResult
(
""
);
}
}
src/main/java/com/neotel/smfcore/custom/micron20031/MicronSpUnloadController.java
0 → 100644
查看文件 @
467324c
package
com
.
neotel
.
smfcore
.
custom
.
micron20031
;
import
com.google.common.base.Strings
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ApiException
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.storage.rest.dto.StoragePosDto
;
import
com.neotel.smfcore.core.storage.rest.mapstruct.StoragePosMapper
;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.Data
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
import
java.util.Map
;
@Slf4j
@RestController
@Api
(
tags
=
"20031:Unload Withdraw_new/Withdraw_Offline/Removal"
)
@RequestMapping
(
"/rest/micron/sp"
)
public
class
MicronSpUnloadController
{
@Autowired
private
DataCache
dataCache
;
@Autowired
private
TaskService
taskService
;
@Autowired
private
IStoragePosManager
storagePosManager
;
@Autowired
private
StoragePosMapper
storagePosMapper
;
@ApiOperation
(
"出库:Withdraw Offline GetEquipIDList"
)
@GetMapping
(
value
=
"/unload/offlineIdList"
)
public
ResultBean
getEquipIdList
()
{
try
{
List
<
String
>
equipIdList
=
Micron20031Api
.
getEquipIDList
();
return
ResultBean
.
newOkResult
(
equipIdList
);
}
catch
(
ApiException
e
)
{
return
ResultBean
.
newErrorResult
(
1
,
e
.
getMessage
(),
e
.
getMessage
());
}
}
@ApiOperation
(
"出库:Withdraw Offline GetMicronPN"
)
@GetMapping
(
value
=
"/unload/getMicronPN"
)
public
ResultBean
GetMicronPN
(
String
lotId
,
String
lineId
)
{
try
{
String
pn
=
Micron20031Api
.
getMicronPN
(
lotId
,
lineId
);
//根据PN查找对应的物料,验证成功后返回
Criteria
c
=
Criteria
.
where
(
"used"
).
is
(
true
);
c
.
and
(
"barcode.partNumber"
).
is
(
pn
);
c
.
and
(
"barcode.appendData.AuthoriseNg"
).
ne
(
true
);
List
<
StoragePos
>
posList
=
storagePosManager
.
findByQuery
(
new
Query
(
c
));
for
(
StoragePos
pos
:
posList
)
{
try
{
//验证
Micron20031Api
.
chkAuthoriseToDispatch
(
pos
.
getBarcode
(),
Micron20031Api
.
MODE_ENABLE_MAM_SAP
,
SecurityUtils
.
getCurrentUsername
());
log
.
info
(
"unload/getMicronPN ["
+
pn
+
"] barcode ["
+
pos
.
getBarcode
().
getBarcode
()
+
"] chkAuthoriseToDispatch 成功"
);
StoragePosDto
dto
=
storagePosMapper
.
toDto
(
pos
);
return
ResultBean
.
newOkResult
(
dto
);
}
catch
(
ApiException
ex
)
{
log
.
error
(
"unload/getMicronPN ["
+
pn
+
"] barcode ["
+
pos
.
getBarcode
().
getBarcode
()
+
"] chkAuthoriseToDispatch 失败:"
+
ex
.
toString
());
//需要标记此物料
Barcode
barcode
=
pos
.
getBarcode
();
barcode
.
updateAppendData
(
"AuthoriseNg"
,
true
);
pos
.
setBarcode
(
barcode
);
storagePosManager
.
save
(
pos
);
log
.
info
(
"unload/getMicronPN ["
+
pn
+
"] barcode ["
+
pos
.
getBarcode
().
getBarcode
()
+
"] 标记为NG"
);
}
}
return
ResultBean
.
newOkResult
(
pn
);
}
catch
(
ApiException
e
)
{
return
ResultBean
.
newErrorResult
(
1
,
e
.
getMessage
(),
e
.
getMessage
());
}
}
@ApiOperation
(
"开始出库"
)
@PutMapping
(
"/unload/checkout"
)
public
ResultBean
checkout
(
@RequestBody
Map
<
String
,
String
>
params
)
{
String
posName
=
params
.
get
(
"posName"
);
StoragePos
pos
=
storagePosManager
.
getByPosName
(
posName
);
if
(
pos
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
if
(
storage
==
null
)
{
throw
new
ValidateException
(
"smfcore.valueNotExist"
,
"{0}[{1}]不存在"
,
new
String
[]{
"storageId"
,
pos
.
getStorageId
()});
}
log
.
info
(
"出库料仓【"
+
storage
.
getName
()
+
"_"
+
storage
.
getCid
()
+
"】位置仓位【"
+
pos
.
getPosName
()
+
"】"
);
String
outResult
=
taskService
.
checkout
(
storage
,
pos
,
true
,
SecurityUtils
.
getCurrentUsername
());
if
(!
Strings
.
isNullOrEmpty
(
outResult
))
{
throw
new
ValidateException
(
"smfcore.error"
,
outResult
);
}
return
ResultBean
.
newOkResult
(
""
);
}
}
src/main/java/com/neotel/smfcore/custom/micron20031/bean/OrderInfoDto.java
→
src/main/java/com/neotel/smfcore/custom/micron20031/bean/
dto/
OrderInfoDto.java
查看文件 @
467324c
package
com
.
neotel
.
smfcore
.
custom
.
micron20031
.
bean
;
package
com
.
neotel
.
smfcore
.
custom
.
micron20031
.
bean
.
dto
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
...
...
src/main/java/com/neotel/smfcore/custom/micron20031/bean/PosInfoDto.java
→
src/main/java/com/neotel/smfcore/custom/micron20031/bean/
dto/
PosInfoDto.java
查看文件 @
467324c
package
com
.
neotel
.
smfcore
.
custom
.
micron20031
.
bean
;
package
com
.
neotel
.
smfcore
.
custom
.
micron20031
.
bean
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
...
...
src/main/java/com/neotel/smfcore/custom/micron20031/bean/PosRowDto.java
→
src/main/java/com/neotel/smfcore/custom/micron20031/bean/
dto/
PosRowDto.java
查看文件 @
467324c
package
com
.
neotel
.
smfcore
.
custom
.
micron20031
.
bean
;
package
com
.
neotel
.
smfcore
.
custom
.
micron20031
.
bean
.
dto
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.Data
;
...
...
src/main/java/com/neotel/smfcore/custom/micron20031/bean/PosValueInfo.java
→
src/main/java/com/neotel/smfcore/custom/micron20031/bean/
dto/
PosValueInfo.java
查看文件 @
467324c
package
com
.
neotel
.
smfcore
.
custom
.
micron20031
.
bean
;
package
com
.
neotel
.
smfcore
.
custom
.
micron20031
.
bean
.
dto
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.Data
;
...
...
src/main/java/com/neotel/smfcore/custom/micron20031/bean/dto/SpUnloadDto.java
0 → 100644
查看文件 @
467324c
package
com
.
neotel
.
smfcore
.
custom
.
micron20031
.
bean
.
dto
;
import
com.neotel.smfcore.core.barcode.rest.bean.dto.BarcodeDto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.List
;
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
SpUnloadDto
{
@ApiModelProperty
(
"库位ID"
)
private
String
id
;
@ApiModelProperty
(
"料仓ID"
)
private
String
storageId
;
@ApiModelProperty
(
"库位号"
)
private
String
posName
;
@ApiModelProperty
(
"条码"
)
private
String
barcode
;
@ApiModelProperty
(
"物料编号"
)
private
String
partNumber
;
@ApiModelProperty
(
"数量"
)
private
int
num
;
@ApiModelProperty
(
"出库结果,默认1=成功,0=失败"
)
private
int
unloadState
=
1
;
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论