Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 7efbc373
由
zshaohui
编写于
2023-08-11 10:43:09 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
PCB,MCL,Line Prep出库
1 个父辈
33e5cc0f
显示空白字符变更
内嵌
并排
正在显示
14 个修改的文件
包含
512 行增加
和
43 行删除
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrder.java
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrderItem.java
src/main/java/com/neotel/smfcore/core/system/service/po/DataLog.java
src/main/java/com/neotel/smfcore/custom/micron1053/api/MicronApi.java
src/main/java/com/neotel/smfcore/custom/micron1053/api/MicronConfig.java
src/main/java/com/neotel/smfcore/custom/micron1053/api/bean/DispatchId.java
src/main/java/com/neotel/smfcore/custom/micron1053/api/bean/Material.java
src/main/java/com/neotel/smfcore/custom/micron1053/api/bean/TrackStatus.java
src/main/java/com/neotel/smfcore/custom/micron1053/task/MicronPreTaskController.java
src/main/java/com/neotel/smfcore/custom/micron1053/task/bean/PreTask.java
src/main/java/com/neotel/smfcore/custom/micron1053/task/bean/dto/TaskDto.java
src/main/java/com/neotel/smfcore/custom/micron1053/task/enums/OrderItemStatus.java
src/main/resources/config/application-prod.yml
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
7efbc37
...
@@ -25,11 +25,16 @@ import com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE;
...
@@ -25,11 +25,16 @@ import com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
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.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.IDataLogManager
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
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.custom.micron1053.api.MicronApi
;
import
com.neotel.smfcore.custom.micron1053.task.enums.OrderItemStatus
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
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
org.springframework.stereotype.Service
;
import
java.util.*
;
import
java.util.*
;
...
@@ -59,6 +64,9 @@ public class LiteOrderCache {
...
@@ -59,6 +64,9 @@ public class LiteOrderCache {
@Autowired
@Autowired
private
SmfApi
smfApi
;
private
SmfApi
smfApi
;
@Autowired
private
IDataLogManager
dataLogManager
;
/**
/**
* 正在执行的liteOrderMap, key 为orderNo,value 为order
* 正在执行的liteOrderMap, key 为orderNo,value 为order
*/
*/
...
@@ -256,10 +264,20 @@ public class LiteOrderCache {
...
@@ -256,10 +264,20 @@ public class LiteOrderCache {
//任务是取消的,需要将总待出库数量-1
//任务是取消的,需要将总待出库数量-1
if
(
task
.
isCancel
())
{
if
(
task
.
isCancel
())
{
order
.
setTaskReelCount
(
order
.
getTaskReelCount
()
-
1
);
order
.
setTaskReelCount
(
order
.
getTaskReelCount
()
-
1
);
order
.
setTotalTaskReelCount
(
order
.
getTotalTaskReelCount
()
-
1
);
order
.
setTotalTaskReelCount
(
order
.
getTotalTaskReelCount
()
-
1
);
log
.
info
(
"工单["
+
orderNo
+
"]的任务"
+
task
.
getPartNumber
()
+
"["
+
task
.
getBarcode
()
+
"]已取消,任务数-1="
+
order
.
getFinishedReelCount
()
+
"/"
+
order
.
getTaskReelCount
());
log
.
info
(
"工单["
+
orderNo
+
"]的任务"
+
task
.
getPartNumber
()
+
"["
+
task
.
getBarcode
()
+
"]已取消,任务数-1="
+
order
.
getFinishedReelCount
()
+
"/"
+
order
.
getTaskReelCount
());
checkoutAgain
(
task
,
order
);
List
<
LiteOrderItem
>
items
=
new
ArrayList
<>();
for
(
LiteOrderItem
orderItem
:
order
.
getOrderItems
())
{
if
(
orderItem
.
getId
().
equals
(
task
.
getSubSourceId
()))
{
orderItem
.
setStatus
(
OrderItemStatus
.
cancel
);
}
items
.
add
(
orderItem
);
}
order
.
setOrderItems
(
items
);
liteOrderManager
.
save
(
order
);
liteOrderMap
.
put
(
orderNo
,
order
);
checkoutAgain
(
task
,
order
);
}
}
else
if
(
task
.
isFinished
())
{
else
if
(
task
.
isFinished
())
{
order
.
setFinishedReelCount
(
order
.
getFinishedReelCount
()
+
1
);
order
.
setFinishedReelCount
(
order
.
getFinishedReelCount
()
+
1
);
...
@@ -274,6 +292,15 @@ public class LiteOrderCache {
...
@@ -274,6 +292,15 @@ public class LiteOrderCache {
liteOrderItem
.
setOutReelCount
(
liteOrderItem
.
getOutReelCount
()
+
1
);
liteOrderItem
.
setOutReelCount
(
liteOrderItem
.
getOutReelCount
()
+
1
);
liteOrderItem
.
setTotalOutNum
(
liteOrderItem
.
getTotalOutNum
()+
task
.
getNum
());
liteOrderItem
.
setTotalOutNum
(
liteOrderItem
.
getTotalOutNum
()+
task
.
getNum
());
liteOrderItem
.
setTotalOutReelCount
(
liteOrderItem
.
getTotalOutReelCount
()+
1
);
liteOrderItem
.
setTotalOutReelCount
(
liteOrderItem
.
getTotalOutReelCount
()+
1
);
liteOrderItem
.
setStatus
(
task
.
getStatus
());
liteOrderItem
.
setLocInfo
(
task
.
getLocInfo
());
liteOrderItem
.
setStatus
(
OrderItemStatus
.
finish
);
//通知micron
/*boolean isSuccess = MicronApi.Api007(order.getOrderNo(), task.getId(), Arrays.asList(task));
if (!isSuccess){
liteOrderItem.setNotifySuccess(false);
}*/
liteOrderItem
=
liteOrderItemManager
.
save
(
liteOrderItem
);
liteOrderItem
=
liteOrderItemManager
.
save
(
liteOrderItem
);
// Barcode barcode = barcodeManager.findByBarcode(task.getBarcode());
// Barcode barcode = barcodeManager.findByBarcode(task.getBarcode());
// if (barcode != null) {
// if (barcode != null) {
...
@@ -294,6 +321,35 @@ public class LiteOrderCache {
...
@@ -294,6 +321,35 @@ public class LiteOrderCache {
items
.
add
(
liteOrderItem
);
items
.
add
(
liteOrderItem
);
}
}
order
.
setOrderItems
(
items
);
order
.
setOrderItems
(
items
);
//判断位置信息是否以"-"开头,如果是,则获取相同位置的orderItemId,进行通知
if
(
StringUtils
.
isNotBlank
(
task
.
getLocInfo
())
&&
task
.
getLocInfo
().
startsWith
(
"-"
))
{
String
locInfo
=
task
.
getLocInfo
();
List
<
String
>
itemIdList
=
new
ArrayList
<>();
for
(
LiteOrderItem
item
:
items
)
{
if
(
locInfo
.
contains
(
item
.
getLocInfo
()))
{
itemIdList
.
add
(
item
.
getId
());
}
}
List
<
DataLog
>
dataLogList
=
dataLogManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"subSourceId"
).
in
(
itemIdList
)));
if
(
dataLogList
!=
null
&&
!
dataLogList
.
isEmpty
())
{
boolean
isSuccess
=
MicronApi
.
Api007
(
order
.
getOrderNo
(),
order
.
getId
(),
dataLogList
);
for
(
LiteOrderItem
item
:
items
)
{
if
(
itemIdList
.
contains
(
item
.
getId
()))
{
if
(
isSuccess
)
{
item
.
setStatus
(
OrderItemStatus
.
notify_success
);
}
else
{
item
.
setStatus
(
OrderItemStatus
.
notify_fail
);
}
}
liteOrderItemManager
.
save
(
item
);
}
order
.
setOrderItems
(
items
);
}
}
if
(!
order
.
isClosed
())
{
if
(!
order
.
isClosed
())
{
//工单未关闭的话,检查状态,全部都出完进行关闭
//工单未关闭的话,检查状态,全部都出完进行关闭
boolean
closed
=
true
;
boolean
closed
=
true
;
...
@@ -737,4 +793,8 @@ public class LiteOrderCache {
...
@@ -737,4 +793,8 @@ public class LiteOrderCache {
return
count
;
return
count
;
}
}
public
Collection
<
LiteOrder
>
getAllLiteOrder
()
{
return
liteOrderMap
.
values
();
}
}
}
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrder.java
查看文件 @
7efbc37
...
@@ -99,6 +99,9 @@ public class LiteOrder extends BasePo implements Serializable {
...
@@ -99,6 +99,9 @@ public class LiteOrder extends BasePo implements Serializable {
*/
*/
private
Date
sdate
=
new
Date
();
private
Date
sdate
=
new
Date
();
private
String
mode
;
public
void
setClosed
(
boolean
value
){
public
void
setClosed
(
boolean
value
){
this
.
closed
=
value
;
this
.
closed
=
value
;
if
(
value
){
if
(
value
){
...
...
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrderItem.java
查看文件 @
7efbc37
...
@@ -91,6 +91,20 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li
...
@@ -91,6 +91,20 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li
*/
*/
private
String
mpn
=
""
;
private
String
mpn
=
""
;
/**
* 工单明细出库状态
*/
private
String
status
;
/**
* 位置信息
*/
private
String
locInfo
=
""
;
/**
* 类型
*/
private
String
mode
=
""
;
/**
/**
* 自定义的附加字段,key=字段名,value=值
* 自定义的附加字段,key=字段名,value=值
...
...
src/main/java/com/neotel/smfcore/core/system/service/po/DataLog.java
查看文件 @
7efbc37
...
@@ -243,6 +243,9 @@ public class DataLog extends BasePo implements Serializable ,Comparable<DataLog>
...
@@ -243,6 +243,9 @@ public class DataLog extends BasePo implements Serializable ,Comparable<DataLog>
*/
*/
private
Boolean
emptyOperate
;
private
Boolean
emptyOperate
;
private
String
operationId
;
public
String
getBarcode
()
{
public
String
getBarcode
()
{
if
(
barcode
==
null
){
if
(
barcode
==
null
){
return
""
;
return
""
;
...
...
src/main/java/com/neotel/smfcore/custom/micron1053/api/MicronApi.java
查看文件 @
7efbc37
package
com
.
neotel
.
smfcore
.
custom
.
micron1053
.
api
;
package
com
.
neotel
.
smfcore
.
custom
.
micron1053
.
api
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
com.neotel.smfcore.common.exception.ApiException
;
import
com.neotel.smfcore.common.exception.ApiException
;
import
com.neotel.smfcore.common.utils.HttpHelper
;
import
com.neotel.smfcore.common.utils.HttpHelper
;
import
com.neotel.smfcore.common.utils.JsonUtil
;
import
com.neotel.smfcore.common.utils.JsonUtil
;
import
com.neotel.smfcore.core.api.listener.BaseSmfApiListener
;
import
com.neotel.smfcore.core.api.listener.BaseSmfApiListener
;
import
com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.device.util.DataCache
;
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.po.DataLog
;
import
com.neotel.smfcore.custom.micron1053.api.bean.DispatchId
;
import
com.neotel.smfcore.custom.micron1053.api.bean.Material
;
import
com.neotel.smfcore.custom.micron1053.api.bean.TrackStatus
;
import
com.neotel.smfcore.custom.micron1053.bean.MaterialInfo
;
import
com.neotel.smfcore.custom.micron1053.bean.MaterialInfo
;
import
com.neotel.smfcore.custom.micron1053.bean.MicronResult
;
import
com.neotel.smfcore.custom.micron1053.bean.MicronResult
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
...
@@ -38,6 +44,13 @@ public class MicronApi extends BaseSmfApiListener {
...
@@ -38,6 +44,13 @@ public class MicronApi extends BaseSmfApiListener {
MicronApi
.
dataCache
=
cache
;
MicronApi
.
dataCache
=
cache
;
}
}
public
static
IBarcodeManager
barcodeManager
;
@Autowired
public
void
setBarcodeManager
(
IBarcodeManager
manager
){
MicronApi
.
barcodeManager
=
manager
;
}
@Override
@Override
public
boolean
isForThisApi
(
String
apiName
)
{
public
boolean
isForThisApi
(
String
apiName
)
{
...
@@ -127,32 +140,36 @@ public class MicronApi extends BaseSmfApiListener {
...
@@ -127,32 +140,36 @@ public class MicronApi extends BaseSmfApiListener {
}
}
public
static
boolean
Api004
(
String
operationId
)
{
public
static
List
<
DispatchId
>
Api004
(
String
operationId
)
{
String
url
=
config
.
getUrl
(
config
.
api_name_004
);
String
url
=
config
.
getUrl
(
config
.
api_name_004
);
url
=
MessageFormat
.
format
(
url
,
operationId
);
url
=
MessageFormat
.
format
(
url
,
operationId
);
try
{
try
{
log
.
info
(
"调用MES接口 API004: url=["
+
url
+
"]"
);
log
.
info
(
"调用MES接口 API004: url=["
+
url
+
"]"
);
MicronResult
result
=
HttpHelper
.
getMicronJson
(
url
);
MicronResult
result
=
HttpHelper
.
getMicronJson
(
url
);
}
catch
(
Exception
e
){
return
result
.
getResult
(
"dispatchIds"
);
}
catch
(
Exception
e
)
{
log
.
error
(
url
+
"出错"
,
e
);
log
.
error
(
url
+
"出错"
,
e
);
}
}
return
false
;
return
null
;
}
}
public
static
boolean
Api005
(
String
linePrepOrderId
)
{
public
static
List
<
Material
>
Api005
(
String
operationId
,
String
linePrepOrderId
)
{
String
url
=
config
.
getUrl
(
config
.
api_name_005
);
String
url
=
config
.
getUrl
(
config
.
api_name_005
);
url
=
MessageFormat
.
format
(
url
,
linePrepOrderId
);
url
=
MessageFormat
.
format
(
url
,
operationId
,
linePrepOrderId
);
List
<
Material
>
materialList
=
new
ArrayList
<>();
try
{
try
{
log
.
info
(
"调用MES接口 API005: url=["
+
url
+
"]"
);
log
.
info
(
"调用MES接口 API005: url=["
+
url
+
"]"
);
MicronResult
result
=
HttpHelper
.
getMicronJson
(
url
);
MicronResult
result
=
HttpHelper
.
getMicronJson
(
url
);
materialList
=
result
.
getResult
(
"materials"
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
url
+
"出错"
,
e
);
log
.
error
(
url
+
"出错"
,
e
);
}
}
return
false
;
return
materialList
;
}
}
public
static
boolean
Api006
(
String
operationId
,
List
<
String
>
pretasks
)
{
public
static
List
<
Material
>
Api006
(
String
operationId
,
List
<
String
>
pretasks
)
{
/**
/**
* {
* {
* "operationId": <operationId>
* "operationId": <operationId>
...
@@ -164,24 +181,30 @@ public class MicronApi extends BaseSmfApiListener {
...
@@ -164,24 +181,30 @@ public class MicronApi extends BaseSmfApiListener {
* ]
* ]
* }
* }
*/
*/
List
<
Material
>
materialList
=
new
ArrayList
<>();
String
url
=
config
.
getUrl
(
config
.
api_name_006
);
String
url
=
config
.
getUrl
(
config
.
api_name_006
);
try
{
try
{
Map
<
String
,
Object
>
paramMap
=
new
HashMap
<>();
Map
<
String
,
Object
>
paramMap
=
new
HashMap
<>();
paramMap
.
put
(
"operationId"
,
operationId
);
paramMap
.
put
(
"operationId"
,
operationId
);
paramMap
.
put
(
"pretasks"
,
pretasks
);
paramMap
.
put
(
"pretasks"
,
pretasks
);
String
paramStr
=
JsonUtil
.
toJsonStr
(
paramMap
);
String
paramStr
=
JsonUtil
.
toJsonStr
(
paramMap
);
log
.
info
(
"调用MES接口 API006: url=["
+
url
+
"],body=["
+
paramStr
+
"]"
);
log
.
info
(
"调用MES接口 API006: url=["
+
url
+
"],body=["
+
paramStr
+
"]"
);
MicronResult
micronResult
=
HttpHelper
.
postMicronJson
(
url
,
paramMap
);
MicronResult
micronResult
=
HttpHelper
.
postMicronJson
(
url
,
paramMap
);
}
catch
(
Exception
e
){
String
responseData
=
micronResult
.
getResponseData
();
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
responseData
);
String
materials
=
jsonObject
.
getString
(
"materials"
);
materialList
=
JSONObject
.
parseArray
(
materials
,
Material
.
class
);
}
catch
(
Exception
e
)
{
log
.
error
(
url
+
"出错"
,
e
);
log
.
error
(
url
+
"出错"
,
e
);
}
}
return
false
;
return
materialList
;
}
}
public
static
boolean
Api007
(
String
operationId
,
String
jobId
,
List
<
StoragePos
>
storagePos
List
)
{
public
static
boolean
Api007
(
String
operationId
,
String
jobId
,
List
<
DataLog
>
dataLog
List
)
{
String
url
=
config
.
getUrl
(
config
.
api_name_007
);
String
url
=
config
.
getUrl
(
config
.
api_name_007
);
try
{
try
{
...
@@ -190,12 +213,16 @@ public class MicronApi extends BaseSmfApiListener {
...
@@ -190,12 +213,16 @@ public class MicronApi extends BaseSmfApiListener {
paramMap
.
put
(
"operationId"
,
operationId
);
paramMap
.
put
(
"operationId"
,
operationId
);
List
<
Map
<
String
,
Object
>>
materialList
=
new
ArrayList
<>();
List
<
Map
<
String
,
Object
>>
materialList
=
new
ArrayList
<>();
for
(
StoragePos
storagePos
:
storagePos
List
)
{
for
(
DataLog
dataLog
:
dataLog
List
)
{
Map
<
String
,
Object
>
materialsMap
=
new
HashMap
<>();
Map
<
String
,
Object
>
materialsMap
=
new
HashMap
<>();
materialsMap
.
put
(
"location"
,
storagePos
.
getPosName
());
materialsMap
.
put
(
"location"
,
dataLog
.
getPosName
());
materialsMap
.
put
(
"towerId"
,
storagePos
.
getStorageId
());
materialsMap
.
put
(
"towerId"
,
dataLog
.
getStorageId
());
materialsMap
.
put
(
"materialStatus"
,
"Available"
);
materialsMap
.
put
(
"materialStatus"
,
"Available"
);
materialsMap
.
put
(
"material"
,
AMaterialBean
.
toBean
(
storagePos
.
getBarcode
()).
toMap
());
Barcode
barcode
=
barcodeManager
.
findByBarcode
(
dataLog
.
getBarcode
());
if
(
barcode
!=
null
)
{
materialsMap
.
put
(
"material"
,
AMaterialBean
.
toBean
(
barcode
).
toMap
());
}
materialList
.
add
(
materialsMap
);
materialList
.
add
(
materialsMap
);
}
}
...
@@ -205,7 +232,7 @@ public class MicronApi extends BaseSmfApiListener {
...
@@ -205,7 +232,7 @@ public class MicronApi extends BaseSmfApiListener {
log
.
info
(
"调用MES接口 API007: url=["
+
url
+
"],body=["
+
paramStr
+
"]"
);
log
.
info
(
"调用MES接口 API007: url=["
+
url
+
"],body=["
+
paramStr
+
"]"
);
MicronResult
micronResult
=
HttpHelper
.
postMicronJson
(
url
,
paramMap
);
MicronResult
micronResult
=
HttpHelper
.
postMicronJson
(
url
,
paramMap
);
return
true
;
return
micronResult
.
getStatus
().
equals
(
"Success"
)
;
}
catch
(
ApiException
e
)
{
}
catch
(
ApiException
e
)
{
log
.
error
(
url
+
"出错"
,
e
);
log
.
error
(
url
+
"出错"
,
e
);
}
}
...
@@ -261,31 +288,28 @@ public class MicronApi extends BaseSmfApiListener {
...
@@ -261,31 +288,28 @@ public class MicronApi extends BaseSmfApiListener {
}
}
public
static
boolean
Api010
(
String
operationId
,
List
<
Barcode
>
barcodeList
)
{
public
static
List
<
TrackStatus
>
Api010
(
String
operationId
,
List
<
Material
>
materialList
)
{
List
<
TrackStatus
>
statusList
=
new
ArrayList
<>();
String
url
=
config
.
getUrl
(
config
.
api_name_010
);
String
url
=
config
.
getUrl
(
config
.
api_name_010
);
try
{
try
{
Map
<
String
,
Object
>
paramMap
=
new
HashMap
<>();
Map
<
String
,
Object
>
paramMap
=
new
HashMap
<>();
paramMap
.
put
(
"operationId"
,
operationId
);
paramMap
.
put
(
"operationId"
,
operationId
);
List
<
Map
<
String
,
Object
>>
materialList
=
new
ArrayList
<>();
for
(
Barcode
barcode
:
barcodeList
)
{
Map
<
String
,
Object
>
materialMap
=
new
HashMap
<>();
materialMap
.
put
(
"serialNum"
,
barcode
.
getBarcode
());
materialMap
.
put
(
"partNumber"
,
barcode
.
getPartNumber
());
materialList
.
add
(
materialMap
);
}
paramMap
.
put
(
"materials"
,
materialList
);
paramMap
.
put
(
"materials"
,
materialList
);
String
paramStr
=
JsonUtil
.
toJsonStr
(
paramMap
);
String
paramStr
=
JsonUtil
.
toJsonStr
(
paramMap
);
log
.
info
(
"调用MES接口 API010: url=["
+
url
+
"],body=["
+
paramStr
+
"]"
);
log
.
info
(
"调用MES接口 API010: url=["
+
url
+
"],body=["
+
paramStr
+
"]"
);
MicronResult
micronResult
=
HttpHelper
.
postMicronJson
(
url
,
paramMap
);
MicronResult
micronResult
=
HttpHelper
.
postMicronJson
(
url
,
paramMap
);
return
true
;
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
micronResult
.
getResponseData
());
}
catch
(
ApiException
e
)
{
String
trackStatus
=
jsonObject
.
getString
(
"trackStatus"
);
statusList
=
JSONObject
.
parseArray
(
trackStatus
,
TrackStatus
.
class
);
//statusList = micronResult.getResult("trackStatus");
}
catch
(
Exception
e
)
{
log
.
error
(
url
+
"出错"
,
e
);
log
.
error
(
url
+
"出错"
,
e
);
}
}
return
false
;
return
statusList
;
}
}
...
@@ -555,9 +579,4 @@ public class MicronApi extends BaseSmfApiListener {
...
@@ -555,9 +579,4 @@ public class MicronApi extends BaseSmfApiListener {
return
null
;
return
null
;
}
}
}
}
src/main/java/com/neotel/smfcore/custom/micron1053/api/MicronConfig.java
查看文件 @
7efbc37
...
@@ -30,7 +30,7 @@ public class MicronConfig {
...
@@ -30,7 +30,7 @@ public class MicronConfig {
* 根据API011返回的 operationId,从MES获取出库的Pretask/linePrepOrder
* 根据API011返回的 operationId,从MES获取出库的Pretask/linePrepOrder
*Get ready Pretask/linePrepOrder list from Auto Kitting System
*Get ready Pretask/linePrepOrder list from Auto Kitting System
*/
*/
public
String
api_name_004
=
"operation/dispatchIds?operationId={
operationId
}"
;
public
String
api_name_004
=
"operation/dispatchIds?operationId={
0
}"
;
/**
/**
* 出库勾选一个ID(API004返回的ID)后,从MES获取出库的RI
* 出库勾选一个ID(API004返回的ID)后,从MES获取出库的RI
*Get dispatch Material list from Autokitting system to fullfil the LinePrepOrder
*Get dispatch Material list from Autokitting system to fullfil the LinePrepOrder
...
@@ -64,7 +64,7 @@ public class MicronConfig {
...
@@ -64,7 +64,7 @@ public class MicronConfig {
/**
/**
* 获取OperationID ,Get operationId for Loading or Dispatching of material
* 获取OperationID ,Get operationId for Loading or Dispatching of material
*/
*/
public
String
api_name_011
=
"operation?mode={
Mode}&username={Username}&source={Source
}"
;
public
String
api_name_011
=
"operation?mode={
0}&username={1}&source={2
}"
;
/**
/**
* Validate if MBR (From Warehouse ) is valid
* Validate if MBR (From Warehouse ) is valid
...
...
src/main/java/com/neotel/smfcore/custom/micron1053/api/bean/DispatchId.java
0 → 100644
查看文件 @
7efbc37
package
com
.
neotel
.
smfcore
.
custom
.
micron1053
.
api
.
bean
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
DispatchId
{
private
String
lineId
;
private
List
<
Id
>
ids
;
@Data
static
class
Id
{
private
String
Id
;
private
List
<
Object
>
Attribute
;
}
}
src/main/java/com/neotel/smfcore/custom/micron1053/api/bean/Material.java
0 → 100644
查看文件 @
7efbc37
package
com
.
neotel
.
smfcore
.
custom
.
micron1053
.
api
.
bean
;
import
lombok.Data
;
@Data
public
class
Material
{
private
String
serialNum
;
private
String
partNumber
;
}
src/main/java/com/neotel/smfcore/custom/micron1053/api/bean/TrackStatus.java
0 → 100644
查看文件 @
7efbc37
package
com
.
neotel
.
smfcore
.
custom
.
micron1053
.
api
.
bean
;
import
lombok.Data
;
@Data
public
class
TrackStatus
{
private
String
serialNum
;
private
String
partNumber
;
private
String
materialStatus
;
private
String
Success
;
private
String
description
;
}
src/main/java/com/neotel/smfcore/custom/micron1053/task/MicronPreTaskController.java
0 → 100644
查看文件 @
7efbc37
package
com
.
neotel
.
smfcore
.
custom
.
micron1053
.
task
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
import
com.neotel.smfcore.core.order.enums.LITEORDER_STATUS
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderManager
;
import
com.neotel.smfcore.core.order.service.po.LiteOrder
;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.system.service.manager.IDataLogManager
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.custom.micron1053.api.MicronApi
;
import
com.neotel.smfcore.custom.micron1053.api.MicronConfig
;
import
com.neotel.smfcore.custom.micron1053.api.bean.DispatchId
;
import
com.neotel.smfcore.custom.micron1053.api.bean.Material
;
import
com.neotel.smfcore.custom.micron1053.api.bean.TrackStatus
;
import
com.neotel.smfcore.custom.micron1053.task.bean.PreTask
;
import
com.neotel.smfcore.custom.micron1053.task.bean.dto.TaskDto
;
import
com.neotel.smfcore.custom.micron1053.task.enums.OrderItemStatus
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
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.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.List
;
import
java.util.stream.Collectors
;
@Slf4j
@RestController
@Api
(
tags
=
"1053:PreTask"
)
@RequestMapping
(
"/rest/micron/PreTask"
)
public
class
MicronPreTaskController
{
@Autowired
private
ILiteOrderManager
liteOrderManager
;
@Autowired
private
ILiteOrderItemManager
liteOrderItemManager
;
@Autowired
private
LiteOrderCache
liteOrderCache
;
@Autowired
private
IStoragePosManager
storagePosManager
;
@Autowired
private
TaskService
taskService
;
@Autowired
private
DataCache
dataCache
;
@Autowired
private
IDataLogManager
dataLogManager
;
@Autowired
private
MicronConfig
micronConfig
;
/**
* 1.判断是否生成同类型的工单信息,如果没执行成功,则返回列表
* 2.先获取operationId
* 3.从接口获取要出库的taskId,人员去点击出库
* 4.从接口中获取具体的物料信息,生成工单
* 5.进行工单出库
* 6.调用接口验证是否返回成功,如果返回成功,进行出库操作
* 7.出库完成,生成任务,更改任务状态
*/
@ApiOperation
(
"出库页面展示"
)
@AnonymousAccess
@RequestMapping
(
"/getTaskId"
)
public
ResultBean
task
(
String
mode
)
{
//判断是否生成,未关闭的工单
TaskDto
dto
=
new
TaskDto
();
List
<
LiteOrderItem
>
itemList
=
getLiteOrderItemList
(
mode
);
if
(
itemList
!=
null
&&
!
itemList
.
isEmpty
())
{
dto
.
setType
(
1
);
dto
.
setItemList
(
itemList
);
}
else
{
//获取operatorationId
String
source
=
micronConfig
.
api_011_Source
;
String
operationId
=
MicronApi
.
Api011
(
mode
,
SecurityUtils
.
getLoginUsername
(),
source
);
if
(
StringUtils
.
isNotBlank
(
operationId
))
{
//获取Pre Task ID
List
<
DispatchId
>
dispatchIdList
=
MicronApi
.
Api004
(
operationId
);
if
(
dispatchIdList
!=
null
&&
!
dispatchIdList
.
isEmpty
())
{
dto
.
setOperationId
(
operationId
);
dto
.
setType
(
2
);
dto
.
setDispatchIdList
(
dispatchIdList
);
}
}
}
return
ResultBean
.
newOkResult
(
dto
);
}
@ApiOperation
(
"根据勾选的taskId,创建工单任务"
)
@AnonymousAccess
@RequestMapping
(
"/createOrder"
)
public
ResultBean
createOrder
(
@RequestBody
PreTask
preTask
)
{
String
mode
=
preTask
.
getMode
();
String
operationId
=
preTask
.
getOperationId
();
List
<
String
>
pretasks
=
preTask
.
getPretasks
();
List
<
Material
>
materialList
=
new
ArrayList
<>();
if
(
"Line Prep Dispatch"
.
equals
(
mode
)){
materialList
=
MicronApi
.
Api005
(
operationId
,
pretasks
.
get
(
0
));
}
else
{
materialList
=
MicronApi
.
Api006
(
operationId
,
pretasks
);
}
if
(
materialList
!=
null
&&
!
materialList
.
isEmpty
())
{
//生成工单进行出库
List
<
LiteOrderItem
>
itemList
=
new
ArrayList
<>();
for
(
Material
material
:
materialList
)
{
LiteOrderItem
item
=
new
LiteOrderItem
();
item
.
setPn
(
material
.
getPartNumber
());
item
.
setRi
(
material
.
getSerialNum
());
item
.
setNeedReelCount
(
1
);
item
.
setMode
(
mode
);
itemList
.
add
(
item
);
}
LiteOrder
liteOrder
=
new
LiteOrder
();
liteOrder
.
setOrderNo
(
operationId
);
liteOrder
.
setMode
(
mode
);
liteOrder
.
setOrderItems
(
itemList
);
liteOrder
=
liteOrderManager
.
createWithItems
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
//开始查询是否可以出库
checkOut
(
liteOrder
,
operationId
,
materialList
);
}
return
ResultBean
.
newOkResult
(
""
);
}
@ApiOperation
(
"根据mode获取具体的出库信息"
)
@RequestMapping
(
"/itemList"
)
@AnonymousAccess
public
ResultBean
itemListByMode
(
String
mode
){
List
<
LiteOrderItem
>
itemList
=
getLiteOrderItemList
(
mode
);
return
ResultBean
.
newOkResult
(
itemList
);
}
@ApiOperation
(
"重试"
)
@RequestMapping
(
"/retry"
)
@AnonymousAccess
public
ResultBean
retry
(
String
orderItemId
)
{
//判断有没有生成任务
LiteOrderItem
orderItem
=
liteOrderItemManager
.
get
(
orderItemId
);
if
(
orderItem
!=
null
)
{
String
id
=
orderItem
.
getId
();
List
<
DataLog
>
dataLogList
=
dataLogManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"subSourceId"
).
is
(
id
)));
if
(
dataLogList
!=
null
&&
!
dataLogList
.
isEmpty
())
{
LiteOrder
order
=
liteOrderManager
.
get
(
orderItem
.
getId
());
boolean
isSuccess
=
MicronApi
.
Api007
(
order
.
getOrderNo
(),
order
.
getId
(),
dataLogList
);
for
(
LiteOrderItem
item
:
order
.
getOrderItems
())
{
if
(
item
.
getId
().
equals
(
orderItem
.
getId
()))
{
if
(
isSuccess
)
{
item
.
setStatus
(
OrderItemStatus
.
notify_success
);
}
else
{
item
.
setStatus
(
OrderItemStatus
.
notify_fail
);
}
liteOrderItemManager
.
save
(
item
);
}
}
liteOrderCache
.
addOrderToMap
(
order
);
}
}
return
ResultBean
.
newOkResult
(
""
);
}
@ApiOperation
(
"放弃出库"
)
@RequestMapping
(
"/abort"
)
@AnonymousAccess
public
ResultBean
abort
(
String
orderItemId
)
{
LiteOrderItem
orderItem
=
liteOrderItemManager
.
get
(
orderItemId
);
if
(
orderItem
!=
null
)
{
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
);
}
return
ResultBean
.
newOkResult
(
""
);
}
public
synchronized
void
checkOut
(
LiteOrder
order
,
String
operationId
,
List
<
Material
>
materialList
)
{
order
.
setStatus
(
LITEORDER_STATUS
.
TAILS
);
order
.
setTaskReelCount
(
0
);
order
.
setFinishedReelCount
(
0
);
int
taskReelCount
=
0
;
//提取barcode
List
<
String
>
barcodeList
=
materialList
.
stream
().
map
(
item
->
item
.
getSerialNum
()).
collect
(
Collectors
.
toList
());
List
<
StoragePos
>
storagePosList
=
storagePosManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"barcode.barcode"
).
in
(
barcodeList
)));
if
(
storagePosList
!=
null
&&
!
storagePosList
.
isEmpty
())
{
materialList
=
storagePosList
.
stream
().
map
(
item
->
{
Material
material
=
new
Material
();
material
.
setSerialNum
(
item
.
getBarcode
().
getBarcode
());
material
.
setPartNumber
(
item
.
getBarcode
().
getPartNumber
());
return
material
;
}).
collect
(
Collectors
.
toList
());
List
<
TrackStatus
>
trackStatusList
=
MicronApi
.
Api010
(
operationId
,
materialList
);
if
(
trackStatusList
!=
null
&&
!
trackStatusList
.
isEmpty
())
{
for
(
LiteOrderItem
orderItem
:
order
.
getOrderItems
())
{
String
ri
=
orderItem
.
getRi
();
TrackStatus
trackStatus
=
trackStatusList
.
stream
().
filter
(
item
->
ri
.
equals
(
item
.
getSerialNum
())).
findAny
().
orElse
(
null
);
if
(
trackStatus
!=
null
)
{
StoragePos
pos
=
storagePosManager
.
getByBarcode
(
ri
);
/*if (pos == null) {
orderItem.setStatus(OrderItemStatus.shortage);
continue;
}*/
//生成任务
DataLog
dataLog
=
new
DataLog
(
dataCache
.
getStorageById
(
pos
.
getStorageId
()),
pos
.
getBarcode
(),
pos
);
dataLog
.
setType
(
OP
.
CHECKOUT
);
dataLog
.
setSourceId
(
order
.
getId
());
dataLog
.
setSourceName
(
order
.
getOrderNo
());
dataLog
.
setSubSourceId
(
orderItem
.
getId
());
dataLog
.
setStatus
(
OP_STATUS
.
WAIT
.
name
());
dataLog
.
setOperationId
(
operationId
);
taskService
.
addTaskToExecute
(
dataLog
);
taskReelCount
++;
//设置状态.正在出库
orderItem
.
setStatus
(
OrderItemStatus
.
executing
);
}
liteOrderItemManager
.
save
(
orderItem
);
}
}
}
order
.
setTaskReelCount
(
taskReelCount
);
order
.
setTotalTaskReelCount
(
order
.
getTotalTaskReelCount
()
+
taskReelCount
);
if
(
taskReelCount
<=
0
)
{
if
(
order
.
isOutTails
()){
order
.
setStatus
(
LITEORDER_STATUS
.
TAILS_FINISHED
);
}
//liteOrderCache.finishedOrderTasks(order);
}
liteOrderManager
.
save
(
order
);
liteOrderCache
.
addOrderToMap
(
order
);
}
public
List
<
LiteOrderItem
>
getLiteOrderItemList
(
String
mode
)
{
List
<
LiteOrderItem
>
itemList
=
new
ArrayList
<>();
Collection
<
LiteOrder
>
liteOrder
=
liteOrderCache
.
getAllLiteOrder
();
for
(
LiteOrder
order
:
liteOrder
)
{
if
(
mode
.
equals
(
order
.
getMode
())
&&
!
order
.
isClosed
())
{
itemList
=
order
.
getOrderItems
();
break
;
}
}
return
itemList
;
}
}
src/main/java/com/neotel/smfcore/custom/micron1053/task/bean/PreTask.java
0 → 100644
查看文件 @
7efbc37
package
com
.
neotel
.
smfcore
.
custom
.
micron1053
.
task
.
bean
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
PreTask
{
private
String
mode
;
private
String
operationId
;
private
List
<
String
>
pretasks
;
}
src/main/java/com/neotel/smfcore/custom/micron1053/task/bean/dto/TaskDto.java
0 → 100644
查看文件 @
7efbc37
package
com
.
neotel
.
smfcore
.
custom
.
micron1053
.
task
.
bean
.
dto
;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
import
com.neotel.smfcore.custom.micron1053.api.bean.DispatchId
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
TaskDto
{
private
int
type
;
private
String
operationId
;
private
List
<
LiteOrderItem
>
itemList
;
private
List
<
DispatchId
>
dispatchIdList
;
}
src/main/java/com/neotel/smfcore/custom/micron1053/task/enums/OrderItemStatus.java
0 → 100644
查看文件 @
7efbc37
package
com
.
neotel
.
smfcore
.
custom
.
micron1053
.
task
.
enums
;
public
class
OrderItemStatus
{
//缺料
public
static
final
String
shortage
=
"1"
;
//正在执行
public
static
final
String
executing
=
"2"
;
//通知成功
public
static
final
String
notify_success
=
"3"
;
//通知失败
public
static
final
String
notify_fail
=
"4"
;
public
static
final
String
finish
=
"5"
;
public
static
final
String
cancel
=
"6"
;
}
src/main/resources/config/application-prod.yml
查看文件 @
7efbc37
...
@@ -2,14 +2,14 @@ micron:
...
@@ -2,14 +2,14 @@ micron:
apiAddr
:
https://testapigtwy.micron.com/t/app.mfg/mmsil/v1/DEVL/SINGAPORE/
apiAddr
:
https://testapigtwy.micron.com/t/app.mfg/mmsil/v1/DEVL/SINGAPORE/
api_name_001
:
material/validation/label
api_name_001
:
material/validation/label
api_name_002
:
material/transfer-in
api_name_002
:
material/transfer-in
api_name_004
:
operation/dispatchIds?operationId={
operationId
}
api_name_004
:
operation/dispatchIds?operationId={
0
}
api_name_005
:
material/lineprep/{LinePrepOrderId}
api_name_005
:
material/lineprep/{LinePrepOrderId}
api_name_006
:
material/pretasks
api_name_006
:
material/pretasks
api_name_007
:
material/transfer-out
api_name_007
:
material/transfer-out
api_name_008
:
material/xray/{serialNum}/{qty}
api_name_008
:
material/xray/{serialNum}/{qty}
api_name_009
:
material/status
api_name_009
:
material/status
api_name_010
:
material/track-out
api_name_010
:
material/track-out
api_name_011
:
operation?mode={
Mode}&username={Username}&source={Source
}
api_name_011
:
operation?mode={
0}&username={1}&source={2
}
api_name_101
:
operation/validation/mbr?id={Id}&operationId={operationId}&skipSap={SkipSap}
api_name_101
:
operation/validation/mbr?id={Id}&operationId={operationId}&skipSap={SkipSap}
api_name_102
:
operation/validation/req?id={Id}&operationId={operationId}
api_name_102
:
operation/validation/req?id={Id}&operationId={operationId}
api_name_103
:
operation/validation/gr?purchaseOrder={PurchaseOrder}&packagingSlip={PackagingSlip}&operationId={operationId}&skipSap={SkipSap}
api_name_103
:
operation/validation/gr?purchaseOrder={PurchaseOrder}&packagingSlip={PackagingSlip}&operationId={operationId}&skipSap={SkipSap}
...
@@ -27,7 +27,7 @@ spring:
...
@@ -27,7 +27,7 @@ spring:
auto-index-creation
:
true
# 默认为false,即不会自动创建索引
auto-index-creation
:
true
# 默认为false,即不会自动创建索引
host
:
localhost
# 主机地址
host
:
localhost
# 主机地址
port
:
27017
# 端口
port
:
27017
# 端口
database
:
sm
f
# 数据库
database
:
5
f
# 数据库
#备份数据库配置
#备份数据库配置
backup-mongodb
:
backup-mongodb
:
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论