Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit b67b4d3c
由
zshaohui
编写于
2025-10-27 16:13:13 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1.尾料柜功能开发
1 个父辈
39024213
显示空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
419 行增加
和
1 行删除
src/main/java/com/neotel/smfcore/core/device/handler/impl/TailingMaterialBoxHandler.java
src/main/java/com/neotel/smfcore/core/storage/enums/DeviceType.java
src/main/resources/messages.properties
src/main/resources/messages_de_DE.properties
src/main/resources/messages_en_US.properties
src/main/resources/messages_fr_FR.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/TailingMaterialBoxHandler.java
0 → 100644
查看文件 @
b67b4d3
package
com
.
neotel
.
smfcore
.
core
.
device
.
handler
.
impl
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.base.Strings
;
import
com.neotel.smfcore.common.bean.ReelLockPosInfo
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.ReelLockPosUtil
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.api.bean.CodeValidateParam
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.barcode.utils.CodeResolve
;
import
com.neotel.smfcore.core.device.bean.NLShelfOperateBean
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
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.inList.util.InListCache
;
import
com.neotel.smfcore.core.language.util.MessageUtils
;
import
com.neotel.smfcore.core.order.enums.ORDER_COLOR
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderManager
;
import
com.neotel.smfcore.core.order.service.po.LiteOrder
;
import
com.neotel.smfcore.core.storage.enums.DeviceType
;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.system.bean.OrderSetting
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.DevicesStatusUtil
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.security.TokenProvider
;
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.security.access.prepost.PreAuthorize
;
import
org.springframework.util.ObjectUtils
;
import
org.springframework.web.bind.annotation.*
;
import
javax.servlet.http.HttpServletRequest
;
import
java.awt.*
;
import
java.util.*
;
import
java.util.List
;
import
java.util.concurrent.ConcurrentHashMap
;
@Api
(
tags
=
"尾料仓"
)
@RestController
@Slf4j
@RequestMapping
(
"/tailingMaterialBox"
)
public
class
TailingMaterialBoxHandler
extends
BaseDeviceHandler
{
private
final
String
putInColor
=
"green"
;
@Autowired
private
CodeResolve
codeResolve
;
@Autowired
private
IStoragePosManager
storagePosManager
;
@Autowired
private
DataCache
dataCache
;
@Autowired
private
TaskService
taskService
;
@ApiOperation
(
"寻找柜体"
)
@RequestMapping
(
"/findPosByCode"
)
@AnonymousAccess
public
ResultBean
findPosByCode
(
@RequestBody
Map
<
String
,
String
>
paramMap
)
{
String
id
=
paramMap
.
get
(
"id"
);
String
code
=
paramMap
.
get
(
"code"
);
log
.
info
(
"入库寻找有料的柜体,条码信息为:"
+
code
);
Barcode
codeBarcode
=
codeResolve
.
resolveOneValideBarcode
(
"=2x2="
+
code
);
List
<
StoragePos
>
storagePosList
=
getStoragePosListByPn
(
codeBarcode
.
getPartNumber
(),
id
);
if
(
storagePosList
==
null
||
storagePosList
.
isEmpty
())
{
Storage
storage
=
dataCache
.
getStorageById
(
id
);
StoragePos
pos
=
storagePosManager
.
getEmptyPosByStorage
(
storage
,
codeBarcode
,
taskService
.
excludePosIds
());
if
(
pos
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.tailingmaterial.noPos"
,
"未找到可用的柜体"
);
}
storagePosList
=
new
ArrayList
<>();
storagePosList
.
add
(
pos
);
}
//开始寻找最晚入库的库位
StoragePos
pos
=
null
;
Barcode
barcode
=
null
;
int
amount
=
0
;
for
(
StoragePos
storagePos
:
storagePosList
)
{
if
(
pos
==
null
)
{
pos
=
storagePos
;
}
Barcode
posBarcode
=
storagePos
.
getBarcode
();
if
(
posBarcode
==
null
)
{
continue
;
}
List
<
Barcode
>
subCodeList
=
posBarcode
.
getSubCodeList
();
if
(
subCodeList
==
null
)
{
subCodeList
=
new
ArrayList
<>();
}
for
(
Barcode
subCode
:
subCodeList
)
{
amount
=
subCode
.
getAmount
()
+
amount
;
if
(
barcode
==
null
)
{
barcode
=
subCode
;
}
if
(
barcode
.
getPutInDate
().
getTime
()
<=
subCode
.
getPutInDate
().
getTime
())
{
barcode
=
subCode
;
pos
=
storagePos
;
}
}
}
log
.
info
(
"找到最晚入库的库位为:"
+
pos
.
getPosName
()
+
"开始亮灯"
);
opPosLight
(
"open"
,
pos
,
putInColor
);
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
resultMap
.
put
(
"posName"
,
pos
.
getPosName
());
resultMap
.
put
(
"partNumber"
,
codeBarcode
.
getPartNumber
());
resultMap
.
put
(
"posReelNum"
,
amount
);
return
ResultBean
.
newOkResult
(
resultMap
);
}
@ApiOperation
(
"寻找空柜体"
)
@RequestMapping
(
"/findEmptyPosByCode"
)
@AnonymousAccess
public
ResultBean
findEmptyPosByCode
(
@RequestBody
Map
<
String
,
String
>
paramMap
)
{
String
id
=
paramMap
.
get
(
"id"
);
//判断是不是有效的条码
String
code
=
paramMap
.
get
(
"code"
);
log
.
info
(
"入库寻找新柜体,条码信息为:"
+
code
+
","
);
Barcode
barcode
=
codeResolve
.
resolveOneValideBarcode
(
"=2x2="
+
code
);
Storage
storage
=
dataCache
.
getStorageById
(
id
);
//开始查询空库位
StoragePos
pos
=
storagePosManager
.
getEmptyPosByStorage
(
storage
,
barcode
,
taskService
.
excludePosIds
());
if
(
pos
==
null
)
{
//smfcore.tailingmaterial.noPos=未找到可用的柜体
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.tailingmaterial.noPos"
,
"未找到可用的柜体"
);
}
//添加到绑定里边
//addLockPos(pos, cid);
//同时亮灯
opPosLight
(
"open"
,
pos
,
putInColor
);
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
resultMap
.
put
(
"posName"
,
pos
.
getPosName
());
resultMap
.
put
(
"partNumber"
,
barcode
.
getPartNumber
());
resultMap
.
put
(
"posReelNum"
,
0
);
return
ResultBean
.
newOkResult
(
resultMap
);
}
@ApiOperation
(
"物料放入柜体中"
)
@RequestMapping
(
"/putInPos"
)
@AnonymousAccess
public
ResultBean
putInPos
(
@RequestBody
Map
<
String
,
String
>
paramMap
)
{
String
posName
=
paramMap
.
get
(
"posName"
);
String
code
=
paramMap
.
get
(
"code"
);
String
num
=
paramMap
.
get
(
"num"
);
log
.
info
(
"物料放入柜体中,库位为:"
+
posName
+
",条码为:"
+
code
+
",数量为:"
+
num
);
//解析条码,同时设置数量
Barcode
barcode
=
codeResolve
.
resolveOneValideBarcode
(
"=2x2="
+
code
);
barcode
.
setBarcode
(
barcode
.
getPartNumber
()+
"_"
+
barcode
.
getBatch
()+
"_"
+
System
.
currentTimeMillis
());
barcode
.
setAmount
(
Integer
.
parseInt
(
num
));
//判断库位中的物料是否一样
StoragePos
pos
=
storagePosManager
.
getByPosName
(
posName
);
if
(
pos
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.valueNotExist"
,
"{0}[{1}]不存在"
,
new
String
[]{
"柜体"
,
posName
});
}
Barcode
posBarcode
=
getPosBarcode
(
pos
);
//判断和放入的是否一样
List
<
Barcode
>
subCodeList
=
posBarcode
.
getSubCodeList
();
if
(
subCodeList
!=
null
&&
!
subCodeList
.
isEmpty
())
{
for
(
Barcode
subCode
:
subCodeList
)
{
if
(!
barcode
.
getPartNumber
().
equals
(
subCode
.
getPartNumber
()))
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.tailingmaterial.pnError"
,
"入库的物料[{0}]与柜体中[{1}]不同"
,
new
String
[]{
barcode
.
getPartNumber
(),
subCode
.
getPartNumber
()});
}
}
}
barcode
.
setPosName
(
pos
.
getPosName
());
barcode
.
setPutInTime
(
System
.
currentTimeMillis
());
barcodeManager
.
saveBarcode
(
barcode
);
posBarcode
.
UpdateSubCode
(
barcode
);
int
amount
=
0
;
for
(
Barcode
subCode
:
posBarcode
.
getSubCodeList
())
{
amount
=
amount
+
subCode
.
getAmount
();
}
posBarcode
.
setAmount
(
amount
);
posBarcode
.
setPartNumber
(
barcode
.
getPartNumber
());
barcodeManager
.
saveBarcode
(
posBarcode
);
pos
.
setBarcode
(
posBarcode
);
pos
.
setUsed
(
true
);
storagePosManager
.
save
(
pos
);
//生成入库任务
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
DataLog
dataLog
=
new
DataLog
(
storage
,
posBarcode
,
pos
);
dataLog
.
setType
(
OP
.
PUT_IN
);
dataLog
.
setNum
(
Integer
.
parseInt
(
num
));
dataLog
.
setOperator
(
SecurityUtils
.
getLoginUsername
());
dataLog
.
setStatus
(
OP_STATUS
.
FINISHED
.
name
());
taskService
.
updateFinishedTask
(
dataLog
);
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
resultMap
.
put
(
"posName"
,
pos
.
getPosName
());
resultMap
.
put
(
"partNumber"
,
barcode
.
getPartNumber
());
resultMap
.
put
(
"posReelNum"
,
amount
);
return
ResultBean
.
newOkResult
(
resultMap
);
}
@ApiOperation
(
"需要要出库的柜体"
)
@RequestMapping
(
"/findOutPosByCode"
)
@AnonymousAccess
public
ResultBean
findOutPosByCode
(
@RequestBody
Map
<
String
,
String
>
paramMap
)
{
String
partNumber
=
paramMap
.
get
(
"partNumber"
);
String
id
=
paramMap
.
get
(
"id"
);
log
.
info
(
"收到物料出库请求,partNumber为:"
+
partNumber
+
"id为:"
+
id
);
List
<
StoragePos
>
storagePosList
=
getStoragePosListByPn
(
partNumber
,
id
);
if
(
storagePosList
==
null
||
storagePosList
.
isEmpty
())
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.label.noReel"
,
"未找到可出库的物料"
);
}
//找到最早入库的物料信息
StoragePos
pos
=
null
;
Barcode
barcode
=
null
;
int
amount
=
0
;
for
(
StoragePos
storagePos
:
storagePosList
)
{
if
(
pos
==
null
)
{
pos
=
storagePos
;
}
Barcode
posBarcode
=
storagePos
.
getBarcode
();
List
<
Barcode
>
subCodeList
=
posBarcode
.
getSubCodeList
();
for
(
Barcode
subCode
:
subCodeList
)
{
amount
=
subCode
.
getAmount
()
+
amount
;
if
(
barcode
==
null
)
{
barcode
=
subCode
;
}
if
(
barcode
.
getPutInDate
().
getTime
()
>=
subCode
.
getPutInDate
().
getTime
())
{
barcode
=
subCode
;
pos
=
storagePos
;
}
}
}
log
.
info
(
"找到最早入库的库位为:"
+
pos
.
getPosName
()
+
",入库日期为:"
+
barcode
.
getPutInDate
(),
"开始亮灯"
);
opPosLight
(
"open"
,
pos
,
putInColor
);
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
resultMap
.
put
(
"posName"
,
pos
.
getPosName
());
resultMap
.
put
(
"partNumber"
,
partNumber
);
resultMap
.
put
(
"posReelNum"
,
amount
);
return
ResultBean
.
newOkResult
(
resultMap
);
}
@ApiOperation
(
"物料从柜体中出库"
)
@AnonymousAccess
@RequestMapping
(
"/outFromPos"
)
public
ResultBean
outFromPos
(
@RequestBody
Map
<
String
,
String
>
paramMap
)
{
String
posName
=
paramMap
.
get
(
"posName"
);
String
partNumber
=
paramMap
.
get
(
"partNumber"
);
String
numStr
=
paramMap
.
get
(
"num"
);
log
.
info
(
"物料从柜体出库,库位为:"
+
posName
+
",条码为:"
+
posName
+
",数量为:"
+
numStr
+
",partNumber为:"
+
partNumber
);
//判断库位中的物料是否一样
StoragePos
pos
=
storagePosManager
.
getByPosName
(
posName
);
if
(
pos
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.valueNotExist"
,
"{0}[{1}]不存在"
,
new
String
[]{
"柜体"
,
posName
});
}
Barcode
posBarcode
=
getPosBarcode
(
pos
);
//直到出库物料位置
int
outNum
=
0
;
int
num
=
Integer
.
parseInt
(
numStr
);
while
(
outNum
<
num
)
{
int
remainNum
=
num
-
outNum
;
Barcode
barcode
=
null
;
List
<
Barcode
>
subCodeList
=
posBarcode
.
getSubCodeList
();
for
(
Barcode
subCode
:
subCodeList
)
{
if
(
barcode
==
null
)
{
barcode
=
subCode
;
}
if
(
barcode
.
getPutInDate
().
getTime
()
>=
subCode
.
getPutInDate
().
getTime
())
{
barcode
=
subCode
;
}
}
if
(
barcode
==
null
){
break
;
}
log
.
info
(
"寻找到对应的料盘信息为:"
+
barcode
.
getBarcode
()
+
",对应的入库时间为:"
+
barcode
.
getPutInDate
());
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
DataLog
dataLog
=
new
DataLog
(
storage
,
barcode
,
pos
);
dataLog
.
setType
(
OP
.
CHECKOUT
);
dataLog
.
setNum
(
remainNum
);
if
(
remainNum
>=
barcode
.
getAmount
())
{
dataLog
.
setNum
(
barcode
.
getAmount
());
outNum
=
outNum
+
barcode
.
getAmount
();
barcode
.
setAmount
(
0
);
barcode
.
setPosName
(
""
);
barcodeManager
.
save
(
barcode
);
}
else
{
outNum
=
outNum
+
remainNum
;
barcode
.
setAmount
(
barcode
.
getAmount
()
-
remainNum
);
barcodeManager
.
saveBarcode
(
barcode
);
}
dataLog
.
setStatus
(
OP_STATUS
.
FINISHED
.
name
());
dataLog
.
setOperator
(
SecurityUtils
.
getLoginUsername
());
taskService
.
updateFinishedTask
(
dataLog
);
posBarcode
.
UpdateSubCode
(
barcode
);
}
int
amount
=
0
;
List
<
Barcode
>
subCodeList
=
posBarcode
.
getSubCodeList
();
if
(
subCodeList
==
null
||
subCodeList
.
isEmpty
())
{
posBarcode
.
setAmount
(
0
);
pos
.
setBarcode
(
null
);
pos
.
setUsed
(
false
);
}
else
{
for
(
Barcode
barcode
:
posBarcode
.
getSubCodeList
())
{
amount
=
amount
+
barcode
.
getAmount
();
}
posBarcode
.
setAmount
(
amount
);
pos
.
setBarcode
(
posBarcode
);
}
barcodeManager
.
save
(
posBarcode
);
storagePosManager
.
save
(
pos
);
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
resultMap
.
put
(
"posName"
,
pos
.
getPosName
());
resultMap
.
put
(
"partNumber"
,
partNumber
);
resultMap
.
put
(
"posReelNum"
,
amount
);
return
ResultBean
.
newOkResult
(
resultMap
);
}
@Override
public
StatusBean
handleClientRequest
(
StatusBean
statusBean
,
HttpServletRequest
request
)
{
statusBean
.
setClientIp
(
request
.
getRemoteHost
());
handleMsg
(
statusBean
);
statusBean
=
saveAlarmAndHumidity
(
statusBean
);
if
(
statusBean
!=
null
)
{
Map
<
String
,
String
>
opMap
=
DevicesStatusUtil
.
getAndRemoveOp
(
statusBean
.
getCid
());
statusBean
.
addOp
(
opMap
);
}
return
statusBean
;
}
private
List
<
StoragePos
>
getStoragePosListByPn
(
String
partNumber
,
String
id
)
{
Storage
storage
=
dataCache
.
getStorageById
(
id
);
//查询信息
Criteria
criteria
=
Criteria
.
where
(
"barcode"
).
exists
(
true
)
.
and
(
"enabled"
).
is
(
true
)
.
and
(
"storageId"
).
is
(
storage
.
getId
())
.
and
(
"barcode.partNumber"
).
is
(
partNumber
);
Query
query
=
new
Query
(
criteria
);
return
storagePosManager
.
findByQuery
(
query
);
}
private
Barcode
getPosBarcode
(
StoragePos
pos
)
{
Barcode
barcode
=
pos
.
getBarcode
();
if
(
barcode
==
null
)
{
barcode
=
barcodeManager
.
findByBarcode
(
pos
.
getPosName
());
}
if
(
barcode
==
null
)
{
barcode
=
new
Barcode
();
barcode
.
setBarcode
(
pos
.
getPosName
());
barcode
.
setAmount
(
0
);
barcodeManager
.
save
(
barcode
);
}
return
barcode
;
}
/**
* 操作库位灯(开灯,或关灯)
*
* @param opKey
* @param pos
* @param colorStr
*/
private
void
opPosLight
(
String
opKey
,
StoragePos
pos
,
String
colorStr
)
{
String
opStr
=
pos
.
getPosName
();
if
(!
Strings
.
isNullOrEmpty
(
colorStr
))
{
opStr
=
opStr
+
"="
+
colorStr
;
}
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
DevicesStatusUtil
.
appendOp
(
storage
.
getCid
(),
opKey
,
opStr
);
log
.
info
(
"操作库位["
+
pos
.
getPosName
()
+
"]"
+
opKey
+
" : "
+
opStr
);
}
}
src/main/java/com/neotel/smfcore/core/storage/enums/DeviceType.java
查看文件 @
b67b4d3
...
@@ -159,6 +159,11 @@ public enum DeviceType {
...
@@ -159,6 +159,11 @@ public enum DeviceType {
* 26 smdOne
* 26 smdOne
*/
*/
SMD_ONE
(
"storage.type.smdOne"
),
SMD_ONE
(
"storage.type.smdOne"
),
/**
* 尾料柜
*/
TAILING_MATERIAL
(
"storage.type.tailingMaterial"
),
;
;
private
String
key
;
private
String
key
;
...
@@ -180,6 +185,6 @@ public enum DeviceType {
...
@@ -180,6 +185,6 @@ public enum DeviceType {
}
}
public
static
List
<
DeviceType
>
availableTypeList
(){
public
static
List
<
DeviceType
>
availableTypeList
(){
return
Lists
.
newArrayList
(
AUTO
,
LINE
,
BATCH
,
SOLDERPASTE
,
VERTICALBOX
,
SMD_XL
,
SMD_DUO
,
SMD_XLC
,
SMD_XLR
,
SMD_ONE
,
VIRTUAL
,
NL
,
NLP
,
NLM
,
NLL
,
NLS
,
NLSM
,
SMDBOX_THIRD
,
SMD_MIMO_G2
,
SMD_MIMO_G3
);
return
Lists
.
newArrayList
(
AUTO
,
LINE
,
BATCH
,
SOLDERPASTE
,
VERTICALBOX
,
SMD_XL
,
SMD_DUO
,
SMD_XLC
,
SMD_XLR
,
SMD_ONE
,
VIRTUAL
,
NL
,
NLP
,
NLM
,
NLL
,
NLS
,
NLSM
,
SMDBOX_THIRD
,
SMD_MIMO_G2
,
SMD_MIMO_G3
,
TAILING_MATERIAL
);
}
}
}
}
src/main/resources/messages.properties
查看文件 @
b67b4d3
...
@@ -443,3 +443,5 @@ smf.nexim.getInventoryFaile=\u83B7\u53D6did\u4FE1\u606F\u5931\u8D25:[{0}]
...
@@ -443,3 +443,5 @@ smf.nexim.getInventoryFaile=\u83B7\u53D6did\u4FE1\u606F\u5931\u8D25:[{0}]
smfcore.registerdid.false
=
[{0}]
\u
6CE8
\u
518Cdid
\u5931\u
8D25:[{1}]
smfcore.registerdid.false
=
[{0}]
\u
6CE8
\u
518Cdid
\u5931\u
8D25:[{1}]
smfcore.accessToken.ng
=
\u
83B7
\u
53D6AccessToken
\u5931\u
8D25
smfcore.accessToken.ng
=
\u
83B7
\u
53D6AccessToken
\u5931\u
8D25
smfcore.barcode.hasOutTask
=
\u7269\u6599
[{0}]
\u
5DF2
\u6709\u
51FA
\u
5E93
\u
4EFB
\u
52A1,
\u9700\u
7EE7
\u
7EED
\u6267\u
884C
\u
51FA
\u
5E93
\u
52A8
\u
4F5C
smfcore.barcode.hasOutTask
=
\u7269\u6599
[{0}]
\u
5DF2
\u6709\u
51FA
\u
5E93
\u
4EFB
\u
52A1,
\u9700\u
7EE7
\u
7EED
\u6267\u
884C
\u
51FA
\u
5E93
\u
52A8
\u
4F5C
smfcore.tailingmaterial.noPos
=
\u
672A
\u
627E
\u5230\u
53EF
\u7528\u7684\u
67DC
\u
4F53
smfcore.tailingmaterial.pnError
=
\u5165\u
5E93
\u7684\u7269\u6599
[{0}]
\u
4E0E
\u
67DC
\u
4F53
\u
4E2D[{1}]
\u
4E0D
\u
540C
src/main/resources/messages_de_DE.properties
查看文件 @
b67b4d3
...
@@ -431,3 +431,5 @@ smf.nexim.getInventoryFaile=Fehler beim Abrufen der did-Information: [{0}]
...
@@ -431,3 +431,5 @@ smf.nexim.getInventoryFaile=Fehler beim Abrufen der did-Information: [{0}]
smfcore.registerdid.false
=
[{0}] Registrierung von did fehlgeschlagen:[{1}]
smfcore.registerdid.false
=
[{0}] Registrierung von did fehlgeschlagen:[{1}]
smfcore.accessToken.ng
=
Fehler beim Abrufen des AccessToken
smfcore.accessToken.ng
=
Fehler beim Abrufen des AccessToken
smfcore.barcode.hasOutTask
=
Material [{0}] hat bereits einen Ausgangsauftrag; die Ausgangsaktion muss fortgesetzt werden
smfcore.barcode.hasOutTask
=
Material [{0}] hat bereits einen Ausgangsauftrag; die Ausgangsaktion muss fortgesetzt werden
smfcore.tailingmaterial.noPos
=
Kein verf
\u
00FCgbarer Schrank gefunden
smfcore.tailingmaterial.pnError
=
Das eingelagerte Material [{0}] unterscheidet sich von dem im Schrank [{1}]
\ No newline at end of file
\ No newline at end of file
src/main/resources/messages_en_US.properties
查看文件 @
b67b4d3
...
@@ -432,3 +432,5 @@ smf.nexim.getInventoryFaile=Failed to retrieve did information: [{0}]
...
@@ -432,3 +432,5 @@ smf.nexim.getInventoryFaile=Failed to retrieve did information: [{0}]
smfcore.registerdid.false
=
[{0}] Failed to register did:[{1}]
smfcore.registerdid.false
=
[{0}] Failed to register did:[{1}]
smfcore.accessToken.ng
=
Failed to obtain AccessToken
smfcore.accessToken.ng
=
Failed to obtain AccessToken
smfcore.barcode.hasOutTask
=
Material [{0}] already has an outbound task; the outbound action needs to be continued.
smfcore.barcode.hasOutTask
=
Material [{0}] already has an outbound task; the outbound action needs to be continued.
smfcore.tailingmaterial.noPos
=
No available cabinet found
smfcore.tailingmaterial.pnError
=
The material [{0}] put in is different from the one in the cabinet [{1}]
\ No newline at end of file
\ No newline at end of file
src/main/resources/messages_fr_FR.properties
查看文件 @
b67b4d3
...
@@ -431,3 +431,5 @@ smf.nexim.getInventoryFaile=\u00C9chec de r\u00E9cup\u00E9ration des information
...
@@ -431,3 +431,5 @@ smf.nexim.getInventoryFaile=\u00C9chec de r\u00E9cup\u00E9ration des information
smfcore.registerdid.false
=
[{0}]
\u
00C9chec de l'enregistrement de did:[{1}]
smfcore.registerdid.false
=
[{0}]
\u
00C9chec de l'enregistrement de did:[{1}]
smfcore.accessToken.ng
=
\u
00C9chec de l'obtention de l'AccessToken
smfcore.accessToken.ng
=
\u
00C9chec de l'obtention de l'AccessToken
smfcore.barcode.hasOutTask
=
La mati
\u
00E8re [{0}] a d
\u
00E9j
\u
00E0 une t
\u
00E2che de sortie ; l'action de sortie doit
\u
00EAtre poursuivie
smfcore.barcode.hasOutTask
=
La mati
\u
00E8re [{0}] a d
\u
00E9j
\u
00E0 une t
\u
00E2che de sortie ; l'action de sortie doit
\u
00EAtre poursuivie
smfcore.tailingmaterial.noPos
=
Aucun cabinet disponible trouv
\u
00E9
smfcore.tailingmaterial.pnError
=
Le mat
\u
00E9riau [{0}] mis en stock est diff
\u
00E9rent de celui dans le cabinet [{1}]
\ No newline at end of file
\ No newline at end of file
src/main/resources/messages_ja_JP.properties
查看文件 @
b67b4d3
...
@@ -428,3 +428,5 @@ smf.nexim.getInventoryFaile=did \u60C5\u5831\u306E\u53D6\u5F97\u306B\u5931\u6557
...
@@ -428,3 +428,5 @@ smf.nexim.getInventoryFaile=did \u60C5\u5831\u306E\u53D6\u5F97\u306B\u5931\u6557
smfcore.registerdid.false
=
[{0}] did
\u
306E
\u
767B
\u9332\u
306B
\u5931\u6557\u3057\u
307E
\u3057\u
305F:[{1}]
smfcore.registerdid.false
=
[{0}] did
\u
306E
\u
767B
\u9332\u
306B
\u5931\u6557\u3057\u
307E
\u3057\u
305F:[{1}]
smfcore.accessToken.ng
=
AccessToken
\u
306E
\u
53D6
\u
5F97
\u
306B
\u5931\u6557\u3057\u
307E
\u3057\u
305F
smfcore.accessToken.ng
=
AccessToken
\u
306E
\u
53D6
\u
5F97
\u
306B
\u5931\u6557\u3057\u
307E
\u3057\u
305F
smfcore.barcode.hasOutTask
=
\u
8CC7
\u6750
[{0}]
\u
306B
\u
306F
\u
65E2
\u
306B
\u
51FA
\u
5EAB
\u
30BF
\u
30B9
\u
30AF
\u
304C
\u3042\u
308A
\u3001\u
51FA
\u
5EAB
\u
30A2
\u
30AF
\u
30B7
\u
30E7
\u
30F3
\u3092\u
7D9A
\u
884C
\u3059\u
308B
\u
5FC5
\u8981\u
304C
\u3042\u
308A
\u
307E
\u3059
smfcore.barcode.hasOutTask
=
\u
8CC7
\u6750
[{0}]
\u
306B
\u
306F
\u
65E2
\u
306B
\u
51FA
\u
5EAB
\u
30BF
\u
30B9
\u
30AF
\u
304C
\u3042\u
308A
\u3001\u
51FA
\u
5EAB
\u
30A2
\u
30AF
\u
30B7
\u
30E7
\u
30F3
\u3092\u
7D9A
\u
884C
\u3059\u
308B
\u
5FC5
\u8981\u
304C
\u3042\u
308A
\u
307E
\u3059
smfcore.tailingmaterial.noPos
=
\u5229\u7528\u
53EF
\u
80FD
\u
306A
\u
30AD
\u
30E3
\u
30D3
\u
30CD
\u
30C3
\u
30C8
\u
304C
\u
898B
\u3064\u
304B
\u
308A
\u
307E
\u
305B
\u3093
smfcore.tailingmaterial.pnError
=
\u5165\u
5E93
\u3055\u
308C
\u
305F
\u6750\u6599
[{0}]
\u
306F
\u
30AD
\u
30E3
\u
30D3
\u
30CD
\u
30C3
\u
30C8
\u5185\u
306E[{1}]
\u3068\u7570\u
306A
\u
308A
\u
307E
\u3059
\ No newline at end of file
\ No newline at end of file
src/main/resources/messages_zh_CN.properties
查看文件 @
b67b4d3
...
@@ -428,3 +428,5 @@ smf.nexim.getInventoryFaile=\u83B7\u53D6did\u4FE1\u606F\u5931\u8D25:[{0}]
...
@@ -428,3 +428,5 @@ smf.nexim.getInventoryFaile=\u83B7\u53D6did\u4FE1\u606F\u5931\u8D25:[{0}]
smfcore.registerdid.false
=
[{0}]
\u
6CE8
\u
518Cdid
\u5931\u
8D25:[{1}]
smfcore.registerdid.false
=
[{0}]
\u
6CE8
\u
518Cdid
\u5931\u
8D25:[{1}]
smfcore.accessToken.ng
=
\u
83B7
\u
53D6AccessToken
\u5931\u
8D25
smfcore.accessToken.ng
=
\u
83B7
\u
53D6AccessToken
\u5931\u
8D25
smfcore.barcode.hasOutTask
=
\u7269\u6599
[{0}]
\u
5DF2
\u6709\u
51FA
\u
5E93
\u
4EFB
\u
52A1,
\u9700\u
7EE7
\u
7EED
\u6267\u
884C
\u
51FA
\u
5E93
\u
52A8
\u
4F5C
smfcore.barcode.hasOutTask
=
\u7269\u6599
[{0}]
\u
5DF2
\u6709\u
51FA
\u
5E93
\u
4EFB
\u
52A1,
\u9700\u
7EE7
\u
7EED
\u6267\u
884C
\u
51FA
\u
5E93
\u
52A8
\u
4F5C
smfcore.tailingmaterial.noPos
=
\u
672A
\u
627E
\u5230\u
53EF
\u7528\u7684\u
67DC
\u
4F53
smfcore.tailingmaterial.pnError
=
\u5165\u
5E93
\u7684\u7269\u6599
[{0}]
\u
4E0E
\u
67DC
\u
4F53
\u
4E2D[{1}]
\u
4E0D
\u
540C
\ No newline at end of file
\ No newline at end of file
src/main/resources/messages_zh_TW.properties
查看文件 @
b67b4d3
...
@@ -428,3 +428,5 @@ smf.nexim.getInventoryFaile=\u53D6\u5F97 did \u8CC7\u8A0A\u5931\u6557:[{0}]
...
@@ -428,3 +428,5 @@ smf.nexim.getInventoryFaile=\u53D6\u5F97 did \u8CC7\u8A0A\u5931\u6557:[{0}]
smfcore.registerdid.false
=
[{0}]
\u
8A3B
\u
518Adid
\u5931\u6557
:[{1}]
smfcore.registerdid.false
=
[{0}]
\u
8A3B
\u
518Adid
\u5931\u6557
:[{1}]
smfcore.accessToken.ng
=
\u7372\u
53D6AccessToken
\u5931\u6557
smfcore.accessToken.ng
=
\u7372\u
53D6AccessToken
\u5931\u6557
smfcore.barcode.hasOutTask
=
\u7269\u6599
[{0}]
\u
5DF2
\u6709\u
51FA
\u
5EAB
\u
4EFB
\u
52D9
\u
FF0C
\u9700\u
7E7C
\u
7E8C
\u
57F7
\u
884C
\u
51FA
\u
5EAB
\u
52D5
\u
4F5C
smfcore.barcode.hasOutTask
=
\u7269\u6599
[{0}]
\u
5DF2
\u6709\u
51FA
\u
5EAB
\u
4EFB
\u
52D9
\u
FF0C
\u9700\u
7E7C
\u
7E8C
\u
57F7
\u
884C
\u
51FA
\u
5EAB
\u
52D5
\u
4F5C
smfcore.tailingmaterial.noPos
=
\u
672A
\u
627E
\u5230\u
53EF
\u7528\u7684\u
6AC3
\u
9AD4
smfcore.tailingmaterial.pnError
=
\u5165\u
5EAB
\u7684\u7269\u6599
[{0}]
\u8207\u
6AC3
\u
9AD4
\u
4E2D[{1}]
\u
4E0D
\u
540C
\ No newline at end of file
\ No newline at end of file
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论