Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit e91fb981
由
sunke
编写于
2021-11-19 16:28:08 +0800
浏览文件
选项
浏览文件
标签
下载
差异文件
Merge remote-tracking branch 'origin/master'
2 个父辈
2d5342eb
8d0266a7
全部展开
显示空白字符变更
内嵌
并排
正在显示
52 个修改的文件
包含
1127 行增加
和
248 行删除
pom.xml
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
src/main/java/com/neotel/smfcore/common/init/MainTimer.java
src/main/java/com/neotel/smfcore/common/utils/Constants.java
src/main/java/com/neotel/smfcore/core/barcode/bean/BarcodeRule.java
src/main/java/com/neotel/smfcore/core/barcode/rest/ComponentController.java
src/main/java/com/neotel/smfcore/core/barcode/rest/bean/dto/BarcodeDto.java
src/main/java/com/neotel/smfcore/core/barcode/rest/bean/dto/CodeDto.java
src/main/java/com/neotel/smfcore/core/barcode/service/manager/impl/BarcodeManagerImpl.java
src/main/java/com/neotel/smfcore/core/barcode/service/manager/impl/ComponentManagerImpl.java
src/main/java/com/neotel/smfcore/core/barcode/service/po/Barcode.java
src/main/java/com/neotel/smfcore/core/barcode/utils/CodeResolve.java
src/main/java/com/neotel/smfcore/core/device/bean/StatusBean.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/AccShelfHandler.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/BaseDeviceHandler.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/LineBoxHandler.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/SensorShelfHandler.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/XLCBoxHandler.java
src/main/java/com/neotel/smfcore/core/device/rest/DeviceController.java
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
src/main/java/com/neotel/smfcore/core/kanban/rest/BoxKanbanController.java
src/main/java/com/neotel/smfcore/core/kanban/rest/bean/dto/BoxStatusDto.java
src/main/java/com/neotel/smfcore/core/kanban/rest/bean/dto/ShelfPosErrorDto.java
src/main/java/com/neotel/smfcore/core/language/util/MessageUtils.java
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
src/main/java/com/neotel/smfcore/core/order/rest/bean/dto/OrderDto.java
src/main/java/com/neotel/smfcore/core/order/service/manager/ILiteOrderManager.java
src/main/java/com/neotel/smfcore/core/order/service/manager/impl/LiteOrderManagerImpl.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/storage/enums/DeviceType.java
src/main/java/com/neotel/smfcore/core/storage/rest/MaterialBoxController.java
src/main/java/com/neotel/smfcore/core/storage/rest/MaterialController.java
src/main/java/com/neotel/smfcore/core/storage/rest/StoragePosController.java
src/main/java/com/neotel/smfcore/core/storage/rest/query/StoragePosQueryCriteria.java
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStoragePosManager.java
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
src/main/java/com/neotel/smfcore/core/system/service/po/DataLog.java
src/main/java/com/neotel/smfcore/core/system/util/DevicesStatusUtil.java
src/main/java/com/neotel/smfcore/core/system/util/TaskService.java
src/main/java/com/neotel/smfcore/hella/handler/HellaServiceHandler.java
src/main/java/com/neotel/smfcore/hella/rest/HellaSensorShelfController.java
src/main/java/com/neotel/smfcore/hella/tcp/HellaTcpClient.java
src/main/java/com/neotel/smfcore/hella/tcp/command/HellaReqCommand.java
src/main/java/com/neotel/smfcore/security/rest/UserController.java
src/main/java/com/neotel/smfcore/security/service/manager/impl/UserManagerImpl.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
pom.xml
查看文件 @
e91fb98
...
...
@@ -15,9 +15,9 @@
<name>
smf-core
</name>
<description>
SMF project for Spring Boot
</description>
<properties>
<maven.build.timestamp.format>
M
.dd
</maven.build.timestamp.format>
<maven.build.timestamp.format>
M
M.dd.HHmmss
</maven.build.timestamp.format>
<main.version>
1.${maven.build.timestamp}
</main.version>
<app.version>
${main.version}
${current.time}
</app.version>
<app.version>
${main.version}
</app.version>
<java.version>
1.8
</java.version>
<jjwt.version>
0.11.1
</jjwt.version>
<!-- oshi监控需要指定jna版本, 问题详见 https://github.com/oshi/oshi/issues/1040 -->
...
...
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
查看文件 @
e91fb98
...
...
@@ -41,13 +41,11 @@ public class DataInitManager {
IRoleManager
roleManager
;
@Autowired
IMenuManager
menuManager
;
// @Autowired
// IGroupManager groupManager;
@Autowired
TaskService
taskService
;
@Autowired
IDataLogManager
dataLogManager
;
MainTimer
mainTimer
;
@Autowired
PermissionInitUtil
annotationUtil
;
...
...
@@ -101,7 +99,7 @@ public class DataInitManager {
}
}
initTask
();
mainTimer
.
init
();
allPermissionSet
=
annotationUtil
.
initPermission
();
}
catch
(
Exception
exception
)
{
...
...
@@ -109,20 +107,7 @@ public class DataInitManager {
}
}
private
void
initTask
()
{
log
.
info
(
"开始加载未完成的任务..."
);
List
<
DataLog
>
unExecuteTasks
=
dataLogManager
.
findUnFinishedTasks
();
for
(
DataLog
unExecuteTask
:
unExecuteTasks
)
{
if
(
unExecuteTask
.
isExecuting
()
||
unExecuteTask
.
isWait
())
{
try
{
taskService
.
addTaskToExecute
(
unExecuteTask
);
}
catch
(
Exception
e
){
log
.
error
(
"初始化任务["
+
unExecuteTask
+
"]出错:"
+
e
);
}
}
}
log
.
info
(
"加载未完成的任务完成,共["
+
unExecuteTasks
.
size
()
+
"]条数据..."
);
}
private
int
sortValue
=
0
;
...
...
@@ -206,9 +191,12 @@ public class DataInitManager {
Menu
menuOut
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"checkOut"
,
"查找出库"
,
1
,
"singleOuput"
,
"neolight/singleOuput/index"
,
""
,
0
,
"export1"
);
Menu
celueOut
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"tacticsOuput"
,
"策略出库"
,
1
,
"tacticsOuput"
,
"neolight/tacticsOuput/index"
,
""
,
0
,
"workOrder"
);
Menu
groupOut
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"labelOuput"
,
"物料分组"
,
1
,
"labelOuput"
,
"neolight/labelOuput/index"
,
""
,
0
,
"export1"
);
Menu
manualOut
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"manualOut"
,
"手动出库"
,
1
,
"manualOut"
,
"neolight/manualOut/index"
,
""
,
0
,
"export1"
);
Menu
materialBox
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"materialBox"
,
"料盒操作"
,
1
,
"materialBox"
,
"neolight/materialBox/index"
,
""
,
0
,
"export1"
);
celueOut
.
setHidden
(
true
);
groupOut
.
setHidden
(
true
);
menus
.
addAll
(
createMenus
(
poutOut
,
menuOrder
,
menuOut
,
celueOut
,
groupOut
));
manualOut
.
setHidden
(
true
);
menus
.
addAll
(
createMenus
(
poutOut
,
menuOrder
,
menuOut
,
celueOut
,
groupOut
,
manualOut
,
materialBox
));
//设置:料仓管理,菜单管理
Menu
poutSet
=
Menu
.
CreatePMenu
(
"设置"
,
30
,
"system"
,
2
,
"system"
);
...
...
src/main/java/com/neotel/smfcore/common/init/MainTimer.java
0 → 100644
查看文件 @
e91fb98
package
com
.
neotel
.
smfcore
.
common
.
init
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
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
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
import
java.util.concurrent.Executors
;
import
java.util.concurrent.ScheduledExecutorService
;
import
java.util.concurrent.TimeUnit
;
@Service
public
class
MainTimer
{
protected
final
transient
Logger
log
=
LogManager
.
getLogger
(
getClass
());
ScheduledExecutorService
scheduledThreadPool
=
Executors
.
newScheduledThreadPool
(
1
);
@Autowired
TaskService
taskService
;
@Autowired
IDataLogManager
dataLogManager
;
@Autowired
LiteOrderCache
liteOrderCache
;
public
void
init
(){
initTask
();
liteOrderCache
.
loadUnEndOrderInfos
();
log
.
info
(
"主定时器开启,60秒后开始执行, 每10s执行一次"
);
//1 分钟之后执行,每秒钟执行一次
scheduledThreadPool
.
scheduleAtFixedRate
(
new
Runnable
()
{
@Override
public
void
run
()
{
timerTask
();
}
},
60
,
10
,
TimeUnit
.
SECONDS
);
}
private
void
initTask
()
{
log
.
info
(
"开始加载未完成的任务..."
);
List
<
DataLog
>
unExecuteTasks
=
dataLogManager
.
findUnFinishedTasks
();
for
(
DataLog
unExecuteTask
:
unExecuteTasks
)
{
if
(
unExecuteTask
.
isExecuting
()
||
unExecuteTask
.
isWait
())
{
try
{
taskService
.
addTaskToExecute
(
unExecuteTask
);
}
catch
(
Exception
e
){
log
.
error
(
"初始化任务["
+
unExecuteTask
+
"]出错:"
+
e
);
}
}
}
log
.
info
(
"加载未完成的任务完成,共["
+
unExecuteTasks
.
size
()
+
"]条数据..."
);
}
private
void
timerTask
(){
try
{
liteOrderCache
.
runTimer
();
}
catch
(
Exception
e
){
log
.
error
(
"定时器执行出错"
,
e
);
}
finally
{
}
}
}
src/main/java/com/neotel/smfcore/common/utils/Constants.java
查看文件 @
e91fb98
...
...
@@ -10,6 +10,8 @@ public class Constants {
* 超级管理员用户名
*/
public
static
final
String
SUPER_USERNAME
=
"admin"
;
public
static
final
String
USER_DEFAULTP_PWD
=
"123456"
;
/**
* Assets Version constant
*/
...
...
@@ -97,5 +99,8 @@ public class Constants {
*/
public
static
final
String
CACHE_StopJob
=
"stopJob"
;
/**
* 出库方式类型 出库策略配置
*/
public
static
final
String
CACHE_CheckOutType
=
"checkoutType"
;
}
src/main/java/com/neotel/smfcore/core/barcode/bean/BarcodeRule.java
查看文件 @
e91fb98
...
...
@@ -497,7 +497,7 @@ public class BarcodeRule {
}
codeBean
.
setCodeStr
(
codeStr
);
if
(!
isValidRule
()){
codeBean
.
setError
(
"error.barcode.noRule"
,
"解析规则未定义"
);
codeBean
.
setError
(
"
smfcode.
error.barcode.noRule"
,
"解析规则未定义"
);
return
codeBean
;
}
String
[]
codeArr
=
new
String
[]{
codeStr
};
...
...
@@ -506,7 +506,7 @@ public class BarcodeRule {
//条码与规则长度对应不上
if
(
codeArr
.
length
!=
length
){
log
.
info
(
"条码["
+
codeStr
+
"]与规则【"
+
ruleStr
+
"】长度不同"
);
codeBean
.
setError
(
"
error.barcode.wrongLength"
,
new
String
[]{},
"条码["
+
codeStr
+
"
]长度错误"
);
codeBean
.
setError
(
"
smfcode.error.barcode.wrongLength"
,
new
String
[]{
codeStr
},
"条码[{0}
]长度错误"
);
return
codeBean
;
}
else
{
codeArr
=
codeStr
.
split
(
separator
,
length
);
...
...
@@ -515,7 +515,7 @@ public class BarcodeRule {
Barcode
b
=
new
Barcode
();
b
.
setFullCode
(
codeStr
);
String
reelId
=
""
;
if
(
whole_reelId_item
.
hasThisField
()){
reelId
=
codeStr
;
...
...
@@ -525,7 +525,7 @@ public class BarcodeRule {
if
(
Strings
.
isNullOrEmpty
(
reelId
)){
log
.
info
(
"条码解析失败,未找到RI字段"
);
codeBean
.
setError
(
"
error.barcode.noField"
,
new
String
[]{
"RI"
},
"条码解析失败,未找到RI
字段"
);
codeBean
.
setError
(
"
smfcode.error.barcode.noField"
,
new
String
[]{
"RI"
},
"条码解析失败,未找到{0}
字段"
);
return
codeBean
;
}
...
...
@@ -533,7 +533,7 @@ public class BarcodeRule {
if
(
Strings
.
isNullOrEmpty
(
partNumber
)){
log
.
info
(
"条码解析失败,未找到PN字段"
);
codeBean
.
setError
(
"
error.barcode.noField"
,
new
String
[]{
"PN"
},
"条码解析失败,未找到PN
字段"
);
codeBean
.
setError
(
"
smfcode.error.barcode.noField"
,
new
String
[]{
"PN"
},
"条码解析失败,未找到{0}
字段"
);
return
codeBean
;
}
if
(
batch_item
.
hasThisField
()){
...
...
@@ -545,7 +545,7 @@ public class BarcodeRule {
quantity
=
quantity_item
.
getIntValue
(
codeArr
);
if
(
quantity
==
-
1
){
log
.
info
(
"条码解析失败,未找到QTY 字段"
);
codeBean
.
setError
(
"
error.barcode.noField"
,
new
String
[]{
"QTY"
},
"条码解析失败,未找到QTY
字段"
);
codeBean
.
setError
(
"
smfcode.error.barcode.noField"
,
new
String
[]{
"QTY"
},
"条码解析失败,未找到{0}
字段"
);
return
codeBean
;
}
}
...
...
@@ -553,7 +553,7 @@ public class BarcodeRule {
Date
produceDate
=
produceDate_item
.
getDateValue
(
codeArr
);
if
(
produceDate_item
.
hasThisField
()
&&
produceDate
==
null
){
log
.
info
(
"条码解析失败,PRODATE字段不合规则"
);
codeBean
.
setError
(
"
error.barcode.noField"
,
new
String
[]{
"PRODATE"
},
"条码解析失败,未找到PRODATE
字段"
);
codeBean
.
setError
(
"
smfcode.error.barcode.noField"
,
new
String
[]{
"PRODATE"
},
"条码解析失败,未找到{0}
字段"
);
return
codeBean
;
}
Date
expireDate
=
expireDate_item
.
getDateValue
(
codeArr
);
...
...
@@ -700,6 +700,10 @@ public class BarcodeRule {
codeStr
=
"327203324369301963"
;
rule
=
"PN[-1_32:0:-1_3]RI[-1:0:-1]"
;
codeStr
=
"TJM210215000771&10446507326&15000&2021-01-18&NAUK11263MAB&&10446&&R107920210124A13OG"
;
rule
=
"RI&PN&QTY&PRODATEyyyy-MM-dd&5&6&7&8&9"
;
BarcodeRule
br
=
BarcodeRule
.
newRule
(
rule
);
Barcode
b
=
br
.
toCodeBean
(
codeStr
).
getBarcode
();
if
(
b
!=
null
){
...
...
src/main/java/com/neotel/smfcore/core/barcode/rest/ComponentController.java
查看文件 @
e91fb98
...
...
@@ -90,4 +90,18 @@ public class ComponentController {
return
new
ResponseEntity
<>(
HttpStatus
.
OK
);
}
@ApiOperation
(
"搜索框匹配元器件"
)
@GetMapping
(
value
=
"/searchMatching"
)
@PreAuthorize
(
"@el.check('component:list')"
)
public
List
<
String
>
searchMatching
(
ComponentQueryCriteria
criteria
)
{
Query
query
=
QueryHelp
.
getQuery
(
criteria
);
query
.
limit
(
20
);
List
<
Component
>
list
=
componentManager
.
findByQuery
(
query
);
List
<
String
>
array
=
new
ArrayList
<>();
for
(
Component
com
:
list
)
{
array
.
add
(
com
.
getPartNumber
());
}
return
array
;
}
}
src/main/java/com/neotel/smfcore/core/barcode/rest/bean/dto/BarcodeDto.java
查看文件 @
e91fb98
package
com
.
neotel
.
smfcore
.
core
.
barcode
.
rest
.
bean
.
dto
;
import
com.google.common.collect.Lists
;
import
com.neotel.smfcore.common.utils.DateUtil
;
import
com.neotel.smfcore.core.barcode.enums.BARCODE_STATUS
;
import
com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE
;
import
com.neotel.smfcore.core.barcode.enums.SOLDER_STATUS
;
...
...
@@ -13,6 +12,9 @@ import org.springframework.data.annotation.Transient;
import
java.io.Serializable
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
@Getter
@Setter
public
class
BarcodeDto
implements
Serializable
{
...
...
@@ -205,5 +207,8 @@ public class BarcodeDto implements Serializable {
return
(
""
+
plateSize
+
"X"
+
height
);
}
/**
* 料箱中的物料信息
*/
private
Map
<
String
,
BarcodeDto
>
subCodeMap
;
}
src/main/java/com/neotel/smfcore/core/barcode/rest/bean/dto/CodeDto.java
查看文件 @
e91fb98
...
...
@@ -4,7 +4,9 @@ import com.google.common.collect.Lists;
import
com.neotel.smfcore.core.barcode.enums.BARCODE_STATUS
;
import
com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE
;
import
com.neotel.smfcore.core.barcode.enums.SOLDER_STATUS
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.Getter
;
import
lombok.Setter
;
import
lombok.ToString
;
...
...
@@ -30,10 +32,16 @@ public class CodeDto implements Serializable {
@ApiModelProperty
(
"高度"
)
private
int
height
=
0
;
/**
* 原始条码
*/
@ApiModelProperty
(
"原始条码"
)
private
String
fullCode
;
@ApiModelProperty
(
"库位信息/仓位"
)
private
String
posName
;
@ApiModelProperty
(
"数量"
)
private
int
amount
;
@ApiModelProperty
(
"错误提示"
)
private
String
error
;
}
src/main/java/com/neotel/smfcore/core/barcode/service/manager/impl/BarcodeManagerImpl.java
查看文件 @
e91fb98
...
...
@@ -189,7 +189,7 @@ public class BarcodeManagerImpl implements IBarcodeManager {
// throw new ValidateException("批次不能为空");
}
if
(
barcode
.
getAmount
()
<
0
)
{
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"
batch
"
}
);
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"
amout
"
}
);
// throw new ValidateException("["+barcode.getBarcode()+"]barcode.error.amount.negative" );
}
if
(!
validateUnique
(
barcode
))
{
...
...
src/main/java/com/neotel/smfcore/core/barcode/service/manager/impl/ComponentManagerImpl.java
查看文件 @
e91fb98
...
...
@@ -60,7 +60,7 @@ public class ComponentManagerImpl implements IComponentManager {
@Override
public
List
<
Component
>
findByQuery
(
Query
query
)
{
return
componentDao
.
find
One
(
query
);
return
componentDao
.
find
ByQuery
(
query
);
}
@Override
...
...
@@ -71,6 +71,9 @@ public class ComponentManagerImpl implements IComponentManager {
Component
component
=
componentDao
.
findOneByCondition
(
new
String
[]{
"partNumber"
,
"provider"
},
new
String
[]{
partNumber
,
provider
});
if
(
component
==
null
)
{
component
=
componentDao
.
findOneByCondition
(
new
String
[]{
"partNumber"
,
"provider"
},
new
String
[]{
partNumber
,
null
});
if
(
component
==
null
){
component
=
componentDao
.
findOneByCondition
(
new
String
[]{
"partNumber"
,
"provider"
},
new
String
[]{
partNumber
,
""
});
}
if
(
component
!=
null
)
{
component
.
setProvider
(
provider
);
component
=
componentDao
.
save
(
component
);
...
...
src/main/java/com/neotel/smfcore/core/barcode/service/po/Barcode.java
查看文件 @
e91fb98
...
...
@@ -3,7 +3,6 @@ package com.neotel.smfcore.core.barcode.service.po;
import
com.google.common.collect.Lists
;
import
com.neotel.smfcore.common.base.BasePo
;
import
com.neotel.smfcore.common.utils.DateUtil
;
import
com.neotel.smfcore.common.utils.StorageConstants
;
import
com.neotel.smfcore.core.barcode.enums.BARCODE_STATUS
;
import
com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE
;
import
com.neotel.smfcore.core.barcode.enums.SOLDER_STATUS
;
...
...
@@ -13,8 +12,7 @@ import org.springframework.data.annotation.Transient;
import
org.springframework.data.mongodb.core.mapping.Document
;
import
java.io.Serializable
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.*
;
@Data
@Document
...
...
@@ -23,6 +21,11 @@ public class Barcode extends BasePo implements Serializable {
* 条码编号
*/
private
String
barcode
;
/**
* 扩展料盒的条码ID
*/
private
String
hostBarcodeId
;
/**
* 物料类型:PCB,锡膏,或其他
*/
...
...
@@ -73,16 +76,16 @@ public class Barcode extends BasePo implements Serializable {
/**
* 盘宽
*/
private
int
plateSize
=
0
;
private
int
plateSize
=
0
;
/**
* 盘高
*/
private
int
height
=
0
;
private
int
height
=
0
;
private
String
provider
;
/**
* 批次
*/
private
String
batch
;
private
String
batch
=
""
;
private
String
msl
;
//备用字段1(配套单号))或 family
...
...
@@ -156,19 +159,25 @@ public class Barcode extends BasePo implements Serializable {
*/
@Transient
private
List
<
String
>
relationCodes
;
/**
* 料盒条码:料盒内所有物料条码,key=barcode
*/
private
Map
<
String
,
Barcode
>
subCodeMap
;
/**
* 是否是锡膏
*/
public
boolean
isSolder
(){
public
boolean
isSolder
()
{
return
type
==
COMPONENT_TYPE
.
SOLDERPASTE
;
}
public
List
<
String
>
getRelationCodes
()
{
if
(
relationCodes
==
null
)
{
return
Lists
.
newArrayList
();
}
return
relationCodes
;
}
/**
* 上次使用时间(出入库时更改)
*/
...
...
@@ -197,6 +206,7 @@ public class Barcode extends BasePo implements Serializable {
* 原始条码
*/
private
String
fullCode
;
/**
* 添加相关联条码
*
...
...
@@ -208,12 +218,13 @@ public class Barcode extends BasePo implements Serializable {
}
relationCodes
.
add
(
relationCode
);
}
public
long
getPutInTime
()
{
return
putInTime
;
}
public
void
setPutInTime
(
long
putInTime
)
{
if
(
this
.
putInTime
==
-
1
)
{
if
(
this
.
putInTime
==
-
1
)
{
this
.
putInTime
=
putInTime
;
this
.
putInDate
=
new
Date
(
putInTime
);
}
...
...
@@ -229,8 +240,8 @@ public class Barcode extends BasePo implements Serializable {
return
putInDate
;
}
public
String
getPutInDateStr
(){
if
(
putInDate
==
null
)
{
public
String
getPutInDateStr
()
{
if
(
putInDate
==
null
)
{
return
""
;
}
return
DateUtil
.
toDateTimeString
(
putInDate
);
...
...
@@ -240,13 +251,13 @@ public class Barcode extends BasePo implements Serializable {
this
.
putInDate
=
putInDate
;
}
private
void
updateExpTime
(){
if
(
expTime
==
null
&&
maxStorageTime
!=
0
F
&&
putInTime
!=
-
1
)
{
private
void
updateExpTime
()
{
if
(
expTime
==
null
&&
maxStorageTime
!=
0
F
&&
putInTime
!=
-
1
)
{
Float
maxStorageTimeMill
=
maxStorageTime
*
60
*
60
*
1000
;
expTime
=
new
Date
(
putInTime
+
maxStorageTimeMill
.
longValue
());
if
(
expireDate
!=
null
)
{
if
(
expireDate
!=
null
)
{
//如果是在包装上的过期时间之前,使用包装上的过期时间
if
(
expireDate
.
getTime
()<
expTime
.
getTime
())
{
if
(
expireDate
.
getTime
()
<
expTime
.
getTime
())
{
expTime
=
expireDate
;
}
}
...
...
@@ -256,9 +267,9 @@ public class Barcode extends BasePo implements Serializable {
/**
* 到达回温的时间
*/
public
long
getReachWarmTime
(){
public
long
getReachWarmTime
()
{
long
reachWarmTime
=
System
.
currentTimeMillis
();
if
(
COMPONENT_TYPE
.
SOLDERPASTE
==
type
&&
putInTime
!=
-
1
)
{
if
(
COMPONENT_TYPE
.
SOLDERPASTE
==
type
&&
putInTime
!=
-
1
)
{
reachWarmTime
=
putInTime
+
warmTime
*
60
*
60
*
1000
;
}
return
reachWarmTime
;
...
...
@@ -267,22 +278,22 @@ public class Barcode extends BasePo implements Serializable {
/**
* 是否达到回温时间,只有锡膏才需要判定
*/
public
boolean
isReachedWarmTime
(){
public
boolean
isReachedWarmTime
()
{
return
getReachWarmTime
()
<=
System
.
currentTimeMillis
();
}
public
long
getInStoreHour
(){
if
(
putInTime
!=
-
1
)
{
public
long
getInStoreHour
()
{
if
(
putInTime
!=
-
1
)
{
return
(
System
.
currentTimeMillis
()
-
putInTime
)
/
60
/
60
/
1000
;
}
return
0
;
}
public
long
getInStoreMiniute
(){
if
(
putInTime
!=
-
1
)
{
public
long
getInStoreMiniute
()
{
if
(
putInTime
!=
-
1
)
{
long
minutes
=
(
System
.
currentTimeMillis
()
-
getPutInTime
())
/
60000
%
60
;
if
(
minutes
==
0
)
{
if
(
getInStoreHour
()
==
0
)
{
if
(
minutes
==
0
)
{
if
(
getInStoreHour
()
==
0
)
{
minutes
=
1
;
}
}
...
...
@@ -290,44 +301,47 @@ public class Barcode extends BasePo implements Serializable {
}
return
0
;
}
public
void
setCheckOutDate
(
Date
checkOutDate
,
String
opor
)
{
this
.
checkOutDate
=
checkOutDate
;
this
.
outOpor
=
opor
;
if
(
checkOutDate
!=
null
)
{
//出库时判断是否过期
if
(
checkOutDate
!=
null
)
{
//出库时判断是否过期
updateExpTime
();
if
(
expTime
!=
null
&&
checkOutDate
.
after
(
expTime
))
{
if
(
expTime
!=
null
&&
checkOutDate
.
after
(
expTime
))
{
//过期时间小于出库时间,说明出库的时候已经过期了
status
=
BARCODE_STATUS
.
OUT_EXPIRED
;
}
else
{
}
else
{
status
=
BARCODE_STATUS
.
OUT_NORMAL
;
}
}
}
public
void
setInOpor
(
String
inOpor
)
{
if
(
putInTime
==
-
1
)
{
if
(
putInTime
==
-
1
)
{
this
.
inOpor
=
inOpor
;
}
}
public
int
getSolderStatus
()
{
if
(
solderStatus
==
SOLDER_STATUS
.
REWARMING
)
{
if
(
solderStatus
==
SOLDER_STATUS
.
REWARMING
)
{
//如果状态是回温中,且回温时间已经大于warmTime,修改状态为待搅拌
long
now
=
System
.
currentTimeMillis
();
if
(
startWarmTime
-
now
>
warmTime
*
60
*
60
*
1000
)
{
if
(
startWarmTime
-
now
>
warmTime
*
60
*
60
*
1000
)
{
solderStatus
=
SOLDER_STATUS
.
TO_BE_MIXED
;
}
}
return
solderStatus
;
}
public
String
getNeedOutDateStr
(){
if
(
needOutDate
==
null
){
public
String
getNeedOutDateStr
()
{
if
(
needOutDate
==
null
)
{
return
""
;
}
return
DateUtil
.
toDateTimeString
(
needOutDate
);
}
public
String
getExpireDateStr
(){
if
(
expireDate
!=
null
)
{
public
String
getExpireDateStr
()
{
if
(
expireDate
!=
null
)
{
return
DateUtil
.
toDateString
(
expireDate
);
}
return
""
;
...
...
@@ -336,8 +350,8 @@ public class Barcode extends BasePo implements Serializable {
/**
* 是否已过期
*/
public
boolean
isExpired
(){
if
(
expireDate
!=
null
)
{
public
boolean
isExpired
()
{
if
(
expireDate
!=
null
)
{
return
expireDate
.
before
(
new
Date
());
}
return
false
;
...
...
@@ -346,12 +360,12 @@ public class Barcode extends BasePo implements Serializable {
/**
* 是否即将(3天内)过期,已过期后,此字段变为false
*/
public
boolean
isWillExpired
(){
if
(
isExpired
())
{
public
boolean
isWillExpired
()
{
if
(
isExpired
())
{
return
false
;
}
if
(
expireDate
!=
null
)
{
return
expireDate
.
before
(
DateUtil
.
addDays
(
new
Date
(),
3
));
if
(
expireDate
!=
null
)
{
return
expireDate
.
before
(
DateUtil
.
addDays
(
new
Date
(),
3
));
}
return
false
;
}
...
...
@@ -359,10 +373,38 @@ public class Barcode extends BasePo implements Serializable {
/**
* 是否是小料(7x8)的料
*/
public
boolean
isSmallReel
(){
if
(
getPlateSize
()
==
7
)
{
public
boolean
isSmallReel
()
{
if
(
getPlateSize
()
==
7
)
{
return
getHeight
()
==
8
||
getHeight
()
==
12
;
}
return
false
;
}
public
Barcode
getSubCode
(
String
pnStr
)
{
if
(
subCodeMap
==
null
)
{
return
null
;
}
for
(
Barcode
barcode
:
subCodeMap
.
values
()
)
{
if
(
barcode
.
getPartNumber
().
equals
(
pnStr
))
{
return
barcode
;
}
}
return
null
;
}
public
void
UpdateSubCode
(
Barcode
barcode
)
{
if
(
subCodeMap
==
null
)
{
subCodeMap
=
new
HashMap
<>();
}
if
(
barcode
.
getAmount
()
<=
0
)
{
if
(
subCodeMap
.
containsKey
(
barcode
.
getBarcode
()))
{
subCodeMap
.
remove
(
barcode
.
getBarcode
());
}
}
else
{
subCodeMap
.
put
(
barcode
.
getBarcode
(),
barcode
);
}
}
}
src/main/java/com/neotel/smfcore/core/barcode/utils/CodeResolve.java
查看文件 @
e91fb98
...
...
@@ -6,6 +6,7 @@ import com.neotel.smfcore.common.exception.ValidateException;
import
com.neotel.smfcore.common.utils.DateUtil
;
import
com.neotel.smfcore.core.barcode.bean.BarcodeRule
;
import
com.neotel.smfcore.core.barcode.bean.CodeBean
;
import
com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE
;
import
com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager
;
import
com.neotel.smfcore.core.barcode.service.manager.IComponentManager
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
...
...
@@ -13,6 +14,7 @@ import com.neotel.smfcore.core.barcode.service.po.Component;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.yaml.snakeyaml.comments.CommentType
;
import
java.util.Collection
;
import
java.util.Date
;
...
...
@@ -42,15 +44,18 @@ public class CodeResolve {
}
}
public
CodeBean
resolveSingleCode
(
String
barcodeItemStr
){
return
resolveSingleCode
(
barcodeItemStr
,
COMPONENT_TYPE
.
COMPONENT
);
}
/**
* 解析条码为单个 Barcode,自动保存到数据库
*/
public
CodeBean
resolveSingleCode
(
String
barcodeItemStr
){
public
CodeBean
resolveSingleCode
(
String
barcodeItemStr
,
int
type
){
if
(
barcodeRuleList
==
null
||
barcodeRuleList
.
isEmpty
()){
CodeBean
codeBean
=
new
CodeBean
();
codeBean
.
setBarcode
(
null
);
codeBean
.
setError
(
"error.barcode.noRules"
,
"解析规则未定义"
);
codeBean
.
setError
(
"
smfcode.
error.barcode.noRules"
,
"解析规则未定义"
);
codeBean
.
setCodeStr
(
barcodeItemStr
);
return
codeBean
;
}
...
...
@@ -112,19 +117,19 @@ public class CodeResolve {
barcode
.
setLabelAmount
(
currentLabelAmount
);
needUpdate
=
true
;
}
//
Date produceDate = barcodeFromRule.getProduceDate();
//
if(produceDate != null){
//
//抓取到了生产日期,未抓取到过期日期,重新设置过期日期
//
if(barcode.getExpireDate() == null){
//
if(validDay > 0){
//
log.info("重新设置"+codeBeanFromRule.getCodeStr()+"生产日期和过期日期");
//
Date expireDate = DateUtil.addDays(produceDate, validDay);
//
barcode.setExpireDate(expireDate);
//
barcode.setProduceDate(produceDate);
//
needUpdate = true;
//
}
//
}
//
}
Date
produceDate
=
barcodeFromRule
.
getProduceDate
();
if
(
produceDate
!=
null
){
//抓取到了生产日期,未抓取到过期日期,重新设置过期日期
if
(
barcode
.
getExpireDate
()
==
null
){
if
(
validDay
>
0
){
log
.
info
(
"重新设置"
+
codeBeanFromRule
.
getCodeStr
()+
"生产日期和过期日期"
);
Date
expireDate
=
DateUtil
.
addDays
(
produceDate
,
validDay
);
barcode
.
setExpireDate
(
expireDate
);
barcode
.
setProduceDate
(
produceDate
);
needUpdate
=
true
;
}
}
}
if
(
needUpdate
){
try
{
...
...
@@ -141,7 +146,20 @@ public class CodeResolve {
return
codeBeanFromRule
;
}
else
if
(
codeBeanFromRule
.
isValid
()){
//数据库中不存在,但解析成功
Barcode
barcodeFromRule
=
codeBeanFromRule
.
getBarcode
();
try
{
if
(
type
==
COMPONENT_TYPE
.
FIXTURE
||
type
==
COMPONENT_TYPE
.
OTHERS
){
//夹具类型,默认设置尺寸,数量
if
(!
codeBeanFromRule
.
hasReelSizeInfo
()){
codeBeanFromRule
.
setReelHeight
(
1
);
codeBeanFromRule
.
setReelWidth
(
1
);
barcodeFromRule
.
setAmount
(
1
);
barcodeFromRule
.
setHeight
(
1
);
barcodeFromRule
.
setPlateSize
(
1
);
}
}
//如果有料盘尺寸,重新设置料盘尺寸信息,没有档案时自动添加档案
if
(
codeBeanFromRule
.
hasReelSizeInfo
()){
//log.info("料盘["+barcode.getBarcode()+"]的尺寸信息从["+barcode.getPlateSize()+"x"+barcode.getHeight()+"]设置为["+codeBeanFromRule.getReelWidth()+"x"+codeBeanFromRule.getReelHeight()+"]");
...
...
@@ -192,28 +210,30 @@ public class CodeResolve {
}
}
barcode
=
barcodeManager
.
save
(
barcodeFromRule
);
codeBeanFromRule
.
setCodeStr
(
barcode
.
getBarcode
());
codeBeanFromRule
.
setBarcode
(
barcode
);
codeBeanFromRule
.
setError
(
null
,
null
);
}
}
catch
(
ValidateException
ve
){
//档案不存在
codeBeanFromRule
.
setError
(
"
error.barcode.pnNotExist"
,
new
String
[]{
barcodeFromRule
.
getPartNumber
()},
"x档案 "
+
barcodeFromRule
.
getPartNumber
()+
"
不存在"
);
log
.
warn
(
"
x
档案"
+
barcodeFromRule
.
getPartNumber
()+
"不存在"
);
codeBeanFromRule
.
setError
(
"
smfcode.error.barcode.pnNotExist"
,
new
String
[]{
barcodeFromRule
.
getPartNumber
()},
"档案 {0}
不存在"
);
log
.
warn
(
"档案"
+
barcodeFromRule
.
getPartNumber
()+
"不存在"
);
}
//解析成功了,直接返回
return
codeBeanFromRule
;
}
else
{
//在数据库中不存在,且未解析成功,用其他规则再解析
codeBeanFromRule
.
setError
(
"
error.barcode.invalid"
,
new
String
[]{
barcodeItemStr
},
barcodeItemStr
+
"
不是有效的条码"
);
codeBeanFromRule
.
setError
(
"
smfcode.error.barcode.invalid"
,
new
String
[]{
barcodeItemStr
},
"{0}
不是有效的条码"
);
}
}
if
(
codeBeanFromRule
==
null
){
codeBeanFromRule
=
new
CodeBean
();
codeBeanFromRule
.
setBarcode
(
null
);
codeBeanFromRule
.
setError
(
"
error.barcode.invalid"
,
new
String
[]{
barcodeItemStr
},
barcodeItemStr
+
"
不是有效的条码"
);
codeBeanFromRule
.
setError
(
"
smfcode.error.barcode.invalid"
,
new
String
[]{
barcodeItemStr
},
"{0}
不是有效的条码"
);
codeBeanFromRule
.
setCodeStr
(
barcodeItemStr
);
return
codeBeanFromRule
;
}
...
...
@@ -221,7 +241,6 @@ public class CodeResolve {
}
/**
* 解析条码为单个 Barcode
*/
...
...
src/main/java/com/neotel/smfcore/core/device/bean/StatusBean.java
查看文件 @
e91fb98
...
...
@@ -136,10 +136,10 @@ public class StatusBean {
}
/**
* 是否超时(
3
秒)
* 是否超时(
10
秒)
*/
public
boolean
timeOut
(){
return
System
.
currentTimeMillis
()
-
time
>
10
*
1000
;
return
(
System
.
currentTimeMillis
()
-
time
)
>(
10
*
1000
)
;
}
/**
...
...
src/main/java/com/neotel/smfcore/core/device/handler/impl/AccShelfHandler.java
0 → 100644
查看文件 @
e91fb98
package
com
.
neotel
.
smfcore
.
core
.
device
.
handler
.
impl
;
import
com.neotel.smfcore.core.device.api.IOpAuthApi
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.order.enums.ORDER_COLOR
;
import
com.neotel.smfcore.core.storage.enums.DeviceType
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
lombok.extern.slf4j.Slf4j
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.*
;
@Slf4j
public
class
AccShelfHandler
extends
BaseDeviceHandler
{
public
AccShelfHandler
(
List
<
IOpAuthApi
>
apiList
)
{
super
(
apiList
);
}
@Override
public
StatusBean
handleClientRequest
(
StatusBean
statusBean
,
HttpServletRequest
request
)
{
handleMsg
(
statusBean
);
statusBean
=
saveAlarmAndHumidity
(
statusBean
);
//亮灯
Collection
<
DataLog
>
queueTasks
=
taskService
.
getQueueTasks
(
statusBean
.
getCid
());
for
(
DataLog
queueTask
:
queueTasks
)
{
if
(
queueTask
.
isWait
()){
queueTask
.
setStatus
(
OP_STATUS
.
EXECUTING
.
name
());
taskService
.
updateQueueTask
(
queueTask
);
String
rgb
=
queueTask
.
getLightColor
();
ORDER_COLOR
color
=
ORDER_COLOR
.
fromRgb
(
rgb
);
if
(
color
==
null
){
if
(
queueTask
.
isPutInTask
()){
color
=
ORDER_COLOR
.
DARKGREEN
;
}
else
{
color
=
ORDER_COLOR
.
BLUE
;
}
}
statusBean
.
addData
(
"open"
,
queueTask
.
getPosName
()+
"="
+
color
.
name
());
log
.
info
(
"库位["
+
queueTask
.
getPosName
()+
"]+亮灯:"
+
color
.
name
());
}
}
return
statusBean
;
}
@Override
public
DeviceType
getDeviceType
()
{
return
DeviceType
.
ACCSHELF
;
}
}
src/main/java/com/neotel/smfcore/core/device/handler/impl/BaseDeviceHandler.java
查看文件 @
e91fb98
package
com
.
neotel
.
smfcore
.
core
.
device
.
handler
.
impl
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.base.Strings
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Maps
;
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.StorageConstants
;
import
com.neotel.smfcore.core.barcode.bean.CodeBean
;
import
com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE
;
...
...
@@ -515,10 +518,10 @@ public class BaseDeviceHandler implements IDeviceHandler {
protected
void
finishedOutPos
(
String
cid
,
String
posName
,
int
executeTime
)
throws
ValidateException
{
DataLog
task
=
taskService
.
findExecutingTask
(
cid
,
posName
);
if
(
task
!=
null
&&
task
.
isCheckOutTask
())
{
if
(
executeTime
>
0
)
{
if
(
executeTime
>
0
)
{
task
.
setExecuteTime
(
executeTime
);
}
log
.
info
(
task
.
getBarcode
()
+
"出仓位["
+
task
.
getPosName
()
+
"]完成,执行时间["
+
executeTime
+
"]秒"
);
log
.
info
(
task
.
getBarcode
()
+
"出仓位["
+
task
.
getPosName
()
+
"]完成,执行时间["
+
executeTime
+
"]秒"
);
DataLog
cancelTask
=
taskService
.
findFinishedTask
(
cid
,
posName
);
if
(
cancelTask
!=
null
&&
cancelTask
.
isCancel
())
{
//将相同库位已经取消的任务从完成队列里删除
...
...
@@ -532,17 +535,30 @@ public class BaseDeviceHandler implements IDeviceHandler {
task
=
taskService
.
findFinishedTask
(
cid
,
posName
);
if
(
task
!=
null
&&
task
.
isCheckOutTask
())
{
if
(
task
.
isCancel
())
{
//被取消的任务,客户端发完成信号过来,修改取消状态为已完成
if
(
executeTime
>
0
)
{
if
(
executeTime
>
0
)
{
task
.
setExecuteTime
(
executeTime
);
}
log
.
info
(
task
.
getBarcode
()
+
"出仓位["
+
task
.
getPosName
()
+
"]完成,但任务已被取消,修改为完成,执行时间["
+
executeTime
+
"]秒"
);
log
.
info
(
task
.
getBarcode
()
+
"出仓位["
+
task
.
getPosName
()
+
"]完成,但任务已被取消,修改为完成,执行时间["
+
executeTime
+
"]秒"
);
updateCheckoutData
(
task
);
}
}
else
{
StoragePos
storagePos
=
storagePosManager
.
getByPosName
(
posName
);
if
(
storagePos
!=
null
&&
storagePos
.
isUsed
())
{
String
barcode
=
storagePos
.
getBarcode
().
getBarcode
();
//查找库位是否为空,如果库位有料,调用清理手动出库的方法清理库存
if
(
ObjectUtil
.
isNotEmpty
(
barcode
))
{
log
.
info
(
cid
+
"出仓位["
+
posName
+
"]完成时任务不存在,清理库位中的库存["
+
barcode
+
"]"
);
taskService
.
addTaskToFinished
(
storagePos
,
null
,
cid
+
"-clear"
);
}
else
{
log
.
info
(
cid
+
"出仓位["
+
posName
+
"]完成时任务不存在,清理库位失败,条码为空"
);
}
}
else
{
log
.
warn
(
cid
+
"出仓位["
+
posName
+
"]完成时任务不存在"
);
}
}
}
}
/**
* 入库完成时,更新库位的最小入库时间
* @param posId
...
...
src/main/java/com/neotel/smfcore/core/device/handler/impl/LineBoxHandler.java
0 → 100644
查看文件 @
e91fb98
package
com
.
neotel
.
smfcore
.
core
.
device
.
handler
.
impl
;
import
com.neotel.smfcore.core.device.api.IOpAuthApi
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.storage.enums.DeviceType
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.List
;
@Service
@Slf4j
public
class
LineBoxHandler
extends
BaseDeviceHandler
{
public
LineBoxHandler
(
List
<
IOpAuthApi
>
apiList
)
{
super
(
apiList
);
}
@Override
public
StatusBean
handleClientRequest
(
StatusBean
statusBean
,
HttpServletRequest
request
)
{
String
cid
=
statusBean
.
getCid
();
Storage
storage
=
dataCache
.
getStorage
(
cid
);
if
(
storage
==
null
)
{
log
.
error
(
"料仓cid: ["
+
cid
+
"]不存在"
);
return
null
;
}
handleMsg
(
statusBean
);
statusBean
=
saveAlarmAndHumidity
(
statusBean
);
statusBean
=
handleInOutFinished
(
statusBean
);
StatusBean
humidityResult
=
handleHumidity
(
statusBean
);
if
(
humidityResult
!=
null
)
{
return
humidityResult
;
}
if
(
statusBean
.
getOp
()
==
OP
.
PUT_IN
)
{
log
.
debug
(
"入库:"
+
statusBean
.
toString
());
statusBean
=
putInLine
(
storage
,
statusBean
);
}
else
{
//查看是否有要出库的操作
statusBean
=
taskService
.
checkOut
(
storage
,
statusBean
);
}
return
statusBean
;
}
@Override
public
DeviceType
getDeviceType
()
{
return
DeviceType
.
LINE
;
}
}
src/main/java/com/neotel/smfcore/core/device/handler/impl/SensorShelfHandler.java
查看文件 @
e91fb98
package
com
.
neotel
.
smfcore
.
core
.
device
.
handler
.
impl
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.base.Strings
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Maps
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
...
...
@@ -20,6 +22,7 @@ import com.neotel.smfcore.core.storage.enums.DeviceType;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.DevicesStatusUtil
;
import
com.neotel.smfcore.core.system.websocket.MsgType
;
import
com.neotel.smfcore.core.system.websocket.SocketMsg
;
import
com.neotel.smfcore.core.system.websocket.WebSocketServer
;
...
...
@@ -175,6 +178,14 @@ public class SensorShelfHandler extends BaseDeviceHandler {
String
[]
hasReelPosList
=
request
.
getParameterValues
(
"hasReelPosList"
);
String
[]
noReelPosList
=
request
.
getParameterValues
(
"noReelPosList"
);
String
[]
hasReelPosErrorList
=
request
.
getParameterValues
(
"hasReelPosErrorList"
);
String
[]
noReelPosErrorList
=
request
.
getParameterValues
(
"noReelPosErrorList"
);
List
<
List
<
String
>>
data
=
new
ArrayList
<>();
data
.
add
(
Arrays
.
asList
(
hasReelPosErrorList
)
);
data
.
add
(
Arrays
.
asList
(
noReelPosErrorList
));
DevicesStatusUtil
.
updateDeviceData
(
cid
,
data
);
List
<
String
>
inOkList
=
new
ArrayList
<>();
List
<
String
>
inNgList
=
new
ArrayList
<>();
List
<
String
>
outOkList
=
new
ArrayList
<>();
...
...
@@ -198,7 +209,16 @@ public class SensorShelfHandler extends BaseDeviceHandler {
}
else
{
Collection
<
DataLog
>
queueTasks
=
taskService
.
getQueueTasks
();
for
(
DataLog
queueTask
:
queueTasks
)
{
if
(
queueTask
.
isPutInTask
()
&&
queueTask
.
getGroupId
().
equals
(
groupId
)){
boolean
isPutInTask
=
false
;
if
(
ObjectUtil
.
isNotEmpty
(
queueTask
.
getStorageId
())
){
if
(
queueTask
.
isPutInTask
()&&
queueTask
.
getStorageId
().
equals
(
storage
.
getId
())){
isPutInTask
=
true
;
}
}
else
if
(
queueTask
.
isPutInTask
()
&&
queueTask
.
getGroupId
().
equals
(
groupId
))
{
isPutInTask
=
true
;
}
if
(
isPutInTask
)
{
queueTask
.
setCid
(
cid
);
queueTask
.
setPosId
(
pos
.
getId
());
queueTask
.
setPosName
(
pos
.
getPosName
());
...
...
@@ -206,15 +226,15 @@ public class SensorShelfHandler extends BaseDeviceHandler {
queueTask
.
setStorageName
(
storage
.
getName
());
try
{
//入库完成,发送入库完成请求
super
.
finishedPutIn
(
cid
,
pos
.
getPosName
());
super
.
finishedPutIn
(
cid
,
pos
.
getPosName
());
inOkList
.
add
(
hasReelPosList
[
0
]);
String
msg
=
queueTask
.
getBarcode
()+
"入库到"
+
pos
.
getPosName
()+
"成功"
;
String
msg
=
queueTask
.
getBarcode
()
+
"入库到"
+
pos
.
getPosName
()
+
"成功"
;
log
.
error
(
msg
);
WebSocketServer
.
sendGroupMsg
(
groupId
,
new
SocketMsg
(
msg
,
MsgType
.
INFO
));
WebSocketServer
.
sendGroupMsg
(
groupId
,
new
SocketMsg
(
msg
,
MsgType
.
INFO
));
break
;
}
catch
(
Exception
e
)
{
log
.
error
(
"入库出错"
,
e
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.inputError"
,
"入库出错:{0}"
,
new
String
[]{
e
.
getMessage
()});
log
.
error
(
"入库出错"
,
e
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.inputError"
,
"入库出错:{0}"
,
new
String
[]{
e
.
getMessage
()});
}
}
}
...
...
src/main/java/com/neotel/smfcore/core/device/handler/impl/XLCBoxHandler.java
0 → 100644
查看文件 @
e91fb98
package
com
.
neotel
.
smfcore
.
core
.
device
.
handler
.
impl
;
import
com.google.common.base.Strings
;
import
com.neotel.smfcore.common.utils.StorageConstants
;
import
com.neotel.smfcore.core.device.api.IOpAuthApi
;
import
com.neotel.smfcore.core.device.bean.BoxStatusBean
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
import
com.neotel.smfcore.core.device.enums.BOX_STATUS
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.storage.enums.DeviceType
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.Collection
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
@Service
@Slf4j
public
class
XLCBoxHandler
extends
BaseDeviceHandler
{
public
XLCBoxHandler
(
List
<
IOpAuthApi
>
apiList
)
{
super
(
apiList
);
}
/**
* 当前出入库操作的库位(key为cid, value为当前执行的任务)
*/
private
Map
<
String
,
DataLog
>
operateTaskMap
=
new
ConcurrentHashMap
<>();
/**
* 获取当前正在执行的任务
*/
public
DataLog
getCurrentTask
(
String
cid
){
return
operateTaskMap
.
get
(
cid
);
}
/**
* 更新或清理(task为null)当前正在执行的任务
*/
public
void
updateCurrentTask
(
String
cid
,
DataLog
task
){
if
(
task
==
null
){
operateTaskMap
.
remove
(
cid
);
}
else
{
operateTaskMap
.
put
(
cid
,
task
);
}
}
@Override
public
StatusBean
handleClientRequest
(
StatusBean
statusBean
,
HttpServletRequest
request
)
{
handleMsg
(
statusBean
);
statusBean
=
saveAlarmAndHumidity
(
statusBean
);
statusBean
=
handleXLCStatusBean
(
statusBean
);
statusBean
=
handleInOutFinished
(
statusBean
);
StatusBean
humidityResult
=
handleHumidity
(
statusBean
);
if
(
humidityResult
!=
null
){
return
humidityResult
;
}
return
statusBean
;
}
private
StatusBean
handleXLCStatusBean
(
StatusBean
statusBean
){
String
cid
=
statusBean
.
getCid
();
Collection
<
DataLog
>
queueTasks
=
taskService
.
getQueueTasks
(
cid
);
Map
<
String
,
BoxStatusBean
>
statusOfBoxes
=
statusBean
.
getBoxStatus
();
if
(
statusOfBoxes
!=
null
)
{
for
(
BoxStatusBean
boxStatus
:
statusOfBoxes
.
values
())
{
try
{
//出库入库动作完成处理
int
status
=
boxStatus
.
getStatus
();
String
posName
=
boxStatus
.
getPosId
();
if
(!
Strings
.
isNullOrEmpty
(
posName
)){
//客户端发一次完成之后,会发空的 posName,不需要处理
if
(
BOX_STATUS
.
OUT_FINISHED
==
status
)
{
//出仓完成,设置当前任务
DataLog
currentTask
=
null
;
for
(
DataLog
queueTask
:
queueTasks
)
{
if
(
queueTask
.
isExecuting
()
&&
queueTask
.
getPosName
().
equals
(
posName
)){
currentTask
=
queueTask
;
String
doorInfo
=
statusBean
.
getFromData
(
"door"
);
if
(
doorInfo
==
null
){
doorInfo
=
"1"
;
}
currentTask
.
setSubSourceId
(
doorInfo
);
taskService
.
updateQueueTask
(
currentTask
);
break
;
}
}
DataLog
cacheTask
=
operateTaskMap
.
get
(
cid
);
if
(
currentTask
!=
null
){
if
(
cacheTask
==
null
||
!
cacheTask
.
getId
().
equals
(
currentTask
.
getId
())){
updateCurrentTask
(
currentTask
.
getCid
(),
currentTask
);
}
}
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"方仓到位时出错"
,
e
);
}
}
}
if
(
statusBean
.
getStatus
()
==
StorageConstants
.
STATUS
.
READY
){
DataLog
currentTask
=
getCurrentTask
(
cid
);
if
(
currentTask
!=
null
){
//当前有任务未完成,暂不执行其他任务
return
statusBean
;
}
for
(
DataLog
task
:
queueTasks
)
{
if
(
cid
.
equals
(
task
.
getCid
())
&&
task
.
isWait
())
{
StoragePos
pos
=
storagePosManager
.
getByPosName
(
task
.
getPosName
());
if
(
pos
.
isExpandPos
()){
continue
;
}
if
(
task
.
isPutInTask
()){
statusBean
.
setOp
(
OP
.
PUT_IN
);
statusBean
.
addData
(
"door"
,
task
.
getSubSourceId
());
}
else
if
(
task
.
isCheckOutTask
()){
statusBean
.
setOp
(
OP
.
CHECKOUT
);
}
statusBean
.
addPosInfo
(
""
,
pos
.
getPosName
(),
pos
.
getW
(),
pos
.
getH
(),
false
);
log
.
info
(
"发送["
+
task
.
getType
()+
"]任务["
+
pos
.
getPosName
()+
"]到客户端door="
+
task
.
getSubSourceId
());
task
.
setStatus
(
OP_STATUS
.
EXECUTING
.
name
());
taskService
.
updateQueueTask
(
task
);
return
statusBean
;
}
}
}
return
statusBean
;
}
@Override
public
DeviceType
getDeviceType
()
{
return
DeviceType
.
SMD_XLC
;
}
}
src/main/java/com/neotel/smfcore/core/device/rest/DeviceController.java
查看文件 @
e91fb98
...
...
@@ -214,20 +214,21 @@ public class DeviceController {
resultMap
.
put
(
"result"
,
"0"
);
resultMap
.
put
(
"msg"
,
""
);
okMsg
=
"["
+
rfid
+
"]["
+
barcode
.
getBarcode
()+
"]锁定库位["
+
pos
.
getPosName
()+
"]"
;
okMsg
=
"["
+
rfid
+
"]["
+
barcode
.
getBarcode
()+
"]锁定库位["
+
pos
.
getPosName
()+
"]优先级["
+
pos
.
getPriority
()+
"] 上个库位号["
+
lastPosId
+
"]"
;
ReelLockPosInfo
oldLockInfo
=
ReelLockPosUtil
.
getLockPosInfoByCode
(
barcode
.
getBarcode
());
if
(
oldLockInfo
!=
null
){
if
(!
oldLockInfo
.
getBarcode
().
equals
(
barcode
.
getBarcode
()))
{
if
(
oldLockInfo
!=
null
)
{
if
(!
oldLockInfo
.
getBarcode
().
equals
(
barcode
.
getBarcode
()))
{
String
result
=
"-1"
;
okMsg
=
rfid
+
"["
+
rfidLoc
+
"]["
+
barcode
.
getBarcode
()+
"]锁定库位["
+
pos
.
getPosName
()+
"],清理旧有锁定信息"
;
resultMap
.
put
(
"result"
,
result
);
resultMap
.
put
(
"msg"
,
okMsg
);
okMsg
=
rfid
+
"["
+
rfidLoc
+
"]["
+
barcode
.
getBarcode
()
+
"]锁定库位["
+
pos
.
getPosName
()
+
"],清理旧有锁定信息"
;
resultMap
.
put
(
"result"
,
result
);
resultMap
.
put
(
"msg"
,
okMsg
);
//已经锁定过库位,但不是同一个条码,需要把对应位置的锁定信息清理掉
ReelLockPosUtil
.
removeReelLockPosInfo
(
oldLockInfo
.
getBarcode
());
log
.
info
(
"清理锁定库位:库位号["
+
oldLockInfo
.
getLockPosName
()+
"]上物料["
+
oldLockInfo
.
getBarcode
()+
"]锁定的库位"
);
log
.
info
(
"清理锁定库位:库位号["
+
oldLockInfo
.
getLockPosName
()
+
"]上物料["
+
oldLockInfo
.
getBarcode
()
+
"]锁定的库位"
);
}
}
...
...
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
查看文件 @
e91fb98
...
...
@@ -527,4 +527,17 @@ public class DataCache {
}
return
cidList
;
}
public
List
<
String
>
getAvailableStorageIds
(){
List
<
String
>
availableStorageIds
=
new
ArrayList
<>();
for
(
Storage
storage
:
getAllStorage
().
values
())
{
//默认所有料仓可用
// StatusBean statusBean =dataCache. getStatus(storage.getCid());
// if (statusBean.isAvailable())
{
availableStorageIds
.
add
(
storage
.
getId
());
}
}
return
availableStorageIds
;
}
}
src/main/java/com/neotel/smfcore/core/kanban/rest/BoxKanbanController.java
查看文件 @
e91fb98
此文件的差异被折叠,
点击展开。
src/main/java/com/neotel/smfcore/core/kanban/rest/bean/dto/BoxStatusDto.java
查看文件 @
e91fb98
package
com
.
neotel
.
smfcore
.
core
.
kanban
.
rest
.
bean
.
dto
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.storage.bean.UsageItem
;
import
com.neotel.smfcore.core.storage.enums.DeviceType
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
@Data
@AllArgsConstructor
@NoArgsConstructor
...
...
@@ -24,13 +29,6 @@ public class BoxStatusDto {
@ApiModelProperty
(
"是否在线"
)
private
boolean
onLine
=
false
;
/// <summary>
/// 单台BOX状态
///1=正常运行中
/// 2=急停,3=故障,4=警告,5=调试中
/// 6入库执行中,7入仓位完成,8入库失败
/// 9出库执行中,10出仓位完成,11出库失败
/// </summary>
@ApiModelProperty
(
"单台BOX状态,0=离线,1=正常运行中, 2=急停,3=故障,4=警告,5=调试中,6入库执行中,7入仓位完成,8入库失败, 9出库执行中,10出仓位完成,11出库失败"
)
private
int
status
=
0
;
@ApiModelProperty
(
"温度"
)
...
...
@@ -51,10 +49,6 @@ public class BoxStatusDto {
@ApiModelProperty
(
"当前执行任务的,0=无,1=入库,2=出库"
)
private
int
currTaskType
=
0
;
/**
* 当前执行任务的 任务状态:OP_STATUS:NONE,WAIT=等待,EXECUTING=正在执行,PAUSE=已暂停,FINISHED=已完成,CANCEL=已取消,END=已结束
*/
@ApiModelProperty
(
"当前执行任务的 任务状态:OP_STATUS:NONE,WAIT=等待,EXECUTING=正在执行,PAUSE=已暂停,FINISHED=已完成,CANCEL=已取消,END=已结束"
)
private
String
currTaskStatus
;
...
...
@@ -70,4 +64,10 @@ public class BoxStatusDto {
@ApiModelProperty
(
"料仓类型"
)
private
String
type
=
DeviceType
.
AUTO
.
name
();
@ApiModelProperty
(
"使用情况"
)
private
Map
<
String
,
UsageItem
>
usageMap
=
new
ConcurrentHashMap
<>();
@ApiModelProperty
(
"操作信息"
)
private
Map
<
String
,
String
>
data
=
new
HashMap
<>();
}
src/main/java/com/neotel/smfcore/core/kanban/rest/bean/dto/ShelfPosErrorDto.java
0 → 100644
查看文件 @
e91fb98
package
com
.
neotel
.
smfcore
.
core
.
kanban
.
rest
.
bean
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
import
lombok.Setter
;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public
class
ShelfPosErrorDto
{
@ApiModelProperty
(
"库位号ID"
)
private
String
posId
;
@ApiModelProperty
(
"库位号"
)
private
String
posName
;
@ApiModelProperty
(
"条码信息"
)
private
String
barcode
;
@ApiModelProperty
(
"物料编号"
)
private
String
partNumber
;
@ApiModelProperty
(
"信号状态"
)
private
int
signalState
;
}
src/main/java/com/neotel/smfcore/core/language/util/MessageUtils.java
查看文件 @
e91fb98
...
...
@@ -17,6 +17,10 @@ import java.util.Locale;
@Slf4j
public
class
MessageUtils
{
public
static
Locale
getDefaultLocal
(){
return
new
Locale
(
"zh-CH"
);
}
private
static
MessageSource
messageSource
;
public
MessageUtils
(
MessageSource
messageSource
)
{
...
...
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
e91fb98
此文件的差异被折叠,
点击展开。
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
查看文件 @
e91fb98
此文件的差异被折叠,
点击展开。
src/main/java/com/neotel/smfcore/core/order/rest/bean/dto/OrderDto.java
查看文件 @
e91fb98
...
...
@@ -33,6 +33,11 @@ public class OrderDto implements Serializable {
@ApiModelProperty
(
"当前任务已完成盘数"
)
private
int
finishedReelCount
=
0
;
@ApiModelProperty
(
"累计任务盘数"
)
private
int
totalTaskReelCount
=
0
;
@ApiModelProperty
(
"累计任务已完成盘数"
)
private
int
totalFinishedReelCount
=
0
;
/**
* 订单状态
* 0=新建工单
...
...
@@ -52,28 +57,18 @@ public class OrderDto implements Serializable {
@ApiModelProperty
(
"出库状态, 2表示已完成"
)
private
boolean
closed
=
false
;
/**
* 工单来源
*/
@ApiModelProperty
(
"工单来源"
)
private
String
source
=
""
;
/**
* 任务完成时间(用于关闭页面显示)
*/
@ApiModelProperty
(
"任务完成时间(用于关闭页面显示)"
)
@Transient
private
long
taskFinishedTime
=
-
1
;
/**
* 套(倍)数
*/
@ApiModelProperty
(
"套(倍)数"
)
private
float
orderTimes
=
1
f
;
/**
* 订单的详细信息
*/
@Transient
@ApiModelProperty
(
"订单的详细信息"
)
private
List
<
OrderItemDto
>
orderItems
;
...
...
@@ -84,4 +79,8 @@ public class OrderDto implements Serializable {
@ApiModelProperty
(
"创建时间"
)
private
Date
createDate
=
new
Date
();
@ApiModelProperty
(
"工单线别"
)
private
String
line
=
""
;
}
src/main/java/com/neotel/smfcore/core/order/service/manager/ILiteOrderManager.java
查看文件 @
e91fb98
...
...
@@ -5,7 +5,11 @@ import com.neotel.smfcore.common.exception.ValidateException;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.order.service.po.LiteOrder
;
import
java.util.List
;
public
interface
ILiteOrderManager
extends
IBaseManager
<
LiteOrder
>
{
LiteOrder
findByOrderNo
(
String
orderNo
);
LiteOrder
createWithItems
(
LiteOrder
liteOrder
)
throws
ValidateException
;
List
<
LiteOrder
>
findUnEndOrdersList
();
}
src/main/java/com/neotel/smfcore/core/order/service/manager/impl/LiteOrderManagerImpl.java
查看文件 @
e91fb98
...
...
@@ -6,6 +6,7 @@ import com.neotel.smfcore.common.exception.ValidateException;
import
com.neotel.smfcore.core.barcode.service.dao.IBarcodeDao
;
import
com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.order.enums.LITEORDER_STATUS
;
import
com.neotel.smfcore.core.order.service.dao.ILiteOrderDao
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderManager
;
...
...
@@ -15,6 +16,7 @@ import lombok.extern.slf4j.Slf4j;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.stereotype.Service
;
...
...
@@ -76,6 +78,22 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
}
@Override
public
List
<
LiteOrder
>
findUnEndOrdersList
()
{
Criteria
c
=
new
Criteria
();
c
.
and
(
"status"
).
nin
(
LITEORDER_STATUS
.
CLOSED
);
Query
query
=
new
Query
(
c
);
List
<
LiteOrder
>
orders
=
findByQuery
(
query
);
for
(
LiteOrder
order
:
orders
)
{
if
(
order
!=
null
&&
order
.
getOrderItems
()
==
null
)
{
List
<
LiteOrderItem
>
items
=
liteOrderItemManager
.
findOrderItems
(
order
.
getOrderNo
());
order
.
setOrderItems
(
items
);
}
}
return
orders
;
}
@Override
public
PageData
<
LiteOrder
>
findByPage
(
Query
query
,
Pageable
pageable
)
{
int
totalCount
=
liteOrderDao
.
countByQuery
(
query
);
List
<
LiteOrder
>
list
=
liteOrderDao
.
findByQuery
(
query
,
pageable
);
...
...
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrder.java
查看文件 @
e91fb98
...
...
@@ -25,10 +25,14 @@ public class LiteOrder extends BasePo implements Serializable {
}
/**
*
订
单号
*
需求
单号
*/
private
String
orderNo
;
/**
* 工单号
*/
private
String
so
;
/**
* 当前任务盘数
*/
private
int
taskReelCount
=
0
;
...
...
@@ -39,6 +43,16 @@ public class LiteOrder extends BasePo implements Serializable {
private
int
finishedReelCount
=
0
;
/**
* 累计任务盘数
*/
private
int
totalTaskReelCount
=
0
;
/**
* 累计任务已完成盘数
*/
private
int
totalFinishedReelCount
=
0
;
/**
* 订单状态
*/
private
int
status
=
LITEORDER_STATUS
.
NEW
;
...
...
@@ -48,13 +62,6 @@ public class LiteOrder extends BasePo implements Serializable {
*/
private
boolean
closed
=
false
;
public
void
setClosed
(
boolean
value
){
this
.
closed
=
value
;
if
(
value
){
setStatus
(
LITEORDER_STATUS
.
CLOSED
);
}
}
/**
* 工单来源
...
...
@@ -62,6 +69,11 @@ public class LiteOrder extends BasePo implements Serializable {
private
String
source
=
""
;
/**
* 线别,AGV运送时使用此值做为目的地
*/
private
String
line
=
""
;
/**
* 任务完成时间(用于关闭页面显示)
*/
@Transient
...
...
@@ -88,16 +100,25 @@ public class LiteOrder extends BasePo implements Serializable {
*/
private
Date
sdate
=
new
Date
();
public
void
setClosed
(
boolean
value
){
this
.
closed
=
value
;
if
(
value
){
setStatus
(
LITEORDER_STATUS
.
CLOSED
);
}
}
/**
* 结束当前的任务
*/
public
void
finishedTasks
(){
if
(
isOutOne
()){
setStatus
(
LITEORDER_STATUS
.
ONE_FINISHED
);
// setStatus(LITEORDER_STATUS.ONE_FINISHED);
setClosed
(
true
);
}
else
if
(
isOutBom
()){
setStatus
(
LITEORDER_STATUS
.
BOM_FINISHED
);
}
else
if
(
isOutTails
()){
setStatus
(
LITEORDER_STATUS
.
TAILS_FINISHED
);
// setStatus(LITEORDER_STATUS.TAILS_FINISHED);
setClosed
(
true
);
}
setTaskFinishedTime
(
System
.
currentTimeMillis
());
...
...
@@ -150,6 +171,13 @@ public class LiteOrder extends BasePo implements Serializable {
this
.
taskReelCount
=
taskReelCount
;
}
public
void
setTotalTaskReelCount
(
int
totalReelCount
){
if
(
totalReelCount
<
0
){
totalReelCount
=
0
;
}
this
.
totalTaskReelCount
=
totalReelCount
;
}
/**
* 是否需要展示(已完成的,过20 秒自动清除)
...
...
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrderItem.java
查看文件 @
e91fb98
...
...
@@ -20,24 +20,44 @@ public class LiteOrderItem extends BasePo implements Serializable {
private
String
ri
;
//需求数量
/**
* 总需求数量
*/
private
int
needNum
=
0
;
/**
* 需求料盘数
*
总
需求料盘数
*/
private
int
needReelCount
=
0
;
//已出数量
/**
* 当前任务已出数量
*/
private
int
outNum
=
0
;
//已出盘数
/**
* 当前任务已出盘数
*/
private
int
outReelCount
=
0
;
/**
* 累计已出数量
*/
private
int
totalOutNum
=
0
;
/**
* 累计已出盘数
*/
private
int
totalOutReelCount
=
0
;
/**
* 订单信息
*/
private
String
orderNo
=
""
;
/**
* 站位编号
*/
private
String
slotNum
=
""
;
/**
* 站位信息
...
...
src/main/java/com/neotel/smfcore/core/storage/enums/DeviceType.java
查看文件 @
e91fb98
...
...
@@ -89,9 +89,18 @@ public enum DeviceType {
* 13 SMD-DUO(DUO料仓)
*/
SMD_DUO
(
"storage.type.smdDuo"
),
/**
* 14 放料箱的方仓
*/
SMD_XLC
(
"storage.type.smdXlc"
),
/**
* 15 放料盘的方仓
*/
SMD_XLR
(
"storage.type.smdXlr"
),
/**
* 1
4
(默认料仓)
* 1
5
(默认料仓)
*/
DEFAULT
(
"storage.type.default"
)
;
...
...
src/main/java/com/neotel/smfcore/core/storage/rest/MaterialBoxController.java
0 → 100644
查看文件 @
e91fb98
此文件的差异被折叠,
点击展开。
src/main/java/com/neotel/smfcore/core/storage/rest/MaterialController.java
查看文件 @
e91fb98
...
...
@@ -7,8 +7,11 @@ import com.neotel.smfcore.common.bean.PageData;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.QueryHelp
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.common.utils.StorageConstants
;
import
com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE
;
import
com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.storage.bean.InventoryItem
;
import
com.neotel.smfcore.core.storage.rest.dto.*
;
...
...
@@ -21,6 +24,7 @@ import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import
com.neotel.smfcore.core.storage.service.po.Label
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
...
...
@@ -61,6 +65,9 @@ public class MaterialController {
@Autowired
private
final
ILabelManager
labelManager
;
@Autowired
private
final
IBarcodeManager
barcodeManager
;
@ApiOperation
(
"策略出库获取库存列表"
)
@GetMapping
(
value
=
"/inventory"
)
@PreAuthorize
(
"@el.check('tacticsOuput')"
)
...
...
@@ -153,24 +160,24 @@ public class MaterialController {
@PostMapping
(
value
=
"/labelOuput"
)
@PreAuthorize
(
"@el.check('labelOuput')"
)
public
ResultBean
labelOuput
(
@RequestBody
PosLabelDto
params
)
{
List
<
String
>
posIds
=
params
.
getPosIds
();
List
<
String
>
posIds
=
params
.
getPosIds
();
if
(
posIds
==
null
)
{
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"PN"
});
}
for
(
String
posId
:
posIds
)
{
for
(
String
posId
:
posIds
)
{
StoragePos
pos
=
storagePosManager
.
get
(
posId
);
if
(
pos
==
null
)
{
throw
new
ValidateException
(
"smfcode.valueNotExist"
,
"{0}[{1}]不存在"
,
new
String
[]{
"posId"
,
posId
});
throw
new
ValidateException
(
"smfcode.valueNotExist"
,
"{0}[{1}]不存在"
,
new
String
[]{
"posId"
,
posId
});
}
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
if
(
storage
==
null
)
{
throw
new
ValidateException
(
"smfcode.valueNotExist"
,
"{0}[{1}]不存在"
,
new
String
[]{
"storageId"
,
pos
.
getStorageId
()});
throw
new
ValidateException
(
"smfcode.valueNotExist"
,
"{0}[{1}]不存在"
,
new
String
[]{
"storageId"
,
pos
.
getStorageId
()});
}
log
.
info
(
"出库料仓【"
+
storage
.
getName
()
+
"_"
+
storage
.
getCid
()
+
"】位置仓位【"
+
pos
.
getPosName
()
+
"】"
);
String
outResult
=
taskService
.
checkout
(
storage
,
pos
,
true
);
String
outResult
=
taskService
.
checkout
(
storage
,
pos
,
true
,
SecurityUtils
.
getCurrentUsername
()
);
if
(!
Strings
.
isNullOrEmpty
(
outResult
))
{
throw
new
ValidateException
(
"smfcode.error"
,
outResult
);
}
...
...
@@ -187,17 +194,48 @@ public class MaterialController {
// List<String> posIds=(List<String>) params.get("posIds");
// String labelId = params.get("labelId").toString();
List
<
String
>
posIds
=
params
.
getPosIds
();
String
labelId
=
params
.
getLabelId
();
if
(
posIds
==
null
||
posIds
.
size
()<=
0
)
{
List
<
String
>
posIds
=
params
.
getPosIds
();
String
labelId
=
params
.
getLabelId
();
if
(
posIds
==
null
||
posIds
.
size
()
<=
0
)
{
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"ID"
});
}
if
(
ObjectUtil
.
isEmpty
(
labelId
))
{
labelId
=
""
;
if
(
ObjectUtil
.
isEmpty
(
labelId
))
{
labelId
=
""
;
}
String
[]
array
=
posIds
.
toArray
(
new
String
[
posIds
.
size
()])
;
storagePosManager
.
updatePosLabel
(
array
,
labelId
);
String
[]
array
=
posIds
.
toArray
(
new
String
[
posIds
.
size
()])
;
storagePosManager
.
updatePosLabel
(
array
,
labelId
);
return
ResultBean
.
newOkResult
(
""
);
}
@ApiOperation
(
"手动出库"
)
@PostMapping
(
value
=
"/manualOut"
)
@PreAuthorize
(
"@el.check('manualOut')"
)
public
ResultBean
manualOut
(
@RequestBody
Map
<
String
,
String
>
paramMap
)
{
String
code
=
paramMap
.
get
(
"barcode"
);
Barcode
barcode
=
barcodeManager
.
findByBarcode
(
code
);
StoragePos
storagePos
=
storagePosManager
.
getByBarcode
(
code
);
if
(
storagePos
!=
null
)
{
if
(!
ObjectUtil
.
isEmpty
(
storagePos
.
getBarcode
().
getLockId
()))
{
throw
new
ValidateException
(
"smfcode.error.barcode.locked"
,
"库位[{0}]已被锁定"
);
}
try
{
if
(
barcode
!=
null
)
{
String
opUser
=
SecurityUtils
.
getCurrentUsername
();
log
.
info
(
opUser
+
"清理库位["
+
storagePos
.
getPosName
()
+
"],条码["
+
code
+
"]中的库存"
+
barcode
.
getBarcode
());
taskService
.
addTaskToFinished
(
storagePos
,
null
,
opUser
+
"-manual"
);
}
else
{
log
.
info
(
"清理库位["
+
storagePos
.
getPosName
()
+
"],条码["
+
code
+
"],库位条码为空"
);
}
return
ResultBean
.
newOkResult
(
"smfcode.manualOut.ok"
,
"手动出库成功"
,
code
);
}
catch
(
Exception
e
)
{
return
ResultBean
.
newOkResult
(
"smfcore.error"
,
"出错{0}"
,
new
String
[]{
e
.
getMessage
()},
code
);
}
}
else
{
throw
new
ValidateException
(
"smfcode.manualOut.notFound"
,
"仓库中未找到料盘信息"
);
}
}
}
src/main/java/com/neotel/smfcore/core/storage/rest/StoragePosController.java
查看文件 @
e91fb98
此文件的差异被折叠,
点击展开。
src/main/java/com/neotel/smfcore/core/storage/rest/query/StoragePosQueryCriteria.java
查看文件 @
e91fb98
...
...
@@ -2,6 +2,7 @@ package com.neotel.smfcore.core.storage.rest.query;
import
com.neotel.smfcore.common.annotation.QueryCondition
;
import
com.neotel.smfcore.common.bean.BetweenData
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
org.springframework.format.annotation.DateTimeFormat
;
...
...
@@ -27,4 +28,8 @@ public class StoragePosQueryCriteria {
@QueryCondition
(
type
=
QueryCondition
.
Type
.
IN
,
propName
=
"storageId"
)
private
List
<
String
>
storageIdList
;
@ApiModelProperty
(
"是否启用"
)
@QueryCondition
private
Boolean
enabled
;
}
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStoragePosManager.java
查看文件 @
e91fb98
...
...
@@ -17,8 +17,10 @@ import java.util.Set;
public
interface
IStoragePosManager
extends
IBaseManager
<
StoragePos
>
{
List
<
PlateSizeBean
>
getStoragePosUsage
(
String
storageId
);
StoragePos
getByPosName
(
String
posName
);
Map
<
String
,
InventoryItem
>
getInventory
(
String
id
);
Map
<
String
,
InventoryItem
>
getInventory
(
String
id
);
StoragePos
getByBarcode
(
String
barcode
);
...
...
@@ -32,7 +34,7 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
void
deletePoss
(
Set
<
String
>
ids
);
StoragePos
getEmptyPosByStorage
(
Storage
storage
,
Barcode
barcode
,
Collection
<
String
>
excludePosIds
)
throws
ValidateException
;
StoragePos
getEmptyPosByStorage
(
Storage
storage
,
Barcode
barcode
,
Collection
<
String
>
excludePosIds
)
throws
ValidateException
;
StoragePos
getEmptyPosByStorage
(
Storage
storage
,
Barcode
barcode
,
Collection
<
String
>
excludePosIds
,
String
lastPosId
)
throws
ValidateException
;
...
...
@@ -48,5 +50,7 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
void
clearStoragePosLabel
(
String
id
);
void
updatePosLabel
(
String
[]
posIds
,
String
labelId
);
void
updatePosLabel
(
String
[]
posIds
,
String
labelId
);
void
clearLockPos
(
String
lockId
);
}
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
查看文件 @
e91fb98
package
com
.
neotel
.
smfcore
.
core
.
storage
.
service
.
manager
.
impl
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.base.Strings
;
import
com.google.common.collect.Maps
;
import
com.neotel.smfcore.common.bean.PageData
;
...
...
@@ -217,8 +218,13 @@ public class StoragePosManagerImpl implements IStoragePosManager {
Query
q
=
new
Query
(
c
);
Sort
sort
=
getSortByCheckOutType
(
checkOutType
);
q
.
with
(
sort
);
log
.
info
(
"使用"
+
checkOutType
+
"策略出库partNumber="
+
pn
);
return
storagePosDao
.
findOne
(
q
);
StoragePos
pos
=
storagePosDao
.
findOne
(
q
);
if
(
pos
==
null
){
log
.
info
(
"使用"
+
checkOutType
+
" 策略出库 partNumber="
+
pn
+
",未找到可以出库的物料 "
);
}
else
{
log
.
info
(
"使用"
+
checkOutType
+
" 策略出库 partNumber="
+
pn
+
",找到出仓位置【"
+
pos
.
getPosName
()+
"】,RI【"
+
pos
.
getBarcode
().
getBarcode
()+
"】 "
);
}
return
pos
;
}
...
...
@@ -325,12 +331,12 @@ public class StoragePosManagerImpl implements IStoragePosManager {
COMPATIBLE_TYPE
compatibleType
=
storage
.
getCompatibleType
();
if
(
compatibleType
==
COMPATIBLE_TYPE
.
EXACT_MATCH
)
{
//完全匹配
if
(
compatibleType
==
COMPATIBLE_TYPE
.
EXACT_MATCH
)
{
//完全匹配
c
=
c
.
and
(
"w"
).
is
(
barcode
.
getPlateSize
()).
and
(
"h"
).
is
(
barcode
.
getHeight
());
}
else
if
(
compatibleType
==
COMPATIBLE_TYPE
.
FULLY_COMPATIBLE
)
{
//同厚度兼容
}
else
if
(
compatibleType
==
COMPATIBLE_TYPE
.
FULLY_COMPATIBLE
)
{
//同厚度兼容
c
=
c
.
and
(
"w"
).
gte
(
barcode
.
getPlateSize
()).
and
(
"h"
).
gte
(
barcode
.
getHeight
());
//除7寸外,完全兼容
}
else
if
(
compatibleType
==
COMPATIBLE_TYPE
.
SIZE_COMPATIBLE
)
{
//同尺寸兼容
}
else
if
(
compatibleType
==
COMPATIBLE_TYPE
.
SIZE_COMPATIBLE
)
{
//同尺寸兼容
c
=
c
.
and
(
"w"
).
is
(
barcode
.
getPlateSize
()).
and
(
"h"
).
gte
(
barcode
.
getHeight
());
//宽度等于料盘宽度,高度大于等于料盘高度
}
...
...
@@ -338,18 +344,25 @@ public class StoragePosManagerImpl implements IStoragePosManager {
.
and
(
"used"
).
is
(
false
);
//未使用
//去除的仓位
if
(
excludePosIds
!=
null
&&
!
excludePosIds
.
isEmpty
())
{
if
(
excludePosIds
!=
null
&&
!
excludePosIds
.
isEmpty
())
{
c
=
c
.
and
(
"id"
).
nin
(
excludePosIds
);
}
Query
query
=
new
Query
(
c
);
if
(
lastPosId
==
null
||
lastPosId
.
equals
(
""
)){
String
msg
=
""
;
// if (lastPosId == null || lastPosId.equals("")) {
//优先放入最合适的位置(根据尺寸),相同尺寸按优先级排序
query
.
with
(
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"w"
).
and
(
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"h"
)).
and
(
Sort
.
by
(
Sort
.
Direction
.
DESC
,
"priority"
)));
}
else
{
Point
point
=
PointUtil
.
getPosPoint
(
lastPosId
,
false
);
query
.
addCriteria
(
Criteria
.
where
(
"coordinate"
).
nearSphere
(
point
));
}
// } else {
// Point point = PointUtil.getPosPoint(lastPosId, false);
// query.addCriteria(Criteria.where("coordinate").nearSphere(point));
// msg += "getEmptyPosByStorage 根据就近坐标查询[" + lastPosId + "][" + point.getX() + "," + point.getY() + "]";
// }
StoragePos
pos
=
storagePosDao
.
findOne
(
query
);
if
((!
ObjectUtil
.
isNotEmpty
(
msg
)
)&&
(
pos
!=
null
))
{
Point
targetP
=
PointUtil
.
getPosPoint
(
lastPosId
,
false
);
log
.
info
(
msg
+
"结果:["
+
pos
.
getPosName
()
+
"]["
+
targetP
.
getX
()
+
","
+
targetP
.
getY
()
+
"]"
);
}
return
pos
;
}
@Override
...
...
@@ -388,4 +401,10 @@ public class StoragePosManagerImpl implements IStoragePosManager {
storagePosDao
.
updateMulti
(
query
,
Update
.
update
(
"labelId"
,
labelId
));
}
@Override
public
void
clearLockPos
(
String
lockId
)
{
Query
query
=
new
Query
(
Criteria
.
where
(
"barcode.lockId"
).
is
(
lockId
));
storagePosDao
.
updateMulti
(
query
,
Update
.
update
(
"barcode.lockId"
,
""
));
}
}
src/main/java/com/neotel/smfcore/core/system/service/po/DataLog.java
查看文件 @
e91fb98
...
...
@@ -36,6 +36,7 @@ public class DataLog extends BasePo implements Serializable {
setPosId
(
pos
.
getId
());
setPosName
(
pos
.
getPosName
());
setStatus
(
OP_STATUS
.
WAIT
.
name
());
}
/**
...
...
@@ -181,7 +182,7 @@ public class DataLog extends BasePo implements Serializable {
/**
* 亮灯料架颜色
*/
private
String
lightColor
=
"
FF0000
"
;
private
String
lightColor
=
""
;
/**
* 出入库执行时间,秒
*/
...
...
@@ -273,7 +274,7 @@ public class DataLog extends BasePo implements Serializable {
*/
public
boolean
needRemoveFromCache
(){
if
(
isFinished
()
||
isCancel
()){
if
(
System
.
currentTimeMillis
()
-
super
.
getUpdateDate
().
getTime
()
>
3
*
60
*
1000
){
if
(
System
.
currentTimeMillis
()
-
super
.
getUpdateDate
().
getTime
()
>
5
*
60
*
1000
){
return
true
;
}
}
...
...
src/main/java/com/neotel/smfcore/core/system/util/DevicesStatusUtil.java
查看文件 @
e91fb98
package
com
.
neotel
.
smfcore
.
core
.
system
.
util
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.collect.Maps
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
import
java.util.Map
;
/**
...
...
@@ -27,15 +29,15 @@ public class DevicesStatusUtil {
/**
* 获取设备状态Bean
*/
public
static
StatusBean
getStatusBean
(
String
cid
){
public
static
StatusBean
getStatusBean
(
String
cid
)
{
return
statusMap
.
get
(
cid
);
}
/**
* 更新设备状态信息
*/
public
static
void
updateStatusBean
(
StatusBean
statusBean
){
statusMap
.
put
(
statusBean
.
getCid
(),
statusBean
);
public
static
void
updateStatusBean
(
StatusBean
statusBean
)
{
statusMap
.
put
(
statusBean
.
getCid
(),
statusBean
);
}
/**
...
...
@@ -53,4 +55,15 @@ public class DevicesStatusUtil {
return
statusBean
;
}
private
static
Map
<
String
,
List
<
List
<
String
>>>
deviceDataMap
=
Maps
.
newConcurrentMap
();
public
static
void
updateDeviceData
(
String
cid
,
List
<
List
<
String
>>
data
)
{
deviceDataMap
.
put
(
cid
,
data
);
}
public
static
List
<
List
<
String
>>
getDeviceData
(
String
cid
)
{
return
deviceDataMap
.
get
(
cid
);
}
}
src/main/java/com/neotel/smfcore/core/system/util/TaskService.java
查看文件 @
e91fb98
此文件的差异被折叠,
点击展开。
src/main/java/com/neotel/smfcore/hella/handler/HellaServiceHandler.java
查看文件 @
e91fb98
package
com
.
neotel
.
smfcore
.
hella
.
handler
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.collect.Lists
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.core.barcode.bean.CodeBean
;
import
com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager
;
import
com.neotel.smfcore.core.barcode.service.manager.IComponentManager
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.barcode.service.po.Component
;
import
com.neotel.smfcore.core.barcode.utils.CodeResolve
;
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
;
...
...
@@ -76,6 +79,9 @@ public class HellaServiceHandler extends IoHandlerAdapter implements ITaskListen
@Autowired
private
IGroupManager
groupManager
;
@Autowired
private
CodeResolve
codeResolve
;
protected
final
static
Logger
log
=
LogManager
.
getLogger
();
private
AtomicLong
eventId
=
new
AtomicLong
(
0
);
...
...
@@ -91,21 +97,38 @@ public class HellaServiceHandler extends IoHandlerAdapter implements ITaskListen
HellaReqCommand
command
=
HellaReqCommand
.
newCheckMaterialCmd
(
eventId
.
incrementAndGet
(),
scannedCode
);
command
.
setGroupId
(
groupId
);
boolean
storageCheckMaterial
=
false
;
if
(
ObjectUtil
.
isNotEmpty
(
storageId
)){
Storage
storage
=
dataCache
.
getStorageById
(
storageId
);
if
(
storage
!=
null
){
storageCheckMaterial
=
true
;
command
.
setGroupId
(
storage
.
getGroupId
());
command
.
setStorageId
(
storageId
);
}
}
command
.
setLoginUser
(
loginUser
);
for
(
HellaReqCommand
hellaReqCommand
:
commandMap
.
values
())
{
if
(
hellaReqCommand
.
getGroupId
().
equals
(
groupId
)
&&
hellaReqCommand
.
isCheckMaterialReq
()){
if
(
storageCheckMaterial
)
{
if
(
ObjectUtil
.
isNotEmpty
(
hellaReqCommand
.
getStorageId
())&&
hellaReqCommand
.
getStorageId
().
equals
(
storageId
)&&
hellaReqCommand
.
isCheckMaterialReq
()){
//有未完成的入库请求
commandMap
.
remove
(
hellaReqCommand
.
getEventId
());
log
.
info
(
"清理未完成的入库检查请求["
+
hellaReqCommand
.
getEventId
()+
"]:"
+
hellaReqCommand
.
getData
());
log
.
info
(
"清理未完成的入库检查请求["
+
hellaReqCommand
.
getEventId
()
+
"]:"
+
hellaReqCommand
.
getData
());
}
}
else
{
if
(
hellaReqCommand
.
getGroupId
().
equals
(
groupId
)
&&
hellaReqCommand
.
isCheckMaterialReq
())
{
//有未完成的入库请求
commandMap
.
remove
(
hellaReqCommand
.
getEventId
());
log
.
info
(
"清理未完成的入库检查请求["
+
hellaReqCommand
.
getEventId
()
+
"]:"
+
hellaReqCommand
.
getData
());
//return ResultBean.newErrorResult(-1,"["+hellaReqCommand.getData()+"]入库任务未完成,无法入库");
}
}
}
commandMap
.
put
(
command
.
getEventId
(),
command
);
log
.
info
(
"发送检查物料条码请求:"
+
command
.
toReqMsg
());
ResultBean
resultBean
=
HellaTcpClient
.
sendMsg
(
command
.
toReqMsg
());
//
testCheckOK(command);
// ResultBean resultBean =
testCheckOK(command);
resultBean
.
setMsg
(
"Check Material result:"
+
resultBean
.
getMsg
());
return
resultBean
;
}
...
...
@@ -136,7 +159,8 @@ public class HellaServiceHandler extends IoHandlerAdapter implements ITaskListen
String
msg
=
message
.
toString
();
msg
=
msg
.
replace
(
"\u0002"
,
""
);
log
.
info
(
"Received Tcp Server msg:"
+
msg
);
String
[]
resposArr
=
msg
.
split
(
";"
);
//getInventory;21296;
String
[]
resposArr
=
msg
.
split
(
";"
,-
1
);
String
cmd
=
resposArr
[
0
];
String
eventId
=
resposArr
[
1
];
...
...
@@ -186,7 +210,7 @@ public class HellaServiceHandler extends IoHandlerAdapter implements ITaskListen
}
else
{
Storage
storage
=
dataCache
.
getStorageById
(
storagePos
.
getStorageId
());
try
{
taskService
.
checkout
(
storage
,
storagePos
,
false
);
taskService
.
checkout
(
storage
,
storagePos
,
false
,
""
);
}
catch
(
ValidateException
ve
){
resultCode
=
"-3"
;
resultMsg
=
ve
.
getMessage
();
...
...
@@ -203,23 +227,29 @@ public class HellaServiceHandler extends IoHandlerAdapter implements ITaskListen
//<STX>getInventory;eventId;shelfNumber<CR><LF>
String
shelfNumber
=
resposArr
[
2
];
Storage
shelf
=
null
;
if
(
ObjectUtil
.
isNotEmpty
(
shelfNumber
))
{
Collection
<
Storage
>
allStorages
=
dataCache
.
getAllStorage
().
values
();
for
(
Storage
storage
:
allStorages
)
{
if
(
storage
.
getName
().
equals
(
shelfNumber
))
{
if
(
storage
.
getName
().
equals
(
shelfNumber
))
{
shelf
=
storage
;
}
}
}
String
resultCode
=
"0"
;
String
resultMsg
=
"OK"
;
String
dataStr
=
""
;
if
(
shelf
==
null
){
if
(
ObjectUtil
.
isNotEmpty
(
shelfNumber
)&&
shelf
==
null
){
//<STX>getInventoryResp;eventId;returnCode;messageText;numberofResults;partNumber1;containerNumber;remainQuantity;MSL;lightClass;SelfPosition;reserved;…;partNumberN;containerNumberN;remainQuantityN;MSLN;lightClassN;SelfPositionN;reservedN;<CR><LF>
resultCode
=
"-1"
;
resultMsg
=
"Shelf is not found"
;
dataStr
=
"0"
;
}
else
{
List
<
StoragePos
>
posList
=
storagePosManager
.
findNotEmptyByStorageId
(
shelf
.
getId
());
String
shelfId
=
""
;
if
(!(
shelf
==
null
)){
shelfId
=
shelf
.
getId
();
}
List
<
StoragePos
>
posList
=
storagePosManager
.
findNotEmptyByStorageId
(
shelfId
);
int
numberOfResult
=
posList
.
size
();
dataStr
=
""
+
numberOfResult
;
for
(
StoragePos
storagePos
:
posList
)
{
...
...
@@ -248,16 +278,28 @@ public class HellaServiceHandler extends IoHandlerAdapter implements ITaskListen
private
void
testCheckOK
(
HellaReqCommand
command
)
{
private
ResultBean
testCheckOK
(
HellaReqCommand
command
)
{
HellaRespCommand
respCommand
=
new
HellaRespCommand
();
respCommand
.
setCmd
(
"TestCheckMaterial"
);
respCommand
.
setEventId
(
command
.
getEventId
());
String
reelId
=
command
.
getData
().
toString
();
String
[]
resposArr
=
new
String
[]{
"TestCheckMaterial"
,
command
.
getEventId
(),
"0"
,
"OK"
,
"PN001"
,
reelId
,
"1000"
,
"1"
,
"LC01"
};
String
codeStr
=
command
.
getData
().
toString
();
CodeBean
codeBean
=
codeResolve
.
resolveSingleCode
(
codeStr
);
if
(
codeBean
==
null
||
codeBean
.
getBarcode
()==
null
){
return
ResultBean
.
newErrorResult
(
1
,
"smfcode.error.barcode.invalid"
,
"条码无效"
);
}
if
(
ObjectUtil
.
isNotEmpty
(
codeBean
.
getErrorCode
())
){
return
ResultBean
.
newErrorResult
(
1
,
codeBean
.
getErrorCode
(),
codeBean
.
getError
(),
codeBean
.
getParams
());
}
String
pn
=
codeBean
.
getBarcode
().
getPartNumber
();
String
reelId
=
codeBean
.
getBarcode
().
getBarcode
();
String
num
=
codeBean
.
getBarcode
().
getAmount
()+
""
;
String
[]
resposArr
=
new
String
[]{
"TestCheckMaterial"
,
command
.
getEventId
(),
"0"
,
"OK"
,
pn
,
reelId
,
num
,
"1"
,
"LC01"
};
try
{
handleCheckMaterialResp
(
respCommand
,
resposArr
);
return
ResultBean
.
newOkResult
(
""
);
}
catch
(
ValidateException
e
)
{
log
.
error
(
e
);
return
ResultBean
.
newErrorResult
(
1
,
e
.
getMsgKey
(),
e
.
getDefaultMsg
());
}
}
...
...
@@ -277,6 +319,7 @@ public class HellaServiceHandler extends IoHandlerAdapter implements ITaskListen
return
;
}
String
groupId
=
requestCommand
.
getGroupId
();
String
storageId
=
requestCommand
.
getStorageId
();
String
loginUser
=
requestCommand
.
getLoginUser
();
String
fullCode
=
requestCommand
.
getData
().
toString
();
if
(
respCommand
.
isOkResp
()){
...
...
@@ -326,8 +369,16 @@ public class HellaServiceHandler extends IoHandlerAdapter implements ITaskListen
dataLog
.
setNum
(
barcode
.
getAmount
());
dataLog
.
setStatus
(
OP_STATUS
.
WAIT
.
name
());
dataLog
.
setGroupId
(
groupId
);
dataLog
.
setStorageId
(
storageId
);
dataLog
.
setMemo
(
barcode
.
getMemo
());
dataLog
.
setOperator
(
loginUser
);
if
(
ObjectUtil
.
isNotEmpty
(
storageId
)){
Storage
storage
=
dataCache
.
getStorageById
(
storageId
);
if
(
storage
!=
null
){
dataLog
.
setCid
(
storage
.
getCid
());
dataLog
.
setStorageName
(
storage
.
getName
());
}
}
try
{
taskService
.
addTaskToExecute
(
dataLog
);
ResultBean
okResult
=
ResultBean
.
newOkResult
(
"checking material is ok: "
+
messageText
);
...
...
@@ -377,6 +428,7 @@ public class HellaServiceHandler extends IoHandlerAdapter implements ITaskListen
liteOrder
.
setSource
(
groupName
);
log
.
info
(
"新增加订单:"
+
liteOrder
.
getOrderNo
());
liteOrder
=
liteOrderManager
.
createWithItems
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
//对工单进行锁定
List
<
String
>
storageIdList
=
new
ArrayList
<>();
...
...
src/main/java/com/neotel/smfcore/hella/rest/HellaSensorShelfController.java
查看文件 @
e91fb98
package
com
.
neotel
.
smfcore
.
hella
.
rest
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
...
...
@@ -91,7 +92,7 @@ public class HellaSensorShelfController {
for
(
DataLog
queueTask
:
queueTasks
)
{
if
(
queueTask
.
isPutInTask
()
&&
queueTask
.
isWait
())
{
if
(
groupId
!=
null
&&
queueTask
.
getGroupId
().
equals
(
groupId
))
{
if
(
ObjectUtil
.
isEmpty
(
storageId
)&&
groupId
!=
null
&&
queueTask
.
getGroupId
().
equals
(
groupId
))
{
log
.
info
(
"codeIn ["
+
code
+
"]["
+
groupId
+
"]入库失败:条码["
+
queueTask
.
getBarcode
()
+
"]的任务还未结束 "
);
throw
new
ValidateException
(
"smfcore.unfinished"
,
"the task of [{0}] is unfinished"
,
new
String
[]{
queueTask
.
getBarcode
()});
}
...
...
src/main/java/com/neotel/smfcore/hella/tcp/HellaTcpClient.java
查看文件 @
e91fb98
package
com
.
neotel
.
smfcore
.
hella
.
tcp
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.base.Strings
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.utils.StringUtils
;
...
...
@@ -65,8 +66,12 @@ public class HellaTcpClient {
host
=
dataCache
.
GetConfigCache
(
"hella.host"
,
"hella.host"
,
host
);
port
=
Integer
.
parseInt
(
dataCache
.
GetConfigCache
(
"hella.port"
,
"hella.port"
,
port
+
""
))
;
updateServerInfo
(
host
,
port
);
if
(
ObjectUtil
.
isEmpty
(
host
)||
ObjectUtil
.
isEmpty
(
port
)){
log
.
info
(
"配置不完整,不需要连接"
);
}
else
{
start
();
}
}
public
static
void
updateServerInfo
(
String
serverHost
,
int
serverPort
){
host
=
serverHost
;
...
...
src/main/java/com/neotel/smfcore/hella/tcp/command/HellaReqCommand.java
查看文件 @
e91fb98
...
...
@@ -11,9 +11,13 @@ public class HellaReqCommand extends HellaCommand {
private
String
groupId
;
/**
*
料仓Id
;
*
用户名
;
*/
private
String
loginUser
;
/**
* 料仓ID
*/
private
String
storageId
;
/**
* 检查物料条码
...
...
@@ -65,4 +69,12 @@ public class HellaReqCommand extends HellaCommand {
public
void
setGroupId
(
String
groupId
)
{
this
.
groupId
=
groupId
;
}
public
String
getStorageId
()
{
return
storageId
;
}
public
void
setStorageId
(
String
storageId
)
{
this
.
storageId
=
storageId
;
}
}
src/main/java/com/neotel/smfcore/security/rest/UserController.java
查看文件 @
e91fb98
...
...
@@ -90,7 +90,6 @@ public class UserController {
@ApiOperation
(
"查询用户"
)
@GetMapping
@PreAuthorize
(
"@el.check('user:list')"
)
// public ResponseEntity<Object> query(UserQueryCriteria criteria, Pageable pageable){
public
PageData
<
UserDto
>
query
(
UserQueryCriteria
criteria
,
Pageable
pageable
)
{
Query
query
=
QueryHelp
.
getQuery
(
criteria
);
PageData
<
User
>
userPageData
=
userManager
.
findByPage
(
query
,
pageable
);
...
...
@@ -127,7 +126,7 @@ public class UserController {
if
(
resources
.
getCheckCode
()==
null
){
resources
.
setCheckCode
(
""
);
}
resources
.
setPassword
(
passwordEncoder
.
encode
(
"
123456
"
));
resources
.
setPassword
(
passwordEncoder
.
encode
(
"
Constants.USER_DEFAULTP_PWD
"
));
resources
.
setUpdateDate
(
new
Date
());
resources
.
setPwdResetTime
(
new
Date
());
userManager
.
save
(
resources
);
...
...
@@ -137,20 +136,16 @@ public class UserController {
@ApiOperation
(
"修改用户"
)
@PutMapping
@PreAuthorize
(
"@el.check('user:edit')"
)
// public ResponseEntity<Object> update(@Validated(User.Update.class) @RequestBody User resources) throws Exception {
public
ResponseEntity
<
Object
>
update
(
@Validated
@RequestBody
UserDto
userDto
)
{
User
resources
=
userMapper
.
toEntity
(
userDto
);
if
(
resources
.
getId
()
==
null
)
{
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"ID"
}
);
// throw new ValidateException("修改用户:ID不能为空");
}
if
(
resources
.
getUsername
()==
null
){
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"username"
}
);
// throw new ValidateException("修改用户:用户名不能为空");
}
if
(
resources
.
getRoleId
()==
null
){
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"roleId"
}
);
// throw new ValidateException("修改用户:角色ID不能为空");
}
userManager
.
update
(
resources
);
...
...
@@ -158,19 +153,54 @@ public class UserController {
return
new
ResponseEntity
<>(
HttpStatus
.
NO_CONTENT
);
}
@ApiOperation
(
"修改用户:个人中心"
)
@PutMapping
(
value
=
"center"
)
// public ResponseEntity<Object> center(@Validated(User.Update.class) @RequestBody User resources){
public
ResponseEntity
<
Object
>
center
(
@Validated
@RequestBody
UserDto
userDto
)
{
@ApiOperation
(
"重置密码"
)
@PutMapping
(
value
=
"/resetPass"
)
@PreAuthorize
(
"@el.check('user:edit')"
)
public
ResultBean
resetPass
(
@RequestBody
String
id
)
{
if
(
id
==
null
)
{
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"ID"
}
);
}
User
resources
=
userManager
.
get
(
id
);
resources
.
setPassword
(
passwordEncoder
.
encode
(
Constants
.
USER_DEFAULTP_PWD
));
resources
.
setPwdResetTime
(
new
Date
());
userManager
.
update
(
resources
);
return
ResultBean
.
newOkResult
(
""
);
}
@ApiOperation
(
"个人中心:获取个人资料"
)
@GetMapping
(
value
=
"/center"
)
public
UserDto
getCenter
()
{
User
user
=
userManager
.
get
(
SecurityUtils
.
getCurrentUserId
());
return
userMapper
.
toDto
(
user
);
}
@ApiOperation
(
"个人中心:修改个人资料"
)
@PutMapping
(
value
=
"/center"
)
public
ResultBean
center
(
@Validated
@RequestBody
UserDto
userDto
)
{
User
resources
=
userMapper
.
toEntity
(
userDto
);
if
(!
resources
.
getId
().
equals
(
SecurityUtils
.
getCurrentUserId
()))
{
throw
new
ValidateException
(
"smfcode.hasNoAccess"
,
"无权限修改此用户信息"
);
// throw new ValidateException("不能修改他人资料");
}
userManager
.
updateCenter
(
resources
);
return
new
ResponseEntity
<>(
HttpStatus
.
NO_CONTENT
);
return
ResultBean
.
newOkResult
(
""
);
}
@ApiOperation
(
"个人中心:修改密码"
)
@PostMapping
(
value
=
"/updatePass"
)
public
ResultBean
updatePass
(
@RequestBody
UserPassVo
passVo
)
throws
Exception
{
User
user
=
userManager
.
get
(
SecurityUtils
.
getCurrentUserId
());
String
oldPass
=
RsaUtils
.
decryptByPrivateKey
(
RsaProperties
.
privateKey
,
passVo
.
getOldPass
());
String
newPass
=
RsaUtils
.
decryptByPrivateKey
(
RsaProperties
.
privateKey
,
passVo
.
getNewPass
());
if
(!
passwordEncoder
.
matches
(
oldPass
,
user
.
getPassword
()))
{
throw
new
ValidateException
(
"smfcode.oldPwdError"
,
"修改失败,旧密码错误"
);
}
if
(
passwordEncoder
.
matches
(
newPass
,
user
.
getPassword
()))
{
throw
new
ValidateException
(
"smfcode.newPwdError"
,
"新密码不能与旧密码相同"
);
}
userManager
.
updatePass
(
user
.
getUsername
(),
passwordEncoder
.
encode
(
newPass
));
return
ResultBean
.
newOkResult
(
""
);
}
@ApiOperation
(
"删除用户"
)
@DeleteMapping
...
...
@@ -194,35 +224,21 @@ public class UserController {
return
new
ResponseEntity
<>(
HttpStatus
.
OK
);
}
@ApiOperation
(
"修改密码"
)
@PostMapping
(
value
=
"/updatePass"
)
public
ResponseEntity
<
Object
>
updatePass
(
@RequestBody
UserPassVo
passVo
)
throws
Exception
{
User
user
=
userManager
.
get
(
SecurityUtils
.
getCurrentUserId
());
if
(!
passwordEncoder
.
matches
(
passVo
.
getOldPass
(),
user
.
getPassword
()))
{
throw
new
ValidateException
(
"smfcode.oldPwdError"
,
"修改失败,旧密码错误"
);
}
if
(
passwordEncoder
.
matches
(
passVo
.
getNewPass
(),
user
.
getPassword
()))
{
throw
new
ValidateException
(
"smfcode.newPwdError"
,
"新密码不能与旧密码相同"
);
}
userManager
.
updatePass
(
user
.
getUsername
(),
passwordEncoder
.
encode
(
passVo
.
getNewPass
()));
return
new
ResponseEntity
<>(
HttpStatus
.
OK
);
}
@ApiOperation
(
"修改邮箱"
)
@PostMapping
(
value
=
"/updateEmail/{code}"
)
public
ResponseEntity
<
Object
>
updateEmail
(
@PathVariable
String
code
,
@RequestBody
UserDto
userDto
)
throws
Exception
{
User
user
=
userMapper
.
toEntity
(
userDto
);
String
password
=
RsaUtils
.
decryptByPrivateKey
(
RsaProperties
.
privateKey
,
user
.
getPassword
());
User
myUser
=
userManager
.
findByUserName
(
SecurityUtils
.
getCurrentUsername
());
if
(!
passwordEncoder
.
matches
(
password
,
myUser
.
getPassword
()))
{
throw
new
ValidateException
(
"smfcode.pwdError"
,
"修改邮箱失败,密码错误"
);
}
// verificationCodeService.validated(CodeEnum.EMAIL_RESET_EMAIL_CODE.getKey() + user.getEmail(), code);
userManager
.
updateEmail
(
myUser
.
getUsername
(),
myUser
.
getEmail
());
return
new
ResponseEntity
<>(
HttpStatus
.
OK
);
}
// @ApiOperation("修改邮箱")
// @PostMapping(value = "/updateEmail/{code}")
// public ResponseEntity<Object> updateEmail(@PathVariable String code, @RequestBody UserDto userDto) throws Exception {
// User user=userMapper.toEntity(userDto);
// String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, user.getPassword());
// User myUser = userManager.findByUserName(SecurityUtils.getCurrentUsername());
// if (!passwordEncoder.matches(password, myUser.getPassword())) {
// throw new ValidateException("smfcode.pwdError","修改邮箱失败,密码错误");
// }
//// verificationCodeService.validated(CodeEnum.EMAIL_RESET_EMAIL_CODE.getKey() + user.getEmail(), code);
// userManager.updateEmail(myUser.getUsername(), myUser.getEmail());
// return new ResponseEntity<>(HttpStatus.OK);
// }
@ApiOperation
(
"修改用户组"
)
@PutMapping
(
value
=
"/updateGroup"
)
@PreAuthorize
(
"@el.check('user:edit')"
)
...
...
@@ -236,6 +252,8 @@ public class UserController {
userManager
.
updateGroups
(
resources
);
return
new
ResponseEntity
<>(
HttpStatus
.
OK
);
}
@ApiOperation
(
"上传用户列表:激活用户"
)
@PostMapping
(
value
=
"/upload"
)
public
ResultBean
upload
(
@RequestParam
MultipartFile
uploadFile
)
throws
Exception
{
...
...
src/main/java/com/neotel/smfcore/security/service/manager/impl/UserManagerImpl.java
查看文件 @
e91fb98
...
...
@@ -50,7 +50,7 @@ public class UserManagerImpl implements IUserManager {
public
void
updatePass
(
String
username
,
String
encryptPassword
)
{
Criteria
c
=
Criteria
.
where
(
"username"
).
is
(
username
);
Query
query
=
Query
.
query
(
c
);
Update
update
=
Update
.
update
(
"password"
,
encryptPassword
);
Update
update
=
Update
.
update
(
"password"
,
encryptPassword
)
.
addToSet
(
"pwdResetTime"
,
new
Date
())
;
userDao
.
updateFirst
(
query
,
update
);
}
@Override
...
...
@@ -102,6 +102,7 @@ public class UserManagerImpl implements IUserManager {
dataUser
.
setRoleId
(
user
.
getRoleId
());
dataUser
.
setGroups
(
user
.
getGroups
());
dataUser
.
setLanguage
(
user
.
getLanguage
());
dataUser
.
setPwdResetTime
(
user
.
getPwdResetTime
());
userDao
.
save
(
dataUser
);
}
}
...
...
@@ -109,10 +110,11 @@ public class UserManagerImpl implements IUserManager {
public
void
updateCenter
(
User
resources
)
{
User
dataUser
=
this
.
get
(
resources
.
getId
());
if
(
dataUser
!=
null
){
//用户名admin不能修改
if
(!
dataUser
.
equals
(
Constants
.
SUPER_USERNAME
)){
dataUser
.
setUsername
(
resources
.
getUsername
());
}
// //用户名admin不能修改
// if(!dataUser.equals(Constants.SUPER_USERNAME)){
// dataUser.setUsername(resources.getUsername());
// }
//只能修改邮箱和语言
dataUser
.
setEmail
(
resources
.
getEmail
());
dataUser
.
setLanguage
(
resources
.
getLanguage
());
...
...
src/main/resources/messages.properties
查看文件 @
e91fb98
...
...
@@ -29,7 +29,7 @@ smfcore.notFindPos=\u672A\u627E\u5230\u9501\u5B9A\u5E93\u4F4D
smfcore.error.barcode.empty
=
\u
672A
\u
626B
\u5230\u6761\u7801
smfcore.error.barcode.many
=
\u
627E
\u5230\u
591A
\u
4E2A
\u6709\u6548\u6761\u7801
,
\u
65E0
\u
6CD5
\u5165\u
5E93
smfcore.error.barcode.expired
=
\u7269\u6599\u
5DF2
\u
8FC7
\u
671F,
\u
65E0
\u
6CD5
\u5165\u
5E93.
smfcore.allBoxView.noReel
=
\u
5E93
\u
4F4D
\u
4E2D
\u
65E0
\u7269\u6599
smfcore.allBoxView.noReel
=
\u
5E93
\u
4F4D
{0}
\u
4E2D
\u
65E0
\u7269\u6599
smfcode.error.barcode.many
=
\u
627E
\u5230\u
591A
\u
4E2A
\u6709\u6548\u7684\u6761\u7801
smfcode.error.barcode.noValidCode
=
\u
65E0
\u6548\u7684\u6761\u7801
smfcore.error.barcode.noValidCode
=
{0}
\u
4E0D
\u
662F
\u6709\u6548\u7684\u6761\u7801
...
...
@@ -93,7 +93,35 @@ smfcore.instruction=\u8BF4\u660E\u4E66
smfcore.about
=
\u5173\u
4E8E
smfcore.tacticsOuput
=
\u
7B56
\u7565\u
51FA
\u
5E93
smfcore.labelOuput
=
\u7269\u6599\u5206\u
7EC4
smfcode.order.out.executing
=
\u
5DE5
\u5355\u
6B63
\u5728\u6267\u
884C
smfcode.order.out.notFound
=
\u
5DE5
\u5355\u
672A
\u
627E
\u5230
smfcode.order.out.maxOrder
=
\u
5DF2
\u
8FBE
\u5230\u6700\u5927\u
53EF
\u6267\u
884C
\u
5DE5
\u5355\u6570
smfcode.order.out.noTask
=
\u
5DE5
\u5355\u
65E0
\u
53EF
\u6267\u
884C
\u7684\u
4EFB
\u
52A1
smfcode.cannotUpdateOrderNum
=
\u
5DE5
\u5355\u
5DF2
\u
51FA
\u
5E93
\u
FF0C
\u
4E0D
\u
80FD
\u
4FEE
\u6539\u6570\u
91CF
smfcode.order.close.success
=
\u
5DE5
\u5355\u5173\u
95ED
\u6210\u
529F
smfcode.order.close.taskNotEnd
=
\u
5DE5
\u5355\u
8FD8
\u6709\u
672A
\u
5B8C
\u6210\u7684\u
4EFB
\u
52A1
smfcore.manualOut
=
\u
624B
\u
52A8
\u
51FA
\u
5E93
smfcode.error.barcode.noRules
=
\u
89E3
\u6790\u
89C4
\u5219\u
672A
\u
5B9A
\u
4E49
smfcode.error.barcode.wrongLength
=
\u6761\u7801
[{0}]
\u
957F
\u
5EA6
\u9519\u
8BEF
smfcode.error.barcode.noField
=
\u6761\u7801\u
89E3
\u6790\u5931\u
8D25,
\u
672A
\u
627E
\u5230
{0}
\u
5B57
\u
6BB5
smfcode.error.barcode.pnNotExist
=
x
\u6863\u6848
{0}
\u
4E0D
\u
5B58
\u5728
smfcode.error.barcode.invalid
=
{0}
\u
4E0D
\u
662F
\u6709\u6548\u7684\u6761\u7801
smfcode.error.barcode.locked
=
\u
5E93
\u
4F4D[{0}]
\u
5DF2
\u
88AB
\u9501\u
5B9A
smfcode.manualOut.ok
=
\u
624B
\u
52A8
\u
51FA
\u
5E93
\u6210\u
529F
smfcode.manualOut.notFound
=
\u
4ED3
\u
5E93
\u
4E2D
\u
672A
\u
627E
\u5230\u6599\u
76D8
\u
4FE1
\u
606F
smfcode.order.lineCanotNull
=
\u
7EBF
\u
522B
\u
4E0D
\u
80FD
\u
4E3A
\u
7A7A
smfcode.order.cannotUpdateLine
=
\u
5DE5
\u5355\u
5DF2
\u
51FA
\u
5E93
\u
FF0C
\u
4E0D
\u
80FD
\u
4FEE
\u6539\u
7EBF
\u
522B
smfcode.order.uploadOK
=
\u
5DE5
\u5355\u
4E0A
\u
4F20
\u6210\u
529F
smfcode.order.ameExists
=
\u
5DE5
\u5355\u
540D
\u
79F0[{0}]
\u
5DF2
\u
5B58
\u5728
smfcode.order.hasClose
=
\u
5DE5
\u5355\u
5DF2
\u5173\u
95ED
smfcode.order.supplementOutFail
=
\u
672A
\u
627E
\u5230\u
53EF
\u
4EE5
\u
51FA
\u
5E93
\u7684\u8865\u6599
smfcode.materialBox.quantityshort=
\u7269\u6599\u6570\u
91CF
\u
4E0D
\u
8DB3
smfcode.materialBox.invalid
=
\u
672A
\u
627E
\u5230\u6599\u
76D2
\u
4FE1
\u
606F{0}
smfcode.materialBox.noReel
=
\u6599\u
76D2
\u
4E2D
\u
672A
\u
627E
\u5230\u
5BF9
\u
5E94
\u7269\u6599
smfcode.materialBox.boxNoReel
=
\u6599\u
76D2
\u
4E2D
\u
65E0
\u7269\u6599
smfcode.materialBox.inPos
=
\u7269\u6599\u
5DF2
\u5728\u
5E93
\u
4F4D{0}
\u
4E2D
smfcode.materialBox.inOtherBox
=
\u7269\u6599\u
5DF2
\u5728\u6599\u
76D2{0}
\u
4E2D
smfcore.materialBox
=
\u6599\u
76D2
\u
64CD
\u
4F5C
...
...
src/main/resources/messages_en_US.properties
查看文件 @
e91fb98
...
...
@@ -29,7 +29,7 @@ smfcore.notFindPos=Locked position not found
smfcore.error.barcode.empty
=
Barcode empty
smfcore.error.barcode.many
=
Found several barcodes, storage failed
smfcore.error.barcode.expired
=
Reel expired, storage failed
smfcore.allBoxView.noReel
=
No reel in position
smfcore.allBoxView.noReel
=
No reel in position
{0}
smfcode.error.barcode.many
=
Found several barcodes
smfcode.error.barcode.noValidCode
=
Invalid barcode
smfcore.error.barcode.noValidCode
=
Invalid barcode {0}
...
...
@@ -93,3 +93,32 @@ smfcore.instruction=Instruction manual
smfcore.about
=
About
smfcore.tacticsOuput
=
Strategies Retrival
smfcore.labelOuput
=
Material grouping
smfcode.order.out.executing
=
Work orders are being executed
smfcode.order.out.notFound
=
Work order not found
smfcode.order.out.maxOrder
=
The maximum number of executable work orders has been reached
smfcode.order.out.noTask
=
Work order No executable tasks
smfcode.cannotUpdateOrderNum
=
The work order has been issued and the quantity cannot be modified
smfcode.order.close.success
=
Work order closed successfully
smfcode.order.close.taskNotEnd
=
Work orders with outstanding tasks
smfcore.manualOut
=
Manual outbound
smfcode.error.barcode.noRules
=
Parsing rules not defined
smfcode.error.barcode.wrongLength
=
The barcode [{0}] is of wrong length
smfcode.error.barcode.noField
=
Bar code parsing failed, {0} field not found
smfcode.error.barcode.pnNotExist
=
Material file {0} does not exist
smfcode.error.barcode.invalid
=
{0} is not a valid barcode
smfcode.error.barcode.locked
=
Library bit [{0}] is locked
smfcode.manualOut.ok
=
Manual exit successful
smfcode.manualOut.notFound
=
No tray information found
smfcode.order.lineCanotNull
=
Line cannot be empty
smfcode.order.cannotUpdateLine
=
Work order has been issued, can not modify the line
smfcode.order.uploadOK
=
Work order uploaded successfully
smfcode.order.ameExists
=
Work order name [{0}] already exists
smfcode.order.hasClose
=
The work order is closed
smfcode.order.supplementOutFail
=
No replenishment material found that can be discharged
smfcode.materialBox.quantityshort
=
Insufficient quantity of materials
smfcode.materialBox.invalid
=
No information found for cartridge {0}
smfcode.materialBox.noReel
=
The corresponding material is not found in the material box
smfcode.materialBox.boxNoReel
=
No material in the cassette
smfcode.materialBox.inPos
=
The material is already in the storage space {0}
smfcode.materialBox.inOtherBox
=
The material is already in the cassette {0}
smfcore.materialBox
=
Cassette operation
src/main/resources/messages_ja_JP.properties
查看文件 @
e91fb98
...
...
@@ -29,7 +29,7 @@ smfcore.notFindPos=\u30ED\u30C3\u30AF\u3055\u308C\u305F\u30B9\u30C8\u30EC\u30FC\
smfcore.error.barcode.empty
=
\u
30D0
\u
30FC
\u
30B3
\u
30FC
\u
30C9
\u
304C
\u
30B9
\u
30AD
\u
30E3
\u
30F3
\u3055\u
308C
\u
306A
\u3044
smfcore.error.barcode.many
=
\u8907\u6570\u
306E
\u6709\u
52B9
\u
306A
\u
30D0
\u
30FC
\u
30B3
\u
30FC
\u
30C9
\u
304C
\u
898B
\u3064\u
304B
\u
308A
\u
307E
\u3057\u
305F
\u
304C
\u3001\u5728\u
5EAB
\u
306F
\u3042\u
308A
\u
307E
\u
305B
\u3093
smfcore.error.barcode.expired
=
\u6750\u6599\u
304C
\u
53E4
\u
304F
\u3066\u5728\u
5EAB
\u
304C
\u
306A
\u3044
smfcore.allBoxView.noReel
=
\u
4FDD
\u
7BA1
\u
4E2D
\u
306E
\u
7D20
\u6750\u
304C
\u
306A
\u3044
smfcore.allBoxView.noReel
=
\u
4FDD
\u
7BA1
\u
4E2D
\u
306E
\u
7D20
\u6750\u
304C
\u
306A
\u3044
{0}
smfcode.error.barcode.many
=
\u8907\u6570\u
306E
\u6709\u
52B9
\u
306A
\u
30D0
\u
30FC
\u
30B3
\u
30FC
\u
30C9
\u
306E
\u
691C
\u
7D22
smfcode.error.barcode.noValidCode
=
\u7121\u
52B9
\u
306A
\u
30D0
\u
30FC
\u
30B3
\u
30FC
\u
30C9
smfcore.error.barcode.noValidCode
=
{0}
\u
306F
\u6709\u
52B9
\u
306A
\u
30D0
\u
30FC
\u
30B3
\u
30FC
\u
30C9
\u3067\u
306F
\u3042\u
308A
\u
307E
\u
305B
\u3093
...
...
@@ -93,3 +93,32 @@ smfcore.instruction=\u53D6\u6271\u8AAC\u660E\u66F8
smfcore.about
=
\u
306B
\u3064\u3044\u3066
smfcore.tacticsOuput
=
\u
30B9
\u
30C8
\u
30E9
\u
30C6
\u
30B8
\u
30FC
\u
306F
\u5728\u
5EAB
\u5207\u
308C
\u3067\u3059
smfcore.labelOuput
=
\u6750\u6599\u
306E
\u
30B0
\u
30EB
\u
30FC
\u
30D7
\u5316
smfcode.order.out.executing
=
\u
4F5C
\u
696D
\u6307\u
793A
\u
304C
\u
5B9F
\u
884C
\u3055\u
308C
\u3066\u3044\u
308B
smfcode.order.out.notFound
=
\u
4F5C
\u
696D
\u6307\u
793A
\u
66F8
\u
304C
\u
898B
\u3064\u
304B
\u3089\u
306A
\u3044
smfcode.order.out.maxOrder
=
\u
5B9F
\u
884C
\u
53EF
\u
80FD
\u
306A
\u
30EF
\u
30FC
\u
30AF
\u
30AA
\u
30FC
\u
30C0
\u
30FC
\u
306E
\u6700\u5927\u6570\u
306B
\u9054\u3057\u3066\u3044\u
308B
smfcode.order.out.noTask
=
\u
4F5C
\u
696D
\u6307\u
793A
\u
304C
\u
5B9F
\u
884C
\u3067\u
304D
\u
306A
\u3044\u
30BF
\u
30B9
\u
30AF
smfcode.cannotUpdateOrderNum
=
\u
30EF
\u
30FC
\u
30AF
\u
30AA
\u
30FC
\u
30C0
\u
30FC
\u
304C
\u5728\u
5EAB
\u5207\u
308C
\u3067\u6570\u
91CF
\u
304C
\u5909\u
66F4
\u3067\u
304D
\u
306A
\u3044
smfcode.order.close.success=
\u
30EF
\u
30FC
\u
30AF
\u
30AA
\u
30FC
\u
30C0
\u
30FC
\u
304C
\u
6B63
\u
5E38
\u
306B
\u
7D42
\u
4E86
\u3057\u
307E
\u3057\u
305F
\u3002
smfcode.order.close.taskNotEnd
=
\u
672A
\u
51E6
\u7406\u
306E
\u
30BF
\u
30B9
\u
30AF
\u
304C
\u3042\u
308B
\u
30EF
\u
30FC
\u
30AF
\u
30AA
\u
30FC
\u
30C0
\u
30FC
smfcore.manualOut
=
\u
30DE
\u
30CB
\u
30E5
\u
30A2
\u
30EB
\u
30A2
\u
30A6
\u
30C8
\u
30D0
\u
30A6
\u
30F3
\u
30C9
smfcode.error.barcode.noRules
=
\u
69CB
\u6587\u
89E3
\u6790\u
30EB
\u
30FC
\u
30EB
\u
304C
\u
5B9A
\u
7FA9
\u3055\u
308C
\u3066\u3044\u
306A
\u3044
f
smfcode.error.barcode.wrongLength
=
\u
30D0
\u
30FC
\u
30B3
\u
30FC
\u
30C9[{0}]
\u
306E
\u9577\u3055\u
304C
\u
4E0D
\u
6B63
\u3067\u3059
smfcode.error.barcode.noField
=
\u
30D0
\u
30FC
\u
30B3
\u
30FC
\u
30C9
\u
306E
\u
89E3
\u6790\u
306B
\u5931\u6557\u3057\u
307E
\u3057\u
305F
\u3002\u
30D5
\u
30A3
\u
30FC
\u
30EB
\u
30C9{0}
\u
304C
\u
898B
\u3064\u
304B
\u
308A
\u
307E
\u
305B
\u3093
smfcode.error.barcode.pnNotExist
=
\u
30D5
\u
30A1
\u
30A4
\u
30EB{0}
\u
304C
\u
5B58
\u5728\u3057\u
306A
\u3044
smfcode.error.barcode.invalid
=
{0}
\u
306F
\u6709\u
52B9
\u
306A
\u
30D0
\u
30FC
\u
30B3
\u
30FC
\u
30C9
\u3067\u
306F
\u3042\u
308A
\u
307E
\u
305B
\u3093
smfcode.error.barcode.locked
=
\u
30E9
\u
30A4
\u
30D6
\u
30E9
\u
30EA
\u
30DD
\u
30B8
\u
30B7
\u
30E7
\u
30F3 [{0}]
\u
304C
\u
30ED
\u
30C3
\u
30AF
\u3055\u
308C
\u3066\u3044\u
308B
smfcode.manualOut.ok
=
\u
624B
\u
52D5
\u
7D42
\u
4E86
\u6210\u
529F
smfcode.manualOut.notFound
=
\u5009\u
5EAB
\u3067\u
30D1
\u
30EC
\u
30C3
\u
30C8
\u
60C5
\u5831\u
304C
\u
898B
\u3064\u
304B
\u3089\u
306A
\u3044
smfcode.order.lineCanotNull
=
\u
30E9
\u
30A4
\u
30F3
\u
304C
\u
7A7A
\u
304F
\u3053\u3068\u
306F
\u
306A
\u3044
smfcode.order.cannotUpdateLine
=
\u
4F5C
\u
696D
\u6307\u
793A
\u
66F8
\u
304C
\u
767A
\u
884C
\u3055\u
308C
\u3001\u
30E9
\u
30A4
\u
30F3
\u
306E
\u5909\u
66F4
\u
304C
\u3067\u
304D
\u
306A
\u3044\u
72B6
\u
614B
\u
306B
\u
306A
\u3063\u3066\u3044\u
308B
smfcode.order.uploadOK
=
\u
4F5C
\u
696D
\u6307\u
793A
\u
66F8
\u
306E
\u
30A2
\u
30C3
\u
30D7
\u
30ED
\u
30FC
\u
30C9
\u6210\u
529F
smfcode.order.ameExists
=
\u
4F5C
\u
696D
\u
30AA
\u
30FC
\u
30C0
\u
30FC
\u
540D
\u
300C{0}
\u
300D
\u
306F
\u
65E2
\u
306B
\u
5B58
\u5728\u3057\u3066\u3044\u
307E
\u3059
smfcode.order.hasClose
=
\u
30EF
\u
30FC
\u
30AF
\u
30AA
\u
30FC
\u
30C0
\u
30FC
\u
306E
\u
7D42
\u
4E86
smfcode.order.supplementOutFail
=
\u6392\u
51FA
\u
53EF
\u
80FD
\u
306A
\u
88DC
\u5145\u
54C1
\u
304C
\u
898B
\u3064\u
304B
\u3089\u
306A
\u3044
smfcode.materialBox.quantityshort
=
\u7269\u6599\u6570\u
91CF
\u
4E0D
\u
8DB3
smfcode.materialBox.invalid
=
\u
96D1
\u
8A8C
\u
306E
\u
60C5
\u5831\u
306F
\u
898B
\u3064\u
304B
\u
308A
\u
307E
\u
305B
\u3093\u3067\u3057\u
305F{0}
smfcode.materialBox.noReel
=
\u
30AB
\u
30BB
\u
30C3
\u
30C8
\u5185\u
306B
\u
8A72
\u
5F53
\u3059\u
308B
\u
7D20
\u6750\u
304C
\u
898B
\u3064\u
304B
\u3089\u
306A
\u3044
smfcode.materialBox.boxNoReel
=
\u
30AB
\u
30BB
\u
30C3
\u
30C8
\u
306B
\u
7D20
\u6750\u
304C
\u
306A
\u3044
smfcode.materialBox.inPos
=
\u3059\u3067\u
306B
\u5728\u
5EAB
\u
306E
\u3042\u
308B
\u
7D20
\u6750
{0}
smfcode.materialBox.inOtherBox
=
\u
30AB
\u
30BB
\u
30C3
\u
30C8
\u
306B
\u
65E2
\u
306B
\u5165\u3063\u3066\u3044\u
308B
\u
7D20
\u6750
{0}
smfcore.materialBox
=
\u
30AB
\u
30BB
\u
30C3
\u
30C8
\u
64CD
\u
4F5C
\ No newline at end of file
src/main/resources/messages_zh_CN.properties
查看文件 @
e91fb98
...
...
@@ -29,7 +29,7 @@ smfcore.notFindPos=\u672A\u627E\u5230\u9501\u5B9A\u5E93\u4F4D
smfcore.error.barcode.empty
=
\u
672A
\u
626B
\u5230\u6761\u7801
smfcore.error.barcode.many
=
\u
627E
\u5230\u
591A
\u
4E2A
\u6709\u6548\u6761\u7801
,
\u
65E0
\u
6CD5
\u5165\u
5E93
smfcore.error.barcode.expired
=
\u7269\u6599\u
5DF2
\u
8FC7
\u
671F,
\u
65E0
\u
6CD5
\u5165\u
5E93.
smfcore.allBoxView.noReel
=
\u
5E93
\u
4F4D
\u
4E2D
\u
65E0
\u7269\u6599
smfcore.allBoxView.noReel
=
\u
5E93
\u
4F4D
{0}
\u
4E2D
\u
65E0
\u7269\u6599
smfcode.error.barcode.many
=
\u
627E
\u5230\u
591A
\u
4E2A
\u6709\u6548\u7684\u6761\u7801
smfcode.error.barcode.noValidCode
=
\u
65E0
\u6548\u7684\u6761\u7801
smfcore.error.barcode.noValidCode
=
{0}
\u
4E0D
\u
662F
\u6709\u6548\u7684\u6761\u7801
...
...
@@ -93,3 +93,32 @@ smfcore.instruction=\u8BF4\u660E\u4E66
smfcore.about
=
\u5173\u
4E8E
smfcore.tacticsOuput
=
\u
7B56
\u7565\u
51FA
\u
5E93
smfcore.labelOuput
=
\u7269\u6599\u5206\u
7EC4
smfcode.order.out.executing
=
\u
5DE5
\u5355\u
6B63
\u5728\u6267\u
884C
smfcode.order.out.notFound
=
\u
5DE5
\u5355\u
672A
\u
627E
\u5230
smfcode.order.out.maxOrder
=
\u
5DF2
\u
8FBE
\u6700\u5927\u
53EF
\u6267\u
884C
\u
5DE5
\u5355\u6570
smfcode.order.out.noTask
=
\u
5DE5
\u5355\u
65E0
\u
53EF
\u6267\u
884C
\u7684\u
4EFB
\u
52A1
smfcode.cannotUpdateOrderNum
=
\u
5DE5
\u5355\u
5DF2
\u
51FA
\u
5E93
\u
FF0C
\u
4E0D
\u
80FD
\u
4FEE
\u6539\u6570\u
91CF
smfcode.order.close.success
=
\u
5DE5
\u5355\u5173\u
95ED
\u6210\u
529F
smfcode.order.close.taskNotEnd
=
\u
5DE5
\u5355\u
8FD8
\u6709\u
672A
\u
5B8C
\u6210\u7684\u
4EFB
\u
52A1
smfcore.manualOut
=
\u
624B
\u
52A8
\u
51FA
\u
5E93
smfcode.error.barcode.noRules
=
\u
89E3
\u6790\u
89C4
\u5219\u
672A
\u
5B9A
\u
4E49
smfcode.error.barcode.wrongLength
=
\u6761\u7801
[{0}]
\u
957F
\u
5EA6
\u9519\u
8BEF
smfcode.error.barcode.noField
=
\u6761\u7801\u
89E3
\u6790\u5931\u
8D25,
\u
672A
\u
627E
\u5230
{0}
\u
5B57
\u
6BB5
smfcode.error.barcode.pnNotExist
=
x
\u6863\u6848
{0}
\u
4E0D
\u
5B58
\u5728
smfcode.error.barcode.invalid
=
{0}
\u
4E0D
\u
662F
\u6709\u6548\u7684\u6761\u7801
smfcode.error.barcode.locked
=
\u
5E93
\u
4F4D[{0}]
\u
5DF2
\u
88AB
\u9501\u
5B9A
smfcode.manualOut.ok
=
\u
624B
\u
52A8
\u
51FA
\u
5E93
\u6210\u
529F
smfcode.manualOut.notFound
=
\u
4ED3
\u
5E93
\u
4E2D
\u
672A
\u
627E
\u5230\u6599\u
76D8
\u
4FE1
\u
606F
smfcode.order.lineCanotNull
=
\u
7EBF
\u
522B
\u
4E0D
\u
80FD
\u
4E3A
\u
7A7A
smfcode.order.cannotUpdateLine
=
\u
5DE5
\u5355\u
5DF2
\u
51FA
\u
5E93
\u
FF0C
\u
4E0D
\u
80FD
\u
4FEE
\u6539\u
7EBF
\u
522B
smfcode.order.uploadOK
=
\u
5DE5
\u5355\u
4E0A
\u
4F20
\u6210\u
529F
smfcode.order.ameExists
=
\u
5DE5
\u5355\u
540D
\u
79F0[{0}]
\u
5DF2
\u
5B58
\u5728
smfcode.order.hasClose
=
\u
5DE5
\u5355\u
5DF2
\u5173\u
95ED
smfcode.order.supplementOutFail
=
\u
672A
\u
627E
\u5230\u
53EF
\u
4EE5
\u
51FA
\u
5E93
\u7684\u8865\u6599
smfcode.materialBox.quantityshort
=
\u7269\u6599\u6570\u
91CF
\u
4E0D
\u
8DB3
smfcode.materialBox.invalid
=
\u
672A
\u
627E
\u5230\u6599\u
76D2
\u
4FE1
\u
606F{0}
smfcode.materialBox.noReel
=
\u6599\u
76D2
\u
4E2D
\u
672A
\u
627E
\u5230\u
5BF9
\u
5E94
\u7269\u6599
smfcode.materialBox.boxNoReel
=
\u6599\u
76D2
\u
4E2D
\u
65E0
\u7269\u6599
smfcode.materialBox.inPos
=
\u7269\u6599\u
5DF2
\u5728\u
5E93
\u
4F4D{0}
\u
4E2D
smfcode.materialBox.inOtherBox
=
\u7269\u6599\u
5DF2
\u5728\u6599\u
76D2{0}
\u
4E2D
smfcore.materialBox
=
\u6599\u
76D2
\u
64CD
\u
4F5C
\ No newline at end of file
src/main/resources/messages_zh_TW.properties
查看文件 @
e91fb98
...
...
@@ -29,7 +29,7 @@ smfcore.notFindPos=\u672A\u627E\u5230\u9396\u5B9A\u5EAB\u4F4D
smfcore.error.barcode.empty
=
\u
672A
\u6383\u5230\u
689D
\u
78BC
smfcore.error.barcode.many
=
\u
627E
\u5230\u
591A
\u
500B
\u6709\u6548\u
689D
\u
78BC,
\u7121\u
6CD5
\u5165\u
5EAB
smfcore.error.barcode.expired
=
\u7269\u6599\u
5DF2
\u
904E
\u
671F,
\u7121\u
6CD5
\u5165\u
5EAB.
smfcore.allBoxView.noReel
=
\u
5EAB
\u
4F4D
\u
4E2D
\u7121\u7269\u6599
smfcore.allBoxView.noReel
=
\u
5EAB
\u
4F4D
{0}
\u
4E2D
\u7121\u7269\u6599
smfcode.error.barcode.many
=
\u
627E
\u5230\u
591A
\u
500B
\u6709\u6548\u7684\u
689D
\u
78BC
smfcode.error.barcode.noValidCode
=
\u7121\u6548\u7684\u
689D
\u
78BC
smfcore.error.barcode.noValidCode
=
{0}
\u
4E0D
\u
662F
\u6709\u6548\u7684\u
689D
\u
78BC
...
...
@@ -93,3 +93,32 @@ smfcore.instruction=\u8AAA\u660E\u66F8
smfcore.about
=
\u
95DC
\u
65BC
smfcore.tacticsOuput
=
\u
7B56
\u7565\u
51FA
\u
5EAB
smfcore.labelOuput
=
\u7269\u6599\u5206\u
7D44
smfcode.order.out.executing
=
\u
5DE5
\u
55AE
\u
6B63
\u5728\u
57F7
\u
884C
smfcode.order.out.notFound
=
\u
5DE5
\u
55AE
\u
672A
\u
627E
\u5230
smfcode.order.out.maxOrder
=
\u
5DF2
\u9054\u5230\u6700\u5927\u
53EF
\u
57F7
\u
884C
\u
5DE5
\u
55AE
\u6578
smfcode.order.out.noTask
=
\u
5DE5
\u
55AE
\u7121\u
53EF
\u
57F7
\u
884C
\u7684\u
4EFB
\u
52D9
smfcode.cannotUpdateOrderNum
=
\u
5DE5
\u
55AE
\u
5DF2
\u
51FA
\u
5EAB
\u
FF0C
\u
4E0D
\u
80FD
\u
4FEE
\u6539\u6578\u
91CF
smfcode.order.close.success
=
\u
5DE5
\u
55AE
\u
95DC
\u9589\u6210\u
529F
smfcode.order.close.taskNotEnd
=
\u
5DE5
\u
55AE
\u9084\u6709\u
672A
\u
5B8C
\u6210\u7684\u
4EFB
\u
52D9
smfcore.manualOut
=
\u
624B
\u
52D5
\u
51FA
\u
5EAB
smfcode.error.barcode.noRules
=
\u
89E3
\u6790\u
898F
\u5247\u
672A
\u
5B9A
\u
7FA9
smfcode.error.barcode.wrongLength
=
\u
689D
\u
78BC[{0}]
\u9577\u
5EA6
\u
932F
\u
8AA4
smfcode.error.barcode.noField
=
\u
689D
\u
78BC
\u
89E3
\u6790\u5931\u6557\u
FF0C
\u
672A
\u
627E
\u5230
{0}
\u
5B57
\u
6BB5
smfcode.error.barcode.pnNotExist
=
\u
6A94
\u6848
{0}
\u
4E0D
\u
5B58
\u5728
smfcode.error.barcode.invalid
=
{0}
\u
4E0D
\u
662F
\u6709\u6548\u7684\u
689D
\u
78BC
smfcode.error.barcode.locked
=
\u
5EAB
\u
4F4D[{0}]
\u
5DF2
\u
88AB
\u9396\u
5B9A
smfcode.manualOut.ok
=
\u
624B
\u
52D5
\u
51FA
\u
5EAB
\u6210\u
529F
smfcode.manualOut.notFound
=
\u5009\u
5EAB
\u
4E2D
\u
672A
\u
627E
\u5230\u6599\u
76E4
\u
4FE1
\u
606F
smfcode.order.lineCanotNull
=
\u
7DDA
\u5225\u
4E0D
\u
80FD
\u
70BA
\u
7A7A
smfcode.order.cannotUpdateLine
=
\u
5DE5
\u
55AE
\u
5DF2
\u
51FA
\u
5EAB
\u
FF0C
\u
4E0D
\u
80FD
\u
4FEE
\u6539\u
7DDA
\u5225
smfcode.order.uploadOK
=
\u
5DE5
\u
55AE
\u
4E0A
\u
50B3
\u6210\u
529F
smfcode.order.ameExists
=
\u
5DE5
\u
55AE
\u
540D
\u
7A31[{0}]
\u
5DF2
\u
5B58
\u5728
smfcode.order.hasClose
=
\u
5DE5
\u
55AE
\u
5DF2
\u
95DC
\u9589
smfcode.order.supplementOutFail
=
\u
672A
\u
627E
\u5230\u
53EF
\u
4EE5
\u
51FA
\u
5EAB
\u7684\u
88DC
\u6599
smfcode.materialBox.quantityshort
=
\u7269\u6599\u6570\u
91CF
\u
4E0D
\u
8DB3
smfcode.materialBox.invalid
=
\u
672A
\u
627E
\u5230\u6599\u
76D2
\u
4FE1
\u
606F{0}
smfcode.materialBox.noReel
=
\u6599\u
76D2
\u
4E2D
\u
672A
\u
627E
\u5230\u
5C0D
\u
61C9
\u7269\u6599
smfcode.materialBox.boxNoReel
=
\u6599\u
76D2
\u
4E2D
\u7121\u7269\u6599
smfcode.materialBox.inPos
=
\u7269\u6599\u
5DF2
\u5728\u
5EAB
\u
4F4D{0}
\u
4E2D
smfcode.materialBox.inOtherBox
=
\u7269\u6599\u
5DF2
\u5728\u6599\u
76D2{0}
\u
4E2D
smfcore.materialBox
=
\u6599\u
76D2
\u
64CD
\u
4F5C
\ No newline at end of file
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论