Commit 6b5a5bf8 zshaohui

1.扫空箱出库

1 个父辈 4cae40dd
...@@ -10,9 +10,10 @@ import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactor ...@@ -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.server.ServletWebServerFactory;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@EnableScheduling
@RestController @RestController
@SpringBootApplication @SpringBootApplication
public class SmfCoreApplication extends SpringBootServletInitializer { public class SmfCoreApplication extends SpringBootServletInitializer {
......
...@@ -162,8 +162,8 @@ public class MenuInit { ...@@ -162,8 +162,8 @@ public class MenuInit {
// addDefaultFunctionMenu(11, poutOut, "转储入库", "dumpWarehousing", "system/dumpWarehousing/index", "headIcon"); // addDefaultFunctionMenu(11, poutOut, "转储入库", "dumpWarehousing", "system/dumpWarehousing/index", "headIcon");
// addDefaultFunctionMenu(12, poutOut, "单盘入库", "singleDiskWarehousing", "system/singleDiskWarehousing/index", "headIcon"); // addDefaultFunctionMenu(12, poutOut, "单盘入库", "singleDiskWarehousing", "system/singleDiskWarehousing/index", "headIcon");
addDefaultFunctionMenu(13, poutOut, "呆滞物料", "sluggishMaterials", "system/sluggishMaterials/index", "sMaterial"); addDefaultFunctionMenu(13, poutOut, "呆滞物料", "sluggishMaterials", "system/sluggishMaterials/index", "sMaterial");
addDefaultFunctionMenu(14, poutOut, "保管区", "prodUnprocessed", "prodUnprocessed/index", "prodUnprocessed"); addDefaultFunctionMenu(14, poutOut, "生产区", "prodUnprocessed", "prodUnprocessed/index", "prodUnprocessed");
addDefaultFunctionMenu(15, poutOut, "看板区", "shortageInfo", "shortageInfo/index", "shortageInfo"); addDefaultFunctionMenu(15, poutOut, "保管区", "shortageInfo", "shortageInfo/index", "shortageInfo");
//addDefaultFunctionMenu(16, poutOut,"生成工单", "createOrder", "system/createOrder/index", "createOrder"); //addDefaultFunctionMenu(16, poutOut,"生成工单", "createOrder", "system/createOrder/index", "createOrder");
addDefaultFunctionMenu(91,poutOut, "共享文件夹", "orderSetting", "system/orderSetting/index", "sysSet",DEFAULT_SHOW_MENU); addDefaultFunctionMenu(91,poutOut, "共享文件夹", "orderSetting", "system/orderSetting/index", "sysSet",DEFAULT_SHOW_MENU);
......
...@@ -411,8 +411,13 @@ public class MaterialController { ...@@ -411,8 +411,13 @@ public class MaterialController {
if (barcode == null) { if (barcode == null) {
return ResultBean.newErrorResult(-1, "smfcore.error.barcode.noValidCode", "无效的条码"); return ResultBean.newErrorResult(-1, "smfcore.error.barcode.noValidCode", "无效的条码");
} }
DataLog dataLog = taskService.scanEmptyPalletOut(barcode.getPartNumber(), 1); DataLog dataLog = taskService.scanEmptyPalletOut(barcode.getPartNumber(), 1);
if (dataLog == null) { if (dataLog == null) {
return ResultBean.newErrorResult(-1, "smfcore.label.noReel", "未找到可出库的物料");
}
if (dataLog != null) {
log.info("开始通知Kanban区进行出库"); log.info("开始通知Kanban区进行出库");
String kanBanAreaOutUrl = dataCache.getCache(Constants.Cache_KanBanAreaOutUrl); String kanBanAreaOutUrl = dataCache.getCache(Constants.Cache_KanBanAreaOutUrl);
if (StringUtils.isNotEmpty(kanBanAreaOutUrl)) { if (StringUtils.isNotEmpty(kanBanAreaOutUrl)) {
...@@ -428,19 +433,63 @@ public class MaterialController { ...@@ -428,19 +433,63 @@ public class MaterialController {
String result = HttpHelper.postJson(kanBanAreaOutUrl, kanBanAreaOutMap); String result = HttpHelper.postJson(kanBanAreaOutUrl, kanBanAreaOutMap);
log.info("通知结果为:" + result); log.info("通知结果为:" + result);
if (StringUtils.isNotEmpty(result) && !result.equals("\"\"")){ 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) { } catch (ApiException e) {
log.info("通知失败:", e); log.info("通知失败:", e);
ProductionAreaOut areaOut = new ProductionAreaOut(barcode.getPartNumber(), barcode.getAmount(), barcode.getBatch(), e.getMessage(), new Date()); ProductionAreaOut areaOut = new ProductionAreaOut(barcode.getPartNumber(), barcode.getAmount(), barcode.getBatch(), e.getMessage(), new Date());
areaOut.setId(id + ""); areaOut.setId(id + "");
ProductionAreaExpUtil.updateProductionAreaExpOut(areaOut); 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", "通知看板区成功");
}
}
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", "通知保管区失败");
} }
return ResultBean.newOkResult("smfcore.notify.kanban", "保管区无物料,通知看板区成功"); } catch (ApiException e) {
} else { log.info("通知失败:", e);
return ResultBean.newErrorResult(-1, "smfcore.label.noReel", "未找到可出库的物料"); 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(""); return ResultBean.newOkResult("");
} }
......
...@@ -12,6 +12,7 @@ import com.neotel.smfcore.custom.toyota1541.bean.KanbanAreaOut; ...@@ -12,6 +12,7 @@ import com.neotel.smfcore.custom.toyota1541.bean.KanbanAreaOut;
import com.neotel.smfcore.custom.toyota1541.bean.ProductionAreaOut; import com.neotel.smfcore.custom.toyota1541.bean.ProductionAreaOut;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
...@@ -40,15 +41,17 @@ public class ProductionAreaExpUtil { ...@@ -40,15 +41,17 @@ public class ProductionAreaExpUtil {
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(1); ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(1);
@PostConstruct
public void init() { @Scheduled(initialDelay = 1000 * 60 ,fixedRate = 1000 * 10)
//1 分钟之后执行,每秒钟执行一次 public void resendProductionAreaExp() {
scheduledThreadPool.scheduleAtFixedRate(() -> { log.info("开始推送异常数据");
Collection<ProductionAreaOut> areaOuts = getAllProductionAreaExpOut(); lastResendDate = new Date();
if (areaOuts == null || areaOuts.isEmpty()) { Collection<ProductionAreaOut> areaOuts = getAllProductionAreaExpOut();
return; if (areaOuts == null || areaOuts.isEmpty()) {
} return;
for (ProductionAreaOut areaOut : areaOuts) { }
for (ProductionAreaOut areaOut : areaOuts) {
try {
String result = ResendProductionAreaExp(areaOut.getId()); String result = ResendProductionAreaExp(areaOut.getId());
if (StringUtils.isEmpty(result)) { if (StringUtils.isEmpty(result)) {
removeProductionAreaExpById(areaOut.getId()); removeProductionAreaExpById(areaOut.getId());
...@@ -56,12 +59,13 @@ public class ProductionAreaExpUtil { ...@@ -56,12 +59,13 @@ public class ProductionAreaExpUtil {
areaOut.setExpReason(result); areaOut.setExpReason(result);
updateProductionAreaExpOut(areaOut); updateProductionAreaExpOut(areaOut);
} }
} catch (Exception e) {
log.error(areaOut.getPartNumber() + "推送数据报错:", e);
} }
}, 60, 10, TimeUnit.SECONDS); }
} }
public static void updateProductionAreaExpOut(ProductionAreaOut areaOut) { public static void updateProductionAreaExpOut(ProductionAreaOut areaOut) {
Map<String, ProductionAreaOut> cacheMap = dataCache.getCache(Cache_ProductionArea_Exp); Map<String, ProductionAreaOut> cacheMap = dataCache.getCache(Cache_ProductionArea_Exp);
if (cacheMap == null) { if (cacheMap == null) {
...@@ -88,7 +92,6 @@ public class ProductionAreaExpUtil { ...@@ -88,7 +92,6 @@ public class ProductionAreaExpUtil {
if (cacheMap == null) { if (cacheMap == null) {
cacheMap = Maps.newConcurrentMap(); cacheMap = Maps.newConcurrentMap();
} }
lastResendDate = new Date();
ProductionAreaOut areaOut = cacheMap.get(id); ProductionAreaOut areaOut = cacheMap.get(id);
if (areaOut == null) { if (areaOut == null) {
return ""; return "";
......
...@@ -91,7 +91,7 @@ smfcore.outSetting=\u51FA\u5E93\u7B56\u7565 ...@@ -91,7 +91,7 @@ smfcore.outSetting=\u51FA\u5E93\u7B56\u7565
smfcore.sysSetting=\u7CFB\u7EDF\u8BBE\u7F6E smfcore.sysSetting=\u7CFB\u7EDF\u8BBE\u7F6E
smfcore.help=\u5E2E\u52A9 smfcore.help=\u5E2E\u52A9
smfcore.instruction=\u8BF4\u660E\u4E66 smfcore.instruction=\u8BF4\u660E\u4E66
smfcore.about=\u5173\u4E8E smfcore.about=\u7248\u672C\u4FE1\u606F
smfcore.tacticsOuput=PN\u51FA\u5E93 smfcore.tacticsOuput=PN\u51FA\u5E93
smfcore.labelOuput=\u7269\u6599\u6807\u7B7E smfcore.labelOuput=\u7269\u6599\u6807\u7B7E
smfcore.order.out.executing=\u5DE5\u5355\u6B63\u5728\u6267\u884C smfcore.order.out.executing=\u5DE5\u5355\u6B63\u5728\u6267\u884C
...@@ -403,7 +403,8 @@ smfcore.storagePos.no=\u5426 ...@@ -403,7 +403,8 @@ smfcore.storagePos.no=\u5426
smfcore.dashBoard=\u4EEA\u8868\u76D8 smfcore.dashBoard=\u4EEA\u8868\u76D8
smfcore.spHumiture=\u6E29\u6E7F\u5EA6 smfcore.spHumiture=\u6E29\u6E7F\u5EA6
smfcore.login.codeError=\u767B\u5F55\u7801[{0}]\u9519\u8BEF smfcore.login.codeError=\u767B\u5F55\u7801[{0}]\u9519\u8BEF
smfcore.notify.kanban=\u4FDD\u7BA1\u533A\u65E0\u7269\u6599,\u901A\u77E5\u770B\u677F\u533A\u6210\u529F smfcore.notify.kanban=\u901A\u77E5\u4FDD\u7BA1\u533A\u6210\u529F
smfcore.notifyerror.kanban=\u4FDD\u7BA1\u533A\u65E0\u7269\u6599,\u901A\u77E5\u770B\u677F\u533A\u5931\u8D25[{0}] smfcore.notifyerror.kanban=\u901A\u77E5\u4FDD\u7BA1\u533A\u5931\u8D25
smfcore.prodUnprocessed=\u4FDD\u7BA1\u533A smfcore.prodUnprocessed=\u751F\u4EA7\u533A
smfcore.shortageInfo=\u770B\u677F\u533A smfcore.shortageInfo=\u4FDD\u7BA1\u533A
smfcore.notify.emptyUrl=\u4FDD\u7BA1\u533A\u5730\u5740\u672A\u914D\u7F6E
...@@ -92,7 +92,7 @@ smfcore.outSetting=Retrieval Method ...@@ -92,7 +92,7 @@ smfcore.outSetting=Retrieval Method
smfcore.sysSetting=System Setting smfcore.sysSetting=System Setting
smfcore.help=Help smfcore.help=Help
smfcore.instruction=Instruction manual smfcore.instruction=Instruction manual
smfcore.about=About smfcore.about=version
smfcore.tacticsOuput=Part Number smfcore.tacticsOuput=Part Number
smfcore.labelOuput=Grouping smfcore.labelOuput=Grouping
smfcore.order.out.executing=Work orders are being executed smfcore.order.out.executing=Work orders are being executed
...@@ -394,7 +394,8 @@ smfcore.storagePos.no=No ...@@ -394,7 +394,8 @@ smfcore.storagePos.no=No
smfcore.dashBoard=Dashboard smfcore.dashBoard=Dashboard
smfcore.spHumiture=Temperature & Humidity smfcore.spHumiture=Temperature & Humidity
smfcore.login.codeError=Login code [{0}] error 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 \ 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 \ No newline at end of file
...@@ -89,7 +89,7 @@ smfcore.outSetting=\u30A2\u30A6\u30C8\u30D0\u30A6\u30F3\u30C9\u6226\u7565 ...@@ -89,7 +89,7 @@ smfcore.outSetting=\u30A2\u30A6\u30C8\u30D0\u30A6\u30F3\u30C9\u6226\u7565
smfcore.sysSetting=\u30B7\u30B9\u30C6\u30E0\u8A2D\u5B9A smfcore.sysSetting=\u30B7\u30B9\u30C6\u30E0\u8A2D\u5B9A
smfcore.help=\u30D8\u30EB\u30D7 smfcore.help=\u30D8\u30EB\u30D7
smfcore.instruction=\u53D6\u6271\u8AAC\u660E\u66F8 smfcore.instruction=\u53D6\u6271\u8AAC\u660E\u66F8
smfcore.about=\u306B\u3064\u3044\u3066 smfcore.about=\u30D0\u30FC\u30B8\u30E7\u30F3\u60C5\u5831
smfcore.tacticsOuput=PN\u30A2\u30A6\u30C8\u30D0\u30A6\u30F3\u30C9 smfcore.tacticsOuput=PN\u30A2\u30A6\u30C8\u30D0\u30A6\u30F3\u30C9
smfcore.labelOuput=\u6750\u6599\u306E\u30B0\u30EB\u30FC\u30D7\u5316 smfcore.labelOuput=\u6750\u6599\u306E\u30B0\u30EB\u30FC\u30D7\u5316
smfcore.order.out.executing=\u4F5C\u696D\u6307\u793A\u304C\u5B9F\u884C\u3055\u308C\u3066\u3044\u308B smfcore.order.out.executing=\u4F5C\u696D\u6307\u793A\u304C\u5B9F\u884C\u3055\u308C\u3066\u3044\u308B
...@@ -390,7 +390,8 @@ smfcore.storagePos.no=\u5426 ...@@ -390,7 +390,8 @@ smfcore.storagePos.no=\u5426
smfcore.dashBoard=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9 smfcore.dashBoard=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9
smfcore.spHumiture=\u6E29\u6E7F\u5EA6 smfcore.spHumiture=\u6E29\u6E7F\u5EA6
smfcore.login.codeError=\u30ED\u30B0\u30A4\u30F3\u30B3\u30FC\u30C9[{0}]\u30A8\u30E9\u30FC smfcore.login.codeError=\u30ED\u30B0\u30A4\u30F3\u30B3\u30FC\u30C9[{0}]\u30A8\u30E9\u30FC
smfcore.notify.kanban=\u4FDD\u7BA1\u5EAB\u306B\u8CC7\u6750\u3042\u308A\u307E\u305B\u3093\u3001\u30AB\u30F3\u30D0\u30F3\u901A\u77E5\u6210\u529F
smfcore.notifyerror.kanban=\u4FDD\u7BA1\u533A\u306B\u8CC7\u6750\u3042\u308A\u307E\u305B\u3093\u3001\u770B\u677F\u533A\u3078\u306E\u901A\u77E5\u306B\u5931\u6557\u3057\u307E\u3057\u305F[{0}]
smfcore.prodUnprocessed=\u4FDD\u7BA1\u30A8\u30EA\u30A2
smfcore.shortageInfo=\u30AB\u3093\u3070\u3093\u30A8\u30EA\u30A2
\ No newline at end of file \ No newline at end of file
smfcore.notify.kanban=\u4FDD\u7BA1\u30A8\u30EA\u30A2\u3078\u306E\u901A\u77E5\u304C\u6210\u529F\u3057\u307E\u3057\u305F
smfcore.notifyerror.kanban=\u4FDD\u7BA1\u30A8\u30EA\u30A2\u3078\u306E\u901A\u77E5\u306B\u5931\u6557\u3057\u307E\u3057\u305F
smfcore.prodUnprocessed=\u751F\u7523\u30A8\u30EA\u30A2
smfcore.shortageInfo=\u4FDD\u7BA1\u30A8\u30EA\u30A2
smfcore.notify.emptyUrl=\u4FDD\u7BA1\u5EAB\u30A2\u30C9\u30EC\u30B9\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093
\ No newline at end of file \ No newline at end of file
...@@ -91,7 +91,7 @@ smfcore.outSetting=\u51FA\u5E93\u7B56\u7565 ...@@ -91,7 +91,7 @@ smfcore.outSetting=\u51FA\u5E93\u7B56\u7565
smfcore.sysSetting=\u7CFB\u7EDF\u8BBE\u7F6E smfcore.sysSetting=\u7CFB\u7EDF\u8BBE\u7F6E
smfcore.help=\u5E2E\u52A9 smfcore.help=\u5E2E\u52A9
smfcore.instruction=\u8BF4\u660E\u4E66 smfcore.instruction=\u8BF4\u660E\u4E66
smfcore.about=\u5173\u4E8E smfcore.about=\u7248\u672C\u4FE1\u606F
smfcore.tacticsOuput=PN\u51FA\u5E93 smfcore.tacticsOuput=PN\u51FA\u5E93
smfcore.labelOuput=\u7269\u6599\u6807\u7B7E smfcore.labelOuput=\u7269\u6599\u6807\u7B7E
smfcore.order.out.executing=\u5DE5\u5355\u6B63\u5728\u6267\u884C smfcore.order.out.executing=\u5DE5\u5355\u6B63\u5728\u6267\u884C
...@@ -390,7 +390,8 @@ smfcore.storagePos.no=\u5426 ...@@ -390,7 +390,8 @@ smfcore.storagePos.no=\u5426
smfcore.dashBoard=\u4EEA\u8868\u76D8 smfcore.dashBoard=\u4EEA\u8868\u76D8
smfcore.spHumiture=\u6E29\u6E7F\u5EA6 smfcore.spHumiture=\u6E29\u6E7F\u5EA6
smfcore.login.codeError=\u767B\u5F55\u7801[{0}]\u9519\u8BEF smfcore.login.codeError=\u767B\u5F55\u7801[{0}]\u9519\u8BEF
smfcore.notify.kanban=\u4FDD\u7BA1\u533A\u65E0\u7269\u6599,\u901A\u77E5\u770B\u677F\u533A\u6210\u529F
smfcore.notifyerror.kanban=\u4FDD\u7BA1\u533A\u65E0\u7269\u6599,\u901A\u77E5\u770B\u677F\u533A\u5931\u8D25[{0}]
smfcore.prodUnprocessed=\u4FDD\u7BA1\u533A
smfcore.shortageInfo=\u770B\u677F\u533A
\ No newline at end of file \ No newline at end of file
smfcore.notify.kanban=\u901A\u77E5\u4FDD\u7BA1\u533A\u6210\u529F
smfcore.notifyerror.kanban=\u901A\u77E5\u4FDD\u7BA1\u533A\u5931\u8D25
smfcore.prodUnprocessed=\u751F\u4EA7\u533A
smfcore.shortageInfo=\u4FDD\u7BA1\u533A
smfcore.notify.emptyUrl=\u4FDD\u7BA1\u533A\u5730\u5740\u672A\u914D\u7F6E
\ No newline at end of file \ No newline at end of file
...@@ -90,7 +90,7 @@ smfcore.outSetting=\u51FA\u5EAB\u7B56\u7565 ...@@ -90,7 +90,7 @@ smfcore.outSetting=\u51FA\u5EAB\u7B56\u7565
smfcore.sysSetting=\u7CFB\u7D71\u8A2D\u7F6E smfcore.sysSetting=\u7CFB\u7D71\u8A2D\u7F6E
smfcore.help=\u5E6B\u52A9 smfcore.help=\u5E6B\u52A9
smfcore.instruction=\u8AAA\u660E\u66F8 smfcore.instruction=\u8AAA\u660E\u66F8
smfcore.about=\u95DC\u65BC smfcore.about=\u7248\u672C\u8CC7\u8A0A
smfcore.tacticsOuput=PN\u51FA\u5EAB smfcore.tacticsOuput=PN\u51FA\u5EAB
smfcore.labelOuput=\u7269\u6599\u6A19\u7C64 smfcore.labelOuput=\u7269\u6599\u6A19\u7C64
smfcore.order.out.executing=\u5DE5\u55AE\u6B63\u5728\u57F7\u884C smfcore.order.out.executing=\u5DE5\u55AE\u6B63\u5728\u57F7\u884C
...@@ -390,8 +390,8 @@ smfcore.storagePos.no=\u5426 ...@@ -390,8 +390,8 @@ smfcore.storagePos.no=\u5426
smfcore.dashBoard=SP\u5100\u9336\u76E4 smfcore.dashBoard=SP\u5100\u9336\u76E4
smfcore.spHumiture=\u6E29\u6E7F\u5EA6 smfcore.spHumiture=\u6E29\u6E7F\u5EA6
smfcore.login.codeError=\u767B\u9304\u78BC[{0}]\u932F\u8AA4 smfcore.login.codeError=\u767B\u9304\u78BC[{0}]\u932F\u8AA4
smfcore.notify.kanban=\u4FDD\u7BA1\u5340\u7121\u7269\u6599, \u901A\u77E5\u770B\u677F\u5340\u6210\u529F smfcore.notify.kanban=\u901A\u77E5\u4FDD\u7BA1\u5340\u6210\u529F
smfcore.notifyerror.kanban=\u4FDD\u7BA1\u5340\u7121\u7269\u6599, \u901A\u77E5\u770B\u677F\u5340\u5931\u6557[{0}] smfcore.notifyerror.kanban=\u901A\u77E5\u4FDD\u7BA1\u5340\u5931\u6557
smfcore.prodUnprocessed=\u4FDD\u7BA1\u5340 smfcore.prodUnprocessed=\u751F\u7522\u5340
smfcore.shortageInfo=\u770B\u677F\u5340 smfcore.shortageInfo=\u4FDD\u7BA1\u5340
smfcore.notify.emptyUrl=\u4FDD\u7BA1\u5340\u5730\u5740\u672A\u914D\u7F6E
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!