Commit 16ca0b8e LN

Merge remote-tracking branch 'origin/master'

2 个父辈 0ee4aae6 82706606
......@@ -118,10 +118,10 @@ public class MenuInit {
//AGV看板
//addDefaultFunctionMenu(1,null,"AGV看板","agvkanban", "agv/agvkanban/index","agv");
addDefaultFunctionMenu(-1,null,"Neo Ai","neoai","neoai/index","neoai");
//addDefaultFunctionMenu(-1,null,"Neo Ai","neoai","neoai/index","neoai");
//Mimo看板
addDefaultFunctionMenu(0,null,"SMD BOX MIMO","SMDBOXMIMO", "smdBoxMimo/index","smdMimo");
//addDefaultFunctionMenu(0,null,"SMD BOX MIMO","SMDBOXMIMO", "smdBoxMimo/index","smdMimo");
Menu boardMap = Menu.CreatePMenu("仪表盘", 0, "dashBoard", "kanban", null);
......@@ -134,9 +134,13 @@ public class MenuInit {
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","sKanban",DEFAULT_SHOW_MENU);
Menu selfAudit = Menu.CreatePMenu("盘点管理", 2, "selfAuditManagerment", "selfAudit",null);
addDefaultFunctionMenu(121,selfAudit, "盘点", "selfAudit", "system/selfAudit/index","selfAudit");
addDefaultFunctionMenu(122, selfAudit, "盘点记录","selfAuditLog", "system/selfAuditLog/index", "selfAuditLog");
//设备互联
addDefaultFunctionMenu(2,null,"设备互联","equipmentView", "neolight/equipmentView/index","sKanban");
//addDefaultFunctionMenu(2,null,"设备互联","equipmentView", "neolight/equipmentView/index","sKanban");
//物料管理:工单出库,查找出库(UID出库,PN出库),物料标签,料盒操作,出库策略,工单设置
Menu poutOut = Menu.CreatePMenu("物料管理", 3, "order", "workOrder", null);
......@@ -158,9 +162,7 @@ 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, "安全库存", "safetyInventory", "system/safetyInventory/index", "safeInventory");
addDefaultFunctionMenu(15, poutOut,"过期物料", "expireMaterials", "system/expireMaterials/index", "sMaterial");
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);
......@@ -204,17 +206,24 @@ public class MenuInit {
addDefaultFunctionMenu(72, pMenuReport,"库存", "inventory", "neolight/inventory/index", "inventory");
addDefaultFunctionMenu(73, pMenuReport,"温湿度", "humiture", "humiture/humitureReport/index", "humiture");
addDefaultFunctionMenu(73, pMenuReport,"温湿度", "spHumiture", "humiture/spHumitureReport/index", "humiture");
addDefaultFunctionMenu(74,pMenuReport, "安全库存", "safetyInventory", "system/safetyInventory/index", "safeInventory");
addDefaultFunctionMenu(75, pMenuReport,"过期物料", "expireMaterials", "system/expireMaterials/index", "sMaterial");
addDefaultFunctionMenu(81,pMenuReport, "物料追踪", "materialChart", "neolight/materialChart/index", "maChart");
//可观测性:物料追踪
Menu guanceMenu = Menu.CreatePMenu("可观测性", 10, "observability", "scanKey",null);
addDefaultFunctionMenu(81,guanceMenu, "物料追踪", "materialChart", "neolight/materialChart/index", "maChart");
//Menu guanceMenu = Menu.CreatePMenu("可观测性", 10, "observability", "scanKey",null);
//addDefaultFunctionMenu(81,guanceMenu, "物料追踪", "materialChart", "neolight/materialChart/index", "maChart");
//物联网:共享文件夹
//Menu pMenuWulian = Menu.CreatePMenu("物联网", 11, "internet", "interMenu",null);
//用户管理:用户管理,角色管理
Menu pMenuUser = Menu.CreatePMenu("用户管理", 12, "userManager", "Steve-Jobs", null);
addDefaultFunctionMenu(111, pMenuUser,"用户管理", "peoples", "system/user/index", "peoples",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(112, pMenuUser,"角色管理", "role", "system/role/index", "role",DEFAULT_SHOW_MENU);
//设置:料仓管理,菜单管理
Menu poutSet = Menu.CreatePMenu("设置", 12, "system","system",null);
Menu poutSet = Menu.CreatePMenu("设置", 13, "system","system",null);
addDefaultFunctionMenu(101, poutSet, "设备管理", "bunker", "storage/storage/index", "database",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(102,poutSet, "库位管理", "storagePos", "storagePos/storagePos/index", "tree-table",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(103, poutSet, "菜单管理", "menu", "system/menu/index", "menu");
......@@ -225,16 +234,6 @@ public class MenuInit {
// Menu orderSet = new Menu(, "orderSetting", "工单设置", "orderSetting", "system/orderSetting/index", "sysSet");
addDefaultFunctionMenu(106,poutSet, "料架设置", "shelfSetting", "system/shelfSetting/index", "translation",NL_SHOW_MENU);
//用户管理:用户管理,角色管理
Menu pMenuUser = Menu.CreatePMenu("用户管理", 13, "userManager", "Steve-Jobs", null);
addDefaultFunctionMenu(111, pMenuUser,"用户管理", "peoples", "system/user/index", "peoples",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(112, pMenuUser,"角色管理", "role", "system/role/index", "role",DEFAULT_SHOW_MENU);
//条形码:条码管理,条码设置
Menu selfAudit = Menu.CreatePMenu("盘点管理", 14, "selfAuditManagerment", "selfAudit",null);
addDefaultFunctionMenu(121,selfAudit, "盘点", "selfAudit", "system/selfAudit/index","selfAudit");
addDefaultFunctionMenu(122, selfAudit, "盘点记录","selfAuditLog", "system/selfAuditLog/index", "selfAuditLog");
Menu helpAbout = Menu.CreatePMenu("帮助", 9999, "help", "help",null);
addDefaultFunctionMenu(99991, helpAbout, "说明书", "instruction", "system/instruction/index","aboutBook");
addDefaultFunctionMenu(99992, helpAbout, "关于","about", "system/about/index","message",DEFAULT_SHOW_MENU);
......
......@@ -50,5 +50,8 @@ public enum EquipmentType {
/**
* 韩华
*/
HANWHA()
HANWHA(),
NEXIM()
}
......@@ -16,6 +16,8 @@ import com.neotel.smfcore.core.storage.enums.DeviceType;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.core.system.util.EquipStatusUtil;
import com.neotel.smfcore.custom.fuji.bean.FujiConfig;
import com.neotel.smfcore.custom.fuji.config.FujiCacheConfig;
import com.neotel.smfcore.custom.hanwha.handler.TMSCommunicator;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -57,7 +59,7 @@ public class EquipViewController {
Map<String,Equipment> allEquipList= equipmentCache.getAllEquipment();
for (Equipment equip :
allEquipList.values()) {
EquipStatusDto dto=new EquipStatusDto(equip.getId(),equip.getName(),equip.getCid(),false,0,"",equip.getType());
EquipStatusDto dto=new EquipStatusDto(equip.getId(),equip.getName(),equip.getCid(),false,0,"",equip.getType(),false);
EquipStatusBean bean= EquipStatusUtil.getStatusBean(equip.getCid());
if(bean!=null){
if(bean.timeOut()){
......@@ -74,6 +76,11 @@ public class EquipViewController {
dto.setOnLine(true);
dto.setStatus(1);
}
} else if (equip.getType().equalsIgnoreCase(EquipmentType.NEXIM.name())){
FujiConfig config = dataCache.getCache(FujiCacheConfig.FujiConfig_Cache_Name);
if (config != null){
dto.setActivate(true);
}
}
resultList.add(dto);
......@@ -83,7 +90,7 @@ public class EquipViewController {
Collection<Storage> storages = dataCache.getAllStorage().values();
for (Storage storage : storages) {
if (storage.getType().equals(DeviceType.NLL.name())){
EquipStatusDto dto=new EquipStatusDto(storage.getId(),storage.getName(),storage.getCid(),false,0,"",storage.getType());
EquipStatusDto dto=new EquipStatusDto(storage.getId(),storage.getName(),storage.getCid(),false,0,"",storage.getType(),false);
StatusBean bean = DevicesStatusUtil.getStatusBean(storage.getCid());
if (bean == null || bean.timeOut()){
dto.setOnLine(false);
......
......@@ -33,5 +33,6 @@ public class EquipStatusDto implements Serializable {
@ApiModelProperty("设备类型,NEOSCAN=扫码贴标,COUNTING=点料机")
private String type = EquipmentType.AUTO.name();
@ApiModelProperty("是否激活")
private boolean activate = false;
}
......@@ -825,4 +825,8 @@ public class LiteOrderCache {
}
public Collection<LiteOrder> getAllLiteOrder(){
return liteOrderMap.values();
}
}
......@@ -471,7 +471,7 @@ public class OrderController {
}
String result = liteOrderCache.closeOrder(orderNo);
if (ObjectUtil.isEmpty(result)) {
if (ObjectUtil.isEmpty(result) || "smfcore.order.close.success".equals(result)) {
return ResultBean.newOkResult(result, result);
} else {
return ResultBean.newErrorResult(-1, result, result);
......
......@@ -9,7 +9,9 @@ import org.springframework.data.annotation.Transient;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Getter
@Setter
......@@ -89,4 +91,7 @@ public class OrderDto implements Serializable {
@ApiModelProperty("工单线别")
private String line = "";
@ApiModelProperty("附加字段")
private Map<String,String> appendData = new HashMap<>();
}
......@@ -562,6 +562,13 @@ public class StoragePosController {
// throw new ValidateException("位置[" + pid + "]不存在");
continue;
}
Barcode posBarcode = pos.getBarcode();
if (posBarcode == null){
log.info(pos.getPosName()+"库位上没有物料,跳过");
continue;
}
Storage storage = dataCache.getStorageById(pos.getStorageId());
if (storage == null) {
throw new ValidateException("smfcore.valueNotExist", "{0}[{1}]不存在", new String[]{"storageId", pos.getStorageId()});
......
......@@ -74,8 +74,11 @@ public class FujiApi extends BaseSmfApiListener {
@Override
public void outTaskStatusChange(String outNotifyUrl, DataLog task) {
if (task.isFinished()) {
//NotifyUtil.createLoadEtn(task.getBarcode(),task.getPosName(),task.getNum(),"",task.getW(),task.getH(),task.getPartNumber(),task.getStorageName(),FileDirectoryConfig.NOTIFY);
NotifyUtil.createProvideEtn(task.getBarcode(),task.getPosName(),task.getNum(),"",task.getW(),task.getH(),task.getPartNumber(),task.getSourceName(),task.getLine(),task.getStorageName(),getNotifyEtn());
String fileName = task.getAppendData("fileName") == null ? "" : task.getAppendData("fileName").toString();
String sourceName = task.getAppendData("jobName") == null ? "" : task.getAppendData("jobName").toString();
NotifyUtil.createProvideEtn(task.getBarcode(),task.getPosName(),task.getNum(),"",task.getW(),task.getH(),task.getPartNumber(),sourceName,task.getLine(),task.getStorageName(),getNotifyEtn(),fileName);
//NotifyUtil.createDeleteEtn(task.getBarcode(),task.getW(),task.getH(),task.getPartNumber(),FileDirectoryConfig.NOTIFY);
}
}
......
package com.neotel.smfcore.custom.fuji;
import com.neotel.smfcore.common.init.MenuInit;
import com.neotel.smfcore.core.api.SmfApi;
import com.neotel.smfcore.security.service.po.Menu;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class FujiMenu {
@Autowired
MenuInit menuInit;
@Autowired
SmfApi smfApi;
@PostConstruct
public void init(){
String menuLabel = "fuji";
Menu nexim = Menu.CreatePMenu("Nexim", 3, "nexim", "nexim", null);
MenuInit.addMenu(menuLabel,nexim,3, "Nexim 工单","neximWorkOrder", "neolight/neximWorkOrder/index","neximWorkOrder");
String apiName = smfApi.getApiName();
if(Strings.isNotBlank(apiName) && apiName.equals(menuLabel)){
menuInit.showMenu(apiName);
}
}
}
......@@ -6,9 +6,13 @@ import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import com.neotel.smfcore.custom.fuji.FujiApi;
import com.neotel.smfcore.custom.fuji.bean.FujiConfig;
import com.neotel.smfcore.custom.fuji.config.FujiCacheConfig;
import com.neotel.smfcore.custom.fuji.order.service.JobService;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -17,7 +21,8 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@RestController
......@@ -33,9 +38,15 @@ public class FujiController {
@Autowired
private FujiApi fujiApi;
@Autowired
private LiteOrderCache liteOrderCache;
@Autowired
private JobService jobService;
@ApiOperation("修改配置")
@RequestMapping("/updateFujiConfig")
@AnonymousAccess
//@AnonymousAccess
public ResultBean updateFujiConfig(@RequestBody FujiConfig newConfig) {
log.info("修改配置信息为:" + JSON.toJSONString(newConfig));
FujiConfig config = dataCache.getCache(FujiCacheConfig.FujiConfig_Cache_Name);
......@@ -54,7 +65,7 @@ public class FujiController {
@ApiOperation("获取配置")
@RequestMapping("/getFujiConfig")
@AnonymousAccess
//@AnonymousAccess
public ResultBean getFujiConfig() {
FujiConfig config = dataCache.getCache(FujiCacheConfig.FujiConfig_Cache_Name);
if (config == null) {
......@@ -65,7 +76,7 @@ public class FujiController {
@ApiOperation("did注册")
@RequestMapping("/didRegister")
@AnonymousAccess
//@AnonymousAccess
public ResultBean didRegister(@RequestBody Map<String, String> paramMap) {
String code = paramMap.get("code");
if (StringUtils.isEmpty(code)) {
......@@ -84,4 +95,81 @@ public class FujiController {
return ResultBean.newOkResult("");
}
@ApiOperation("job出库")
@RequestMapping("/jobCheckOut")
@AnonymousAccess
public synchronized ResultBean jobCheckOut(String orderNo) {
LiteOrder liteOrder = liteOrderCache.getLiteOrder(orderNo);
if (liteOrder == null){
return ResultBean.newErrorResult(-1,"smfcore.order.out.notFound","工单未找到");
}
if (liteOrder.isClosed()){
return ResultBean.newErrorResult(-1,"smfcore.order.hasClose","工单已关闭");
}
if (!liteOrder.isNew()){
return ResultBean.newErrorResult(-1,"smfcore.order.out.executing","工单正在执行");
}
liteOrder = jobService.executeJob(liteOrder);
jobService.writeAns(liteOrder);
return ResultBean.newOkResult("");
}
@ApiOperation("获取需要出库/正在执行中的job任务")
@RequestMapping("/jobInfo")
@AnonymousAccess
public ResultBean getJobInfo() {
List<Map<String, Object>> resultList = new ArrayList<>();
Collection<LiteOrder> allLiteOrder = liteOrderCache.getAllLiteOrder();
if (allLiteOrder != null && !allLiteOrder.isEmpty()) {
List<LiteOrder> liteOrderList = new ArrayList<>();
for (LiteOrder liteOrder : allLiteOrder) {
if (liteOrder.isNew() || liteOrder.isOutTails()) {
liteOrderList.add(liteOrder);
} else {
//其他的默认超过2个小时 不展示
if (System.currentTimeMillis() - liteOrder.getUpdateDate().getTime() <= 1000 * 60 * 60 * 2){
liteOrderList.add(liteOrder);
}
}
}
liteOrderList = liteOrderList.stream().sorted(Comparator.comparing(LiteOrder::getCreateDate).reversed()).collect(Collectors.toList());
for (LiteOrder liteOrder : liteOrderList) {
Map<String, Object> resultMap = new HashMap<>();
String jobState = liteOrder.getAppend("jobState");
String jobName = liteOrder.getAppend("jobName");
String fileName = liteOrder.getAppend("fileName");
resultMap.put("jobState", jobState);
resultMap.put("jobName", jobName);
resultMap.put("fileName", fileName);
List<Map<String,String>> itemList = new ArrayList<>();
for (LiteOrderItem orderItem : liteOrder.getOrderItems()) {
Map<String,String> itemMap = new HashMap<>();
String item = orderItem.getAppend("item");
String errorCode = orderItem.getAppend("errorCode");
String errorText = orderItem.getAppend("errorText");
String ri = orderItem.getRi();
String pn = orderItem.getPn();
int needReelCount = orderItem.getNeedReelCount();
itemMap.put("item",item);
itemMap.put("errorCode","");
if (!"0".equals(errorCode)){
itemMap.put("errorCode",errorCode);
}
itemMap.put("errorText",errorText);
itemMap.put("ri",ri);
itemMap.put("pn",pn);
itemMap.put("needReelCount",needReelCount+"");
itemList.add(itemMap);
}
resultMap.put("itemList",itemList);
resultList.add(resultMap);
}
}
return ResultBean.newOkResult(resultList);
}
}
......@@ -70,7 +70,7 @@ public class JobHandler {
config = new FujiConfig();
}
if (System.currentTimeMillis()-lastHandleTime >= 1000 * config.getTime()){
log.info(DateUtil.toDateString(System.currentTimeMillis(),"yyyy-MM-dd HH:mm:ss"));
//log.info(DateUtil.toDateString(System.currentTimeMillis(),"yyyy-MM-dd HH:mm:ss"));
try {
handler();
} catch (Exception e) {
......@@ -116,114 +116,34 @@ public class JobHandler {
log.info("获取到line为:" + JSON.toJSONString(lineList));
//开始处理每行数据
Job job = getJob(lineList);
Job job = jobService.getJob(lineList);
String ansName = currentFile.getName();
int pos = ansName.lastIndexOf(".");
ansName = pos > 0 ? ansName.substring(0,pos) :ansName;
//判断是否已经存在job
/* boolean existJob = jobService.isExistJob(job.getName());
boolean existJob = jobService.isExistJob(job.getName(),ansName);
if (existJob){
return;
}*/
}
job = jobService.getJobResultInfo(job);
LiteOrder liteOrder = jobService.getJobResultInfo(job,ansName,lineList);
//旧的文件,移除到其他文件夹,写入ANS文件
String newFilePath = "nexim/eto/"+currentFile.getName();
FileUtil.move(currentFile,new File(newFilePath),true);
//新写入文件到当前文件夹
List<JobItem> data = job.getData();
int error = 0;
for (JobItem item : data) {
if (error == 1){
continue;
} else {
if (item.getErrorCode() == 1902 || item.getErrorCode() == 1928){
error = 2;
} else if (item.getErrorCode() == 1876 || item.getErrorCode() == 1877 || item.getErrorCode() == 1878 || item.getErrorCode() == 1886 || item.getErrorCode() == 1901){
error = 1;
}
}
//判断是否为自动出库
if ("PROVIDE_DELETE".equals(job.getJobState())){
jobService.writeAns(liteOrder);
}
}
}
lineList.add("[Result]");
lineList.add("Error="+error);
for (JobItem item : data) {
if (item.getErrorCode() != 0){
lineList.add(item.getItem()+"="+item.getErrorCode()+":"+item.getErrorText());
}
}
//写入文件到当前文件夹
String ansName = currentFile.getName();
int pos = ansName.lastIndexOf(".");
ansName = pos > 0 ? ansName.substring(0,pos) :ansName;
String ansFilePath = path+"\\"+ansName+".ANS";
try (BufferedWriter writer = new BufferedWriter(new FileWriter(ansFilePath))) {
for (String line : lineList) {
// 逐行写入 List 中的内容
writer.write(line);
writer.newLine(); // 写入换行符以分隔每一行
}
} catch (IOException e) {
// 处理可能发生的 IO 异常
log.info("写入文件时发生错误: ",e);
}
//生成出库任务
List<DataLog> dataLogList = job.getDataLogList();
if (dataLogList != null && !dataLogList.isEmpty()){
for (DataLog dataLog : dataLogList) {
taskService.updateQueueTask(dataLog);
}
}
}
}
private Job getJob(List<String> lineList) {
Job job = new Job();
for (String line : lineList) {
String[] lineSpl = line.split("=");
if (line.startsWith("Action")) {
job.setAction(lineSpl[1]);
} else if (line.startsWith("Object")) {
job.setObject(lineSpl[1]);
} else if (line.startsWith("Name")) {
job.setName(lineSpl[1]);
} else if (line.startsWith("Los")) {
job.setLos(lineSpl[1]);
} else if (line.startsWith("JobState")) {
job.setJobState(lineSpl[1]);
} else if (line.startsWith("ProdSite")) {
job.setProdSite(lineSpl[1]);
} else if (line.startsWith("Answer")) {
job.setAnswer(lineSpl[1]);
}
}
List<JobItem> itemList = new ArrayList<>();
for (String line : lineList) {
if (line.startsWith("Item")) {
String[] lineSpl = line.split("=");
JobItem item = new JobItem();
item.setItem(lineSpl[0]);
String[] split = lineSpl[1].split("\\|");
item.setPart(split[0]);
item.setCarrier(split[1]);
if (StringUtils.isNotEmpty(split[2])) {
item.setNeedNum(Integer.valueOf(split[2]));
}
if (StringUtils.isNotEmpty(split[3])) {
item.setNeedReelCount(Integer.valueOf(split[3]));
}
itemList.add(item);
}
}
job.setData(itemList);
return job;
}
}
......@@ -91,13 +91,19 @@ public class NotifyUtil {
String sourceName,
String line,
String storageName,
String path) {
String path,
String fileName) {
OutputStreamWriter out = null;
String localFilePath = "";
try {
//CARRIER_1608R-00002_LOAD_20240524_15_00_02.ETN
//localFilePath = path + "CARRIER_" + barcode + "_PROVIDE_" + new SimpleDateFormat("yyyyMMdd_HH_mm_ss").format(new Date()) + ".ETN";
localFilePath = path +"\\"+barcode+"_PROVIDE"+".ETN";
if (StringUtils.isEmpty(sourceName)) {
localFilePath = path + "\\" + barcode + "_PROVIDE" + ".ETN";
} else {
localFilePath = path + "\\" + fileName + ".ETN";
}
//localFilePath = path +"\\"+barcode+"_PROVIDE"+".ETN";
log.info("本地文件路径为:" + localFilePath);
//log.info("内容为:" + JSON.toJSONString(notify));
......
......@@ -375,19 +375,20 @@ smfcore.spbox.expireOut=\u8FC7\u671F\u7269\u6599\u51FA\u5E93
smfcore.humiture.codetemperature=\u5236\u51B7\u6E29\u5EA6
smfcore.humiture.ntemperature=\u51B7\u85CF\u6E29\u5EA6
smfcore.cyclecount.executing=Cycle Count \u6B63\u5728\u6267\u884C
smfcore.eleckanban=\u7535\u5B50\u770B\u677F
smfcore.eleckanban=\u4EEA\u8868\u76D82
smfcore.agv.already.call=\u5DF2\u7ECF\u547C\u53EB
smfcore.agv.pickup=AGV\u5DF2\u88AB\u53EB\u6765\u53D6\u8D27
smfcore.agv.dispatch=\u8D27\u7269\u5DF2\u7ECF\u53D1\u9001\u5230\u5B58\u50A8\u7CFB\u7EDF
smfcore.agv.awaitingInstruction=\u7B49\u5F85\u6307\u793A
smfcore.agv.operation=AGV\u5728\u8FD0\u884C\u4E2D
smfcore.boxmimokanban=\u4E91\u6599\u4ED3\u770B\u677F
smfcore.boxmimokanban=\u4EEA\u8868\u76D81
smfcore.neoai=Neo Ai
smfcore.duo.offline=\u8BBE\u5907{0}\u79BB\u7EBF
smfcore.msg.op.fail=\u64CD\u4F5C\u5931\u8D25
smfcore.equip.notExist=\u8BBE\u5907\u4E0D\u5B58\u5728
smfcore.order.finished=\u5DE5\u5355[{0}]\u7684\u4EFB\u52A1\u5DF2\u5168\u90E8\u5B8C\u6210
smfcore.spkanban=SP\u4EEA\u8868\u76D8
smfcore.neximWorkOrder=Nexim \u5DE5\u5355
smfcore.storagePos.plateSize=\u6599\u76D8\u5C3A\u5BF8
smfcore.storagePos.w=\u76F4\u5F84
smfcore.storagePos.h=\u539A\u5EA6
......@@ -398,4 +399,6 @@ smfcore.storagePos.layer=\u5C42
smfcore.storagePos.slot=\u69FD\u4F4D
smfcore.storagePos.available=\u662F\u5426\u53EF\u7528
smfcore.storagePos.yes=\u662F
smfcore.storagePos.no=\u5426
\ No newline at end of file
smfcore.storagePos.no=\u5426
smfcore.dashBoard=\u4EEA\u8868\u76D8
smfcore.spHumiture=\u6E29\u6E7F\u5EA6
\ No newline at end of file
......@@ -62,7 +62,7 @@ smfcore.checkNg=checking material is ng:{0}
smfcore.loadMaterialFinished=Loading material finished: {0}
smfcore.lockMaterial=EPM
smfcore.lightGroup=Neo Light Grouping
smfcore.order=Material Management
smfcore.order=Material
smfcore.workOrder=Work Order
smfcore.workOrderkanban=WO KANBAN
smfcore.searchOut=Search
......@@ -71,7 +71,7 @@ smfcore.system=System
smfcore.bunker=Equipment
smfcore.storagePos=Storage Location
smfcore.menu=Menu Manager
smfcore.materiel =Product Info
smfcore.materiel =Product Info.
smfcore.componentParts=Component
smfcore.barcode=MA ID Manager
smfcore.log=Big Data
......@@ -138,7 +138,7 @@ smfcore.shelf.msg.noTask=The operation failed, and the corresponding outgoing ta
smfcore.shelf.msg.scanPos=Please scan the library code first
smfcore.shelf.msg.inOk=The operation is successful, please put it into the storage space[{0}]
smfcore.label.noReel=Material not found for release
smfcore.msd=MSD Management
smfcore.msd=MSD
smfcore.msdManage=MSD Inventory
smfcore.msdData=MSD Traceability
smfcore.msdSetting=MSD Setting
......@@ -146,7 +146,7 @@ smfcore.translation=Resource Translation
smfcore.languageCanotNull=Language type cannot be empty
smfcore.noLanguageSetAccess=No permission to edit the language
smfcore.languageCanotRemoveAll=Cannot delete all languages
smfcore.solderPaste=Solder Paste Management
smfcore.solderPaste=Solder Paste
smfcore.solderPasteKanban=Equipment Overview
smfcore.solderPasteManage=Inventory
smfcore.solderPasteData=Traceability
......@@ -365,20 +365,21 @@ smfcore.spbox.expireOut=Expired solder paste out of storage
smfcore.humiture.codetemperature=Refrigeration zone temperature
smfcore.humiture.ntemperature=Return temperature zone temperature
smfcore.cyclecount.executing=Cycle Count are being executed
smfcore.eleckanban=DashBoard
smfcore.eleckanban=Dashboard2
smfcore.agv.already.call=Already called
smfcore.agv.pickup=AGV has been called to pick up goods
smfcore.agv.dispatch=Goods dispatched to storage system
smfcore.agv.awaitingInstruction=Awaiting instruction
smfcore.agv.operation=AGV is in operation
smfcore.boxmimokanban=SMD BOX KANBAN
smfcore.boxmimokanban=Dashboard1
smfcore.neoai=Neo Ai
smfcore.duo.offline=Equipment {0} offline
smfcore.msg.op.fail=failure of an operation
smfcore.equip.notExist=Device does not exist
smfcore.order.finished=workorder[{0}] has completed all of its tasks
smfcore.spkanban=SP Dash Board
smfcore.spkanban=SP Dashboard
smfcore.neximWorkOrder=Nexim Work Order
smfcore.storagePos.plateSize=Detected Size
smfcore.storagePos.w=Diameter
smfcore.storagePos.h=Thickness
......@@ -389,4 +390,6 @@ smfcore.storagePos.layer=Layer
smfcore.storagePos.slot=Slot
smfcore.storagePos.available=Available
smfcore.storagePos.yes=Yes
smfcore.storagePos.no=No
\ No newline at end of file
smfcore.storagePos.no=No
smfcore.dashBoard=Dashboard
smfcore.spHumiture=Temperature & Humidity
\ No newline at end of file
......@@ -367,7 +367,7 @@ smfcore.agv.pickup=AGV\u304C\u5546\u54C1\u3092\u53D7\u3051\u53D6\u308B\u305F\u30
smfcore.agv.dispatch=\u4FDD\u7BA1\u30B7\u30B9\u30C6\u30E0\u306B\u767A\u9001\u3055\u308C\u308B\u5546\u54C1
smfcore.agv.awaitingInstruction=\u6307\u793A\u5F85\u3061
smfcore.agv.operation=AGV\u52D5\u4F5C\u4E2D\u3067\u3059
smfcore.eleckanban=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9
smfcore.boxmimokanban=\u30AF\u30E9\u30A6\u30C9\u5009\u5EAB\u30AB\u30F3\u30D0\u30F3
smfcore.neoai=Neo Ai
smfcore.duo.offline=\u8BBE\u5907{0}\u79BB\u7EBF
......@@ -375,6 +375,7 @@ smfcore.msg.op.fail=\u64CD\u4F5C\u5931\u8D25
smfcore.equip.notExist=\u8BBE\u5907\u4E0D\u5B58\u5728
smfcore.order.finished=\u30EF\u30FC\u30AF\u30AA\u30FC\u30C0\u30FC[{0}]\u306E\u30BF\u30B9\u30AF\u306F\u3059\u3079\u3066\u5B8C\u4E86\u3057\u307E\u3057\u305F
smfcore.spkanban=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9
smfcore.neximWorkOrder=Nexim \u5DE5\u55AE
smfcore.storagePos.plateSize=\u6599\u76D8\u5C3A\u5BF8
smfcore.storagePos.w=\u76F4\u5F84
smfcore.storagePos.h=\u539A\u3055
......@@ -385,4 +386,6 @@ smfcore.storagePos.layer=\u5C42
smfcore.storagePos.slot=\u69FD\u4F4D
smfcore.storagePos.available=\u5229\u7528\u53EF\u5426
smfcore.storagePos.yes=\u662F
smfcore.storagePos.no=\u5426
\ No newline at end of file
smfcore.storagePos.no=\u5426
smfcore.dashBoard=\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9
smfcore.spHumiture=\u6E29\u6E7F\u5EA6
\ No newline at end of file
......@@ -367,14 +367,15 @@ smfcore.agv.pickup=AGV\u5DF2\u88AB\u53EB\u6765\u53D6\u8D27
smfcore.agv.dispatch=\u8D27\u7269\u5DF2\u7ECF\u53D1\u9001\u5230\u5B58\u50A8\u7CFB\u7EDF
smfcore.agv.awaitingInstruction=\u7B49\u5F85\u6307\u793A
smfcore.agv.operation=AGV\u5728\u8FD0\u884C\u4E2D
smfcore.boxmimokanban=\u4E91\u6599\u4ED3\u770B\u677F
smfcore.eleckanban=\u4EEA\u8868\u76D82
smfcore.boxmimokanban=\u4EEA\u8868\u76D81
smfcore.neoai=Neo Ai
smfcore.duo.offline=\u8BBE\u5907{0}\u79BB\u7EBF
smfcore.msg.op.fail=\u64CD\u4F5C\u5931\u8D25
smfcore.equip.notExist=\u8BBE\u5907\u4E0D\u5B58\u5728
smfcore.order.finished=\u5DE5\u5355[{0}]\u7684\u4EFB\u52A1\u5DF2\u5168\u90E8\u5B8C\u6210
smfcore.spkanban=SP\u4EEA\u8868\u76D8
smfcore.neximWorkOrder=Nexim \u5DE5\u5355
smfcore.storagePos.plateSize=\u6599\u76D8\u5C3A\u5BF8
smfcore.storagePos.w=\u76F4\u5F84
smfcore.storagePos.h=\u539A\u5EA6
......@@ -385,4 +386,6 @@ smfcore.storagePos.layer=\u5C42
smfcore.storagePos.slot=\u69FD\u4F4D
smfcore.storagePos.available=\u662F\u5426\u53EF\u7528
smfcore.storagePos.yes=\u662F
smfcore.storagePos.no=\u5426
\ No newline at end of file
smfcore.storagePos.no=\u5426
smfcore.dashBoard=\u4EEA\u8868\u76D8
smfcore.spHumiture=\u6E29\u6E7F\u5EA6
\ No newline at end of file
......@@ -367,14 +367,15 @@ smfcore.agv.pickup=AGV\u5DF2\u88AB\u53EB\u4F86\u53D6\u8CA8
smfcore.agv.dispatch=\u8CA8\u7269\u767C\u9001\u5230\u5B58\u5132\u7CFB\u7D71
smfcore.agv.awaitingInstruction=\u7B49\u5F85\u6307\u793A
smfcore.agv.operation=AGV\u6B63\u5728\u904B\u884C
smfcore.boxmimokanban=\u96F2\u6599\u5009\u770B\u677F
smfcore.eleckanban=\u4EEA\u8868\u76D82
smfcore.boxmimokanban=\u4EEA\u8868\u76D81
smfcore.neoai=Neo Ai
smfcore.duo.offline=\u8A2D\u5099{0}\u96E2\u7DDA
smfcore.msg.op.fail=\u64CD\u4F5C\u5931\u6557
smfcore.equip.notExist=\u8A2D\u5099\u4E0D\u5B58\u5728
smfcore.order.finished=\u5DE5\u55AE[{0}]\u7684\u4EFB\u52D9\u5DF2\u5168\u90E8\u5B8C\u6210
smfcore.spkanban=SP\u5100\u9336\u76E4
smfcore.neximWorkOrder=Nexim \u30EF\u30FC\u30AF\u30AA\u30FC\u30C0\u30FC\u30A2\u30A6\u30C8
smfcore.storagePos.plateSize=\u6599\u76D8\u5C3A\u5BF8
smfcore.storagePos.w=\u76F4\u5F84
smfcore.storagePos.h=\u539A\u5EA6
......@@ -385,4 +386,6 @@ smfcore.storagePos.layer=\u5C64
smfcore.storagePos.slot=\u69FD\u4F4D
smfcore.storagePos.available=\u662F\u5426\u53EF\u7528
smfcore.storagePos.yes=\u662F
smfcore.storagePos.no=\u5426
\ No newline at end of file
smfcore.storagePos.no=\u5426
smfcore.dashBoard=SP\u5100\u9336\u76E4
smfcore.spHumiture=\u6E29\u6E7F\u5EA6
\ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!