Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 6b5a5bf8
由
zshaohui
编写于
2025-04-08 09:21:26 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1.扫空箱出库
1 个父辈
4cae40dd
显示空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
98 行增加
和
41 行删除
src/main/java/com/neotel/smfcore/SmfCoreApplication.java
src/main/java/com/neotel/smfcore/common/init/MenuInit.java
src/main/java/com/neotel/smfcore/core/storage/rest/MaterialController.java
src/main/java/com/neotel/smfcore/custom/toyota1541/util/ProductionAreaExpUtil.java
src/main/resources/messages.properties
src/main/resources/messages_en_US.properties
src/main/resources/messages_ja_JP.properties
src/main/resources/messages_zh_CN.properties
src/main/resources/messages_zh_TW.properties
src/main/java/com/neotel/smfcore/SmfCoreApplication.java
查看文件 @
6b5a5bf
...
...
@@ -10,9 +10,10 @@ import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactor
import
org.springframework.boot.web.servlet.server.ServletWebServerFactory
;
import
org.springframework.boot.web.servlet.support.SpringBootServletInitializer
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.scheduling.annotation.EnableScheduling
;
import
org.springframework.web.bind.annotation.RestController
;
@EnableScheduling
@RestController
@SpringBootApplication
public
class
SmfCoreApplication
extends
SpringBootServletInitializer
{
...
...
src/main/java/com/neotel/smfcore/common/init/MenuInit.java
查看文件 @
6b5a5bf
...
...
@@ -162,8 +162,8 @@ public class MenuInit {
// addDefaultFunctionMenu(11, poutOut, "转储入库", "dumpWarehousing", "system/dumpWarehousing/index", "headIcon");
// addDefaultFunctionMenu(12, poutOut, "单盘入库", "singleDiskWarehousing", "system/singleDiskWarehousing/index", "headIcon");
addDefaultFunctionMenu
(
13
,
poutOut
,
"呆滞物料"
,
"sluggishMaterials"
,
"system/sluggishMaterials/index"
,
"sMaterial"
);
addDefaultFunctionMenu
(
14
,
poutOut
,
"
保管
区"
,
"prodUnprocessed"
,
"prodUnprocessed/index"
,
"prodUnprocessed"
);
addDefaultFunctionMenu
(
15
,
poutOut
,
"
看板
区"
,
"shortageInfo"
,
"shortageInfo/index"
,
"shortageInfo"
);
addDefaultFunctionMenu
(
14
,
poutOut
,
"
生产
区"
,
"prodUnprocessed"
,
"prodUnprocessed/index"
,
"prodUnprocessed"
);
addDefaultFunctionMenu
(
15
,
poutOut
,
"
保管
区"
,
"shortageInfo"
,
"shortageInfo/index"
,
"shortageInfo"
);
//addDefaultFunctionMenu(16, poutOut,"生成工单", "createOrder", "system/createOrder/index", "createOrder");
addDefaultFunctionMenu
(
91
,
poutOut
,
"共享文件夹"
,
"orderSetting"
,
"system/orderSetting/index"
,
"sysSet"
,
DEFAULT_SHOW_MENU
);
...
...
src/main/java/com/neotel/smfcore/core/storage/rest/MaterialController.java
查看文件 @
6b5a5bf
...
...
@@ -411,8 +411,13 @@ public class MaterialController {
if
(
barcode
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.error.barcode.noValidCode"
,
"无效的条码"
);
}
DataLog
dataLog
=
taskService
.
scanEmptyPalletOut
(
barcode
.
getPartNumber
(),
1
);
if
(
dataLog
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.label.noReel"
,
"未找到可出库的物料"
);
}
if
(
dataLog
!=
null
)
{
log
.
info
(
"开始通知Kanban区进行出库"
);
String
kanBanAreaOutUrl
=
dataCache
.
getCache
(
Constants
.
Cache_KanBanAreaOutUrl
);
if
(
StringUtils
.
isNotEmpty
(
kanBanAreaOutUrl
))
{
...
...
@@ -428,19 +433,63 @@ public class MaterialController {
String
result
=
HttpHelper
.
postJson
(
kanBanAreaOutUrl
,
kanBanAreaOutMap
);
log
.
info
(
"通知结果为:"
+
result
);
if
(
StringUtils
.
isNotEmpty
(
result
)
&&
!
result
.
equals
(
"\"\""
)){
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.notifyerror.kanban"
,
"
保管区无物料,通知看板区失败[{0}]"
,
new
String
[]{
result
}
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.notifyerror.kanban"
,
"
通知看板区失败"
);
}
}
catch
(
ApiException
e
)
{
log
.
info
(
"通知失败:"
,
e
);
ProductionAreaOut
areaOut
=
new
ProductionAreaOut
(
barcode
.
getPartNumber
(),
barcode
.
getAmount
(),
barcode
.
getBatch
(),
e
.
getMessage
(),
new
Date
());
areaOut
.
setId
(
id
+
""
);
ProductionAreaExpUtil
.
updateProductionAreaExpOut
(
areaOut
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.notifyerror.kanban"
,
"
保管区无物料,通知看板区失败[{0}]"
,
new
String
[]{
e
.
getMessage
()}
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.notifyerror.kanban"
,
"
通知看板区失败"
);
}
return
ResultBean
.
newOkResult
(
"smfcore.notify.kanban"
,
"保管区无物料,通知看板区成功"
);
}
else
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.label.noReel"
,
"未找到可出库的物料"
);
return
ResultBean
.
newOkResult
(
"smfcore.notify.kanban"
,
"通知看板区成功"
);
}
}
return
ResultBean
.
newOkResult
(
""
);
}
@ApiOperation
(
"扫描空箱通知保管区"
)
@RequestMapping
(
"scanEmptyBox"
)
public
ResultBean
scanEmptyBox
(
@RequestBody
Map
<
String
,
String
>
paramMap
)
{
String
code
=
paramMap
.
get
(
"code"
);
log
.
info
(
"扫描空箱通知保管区,信息为:"
+
code
);
if
(
StringUtils
.
isEmpty
(
code
))
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"code"
});
}
Barcode
barcode
=
codeResolve
.
resolveOneValideBarcode
(
"=1x1="
+
code
);
if
(
barcode
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.error.barcode.noValidCode"
,
"无效的条码"
);
}
String
kanBanAreaOutUrl
=
dataCache
.
getCache
(
Constants
.
Cache_KanBanAreaOutUrl
);
if
(
StringUtils
.
isEmpty
(
kanBanAreaOutUrl
)){
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.notify.emptyUrl"
,
"保管区地址未配置"
);
}
if
(
StringUtils
.
isNotEmpty
(
kanBanAreaOutUrl
))
{
Map
<
String
,
Object
>
kanBanAreaOutMap
=
new
HashMap
<>();
long
id
=
System
.
currentTimeMillis
();
kanBanAreaOutMap
.
put
(
"id"
,
id
);
kanBanAreaOutMap
.
put
(
"partNumber"
,
barcode
.
getPartNumber
());
kanBanAreaOutMap
.
put
(
"amount"
,
barcode
.
getAmount
());
kanBanAreaOutMap
.
put
(
"batch"
,
barcode
.
getBatch
());
try
{
log
.
info
(
"通知看板区,参数为:"
+
JSON
.
toJSONString
(
kanBanAreaOutMap
));
String
result
=
HttpHelper
.
postJson
(
kanBanAreaOutUrl
,
kanBanAreaOutMap
);
log
.
info
(
"通知结果为:"
+
result
);
if
(
StringUtils
.
isNotEmpty
(
result
)
&&
!
result
.
equals
(
"\"\""
))
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.notifyerror.kanban"
,
"通知保管区失败"
);
}
}
catch
(
ApiException
e
)
{
log
.
info
(
"通知失败:"
,
e
);
ProductionAreaOut
areaOut
=
new
ProductionAreaOut
(
barcode
.
getPartNumber
(),
barcode
.
getAmount
(),
barcode
.
getBatch
(),
e
.
getMessage
(),
new
Date
());
areaOut
.
setId
(
id
+
""
);
ProductionAreaExpUtil
.
updateProductionAreaExpOut
(
areaOut
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.notifyerror.kanban"
,
"通知保管区失败"
);
}
return
ResultBean
.
newOkResult
(
"smfcore.notify.kanban"
,
"通知保管区成功"
);
}
return
ResultBean
.
newOkResult
(
""
);
}
...
...
src/main/java/com/neotel/smfcore/custom/toyota1541/util/ProductionAreaExpUtil.java
查看文件 @
6b5a5bf
...
...
@@ -12,6 +12,7 @@ import com.neotel.smfcore.custom.toyota1541.bean.KanbanAreaOut;
import
com.neotel.smfcore.custom.toyota1541.bean.ProductionAreaOut
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.PostConstruct
;
...
...
@@ -40,15 +41,17 @@ public class ProductionAreaExpUtil {
ScheduledExecutorService
scheduledThreadPool
=
Executors
.
newScheduledThreadPool
(
1
);
@PostConstruct
public
void
init
()
{
//1 分钟之后执行,每秒钟执行一次
scheduledThreadPool
.
scheduleAtFixedRate
(()
->
{
@Scheduled
(
initialDelay
=
1000
*
60
,
fixedRate
=
1000
*
10
)
public
void
resendProductionAreaExp
()
{
log
.
info
(
"开始推送异常数据"
);
lastResendDate
=
new
Date
();
Collection
<
ProductionAreaOut
>
areaOuts
=
getAllProductionAreaExpOut
();
if
(
areaOuts
==
null
||
areaOuts
.
isEmpty
())
{
return
;
}
for
(
ProductionAreaOut
areaOut
:
areaOuts
)
{
try
{
String
result
=
ResendProductionAreaExp
(
areaOut
.
getId
());
if
(
StringUtils
.
isEmpty
(
result
))
{
removeProductionAreaExpById
(
areaOut
.
getId
());
...
...
@@ -56,10 +59,11 @@ public class ProductionAreaExpUtil {
areaOut
.
setExpReason
(
result
);
updateProductionAreaExpOut
(
areaOut
);
}
}
catch
(
Exception
e
)
{
log
.
error
(
areaOut
.
getPartNumber
()
+
"推送数据报错:"
,
e
);
}
}
},
60
,
10
,
TimeUnit
.
SECONDS
);
}
public
static
void
updateProductionAreaExpOut
(
ProductionAreaOut
areaOut
)
{
...
...
@@ -88,7 +92,6 @@ public class ProductionAreaExpUtil {
if
(
cacheMap
==
null
)
{
cacheMap
=
Maps
.
newConcurrentMap
();
}
lastResendDate
=
new
Date
();
ProductionAreaOut
areaOut
=
cacheMap
.
get
(
id
);
if
(
areaOut
==
null
)
{
return
""
;
...
...
src/main/resources/messages.properties
查看文件 @
6b5a5bf
...
...
@@ -91,7 +91,7 @@ smfcore.outSetting=\u51FA\u5E93\u7B56\u7565
smfcore.sysSetting
=
\u
7CFB
\u
7EDF
\u
8BBE
\u
7F6E
smfcore.help
=
\u
5E2E
\u
52A9
smfcore.instruction
=
\u
8BF4
\u
660E
\u
4E66
smfcore.about
=
\u
5173\u
4E8E
smfcore.about
=
\u
7248\u
672C
\u
4FE1
\u
606F
smfcore.tacticsOuput
=
PN
\u
51FA
\u
5E93
smfcore.labelOuput
=
\u7269\u6599\u6807\u
7B7E
smfcore.order.out.executing
=
\u
5DE5
\u5355\u
6B63
\u5728\u6267\u
884C
...
...
@@ -403,7 +403,8 @@ smfcore.storagePos.no=\u5426
smfcore.dashBoard
=
\u
4EEA
\u8868\u
76D8
smfcore.spHumiture
=
\u
6E29
\u
6E7F
\u
5EA6
smfcore.login.codeError
=
\u
767B
\u
5F55
\u7801
[{0}]
\u9519\u
8BEF
smfcore.notify.kanban
=
\u
4FDD
\u
7BA1
\u
533A
\u
65E0
\u7269\u6599
,
\u
901A
\u
77E5
\u
770B
\u
677F
\u
533A
\u6210\u
529F
smfcore.notifyerror.kanban
=
\u
4FDD
\u
7BA1
\u
533A
\u
65E0
\u7269\u6599
,
\u
901A
\u
77E5
\u
770B
\u
677F
\u
533A
\u5931\u
8D25[{0}]
smfcore.prodUnprocessed
=
\u
4FDD
\u
7BA1
\u
533A
smfcore.shortageInfo
=
\u
770B
\u
677F
\u
533A
smfcore.notify.kanban
=
\u
901A
\u
77E5
\u
4FDD
\u
7BA1
\u
533A
\u6210\u
529F
smfcore.notifyerror.kanban
=
\u
901A
\u
77E5
\u
4FDD
\u
7BA1
\u
533A
\u5931\u
8D25
smfcore.prodUnprocessed
=
\u
751F
\u
4EA7
\u
533A
smfcore.shortageInfo
=
\u
4FDD
\u
7BA1
\u
533A
smfcore.notify.emptyUrl
=
\u
4FDD
\u
7BA1
\u
533A
\u5730\u5740\u
672A
\u
914D
\u
7F6E
src/main/resources/messages_en_US.properties
查看文件 @
6b5a5bf
...
...
@@ -92,7 +92,7 @@ smfcore.outSetting=Retrieval Method
smfcore.sysSetting
=
System Setting
smfcore.help
=
Help
smfcore.instruction
=
Instruction manual
smfcore.about
=
About
smfcore.about
=
version
smfcore.tacticsOuput
=
Part Number
smfcore.labelOuput
=
Grouping
smfcore.order.out.executing
=
Work orders are being executed
...
...
@@ -394,7 +394,8 @@ smfcore.storagePos.no=No
smfcore.dashBoard
=
Dashboard
smfcore.spHumiture
=
Temperature & Humidity
smfcore.login.codeError
=
Login code [{0}] error
smfcore.notify.kanban
=
No materials in storage area, Kanban notification successful
smfcore.notifyerror.kanban
=
No materials in storage area, failed to notify Kanban area [{0}]
smfcore.prodUnprocessed
=
Storage Area
smfcore.shortageInfo
=
Kanban Area
\ No newline at end of file
smfcore.notify.kanban
=
storage area notification successful
smfcore.notifyerror.kanban
=
failed to notify storage area
smfcore.prodUnprocessed
=
production area
smfcore.shortageInfo
=
storage area
smfcore.notify.emptyUrl
=
storage area address not configured
\ No newline at end of file
src/main/resources/messages_ja_JP.properties
查看文件 @
6b5a5bf
...
...
@@ -89,7 +89,7 @@ smfcore.outSetting=\u30A2\u30A6\u30C8\u30D0\u30A6\u30F3\u30C9\u6226\u7565
smfcore.sysSetting
=
\u
30B7
\u
30B9
\u
30C6
\u
30E0
\u
8A2D
\u
5B9A
smfcore.help
=
\u
30D8
\u
30EB
\u
30D7
smfcore.instruction
=
\u
53D6
\u6271\u
8AAC
\u
660E
\u
66F8
smfcore.about
=
\u
30
6B
\u3064\u3044\u3066
smfcore.about
=
\u
30
D0
\u
30FC
\u
30B8
\u
30E7
\u
30F3
\u
60C5
\u5831
smfcore.tacticsOuput
=
PN
\u
30A2
\u
30A6
\u
30C8
\u
30D0
\u
30A6
\u
30F3
\u
30C9
smfcore.labelOuput
=
\u6750\u6599\u
306E
\u
30B0
\u
30EB
\u
30FC
\u
30D7
\u5316
smfcore.order.out.executing
=
\u
4F5C
\u
696D
\u6307\u
793A
\u
304C
\u
5B9F
\u
884C
\u3055\u
308C
\u3066\u3044\u
308B
...
...
@@ -390,7 +390,8 @@ smfcore.storagePos.no=\u5426
smfcore.dashBoard
=
\u
30C0
\u
30C3
\u
30B7
\u
30E5
\u
30DC
\u
30FC
\u
30C9
smfcore.spHumiture
=
\u
6E29
\u
6E7F
\u
5EA6
smfcore.login.codeError
=
\u
30ED
\u
30B0
\u
30A4
\u
30F3
\u
30B3
\u
30FC
\u
30C9[{0}]
\u
30A8
\u
30E9
\u
30FC
smfcore.notify.kanban
=
\u
4FDD
\u
7BA1
\u
5EAB
\u
306B
\u
8CC7
\u6750\u3042\u
308A
\u
307E
\u
305B
\u3093\u3001\u
30AB
\u
30F3
\u
30D0
\u
30F3
\u
901A
\u
77E5
\u6210\u
529F
smfcore.notifyerror.kanban
=
\u
4FDD
\u
7BA1
\u
533A
\u
306B
\u
8CC7
\u6750\u3042\u
308A
\u
307E
\u
305B
\u3093\u3001\u
770B
\u
677F
\u
533A
\u3078\u
306E
\u
901A
\u
77E5
\u
306B
\u5931\u6557\u3057\u
307E
\u3057\u
305F[{0}]
smfcore.prodUnprocessed
=
\u
4FDD
\u
7BA1
\u
30A8
\u
30EA
\u
30A2
smfcore.shortageInfo
=
\u
30AB
\u3093\u3070\u3093\u
30A8
\u
30EA
\u
30A2
\ No newline at end of file
smfcore.notify.kanban
=
\u
4FDD
\u
7BA1
\u
30A8
\u
30EA
\u
30A2
\u3078\u
306E
\u
901A
\u
77E5
\u
304C
\u6210\u
529F
\u3057\u
307E
\u3057\u
305F
smfcore.notifyerror.kanban
=
\u
4FDD
\u
7BA1
\u
30A8
\u
30EA
\u
30A2
\u3078\u
306E
\u
901A
\u
77E5
\u
306B
\u5931\u6557\u3057\u
307E
\u3057\u
305F
smfcore.prodUnprocessed
=
\u
751F
\u7523\u
30A8
\u
30EA
\u
30A2
smfcore.shortageInfo
=
\u
4FDD
\u
7BA1
\u
30A8
\u
30EA
\u
30A2
smfcore.notify.emptyUrl
=
\u
4FDD
\u
7BA1
\u
5EAB
\u
30A2
\u
30C9
\u
30EC
\u
30B9
\u
304C
\u
8A2D
\u
5B9A
\u3055\u
308C
\u3066\u3044\u
307E
\u
305B
\u3093
\ No newline at end of file
src/main/resources/messages_zh_CN.properties
查看文件 @
6b5a5bf
...
...
@@ -91,7 +91,7 @@ smfcore.outSetting=\u51FA\u5E93\u7B56\u7565
smfcore.sysSetting
=
\u
7CFB
\u
7EDF
\u
8BBE
\u
7F6E
smfcore.help
=
\u
5E2E
\u
52A9
smfcore.instruction
=
\u
8BF4
\u
660E
\u
4E66
smfcore.about
=
\u
5173\u
4E8E
smfcore.about
=
\u
7248\u
672C
\u
4FE1
\u
606F
smfcore.tacticsOuput
=
PN
\u
51FA
\u
5E93
smfcore.labelOuput
=
\u7269\u6599\u6807\u
7B7E
smfcore.order.out.executing
=
\u
5DE5
\u5355\u
6B63
\u5728\u6267\u
884C
...
...
@@ -390,7 +390,8 @@ smfcore.storagePos.no=\u5426
smfcore.dashBoard=
\u
4EEA
\u8868\u
76D8
smfcore.spHumiture
=
\u
6E29
\u
6E7F
\u
5EA6
smfcore.login.codeError
=
\u
767B
\u
5F55
\u7801
[{0}]
\u9519\u
8BEF
smfcore.notify.kanban
=
\u
4FDD
\u
7BA1
\u
533A
\u
65E0
\u7269\u6599
,
\u
901A
\u
77E5
\u
770B
\u
677F
\u
533A
\u6210\u
529F
smfcore.notifyerror.kanban
=
\u
4FDD
\u
7BA1
\u
533A
\u
65E0
\u7269\u6599
,
\u
901A
\u
77E5
\u
770B
\u
677F
\u
533A
\u5931\u
8D25[{0}]
smfcore.prodUnprocessed
=
\u
4FDD
\u
7BA1
\u
533A
smfcore.shortageInfo
=
\u
770B
\u
677F
\u
533A
\ No newline at end of file
smfcore.notify.kanban
=
\u
901A
\u
77E5
\u
4FDD
\u
7BA1
\u
533A
\u6210\u
529F
smfcore.notifyerror.kanban
=
\u
901A
\u
77E5
\u
4FDD
\u
7BA1
\u
533A
\u5931\u
8D25
smfcore.prodUnprocessed
=
\u
751F
\u
4EA7
\u
533A
smfcore.shortageInfo
=
\u
4FDD
\u
7BA1
\u
533A
smfcore.notify.emptyUrl
=
\u
4FDD
\u
7BA1
\u
533A
\u5730\u5740\u
672A
\u
914D
\u
7F6E
\ No newline at end of file
src/main/resources/messages_zh_TW.properties
查看文件 @
6b5a5bf
...
...
@@ -90,7 +90,7 @@ smfcore.outSetting=\u51FA\u5EAB\u7B56\u7565
smfcore.sysSetting
=
\u
7CFB
\u
7D71
\u
8A2D
\u
7F6E
smfcore.help
=
\u
5E6B
\u
52A9
smfcore.instruction
=
\u
8AAA
\u
660E
\u
66F8
smfcore.about
=
\u
95DC
\u
65BC
smfcore.about
=
\u
7248\u
672C
\u
8CC7
\u
8A0A
smfcore.tacticsOuput
=
PN
\u
51FA
\u
5EAB
smfcore.labelOuput
=
\u7269\u6599\u
6A19
\u
7C64
smfcore.order.out.executing
=
\u
5DE5
\u
55AE
\u
6B63
\u5728\u
57F7
\u
884C
...
...
@@ -390,8 +390,8 @@ smfcore.storagePos.no=\u5426
smfcore.dashBoard=SP
\u5100\u9336\u
76E4
smfcore.spHumiture
=
\u
6E29
\u
6E7F
\u
5EA6
smfcore.login.codeError
=
\u
767B
\u9304\u
78BC[{0}]
\u
932F
\u
8AA4
smfcore.notify.kanban
=
\u
4FDD
\u
7BA1
\u5340\u7121\u7269\u6599
,
\u
901A
\u
77E5
\u
770B
\u
677F
\u5340\u6210\u
529F
smfcore.notifyerror.kanban
=
\u
4FDD
\u
7BA1
\u5340\u7121\u7269\u6599
,
\u
901A
\u
77E5
\u
770B
\u
677F
\u5340\u5931\u6557
[{0}]
smfcore.prodUnprocessed
=
\u
4FDD
\u
7BA1
\u5340
smfcore.shortageInfo
=
\u
770B
\u
677F
\u5340
smfcore.notify.kanban
=
\u
901A
\u
77E5
\u
4FDD
\u
7BA1
\u5340\u6210\u
529F
smfcore.notifyerror.kanban
=
\u
901A
\u
77E5
\u
4FDD
\u
7BA1
\u5340\u5931\u6557
smfcore.prodUnprocessed
=
\u
751F
\u7522
\u5340
smfcore.shortageInfo
=
\u
4FDD
\u
7BA1
\u5340
smfcore.notify.emptyUrl
=
\u
4FDD
\u
7BA1
\u5340\u5730\u5740\u
672A
\u
914D
\u
7F6E
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论