Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 389298f7
由
LN
编写于
2024-10-29 11:26:53 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
abort时,已结束的任务需要调API002或API007通知镁光
1 个父辈
eca2cc90
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
179 行增加
和
29 行删除
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/custom/micron1053/api/MicronApi.java
src/main/java/com/neotel/smfcore/custom/micron1053/loading/util/LoadingUtil.java
src/main/java/com/neotel/smfcore/custom/micron1053/task/MicronDispatchController.java
src/main/java/com/neotel/smfcore/custom/micron1053/task/MicronPreTaskController.java
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
389298f
此文件的差异被折叠,
点击展开。
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrderItem.java
查看文件 @
389298f
package
com
.
neotel
.
smfcore
.
core
.
order
.
service
.
po
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.neotel.smfcore.common.base.BasePo
;
import
lombok.Data
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.data.annotation.Transient
;
import
org.springframework.data.mongodb.core.index.Indexed
;
import
org.springframework.data.mongodb.core.mapping.Document
;
...
...
@@ -13,6 +15,7 @@ import java.util.Map;
@Data
@Document
@Slf4j
public
class
LiteOrderItem
extends
BasePo
implements
Serializable
,
Comparable
<
LiteOrderItem
>
{
/**
* 物料编号
...
...
@@ -120,6 +123,26 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li
public
List
<
LiteOrderItem
>
selectItems
;
public
boolean
updateSelItemS
(
String
subItemId
,
String
selItemStatus
,
String
reason
)
{
try
{
if
(
selectItems
==
null
||
selectItems
.
size
()
<=
0
)
{
return
false
;
}
for
(
int
i
=
0
;
i
<
selectItems
.
size
();
i
++)
{
if
(
selectItems
.
get
(
i
).
getId
().
equals
(
subItemId
))
{
selectItems
.
get
(
i
).
setStatus
(
selItemStatus
);
if
(
ObjectUtil
.
isNotEmpty
(
reason
))
{
selectItems
.
get
(
i
).
setExecutFailReason
(
reason
);
}
return
true
;
}
}
}
catch
(
Exception
ex
)
{
log
.
error
(
"updateSelItemS error :"
+
ex
.
toString
());
}
return
false
;
}
/**
* 出库是否满足要求,已出库数量大于需求数量
*/
...
...
src/main/java/com/neotel/smfcore/custom/micron1053/api/MicronApi.java
查看文件 @
389298f
...
...
@@ -36,7 +36,7 @@ public class MicronApi {
public
static
boolean
Debug
=
fals
e
;
public
static
boolean
Debug
=
tru
e
;
private
static
MicronConfig
config
;
@Autowired
...
...
@@ -568,9 +568,10 @@ public class MicronApi {
}
public
static
String
Api007
(
String
operationId
,
String
rfid
,
List
<
DataLog
>
dataLogList
)
{
public
static
Map
<
String
,
String
>
Api007
(
String
operationId
,
String
rfid
,
List
<
DataLog
>
dataLogList
)
{
String
url
=
config
.
getUrl
(
config
.
api_name_007
);
String
errMsg
=
""
;
Map
<
String
,
String
>
resultMap
=
new
HashMap
<>();
try
{
String
jobId
=
operationId
+
"_"
+
rfid
;
Map
<
String
,
Object
>
paramMap
=
new
HashMap
<>();
...
...
@@ -595,7 +596,7 @@ public class MicronApi {
String
paramStr
=
JsonUtil
.
toJsonStr
(
paramMap
);
log
.
info
(
"调用MES接口 API007: url="
+
url
+
",body="
+
paramStr
+
""
);
Map
<
String
,
String
>
resultMap
=
new
HashMap
<>();
MicronResult
micronResult
=
HttpHelper
.
postMicronJson
(
url
,
paramMap
);
errMsg
=
getDErrorMsg
(
micronResult
);
// if (micronResult.isOk()&& micronResult.statusIsSuccess()) {
...
...
@@ -615,21 +616,84 @@ public class MicronApi {
}
}
//需要解析
return
""
;
return
resultMap
;
}
else
if
(
ObjectUtil
.
isNotEmpty
(
errMsg
))
{
log
.
info
(
"API007 ,接口通信失败:"
+
errMsg
);
log
.
info
(
"API007 ,接口通信失败:"
+
errMsg
);
resultMap
.
put
(
"msg"
,
errMsg
);
// throw new ApiException(errMsg);
}
else
{
log
.
info
(
"API007 ,接口通信失败"
);
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API007 : "
+
micronResult
.
getResponseData
()});
}
}
catch
(
ApiException
e
)
{
log
.
error
(
url
+
"出错"
,
e
);
resultMap
.
put
(
"msg"
,
e
.
getMessage
());
// return e.getMessage();
}
return
resultMap
;
}
public
static
String
Api007SingleReel
(
String
operationId
,
String
rfid
,
DataLog
dataLog
)
{
String
url
=
config
.
getUrl
(
config
.
api_name_007
);
String
errMsg
=
""
;
try
{
String
jobId
=
operationId
+
"_"
+
rfid
;
Map
<
String
,
Object
>
paramMap
=
new
HashMap
<>();
paramMap
.
put
(
"jobId"
,
jobId
);
paramMap
.
put
(
"operationId"
,
operationId
);
List
<
Map
<
String
,
Object
>>
materialList
=
new
ArrayList
<>();
Map
<
String
,
Object
>
materialsMap
=
new
HashMap
<>();
materialsMap
.
put
(
"location"
,
dataLog
.
getPosName
());
materialsMap
.
put
(
"towerId"
,
dataLog
.
getStorageId
());
materialsMap
.
put
(
"materialStatus"
,
"Available"
);
Barcode
barcode
=
barcodeManager
.
findByBarcode
(
dataLog
.
getBarcode
());
if
(
barcode
!=
null
)
{
materialsMap
.
put
(
"material"
,
AMaterialBean
.
toBean
(
barcode
).
toMap
());
}
materialList
.
add
(
materialsMap
);
paramMap
.
put
(
"dispatchedMaterials"
,
materialList
);
String
paramStr
=
JsonUtil
.
toJsonStr
(
paramMap
);
log
.
info
(
"调用MES接口 API007: url="
+
url
+
",body="
+
paramStr
+
""
);
Map
<
String
,
String
>
resultMap
=
new
HashMap
<>();
MicronResult
micronResult
=
HttpHelper
.
postMicronJson
(
url
,
paramMap
);
errMsg
=
getDErrorMsg
(
micronResult
);
// if (micronResult.isOk()&& micronResult.statusIsSuccess()) {
if
(
micronResult
.
isOk
())
{
List
<
Object
>
resultList
=
micronResult
.
getResult
(
"materialStatusList"
);
for
(
Object
Obj
:
resultList
)
{
MaterialStatus
s
=
JsonUtil
.
toObj
(
JsonUtil
.
toJsonStr
(
Obj
),
MaterialStatus
.
class
);
// if (s.getMaterialStatus().toUpperCase().equals("SUCCESS")) {
if
(
s
.
isSuccess
())
{
resultMap
.
put
(
s
.
getSerialNum
(),
"true"
);
return
""
;
}
else
if
(
ObjectUtil
.
isNotEmpty
(
s
.
getDescription
()))
{
resultMap
.
put
(
s
.
getSerialNum
(),
s
.
getDescription
());
return
s
.
getDescription
();
}
}
}
else
if
(
ObjectUtil
.
isNotEmpty
(
errMsg
))
{
log
.
info
(
"API007 ,接口通信失败:"
+
errMsg
);
return
errMsg
;
// throw new ApiException(errMsg);
}
else
{
log
.
info
(
"API007 ,接口通信失败"
);
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API007 : "
+
micronResult
.
getResponseData
()});
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API007 : "
+
micronResult
.
getResponseData
()});
}
}
catch
(
ApiException
e
)
{
log
.
error
(
url
+
"出错"
,
e
);
return
e
.
getMessage
();
}
return
MessageUtils
.
getText
(
"smfcore.api.fail"
,
new
String
[]{
"API007 "
},
MessageUtils
.
getDefaultLocal
(),
"{0} Failed to get data"
);
}
public
static
String
Api008
(
String
serialNum
,
int
qty
,
int
newQty
)
throws
ApiException
{
...
...
src/main/java/com/neotel/smfcore/custom/micron1053/loading/util/LoadingUtil.java
查看文件 @
389298f
...
...
@@ -397,6 +397,17 @@ public class LoadingUtil {
}
private
boolean
PushToMes
(
String
rfid
,
InList
inList
,
List
<
StoragePos
>
posList
)
{
for
(
InListItem
item
:
inList
.
getInListItems
())
{
if
(
item
.
getRfid
().
equals
(
rfid
)
&&
item
.
getState
()
==
INITEM_STATUS
.
Cancel
&&
ObjectUtil
.
isNotEmpty
(
item
.
getRi
())&&
ObjectUtil
.
isNotEmpty
(
item
.
getPosName
()))
{
StoragePos
pos
=
storagePosManager
.
getByPosName
(
item
.
getPosName
());
if
(
pos
!=
null
&&
pos
.
getBarcode
()!=
null
&&
pos
.
getBarcode
().
getBarcode
().
equals
(
item
.
getRi
()))
{
log
.
info
(
"入库单["
+
inList
.
getName
()
+
"],rfid ["
+
rfid
+
"],posName["
+
item
.
getPosName
()
+
"],ri["
+
item
.
getRi
()
+
"],任务取消但是入库完成,也需要发送API002"
);
posList
.
add
(
pos
);
}
}
}
Map
<
String
,
String
>
resultMap
=
MicronApi
.
API002
(
rfid
,
inList
.
getOperationId
(),
posList
);
List
<
InListItem
>
inListItems
=
new
ArrayList
<>();
...
...
src/main/java/com/neotel/smfcore/custom/micron1053/task/MicronDispatchController.java
查看文件 @
389298f
...
...
@@ -8,6 +8,7 @@ import com.neotel.smfcore.common.utils.FileUtil;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.inList.service.po.InListItem
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
...
...
@@ -667,6 +668,39 @@ private IStoragePosManager storagePosManager;
}
private
void
CloseOrder
(
LiteOrder
order
)
{
try
{
//如果有已执行完成,未发送的物料,还需要发送过去
List
<
LiteOrderItem
>
liteOrderItemList
=
order
.
getOrderItems
();
List
<
DataLog
>
needSendList
=
new
ArrayList
<>();
for
(
LiteOrderItem
orderItem
:
liteOrderItemList
)
{
if
(
orderItem
.
getSelectItems
()
==
null
)
{
continue
;
}
for
(
LiteOrderItem
sItem
:
orderItem
.
getSelectItems
())
{
if
(
sItem
.
getStatus
()
==
OrderItemStatus
.
notify_fail
||
sItem
.
getStatus
()
==
OrderItemStatus
.
cancel
||
sItem
.
getStatus
()
==
OrderItemStatus
.
executing
)
{
List
<
DataLog
>
dataLogList
=
dataLogManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"subSourceId"
).
is
(
sItem
.
getId
())).
addCriteria
(
Criteria
.
where
(
"status"
).
is
(
OP_STATUS
.
FINISHED
.
name
())));
if
(
dataLogList
.
size
()
>
0
)
{
needSendList
.
addAll
(
dataLogList
);
}
}
}
}
if
(
needSendList
.
size
()
>
0
)
{
Map
<
String
,
String
>
resultM
=
MicronApi
.
Api007
(
order
.
getOperationId
(),
needSendList
.
get
(
0
).
getLocInfo
(),
needSendList
);
log
.
info
(
" abort mode ["
+
order
.
getMode
()
+
"] 共"
+
needSendList
.
size
()
+
" 已出库完成,调用API007 ,工单已经要关闭,不再更新工单状态"
);
}
}
catch
(
Exception
ex
)
{
log
.
error
(
"关闭工单前调用API007出错:"
+
ex
.
toString
());
}
order
.
setStatus
(
LITEORDER_STATUS
.
CLOSED
);
order
.
setClosed
(
true
);
liteOrderManager
.
save
(
order
);
...
...
@@ -680,7 +714,7 @@ private IStoragePosManager storagePosManager;
log
.
info
(
"abort mode="
+
order
.
getMode
()
+
" 清空 key="
+
key
+
" 的cache,更改action=ABORT"
);
dataCache
.
updateCache
(
key
,
""
);
MicronApi
.
ActionUpdate
(
order
.
getOperationId
(),
MicronApi
.
ABORT
);
MicronApi
.
ActionUpdate
(
order
.
getOperationId
(),
MicronApi
.
ABORT
);
}
liteOrderCache
.
clearOrderLock
(
order
);
}
...
...
src/main/java/com/neotel/smfcore/custom/micron1053/task/MicronPreTaskController.java
查看文件 @
389298f
...
...
@@ -349,8 +349,6 @@ public class MicronPreTaskController {
dataCache
.
updateCache
(
key
,
""
);
return
ResultBean
.
newOkResult
(
""
);
}
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
List
<
LiteOrderItem
>
liteOrderItemList
=
order
.
getOrderItems
();
...
...
@@ -358,7 +356,7 @@ public class MicronPreTaskController {
for
(
LiteOrderItem
orderItem
:
liteOrderItemList
)
{
if
(
orderItem
.
getStatus
()
==
OrderItemStatus
.
notify_fail
)
{
if
(
orderItem
.
getStatus
()
==
OrderItemStatus
.
executing
)
{
List
<
DataLog
>
dataLogList
=
dataLogManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"subSourceId"
).
is
(
orderItem
.
getId
())));
...
...
@@ -366,7 +364,6 @@ public class MicronPreTaskController {
for
(
DataLog
dataLog
:
dataLogList
)
{
if
(
dataLog
.
isExecuting
())
{
taskService
.
cancelTask
(
dataLog
.
getId
());
log
.
info
(
"abort 终止出库,mode="
+
mode
+
",取消正在执行的出库任务:barcode="
+
dataLog
.
getBarcode
()
+
",posName="
+
dataLog
.
getPosName
());
}
...
...
@@ -374,18 +371,6 @@ public class MicronPreTaskController {
orderItem
.
setStatus
(
OrderItemStatus
.
cancel
);
orderItem
=
liteOrderItemManager
.
save
(
orderItem
);
newList
.
add
(
orderItem
);
// String orderId = orderItem.getOrderId();
// LiteOrder liteOrder = liteOrderManager.get(orderId);
// DataLog dataLog = new DataLog();
// dataLog.setBarcode(orderItem.getRi());
// dataLog.setPartNumber(orderItem.getPn());
// dataLog.setStatus(OP_STATUS.CANCEL.name());
// dataLog.setType(OP.CHECKOUT);
// dataLog.setSourceId(liteOrder.getId());
// dataLog.setSourceName(liteOrder.getOrderNo());
// dataLog.setSubSourceId(orderItem.getId());
// dataLog.setOperationId(liteOrder.getOrderNo());
// taskService.updateFinishedTask(dataLog);
log
.
info
(
" abort :barcode=["
+
orderItem
.
getPn
()
+
"] 取消出库任务"
);
}
}
...
...
@@ -396,18 +381,51 @@ public class MicronPreTaskController {
return
ResultBean
.
newOkResult
(
""
);
}
private
void
CloseOrder
(
LiteOrder
order
){
private
void
CloseOrder
(
LiteOrder
order
)
{
try
{
//如果有已执行完成,未发送的物料,还需要发送过去
List
<
LiteOrderItem
>
liteOrderItemList
=
order
.
getOrderItems
();
for
(
LiteOrderItem
orderItem
:
liteOrderItemList
)
{
if
(
orderItem
.
getStatus
()
==
OrderItemStatus
.
notify_fail
||
orderItem
.
getStatus
()
==
OrderItemStatus
.
cancel
||
orderItem
.
getStatus
()
==
OrderItemStatus
.
executing
)
{
List
<
DataLog
>
dataLogList
=
dataLogManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"subSourceId"
).
is
(
orderItem
.
getId
())).
addCriteria
(
Criteria
.
where
(
"status"
).
is
(
OP_STATUS
.
FINISHED
.
name
())));
if
(
dataLogList
.
size
()
>
0
)
{
DataLog
dataLog
=
dataLogList
.
get
(
0
);
String
msg
=
MicronApi
.
Api007SingleReel
(
order
.
getOperationId
(),
dataLog
.
getLocInfo
(),
dataLog
);
if
(
ObjectUtil
.
isEmpty
(
msg
))
{
orderItem
.
setStatus
(
OrderItemStatus
.
notify_success
);
}
else
{
orderItem
.
setExecutFailReason
(
msg
);
orderItem
.
setStatus
(
OrderItemStatus
.
notify_fail
);
orderItem
.
setExecutFailReason
(
msg
);
}
log
.
info
(
" abort mode ["
+
order
.
getMode
()
+
"] :barcode=["
+
dataLog
.
getBarcode
()
+
"],posname=["
+
dataLog
.
getPosName
()
+
"] 已出库完成,调用API007 ,更改状态="
+
orderItem
.
getStatus
()
+
",msg="
+
orderItem
.
getExecutFailReason
());
liteOrderItemManager
.
save
(
orderItem
);
}
}
}
}
catch
(
Exception
ex
)
{
log
.
error
(
"关闭工单前调用API007出错:"
+
ex
.
toString
());
}
order
.
setStatus
(
LITEORDER_STATUS
.
CLOSED
);
order
.
setClosed
(
true
);
liteOrderManager
.
save
(
order
);
liteOrderCache
.
addOrderToMap
(
order
);
//清空配置
String
key
=
Constants
.
CACHE_DISPATCH
+
order
.
getMode
();
log
.
info
(
" mode="
+
order
.
getMode
()+
"工单已关闭,清空 key="
+
key
+
" 的cache,更改action=ABORT"
);
dataCache
.
updateCache
(
key
,
""
);
String
key
=
Constants
.
CACHE_DISPATCH
+
order
.
getMode
();
log
.
info
(
" mode="
+
order
.
getMode
()
+
"工单已关闭,清空 key="
+
key
+
" 的cache,更改action=ABORT"
);
dataCache
.
updateCache
(
key
,
""
);
MicronApi
.
ActionUpdate
(
order
.
getOperationId
(),
MicronApi
.
ABORT
);
MicronApi
.
ActionUpdate
(
order
.
getOperationId
(),
MicronApi
.
ABORT
);
liteOrderCache
.
clearOrderLock
(
order
);
}
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论