Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 437a3c12
由
zshaohui
编写于
2022-10-24 09:44:59 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
立臻项目功能提交
1 个父辈
4a9001b6
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
24 个修改的文件
包含
313 行增加
和
55 行删除
src/main/java/com/neotel/smfcore/common/utils/HttpHelper.java
src/main/java/com/neotel/smfcore/core/api/SmfApi.java
src/main/java/com/neotel/smfcore/core/api/listener/DefaultSmfApiListener.java
src/main/java/com/neotel/smfcore/core/api/listener/ISmfApiListener.java
src/main/java/com/neotel/smfcore/core/barcode/bean/BarcodeRule.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/BaseDeviceHandler.java
src/main/java/com/neotel/smfcore/core/device/rest/DeviceController.java
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrderItem.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/service/po/DataLog.java
src/main/java/com/neotel/smfcore/custom/advantech/AdvantechApi.java
src/main/java/com/neotel/smfcore/custom/hella/handler/HellaApiHandler.java
src/main/java/com/neotel/smfcore/custom/hella/handler/HellaServiceHandler.java
src/main/java/com/neotel/smfcore/custom/lizhen/LizhenApi.java
src/main/java/com/neotel/smfcore/custom/lizhen/LizhenController.java
src/main/java/com/neotel/smfcore/custom/lizhen/agvBox/rest/WarehouseController.java
src/main/java/com/neotel/smfcore/custom/lizhen/agvBox/util/StationCacheUtil.java
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/rest/InnerBoxRestController.java
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/util/PreWarningItemCache.java
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/util/service/PreWarningItemManager.java
src/main/java/com/neotel/smfcore/custom/panacim/PanaApiController.java
src/main/java/com/neotel/smfcore/custom/siemens/SiemensApi.java
src/main/java/com/neotel/smfcore/common/utils/HttpHelper.java
查看文件 @
437a3c1
...
...
@@ -8,8 +8,10 @@ import lombok.val;
import
org.apache.http.HttpEntity
;
import
org.apache.http.NameValuePair
;
import
org.apache.http.client.HttpClient
;
import
org.apache.http.client.config.RequestConfig
;
import
org.apache.http.client.entity.UrlEncodedFormEntity
;
import
org.apache.http.client.methods.CloseableHttpResponse
;
import
org.apache.http.client.methods.HttpGet
;
import
org.apache.http.client.methods.HttpPost
;
import
org.apache.http.client.utils.URIBuilder
;
import
org.apache.http.entity.StringEntity
;
...
...
@@ -141,4 +143,41 @@ public class HttpHelper {
}
/**
* 发送HttpGet请求
*
* @param url
* @return
*/
public
static
String
sendGet
(
String
url
)
{
HttpGet
httpget
=
new
HttpGet
(
url
);
RequestConfig
build
=
RequestConfig
.
custom
().
setSocketTimeout
(
5000
)
.
setConnectTimeout
(
5000
)
.
setConnectionRequestTimeout
(
5000
).
build
();
httpget
.
setConfig
(
build
);
CloseableHttpResponse
response
=
null
;
try
{
CloseableHttpClient
httpClient
=
HttpClients
.
createDefault
();
response
=
httpClient
.
execute
(
httpget
);
}
catch
(
IOException
e1
)
{
e1
.
printStackTrace
();
}
String
result
=
null
;
try
{
HttpEntity
entity
=
response
.
getEntity
();
if
(
entity
!=
null
)
{
result
=
EntityUtils
.
toString
(
entity
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
finally
{
try
{
response
.
close
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
return
result
;
}
}
src/main/java/com/neotel/smfcore/core/api/SmfApi.java
查看文件 @
437a3c1
...
...
@@ -55,6 +55,9 @@ public class SmfApi {
@Value
(
"${api.fetchOrderUrl:}"
)
protected
String
fetchOrderUrl
=
""
;
@Value
(
"${api.barcodeInfoUrl:}"
)
protected
String
barcodeInfoUrl
=
""
;
@PostConstruct
public
void
init
(){
apiName
=
dataCache
.
getConfigCache
(
"api.name"
,
apiName
);
...
...
@@ -65,6 +68,7 @@ public class SmfApi {
orderNotifyUrl
=
dataCache
.
getConfigCache
(
"api.orderNotifyUrl"
,
orderNotifyUrl
);
fetchInListUrl
=
dataCache
.
getConfigCache
(
"api.fetchInListUrl"
,
fetchInListUrl
);
fetchOrderUrl
=
dataCache
.
getConfigCache
(
"api.fetchOrderUrl"
,
fetchOrderUrl
);
barcodeInfoUrl
=
dataCache
.
getConfigCache
(
"api.barcodeInfoUrl"
,
barcodeInfoUrl
);
}
/**
...
...
@@ -145,9 +149,6 @@ public class SmfApi {
}
public
LiteOrder
fetchOrder
(
String
orderNumber
,
String
username
){
if
(
orderNumber
==
null
){
throw
new
ValidateException
(
"smfcore.fetchOrder.orderNumber.empty"
,
"工单号不能为空"
);
}
if
(
isUrlExist
(
fetchOrderUrl
)){
for
(
ISmfApiListener
apiListener
:
apiListenerList
)
{
if
(
apiListener
.
isForThisApi
(
apiName
)){
...
...
@@ -174,4 +175,17 @@ public class SmfApi {
return
false
;
}
public
Barcode
barcodeInfo
(
Barcode
barcode
)
{
if
(
isUrlExist
(
barcodeInfoUrl
))
{
for
(
ISmfApiListener
apiListener
:
apiListenerList
)
{
if
(
apiListener
.
isForThisApi
(
apiName
))
{
Barcode
responseBarcode
=
apiListener
.
barcodeInfo
(
barcodeInfoUrl
,
barcode
);
if
(
responseBarcode
!=
null
)
{
return
responseBarcode
;
}
}
}
}
return
null
;
}
}
src/main/java/com/neotel/smfcore/core/api/listener/DefaultSmfApiListener.java
查看文件 @
437a3c1
...
...
@@ -246,4 +246,9 @@ public class DefaultSmfApiListener extends BaseSmfApiListener {
public
LiteOrder
fetchOrder
(
String
fetchOrderUrl
,
String
orderNumber
,
String
username
){
return
null
;
}
@Override
public
Barcode
barcodeInfo
(
String
barcodeInfoUrl
,
Barcode
barcode
)
{
return
null
;
}
}
src/main/java/com/neotel/smfcore/core/api/listener/ISmfApiListener.java
查看文件 @
437a3c1
...
...
@@ -48,4 +48,6 @@ public interface ISmfApiListener {
* @return
*/
LiteOrder
fetchOrder
(
String
url
,
String
orderNumber
,
String
username
);
Barcode
barcodeInfo
(
String
barcodeInfoUrl
,
Barcode
barcode
);
}
src/main/java/com/neotel/smfcore/core/barcode/bean/BarcodeRule.java
查看文件 @
437a3c1
...
...
@@ -200,6 +200,19 @@ public class BarcodeRule {
log
.
info
(
"expireDay: 为"
+
newRule
.
expireDay_item
.
toString
());
}
}
if
(!
newRule
.
dateCode_item
.
hasThisField
()){
if
(
newRule
.
dateCode_item
.
matchRule
(
fieldValue
,
i
)){
log
.
info
(
"dateCode: 为"
+
newRule
.
dateCode_item
.
toString
());
}
}
if
(!
newRule
.
providerNumber_item
.
hasThisField
()){
if
(
newRule
.
providerNumber_item
.
matchRule
(
fieldValue
,
i
)){
log
.
info
(
"providerNumber: 为"
+
newRule
.
providerNumber_item
.
toString
());
}
}
}
boolean
validRule
=
false
;
if
(
newRule
.
partNumber_item
.
hasThisField
()){
...
...
@@ -234,6 +247,8 @@ public class BarcodeRule {
private
RuleItem
batch_item
=
new
RuleItem
(
"BATCH"
);
private
RuleItem
msl_item
=
new
RuleItem
(
"MSL"
);
private
RuleItem
memo_item
=
new
RuleItem
(
"MEMO"
);
private
RuleItem
dateCode_item
=
new
RuleItem
(
"DATECODE"
);
private
RuleItem
providerNumber_item
=
new
RuleItem
(
"PROVIDERNUMBER"
);
private
class
RuleItem
{
private
RuleItem
(
String
ruleName
)
{
...
...
@@ -541,6 +556,9 @@ public class BarcodeRule {
}
if
(
batch_item
.
hasThisField
()){
String
batch
=
batch_item
.
getStrValue
(
codeArr
);
if
(
batch
.
indexOf
(
"-"
)
!=
-
1
){
batch
=
batch
.
substring
(
0
,
batch
.
indexOf
(
"-"
));
}
b
.
setBatch
(
batch
);
}
int
quantity
=
1
;
...
...
@@ -590,8 +608,28 @@ public class BarcodeRule {
b
.
setMemo
(
memo
);
}
if
(
dateCode_item
.
hasThisField
()){
String
dateCode
=
dateCode_item
.
getStrValue
(
codeArr
);
if
(
dateCode
.
indexOf
(
"-"
)
!=
-
1
){
dateCode
=
dateCode
.
substring
(
dateCode
.
indexOf
(
"-"
)+
1
,
dateCode
.
length
());
}
b
.
setDateCode
(
dateCode
);
}
if
(
providerNumber_item
.
hasThisField
()){
String
providerNumber
=
providerNumber_item
.
getStrValue
(
codeArr
);
if
(
providerNumber
.
indexOf
(
"-"
)
!=
-
1
){
providerNumber
=
providerNumber
.
substring
(
providerNumber
.
indexOf
(
"-"
)+
1
,
providerNumber
.
length
());
}
b
.
setProviderNumber
(
providerNumber
);
}
b
.
setBarcode
(
reelId
);
codeBean
.
setCodeStr
(
reelId
);
//如果是立臻的,则取-前面的
if
(
partNumber
.
indexOf
(
"-"
)
!=
-
1
){
partNumber
=
partNumber
.
substring
(
0
,
partNumber
.
indexOf
(
"-"
));
}
b
.
setPartNumber
(
partNumber
);
b
.
setAmount
(
quantity
);
b
.
setProduceDate
(
produceDate
);
...
...
@@ -727,6 +765,18 @@ public class BarcodeRule {
codeStr
=
"CS0001-1"
;
rule
=
"RI[-1:6:-1]PN[-1:2:-1]"
;
codeStr
=
"107S0257-017425|YB1N27N06-2216|20000|M1001742524EA09EUT|MURATA"
;
rule
=
"PN[-1:20:-1]PROVIDERNUMBER[-1:20:-1]|BATCH[-1:20:-1]DATECODE[-1:20:-1]|QTY|RI|SP"
;
codeStr
=
"103S00421-797001|TPA221300067-20220320|20000|A1079700122220C406|CYNTEC|TPA2213000670000C406"
;
rule
=
"PN[-1:20:-1]PROVIDERNUMBER[-1:20:-1]|BATCH[-1:20:-1]DATECODE[-1:20:-1]|QTY|4|SP|RI"
;
codeStr
=
"138S00138-012207|2022-1015|41625|L130122074222008AL|KYOCERA|"
;
rule
=
"PN[-1:20:-1]PROVIDERNUMBER[-1:20:-1]|BATCH[-1:20:-1]DATECODE[-1:20:-1]|QTY|RI|SP|6"
;
BarcodeRule
br
=
BarcodeRule
.
newRule
(
rule
);
Barcode
b
=
br
.
toCodeBean
(
codeStr
).
getBarcode
();
if
(
b
!=
null
){
...
...
@@ -739,6 +789,9 @@ public class BarcodeRule {
System
.
out
.
println
(
"EXPDATE:"
+
b
.
getExpireDate
());
System
.
out
.
println
(
"Supllier:"
+
b
.
getProvider
());
System
.
out
.
println
(
"Memo:"
+
b
.
getMemo
());
System
.
out
.
println
(
"DataCode:"
+
b
.
getDateCode
());
System
.
out
.
println
(
"ProviderNumber:"
+
b
.
getProviderNumber
());
//System.out.println("Provider:"+b.getProvider());
}
else
{
log
.
info
(
"解析失败"
);
}
...
...
src/main/java/com/neotel/smfcore/core/device/handler/impl/BaseDeviceHandler.java
查看文件 @
437a3c1
...
...
@@ -241,12 +241,13 @@ public class BaseDeviceHandler implements IDeviceHandler {
}
//本地难条码是否可以入库
verifyBarcodePutIn
(
Lists
.<
Storage
>
newArrayList
(
storage
),
barcodeSave
);
//从API验证
Barcode
barcodeFromApi
=
smfApi
.
canPutInAfterResolve
(
barcodeSave
);
/*
Barcode barcodeFromApi = smfApi.canPutInAfterResolve(barcodeSave);
if (barcodeFromApi != null) {
barcodeSave = barcodeFromApi;
}
}
*/
// //西门子接口验证
// boolean result=SiemensApi.getMaterialLot(1, storage.getId(),storage.getName(),barcodeSave.getBarcode());
...
...
src/main/java/com/neotel/smfcore/core/device/rest/DeviceController.java
查看文件 @
437a3c1
...
...
@@ -10,6 +10,8 @@ import com.neotel.smfcore.common.bean.ResultBean;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.ReelLockPosUtil
;
import
com.neotel.smfcore.core.api.SmfApi
;
import
com.neotel.smfcore.core.api.listener.ISmfApiListener
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.barcode.utils.CodeResolve
;
import
com.neotel.smfcore.core.device.bean.PosInfo
;
...
...
@@ -57,6 +59,9 @@ public class DeviceController {
@Autowired
private
IStoragePosManager
storagePosManager
;
@Autowired
private
SmfApi
smfApi
;
private
Map
<
String
,
IDeviceHandler
>
handlerMap
=
new
HashMap
<>();
public
DeviceController
(
List
<
IDeviceHandler
>
deviceHandlerList
)
{
...
...
@@ -155,10 +160,21 @@ public class DeviceController {
try
{
Barcode
barcode
=
codeResolve
.
resolveOneValideBarcode
(
code
);
if
(
barcode
==
null
)
{
throw
new
ValidateException
(
"smfcore.error.barcode.invalid"
,
"{0}不是有效的条码"
,
new
String
[]{
code
});
}
Barcode
barcodeCanPutIn
=
smfApi
.
canPutInAfterResolve
(
barcode
);
if
(
barcodeCanPutIn
!=
null
){
barcode
=
barcodeCanPutIn
;
}
Barcode
barcodeApi
=
smfApi
.
barcodeInfo
(
barcode
);
if
(
barcodeApi
!=
null
){
barcode
=
barcodeApi
;
}
for
(
DataLog
dataLog
:
taskService
.
getQueueTasks
())
{
// if(!dataLog.isPackageReel()){
//已经在任务当中,返回对应的信息
...
...
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
437a3c1
...
...
@@ -8,6 +8,7 @@ import com.neotel.smfcore.common.exception.ValidateException;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.core.api.SmfApi
;
import
com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
...
...
@@ -27,6 +28,8 @@ import com.neotel.smfcore.core.system.service.po.DataLog;
import
com.neotel.smfcore.core.system.util.TaskService
;
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.stereotype.Service
;
import
java.util.*
;
...
...
@@ -53,9 +56,13 @@ public class LiteOrderCache {
@Autowired
private
IStoragePosManager
storagePosManager
;
@Autowired
private
SmfApi
smfApi
;
@Autowired
private
IBarcodeManager
barcodeManager
;
/**
* 正在执行的liteOrderMap, key 为orderNo,value 为order
*/
...
...
@@ -218,7 +225,7 @@ public class LiteOrderCache {
}
else
if
(
liteOrder
.
isOutTails
()){
// setStatus(LITEORDER_STATUS.TAILS_FINISHED);
liteOrder
.
setClosed
(
true
);
}
else
if
(
liteOrder
.
is
OutTails
()){
}
else
if
(
liteOrder
.
is
New
()){
liteOrder
.
setClosed
(
true
);
}
...
...
@@ -398,9 +405,11 @@ public class LiteOrderCache {
if
(
cacheOrder
.
getType
()==
2
){
//RI
pos
=
storagePosManager
.
getByBarcode
(
orderItem
.
getRi
());
if
(
excludePosIds
.
contains
(
pos
.
getId
()))
{
log
.
info
(
"工单["
+
orderNo
+
"]RI出库,任务数["
+
taskReelCount
+
"]出库位置仓位【"
+
pos
.
getPosName
()
+
"】RI=["
+
pos
.
getBarcode
().
getBarcode
()
+
"]已在操作队列中,跳过不处理"
);
break
;
if
(
pos
!=
null
)
{
if
(
excludePosIds
.
contains
(
pos
.
getId
()))
{
log
.
info
(
"工单["
+
orderNo
+
"]RI出库,任务数["
+
taskReelCount
+
"]出库位置仓位【"
+
pos
.
getPosName
()
+
"】RI=["
+
pos
.
getBarcode
().
getBarcode
()
+
"]已在操作队列中,跳过不处理"
);
break
;
}
}
}
else
{
//PN
...
...
@@ -416,13 +425,19 @@ public class LiteOrderCache {
DataLog
task
=
newTask
(
pos
)
;
task
.
setSourceId
(
cacheOrder
.
getId
());
task
.
setSourceName
(
cacheOrder
.
getOrderNo
());
if
(
pos
.
getBarcode
().
getBarcode
().
startsWith
(
"CS"
)
||
pos
.
getBarcode
().
getBarcode
().
startsWith
(
"CM"
)
||
pos
.
getBarcode
().
getBarcode
().
startsWith
(
"CB"
)){
taskReelCount
=
cacheOrder
.
getOrderItems
().
size
();
}
else
{
task
.
setSourceName
(
cacheOrder
.
getOrderNo
());
}
task
.
setSubSourceId
(
orderItem
.
getId
());
task
.
setSubSourceInfo
(
orderItem
.
getFeederInfo
());
task
.
setType
(
OP
.
CHECKOUT
);
task
.
setLightColor
(
nextColor
.
getRgb
());
task
.
setStatus
(
OP_STATUS
.
WAIT
.
name
());
task
.
setPartNumber
(
orderItem
.
getPn
());
task
.
setPartNumber
(
pos
.
getBarcode
().
getPartNumber
());
// task = dataLogDao.save(task);
taskService
.
addTaskToExecute
(
task
);
}
...
...
@@ -432,9 +447,7 @@ public class LiteOrderCache {
}
}
}
}
cacheOrder
.
setTaskReelCount
(
taskReelCount
);
cacheOrder
.
setTotalTaskReelCount
(
cacheOrder
.
getTotalTaskReelCount
()+
taskReelCount
);
log
.
info
(
"工单["
+
orderNo
+
"]任务分配结束,任务数["
+
taskReelCount
+
"]"
);
...
...
@@ -603,12 +616,59 @@ public class LiteOrderCache {
public
Collection
<
String
>
excludeBarcodeIds
()
{
Collection
<
String
>
barcodeIds
=
new
ArrayList
<>();
for
(
LiteOrder
liteOrder
:
liteOrderMap
.
values
())
{
List
<
LiteOrderItem
>
orderItems
=
liteOrder
.
getOrderItems
();
for
(
LiteOrderItem
orderItem
:
orderItems
)
{
barcodeIds
.
add
(
orderItem
.
getRi
());
Collection
<
LiteOrder
>
liteOrders
=
liteOrderMap
.
values
();
if
(
liteOrders
!=
null
&&
!
liteOrders
.
isEmpty
())
{
for
(
LiteOrder
liteOrder
:
liteOrderMap
.
values
())
{
List
<
LiteOrderItem
>
orderItems
=
liteOrder
.
getOrderItems
();
for
(
LiteOrderItem
orderItem
:
orderItems
)
{
barcodeIds
.
add
(
orderItem
.
getRi
());
}
}
}
return
barcodeIds
;
}
public
String
executeOrderByBarcode
(
String
barcode
){
Collection
<
LiteOrder
>
liteOrders
=
liteOrderMap
.
values
();
if
(
liteOrders
!=
null
&&
!
liteOrders
.
isEmpty
())
{
for
(
LiteOrder
liteOrder
:
liteOrderMap
.
values
())
{
for
(
LiteOrderItem
orderItem
:
liteOrder
.
getOrderItems
())
{
if
(
orderItem
.
getRi
().
equals
(
barcode
))
{
return
liteOrder
.
getOrderNo
();
}
}
}
}
return
null
;
}
public
Collection
<
LiteOrderItem
>
executeItems
()
{
Collection
<
LiteOrderItem
>
items
=
new
ArrayList
<>();
Collection
<
LiteOrder
>
liteOrders
=
liteOrderMap
.
values
();
if
(
liteOrders
!=
null
&&
!
liteOrders
.
isEmpty
())
{
for
(
LiteOrder
liteOrder
:
liteOrderMap
.
values
())
{
List
<
LiteOrderItem
>
orderItems
=
liteOrder
.
getOrderItems
();
for
(
LiteOrderItem
orderItem
:
orderItems
)
{
items
.
add
(
orderItem
);
}
}
}
return
items
;
}
public
Collection
<
String
>
executePartNumber
(){
Collection
<
String
>
partNumbers
=
new
ArrayList
<>();
Collection
<
LiteOrder
>
liteOrders
=
liteOrderMap
.
values
();
if
(
liteOrders
!=
null
&&
!
liteOrders
.
isEmpty
())
{
for
(
LiteOrder
liteOrder
:
liteOrderMap
.
values
())
{
List
<
LiteOrderItem
>
orderItems
=
liteOrder
.
getOrderItems
();
for
(
LiteOrderItem
orderItem
:
orderItems
)
{
partNumbers
.
add
(
orderItem
.
getPn
());
}
}
}
return
partNumbers
;
}
}
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrderItem.java
查看文件 @
437a3c1
...
...
@@ -80,6 +80,12 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li
*/
private
String
side
=
""
;
/**
* 库位
*/
private
String
posName
;
/**
* 出库是否满足要求,已出库数量大于需求数量
*/
...
...
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStoragePosManager.java
查看文件 @
437a3c1
...
...
@@ -66,4 +66,6 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
List
<
StoragePos
>
findPosList
(
String
storageId
,
List
<
String
>
posNames
);
List
<
StoragePos
>
getSameSizeContinuityEmptyPosList
(
Storage
storage
,
Barcode
barcode
)
throws
ValidateException
;
StoragePos
findByQueryOne
(
Query
query
);
}
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
查看文件 @
437a3c1
...
...
@@ -30,7 +30,6 @@ import org.springframework.stereotype.Service;
import
java.util.*
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.regex.Pattern
;
@Service
@Slf4j
...
...
@@ -562,6 +561,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
return
new
ArrayList
<>();
}
@Override
public
StoragePos
findByQueryOne
(
Query
query
)
{
return
storagePosDao
.
findOne
(
query
);
}
/**
* 获取下一库位的库位名(后缀数字+1)
*/
...
...
src/main/java/com/neotel/smfcore/core/system/service/po/DataLog.java
查看文件 @
437a3c1
...
...
@@ -302,9 +302,9 @@ public class DataLog extends BasePo implements Serializable {
*/
public
boolean
needRemoveFromCache
(){
if
(
isFinished
()
||
isCancel
()){
//
if(System.currentTimeMillis() - super.getUpdateDate().getTime() > 5 * 60 * 1000){
if
(
System
.
currentTimeMillis
()
-
super
.
getUpdateDate
().
getTime
()
>
5
*
60
*
1000
){
return
true
;
//
}
}
}
return
false
;
}
...
...
src/main/java/com/neotel/smfcore/custom/advantech/AdvantechApi.java
查看文件 @
437a3c1
...
...
@@ -392,6 +392,11 @@ public class AdvantechApi extends BaseSmfApiListener {
}
@Override
public
Barcode
barcodeInfo
(
String
barcodeInfoUrl
,
Barcode
barcode
)
{
return
null
;
}
@Override
public
boolean
isForThisApi
(
String
apiName
)
{
return
apiName
!=
null
&&
apiName
.
equalsIgnoreCase
(
"Advantech"
);
}
...
...
src/main/java/com/neotel/smfcore/custom/hella/handler/HellaApiHandler.java
查看文件 @
437a3c1
...
...
@@ -26,6 +26,11 @@ public class HellaApiHandler extends BaseSmfApiListener {
}
@Override
public
Barcode
barcodeInfo
(
String
barcodeInfoUrl
,
Barcode
barcode
)
{
return
null
;
}
@Override
public
boolean
isForThisApi
(
String
apiName
)
{
return
apiName
!=
null
&&
apiName
.
equalsIgnoreCase
(
"Hella"
);
}
...
...
src/main/java/com/neotel/smfcore/custom/hella/handler/HellaServiceHandler.java
查看文件 @
437a3c1
...
...
@@ -577,6 +577,11 @@ public class HellaServiceHandler extends BaseSmfApiListener implements IoHandler
}
}
@Override
public
Barcode
barcodeInfo
(
String
barcodeInfoUrl
,
Barcode
barcode
)
{
return
null
;
}
@Override
public
void
exceptionCaught
(
IoSession
session
,
Throwable
cause
)
throws
Exception
{
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/LizhenApi.java
查看文件 @
437a3c1
此文件的差异被折叠,
点击展开。
src/main/java/com/neotel/smfcore/custom/lizhen/LizhenController.java
查看文件 @
437a3c1
此文件的差异被折叠,
点击展开。
src/main/java/com/neotel/smfcore/custom/lizhen/agvBox/rest/WarehouseController.java
查看文件 @
437a3c1
此文件的差异被折叠,
点击展开。
src/main/java/com/neotel/smfcore/custom/lizhen/agvBox/util/StationCacheUtil.java
查看文件 @
437a3c1
...
...
@@ -39,7 +39,7 @@ public class StationCacheUtil {
@PostConstruct
public
void
init
()
{
log
.
info
(
"开始工位缓存信息"
);
for
(
int
i
=
1
;
i
<
5
;
i
++)
{
for
(
int
i
=
1
;
i
<
=
5
;
i
++)
{
String
stationName
=
"s"
+
i
;
Station
station
=
dataCache
.
getCache
(
stationName
);
if
(
station
==
null
){
...
...
@@ -68,7 +68,7 @@ public class StationCacheUtil {
Station
station
=
getStation
(
stationName
);
if
(
station
!=
null
){
String
oldRfid
=
station
.
getCurrentRfid
();
if
(!
oldRfid
.
equals
(
r
fid
))
{
if
(!
rfid
.
equals
(
oldR
fid
))
{
log
.
info
(
"工位"
+
stationName
+
" 切换料箱,当前料箱:"
+
rfid
+
",上一料箱:"
+
oldRfid
);
station
.
setCurrentRfid
(
rfid
);
updateStation
(
station
);
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/rest/InnerBoxRestController.java
查看文件 @
437a3c1
...
...
@@ -237,7 +237,7 @@ public class InnerBoxRestController {
rfid
=
rfid
.
replaceAll
(
"A"
,
""
).
replaceAll
(
"B"
,
""
);
Pattern
pattern
=
Pattern
.
compile
(
"^"
+
rfid
+
".*$"
,
Pattern
.
CASE_INSENSITIVE
);
List
<
LiteOrder
>
liteOrders
=
liteOrderManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"boxNumber"
).
regex
(
pattern
)));
if
(
liteOrders
!=
null
&&
liteOrders
.
isEmpty
())
{
if
(
liteOrders
!=
null
&&
!
liteOrders
.
isEmpty
())
{
for
(
LiteOrder
liteOrder
:
liteOrders
)
{
liteOrder
.
setBoxNumber
(
""
);
liteOrderManager
.
save
(
liteOrder
);
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/util/PreWarningItemCache.java
查看文件 @
437a3c1
package
com
.
neotel
.
smfcore
.
custom
.
lizhen
.
innerBox
.
util
;
import
com.neotel.smfcore.common.base.AbstractBaseDao
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.api.SmfApi
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
...
...
@@ -17,6 +19,8 @@ import com.neotel.smfcore.core.system.service.po.DataLog;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.custom.lizhen.LizhenApi
;
import
com.neotel.smfcore.custom.lizhen.innerBox.bean.PreWarningItem
;
import
com.neotel.smfcore.custom.lizhen.innerBox.util.service.PreWarningItemManager
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
jdk.nashorn.internal.runtime.arrays.ArrayIndex
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.logging.log4j.util.Strings
;
...
...
@@ -25,6 +29,8 @@ import org.springframework.data.domain.Sort;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.*
;
import
java.util.concurrent.CopyOnWriteArrayList
;
...
...
@@ -34,12 +40,13 @@ import java.util.stream.Collectors;
/**
* 机台预警信息缓存
*
* @author sunke
* @date 2022/10/9 3:31 PM
*/
@Slf4j
@Service
public
class
PreWarningItemCache
extends
AbstractBaseDao
{
public
class
PreWarningItemCache
{
/**
* 预警列表缓存
...
...
@@ -56,6 +63,9 @@ public class PreWarningItemCache extends AbstractBaseDao {
private
static
IStoragePosManager
storagePosManager
;
private
static
SmfApi
smfApi
;
private
static
PreWarningItemManager
preWarningItemManager
;
/**
* 添加到预警列表缓存中
...
...
@@ -64,7 +74,6 @@ public class PreWarningItemCache extends AbstractBaseDao {
updateItem
(
items
,
false
);
}
private
AtomicInteger
atomicInteger
=
new
AtomicInteger
(
0
);
/**
* 从缓存列表中取出预警Item生成工单并执行
...
...
@@ -130,7 +139,7 @@ public class PreWarningItemCache extends AbstractBaseDao {
*
* @param lineItems
*/
p
rivate
static
void
createAndExecuteLiteOrder
(
List
<
PreWarningItem
>
lineItems
)
{
p
ublic
static
LiteOrder
createAndExecuteLiteOrder
(
List
<
PreWarningItem
>
lineItems
)
{
List
<
String
>
noPossPosIds
=
new
ArrayList
<>();
List
<
String
>
outPosIds
=
new
ArrayList
<>();
//得到料仓id
...
...
@@ -145,8 +154,8 @@ public class PreWarningItemCache extends AbstractBaseDao {
//处理线别需求单
LiteOrder
liteOrder
=
new
LiteOrder
();
liteOrder
.
setType
(
2
);
liteOrder
.
setOrderNo
(
new
PreWarningItemCache
().
getSeq
());
liteOrder
.
setSo
(
new
PreWarningItemCache
().
getSeq
(
));
liteOrder
.
setOrderNo
(
getSeq
());
//liteOrder.setSo(getSeq(2
));
List
<
LiteOrderItem
>
orderItems
=
new
ArrayList
<>();
for
(
PreWarningItem
item
:
lineItems
)
{
liteOrder
.
setLine
(
item
.
getLine
());
...
...
@@ -164,19 +173,25 @@ public class PreWarningItemCache extends AbstractBaseDao {
if
(
StringUtils
.
isNotBlank
(
storageId
))
{
c
.
and
(
"storageId"
).
is
(
storageId
);
}
List
<
String
>
posIds
=
new
ArrayList
<>();
//排除已经执行过的物料barcode
if
(
outPosIds
!=
null
&&
!
outPosIds
.
isEmpty
())
{
c
.
and
(
"id"
).
not
().
in
(
outPosIds
);
posIds
.
addAll
(
outPosIds
);
}
//排除校验没通过的
if
(
noPossPosIds
!=
null
&&
!
noPossPosIds
.
isEmpty
())
{
// c.and("id").not().in
(noPossPosIds);
posIds
.
addAll
(
noPossPosIds
);
}
//排除正在执行出库的工位
Collection
<
String
>
excludePosIds
=
taskService
.
excludePosIds
();
if
(
excludePosIds
!=
null
&&
!
excludePosIds
.
isEmpty
())
{
// c.and("id").not().in(excludePosIds);
posIds
.
addAll
(
excludePosIds
);
}
if
(
posIds
!=
null
&&
!
posIds
.
isEmpty
())
{
c
.
and
(
"id"
).
not
().
in
(
posIds
);
}
//排除正在执行的工单物料
Collection
<
String
>
excludeBarcodeIds
=
liteOrderCache
.
excludeBarcodeIds
();
if
(
excludeBarcodeIds
!=
null
&&
!
excludeBarcodeIds
.
isEmpty
())
{
...
...
@@ -200,19 +215,23 @@ public class PreWarningItemCache extends AbstractBaseDao {
}
else
{
for
(
StoragePos
pos
:
storagePoss
)
{
Barcode
barcode
=
pos
.
getBarcode
();
//String checkResult = LizhenApi.wmsCheckReelfob("", barcode);
String
checkResult
=
""
;
//立臻校验时,需要切换
if
(
StringUtils
.
isBlank
(
checkResult
))
{
outPosIds
.
add
(
pos
.
getId
());
//防止其他地方出库
orderItem
.
setRi
(
barcode
.
getBarcode
());
orderItem
.
setNeedNum
(
1
);
orderItems
.
add
(
orderItem
);
flag
=
false
;
break
;
}
else
{
log
.
info
(
"partNumber:{}校验失败:{}"
,
barcode
.
getPartNumber
(),
checkResult
);
noPossPosIds
.
add
(
pos
.
getId
());
continue
;
try
{
Barcode
barcodeApi
=
smfApi
.
canPutInAfterResolve
(
barcode
);
//String checkResult = ""; //立臻校验时,需要切换
if
(
barcodeApi
!=
null
)
{
outPosIds
.
add
(
pos
.
getId
());
//防止其他地方出库
orderItem
.
setRi
(
barcode
.
getBarcode
());
orderItem
.
setNeedNum
(
1
);
orderItems
.
add
(
orderItem
);
flag
=
false
;
break
;
}
else
{
log
.
info
(
"partNumber:{}校验失败:{}"
,
barcode
.
getPartNumber
());
noPossPosIds
.
add
(
pos
.
getId
());
continue
;
}
}
catch
(
ValidateException
e
)
{
e
.
printStackTrace
();
}
}
}
...
...
@@ -222,9 +241,9 @@ public class PreWarningItemCache extends AbstractBaseDao {
liteOrder
.
setOrderItems
(
orderItems
);
liteOrder
.
setTaskReelCount
(
orderItems
.
size
());
liteOrder
=
liteOrderManager
.
createWithItems
(
liteOrder
);
liteOrderManager
.
save
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
}
return
liteOrder
;
}
private
static
synchronized
void
updateItem
(
List
<
PreWarningItem
>
items
,
boolean
remove
)
{
...
...
@@ -283,18 +302,17 @@ public class PreWarningItemCache extends AbstractBaseDao {
PreWarningItemCache
.
storagePosManager
=
storagePosManager
;
}
//待修改----
private
String
getSeq
()
{
// return "H" + getNextId(getEntityClass().getName());
int
seq
=
atomicInteger
.
addAndGet
(
1
);
return
"H"
+
seq
;
@Autowired
public
void
setSmfApi
(
SmfApi
smfApi
)
{
PreWarningItemCache
.
smfApi
=
smfApi
;
}
@Autowired
public
void
setPreWarningItemManager
(
PreWarningItemManager
itemManager
){
PreWarningItemCache
.
preWarningItemManager
=
itemManager
;
}
@Override
public
Class
getEntityClass
()
{
return
PreWarningItemCache
.
class
;
private
static
String
getSeq
()
{
return
"H"
+
preWarningItemManager
.
getNextId
(
PreWarningItemCache
.
class
.
getName
());
}
}
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/util/service/PreWarningItemManager.java
0 → 100644
查看文件 @
437a3c1
package
com
.
neotel
.
smfcore
.
custom
.
lizhen
.
innerBox
.
util
.
service
;
import
com.neotel.smfcore.common.base.AbstractBaseDao
;
import
com.neotel.smfcore.custom.lizhen.innerBox.util.PreWarningItemCache
;
import
org.springframework.stereotype.Service
;
@Service
public
class
PreWarningItemManager
extends
AbstractBaseDao
{
@Override
public
Class
getEntityClass
()
{
return
PreWarningItemCache
.
class
;
}
}
src/main/java/com/neotel/smfcore/custom/panacim/PanaApiController.java
查看文件 @
437a3c1
...
...
@@ -427,6 +427,11 @@ public class PanaApiController extends BaseSmfApiListener {
}
@Override
public
Barcode
barcodeInfo
(
String
barcodeInfoUrl
,
Barcode
barcode
)
{
return
null
;
}
@Override
public
void
inTaskStatusChange
(
String
inNotifyUrl
,
DataLog
task
)
{
if
(
task
.
isFinished
()){
if
(
task
.
isPutInTask
()){
...
...
src/main/java/com/neotel/smfcore/custom/siemens/SiemensApi.java
查看文件 @
437a3c1
...
...
@@ -190,6 +190,11 @@ public class SiemensApi extends BaseSmfApiListener {
}
}
@Override
public
Barcode
barcodeInfo
(
String
barcodeInfoUrl
,
Barcode
barcode
)
{
return
null
;
}
public
static
LotCheckInfo
lotCheckIn
(
String
lot
,
String
url
,
String
deviceId
)
{
if
(
ObjectUtil
.
isEmpty
(
url
))
{
log
.
info
(
"没有配置Siemens,无需验证"
);
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论