Commit 54168d12 LN

增加MIMO料仓界面及相关操作

1 个父辈 ca77b59a
......@@ -25,7 +25,7 @@
<hutool.version>5.3.4</hutool.version>
<fastjson.version>1.2.70</fastjson.version>
<swagger.version>2.9.2</swagger.version>
<log4j2.version>2.16.0</log4j2.version>
<log4j2.version>2.17.0</log4j2.version>
</properties>
<profiles>
<profile>
......
package com.neotel.smfcore.core.device.bean;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.base.Strings;
import com.neotel.smfcore.core.device.enums.BOX_STATUS;
import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.system.service.po.AlarmInfo;
import lombok.Data;
import lombok.ToString;
import java.util.*;
......@@ -16,6 +19,7 @@ import java.util.*;
4,电钢报警,1=上下电钢,
*/
@ToString
@Data
public class StatusBean {
/// <summary>
......@@ -31,6 +35,10 @@ public class StatusBean {
/// 操作码(0无操作(发送料仓状态给服务器),1扫码入库(扫码成功后发送给服务器),2 出库(服务器发送) )
/// </summary>
private int op;
/**
*客户端IP
*/
private String clientIp;
/// <summary>
/// 操作相关数据,
/// op=1时,客户端发送 code 二维码给服务器,服务器返回时有:posId库位编号,plateW:料盘宽度,plateH:料盘高度
......@@ -67,6 +75,11 @@ public class StatusBean {
* 英文提示消息
*/
public String msgEn = "";
public String msgCode="";
public String[] msgParam ;
/// <summary>
/// 包含的多个 BOX 的状态信息
/// </summary>
......@@ -271,90 +284,98 @@ public class StatusBean {
return System.currentTimeMillis() - lastSaveTime >= 5 * 60 * 1000;
}
public long getLastSaveTime() {
return lastSaveTime;
}
public void setLastSaveTime(long lastSaveTime) {
this.lastSaveTime = lastSaveTime;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public int getSeq() {
return seq;
}
public void setSeq(int seq) {
this.seq = seq;
}
public int getOp() {
return op;
}
public void setOp(int op) {
this.op = op;
}
public Map<String, String> getData() {
return data;
}
public void setData(Map<String, String> data) {
this.data = data;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public void setShowMsg(Locale local){
String lang = local.getLanguage();
String showMsg = msgData.get(lang);
// if(showMsg == null){
// if(Language.ENGLISH.getLabel().contains(lang)){
// showMsg = msgEn;
// }else{
// showMsg = msg;
// }
// }
this.msg = showMsg;
}
public Map<String, BoxStatusBean> getBoxStatus() {
return boxStatus;
}
// public long getLastSaveTime() {
// return lastSaveTime;
// }
//
// public void setLastSaveTime(long lastSaveTime) {
// this.lastSaveTime = lastSaveTime;
// }
//
// public long getTime() {
// return time;
// }
//
// public void setTime(long time) {
// this.time = time;
// }
//
// public String getCid() {
// return cid;
// }
//
// public void setCid(String cid) {
// this.cid = cid;
// }
//
// public int getSeq() {
// return seq;
// }
//
// public void setSeq(int seq) {
// this.seq = seq;
// }
//
// public int getOp() {
// return op;
// }
//
// public void setOp(int op) {
// this.op = op;
// }
//
// public Map<String, String> getData() {
// return data;
// }
//
// public void setData(Map<String, String> data) {
// this.data = data;
// }
//
// public int getStatus() {
// return status;
// }
//
// public void setStatus(int status) {
// this.status = status;
// }
//
// public String getMsg() {
// return msg;
// }
//
// public void setMsg(String msg) {
// this.msg = msg;
// }
//
// public String getClientIp() {
// return clientIp;
// }
//
// public void setClientIp(String clientIp) {
// this.clientIp = clientIp;
// }
public void setBoxStatus(Map<String, BoxStatusBean> boxStatus) {
this.boxStatus = boxStatus;
}
// public void setShowMsg(Locale local){
// String lang = local.getLanguage();
// String showMsg = msgData.get(lang);
//// if(showMsg == null){
//// if(Language.ENGLISH.getLabel().contains(lang)){
//// showMsg = msgEn;
//// }else{
//// showMsg = msg;
//// }
//// }
// this.msg = showMsg;
// }
//
// public Map<String, BoxStatusBean> getBoxStatus() {
// return boxStatus;
// }
//
// public void setBoxStatus(Map<String, BoxStatusBean> boxStatus) {
// this.boxStatus = boxStatus;
// }
public boolean isAvailable(){
if(!timeOut()){
......@@ -440,21 +461,21 @@ public class StatusBean {
// }
// }
public String getMsgEn() {
return msgEn;
}
public void setMsgEn(String msgEn) {
this.msgEn = msgEn;
}
public Map<String, String> getMsgData() {
return msgData;
}
public void setMsgData(Map<String, String> msgData) {
this.msgData = msgData;
}
// public String getMsgEn() {
// return msgEn;
// }
//
// public void setMsgEn(String msgEn) {
// this.msgEn = msgEn;
// }
//
// public Map<String, String> getMsgData() {
// return msgData;
// }
//
// public void setMsgData(Map<String, String> msgData) {
// this.msgData = msgData;
// }
public String getDoorReelSingnal() {
String doorReelSignal = getFromData("doorReelSignal");
......@@ -463,4 +484,19 @@ public class StatusBean {
}
return doorReelSignal;
}
public String getShowMsg(Locale locale){
//提示信息国际化
if(ObjectUtil.isEmpty(getMsgCode())||ObjectUtil.isEmpty(getMsgEn()) ){
return this.msg;
}else {
String code=this.msgCode;
if(!code.startsWith(MessageUtils.smfcore)){
code=MessageUtils.smfcore+"."+this.msgCode;
}
String newMsg = MessageUtils.getText(code, getMsgParam(), locale, getMsg());
return newMsg;
}
}
}
......@@ -24,6 +24,7 @@ public class LineBoxHandler extends BaseDeviceHandler {
log.error("料仓cid: [" + cid + "]不存在");
return null;
}
statusBean.setClientIp(request.getRemoteHost());
handleMsg(statusBean);
statusBean = saveAlarmAndHumidity(statusBean);
statusBean = handleInOutFinished(statusBean);
......
package com.neotel.smfcore.core.device.handler.impl;
import com.google.common.base.Strings;
import com.neotel.smfcore.common.utils.StorageConstants;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.core.device.api.IOpAuthApi;
import com.neotel.smfcore.core.device.bean.BoxStatusBean;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.enums.BOX_STATUS;
import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.storage.enums.DeviceType;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* Created by sunke on 2021/7/12.
......@@ -40,7 +32,11 @@ public class MimoBoxHandler extends BaseDeviceHandler {
log.error("料仓cid: [" + cid + "]不存在");
return null;
}
statusBean.setClientIp(request.getRemoteHost());
handleMsg(statusBean);
// if(ObjectUtil.isNotEmpty(statusBean.getMsg())){
// log.info("cid["+cid+"],msgCode["+statusBean.getMsgCode()+"],msg["+statusBean.getMsg()+"]");
// }
statusBean = saveAlarmAndHumidity(statusBean);
statusBean = handleInOutFinished(statusBean);
StatusBean humidityResult = handleHumidity(statusBean);
......
......@@ -17,9 +17,7 @@ import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.kanban.rest.bean.dto.*;
import com.neotel.smfcore.core.kanban.rest.bean.mapstruct.BoxTaskMapper;
import com.neotel.smfcore.core.kanban.rest.bean.query.BoxTaskQueryCriter;
import com.neotel.smfcore.core.storage.enums.DeviceType;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.manager.impl.StoragePosManagerImpl;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.manager.impl.DataLogManagerImpl;
......@@ -78,7 +76,7 @@ public class BoxKanbanController {
@ApiOperation("获取看板数据")
@GetMapping
@PreAuthorize("@el.check('boxkanban:info')")
public BoxKanbanDto info() {
public BoxKanbanDto info(HttpServletRequest servletRequest) {
List<DataLog> allTasks=taskService.getAllTasks();
BoxKanbanDto boxKanbanDto = getKanBan(allTasks);
......@@ -106,7 +104,7 @@ public class BoxKanbanController {
if(storage==null){
continue;
}
boxStatusDtos.add(getBoxDto(storage,allTasks));
boxStatusDtos.add(getBoxDto(storage,allTasks,servletRequest.getLocale()));
if(storage.isNLPShelf()){
groupType=1;
}
......@@ -248,10 +246,13 @@ public class BoxKanbanController {
@ApiOperation("料仓详情")
@GetMapping("/boxView")
@PreAuthorize("@el.check('boxkanban:boxView')")
public BoxStatusDto boxView(String id) {
public BoxStatusDto boxView(String id,HttpServletRequest servletRequest) {
List<DataLog> allTasks=taskService.getAllTasks();
Storage storage=dataCache.getStorageById(id);
BoxStatusDto dto=getBoxDto(storage,allTasks);
if(storage==null) {
throw new ValidateException("smfcore.storage.error.notExist", "未找到料仓{0}", new String[]{id});
}
BoxStatusDto dto=getBoxDto(storage,allTasks,servletRequest.getLocale());
return dto;
}
......@@ -408,7 +409,7 @@ public class BoxKanbanController {
return kanbanDto;
}
private BoxStatusDto getBoxDto(Storage storage,List<DataLog> allTasks) {
private BoxStatusDto getBoxDto(Storage storage,List<DataLog> allTasks,Locale locale) {
int inTask = 0;
int outTask = 0;
for (DataLog data : allTasks) {
......@@ -438,6 +439,12 @@ public class BoxKanbanController {
} else {
if (bean.timeOut()) {
boxDto.setOnLine(false);
for (BoxStatusBean boxStatus : bean.getBoxStatus().values()) {
boxDto.setMsg(bean.getShowMsg(locale));
boxDto.setBarcode(bean.getCode());
boxDto.setPosName(bean.getPosId());
break;
}
} else {
boxDto.setOnLine(true);
for (BoxStatusBean boxStatus : bean.getBoxStatus().values()) {
......@@ -446,7 +453,7 @@ public class BoxKanbanController {
boxDto.setHumidity(humidity);
boxDto.setTemperature(temperature);
boxDto.setStatus(bean.getStatus());
boxDto.setMsg(bean.getMsg());
boxDto.setMsg(bean.getShowMsg(locale));
boxDto.setBarcode(bean.getCode());
boxDto.setPosName(bean.getPosId());
boxDto.setData(bean.getData());
......
......@@ -39,6 +39,7 @@ public class MessageService {
}
public Map<String,Map<String, LanguageMsg>> loadMsgMap() {
int hasCount=1;
Map<String,Map<String, LanguageMsg>> resourceMap=new HashMap<>();
List<LanguageMsg> msgs = languageMsgManager.findByQuery(new Query());
for (LanguageMsg msg :
......@@ -53,8 +54,16 @@ public class MessageService {
if(typeMap==null){
typeMap=new HashMap<>();
}
typeMap.put(msg.getCode(),msg);
resourceMap.put(msg.getType(), typeMap);
if(typeMap.containsKey(msg.getCode())){
String delId=msg.getId();
// log.info("资源创建时间["+typeMap.get(msg.getCode()).getCreateDate()+"]["+ msg.getCreateDate()+"]ID["+typeMap.get(msg.getCode()).getId()+"]["+ msg.getId()+"],code=["+msg.getCode()+"]已存在,["+hasCount+"]");
log.info("资源 ID["+typeMap.get(msg.getCode()).getId()+"]["+ msg.getId()+"],code=["+msg.getCode()+"]已存在,删除资源["+delId+"]["+hasCount+"]");
languageMsgManager.delete(msg);
hasCount++;
}else{
typeMap.put(msg.getCode(),msg);
resourceMap.put(msg.getType(), typeMap);
}
}
log.info("loadMsgMap 共加载到" + msgs.size() + "条Msg");
return resourceMap;
......@@ -269,7 +278,11 @@ public class MessageService {
MessageUtils.updateMsg(msg);
}
}
log.info("导入资源[" + orgFileName + "]["+type+"]["+lanCode+"],共["+proMap.size()+"]条数据,共更新[" + updateLanguageList.size() + "]条资源,新增[" + newLanguageList.size() + "]条资源");
if(updateLanguageList.size() >0||newLanguageList.size()>0){
log.info("导入资源[" + orgFileName + "]["+type+"]["+lanCode+"],共["+proMap.size()+"]条数据,共更新[" + updateLanguageList.size() + "]条资源,新增[" + newLanguageList.size() + "]条资源");
}else{
log.debug("导入资源[" + orgFileName + "]["+type+"]["+lanCode+"],共["+proMap.size()+"]条数据,共更新[" + updateLanguageList.size() + "]条资源,新增[" + newLanguageList.size() + "]条资源");
}
return "ok";
}
......
......@@ -9,6 +9,7 @@ import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.PointUtil;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.storage.enums.DeviceType;
import com.neotel.smfcore.core.storage.rest.dto.StorageDto;
......@@ -21,6 +22,7 @@ import com.neotel.smfcore.core.storage.service.manager.IStorageManager;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import com.neotel.smfcore.security.bean.FileProperties;
import com.neotel.smfcore.security.rest.bean.dto.RoleDto;
......@@ -88,23 +90,28 @@ public class StorageController {
Query query= QueryHelp.getQuery(criteria);
PageData<Storage> pages=storageManager.findByPage(query,pageable);
List<StorageDto> StorageDtos=storageMapper.toDto(pages.getContent());
for (int i=0;i<StorageDtos.size();i++){
String groupId="";
if(StorageDtos.get(i).getGroupId()!=null&&(!StorageDtos.get(i).getGroupId().isEmpty())){
groupId=StorageDtos.get(i).getGroupId();
for (int i=0;i<StorageDtos.size();i++) {
String groupId = "";
if (StorageDtos.get(i).getGroupId() != null && (!StorageDtos.get(i).getGroupId().isEmpty())) {
groupId = StorageDtos.get(i).getGroupId();
}
Group group=groupManager.get(groupId);
if(group!=null){
Group group = groupManager.get(groupId);
if (group != null) {
StorageDtos.get(i).setGroupName(group.getGroupName());
}else{
} else {
//此料仓未分组
StorageDtos.get(i).setGroupName("");
if(!StorageDtos.get(i).getGroupId().equals("")){
storageManager.updateStorageGroup(StorageDtos.get(i).getId(),"");
log.info("料仓["+StorageDtos.get(i).getId()+"]["+StorageDtos.get(i).getName()+"]的组不存在,修改组为空");
if (!StorageDtos.get(i).getGroupId().equals("")) {
storageManager.updateStorageGroup(StorageDtos.get(i).getId(), "");
log.info("料仓[" + StorageDtos.get(i).getId() + "][" + StorageDtos.get(i).getName() + "]的组不存在,修改组为空");
}
}
//获取设备状态,设置状态和当前任务信息
StatusBean bean = DevicesStatusUtil.getStatusBean(StorageDtos.get(i).getCid());
if (bean != null && bean.getBoxStatus() != null) {
StorageDtos.get(i).setClientIp(bean.getClientIp());
}
}
return new PageData(StorageDtos,pages.getTotalElements());
}
......
......@@ -59,4 +59,7 @@ public class StorageDto implements Serializable {
@ApiModelProperty("当前绑定的入库单名称")
private String inListName="";
@ApiModelProperty("客户端IP")
private String clientIp;
}
......@@ -31,7 +31,17 @@ public class DevicesStatusUtil {
* 获取设备状态Bean
*/
public static StatusBean getStatusBean(String cid) {
return statusMap.get(cid);
StatusBean statusBean= statusMap.get(cid);
if(statusBean!=null){
StatusBean msgBean=clientMsgs.get(cid);
if(msgBean!=null){
statusBean.setMsg(msgBean.getMsg());
statusBean.setMsgEn(msgBean.getMsgEn());
statusBean.setMsgCode(msgBean.getMsgCode());
statusBean.setMsgParam(msgBean.getMsgParam());
}
}
return statusBean;
}
/**
......@@ -44,7 +54,7 @@ public class DevicesStatusUtil {
/**
* 更新客户端发上来的消息(设备故障等消息)
*/
public static StatusBean updateClientMsg(String cid, String clientMsg, String clientMsgEn) {
public static StatusBean updateClientMsg(String cid,String msgCode, String clientMsg, String clientMsgEn,String[] msgParam) {
if (clientMsg == null) {
clientMsg = "";
clientMsgEn = "";
......@@ -52,6 +62,8 @@ public class DevicesStatusUtil {
StatusBean statusBean = new StatusBean();
statusBean.setMsg(clientMsg);
statusBean.setMsgEn(clientMsgEn);
statusBean.setMsgCode(msgCode);
statusBean.setMsgParam(msgParam);
clientMsgs.put(cid, statusBean);
return statusBean;
}
......@@ -117,7 +129,7 @@ public class DevicesStatusUtil {
public static Map<String,String> getAndRemoveOp(String cid){
Map<String, String> opMap = storageOpMap.get(cid);
if(opMap!=null){
opMap.remove(cid);
storageOpMap.remove(cid);
}
return opMap;
}
......
......@@ -173,3 +173,8 @@ smfcore.msg.noCid=\u64CD\u4F5C\u5931\u8D25\uFF0C\u672A\u627E\u5230cid
smfcore.inList=\u5165\u5E93\u5355
smfcore.inlist.ameExists=\u5165\u5E93\u5355[{0}]\u5DF2\u5B58\u5728
smfcore.inlist.uploadOK=\u5165\u5E93\u5355\u4E0A\u4F20\u6210\u529F
smfcore.inlist.notFound=\u672A\u627E\u5230\u5165\u5E93\u5355[{0}]
smfcore.inlist.listOk=\u5165\u5E93\u5355[{0}]\u5DF2\u5B8C\u6210
smfcore.inlist.setOk=\u8BBE\u7F6E\u6210\u529F
smfcore.inlist.pnItemOk=\u5165\u5E93\u5355[{0}]\u7684\u7269\u6599[{1}]\u5DF2\u5165\u5E93\u5B8C\u6210
smfcore.inlist.noPn=\u5165\u5E93\u5355[{0}]\u6CA1\u6709\u7269\u6599[{1}]\u5165\u5E93\u9700\u6C42
......@@ -171,4 +171,10 @@ smfcore.msg.ok=Operation successful
smfcore.msg.noCid=Operation failed, cid not found
smfcore.inList=InList
smfcore.inlist.ameExists=InList[{0}]already exist
smfcore.inlist.uploadOK=InList upload successful
\ No newline at end of file
smfcore.inlist.uploadOK=InList upload successful
smfcore.materialBox.qtyError=Please enter the correct quantity
smfcore.inlist.notFound=Entry slip not found [{0}]
smfcore.inlist.listOk=Inbound orders [{0}] completed
smfcore.inlist.setOk=Setup successful
smfcore.inlist.pnItemOk=The material [{1}] of the incoming order [{0}] has been entered into the warehouse
smfcore.inlist.noPn=Inbound order [{0}] has no material [{1}] inbound requirement
......@@ -171,4 +171,10 @@ smfcore.msg.ok=\u52D5\u4F5C\u78BA\u8A8D\u6E08\u307F
smfcore.msg.noCid=\u64CD\u4F5C\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3001cid\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093
smfcore.inList=\u30A4\u30F3\u30D0\u30A6\u30F3\u30C9\u53D7\u6CE8
smfcore.inlist.ameExists=\u53D7\u6CE8\u6848\u4EF6[{0}]\u306F\u65E2\u306B\u5B58\u5728\u3059\u308B
smfcore.inlist.uploadOK=\u53D7\u4FE1\u3057\u305F\u6CE8\u6587\u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u306B\u6210\u529F
\ No newline at end of file
smfcore.inlist.uploadOK=\u53D7\u4FE1\u3057\u305F\u6CE8\u6587\u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u306B\u6210\u529F
smfcore.materialBox.qtyError=\u6B63\u3057\u3044\u6570\u91CF\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044
smfcore.inlist.notFound=\u30A8\u30F3\u30C8\u30EA \u30B9\u30EA\u30C3\u30D7\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093 [{0}]
smfcore.inlist.listOk=\u30A4\u30F3\u30D0\u30A6\u30F3\u30C9\u30AA\u30FC\u30C0\u30FC[{0}]\u5B8C\u4E86
smfcore.inlist.setOk=\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6210\u529F
smfcore.inlist.pnItemOk=\u5165\u8377\u30AA\u30FC\u30C0\u30FC[{0}]\u306E\u6750\u6599[{1}]\u304C\u5009\u5EAB\u306B\u5165\u5EAB\u3055\u308C\u307E\u3057\u305F
smfcore.inlist.noPn=\u53D7\u6CE8\u6848\u4EF6[{0}]\u306B\u6750\u6599[{1}]\u306E\u5165\u8377\u8981\u4EF6\u304C\u306A\u3044
......@@ -171,4 +171,10 @@ smfcore.msg.ok=\u64CD\u4F5C\u6210\u529F
smfcore.msg.noCid=\u64CD\u4F5C\u5931\u8D25\uFF0C\u672A\u627E\u5230cid
smfcore.inList=\u5165\u5E93\u5355
smfcore.inlist.ameExists=\u5165\u5E93\u5355[{0}]\u5DF2\u5B58\u5728
smfcore.inlist.uploadOK=\u5165\u5E93\u5355\u4E0A\u4F20\u6210\u529F
\ No newline at end of file
smfcore.inlist.uploadOK=\u5165\u5E93\u5355\u4E0A\u4F20\u6210\u529F
smfcore.materialBox.qtyError=\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u6570\u91CF
smfcore.inlist.notFound=\u672A\u627E\u5230\u5165\u5E93\u5355[{0}]
smfcore.inlist.listOk=\u5165\u5E93\u5355[{0}]\u5DF2\u5B8C\u6210
smfcore.inlist.setOk=\u8BBE\u7F6E\u6210\u529F
smfcore.inlist.pnItemOk=\u5165\u5E93\u5355[{0}]\u7684\u7269\u6599[{1}]\u5DF2\u5165\u5E93\u5B8C\u6210
smfcore.inlist.noPn=\u5165\u5E93\u5355[{0}]\u6CA1\u6709\u7269\u6599[{1}]\u5165\u5E93\u9700\u6C42
\ No newline at end of file
......@@ -171,4 +171,10 @@ smfcore.msg.ok=\u64CD\u4F5C\u6210\u529F
smfcore.msg.noCid=\u64CD\u4F5C\u5931\u6557\uFF0C\u672A\u627E\u5230cid
smfcore.inList=\u5165\u5EAB\u55AE
smfcore.inlist.ameExists=\u5165\u5EAB\u55AE[{0}]\u5DF2\u5B58\u5728
smfcore.inlist.uploadOK=\u5165\u5EAB\u55AE\u4E0A\u50B3\u6210\u529F
\ No newline at end of file
smfcore.inlist.uploadOK=\u5165\u5EAB\u55AE\u4E0A\u50B3\u6210\u529F
smfcore.materialBox.qtyError=\u8ACB\u8F38\u5165\u6B63\u78BA\u7684\u6578\u91CF
smfcore.inlist.notFound=\u672A\u627E\u5230\u5165\u5EAB\u55AE[{0}]
smfcore.inlist.listOk=\u5165\u5EAB\u55AE[{0}]\u5DF2\u5B8C\u6210
smfcore.inlist.setOk=\u8A2D\u7F6E\u6210\u529F
smfcore.inlist.pnItemOk=\u5165\u5EAB\u55AE[{0}]\u7684\u7269\u6599[{1}]\u5DF2\u5165\u5EAB\u5B8C\u6210
smfcore.inlist.noPn=\u5165\u5EAB\u55AE[{0}]\u6C92\u6709\u7269\u6599[{1}]\u5165\u5EAB\u9700\u6C42
\ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!