Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 5f460c1c
由
LN
编写于
2025-01-15 17:10:54 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
新功能:MBR,REQ,GR,MCL
1 个父辈
00042f65
显示空白字符变更
内嵌
并排
正在显示
10 个修改的文件
包含
209 行增加
和
125 行删除
src/main/java/com/neotel/smfcore/core/device/handler/impl/RobotBoxHandler.java
src/main/java/com/neotel/smfcore/core/inList/service/po/InList.java
src/main/java/com/neotel/smfcore/custom/micron1053/api/MicronApi.java
src/main/java/com/neotel/smfcore/custom/micron1053/loading/LoadingController.java
src/main/java/com/neotel/smfcore/custom/micron1053/loading/util/LoadingUtil.java
src/main/resources/messages.properties
src/main/resources/messages_en_US.properties
src/main/resources/messages_ja_JP.properties
src/main/resources/messages_zh_CN.properties
src/main/resources/messages_zh_TW.properties
src/main/java/com/neotel/smfcore/core/device/handler/impl/RobotBoxHandler.java
查看文件 @
5f460c1
...
@@ -828,7 +828,11 @@ public class RobotBoxHandler extends BaseDeviceHandler {
...
@@ -828,7 +828,11 @@ public class RobotBoxHandler extends BaseDeviceHandler {
if
(!
inList
.
isValidRfid
(
rfid
))
{
if
(!
inList
.
isValidRfid
(
rfid
))
{
return
barcode
;
return
barcode
;
}
}
//如果入库单已手动结束,不再接收新任务
if
(
inList
.
isManualFinish
()){
log
.
info
(
"当前入库单["
+
inList
.
getName
()
+
"]已手动结束,不需要再验证:"
+
barcode
.
getBarcode
());
return
barcode
;
}
operationId
=
inList
.
getOperationId
();
operationId
=
inList
.
getOperationId
();
if
(
ObjectUtil
.
isEmpty
(
operationId
))
{
if
(
ObjectUtil
.
isEmpty
(
operationId
))
{
...
...
src/main/java/com/neotel/smfcore/core/inList/service/po/InList.java
查看文件 @
5f460c1
...
@@ -71,6 +71,11 @@ public class InList extends BasePo implements Serializable {
...
@@ -71,6 +71,11 @@ public class InList extends BasePo implements Serializable {
private
String
operationId
=
""
;
private
String
operationId
=
""
;
/**
/**
* 已手动确认结束
*/
private
boolean
manualFinish
=
false
;
/**
* ReqId
* ReqId
*/
*/
private
String
reqId
=
""
;
private
String
reqId
=
""
;
...
...
src/main/java/com/neotel/smfcore/custom/micron1053/api/MicronApi.java
查看文件 @
5f460c1
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.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ApiException
;
import
com.neotel.smfcore.common.exception.ApiException
;
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.DateUtil
;
import
com.neotel.smfcore.common.utils.DateUtil
;
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.barcode.service.manager.IBarcodeManager
;
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
;
...
@@ -220,41 +219,26 @@ public class MicronApi {
...
@@ -220,41 +219,26 @@ public class MicronApi {
}
}
private
static
String
getDErrorMsg
(
MicronResult
result
)
throws
ApiException
{
private
static
String
getDErrorMsg
(
MicronResult
result
)
throws
ApiException
{
return
result
.
getDErrorMsg
();
// String errMsg = "";
// 551 - Invalid MBR
// Object errCode = -1;
// 550 - SAP Down
// String detail = "";
// 552 - Invalid REQ
// try {
// 553 - Invalid GR
//
// 550 - SAP Down
// // "error": <ErrCode>,
//// "message": <ErrMessage>,
String
msg
=
result
.
getDErrorMsg
();
//// "detail": <ErrDetail>
if
(
ObjectUtil
.
isEmpty
(
msg
)&&
result
!=
null
){
//
if
(
result
.
getHttpCode
()==
551
){
// errMsg = result.getResult("message", false);
return
"Invalid MBR"
;
// if (ObjectUtil.isEmpty(errMsg)) {
}
else
if
(
result
.
getHttpCode
()==
551
){
// errMsg = "";
return
"SAP Down"
;
// } else {
}
else
if
(
result
.
getHttpCode
()==
552
){
// errMsg = "message:" + errMsg;
return
"Invalid REQ"
;
// }
}
else
if
(
result
.
getHttpCode
()==
553
){
// errCode = result.getResult("error", false);
return
"Invalid GR"
;
//
}
// if (ObjectUtil.isEmpty(errCode)) {
}
// errCode = "";
return
msg
;
// } else {
// errCode = "error:" + errCode;
// }
// detail = result.getResult("detail", false);
// if (ObjectUtil.isEmpty(detail)) {
// detail = "";
// } else {
// detail = "detail:" + detail;
// }
//
// return errCode + ";" + errMsg + ";" + detail;
// } catch (Exception exception) {
// log.error("出错:" + exception);
// return errCode + ";" + errMsg + ";" + detail + ":" + exception.toString();
// }
}
}
public
static
Map
<
String
,
String
>
API002
(
String
rfid
,
String
operationId
,
List
<
StoragePos
>
storagePos
)
{
public
static
Map
<
String
,
String
>
API002
(
String
rfid
,
String
operationId
,
List
<
StoragePos
>
storagePos
)
{
...
@@ -1046,49 +1030,74 @@ public class MicronApi {
...
@@ -1046,49 +1030,74 @@ public class MicronApi {
return
false
;
return
false
;
}
}
public
static
boolean
Api101
(
String
id
,
String
operationId
,
String
skipSap
)
{
private
static
ResultBean
Api100
(
String
apiName
,
String
url
)
{
String
url
=
config
.
getUrl
(
config
.
api_name_101
);
url
=
MessageFormat
.
format
(
url
,
id
,
operationId
,
skipSap
);
if
(
Debug
)
{
log
.
info
(
"调试状态直接返回true, 调用MES接口 "
+
apiName
+
": url="
+
url
+
" "
);
return
ResultBean
.
newOkResult
(
true
);
}
try
{
try
{
log
.
info
(
"调用MES接口
API101
: url="
+
url
+
" "
);
log
.
info
(
"调用MES接口
"
+
apiName
+
"
: url="
+
url
+
" "
);
MicronResult
result
=
HttpHelper
.
getMicronJson
(
url
);
MicronResult
result
=
HttpHelper
.
getMicronJson
(
url
);
return
true
;
String
errMsg
=
getDErrorMsg
(
result
);
if
(
result
.
isOk
())
{
return
ResultBean
.
newOkResult
(
true
);
}
else
if
(
ObjectUtil
.
isNotEmpty
(
errMsg
))
{
log
.
error
(
apiName
+
" ,接口通信失败:"
+
errMsg
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
apiName
+
" : "
+
errMsg
});
}
else
{
log
.
error
(
apiName
+
" ,接口通信失败:"
+
result
.
getResponseData
());
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
apiName
+
" : "
+
result
.
getResponseData
()});
}
}
catch
(
ApiException
e
)
{
}
catch
(
ApiException
e
)
{
log
.
error
(
url
+
"出错"
,
e
);
log
.
error
(
url
+
"出错"
,
e
);
return
ResultBean
.
newErrorResult
(-
1
,
e
.
getMsgKey
(),
e
.
getDefaultMsg
(),
e
.
getMsgParam
());
}
}
return
false
;
}
}
public
static
ResultBean
Api101
(
String
id
,
String
operationId
,
String
skipSap
)
{
public
static
boolean
Api102
(
String
id
,
String
operationId
)
{
String
url
=
config
.
getUrl
(
config
.
api_name_101
);
String
url
=
config
.
getUrl
(
config
.
api_name_102
);
url
=
MessageFormat
.
format
(
url
,
id
,
operationId
,
skipSap
);
url
=
MessageFormat
.
format
(
url
,
id
,
operationId
);
return
Api100
(
"API101"
,
url
);
// if (Debug) {
// log.info("调试状态直接返回true, 调用MES接口 API101: url=" + url + " ");
// return ResultBean.newOkResult(true);
// }
// try {
// log.info("调用MES接口 API101: url=" + url + " ");
// MicronResult result = HttpHelper.getMicronJson(url);
// String errMsg = getDErrorMsg(result);
// if (result.isOk()) {
// return ResultBean.newOkResult(true);
// } else if (ObjectUtil.isNotEmpty(errMsg)) {
// log.error("API101 ,接口通信失败:" + errMsg);
// return ResultBean.newErrorResult(-1, "smfcore.api.fail", "{0} Failed to get data", new String[]{"Api011 : " + errMsg});
//
// } else {
// log.error("API101 ,接口通信失败:" + result.getResponseData());
// return ResultBean.newErrorResult(-1, "smfcore.api.fail", "{0} Failed to get data", new String[]{"Api011 : " + result.getResponseData()});
// }
//
// } catch (ApiException e) {
// log.error(url + "出错", e);
// return ResultBean.newErrorResult(-1, e.getMsgKey(), e.getDefaultMsg(),e.getMsgParam());
// }
try
{
log
.
info
(
"调用MES接口 API102: url="
+
url
+
" "
);
MicronResult
result
=
HttpHelper
.
getMicronJson
(
url
);
return
true
;
}
catch
(
ApiException
e
)
{
log
.
error
(
url
+
"出错"
,
e
);
}
}
return
false
;
public
static
ResultBean
Api102
(
String
id
,
String
operationId
)
{
String
url
=
config
.
getUrl
(
config
.
api_name_102
);
url
=
MessageFormat
.
format
(
url
,
id
,
operationId
);
return
Api100
(
"API102"
,
url
);
}
}
public
static
boolean
Api103
(
String
purchaseOrder
,
String
packagingSlip
,
String
operationId
,
String
skipSap
)
{
public
static
ResultBean
Api103
(
String
packagingSlip
,
String
purchaseOrder
,
String
operationId
,
String
skipSap
)
{
String
url
=
config
.
getUrl
(
config
.
api_name_103
);
String
url
=
config
.
getUrl
(
config
.
api_name_103
);
url
=
MessageFormat
.
format
(
url
,
purchaseOrder
,
packagingSlip
,
operationId
,
skipSap
);
url
=
MessageFormat
.
format
(
url
,
purchaseOrder
,
packagingSlip
,
operationId
,
skipSap
);
return
Api100
(
"API102"
,
url
);
try
{
log
.
info
(
"调用MES接口 API103: url="
+
url
+
" "
);
MicronResult
result
=
HttpHelper
.
getMicronJson
(
url
);
return
true
;
}
catch
(
ApiException
e
)
{
log
.
error
(
url
+
"出错"
,
e
);
}
return
false
;
}
}
public
static
String
Api201
(
String
linePrepOrderId
,
String
operationId
)
{
public
static
String
Api201
(
String
linePrepOrderId
,
String
operationId
)
{
...
...
src/main/java/com/neotel/smfcore/custom/micron1053/loading/LoadingController.java
查看文件 @
5f460c1
...
@@ -94,6 +94,10 @@ public class LoadingController {
...
@@ -94,6 +94,10 @@ public class LoadingController {
InList
inList
=
loadingUtil
.
getInlist
();
InList
inList
=
loadingUtil
.
getInlist
();
if
(
inList
==
null
){
if
(
inList
==
null
){
LoadingInfo
loadingInfo
=
dataCache
.
getCache
(
Constants
.
CACHE_LOADING
);
if
(
loadingInfo
==
null
&&
ObjectUtil
.
isNotEmpty
(
loadingInfo
.
getOperationId
())&&(!
loadingInfo
.
getMode
().
equals
(
mode
)))
{
return
ResultBean
.
newErrorResult
(
9
,
"smfcore.micron.modeError"
,
loadingInfo
.
getMode
()
+
" Loading 未完成"
,
new
String
[]{
loadingInfo
.
getMode
()});
}
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.nodata"
,
"未找到信息"
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.nodata"
,
"未找到信息"
);
}
else
{
}
else
{
...
@@ -101,7 +105,7 @@ public class LoadingController {
...
@@ -101,7 +105,7 @@ public class LoadingController {
if
(
inList
.
getMode
().
equals
(
mode
))
{
if
(
inList
.
getMode
().
equals
(
mode
))
{
return
ResultBean
.
newOkResult
(
getList
(
inList
));
return
ResultBean
.
newOkResult
(
getList
(
inList
));
}
else
{
}
else
{
return
ResultBean
.
newErrorResult
(
9
,
"smfcore.micron.
otherModeNotEnd"
,
inList
.
getMode
()+
" Loading Not End"
);
return
ResultBean
.
newErrorResult
(
9
,
"smfcore.micron.
modeError"
,
inList
.
getMode
()
+
" Loading 未完成"
,
new
String
[]{
inList
.
getMode
()}
);
}
}
}
}
}
}
...
@@ -166,7 +170,7 @@ public class LoadingController {
...
@@ -166,7 +170,7 @@ public class LoadingController {
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.nodata"
,
"未找到信息"
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.nodata"
,
"未找到信息"
);
}
}
if
(!
inList
.
getMode
().
equals
(
mode
))
{
if
(!
inList
.
getMode
().
equals
(
mode
))
{
return
ResultBean
.
newErrorResult
(
9
,
"smfcore.micron.otherModeNotEnd"
,
inList
.
getMode
()+
" Loading Not End"
);
return
ResultBean
.
newErrorResult
(
-
1
,
"smfcore.micron.modeError"
,
inList
.
getMode
()
+
" Loading 未完成"
,
new
String
[]{
inList
.
getMode
()}
);
}
}
for
(
InListItem
item
:
for
(
InListItem
item
:
inList
.
getInListItems
())
{
inList
.
getInListItems
())
{
...
@@ -217,12 +221,16 @@ public class LoadingController {
...
@@ -217,12 +221,16 @@ public class LoadingController {
@ApiOperation
(
"loading->入库按钮 输入参数后获取数据"
)
@ApiOperation
(
"loading->入库按钮 输入参数后获取数据"
)
@PostMapping
(
"/su
bm
it"
)
@PostMapping
(
"/su
mb
it"
)
@AnonymousAccess
@AnonymousAccess
public
ResultBean
su
bm
it
(
@RequestBody
Map
<
String
,
Object
>
params
)
{
public
ResultBean
su
mb
it
(
@RequestBody
Map
<
String
,
Object
>
params
)
{
String
mode
=
getParam
(
params
,
"mode"
,
APIMODE
.
MATRET
);
String
mode
=
getParam
(
params
,
"mode"
,
APIMODE
.
MATRET
);
LoadingInfo
loadingInfo
=
dataCache
.
getCache
(
Constants
.
CACHE_LOADING
);
if
(
loadingInfo
==
null
&&
ObjectUtil
.
isNotEmpty
(
loadingInfo
.
getOperationId
())
&&
(!
loadingInfo
.
getMode
().
equals
(
mode
)))
{
return
ResultBean
.
newErrorResult
(
9
,
"smfcore.micron.modeError"
,
loadingInfo
.
getMode
()
+
" Loading 未完成"
,
new
String
[]{
loadingInfo
.
getMode
()});
}
int
shelfNum
=
Integer
.
MAX_VALUE
;
int
shelfNum
=
Integer
.
MAX_VALUE
;
String
mbrId
=
""
;
String
mbrId
=
""
;
String
reqId
=
""
;
String
reqId
=
""
;
...
@@ -258,6 +266,8 @@ public class LoadingController {
...
@@ -258,6 +266,8 @@ public class LoadingController {
}
}
}
else
if
(
mode
.
equals
(
APIMODE
.
MCL
))
{
}
else
if
(
mode
.
equals
(
APIMODE
.
MCL
))
{
}
else
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
}
...
@@ -266,8 +276,8 @@ public class LoadingController {
...
@@ -266,8 +276,8 @@ public class LoadingController {
InList
inList
=
loadingUtil
.
getInlist
();
InList
inList
=
loadingUtil
.
getInlist
();
if
(
inList
==
null
)
{
if
(
inList
==
null
)
{
//判断是否已有operationID
//判断是否已有operationID
LoadingInfo
loadingInfo
=
dataCache
.
getCache
(
Constants
.
CACHE_LOADING
);
if
(
loadingInfo
==
null
||
ObjectUtil
.
isEmpty
(
loadingInfo
.
getOperationId
()))
{
if
(
loadingInfo
==
null
||
ObjectUtil
.
isEmpty
(
loadingInfo
.
getOperationId
()))
{
// 接口获取
// 接口获取
String
operId
=
MicronApi
.
Api011
(
mode
,
SecurityUtils
.
getCurrentUsername
(),
""
);
String
operId
=
MicronApi
.
Api011
(
mode
,
SecurityUtils
.
getCurrentUsername
(),
""
);
if
(
ObjectUtil
.
isEmpty
(
operId
))
{
if
(
ObjectUtil
.
isEmpty
(
operId
))
{
...
@@ -279,34 +289,28 @@ public class LoadingController {
...
@@ -279,34 +289,28 @@ public class LoadingController {
loadingInfo
.
inlistName
=
mode
+
"-"
+
operId
+
"-"
+
DateUtil
.
toDateString
(
loadingInfo
.
startTime
);
loadingInfo
.
inlistName
=
mode
+
"-"
+
operId
+
"-"
+
DateUtil
.
toDateString
(
loadingInfo
.
startTime
);
dataCache
.
updateCache
(
Constants
.
CACHE_LOADING
,
loadingInfo
);
dataCache
.
updateCache
(
Constants
.
CACHE_LOADING
,
loadingInfo
);
log
.
info
(
"submit: mode="
+
mode
+
",获取到 OperationId="
+
operId
);
log
.
info
(
"submit: mode="
+
mode
+
",获取到 OperationId="
+
operId
);
}
else
{
log
.
info
(
"submit: mode="
+
mode
+
",已有 OperationId="
+
loadingInfo
.
getOperationId
());
}
}
else
{
log
.
info
(
"submit: mode="
+
mode
+
",已有 OperationId="
+
loadingInfo
.
getOperationId
());
}
String
operId
=
loadingInfo
.
getOperationId
();
String
operId
=
loadingInfo
.
getOperationId
();
ResultBean
resultBean
=
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
if
(
APIMODE
.
MBR
.
equals
(
mode
)){
if
(
APIMODE
.
MBR
.
equals
(
mode
))
{
boolean
result
=
MicronApi
.
Api101
(
mbrId
,
operId
,
""
);
resultBean
=
MicronApi
.
Api101
(
mbrId
,
operId
,
""
);
if
(!
result
)
{
}
else
if
(
APIMODE
.
REQ
.
equals
(
mode
))
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.api.fail"
,
"Api101获取数据失败"
,
new
String
[]{
"Api101"
});
resultBean
=
MicronApi
.
Api102
(
reqId
,
operId
);
}
}
else
if
(
APIMODE
.
GR
.
equals
(
mode
))
{
}
else
if
(
APIMODE
.
REQ
.
equals
(
mode
)){
resultBean
=
MicronApi
.
Api103
(
deliveryNote
,
purchaseOrder
,
operId
,
""
);
boolean
result
=
MicronApi
.
Api102
(
reqId
,
operId
);
}
else
if
(
APIMODE
.
MCL
.
equals
(
mode
)){
if
(!
result
)
{
resultBean
=
ResultBean
.
newOkResult
(
true
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.api.fail"
,
"Api101获取数据失败"
,
new
String
[]{
"Api101"
});
}
}
else
if
(
APIMODE
.
GR
.
equals
(
mode
))
{
boolean
result
=
MicronApi
.
Api103
(
deliveryNote
,
purchaseOrder
,
operId
,
""
);
if
(!
result
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.api.fail"
,
"Api103获取数据失败"
,
new
String
[]{
"Api103"
});
}
}
}
if
(!
resultBean
.
isOkResult
())
{
return
resultBean
;
}
inList
=
new
InList
(
loadingInfo
.
inlistName
,
INLIST_STATUS
.
WAIT
,
new
ArrayList
<>(),
System
.
currentTimeMillis
(),
false
);
inList
=
new
InList
(
loadingInfo
.
inlistName
,
INLIST_STATUS
.
WAIT
,
new
ArrayList
<>(),
System
.
currentTimeMillis
(),
false
);
inList
.
SetParam
(
loadingInfo
.
mode
,
shelfNum
,
reqId
,
mbrId
,
deliveryNote
,
purchaseOrder
,
loadingInfo
.
getOperationId
());
inList
.
SetParam
(
loadingInfo
.
mode
,
shelfNum
,
reqId
,
mbrId
,
deliveryNote
,
purchaseOrder
,
loadingInfo
.
getOperationId
());
inList
=
inListManager
.
createWithItems
(
inList
);
inList
=
inListManager
.
createWithItems
(
inList
);
inListCache
.
addInListToMap
(
inList
);
inListCache
.
addInListToMap
(
inList
);
...
@@ -322,7 +326,7 @@ public class LoadingController {
...
@@ -322,7 +326,7 @@ public class LoadingController {
@PostMapping
(
"/returnMaterial"
)
@PostMapping
(
"/returnMaterial"
)
@AnonymousAccess
@AnonymousAccess
public
ResultBean
returnMaterial
(
@RequestBody
Map
<
String
,
Object
>
params
)
{
public
ResultBean
returnMaterial
(
@RequestBody
Map
<
String
,
Object
>
params
)
{
return
su
bm
it
(
params
);
return
su
mb
it
(
params
);
// List<String> rfids = (List<String>) params;
// List<String> rfids = (List<String>) params;
// String numStr = params.get("num").toString();
// String numStr = params.get("num").toString();
//
//
...
@@ -388,7 +392,7 @@ public class LoadingController {
...
@@ -388,7 +392,7 @@ public class LoadingController {
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
else
{
}
else
{
if
(!
inList
.
getMode
().
equals
(
mode
))
{
if
(!
inList
.
getMode
().
equals
(
mode
))
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.modeError"
,
"参数错误,"
+
mode
+
" Loading 还未完成"
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.modeError"
,
inList
.
getMode
()
+
" Loading 未完成"
,
new
String
[]{
inList
.
getMode
()}
);
}
}
//重试,重发指令
//重试,重发指令
...
@@ -411,7 +415,7 @@ public class LoadingController {
...
@@ -411,7 +415,7 @@ public class LoadingController {
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
else
{
}
else
{
if
(!
inList
.
getMode
().
equals
(
mode
))
{
if
(!
inList
.
getMode
().
equals
(
mode
))
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.modeError"
,
"参数错误,"
+
mode
+
" Loading 还未完成"
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.modeError"
,
inList
.
getMode
()
+
" Loading 未完成"
,
new
String
[]{
inList
.
getMode
()}
);
}
}
//结束入库
//结束入库
for
(
InListItem
item
:
inList
.
getInListItems
())
{
for
(
InListItem
item
:
inList
.
getInListItems
())
{
...
@@ -449,30 +453,47 @@ public class LoadingController {
...
@@ -449,30 +453,47 @@ public class LoadingController {
@ApiOperation
(
"Finish"
)
@ApiOperation
(
"Finish"
)
@RequestMapping
(
"/finish"
)
@RequestMapping
(
"/finish"
)
@AnonymousAccess
@AnonymousAccess
public
ResultBean
finish
(
@Request
Body
(
required
=
false
)
Map
<
String
,
Object
>
params
)
{
public
ResultBean
finish
(
@Request
Param
(
required
=
false
)
Map
<
String
,
Object
>
params
)
{
String
mode
=
getParam
(
params
,
"mode"
,
APIMODE
.
MATRET
);
String
mode
=
getParam
(
params
,
"mode"
,
APIMODE
.
MATRET
);
// String mode=APIMODE.MATRET;
// String mode=APIMODE.MATRET;
InList
inList
=
loadingUtil
.
getInlist
();
InList
inList
=
loadingUtil
.
getInlist
();
if
(
inList
==
null
)
{
if
(
inList
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
else
{
}
else
{
if
(!
inList
.
getMode
().
equals
(
mode
))
{
if
(!
inList
.
getMode
().
equals
(
mode
))
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.modeError"
,
"参数错误,"
+
mode
+
" Loading 还未完成"
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.modeError"
,
inList
.
getMode
()
+
" Loading 未完成"
,
new
String
[]{
inList
.
getMode
()}
);
}
}
if
(
inList
.
getStatus
()
==
INLIST_STATUS
.
OK
){
log
.
info
(
" 入库单["
+
inList
.
getName
()
+
"]:任务已全部完成,清空当前loadinginfo,更改action=COMPLETE"
);
MicronApi
.
ActionUpdate
(
inList
.
getOperationId
(),
MicronApi
.
COMPLETED
);
//判断是否有执行中的入库任务
dataCache
.
updateCache
(
Constants
.
CACHE_LOADING
,
new
LoadingInfo
());
for
(
InListItem
item
:
inList
.
getInListItems
())
{
return
ResultBean
.
newOkResult
(
""
);
if
(
item
.
getState
()
==
INITEM_STATUS
.
PutIn
)
{
List
<
DataLog
>
allTask
=
taskService
.
getAllTasks
();
for
(
DataLog
task
:
allTask
)
{
if
(
task
.
isEnd
()
||
task
.
isFinished
()
||
task
.
isCancel
())
{
continue
;
}
}
if
(
inList
.
getMode
().
equals
(
APIMODE
.
MATRET
)){
if
(
OP
.
PUT_IN
==
task
.
getType
()
&&
task
.
getPosName
().
equals
(
item
.
getPosName
()))
{
log
.
info
(
"入库单 "
+
inList
.
getName
()
+
", 物料"
+
item
.
getPosName
()
+
"还在入库中,无法End"
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.inlisttaskNotEnd"
,
"操作失败:入库任务{0}未完成"
,
new
String
[]{
task
.
getPosName
()});
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.inlist.noEnd"
,
"入库单[{0}]未完成"
,
new
String
[]{
inList
.
getName
()});
}
}
else
{
}
}
}
if
(!
inList
.
getMode
().
equals
(
APIMODE
.
MATRET
))
{
//除matret,其他的都是手动结束
//除matret,其他的都是手动结束
inList
=
loadingUtil
.
finish
(
inList
);
}
if
(
inList
.
getStatus
()
==
INLIST_STATUS
.
OK
)
{
log
.
info
(
" 入库单["
+
inList
.
getName
()
+
"]:任务已全部完成,清空当前loadinginfo,更改action=COMPLETE"
);
MicronApi
.
ActionUpdate
(
inList
.
getOperationId
(),
MicronApi
.
COMPLETED
);
dataCache
.
updateCache
(
Constants
.
CACHE_LOADING
,
new
LoadingInfo
());
return
ResultBean
.
newOkResult
(
""
);
return
ResultBean
.
newOkResult
(
""
);
}
else
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.inlist.noEnd"
,
"入库单[{0}]未完成"
,
new
String
[]{
inList
.
getName
()});
}
}
}
}
}
}
}
}
src/main/java/com/neotel/smfcore/custom/micron1053/loading/util/LoadingUtil.java
查看文件 @
5f460c1
...
@@ -128,6 +128,11 @@ public class LoadingUtil {
...
@@ -128,6 +128,11 @@ public class LoadingUtil {
if
(
inList
==
null
)
{
if
(
inList
==
null
)
{
return
;
return
;
}
}
//如果入库单已手动结束,不再接收新任务
if
(
inList
.
isManualFinish
()){
log
.
info
(
"AddInListItem 当前入库["
+
inList
.
getName
()
+
"]已手动结束,不添加新物料:"
+
barcode
.
getBarcode
());
return
;
}
inList
.
addRfid
(
rfid
);
inList
.
addRfid
(
rfid
);
inList
.
setStatus
(
INLIST_STATUS
.
ABNORMAL
);
inList
.
setStatus
(
INLIST_STATUS
.
ABNORMAL
);
...
@@ -415,7 +420,10 @@ public class LoadingUtil {
...
@@ -415,7 +420,10 @@ public class LoadingUtil {
return
true
;
return
true
;
}
}
private
boolean
PushToMes
(
String
rfid
,
InList
inList
,
List
<
StoragePos
>
posList
)
{
private
boolean
PushToMes
(
String
rfid
,
InList
inList
,
List
<
StoragePos
>
posList
)
{
return
PushToMes
(
rfid
,
inList
,
posList
,
false
);
}
private
boolean
PushToMes
(
String
rfid
,
InList
inList
,
List
<
StoragePos
>
posList
,
boolean
manualFinish
)
{
for
(
InListItem
item
:
inList
.
getInListItems
())
{
for
(
InListItem
item
:
inList
.
getInListItems
())
{
if
(
item
.
getRfid
().
equals
(
rfid
)
&&
item
.
getState
()
==
INITEM_STATUS
.
Cancel
&&
ObjectUtil
.
isNotEmpty
(
item
.
getRi
())&&
ObjectUtil
.
isNotEmpty
(
item
.
getPosName
()))
{
if
(
item
.
getRfid
().
equals
(
rfid
)
&&
item
.
getState
()
==
INITEM_STATUS
.
Cancel
&&
ObjectUtil
.
isNotEmpty
(
item
.
getRi
())&&
ObjectUtil
.
isNotEmpty
(
item
.
getPosName
()))
{
...
@@ -431,7 +439,11 @@ public class LoadingUtil {
...
@@ -431,7 +439,11 @@ public class LoadingUtil {
List
<
InListItem
>
inListItems
=
new
ArrayList
<>();
List
<
InListItem
>
inListItems
=
new
ArrayList
<>();
boolean
isEnd
=
true
;
boolean
isEnd
=
true
;
if
(
inList
.
getRfidList
().
size
()
<
inList
.
getShelfNum
())
{
if
(
manualFinish
){
inList
.
setManualFinish
(
manualFinish
);
}
else
if
(
inList
.
getRfidList
().
size
()
<
inList
.
getShelfNum
())
{
isEnd
=
false
;
isEnd
=
false
;
}
}
for
(
InListItem
item
:
for
(
InListItem
item
:
...
@@ -473,21 +485,14 @@ public class LoadingUtil {
...
@@ -473,21 +485,14 @@ public class LoadingUtil {
}
}
inList
.
setInListItems
(
inListItems
);
inList
.
setInListItems
(
inListItems
);
if
(
isEnd
)
{
if
(
isEnd
)
{
log
.
info
(
"更新 入库单["
+
inList
.
getName
()
+
"] 状态改为 OK"
);
log
.
info
(
"更新 入库单["
+
inList
.
getName
()
+
"]
manualFinish=["
+
manualFinish
+
"]
状态改为 OK"
);
inList
.
setStatus
(
INLIST_STATUS
.
OK
);
inList
.
setStatus
(
INLIST_STATUS
.
OK
);
}
else
{
}
else
{
log
.
info
(
"更新 入库单["
+
inList
.
getName
()
+
"] 状态改为 ABNORMAL"
);
log
.
info
(
"更新 入库单["
+
inList
.
getName
()
+
"]
manualFinish=["
+
manualFinish
+
"]
状态改为 ABNORMAL"
);
inList
.
setStatus
(
INLIST_STATUS
.
ABNORMAL
);
inList
.
setStatus
(
INLIST_STATUS
.
ABNORMAL
);
}
}
inList
=
inListManager
.
save
(
inList
);
inList
=
inListManager
.
save
(
inList
);
inListCache
.
addInListToMap
(
inList
);
inListCache
.
addInListToMap
(
inList
);
//判断是否全部完成
/*if (isEnd) {
log.info(" 入库单[" + inList.getName() + "]:任务已全部完成,清空当前loadinginfo");
dataCache.updateCache(Constants.CACHE_LOADING, new LoadingInfo());
}*/
return
true
;
return
true
;
}
}
public
boolean
Retry
()
{
public
boolean
Retry
()
{
...
@@ -571,4 +576,39 @@ public class LoadingUtil {
...
@@ -571,4 +576,39 @@ public class LoadingUtil {
return
""
;
return
""
;
}
}
public
InList
finish
(
InList
inList
)
{
//如果没有任何入库信息,直接结束
if
(
inList
.
getRfidList
().
size
()<=
0
&&
inList
.
getInListItems
().
size
()<=
0
){
inList
.
setManualFinish
(
true
);
inList
.
setStatus
(
INLIST_STATUS
.
OK
);
inList
=
inListManager
.
save
(
inList
);
inListCache
.
addInListToMap
(
inList
);
log
.
info
(
"finish 入库单["
+
inList
.
getName
()
+
"] 手动结束,当前无任务,设置 manualFinish=true, 状态改为 OK"
);
return
inList
;
}
for
(
String
rfid
:
inList
.
getRfidList
())
{
List
<
StoragePos
>
posList
=
new
ArrayList
<>();
//查找所有失败的重新推送
for
(
InListItem
item
:
inList
.
getInListItems
())
{
if
(
ObjectUtil
.
isEmpty
(
item
.
getPosName
()))
{
continue
;
}
if
(
item
.
getRfid
().
equals
(
rfid
)
&&
item
.
getState
()
==
INITEM_STATUS
.
Fail
)
{
StoragePos
pos
=
storagePosManager
.
getByPosName
(
item
.
getPosName
());
posList
.
add
(
pos
);
}
else
if
(
item
.
getState
()
==
INITEM_STATUS
.
PutEnd
)
{
StoragePos
pos
=
storagePosManager
.
getByPosName
(
item
.
getPosName
());
posList
.
add
(
pos
);
}
}
if
(
posList
.
size
()
>
0
)
{
PushToMes
(
rfid
,
inList
,
posList
);
}
}
return
getInlist
();
}
}
}
src/main/resources/messages.properties
查看文件 @
5f460c1
...
@@ -362,7 +362,8 @@ smfcore.error.barcode.hastask=\u6761\u7801[0]\u5DF2\u6709\u5165\u5E93\u4EFB\u52A
...
@@ -362,7 +362,8 @@ smfcore.error.barcode.hastask=\u6761\u7801[0]\u5DF2\u6709\u5165\u5E93\u4EFB\u52A
smfcore.error.barcode.hasOutTask
=
\u
5E8F
\u5217\u
53F7[0]
\u
5DF2
\u6709\u
51FA
\u
5E93
\u
4EFB
\u
52A1
\u
FF0C
\u
51FA
\u
5E93
\u
524D
\u
4E0D
\u
5F97
\u5165\u
5E93
\u
76F8
\u
540C
\u
5E8F
\u5217\u
53F7
\u7269\u6599
smfcore.error.barcode.hasOutTask
=
\u
5E8F
\u5217\u
53F7[0]
\u
5DF2
\u6709\u
51FA
\u
5E93
\u
4EFB
\u
52A1
\u
FF0C
\u
51FA
\u
5E93
\u
524D
\u
4E0D
\u
5F97
\u5165\u
5E93
\u
76F8
\u
540C
\u
5E8F
\u5217\u
53F7
\u7269\u6599
smfcore.error.noRetryReel=No material found to retry
smfcore.error.noRetryReel=No material found to retry
smfcore.micron.inlistCannotAbort
=
\u
64CD
\u
4F5C
\u5931\u
8D25
\u
FF1A
\u
8FD8
\u6709\u5165\u
5E93
\u
4EFB
\u
52A1
\u
672A
\u
5B8C
\u6210
smfcore.micron.inlistCannotAbort
=
\u
64CD
\u
4F5C
\u5931\u
8D25
\u
FF1A
\u
8FD8
\u6709\u5165\u
5E93
\u
4EFB
\u
52A1
\u
672A
\u
5B8C
\u6210
smfcore.micron.modeError
=
\u
53C2
\u6570\u9519\u
8BEF {0}
\u5165\u
5E93
\u
8FD8
\u
672A
\u
5B8C
\u6210
smfcore.micron.modeError
=
{0}
\u5165\u
5E93
\u
672A
\u
5B8C
\u6210
smfcore.micron.inlisttaskNotEnd
=
\u
64CD
\u
4F5C
\u5931\u
8D25
\u
FF1A
\u5165\u
5E93
\u
4EFB
\u
52A1{0}
\u
672A
\u
5B8C
\u6210
#smfclient.nlp.onlyOneTray=\u4E0D\u53EF\u540C\u65F6\u653E\u5165\u591A\u76D8\u7269\u6599:{0}
#smfclient.nlp.onlyOneTray=\u4E0D\u53EF\u540C\u65F6\u653E\u5165\u591A\u76D8\u7269\u6599:{0}
#smfclient.nlp.cannotFindPos={0}\u672A\u627E\u5230\u5E93\u4F4D:{1}
#smfclient.nlp.cannotFindPos={0}\u672A\u627E\u5230\u5E93\u4F4D:{1}
#smfclient.nlp.inputOk={0}\u5165\u5E93\u5230{1}\u6210\u529F
#smfclient.nlp.inputOk={0}\u5165\u5E93\u5230{1}\u6210\u529F
...
...
src/main/resources/messages_en_US.properties
查看文件 @
5f460c1
...
@@ -361,4 +361,5 @@ smfcore.error.barcode.hastask=Serial No.(S)[0] already have storage task
...
@@ -361,4 +361,5 @@ smfcore.error.barcode.hastask=Serial No.(S)[0] already have storage task
smfcore.error.barcode.hasOutTask
=
Serial No.(S)[0] already have retrieval task, cannot store same Serial No. material before retrieval finish
smfcore.error.barcode.hasOutTask
=
Serial No.(S)[0] already have retrieval task, cannot store same Serial No. material before retrieval finish
smfcore.error.noRetryReel
=
No material found to retry
smfcore.error.noRetryReel
=
No material found to retry
smfcore.micron.inlistCannotAbort
=
Operation failed: there are still inbound tasks to be completed
smfcore.micron.inlistCannotAbort
=
Operation failed: there are still inbound tasks to be completed
smfcore.micron.modeError
=
Parameter error. {0} Incoming not finished.
\ No newline at end of file
\ No newline at end of file
smfcore.micron.modeError
=
{0} Loading not finished.
smfcore.micron.inlisttaskNotEnd
=
Operation Failed: Task {0} Not Completed
\ No newline at end of file
\ No newline at end of file
src/main/resources/messages_ja_JP.properties
查看文件 @
5f460c1
...
@@ -356,4 +356,5 @@ smfcore.error.barcode.hastask=Serial No.(S)[0] already have storage task
...
@@ -356,4 +356,5 @@ smfcore.error.barcode.hastask=Serial No.(S)[0] already have storage task
smfcore.error.barcode.hasOutTask
=
Serial No.(S)[0] already have retrieval task, cannot store same Serial No. material before retrieval finish
smfcore.error.barcode.hasOutTask
=
Serial No.(S)[0] already have retrieval task, cannot store same Serial No. material before retrieval finish
smfcore.error.noRetryReel
=
No material found to retry
smfcore.error.noRetryReel
=
No material found to retry
smfcore.micron.inlistCannotAbort
=
\u
64CD
\u
4F5C
\u
306B
\u5931\u6557\u3057\u
307E
\u3057\u
305F
\u
FF1A
\u
5B8C
\u
4E86
\u3059\u3079\u
304D
\u
53D7
\u
4FE1
\u
30BF
\u
30B9
\u
30AF
\u
304C
\u
6B8B
\u3063\u3066\u3044\u
307E
\u3059
smfcore.micron.inlistCannotAbort
=
\u
64CD
\u
4F5C
\u
306B
\u5931\u6557\u3057\u
307E
\u3057\u
305F
\u
FF1A
\u
5B8C
\u
4E86
\u3059\u3079\u
304D
\u
53D7
\u
4FE1
\u
30BF
\u
30B9
\u
30AF
\u
304C
\u
6B8B
\u3063\u3066\u3044\u
307E
\u3059
smfcore.micron.modeError
=
\u
53C2
\u6570\u9519\u
8BEF {0} Loading
\u
8FD8
\u
672A
\u
5B8C
\u6210
\ No newline at end of file
\ No newline at end of file
smfcore.micron.modeError
=
{0}
\u5165\u
5E93
\u
672A
\u
5B8C
\u6210
smfcore.micron.inlisttaskNotEnd
=
\u
64CD
\u
4F5C
\u5931\u
8D25
\u
FF1A
\u5165\u
5E93
\u
4EFB
\u
52A1{0}
\u
672A
\u
5B8C
\u6210
\ No newline at end of file
\ No newline at end of file
src/main/resources/messages_zh_CN.properties
查看文件 @
5f460c1
...
@@ -356,4 +356,5 @@ smfcore.error.barcode.hastask=Serial No.(S)[0] already have storage task
...
@@ -356,4 +356,5 @@ smfcore.error.barcode.hastask=Serial No.(S)[0] already have storage task
smfcore.error.barcode.hasOutTask
=
\u
5E8F
\u5217\u
53F7[0]
\u
5DF2
\u6709\u
51FA
\u
5E93
\u
4EFB
\u
52A1
\u
FF0C
\u
51FA
\u
5E93
\u
524D
\u
4E0D
\u
5F97
\u5165\u
5E93
\u
76F8
\u
540C
\u
5E8F
\u5217\u
53F7
\u7269\u6599
smfcore.error.barcode.hasOutTask
=
\u
5E8F
\u5217\u
53F7[0]
\u
5DF2
\u6709\u
51FA
\u
5E93
\u
4EFB
\u
52A1
\u
FF0C
\u
51FA
\u
5E93
\u
524D
\u
4E0D
\u
5F97
\u5165\u
5E93
\u
76F8
\u
540C
\u
5E8F
\u5217\u
53F7
\u7269\u6599
smfcore.error.noRetryReel
=
\u
6CA1
\u6709\u
53EF
\u
4EE5
\u
91CD
\u
8BD5
\u7684\u7269\u6599
smfcore.error.noRetryReel
=
\u
6CA1
\u6709\u
53EF
\u
4EE5
\u
91CD
\u
8BD5
\u7684\u7269\u6599
smfcore.micron.inlistCannotAbort
=
\u
64CD
\u
4F5C
\u5931\u
8D25
\u
FF1A
\u
8FD8
\u6709\u5165\u
5E93
\u
4EFB
\u
52A1
\u
672A
\u
5B8C
\u6210
smfcore.micron.inlistCannotAbort
=
\u
64CD
\u
4F5C
\u5931\u
8D25
\u
FF1A
\u
8FD8
\u6709\u5165\u
5E93
\u
4EFB
\u
52A1
\u
672A
\u
5B8C
\u6210
smfcore.micron.modeError
=
\u
53C2
\u6570\u9519\u
8BEF {0}
\u5165\u
5E93
\u
8FD8
\u
672A
\u
5B8C
\u6210
\ No newline at end of file
\ No newline at end of file
smfcore.micron.modeError
=
{0}
\u5165\u
5E93
\u
672A
\u
5B8C
\u6210
smfcore.micron.inlisttaskNotEnd
=
\u
64CD
\u
4F5C
\u5931\u
8D25
\u
FF1A
\u5165\u
5E93
\u
4EFB
\u
52A1{0}
\u
672A
\u
5B8C
\u6210
\ No newline at end of file
\ No newline at end of file
src/main/resources/messages_zh_TW.properties
查看文件 @
5f460c1
...
@@ -357,4 +357,5 @@ smfcore.selfAudit.hasOutTask=\u5E93\u4F4D[{0}]\u5DF2\u6709\u51FA\u5E93\u4EFB\u52
...
@@ -357,4 +357,5 @@ smfcore.selfAudit.hasOutTask=\u5E93\u4F4D[{0}]\u5DF2\u6709\u51FA\u5E93\u4EFB\u52
smfcore.error.barcode.hasOutTask
=
\u
5E8F
\u5217\u
865F[0]
\u
5DF2
\u6709\u
51FA
\u
5EAB
\u
4EFB
\u
52D9
\u
FF0C
\u
51FA
\u
5EAB
\u
524D
\u
4E0D
\u
5F97
\u5165\u
5EAB
\u
76F8
\u
540C
\u
5E8F
\u5217\u
865F
\u7269\u6599
smfcore.error.barcode.hasOutTask
=
\u
5E8F
\u5217\u
865F[0]
\u
5DF2
\u6709\u
51FA
\u
5EAB
\u
4EFB
\u
52D9
\u
FF0C
\u
51FA
\u
5EAB
\u
524D
\u
4E0D
\u
5F97
\u5165\u
5EAB
\u
76F8
\u
540C
\u
5E8F
\u5217\u
865F
\u7269\u6599
smfcore.error.noRetryReel
=
\u
6C92
\u6709\u
53EF
\u
4EE5
\u
91CD
\u
8A66
\u7684\u7269\u6599
smfcore.error.noRetryReel
=
\u
6C92
\u6709\u
53EF
\u
4EE5
\u
91CD
\u
8A66
\u7684\u7269\u6599
smfcore.micron.inlistCannotAbort
=
\u
64CD
\u
4F5C
\u5931\u
8D25
\u
FF1A
\u
8FD8
\u6709\u5165\u
5E93
\u
4EFB
\u
52A1
\u
672A
\u
5B8C
\u6210
smfcore.micron.inlistCannotAbort
=
\u
64CD
\u
4F5C
\u5931\u
8D25
\u
FF1A
\u
8FD8
\u6709\u5165\u
5E93
\u
4EFB
\u
52A1
\u
672A
\u
5B8C
\u6210
smfcore.micron.modeError
=
\u
53C2
\u6570\u9519\u
8BEF {0}
\u5165\u
5E93
\u
8FD8
\u
672A
\u
5B8C
\u6210
\ No newline at end of file
\ No newline at end of file
smfcore.micron.modeError
=
{0}
\u5165\u
5E93
\u
672A
\u
5B8C
\u6210
smfcore.micron.inlisttaskNotEnd
=
\u
64CD
\u
4F5C
\u5931\u
8D25
\u
FF1A
\u5165\u
5E93
\u
4EFB
\u
52A1{0}
\u
672A
\u
5B8C
\u6210
\ No newline at end of file
\ No newline at end of file
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论