Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit f4f1beb5
由
孙克
编写于
2024-04-26 14:40:33 +0800
浏览文件
选项
浏览文件
标签
下载
差异文件
Merge branch 'master' of
http://106.15.194.121:8083/sunke/smf-core
2 个父辈
ad74ca3e
94964b9c
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
35 个修改的文件
包含
1125 行增加
和
21 行删除
pom.xml
src/main/java/com/neotel/smfcore/common/init/MenuInit.java
src/main/java/com/neotel/smfcore/common/utils/Constants.java
src/main/java/com/neotel/smfcore/common/utils/HttpHelper.java
src/main/java/com/neotel/smfcore/core/api/SmfApi.java
src/main/java/com/neotel/smfcore/core/api/listener/BaseSmfApiListener.java
src/main/java/com/neotel/smfcore/core/api/listener/ISmfApiListener.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/BaseDeviceHandler.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/NLMShelfHandler.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/NLSMShelfHandler.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/NLSShelfHandler.java
src/main/java/com/neotel/smfcore/core/storage/enums/DeviceType.java
src/main/java/com/neotel/smfcore/core/storage/service/po/Storage.java
src/main/java/com/neotel/smfcore/core/system/util/DevicesStatusUtil.java
src/main/java/com/neotel/smfcore/custom/hanwha/client/MyWebSocketClient.java
src/main/java/com/neotel/smfcore/custom/hanwha/client/WsMsgReceivedListener.java
src/main/java/com/neotel/smfcore/custom/hanwha/controller/HanwhaController.java
src/main/java/com/neotel/smfcore/custom/hanwha/handler/HanwhaApiHandler.java
src/main/java/com/neotel/smfcore/custom/hanwha/handler/TMSApis.java
src/main/java/com/neotel/smfcore/custom/hanwha/handler/TMSCommunicator.java
src/main/java/com/neotel/smfcore/custom/hanwha/handler/TMS_Code.java
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSDockingCartInfo.java
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSOrderCodeInfo.java
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSPart.java
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSPartReelPos.java
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSPartReelStatus.java
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSPos.java
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSRackStatus.java
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSReserve.java
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSResultMsg.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
查看文件 @
f4f1beb
...
@@ -248,6 +248,11 @@
...
@@ -248,6 +248,11 @@
<artifactId>
spring-boot-starter-test
</artifactId>
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
<scope>
test
</scope>
</dependency>
</dependency>
<dependency>
<groupId>
org.java-websocket
</groupId>
<artifactId>
Java-WebSocket
</artifactId>
<version>
1.3.8
</version>
</dependency>
</dependencies>
</dependencies>
...
@@ -290,6 +295,7 @@
...
@@ -290,6 +295,7 @@
</plugin>
</plugin>
<plugin>
<plugin>
<artifactId>
maven-resources-plugin
</artifactId>
<artifactId>
maven-resources-plugin
</artifactId>
<version>
3.1.0
</version>
<configuration>
<configuration>
<encoding>
utf-8
</encoding>
<encoding>
utf-8
</encoding>
<useDefaultDelimiters>
false
</useDefaultDelimiters>
<useDefaultDelimiters>
false
</useDefaultDelimiters>
...
...
src/main/java/com/neotel/smfcore/common/init/MenuInit.java
查看文件 @
f4f1beb
...
@@ -130,6 +130,8 @@ public class MenuInit {
...
@@ -130,6 +130,8 @@ public class MenuInit {
//电子看板
//电子看板
addDefaultFunctionMenu
(
1
,
boardMap
,
"仪表盘2"
,
"eleckanban"
,
"eleckanban/index"
,
"kanban"
);
addDefaultFunctionMenu
(
1
,
boardMap
,
"仪表盘2"
,
"eleckanban"
,
"eleckanban/index"
,
"kanban"
);
//SP仪表盘
addDefaultFunctionMenu
(
0
,
boardMap
,
"SP仪表盘"
,
"spkanban"
,
"kanban/spkanban/index"
,
"kanban"
);
//设备看板
//设备看板
addDefaultFunctionMenu
(
1
,
null
,
"设备互联"
,
"lockMaterial"
,
"lockMaterial/material/index"
,
"kanban"
,
DEFAULT_SHOW_MENU
);
addDefaultFunctionMenu
(
1
,
null
,
"设备互联"
,
"lockMaterial"
,
"lockMaterial/material/index"
,
"kanban"
,
DEFAULT_SHOW_MENU
);
...
...
src/main/java/com/neotel/smfcore/common/utils/Constants.java
查看文件 @
f4f1beb
...
@@ -173,4 +173,10 @@ public class Constants {
...
@@ -173,4 +173,10 @@ public class Constants {
*/
*/
public
static
final
String
CACHE_closeWorkOrder
=
"CACHE_closeWorkOrder"
;
public
static
final
String
CACHE_closeWorkOrder
=
"CACHE_closeWorkOrder"
;
/**
* 料架自动灭灯时间(毫秒),默认8000秒
*/
public
static
final
String
CACHE_shelfDelayCloseTime
=
"CACHE_shelfDelayCloseTime"
;
}
}
src/main/java/com/neotel/smfcore/common/utils/HttpHelper.java
查看文件 @
f4f1beb
...
@@ -180,7 +180,7 @@ public class HttpHelper {
...
@@ -180,7 +180,7 @@ public class HttpHelper {
//httpClient.close();
//httpClient.close();
return
responseContent
;
return
responseContent
;
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
throw
new
ApiException
(
"Request to ["
+
url
+
"] failed:"
+
e
.
getMessage
());
throw
new
ApiException
(
"Request to ["
+
url
+
"]
["
+
requestBody
+
"]
failed:"
+
e
.
getMessage
());
}
finally
{
}
finally
{
try
{
try
{
if
(
response
!=
null
)
{
if
(
response
!=
null
)
{
...
...
src/main/java/com/neotel/smfcore/core/api/SmfApi.java
查看文件 @
f4f1beb
...
@@ -2,9 +2,7 @@ package com.neotel.smfcore.core.api;
...
@@ -2,9 +2,7 @@ package com.neotel.smfcore.core.api;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Lists
;
import
com.neotel.smfcore.common.exception.ApiException
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.init.MenuInit
;
import
com.neotel.smfcore.core.api.listener.ISmfApiListener
;
import
com.neotel.smfcore.core.api.listener.ISmfApiListener
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.api.bean.CodeValidateParam
;
import
com.neotel.smfcore.core.api.bean.CodeValidateParam
;
...
@@ -84,6 +82,8 @@ public class SmfApi {
...
@@ -84,6 +82,8 @@ public class SmfApi {
@Value
(
"${api.fetchOrderUrl:}"
)
@Value
(
"${api.fetchOrderUrl:}"
)
protected
String
fetchOrderUrl
=
""
;
protected
String
fetchOrderUrl
=
""
;
@Value
(
"${api.deviceStatusUrl:}"
)
protected
String
deviceStatusUrl
=
""
;
@PostConstruct
@PostConstruct
public
void
init
(){
public
void
init
(){
...
@@ -99,6 +99,7 @@ public class SmfApi {
...
@@ -99,6 +99,7 @@ public class SmfApi {
fetchInListUrl
=
dataCache
.
getConfigCache
(
"api.fetchInListUrl"
,
fetchInListUrl
);
fetchInListUrl
=
dataCache
.
getConfigCache
(
"api.fetchInListUrl"
,
fetchInListUrl
);
fetchOrderUrl
=
dataCache
.
getConfigCache
(
"api.fetchOrderUrl"
,
fetchOrderUrl
);
fetchOrderUrl
=
dataCache
.
getConfigCache
(
"api.fetchOrderUrl"
,
fetchOrderUrl
);
loginCheckUrl
=
dataCache
.
getConfigCache
(
"api.loginCheckUrl"
,
loginCheckUrl
);
loginCheckUrl
=
dataCache
.
getConfigCache
(
"api.loginCheckUrl"
,
loginCheckUrl
);
deviceStatusUrl
=
dataCache
.
getConfigCache
(
"api.deviceStatusUrl"
,
deviceStatusUrl
);
}
}
/**
/**
...
@@ -277,7 +278,22 @@ public class SmfApi {
...
@@ -277,7 +278,22 @@ public class SmfApi {
}
}
return
null
;
return
null
;
}
}
/**
* 设备状态变化是调用
* @return
* @throws ValidateException
*/
public
boolean
deviceStatusChanges
(
String
[]
cids
,
Integer
[]
status
)
throws
ValidateException
{
if
(
isUrlExist
(
deviceStatusUrl
))
{
for
(
ISmfApiListener
apiListener
:
apiListenerList
)
{
if
(
apiListener
.
isForThisApi
(
apiName
))
{
return
apiListener
.
deviceStatusChanges
(
deviceStatusUrl
,
cids
,
status
);
}
}
}
return
true
;
}
public
String
getApiName
(){
public
String
getApiName
(){
return
apiName
;
return
apiName
;
}
}
...
...
src/main/java/com/neotel/smfcore/core/api/listener/BaseSmfApiListener.java
查看文件 @
f4f1beb
...
@@ -73,7 +73,7 @@ public abstract class BaseSmfApiListener implements ISmfApiListener {
...
@@ -73,7 +73,7 @@ public abstract class BaseSmfApiListener implements ISmfApiListener {
return
component
;
return
component
;
}
}
protected
Component
resolveComponent
(
Barcode
barcode
){
protected
Component
resolveComponent
(
Barcode
barcode
){
return
resolveComponent
(
barcode
,
COMPONENT_TYPE
.
COMPONENT
);
return
resolveComponent
(
barcode
,
COMPONENT_TYPE
.
COMPONENT
);
}
}
@Override
@Override
public
void
inTaskStatusChange
(
String
inNotifyUrl
,
DataLog
task
){
public
void
inTaskStatusChange
(
String
inNotifyUrl
,
DataLog
task
){
...
@@ -100,7 +100,7 @@ public abstract class BaseSmfApiListener implements ISmfApiListener {
...
@@ -100,7 +100,7 @@ public abstract class BaseSmfApiListener implements ISmfApiListener {
}
}
@Override
@Override
public
LiteOrder
fetchOrder
(
String
fetchOrderUrl
,
String
orderNumber
,
String
username
){
public
LiteOrder
fetchOrder
(
String
fetchOrderUrl
,
String
orderNumber
,
String
username
)
{
return
null
;
return
null
;
}
}
...
@@ -110,7 +110,7 @@ public abstract class BaseSmfApiListener implements ISmfApiListener {
...
@@ -110,7 +110,7 @@ public abstract class BaseSmfApiListener implements ISmfApiListener {
}
}
@Override
@Override
public
DataLog
canCheckOut
(
String
outCheckUrl
,
DataLog
dataLog
)
throws
ValidateException
{
public
DataLog
canCheckOut
(
String
outCheckUrl
,
DataLog
dataLog
)
throws
ValidateException
{
return
null
;
return
null
;
}
}
...
@@ -120,7 +120,7 @@ public abstract class BaseSmfApiListener implements ISmfApiListener {
...
@@ -120,7 +120,7 @@ public abstract class BaseSmfApiListener implements ISmfApiListener {
}
}
@Override
@Override
public
InList
fetchInList
(
String
fetchInListUrl
,
String
number
){
public
InList
fetchInList
(
String
fetchInListUrl
,
String
number
)
{
return
null
;
return
null
;
}
}
protected
String
getData
(
Map
<
String
,
Object
>
dataMap
,
String
dataKey
)
{
protected
String
getData
(
Map
<
String
,
Object
>
dataMap
,
String
dataKey
)
{
...
@@ -131,7 +131,7 @@ public abstract class BaseSmfApiListener implements ISmfApiListener {
...
@@ -131,7 +131,7 @@ public abstract class BaseSmfApiListener implements ISmfApiListener {
return
data
.
toString
();
return
data
.
toString
();
}
}
}
}
protected
Integer
getIntData
(
Map
<
String
,
Object
>
dataMap
,
String
dataKey
,
Integer
defValue
)
{
protected
Integer
getIntData
(
Map
<
String
,
Object
>
dataMap
,
String
dataKey
,
Integer
defValue
)
{
try
{
try
{
Object
data
=
dataMap
.
get
(
dataKey
);
Object
data
=
dataMap
.
get
(
dataKey
);
if
(
data
==
null
)
{
if
(
data
==
null
)
{
...
@@ -147,4 +147,9 @@ public abstract class BaseSmfApiListener implements ISmfApiListener {
...
@@ -147,4 +147,9 @@ public abstract class BaseSmfApiListener implements ISmfApiListener {
}
}
return
defValue
;
return
defValue
;
}
}
@Override
public
boolean
deviceStatusChanges
(
String
deviceStatusUrl
,
String
[]
cids
,
Integer
[]
status
)
{
return
true
;
}
}
}
src/main/java/com/neotel/smfcore/core/api/listener/ISmfApiListener.java
查看文件 @
f4f1beb
...
@@ -72,4 +72,12 @@ public interface ISmfApiListener {
...
@@ -72,4 +72,12 @@ public interface ISmfApiListener {
InList
fetchInList
(
String
fetchInListUrl
,
String
number
);
InList
fetchInList
(
String
fetchInListUrl
,
String
number
);
/**
* 设备状态变化
* @param deviceStatusUrl
* @param cids
* @return
*/
boolean
deviceStatusChanges
(
String
deviceStatusUrl
,
String
[]
cids
,
Integer
[]
status
);
}
}
src/main/java/com/neotel/smfcore/core/device/handler/impl/BaseDeviceHandler.java
查看文件 @
f4f1beb
...
@@ -855,16 +855,25 @@ public class BaseDeviceHandler implements IDeviceHandler {
...
@@ -855,16 +855,25 @@ public class BaseDeviceHandler implements IDeviceHandler {
List
<
MsgInfo
>
mergeMsgList
=
statusBean
.
MsgDataProcess
();
List
<
MsgInfo
>
mergeMsgList
=
statusBean
.
MsgDataProcess
();
//判断是否刚刚上线
//判断是否刚刚上线
StatusBean
bean
=
DevicesStatusUtil
.
getStatusBean
(
statusBean
.
getCid
());
StatusBean
bean
=
DevicesStatusUtil
.
getStatusBean
(
statusBean
.
getCid
());
int
preStatus
=-
1
;
if
(
bean
==
null
||
bean
.
getBoxStatus
()
==
null
)
{
if
(
bean
==
null
||
bean
.
getBoxStatus
()
==
null
)
{
DeviceMessageUtil
.
addOnlineMessage
(
statusBean
.
getCid
(),
""
,
statusBean
.
getClientIp
());
DeviceMessageUtil
.
addOnlineMessage
(
statusBean
.
getCid
(),
""
,
statusBean
.
getClientIp
());
DevicesStatusUtil
.
updateClientMsg
(
statusBean
.
getCid
(),
new
ArrayList
<>());
DevicesStatusUtil
.
updateClientMsg
(
statusBean
.
getCid
(),
new
ArrayList
<>());
}
else
if
(
bean
.
timeOut
()
&&
(
bean
.
getOfflineTime
()
>
-
1
))
{
}
else
if
(
bean
.
timeOut
()
&&
(
bean
.
getOfflineTime
()
>
-
1
))
{
DeviceMessageUtil
.
addOnlineMessage
(
statusBean
.
getCid
(),
""
,
statusBean
.
getClientIp
());
DeviceMessageUtil
.
addOnlineMessage
(
statusBean
.
getCid
(),
""
,
statusBean
.
getClientIp
());
DevicesStatusUtil
.
updateClientMsg
(
statusBean
.
getCid
(),
new
ArrayList
<>());
DevicesStatusUtil
.
updateClientMsg
(
statusBean
.
getCid
(),
new
ArrayList
<>());
}
else
{
preStatus
=
statusBean
.
getStatus
();
}
}
if
(
ObjectUtil
.
isNotEmpty
(
mergeMsgList
)&&
mergeMsgList
.
size
()>
0
)
{
if
(
ObjectUtil
.
isNotEmpty
(
mergeMsgList
)&&
mergeMsgList
.
size
()>
0
)
{
DevicesStatusUtil
.
updateClientMsg
(
statusBean
.
getCid
(),
mergeMsgList
);
DevicesStatusUtil
.
updateClientMsg
(
statusBean
.
getCid
(),
mergeMsgList
);
}
}
//状态变化
if
(
statusBean
.
getStatus
()!=
preStatus
){
smfApi
.
deviceStatusChanges
(
new
String
[]{
statusBean
.
getCid
()},
new
Integer
[]{
statusBean
.
getStatus
()});
}
// //判断是否刚刚上线
// //判断是否刚刚上线
// StatusBean bean = DevicesStatusUtil.getStatusBean(statusBean.getCid());
// StatusBean bean = DevicesStatusUtil.getStatusBean(statusBean.getCid());
// if (bean == null || bean.getBoxStatus() == null) {
// if (bean == null || bean.getBoxStatus() == null) {
...
...
src/main/java/com/neotel/smfcore/core/device/handler/impl/NLMShelfHandler.java
查看文件 @
f4f1beb
...
@@ -5,6 +5,7 @@ import com.google.common.base.Strings;
...
@@ -5,6 +5,7 @@ import com.google.common.base.Strings;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Lists
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.barcode.bean.CodeBean
;
import
com.neotel.smfcore.core.barcode.bean.CodeBean
;
...
@@ -169,10 +170,19 @@ public class NLMShelfHandler extends BaseDeviceHandler {
...
@@ -169,10 +170,19 @@ public class NLMShelfHandler extends BaseDeviceHandler {
}
}
log
.
info
(
str
+
":"
+
allOpStr
);
log
.
info
(
str
+
":"
+
allOpStr
);
}
}
private
long
GetCloseTime
(
long
delayCloseTime
){
Long
closeTime
=
dataCache
.
getCache
(
Constants
.
CACHE_shelfDelayCloseTime
);
if
(
closeTime
==
null
||
closeTime
<=
0
){
closeTime
=
delayCloseTime
;
dataCache
.
updateCache
(
Constants
.
CACHE_shelfDelayCloseTime
,
closeTime
);
}
return
closeTime
;
}
/**
/**
* 开灯, 等6秒后关闭
* 开灯, 等6秒后关闭
*/
*/
private
void
openAndCloseLights
(
final
Storage
storage
,
final
List
<
String
>
posNameList
,
final
long
delayCloseTime
,
String
color
)
{
private
void
openAndCloseLights
(
final
Storage
storage
,
final
List
<
String
>
posNameList
,
final
long
delayCloseTime
,
String
color
)
{
final
String
cid
=
storage
.
getCid
();
final
String
cid
=
storage
.
getCid
();
if
(
posNameList
==
null
)
{
if
(
posNameList
==
null
)
{
return
;
return
;
...
@@ -183,7 +193,7 @@ public class NLMShelfHandler extends BaseDeviceHandler {
...
@@ -183,7 +193,7 @@ public class NLMShelfHandler extends BaseDeviceHandler {
DevicesStatusUtil
.
appendOp
(
cid
,
"open"
,
lightOnStr
);
DevicesStatusUtil
.
appendOp
(
cid
,
"open"
,
lightOnStr
);
allLightOnStr
+=
lightOnStr
+
","
;
allLightOnStr
+=
lightOnStr
+
","
;
}
}
log
.
info
(
"["
+
cid
+
"]点亮库位:"
+
allLightOnStr
);
log
.
info
(
"["
+
cid
+
"]点亮库位:"
+
allLightOnStr
+
",["
+
delayCloseTime
+
"]毫秒后自动灭灯"
);
//5秒后灭灯
//5秒后灭灯
Thread
closeTask
=
new
Thread
(
new
Runnable
()
{
Thread
closeTask
=
new
Thread
(
new
Runnable
()
{
...
@@ -234,7 +244,7 @@ public class NLMShelfHandler extends BaseDeviceHandler {
...
@@ -234,7 +244,7 @@ public class NLMShelfHandler extends BaseDeviceHandler {
if
(
currentStorage
==
null
||
!
currentStorage
.
isNLMShelf
())
{
if
(
currentStorage
==
null
||
!
currentStorage
.
isNLMShelf
())
{
return
ResultBean
.
newErrorResult
(
1
,
"smfcore.shelf.nlm.notFound"
,
"未找到移动料架{0}"
,
new
String
[]{
storageId
});
return
ResultBean
.
newErrorResult
(
1
,
"smfcore.shelf.nlm.notFound"
,
"未找到移动料架{0}"
,
new
String
[]{
storageId
});
}
}
StoragePos
lastPutinPos
=
lastPutinPosMap
.
get
(
currentStorage
.
get
I
d
());
StoragePos
lastPutinPos
=
lastPutinPosMap
.
get
(
currentStorage
.
get
Ci
d
());
if
(
lastPutinPos
!=
null
)
{
if
(
lastPutinPos
!=
null
)
{
log
.
info
(
"扫码时关闭上一个库位:"
+
lastPutinPos
.
getPosName
());
log
.
info
(
"扫码时关闭上一个库位:"
+
lastPutinPos
.
getPosName
());
opPosLight
(
"close"
,
currentStorage
,
lastPutinPos
,
""
);
opPosLight
(
"close"
,
currentStorage
,
lastPutinPos
,
""
);
...
@@ -347,7 +357,7 @@ public class NLMShelfHandler extends BaseDeviceHandler {
...
@@ -347,7 +357,7 @@ public class NLMShelfHandler extends BaseDeviceHandler {
}
}
}
}
}
}
int
delayCloseTime
=
8000
;
long
delayCloseTime
=
GetCloseTime
(
8000
)
;
String
color
=
"red"
;
String
color
=
"red"
;
if
(
pos
!=
null
)
{
if
(
pos
!=
null
)
{
log
.
info
(
barcode
.
getPartNumber
()
+
" [ "
+
barcode
.
getBarcode
()
+
" ] "
+
"入库到:"
+
currentStorage
.
getName
()
+
"["
+
currentStorage
.
getCid
()
+
"] "
+
pos
.
getPosName
());
log
.
info
(
barcode
.
getPartNumber
()
+
" [ "
+
barcode
.
getBarcode
()
+
" ] "
+
"入库到:"
+
currentStorage
.
getName
()
+
"["
+
currentStorage
.
getCid
()
+
"] "
+
pos
.
getPosName
());
...
...
src/main/java/com/neotel/smfcore/core/device/handler/impl/NLSMShelfHandler.java
0 → 100644
查看文件 @
f4f1beb
package
com
.
neotel
.
smfcore
.
core
.
device
.
handler
.
impl
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.neotel.smfcore.common.utils.StringUtils
;
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.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.system.bean.OrderSetting
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.DevicesStatusUtil
;
import
io.swagger.annotations.Api
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.*
;
@Api
(
tags
=
"SHELF: NLSM(推荐库位钢网料架)"
)
@Slf4j
@Service
public
class
NLSMShelfHandler
extends
BaseDeviceHandler
{
@Override
public
DeviceType
getDeviceType
()
{
return
DeviceType
.
NLSM
;
}
@Override
public
StatusBean
handleClientRequest
(
StatusBean
statusBean
,
HttpServletRequest
request
)
{
statusBean
.
setClientIp
(
request
.
getRemoteHost
());
handleMsg
(
statusBean
);
statusBean
=
saveAlarmAndHumidity
(
statusBean
);
OrderSetting
orderSetting
=
dataCache
.
getOrderSetting
();
boolean
openZhiYin
=
orderSetting
.
getShelfLightType
().
equals
(
1
);
Map
<
String
,
List
<
DataLog
>>
outMap
=
new
HashMap
<>();
if
(
statusBean
!=
null
)
{
String
cid
=
statusBean
.
getCid
();
List
<
DataLog
>
finishedTasks
=
taskService
.
getFinishedTasks
();
for
(
DataLog
finishedTask
:
finishedTasks
)
{
if
(
finishedTask
.
getCid
().
equals
(
cid
)
&&
finishedTask
.
isCheckOutTask
()
&&
finishedTask
.
isCancel
()){
//取消的任务,需要关灯
taskService
.
removeFinishedTask
(
finishedTask
);
statusBean
.
addData
(
"close"
,
finishedTask
.
getPosName
());
}
}
Map
<
String
,
String
>
opMap
=
DevicesStatusUtil
.
getAndRemoveOp
(
statusBean
.
getCid
());
statusBean
.
addOp
(
opMap
);
}
//亮灯
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{
if
(
openZhiYin
&&
ObjectUtil
.
isNotEmpty
(
queueTask
.
getSourceId
()))
{
List
<
DataLog
>
dataLogList
=
outMap
.
get
(
queueTask
.
getSourceId
());
if
(
dataLogList
==
null
)
{
dataLogList
=
new
ArrayList
<>();
}
dataLogList
.
add
(
queueTask
);
outMap
.
put
(
queueTask
.
getSourceId
(),
dataLogList
);
}
else
{
color
=
ORDER_COLOR
.
BLUE
;
}
// }
}
// statusBean.addData("open",queueTask.getPosName()+"="+color.name());
addMergeData
(
statusBean
,
queueTask
,
"open"
,
color
.
name
());
log
.
info
(
"库位["
+
queueTask
.
getPosName
()
+
"]+亮灯:"
+
color
.
name
());
}
}
List
<
DataLog
>
dataLogs
=
getLightGuideTask
(
outMap
,
statusBean
.
getCid
());
for
(
DataLog
task
:
dataLogs
)
{
// statusBean.addData("open", task.getPosName() + "=" + ORDER_COLOR.fromRgb(task.getLightColor()).name());
if
(
StringUtils
.
isBlank
(
task
.
getLightColor
())){
task
.
setLightColor
(
ORDER_COLOR
.
BLUE
.
getRgb
());
}
String
color
=
ORDER_COLOR
.
fromRgb
(
task
.
getLightColor
()).
name
();
addMergeData
(
statusBean
,
task
,
"open"
,
color
);
}
return
statusBean
;
}
private
StatusBean
addMergeData
(
StatusBean
statusBean
,
DataLog
task
,
String
opKey
,
String
color
){
StoragePos
pos
=
storagePosManager
.
getByPosName
(
task
.
getPosName
());
if
(
pos
!=
null
){
List
<
String
>
relatedPosNames
=
pos
.
getMergePosList
();
if
(
relatedPosNames
==
null
||
relatedPosNames
.
isEmpty
()){
relatedPosNames
=
new
ArrayList
<>();
relatedPosNames
.
add
(
pos
.
getPosName
());
// log.info("操作库位["+pos.getPosName()+"]" + opKey);
}
else
{
// log.info("操作合并库位["+pos.getPosName()+"]" + opKey);
}
for
(
String
posName
:
relatedPosNames
){
statusBean
.
addData
(
opKey
,
posName
+
"="
+
color
);
}
}
return
statusBean
;
}
}
src/main/java/com/neotel/smfcore/core/device/handler/impl/NLSShelfHandler.java
查看文件 @
f4f1beb
...
@@ -4,7 +4,7 @@ import com.neotel.smfcore.core.storage.enums.DeviceType;
...
@@ -4,7 +4,7 @@ import com.neotel.smfcore.core.storage.enums.DeviceType;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
@Api
(
tags
=
"SHELF: NLS(钢网料架)"
)
@Api
(
tags
=
"SHELF: NLS(
扫码
钢网料架)"
)
@Slf4j
@Slf4j
public
class
NLSShelfHandler
extends
NLShelfHandler
{
public
class
NLSShelfHandler
extends
NLShelfHandler
{
...
...
src/main/java/com/neotel/smfcore/core/storage/enums/DeviceType.java
查看文件 @
f4f1beb
...
@@ -135,14 +135,20 @@ public enum DeviceType {
...
@@ -135,14 +135,20 @@ public enum DeviceType {
NLL
(
"storage.type.nll"
),
NLL
(
"storage.type.nll"
),
/**
/**
* 22 钢网料架 NLS
* 22
扫码
钢网料架 NLS
*/
*/
NLS
(
"storage.type.nls"
),
NLS
(
"storage.type.nls"
),
/**
/**
* 23 SMD_MIMO_G2
* 23 SMD_MIMO_G2
*/
*/
SMD_MIMO_G2
(
"storage.type.smdMimoG2"
)
SMD_MIMO_G2
(
"storage.type.smdMimoG2"
),
/**
* 24 推荐库位钢网料架 NLSM
*/
NLSM
(
"storage.type.nlsm"
),
;
;
private
String
key
;
private
String
key
;
...
@@ -164,6 +170,6 @@ public enum DeviceType {
...
@@ -164,6 +170,6 @@ public enum DeviceType {
}
}
public
static
List
<
DeviceType
>
availableTypeList
(){
public
static
List
<
DeviceType
>
availableTypeList
(){
return
Lists
.
newArrayList
(
AUTO
,
LINE
,
BATCH
,
SOLDERPASTE
,
VERTICALBOX
,
SMD_XL
,
SMD_DUO
,
SMD_XLC
,
SMD_XLR
,
VIRTUAL
,
NL
,
NLP
,
NLM
,
NLL
,
NLS
,
SMDBOX_THIRD
,
SMD_MIMO_G2
);
return
Lists
.
newArrayList
(
AUTO
,
LINE
,
BATCH
,
SOLDERPASTE
,
VERTICALBOX
,
SMD_XL
,
SMD_DUO
,
SMD_XLC
,
SMD_XLR
,
VIRTUAL
,
NL
,
NLP
,
NLM
,
NLL
,
NLS
,
NLSM
,
SMDBOX_THIRD
,
SMD_MIMO_G2
);
}
}
}
}
src/main/java/com/neotel/smfcore/core/storage/service/po/Storage.java
查看文件 @
f4f1beb
...
@@ -162,7 +162,7 @@ public class Storage extends BasePo implements Serializable {
...
@@ -162,7 +162,7 @@ public class Storage extends BasePo implements Serializable {
* 是否是移动料架
* 是否是移动料架
*/
*/
public
boolean
isNLMShelf
()
{
public
boolean
isNLMShelf
()
{
return
DeviceType
.
NLM
.
name
().
equals
(
type
);
return
DeviceType
.
NLM
.
name
().
equals
(
type
)
||
DeviceType
.
NLSM
.
name
().
equals
(
type
)
;
}
}
/**
/**
* 是否是垂直货柜
* 是否是垂直货柜
...
...
src/main/java/com/neotel/smfcore/core/system/util/DevicesStatusUtil.java
查看文件 @
f4f1beb
...
@@ -6,6 +6,7 @@ import com.google.common.collect.Maps;
...
@@ -6,6 +6,7 @@ import com.google.common.collect.Maps;
import
com.neotel.smfcore.common.init.MenuInit
;
import
com.neotel.smfcore.common.init.MenuInit
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.api.SmfApi
;
import
com.neotel.smfcore.core.dashboard.bean.dto.box.MesInfoDto
;
import
com.neotel.smfcore.core.dashboard.bean.dto.box.MesInfoDto
;
import
com.neotel.smfcore.core.device.bean.MsgInfo
;
import
com.neotel.smfcore.core.device.bean.MsgInfo
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
...
@@ -45,6 +46,14 @@ public class DevicesStatusUtil {
...
@@ -45,6 +46,14 @@ public class DevicesStatusUtil {
DevicesStatusUtil
.
menuInit
=
init
;
DevicesStatusUtil
.
menuInit
=
init
;
}
}
private
static
SmfApi
smfApi
;
@Autowired
private
void
setSmfApi
(
SmfApi
init
)
{
DevicesStatusUtil
.
smfApi
=
init
;
}
/**
/**
* 状态 map,key为 cid value 为状态 Bean
* 状态 map,key为 cid value 为状态 Bean
*/
*/
...
@@ -292,6 +301,7 @@ public class DevicesStatusUtil {
...
@@ -292,6 +301,7 @@ public class DevicesStatusUtil {
if
(
bean
.
getOfflineTime
()
==
-
1
&&
bean
.
timeOut
())
{
if
(
bean
.
getOfflineTime
()
==
-
1
&&
bean
.
timeOut
())
{
bean
.
setOfflineTime
(
System
.
currentTimeMillis
());
bean
.
setOfflineTime
(
System
.
currentTimeMillis
());
DeviceMessageUtil
.
addOfflineMessage
(
bean
.
getCid
(),
""
);
DeviceMessageUtil
.
addOfflineMessage
(
bean
.
getCid
(),
""
);
smfApi
.
deviceStatusChanges
(
new
String
[]{
bean
.
getCid
()},
new
Integer
[]{-
1
});
}
}
}
}
}
}
...
...
src/main/java/com/neotel/smfcore/custom/hanwha/client/MyWebSocketClient.java
0 → 100644
查看文件 @
f4f1beb
package
com
.
neotel
.
smfcore
.
custom
.
hanwha
.
client
;
import
lombok.extern.slf4j.Slf4j
;
import
org.java_websocket.client.WebSocketClient
;
import
org.java_websocket.handshake.ServerHandshake
;
import
java.net.URI
;
import
java.util.Date
;
import
java.util.Timer
;
import
java.util.TimerTask
;
@Slf4j
public
class
MyWebSocketClient
extends
WebSocketClient
{
private
WsMsgReceivedListener
msgReceivedListener
;
// 消息接收监听器
public
MyWebSocketClient
(
URI
serverUri
,
WsMsgReceivedListener
listener
)
{
super
(
serverUri
);
this
.
msgReceivedListener
=
listener
;
}
@Override
public
void
onOpen
(
ServerHandshake
serverHandshake
)
{
log
.
info
(
"onOpen "
);
log
.
info
((
new
Date
().
toString
())
+
"connect webSServer ok "
);
cancelReconnect
();
if
(
msgReceivedListener
!=
null
)
{
msgReceivedListener
.
onOpen
();
}
}
@Override
public
void
onMessage
(
String
s
)
{
log
.
info
(
"onMessage: "
+
s
);
if
(
msgReceivedListener
!=
null
){
msgReceivedListener
.
onMsgReceived
(
s
);
}
}
@Override
public
void
onClose
(
int
i
,
String
s
,
boolean
b
)
{
log
.
info
(
"onClose: code:{} reason:{} {}"
,
i
,
s
,
b
);
startReconnect
();
}
@Override
public
void
onError
(
Exception
e
)
{
log
.
error
(
"web socket client onerror :"
+
e
.
toString
());
//关闭后重新连接
try
{
close
();
}
catch
(
Exception
ex
){
log
.
error
(
"web socket client onerror close error:"
+
e
.
toString
());
}
startReconnect
();
}
private
static
final
long
RECONNECT_DELAY
=
5000
;
// 重连延迟时间,单位:毫秒
private
Timer
reconnectTimer
;
// 重连定时器
private
void
startReconnect
()
{
try
{
if
(
reconnectTimer
==
null
)
{
reconnectTimer
=
new
Timer
();
reconnectTimer
.
schedule
(
new
TimerTask
()
{
@Override
public
void
run
()
{
try
{
log
.
info
(
"startReconnect "
);
// 创建新的WebSocket连接
reconnect
();
}
catch
(
Exception
e
)
{
log
.
error
(
"出错:"
+
e
.
toString
());
}
}
},
RECONNECT_DELAY
);
}
}
catch
(
Exception
exception
)
{
log
.
error
(
"startReconnect error :"
+
exception
.
toString
());
}
}
private
void
cancelReconnect
()
{
try
{
if
(
reconnectTimer
!=
null
)
{
log
.
info
(
"cancelReconnect "
);
reconnectTimer
.
cancel
();
reconnectTimer
=
null
;
}
}
catch
(
Exception
exception
){
log
.
error
(
"cancelReconnect error :"
+
exception
.
toString
());
}
}
// private void reconnect() throws URISyntaxException {
// URI serverUri = super.getURI();
// MyWebSocketClient newClient = new MyWebSocketClient(serverUri);
// newClient.connect();
// }
}
src/main/java/com/neotel/smfcore/custom/hanwha/client/WsMsgReceivedListener.java
0 → 100644
查看文件 @
f4f1beb
package
com
.
neotel
.
smfcore
.
custom
.
hanwha
.
client
;
public
interface
WsMsgReceivedListener
{
void
onMsgReceived
(
String
message
);
void
onOpen
();
}
src/main/java/com/neotel/smfcore/custom/hanwha/controller/HanwhaController.java
0 → 100644
查看文件 @
f4f1beb
package
com
.
neotel
.
smfcore
.
custom
.
hanwha
.
controller
;
public
class
HanwhaController
{
}
src/main/java/com/neotel/smfcore/custom/hanwha/handler/HanwhaApiHandler.java
0 → 100644
查看文件 @
f4f1beb
package
com
.
neotel
.
smfcore
.
custom
.
hanwha
.
handler
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.JsonUtil
;
import
com.neotel.smfcore.core.api.bean.CodeValidateParam
;
import
com.neotel.smfcore.core.api.listener.BaseSmfApiListener
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.DevicesStatusUtil
;
import
com.neotel.smfcore.custom.hanwha.handler.bean.TMSPart
;
import
com.neotel.smfcore.custom.hanwha.handler.bean.TMSPartReelPos
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.List
;
@Service
@Slf4j
public
class
HanwhaApiHandler
extends
BaseSmfApiListener
{
//配置說明
// api:
// name: hanwha
// inCheckUrl: webservice/RequestGetPartInfo
// outNotifyUrl: webservice/RequestSyncPartReelPosInfo
// inNotifyUrl: webservice/RequestSyncPartReelPosInfo
// deviceStatusUrl: webservice/RequestUpdateStorageConnectionInfo
//
// hanwha:
// host: 127.0.0.1
// webPort: 18189
// apiPort: 8374
@Override
public
boolean
isForThisApi
(
String
apiName
)
{
return
apiName
!=
null
&&
apiName
.
equalsIgnoreCase
(
"hanwha"
)&&
TMSCommunicator
.
isEnable
();
}
@Autowired
private
TMSApis
tmsApis
;
@Override
public
void
inTaskStatusChange
(
String
inNotifyUrl
,
DataLog
task
)
{
if
(
task
.
isFinished
())
{
if
(
task
.
isPutInTask
())
{
List
<
TMSPartReelPos
>
list
=
new
ArrayList
<>();
TMSPartReelPos
bean
=
TMSPartReelPos
.
newBean
(
task
.
getPartNumber
(),
task
.
getBarcode
(),
task
.
getNum
(),
task
.
getCid
(),
task
.
getPosName
(),
1
,
task
.
getUpdateDate
().
getTime
(),
-
1
);
list
.
add
(
bean
);
log
.
info
(
"barcode["
+
task
.
getBarcode
()+
"],pn["
+
task
.
getPartNumber
()+
"],posName["
+
task
.
getPosName
()+
"]入库完成,调用 RequestSyncPartReelPosInfo"
);
tmsApis
.
RequestSyncPartReelPosInfo
(
0
,
list
);
}
}
}
@Override
public
void
outTaskStatusChange
(
String
outNotifyUrl
,
DataLog
task
)
{
if
(
task
.
isFinished
())
{
if
(
task
.
isCheckOutTask
())
{
List
<
TMSPartReelPos
>
list
=
new
ArrayList
<>();
TMSPartReelPos
bean
=
TMSPartReelPos
.
newBean
(
task
.
getPartNumber
(),
task
.
getBarcode
(),
task
.
getNum
(),
task
.
getCid
(),
task
.
getPosName
(),
2
,
-
1
,
task
.
getUpdateDate
().
getTime
());
list
.
add
(
bean
);
log
.
info
(
"barcode["
+
task
.
getBarcode
()
+
"],pn["
+
task
.
getPartNumber
()
+
"],posName["
+
task
.
getPosName
()
+
"]出库完成,调用 RequestSyncPartReelPosInfo"
);
tmsApis
.
RequestSyncPartReelPosInfo
(
0
,
list
);
}
}
}
@Override
public
Barcode
canPutInAfterResolve
(
String
inCheckUrl
,
CodeValidateParam
params
,
Barcode
barcode
)
throws
ValidateException
{
log
.
info
(
"barcode["
+
barcode
.
getBarcode
()
+
"] 准备入库,调用 RequestGetPartInfo"
);
List
<
TMSPart
>
result
=
tmsApis
.
RequestGetPartInfo
(
0
,
barcode
.
getFullCode
());
if
(
result
.
size
()
>
0
)
{
String
pn
=
result
.
get
(
0
).
getPartName
();
String
code
=
result
.
get
(
0
).
getReelCode
();
boolean
needS
=
false
;
if
(
ObjectUtil
.
isNotEmpty
(
pn
))
{
barcode
.
setPartNumber
(
pn
);
needS
=
true
;
}
if
(
ObjectUtil
.
isNotEmpty
(
code
))
{
barcode
.
setBarcode
(
code
);
needS
=
true
;
}
int
count
=
result
.
get
(
0
).
getResponseCount
();
if
(
count
>
0
)
{
barcode
.
setAmount
(
count
);
needS
=
true
;
}
if
(
needS
)
{
log
.
info
(
"barcode["
+
barcode
.
getBarcode
()
+
"] 准备入库,调用 RequestGetPartInfo ,更改pn=["
+
barcode
.
getPartNumber
()
+
"],code=["
+
barcode
.
getBarcode
()
+
"],count=["
+
barcode
.
getAmount
()
+
"]"
);
barcodeManager
.
saveBarcode
(
barcode
);
}
}
return
barcode
;
}
@Override
public
boolean
deviceStatusChanges
(
String
deviceStatusUrl
,
String
[]
cids
,
Integer
[]
statusList
)
{
log
.
info
(
"deviceStatusChanges ,设备状态变化["
+
JsonUtil
.
toJsonStr
(
cids
)
+
"],["
+
JsonUtil
.
toJsonStr
(
statusList
)
+
"],通知TMS"
);
UpdateStorageConnectionInfo
(
cids
,
statusList
);
return
true
;
}
public
void
UpdateStorageConnectionInfo
(
String
[]
cids
,
Integer
[]
statusList
)
{
if
(!
TMSCommunicator
.
isEnable
())
{
return
;
}
List
<
String
>
storageIds
=
new
ArrayList
<>();
List
<
String
>
storageTypes
=
new
ArrayList
<>();
List
<
Integer
>
isConns
=
new
ArrayList
<>();
int
i
=
0
;
for
(
String
cid
:
cids
)
{
Storage
storage
=
dataCache
.
getStorage
(
cid
);
if
(
storage
==
null
)
{
continue
;
}
String
type
=
"Storage"
;
if
(
storage
.
isNLShelf
()
||
storage
.
isNLPShelf
()
||
storage
.
isNLMShelf
()
||
storage
.
isShelf
())
{
type
=
"Rack"
;
}
int
status
=
-
1
;
if
(
statusList
!=
null
&&
statusList
.
length
>
i
)
{
status
=
statusList
[
i
];
}
else
{
StatusBean
bean
=
DevicesStatusUtil
.
getStatusBean
(
storage
.
getCid
());
if
(
bean
==
null
||
bean
.
timeOut
())
{
status
=
-
1
;
}
else
{
status
=
bean
.
getStatus
();
}
}
String
conCode
=
TMS_Code
.
CODE_1020
;
if
(
status
<=
0
)
{
//初始化失败
conCode
=
TMS_Code
.
CODE_0002
;
}
else
if
(
status
==
1
)
{
conCode
=
TMS_Code
.
CODE_1020
;
}
else
if
(
status
<=
4
)
{
//报警
conCode
=
TMS_Code
.
CODE_1024
;
}
else
if
(
status
==
5
)
{
conCode
=
TMS_Code
.
CODE_1023
;
}
else
{
//忙碌
conCode
=
TMS_Code
.
CODE_1010
;
}
storageIds
.
add
(
storage
.
getCid
());
storageTypes
.
add
(
type
);
isConns
.
add
(
Integer
.
parseInt
(
conCode
));
i
++;
}
if
(
storageIds
.
size
()
>
0
)
{
tmsApis
.
RequestUpdateStorageConnectionInfo
(
0
,
storageIds
,
storageTypes
,
isConns
);
}
}
}
src/main/java/com/neotel/smfcore/custom/hanwha/handler/TMSApis.java
0 → 100644
查看文件 @
f4f1beb
此文件的差异被折叠,
点击展开。
src/main/java/com/neotel/smfcore/custom/hanwha/handler/TMSCommunicator.java
0 → 100644
查看文件 @
f4f1beb
此文件的差异被折叠,
点击展开。
src/main/java/com/neotel/smfcore/custom/hanwha/handler/TMS_Code.java
0 → 100644
查看文件 @
f4f1beb
package
com
.
neotel
.
smfcore
.
custom
.
hanwha
.
handler
;
public
class
TMS_Code
{
/**
* 0000 OK
*/
public
static
final
String
CODE_0000
=
"0000"
;
// Code 内容
/**
* 0001 Failed (exception etc) 失败(异常等)
*/
public
static
final
String
CODE_0001
=
"0001"
;
/**
* 0002 Delivery initialization failed. (Rack stand-by fail) 传输初始化失败。(机架待机失败)
*/
public
static
final
String
CODE_0002
=
"0002"
;
/**
* 0003 Failed by alarm
*/
public
static
final
String
CODE_0003
=
"0003"
;
/**
* 0004 Already processing for the same request.
*/
public
static
final
String
CODE_0004
=
"0004"
;
/**
* 0100 Waiting for the DeliveryOrder request. (DeliveryReservation has requested and ready to deliver)
*/
public
static
final
String
CODE_0100
=
"0100"
;
/**
* 0101 DeliveryReservation cancelled
*/
public
static
final
String
CODE_0101
=
"0101"
;
/**
* 1010 Delivery started 开始送货
*/
public
static
final
String
CODE_1010
=
"1010"
;
/**
* 1011 Error while starting the delivery. (Delivery got cancelled and state goes to normal operation mode) 开始配送时出错。(送货被取消,状态转为正常运行模式)
*/
public
static
final
String
CODE_1011
=
"1011"
;
/**
* 1012 Delivery finished.
*/
public
static
final
String
CODE_1012
=
"1012"
;
/**
* 1020 Idle state. (normal operation mode and can get the requests) (正常运行模式,可以接收请求)
*/
public
static
final
String
CODE_1020
=
"1020"
;
/**
* 1021 Delivering
*/
public
static
final
String
CODE_1021
=
"1021"
;
/**
* 1022 In the process of position request
*/
public
static
final
String
CODE_1022
=
"1022"
;
/**
* 1023 Boot-up state 启动状态
*/
public
static
final
String
CODE_1023
=
"1023"
;
/**
* 1024 Rack raised Alarm 机架报警
*/
public
static
final
String
CODE_1024
=
"1024"
;
/**
* 2001 Part not enough
*/
public
static
final
String
CODE_2001
=
"2001"
;
/**
* 2002 Out of part
*/
public
static
final
String
CODE_2002
=
"2002"
;
/**
* 2003 Registered part but not on the rack
*/
public
static
final
String
CODE_2003
=
"2003"
;
/**
* 2010 Waiting for the delivery(reserved)
*/
public
static
final
String
CODE_2010
=
"2010"
;
/**
* 2011 Delivering
*/
public
static
final
String
CODE_2011
=
"2011"
;
/**
* 2012 Delivery cancelled
*/
public
static
final
String
CODE_2012
=
"2012"
;
/**
* 2013 Delivery finished
*/
public
static
final
String
CODE_2013
=
"2013"
;
/**
* 2014 Cannot cancel the delivery (already start delivery)
*/
public
static
final
String
CODE_2014
=
"2014"
;
/**
* 2015 Removed from the Rack
*/
public
static
final
String
CODE_2015
=
"2015"
;
/**
* 2016 Delivery finished in abnormal state
*/
public
static
final
String
CODE_2016
=
"2016"
;
/**
* 2017 Delivery deleted
*/
public
static
final
String
CODE_2017
=
"2017"
;
/**
* 2018 Can NOT deliver because it is not reserved
*/
public
static
final
String
CODE_2018
=
"2018"
;
/**
* 2019 Failure while Delivering 在交付时失败
*/
public
static
final
String
CODE_2019
=
"2019"
;
/**
* 2020 Already cancelled
*/
public
static
final
String
CODE_2020
=
"2020"
;
/**
* 2021 Delivery started in abnormal state because of Rack issue 因机架问题在异常状态下开始交付
*/
public
static
final
String
CODE_2021
=
"2021"
;
/**
* 2022 Rack have problem while Delivering送货时机架出现问题
*/
public
static
final
String
CODE_2022
=
"2022"
;
/**
* 2040 Failed to start the delivery (General Rack issue)无法开始交付(一般机架问题)
*/
public
static
final
String
CODE_2040
=
"2040"
;
/**
* 2041 Failed to start the delivery (Sync issue) 无法开始交付(同步问题)
*/
public
static
final
String
CODE_2041
=
"2041"
;
/**
* 2042 Failed to start the delivery (H/W check issue) 无法开始交付(硬件/软件检查问题)
*/
public
static
final
String
CODE_2042
=
"2042"
;
/**
* 2043 Failed to Start/Stop delivery. (because of other job)
*/
public
static
final
String
CODE_2043
=
"2043"
;
/**
* 2044 Failed to Start/Stop delivery. (because of system error, exception)
*/
public
static
final
String
CODE_2044
=
"2044"
;
/**
* 2045 Rack is initializing
*/
public
static
final
String
CODE_2045
=
"2045"
;
/**
* 2050 The reels are already on the rack. (When restocked)
*/
public
static
final
String
CODE_2050
=
"2050"
;
// Code 내용
//0000 OK
//0001 Failed (exception etc)
//0002 Delivery initialization failed. (Rack stand-by fail)
// 0003 Failed by alarm
//0004 Already processing for the same request.
//0100 Waiting for the DeliveryOrder request. (DeliveryReservation has requested and ready to deliver)
// 0101 DeliveryReservation cancelled
//1010 Delivery started
//1011 Error while starting the delivery. (Delivery got cancelled and state goes to normal operation mode)
// 1012 Delivery finished.
// 1020 Idle state. (normal operation mode and can get the requests)
// 1021 Delivering
//1022 In the process of position request
// 1023 Boot-up state
//1024 Rack raised Alarm
//2001 Part not enough
//2002 Out of part
//2003 Registered part but not on the rack
//2010 Waiting for the delivery(reserved)
//2011 Delivering
//2012 Delivery cancelled
//2013 Delivery finished
//2014 Cannot cancel the delivery (already start delivery)
//2015 Removed from the Rack
//2016 Delivery finished in abnormal state
//2017 Delivery deleted
//2018 Can NOT deliver because it is not reserved
//2019 Failure while Delivering
//2020 Already cancelled
//2021 Delivery started in abnormal state because of Rack issue
//2022 Rack have problem while Delivering
//2040 Failed to start the delivery (General Rack issue)
//2041 Failed to start the delivery (Sync issue)
//2042 Failed to start the delivery (H/W check issue)
//2043 Failed to Start/Stop delivery. (because of other job)
// 2044 Failed to Start/Stop delivery. (because of system error, exception)
// 2045 Rack is initializing
//2050 The reels are already on the rack. (When restocked
//
// 代码 내용
//0000 确定
//0001 失败(异常等)
// 0002 输送初始化失败。(机架备用失败)
// 0003 因警报而失败
//0004 已在处理同一请求。
// 0100 等待交货订单请求。(已请求并
// 准备交付)
// 0101 已取消交货预约
//1010 开始送货
//1011 开始配送时出错。(送货被取消,状态转为正常运行模式)。
// 运行模式)。
// 1012 送货结束。
// 1020 闲置状态。
// (正常运行模式,可接收请求)
// 1021 发送
//1022 定位请求中
//17
// 1023 启动状态
//1024 机架报警
//2001 部件不足
//2002 无部件
//2003 已登记部件但不在机架上
//2010 等待交货(保留)
// 2011 发货
//2012 取消交货
//2013 发货完成
//2014 无法取消交货(已开始交货)
// 2015 从货架移除
//2016 在异常状态下完成交付
//2017 已删除交付
//2018 因未预订而无法交付
//2019 在交付时失败
//2020 已取消
//2021 因机架问题在异常状态下开始交付
//2022 送货时机架出现问题
//2040 无法开始交付(一般机架问题)
// 2041 无法开始交付(同步问题)
// 2042 无法开始交付(硬件/软件检查问题)
// 2043 启动/停止递送失败。(因为其他任务)
//
// 通过www.DeepL.com/Translator(免费版)翻译
}
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSDockingCartInfo.java
0 → 100644
查看文件 @
f4f1beb
package
com
.
neotel
.
smfcore
.
custom
.
hanwha
.
handler
.
bean
;
import
lombok.Data
;
import
java.io.Serializable
;
@Data
public
class
TMSDockingCartInfo
implements
Serializable
{
private
String
cartCd
=
""
;
private
String
cartNm
=
""
;
private
int
cartSlotCount
=
0
;
}
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSOrderCodeInfo.java
0 → 100644
查看文件 @
f4f1beb
package
com
.
neotel
.
smfcore
.
custom
.
hanwha
.
handler
.
bean
;
import
lombok.Data
;
import
java.io.Serializable
;
@Data
public
class
TMSOrderCodeInfo
implements
Serializable
{
private
int
planID
=
0
;
private
String
modelNm
=
""
;
private
String
date
=
""
;
private
int
quantity
=
0
;
private
String
lineCd
;
private
String
userNm
=
""
;
private
String
userID
=
""
;
}
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSPart.java
0 → 100644
查看文件 @
f4f1beb
package
com
.
neotel
.
smfcore
.
custom
.
hanwha
.
handler
.
bean
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.util.HashMap
;
import
java.util.Map
;
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
TMSPart
extends
TMSPos
implements
Serializable
{
private
int
index
=
0
;
private
String
partName
=
""
;
private
String
reelCode
=
""
;
private
int
requestCount
=
0
;
private
int
responseCount
=
0
;
private
String
resultCode
=
""
;
public
static
TMSPart
newBean
(
String
pn
,
String
barcode
,
int
requestCount
,
int
responseCount
,
String
resultCode
,
String
cid
,
String
posName
)
{
TMSPart
bean
=
new
TMSPart
();
bean
.
setPartName
(
pn
);
bean
.
setReelCode
(
barcode
);
bean
.
setRequestCount
(
requestCount
);
bean
.
setResponseCount
(
responseCount
);
bean
.
setRackID
(
cid
);
bean
.
setPosName
(
posName
);
bean
.
setResultCode
(
resultCode
);
return
bean
;
}
@Override
public
Map
<
String
,
Object
>
getJson
(){
Map
<
String
,
Object
>
dataMap2
=
new
HashMap
<>();
dataMap2
.
put
(
"Index"
,
index
);
dataMap2
.
put
(
"PartName"
,
getPartName
());
dataMap2
.
put
(
"ReelCode"
,
getReelCode
());
dataMap2
.
put
(
"RequestCount"
,
getRequestCount
());
dataMap2
.
put
(
"ResponseCount"
,
getResponseCount
());
dataMap2
.
put
(
"ResultCode"
,
getResultCode
());
return
dataMap2
;
}
public
Map
<
String
,
Object
>
getAJson
()
{
Map
<
String
,
Object
>
dataMap
=
new
HashMap
<>();
dataMap
.
put
(
"Index"
,
index
);
dataMap
.
put
(
"PartName"
,
getPartName
());
dataMap
.
put
(
"RequestCount"
,
getRequestCount
());
dataMap
.
put
(
"ResponseCount"
,
getResponseCount
());
dataMap
.
put
(
"ResultCode"
,
getResultCode
());
dataMap
.
put
(
"ReelCode"
,
getReelCode
());
dataMap
.
put
(
"RackID"
,
getRackID
());
dataMap
.
put
(
"RowID"
,
getRowID
());
dataMap
.
put
(
"ColID"
,
getColID
());
return
dataMap
;
}
}
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSPartReelPos.java
0 → 100644
查看文件 @
f4f1beb
package
com
.
neotel
.
smfcore
.
custom
.
hanwha
.
handler
.
bean
;
import
com.neotel.smfcore.common.utils.DateUtil
;
import
lombok.Data
;
import
lombok.extern.slf4j.Slf4j
;
import
java.io.Serializable
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
@Data
@Slf4j
public
class
TMSPartReelPos
extends
TMSPos
implements
Serializable
{
private
String
partName
;
private
String
reelCode
;
private
int
count
;
/**
* 1: Part inserted to the rack
* 2: Part removed from the rack
* 4: When the Rack initializes
*/
private
int
flag
=
0
;
private
int
state
=
0
;
//yyyy-MM-dd HH:mm:ss
private
String
indate
;
private
String
outdate
;
public
TMSPartReelPos
()
{
setCount
(-
1
);
setRackID
(
""
);
setRowID
(
""
);
setColID
(
""
);
setIndate
(
""
);
setOutdate
(
""
);
}
@Override
public
Map
<
String
,
Object
>
getJson
()
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"PartName"
,
getPartName
());
map
.
put
(
"ReelCode"
,
getReelCode
());
map
.
put
(
"RackID"
,
getRackID
());
map
.
put
(
"Count"
,
getCount
());
map
.
put
(
"RowID"
,
getRowID
());
map
.
put
(
"ColID"
,
getColID
());
map
.
put
(
"Flag"
,
getFlag
());
map
.
put
(
"Indate"
,
getIndate
());
map
.
put
(
"Outdate"
,
getOutdate
());
return
map
;
}
public
static
TMSPartReelPos
newBean
(
String
pn
,
String
barcode
,
int
count
,
String
cid
,
String
posName
,
int
flag
,
long
inTime
,
long
outTime
)
{
TMSPartReelPos
bean
=
new
TMSPartReelPos
();
bean
.
setPartName
(
pn
);
bean
.
setReelCode
(
barcode
);
bean
.
setCount
(
count
);
bean
.
setRackID
(
cid
);
bean
.
setFlag
(
flag
);
bean
.
setState
(
0
);
bean
.
setPosName
(
posName
);
String
format
=
"yyyy-MM-dd HH:mm:ss"
;
if
(
inTime
>
0
)
{
String
inStr
=
DateUtil
.
toDateString
(
new
Date
(
inTime
),
format
);
bean
.
setIndate
(
inStr
);
}
if
(
outTime
>
0
)
{
String
outStr
=
DateUtil
.
toDateString
(
new
Date
(
outTime
),
format
);
bean
.
setOutdate
(
outStr
);
}
return
bean
;
}
}
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSPartReelStatus.java
0 → 100644
查看文件 @
f4f1beb
package
com
.
neotel
.
smfcore
.
custom
.
hanwha
.
handler
.
bean
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.HashMap
;
import
java.util.Map
;
@Data
public
class
TMSPartReelStatus
extends
TMSPart
implements
Serializable
{
private
String
ReserveCode
=
""
;
private
boolean
TowerLamp
=
false
;
@Override
public
Map
<
String
,
Object
>
getJson
()
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"ReserveCode"
,
getReserveCode
());
map
.
put
(
"index"
,
getIndex
());
map
.
put
(
"PartName"
,
getPartName
());
map
.
put
(
"ReelCode"
,
getReelCode
());
map
.
put
(
"RequestCount"
,
getRequestCount
());
map
.
put
(
"ResponseCount"
,
getResponseCount
());
map
.
put
(
"RackID"
,
getRackID
());
map
.
put
(
"RowID"
,
getRowID
());
map
.
put
(
"ColID"
,
getColID
());
map
.
put
(
"ResultCode"
,
getResultCode
());
map
.
put
(
"TowerLamp"
,
isTowerLamp
());
return
map
;
}
}
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSPos.java
0 → 100644
查看文件 @
f4f1beb
package
com
.
neotel
.
smfcore
.
custom
.
hanwha
.
handler
.
bean
;
import
cn.hutool.core.util.ObjectUtil
;
import
lombok.Data
;
import
lombok.extern.slf4j.Slf4j
;
import
java.io.Serializable
;
import
java.util.HashMap
;
import
java.util.Map
;
@Data
@Slf4j
public
class
TMSPos
implements
Serializable
{
private
String
RackID
;
private
String
RowID
;
private
String
ColID
;
public
Map
<
String
,
Object
>
getJson
()
{
Map
<
String
,
Object
>
jObject
=
new
HashMap
<>();
jObject
.
put
(
"RackID"
,
RackID
);
jObject
.
put
(
"RowID"
,
RowID
);
jObject
.
put
(
"ColID"
,
ColID
);
return
jObject
;
}
public
String
getPosName
(){
return
getRowID
()+
"_"
+
getColID
();
}
public
void
setPosName
(
String
posName
){
if
(
ObjectUtil
.
isEmpty
(
posName
)){
setColID
(
""
);
setRowID
(
""
);
return
;
}
//posName=rowId_colId
int
index
=
posName
.
indexOf
(
'_'
);
if
(
index
>
0
){
setRowID
(
posName
.
substring
(
0
,
index
-
1
));
setColID
(
posName
.
substring
(
index
+
1
,
posName
.
length
()-
1
));
}
// String[] posArray = posName.split("_");
// if (posArray.length >= 2) {
// try {
// setColID(posArray[posArray.length - 1]);
// setRowID(posArray[posArray.length - 2]);
// } catch (Exception ex) {
// log.error("解析位置的行列失败 " + posName + "," + ex.toString());
// }
// }
}
}
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSRackStatus.java
0 → 100644
查看文件 @
f4f1beb
package
com
.
neotel
.
smfcore
.
custom
.
hanwha
.
handler
.
bean
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.HashMap
;
import
java.util.Map
;
@Data
public
class
TMSRackStatus
extends
TMSPos
implements
Serializable
{
private
int
Flag
=
0
;
private
String
Indate
;
private
String
Outdate
;
public
TMSRackStatus
()
{
setRackID
(
""
);
setRowID
(
""
);
setColID
(
""
);
setIndate
(
""
);
setOutdate
(
""
);
}
public
Map
<
String
,
Object
>
getJson
()
{
Map
<
String
,
Object
>
jObject
=
new
HashMap
<>();
jObject
.
put
(
"RackID"
,
getRackID
());
jObject
.
put
(
"RowID"
,
getRowID
());
jObject
.
put
(
"ColID"
,
getColID
());
jObject
.
put
(
"Flag"
,
Flag
);
jObject
.
put
(
"Indate"
,
Indate
);
jObject
.
put
(
"Outdate"
,
Outdate
);
return
jObject
;
}
}
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSReserve.java
0 → 100644
查看文件 @
f4f1beb
package
com
.
neotel
.
smfcore
.
custom
.
hanwha
.
handler
.
bean
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.ArrayList
;
import
java.util.List
;
@Data
public
class
TMSReserve
implements
Serializable
{
private
String
ReserveCode
=
""
;
private
String
Date
=
""
;
private
String
ResultCode
=
""
;
private
List
<
TMSPart
>
PartList
;
public
TMSReserve
()
{
PartList
=
new
ArrayList
<>();
}
}
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSResultMsg.java
0 → 100644
查看文件 @
f4f1beb
package
com
.
neotel
.
smfcore
.
custom
.
hanwha
.
handler
.
bean
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
TMSResultMsg
implements
Serializable
{
private
int
result
=
1
;
private
String
resultMsg
=
""
;
}
src/main/resources/messages.properties
查看文件 @
f4f1beb
...
@@ -384,4 +384,5 @@ smfcore.neoai=Neo Ai
...
@@ -384,4 +384,5 @@ smfcore.neoai=Neo Ai
smfcore.duo.offline
=
\u
8BBE
\u5907
{0}
\u
79BB
\u
7EBF
smfcore.duo.offline
=
\u
8BBE
\u5907
{0}
\u
79BB
\u
7EBF
smfcore.msg.op.fail
=
\u
64CD
\u
4F5C
\u5931\u
8D25
smfcore.msg.op.fail
=
\u
64CD
\u
4F5C
\u5931\u
8D25
smfcore.equip.notExist
=
\u
8BBE
\u5907\u
4E0D
\u
5B58
\u5728
smfcore.equip.notExist
=
\u
8BBE
\u5907\u
4E0D
\u
5B58
\u5728
smfcore.order.finished
=
\u
5DE5
\u5355
[{0}]
\u7684\u
4EFB
\u
52A1
\u
5DF2
\u5168\u
90E8
\u
5B8C
\u6210
\ No newline at end of file
\ No newline at end of file
smfcore.order.finished
=
\u
5DE5
\u5355
[{0}]
\u7684\u
4EFB
\u
52A1
\u
5DF2
\u5168\u
90E8
\u
5B8C
\u6210
smfcore.spkanban
=
SP
\u
4EEA
\u8868\u
76D8
\ No newline at end of file
\ No newline at end of file
src/main/resources/messages_en_US.properties
查看文件 @
f4f1beb
...
@@ -375,4 +375,5 @@ smfcore.neoai=Neo Ai
...
@@ -375,4 +375,5 @@ smfcore.neoai=Neo Ai
smfcore.duo.offline
=
Equipment {0} offline
smfcore.duo.offline
=
Equipment {0} offline
smfcore.msg.op.fail
=
failure of an operation
smfcore.msg.op.fail
=
failure of an operation
smfcore.equip.notExist
=
Device does not exist
smfcore.equip.notExist
=
Device does not exist
smfcore.order.finished
=
workorder[{0}] has completed all of its tasks
\ No newline at end of file
\ No newline at end of file
smfcore.order.finished
=
workorder[{0}] has completed all of its tasks
smfcore.spkanban
=
SP Dash Board
\ No newline at end of file
\ No newline at end of file
src/main/resources/messages_ja_JP.properties
查看文件 @
f4f1beb
...
@@ -371,4 +371,5 @@ smfcore.neoai=Neo Ai
...
@@ -371,4 +371,5 @@ smfcore.neoai=Neo Ai
smfcore.duo.offline
=
\u
8BBE
\u5907
{0}
\u
79BB
\u
7EBF
smfcore.duo.offline
=
\u
8BBE
\u5907
{0}
\u
79BB
\u
7EBF
smfcore.msg.op.fail
=
\u
64CD
\u
4F5C
\u5931\u
8D25
smfcore.msg.op.fail
=
\u
64CD
\u
4F5C
\u5931\u
8D25
smfcore.equip.notExist
=
\u
8BBE
\u5907\u
4E0D
\u
5B58
\u5728
smfcore.equip.notExist
=
\u
8BBE
\u5907\u
4E0D
\u
5B58
\u5728
smfcore.order.finished
=
\u
30EF
\u
30FC
\u
30AF
\u
30AA
\u
30FC
\u
30C0
\u
30FC[{0}]
\u
306E
\u
30BF
\u
30B9
\u
30AF
\u
306F
\u3059\u3079\u3066\u
5B8C
\u
4E86
\u3057\u
307E
\u3057\u
305F
\ No newline at end of file
\ No newline at end of file
smfcore.order.finished
=
\u
30EF
\u
30FC
\u
30AF
\u
30AA
\u
30FC
\u
30C0
\u
30FC[{0}]
\u
306E
\u
30BF
\u
30B9
\u
30AF
\u
306F
\u3059\u3079\u3066\u
5B8C
\u
4E86
\u3057\u
307E
\u3057\u
305F
smfcore.spkanban
=
\u
30C0
\u
30C3
\u
30B7
\u
30E5
\u
30DC
\u
30FC
\u
30C9
\ No newline at end of file
\ No newline at end of file
src/main/resources/messages_zh_CN.properties
查看文件 @
f4f1beb
...
@@ -371,4 +371,5 @@ smfcore.neoai=Neo Ai
...
@@ -371,4 +371,5 @@ smfcore.neoai=Neo Ai
smfcore.duo.offline
=
\u
8BBE
\u5907
{0}
\u
79BB
\u
7EBF
smfcore.duo.offline
=
\u
8BBE
\u5907
{0}
\u
79BB
\u
7EBF
smfcore.msg.op.fail
=
\u
64CD
\u
4F5C
\u5931\u
8D25
smfcore.msg.op.fail
=
\u
64CD
\u
4F5C
\u5931\u
8D25
smfcore.equip.notExist
=
\u
8BBE
\u5907\u
4E0D
\u
5B58
\u5728
smfcore.equip.notExist
=
\u
8BBE
\u5907\u
4E0D
\u
5B58
\u5728
smfcore.order.finished
=
\u
5DE5
\u5355
[{0}]
\u7684\u
4EFB
\u
52A1
\u
5DF2
\u5168\u
90E8
\u
5B8C
\u6210
\ No newline at end of file
\ No newline at end of file
smfcore.order.finished
=
\u
5DE5
\u5355
[{0}]
\u7684\u
4EFB
\u
52A1
\u
5DF2
\u5168\u
90E8
\u
5B8C
\u6210
smfcore.spkanban
=
SP
\u
4EEA
\u8868\u
76D8
\ No newline at end of file
\ No newline at end of file
src/main/resources/messages_zh_TW.properties
查看文件 @
f4f1beb
...
@@ -371,4 +371,5 @@ smfcore.neoai=Neo Ai
...
@@ -371,4 +371,5 @@ smfcore.neoai=Neo Ai
smfcore.duo.offline
=
\u
8A2D
\u5099
{0}
\u
96E2
\u
7DDA
smfcore.duo.offline
=
\u
8A2D
\u5099
{0}
\u
96E2
\u
7DDA
smfcore.msg.op.fail
=
\u
64CD
\u
4F5C
\u5931\u6557
smfcore.msg.op.fail
=
\u
64CD
\u
4F5C
\u5931\u6557
smfcore.equip.notExist
=
\u
8A2D
\u5099\u
4E0D
\u
5B58
\u5728
smfcore.equip.notExist
=
\u
8A2D
\u5099\u
4E0D
\u
5B58
\u5728
smfcore.order.finished
=
\u
5DE5
\u
55AE[{0}]
\u7684\u
4EFB
\u
52D9
\u
5DF2
\u5168\u
90E8
\u
5B8C
\u6210
\ No newline at end of file
\ No newline at end of file
smfcore.order.finished
=
\u
5DE5
\u
55AE[{0}]
\u7684\u
4EFB
\u
52D9
\u
5DF2
\u5168\u
90E8
\u
5B8C
\u6210
smfcore.spkanban
=
SP
\u5100\u9336\u
76E4
\ No newline at end of file
\ No newline at end of file
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论