Commit 57c9cb3b LN

1.菜单调整,增加策略出库和物料分组。

2.查找出库加设备搜索功能
3.库位管理设备可多选
4.下拉框的设备增加权限过滤
5.增加出库策略配置和系统设置
6.工单增加建议出仓时间,默认倒叙
1 个父辈 9fe2875c
正在显示 24 个修改的文件 包含 315 行增加122 行删除
...@@ -195,24 +195,33 @@ public class DataInitManager { ...@@ -195,24 +195,33 @@ public class DataInitManager {
menus.addAll(createMenus(menuShelf)); menus.addAll(createMenus(menuShelf));
//出库:工单,查找出库 //出库:工单,查找出库
Menu poutOut = Menu.CreatePMenu("工单管理", 20, "order", 2, "workOrder"); Menu poutOut = Menu.CreatePMenu("物料管理", 20, "order", 2, "workOrder");
Menu menuOrder = new Menu(new ArrayList<Menu>(), 1, "menu:list", "工单", 1, "workOrder", "neolight/workOrder/index", "", 0, "workOrder"); Menu menuOrder = new Menu(new ArrayList<Menu>(), 1, "workOrder", "工单出库", 1, "workOrder", "neolight/workOrder/index", "", 0, "workOrder");
Menu menuOut = new Menu(new ArrayList<Menu>(), 1, "menu:list", "查找出库", 1, "singleOuput", "neolight/singleOuput/index", "", 0, "export1"); Menu menuOut = new Menu(new ArrayList<Menu>(), 1, "menu:list", "查找出库", 1, "singleOuput", "neolight/singleOuput/index", "", 0, "export1");
menus.addAll(createMenus(poutOut, menuOrder, menuOut)); Menu celueOut = new Menu(new ArrayList<Menu>(), 1, "menu:list", "策略出库", 1, "tacticsOuput", "neolight/tacticsOuput/index", "", 0, "workOrder");
Menu groupOut = new Menu(new ArrayList<Menu>(), 1, "menu:list", "物料分组", 1, "labelOuput", "neolight/labelOuput/index", "", 0, "export1");
celueOut.setHidden(true);
groupOut.setHidden(true);
menus.addAll(createMenus(poutOut, menuOrder, menuOut,celueOut,groupOut));
//设置:料仓管理,菜单管理 //设置:料仓管理,菜单管理
Menu poutSet = Menu.CreatePMenu("设置", 30, "system", 2, "system"); Menu poutSet = Menu.CreatePMenu("设置", 30, "system", 2, "system");
Menu menuStorage = new Menu(new ArrayList<Menu>(), 1, "storage:list", "料仓管理", 1, "bunker", "storage/storage/index", "", 0, "database"); Menu menuStorage = new Menu(new ArrayList<Menu>(), 1, "storage:list", "料仓管理", 1, "bunker", "storage/storage/index", "", 0, "database");
Menu menuStoragePos = new Menu(new ArrayList<Menu>(), 1, "storagePos:list", "库位管理", 1, "storagePos", "storagePos/storagePos/index", "", 0, "tree-table"); Menu menuStoragePos = new Menu(new ArrayList<Menu>(), 1, "storagePos:list", "库位管理", 1, "storagePos", "storagePos/storagePos/index", "", 0, "tree-table");
Menu menuMenu = new Menu(new ArrayList<Menu>(), 1, "menu:list", "菜单管理", 1, "menu", "system/menu/index", "", 0, "menu"); Menu menuMenu = new Menu(new ArrayList<Menu>(), 1, "menu:list", "菜单管理", 1, "menu", "system/menu/index", "", 0, "menu");
Menu sysSetting = new Menu(new ArrayList<Menu>(), 1, "setting", "条码设置", 1, "barcodeSetting", "system/barcodeSetting/index", "", 0, "database"); Menu sysSetting = new Menu(new ArrayList<Menu>(), 1, "barcode", "条码设置", 1, "barcodeSetting", "system/barcodeSetting/index", "", 0, "database");
// menuMenu.setHidden(true); Menu outSet = new Menu(new ArrayList<Menu>(), 1, "outSetting", "出库策略", 1, "outSetting", "system/outSetting/index", "", 0, "system");
Menu sysSet = new Menu(new ArrayList<Menu>(), 1, "sysSetting", "系统设置", 1, "sysSetting", "system/sysSetting/index", "", 0, "system");
outSet.setHidden(true);
sysSet.setHidden(true);
// menuMenu.setHidden(true);
// sysSetting.setHidden(true); // sysSetting.setHidden(true);
menus.addAll(createMenus(poutSet, menuStorage, menuStoragePos, menuMenu, sysSetting)); menus.addAll(createMenus(poutSet, menuStorage, menuStoragePos, menuMenu, sysSetting,outSet,sysSet));
//物料管理:元器件管理,条形码管理 //物料管理:元器件管理,条形码管理
Menu pMenuWl = Menu.CreatePMenu("物料管理", 30, "materiel ", 2, "BOM"); Menu pMenuWl = Menu.CreatePMenu("档案管理", 30, "materiel ", 2, "BOM");
Menu menucom = new Menu(new ArrayList<Menu>(), 1, "component:list", "元器件", 1, "componentParts", "parts/component/index", "", 0, "server"); Menu menucom = new Menu(new ArrayList<Menu>(), 1, "component:list", "元器件", 1, "componentParts", "parts/component/index", "", 0, "server");
Menu menubarcode = new Menu(new ArrayList<Menu>(), 1, "barcode:list", "条形码", 1, "barcode", "barcode/barcode/index", "", 0, "chart"); Menu menubarcode = new Menu(new ArrayList<Menu>(), 1, "barcode:list", "条形码", 1, "barcode", "barcode/barcode/index", "", 0, "chart");
menus.addAll(createMenus(pMenuWl, menucom, menubarcode)); menus.addAll(createMenus(pMenuWl, menucom, menubarcode));
......
...@@ -83,6 +83,19 @@ public class Constants { ...@@ -83,6 +83,19 @@ public class Constants {
* @deprecated No longer used to set themes. * @deprecated No longer used to set themes.
*/ */
public static final String CSS_THEME = "csstheme"; public static final String CSS_THEME = "csstheme";
/**
* 条码规则
*/
public static final String CACHE_CodeRule="codeRule"; public static final String CACHE_CodeRule="codeRule";
/**
* 准备进行更新,不允许需求单出库
*/
public static final String CACHE_StopOut="stopOut";
/**
* 停止定时器任务
*/
public static final String CACHE_StopJob="stopJob";
public static final String CACHE_CheckOutType="checkoutType";
} }
...@@ -161,7 +161,7 @@ public class QueryHelp { ...@@ -161,7 +161,7 @@ public class QueryHelp {
return fields; return fields;
} }
private static String escapeExprSpecialWord(String keyword) { public static String escapeExprSpecialWord(String keyword) {
if (ObjectUtil.isNotEmpty(keyword)) { if (ObjectUtil.isNotEmpty(keyword)) {
String[] fbsArr = { "\\", "$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|" }; String[] fbsArr = { "\\", "$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|" };
for (String key : fbsArr) { for (String key : fbsArr) {
......
...@@ -6,6 +6,7 @@ import com.google.common.collect.Lists; ...@@ -6,6 +6,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.neotel.smfcore.common.bean.ReelLockPosInfo; import com.neotel.smfcore.common.bean.ReelLockPosInfo;
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.ReelLockPosUtil; import com.neotel.smfcore.common.utils.ReelLockPosUtil;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.utils.CodeResolve; import com.neotel.smfcore.core.barcode.utils.CodeResolve;
...@@ -112,7 +113,7 @@ public class DeviceController { ...@@ -112,7 +113,7 @@ public class DeviceController {
log.info("流水线["+cids+"]获取["+rfid+"]["+code+"]的入库库位"); log.info("流水线["+cids+"]获取["+rfid+"]["+code+"]的入库库位");
Map<String,Object> resultMap = Maps.newHashMap(); Map<String,Object> resultMap = Maps.newHashMap();
if(dataCahche.getSettings().isStopOut()){ if(dataCahche.getCache(Constants.CACHE_StopOut)){
lineMsg = "系统更新中,暂停出入库"; lineMsg = "系统更新中,暂停出入库";
resultMap.put("result","100"); resultMap.put("result","100");
resultMap.put("msg",lineMsg); resultMap.put("msg",lineMsg);
......
...@@ -73,12 +73,18 @@ public class DataCache { ...@@ -73,12 +73,18 @@ public class DataCache {
initCacheItem(); initCacheItem();
} }
private void initCacheItem(){ private void initCacheItem() {
cacheMap = Maps.newConcurrentMap(); cacheMap = Maps.newConcurrentMap();
List<CacheItem> all = cacheItemDao.findAll(); List<CacheItem> all = cacheItemDao.findAll();
for (CacheItem cacheItem : all) { for (CacheItem cacheItem : all) {
cacheMap.put(cacheItem.getCacheKey(), cacheItem.getCacheValue()); cacheMap.put(cacheItem.getCacheKey(), cacheItem.getCacheValue());
} }
if (cacheMap.get(Constants.CACHE_StopOut) == null) {
updateCache(Constants.CACHE_StopOut, false);
}
if (cacheMap.get(Constants.CACHE_StopJob) == null) {
updateCache(Constants.CACHE_StopJob, false);
}
} }
/** /**
......
...@@ -171,33 +171,33 @@ public class BoxKanbanController { ...@@ -171,33 +171,33 @@ public class BoxKanbanController {
} }
dtos.add(boxTaskMapper.toDto(datalog)); dtos.add(boxTaskMapper.toDto(datalog));
// boolean blurryOk = false; boolean blurryOk = false;
// // 如果是多字段 // 如果是多字段
// String blurry = criteria.getBlurry(); String blurry = criteria.getBlurry();
// if (ObjectUtil.isNotEmpty(blurry)) { if (ObjectUtil.isNotEmpty(blurry)) {
// String[] blurrys = blurry.split(","); String[] blurrys = blurry.split(",");
// String[] valueArray = new String[]{datalog.getPosName(), datalog.getStorageName(), datalog.getCid(), datalog.getPartNumber(), datalog.getBarcode(), datalog.getSourceName()}; String[] valueArray = new String[]{datalog.getPosName(), datalog.getStorageName(), datalog.getCid(), datalog.getPartNumber(), datalog.getBarcode(), datalog.getSourceName()};
// for (String s : blurrys) { for (String s : blurrys) {
// for (String v : for (String v :
// valueArray) { valueArray) {
// Pattern pattern = Pattern.compile(QueryHelp.escapeExprSpecialWord(s), Pattern.CASE_INSENSITIVE); Pattern pattern = Pattern.compile(QueryHelp.escapeExprSpecialWord(s), Pattern.CASE_INSENSITIVE);
// Matcher m = pattern.matcher(v); Matcher m = pattern.matcher(v);
// while (m.find()) { while (m.find()) {
// blurryOk = true; blurryOk = true;
// break; break;
// } }
// if (blurryOk) break; if (blurryOk) break;
// } }
// if (blurryOk) break; if (blurryOk) break;
//
// } }
//
// } else { } else {
// blurryOk = true; blurryOk = true;
// } }
// if (blurryOk) { if (blurryOk) {
// dtos.add(boxTaskMapper.toDto(datalog)); dtos.add(boxTaskMapper.toDto(datalog));
// } }
} }
return new PageData<>(dtos, dtos.size()); return new PageData<>(dtos, dtos.size());
// Query query = QueryHelp.getQuery(criteria); // Query query = QueryHelp.getQuery(criteria);
......
...@@ -20,4 +20,7 @@ public class LITEORDER_STATUS { ...@@ -20,4 +20,7 @@ public class LITEORDER_STATUS {
public static int ONE=5; public static int ONE=5;
/**补料已完成*/ /**补料已完成*/
public static int ONE_FINISHED=6; public static int ONE_FINISHED=6;
/**工单已关闭*/
public static int CLOSED=7;
} }
...@@ -38,6 +38,8 @@ import lombok.extern.slf4j.Slf4j; ...@@ -38,6 +38,8 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings; import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
...@@ -149,7 +151,7 @@ public class OrderController { ...@@ -149,7 +151,7 @@ public class OrderController {
@ApiOperation("工单出库") @ApiOperation("工单出库")
@PostMapping(value = "/out") @PostMapping(value = "/out")
@PreAuthorize("@el.check('order:out')") @PreAuthorize("@el.check('workOrder')")
public ResultBean delete(@RequestBody Map<String, String> mapValues) { public ResultBean delete(@RequestBody Map<String, String> mapValues) {
String orderNo = mapValues.get("orderNo"); String orderNo = mapValues.get("orderNo");
if (orderNo == null) { if (orderNo == null) {
...@@ -166,7 +168,7 @@ public class OrderController { ...@@ -166,7 +168,7 @@ public class OrderController {
@ApiOperation("查询工单") @ApiOperation("查询工单")
@GetMapping @GetMapping
@PreAuthorize("@el.check('order:list')") @PreAuthorize("@el.check('workOrder')")
public PageData<OrderDto> query(OrderQueryCondition criteria, Pageable pageable) { public PageData<OrderDto> query(OrderQueryCondition criteria, Pageable pageable) {
User user = userManager.findByUserName(SecurityUtils.getCurrentUsername()); User user = userManager.findByUserName(SecurityUtils.getCurrentUsername());
if (user != null) { if (user != null) {
...@@ -187,7 +189,15 @@ public class OrderController { ...@@ -187,7 +189,15 @@ public class OrderController {
criteria.setSourceList(groupNames); criteria.setSourceList(groupNames);
} }
} }
PageData<LiteOrder> orderList = liteOrderManager.findByPage(QueryHelp.getQuery(criteria), pageable); Query query = QueryHelp.getQuery(criteria);
if (criteria.getStatus() != null) {
if (criteria.getStatus() == 1) {
query.addCriteria(Criteria.where("status").is(LITEORDER_STATUS.CLOSED));
} else if (criteria.getStatus() == 2) {
query.addCriteria(Criteria.where("status").ne(LITEORDER_STATUS.CLOSED));
}
}
PageData<LiteOrder> orderList = liteOrderManager.findByPage(query, pageable);
return orderMapper.toDto(orderList); return orderMapper.toDto(orderList);
} }
......
...@@ -8,6 +8,7 @@ import lombok.Setter; ...@@ -8,6 +8,7 @@ import lombok.Setter;
import org.springframework.data.annotation.Transient; import org.springframework.data.annotation.Transient;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date;
import java.util.List; import java.util.List;
@Getter @Getter
...@@ -77,4 +78,10 @@ public class OrderDto implements Serializable { ...@@ -77,4 +78,10 @@ public class OrderDto implements Serializable {
@ApiModelProperty("订单的详细信息") @ApiModelProperty("订单的详细信息")
private List<OrderItemDto> orderItems; private List<OrderItemDto> orderItems;
@ApiModelProperty("建议出仓时间")
private Date sdate;
@ApiModelProperty("创建时间")
private Date createDate = new Date();
} }
...@@ -19,4 +19,10 @@ public class OrderQueryCondition { ...@@ -19,4 +19,10 @@ public class OrderQueryCondition {
@QueryCondition(type = QueryCondition.Type.IN, propName = "source") @QueryCondition(type = QueryCondition.Type.IN, propName = "source")
private List<String> sourceList; private List<String> sourceList;
//状态,0=所有,1=已关闭,2=未关闭
private Integer status;
//
// @QueryCondition(type=QueryCondition.Type.IN,propName = "status")
// private List<Integer> statusList ;
} }
...@@ -18,6 +18,7 @@ import org.springframework.data.domain.Pageable; ...@@ -18,6 +18,7 @@ import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List; import java.util.List;
@Service @Service
...@@ -66,6 +67,9 @@ public class LiteOrderManagerImpl implements ILiteOrderManager { ...@@ -66,6 +67,9 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
liteOrderItem = liteOrderItemManager.save(liteOrderItem); liteOrderItem = liteOrderItemManager.save(liteOrderItem);
items.add(liteOrderItem); items.add(liteOrderItem);
} }
if(liteOrder.getSDate()==null){
liteOrder.setSdate(new Date(System.currentTimeMillis()));
}
liteOrder = save(liteOrder); liteOrder = save(liteOrder);
liteOrder.setOrderItems(items); liteOrder.setOrderItems(items);
return liteOrder; return liteOrder;
......
...@@ -8,6 +8,7 @@ import org.springframework.data.annotation.Transient; ...@@ -8,6 +8,7 @@ import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date;
import java.util.List; import java.util.List;
@Data @Data
...@@ -74,7 +75,10 @@ public class LiteOrder extends BasePo implements Serializable { ...@@ -74,7 +75,10 @@ public class LiteOrder extends BasePo implements Serializable {
@Transient @Transient
private List<LiteOrderItem> orderItems; private List<LiteOrderItem> orderItems;
/**
* 建议出仓时间
*/
private Date sdate;
/** /**
* 结束当前的任务 * 结束当前的任务
...@@ -160,4 +164,12 @@ public class LiteOrder extends BasePo implements Serializable { ...@@ -160,4 +164,12 @@ public class LiteOrder extends BasePo implements Serializable {
return orderTimes; return orderTimes;
} }
public Date getSDate(){
if(sdate==null){
return getCreateDate();
}
return sdate;
}
} }
...@@ -5,9 +5,24 @@ package com.neotel.smfcore.core.storage.enums; ...@@ -5,9 +5,24 @@ package com.neotel.smfcore.core.storage.enums;
* Created by sunke on 2021/7/14. * Created by sunke on 2021/7/14.
*/ */
public enum CHECKOUT_TYPE { public enum CHECKOUT_TYPE {
/**
* 效率优先
*/
EFFICIENCY, EFFICIENCY,
/**
* 严格先进先出
*/
FIFO, FIFO,
/**
* 尾料优先
*/
USED_FIRST, USED_FIRST,
/**
* 先过期先出
*/
EXPIRE_FIRST, EXPIRE_FIRST,
/**
* 生产日期优先
*/
PRODUCE_DATE; PRODUCE_DATE;
} }
...@@ -8,6 +8,7 @@ import com.neotel.smfcore.common.exception.ValidateException; ...@@ -8,6 +8,7 @@ import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.FileUtil; import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.PointUtil; import com.neotel.smfcore.common.utils.PointUtil;
import com.neotel.smfcore.common.utils.QueryHelp; import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.storage.rest.dto.StorageDto; import com.neotel.smfcore.core.storage.rest.dto.StorageDto;
import com.neotel.smfcore.core.storage.rest.dto.StorageSearchDto; import com.neotel.smfcore.core.storage.rest.dto.StorageSearchDto;
...@@ -23,7 +24,9 @@ import com.neotel.smfcore.security.annotation.AnonymousAccess; ...@@ -23,7 +24,9 @@ import com.neotel.smfcore.security.annotation.AnonymousAccess;
import com.neotel.smfcore.security.bean.FileProperties; import com.neotel.smfcore.security.bean.FileProperties;
import com.neotel.smfcore.security.rest.bean.dto.RoleDto; import com.neotel.smfcore.security.rest.bean.dto.RoleDto;
import com.neotel.smfcore.security.service.manager.IGroupManager; import com.neotel.smfcore.security.service.manager.IGroupManager;
import com.neotel.smfcore.security.service.manager.IUserManager;
import com.neotel.smfcore.security.service.po.Group; import com.neotel.smfcore.security.service.po.Group;
import com.neotel.smfcore.security.service.po.User;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
...@@ -73,6 +76,8 @@ public class StorageController { ...@@ -73,6 +76,8 @@ public class StorageController {
@Autowired @Autowired
private final StorageSearchMapper storageSearchMapper; private final StorageSearchMapper storageSearchMapper;
@Autowired
private final IUserManager userManager;
@ApiOperation("查询料仓") @ApiOperation("查询料仓")
...@@ -102,12 +107,24 @@ public class StorageController { ...@@ -102,12 +107,24 @@ public class StorageController {
} }
return new PageData(StorageDtos,pages.getTotalElements()); return new PageData(StorageDtos,pages.getTotalElements());
} }
@ApiOperation("返回所有料仓") @ApiOperation("根据组权限返回所有料仓")
@GetMapping(value = "/all") @GetMapping(value = "/all")
@PreAuthorize("@el.check('storage:list')") @PreAuthorize("@el.check('storage:list')")
public List<StorageSearchDto> query() { public List<StorageSearchDto> query() {
String userId = SecurityUtils.getCurrentUserId();
User user = userManager.get(userId);
Set<String> mygroups = user.getGroups();
mygroups.add("");
List<Storage> allStorages = storageManager.findAll(); List<Storage> allStorages = storageManager.findAll();
List<StorageSearchDto> storageSearchDtos = storageSearchMapper.toDto(allStorages); List<Storage> myStorages=new ArrayList<>();
for (Storage s:allStorages
) {
if(mygroups.contains(s.getGroupId())){
myStorages.add(s);
}
}
List<StorageSearchDto> storageSearchDtos = storageSearchMapper.toDto(myStorages);
return storageSearchDtos; return storageSearchDtos;
} }
......
...@@ -8,6 +8,7 @@ import lombok.Data; ...@@ -8,6 +8,7 @@ import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date; import java.util.Date;
import java.util.List;
@Data @Data
public class StoragePosFindCriteria { public class StoragePosFindCriteria {
...@@ -21,6 +22,10 @@ public class StoragePosFindCriteria { ...@@ -21,6 +22,10 @@ public class StoragePosFindCriteria {
@QueryCondition @QueryCondition
@ApiModelProperty("料仓ID") @ApiModelProperty("料仓ID")
private String storageId; private String storageId;
@QueryCondition(type = QueryCondition.Type.IN, propName = "storageId")
private List<String> storageIdList;
@QueryCondition(propName = "barcode.barcode") @QueryCondition(propName = "barcode.barcode")
@ApiModelProperty("条码") @ApiModelProperty("条码")
private String barcode; private String barcode;
......
...@@ -6,6 +6,8 @@ import lombok.Data; ...@@ -6,6 +6,8 @@ import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date; import java.util.Date;
import java.util.List;
@Data @Data
public class StoragePosQueryCriteria { public class StoragePosQueryCriteria {
@QueryCondition(blurry = "barcode.partNumber,barcode.barcode,posName") @QueryCondition(blurry = "barcode.partNumber,barcode.barcode,posName")
...@@ -22,4 +24,7 @@ public class StoragePosQueryCriteria { ...@@ -22,4 +24,7 @@ public class StoragePosQueryCriteria {
private String barcode; private String barcode;
@QueryCondition @QueryCondition
private String posName; private String posName;
@QueryCondition(type = QueryCondition.Type.IN, propName = "storageId")
private List<String> storageIdList;
} }
package com.neotel.smfcore.core.system.rest; package com.neotel.smfcore.core.system.rest;
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.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.system.rest.bean.dto.SettingsDto; import com.neotel.smfcore.core.system.rest.bean.dto.SettingsDto;
import com.neotel.smfcore.core.system.rest.bean.dto.SysSettingsDto;
import com.neotel.smfcore.core.system.rest.bean.mapstruct.SettingsMapper; import com.neotel.smfcore.core.system.rest.bean.mapstruct.SettingsMapper;
import com.neotel.smfcore.core.system.service.po.Settings; import com.neotel.smfcore.core.system.service.po.Settings;
import com.neotel.smfcore.security.rest.bean.dto.MenuDto; import com.neotel.smfcore.security.rest.bean.dto.MenuDto;
...@@ -18,7 +21,9 @@ import org.springframework.security.access.prepost.PreAuthorize; ...@@ -18,7 +21,9 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
@Slf4j @Slf4j
@Api(tags = "系统:设置") @Api(tags = "系统:设置")
...@@ -29,65 +34,112 @@ public class SettingsController { ...@@ -29,65 +34,112 @@ public class SettingsController {
@Autowired @Autowired
private DataCache dataCache; private DataCache dataCache;
@Autowired // @Autowired
private SettingsMapper settingsMapper; // private SettingsMapper settingsMapper;
//
// @ApiOperation("获取设置信息")
// @GetMapping()
// @PreAuthorize("@el.check('settings:list')")
// public SettingsDto getSettings() {
//
// Settings settings= dataCache.getSettings();
// SettingsDto dto=settingsMapper.toDto(settings);
// return dto;
// }
//
// @ApiOperation("修改设置信息")
// @PutMapping
// @PreAuthorize("@el.check('settings')")
// public ResponseEntity<Object> update(@Validated @RequestBody SettingsDto settingsDto) {
//
// if(settingsDto.getMaxHumidity()<=settingsDto.getMinHumidity()){
//
// throw new ValidateException("smfcode.humidityValueError","温度范围数据错误" );
//// throw new BadRequestException("温度范围数据错误");
// }
// if(settingsDto.getMaxHumidityShow()<=settingsDto.getMinHumidityShow()){
// throw new ValidateException("smfcode.humidityShowValueError","温度显示范围数据错误" );
//// throw new BadRequestException("温度显示范围数据错误");
// }
// if(settingsDto.getMaxTemperature()<=settingsDto.getMinTemperature()){
// throw new ValidateException("smfcode.temperatureValueError","湿度范围数据错误" );
//// throw new BadRequestException("湿度范围数据错误");
// }
// if(settingsDto.getMaxTemperatureShow()<=settingsDto.getMinTemperatureShow()){
// throw new ValidateException("smfcode.temperatureShowValueError","湿度显示范围数据错误" );
//// throw new BadRequestException("湿度显示范围数据错误");
// }
//
// if(settingsDto.getInNotifyApi()==null){
// settingsDto.setInNotifyApi("");
// }
// if(settingsDto.getOutNotifyApi()==null){
// settingsDto.setOutNotifyApi("");
// }
// if(settingsDto.getOrderFileDir()==null){
// settingsDto.setOrderFileDir("");
// }
// Settings settings=dataCache.getSettings();
// settings.setInNotifyApi(settingsDto.getInNotifyApi());
// settings.setOutNotifyApi(settingsDto.getOutNotifyApi());
// settings.setOrderFileDir(settingsDto.getOrderFileDir());
// settings.setMinHumidity(settingsDto.getMinHumidity());
// settings.setMaxHumidity(settingsDto.getMaxHumidity());
// settings.setMinTemperature(settingsDto.getMinTemperature());
// settings.setMaxTemperature(settingsDto.getMaxTemperature());
// settings.setMaxHumidityShow(settingsDto.getMaxHumidityShow());
// settings.setMinHumidityShow(settingsDto.getMinHumidityShow());
// settings.setMaxTemperatureShow(settingsDto.getMaxTemperatureShow());
// settings.setMinTemperatureShow(settingsDto.getMinTemperatureShow());
// dataCache.updateSettings(settings);
// return new ResponseEntity<>(HttpStatus.OK);
//
// }
@ApiOperation("获取设置信息") @ApiOperation("获取系统设置信息")
@GetMapping() @GetMapping("sysSettings")
@PreAuthorize("@el.check('settings:list')") @PreAuthorize("@el.check('sysSettings')")
public SettingsDto getSettings() { public SysSettingsDto getSysSettings() {
Settings settings= dataCache.getSettings(); Settings settings = dataCache.getSettings();
SettingsDto dto=settingsMapper.toDto(settings); boolean stopOut = dataCache.getCache(Constants.CACHE_StopOut);
return dto; boolean stopJob = dataCache.getCache(Constants.CACHE_StopJob);
SysSettingsDto dto = new SysSettingsDto();
dto.setStopJob(stopJob);
dto.setStopOut(stopOut);
return dto;
} }
@ApiOperation("修改设置信息") @ApiOperation("修改系统设置信息")
@PutMapping @PutMapping("sysSettings")
@PreAuthorize("@el.check('settings')") @PreAuthorize("@el.check('sysSettings')")
public ResponseEntity<Object> update(@Validated @RequestBody SettingsDto settingsDto) { public ResultBean updateSysSettings(@Validated @RequestBody SysSettingsDto sysSettingsDto) {
dataCache.updateCache(Constants.CACHE_StopOut, sysSettingsDto.isStopOut());
dataCache.updateCache(Constants.CACHE_StopJob, sysSettingsDto.isStopJob());
log.info("更改系统设置:stopout=" + sysSettingsDto.isStopOut() + ",stopjob=" + sysSettingsDto.isStopJob());
return ResultBean.newOkResult("保存成功");
if(settingsDto.getMaxHumidity()<=settingsDto.getMinHumidity()){ }
throw new ValidateException("smfcode.humidityValueError","温度范围数据错误" ); @ApiOperation("获取出库策略信息")
// throw new BadRequestException("温度范围数据错误"); @GetMapping("checkoutSettings")
} @PreAuthorize("@el.check('outSettings')")
if(settingsDto.getMaxHumidityShow()<=settingsDto.getMinHumidityShow()){ public Map<String,String> getCheckOutSettings() {
throw new ValidateException("smfcode.humidityShowValueError","温度显示范围数据错误" ); String outSet = dataCache.getCache(Constants.CACHE_CheckOutType);
// throw new BadRequestException("温度显示范围数据错误"); Map<String, String> map = new HashMap<>();
} map.put("checkOutType", outSet);
if(settingsDto.getMaxTemperature()<=settingsDto.getMinTemperature()){ return map;
throw new ValidateException("smfcode.temperatureValueError","湿度范围数据错误" ); }
// throw new BadRequestException("湿度范围数据错误");
}
if(settingsDto.getMaxTemperatureShow()<=settingsDto.getMinTemperatureShow()){
throw new ValidateException("smfcode.temperatureShowValueError","湿度显示范围数据错误" );
// throw new BadRequestException("湿度显示范围数据错误");
}
if(settingsDto.getInNotifyApi()==null){ @ApiOperation("修改出库策略")
settingsDto.setInNotifyApi(""); @PutMapping("checkoutSettings")
} @PreAuthorize("@el.check('outSettings')")
if(settingsDto.getOutNotifyApi()==null){ public ResultBean update(@Validated @RequestBody String type) {
settingsDto.setOutNotifyApi(""); // String type=map.get("checkOutType");
} dataCache.updateCache(Constants.CACHE_CheckOutType, type);
if(settingsDto.getOrderFileDir()==null){ log.info("更改出库策略:checkOutType=" + type);
settingsDto.setOrderFileDir(""); return ResultBean.newOkResult("保存成功");
}
Settings settings=dataCache.getSettings();
settings.setInNotifyApi(settingsDto.getInNotifyApi());
settings.setOutNotifyApi(settingsDto.getOutNotifyApi());
settings.setOrderFileDir(settingsDto.getOrderFileDir());
settings.setMinHumidity(settingsDto.getMinHumidity());
settings.setMaxHumidity(settingsDto.getMaxHumidity());
settings.setMinTemperature(settingsDto.getMinTemperature());
settings.setMaxTemperature(settingsDto.getMaxTemperature());
settings.setMaxHumidityShow(settingsDto.getMaxHumidityShow());
settings.setMinHumidityShow(settingsDto.getMinHumidityShow());
settings.setMaxTemperatureShow(settingsDto.getMaxTemperatureShow());
settings.setMinTemperatureShow(settingsDto.getMinTemperatureShow());
dataCache.updateSettings(settings);
return new ResponseEntity<>(HttpStatus.OK);
} }
} }
package com.neotel.smfcore.core.system.rest.bean.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
@Getter
@Setter
public class SysSettingsDto implements Serializable {
@ApiModelProperty("准备进行更新,不允许需求单出库")
private boolean stopOut = false;
@ApiModelProperty("停止定时器任务")
private boolean stopJob = false;
}
...@@ -165,15 +165,15 @@ public class Settings extends BasePo implements Serializable { ...@@ -165,15 +165,15 @@ public class Settings extends BasePo implements Serializable {
private String orderFileDir; private String orderFileDir;
/** // /**
* 准备进行更新,不允许需求单出库 // * 准备进行更新,不允许需求单出库
*/ // */
private boolean stopOut = false; // private boolean stopOut = false;
//
/** // /**
* 停止定时器任务 // * 停止定时器任务
*/ // */
private boolean stopJob = false; // private boolean stopJob = false;
/** /**
* 不入库的料仓列表 * 不入库的料仓列表
......
...@@ -62,14 +62,14 @@ smfcore.checkNg=\u8BBE\u5907\u9A8C\u8BC1\u5931\u8D25:{0} ...@@ -62,14 +62,14 @@ smfcore.checkNg=\u8BBE\u5907\u9A8C\u8BC1\u5931\u8D25:{0}
smfcore.loadMaterialFinished=\u8BBE\u5907\u52A0\u8F7D\u5B8C\u6210: {0} smfcore.loadMaterialFinished=\u8BBE\u5907\u52A0\u8F7D\u5B8C\u6210: {0}
smfcore.lockMaterial=\u8BBE\u5907\u770B\u677F smfcore.lockMaterial=\u8BBE\u5907\u770B\u677F
smfcore.lightGroup=\u6599\u67B6\u5206\u7EC4 smfcore.lightGroup=\u6599\u67B6\u5206\u7EC4
smfcore.order=\u5DE5\u5355\u7BA1\u7406 smfcore.order=\u7269\u6599\u7BA1\u7406
smfcore.workOrder=\u5DE5\u5355 smfcore.workOrder=\u5DE5\u5355\u51FA\u5E93
smfcore.singleOuput=\u67E5\u627E\u51FA\u5E93 smfcore.singleOuput=\u67E5\u627E\u51FA\u5E93
smfcore.system=\u8BBE\u7F6E smfcore.system=\u8BBE\u7F6E
smfcore.bunker=\u6599\u4ED3\u7BA1\u7406 smfcore.bunker=\u6599\u4ED3\u7BA1\u7406
smfcore.storagePos=\u5E93\u4F4D\u7BA1\u7406 smfcore.storagePos=\u5E93\u4F4D\u7BA1\u7406
smfcore.menu=\u83DC\u5355\u7BA1\u7406 smfcore.menu=\u83DC\u5355\u7BA1\u7406
smfcore.materiel =\u7269\u6599\u7BA1\u7406 smfcore.materiel =\u6863\u6848\u7BA1\u7406
smfcore.componentParts=\u5143\u5668\u4EF6 smfcore.componentParts=\u5143\u5668\u4EF6
smfcore.barcode=\u6761\u5F62\u7801 smfcore.barcode=\u6761\u5F62\u7801
smfcore.log=\u65E5\u5FD7\u7BA1\u7406 smfcore.log=\u65E5\u5FD7\u7BA1\u7406
...@@ -91,6 +91,8 @@ smfcore.sysSetting=\u7CFB\u7EDF\u8BBE\u7F6E ...@@ -91,6 +91,8 @@ 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=\u5173\u4E8E
smfcore.tacticsOuput=\u7B56\u7565\u51FA\u5E93
smfcore.labelOuput=\u7269\u6599\u5206\u7EC4
......
...@@ -62,14 +62,14 @@ smfcore.checkNg=checking material is ng:{0} ...@@ -62,14 +62,14 @@ smfcore.checkNg=checking material is ng:{0}
smfcore.loadMaterialFinished=Loading material finished: {0} smfcore.loadMaterialFinished=Loading material finished: {0}
smfcore.lockMaterial=Equipment kanban smfcore.lockMaterial=Equipment kanban
smfcore.lightGroup=Neo Light Grouping smfcore.lightGroup=Neo Light Grouping
smfcore.order=Work Order Management smfcore.order=Material Management
smfcore.workOrder=Work Order smfcore.workOrder=Work Order
smfcore.singleOuput=Check to Retrieve smfcore.singleOuput=Check to Retrieve
smfcore.system=Set smfcore.system=Set
smfcore.bunker=SMD BOX Management smfcore.bunker=SMD BOX Management
smfcore.storagePos=Position Management smfcore.storagePos=Position Management
smfcore.menu=Menu Management smfcore.menu=Menu Management
smfcore.materiel =Material Management smfcore.materiel =Archives Management
smfcore.componentParts=Component smfcore.componentParts=Component
smfcore.barcode=Barcode smfcore.barcode=Barcode
smfcore.log=Log Management smfcore.log=Log Management
...@@ -90,4 +90,6 @@ smfcore.outSetting=Material Retrieval Tatic ...@@ -90,4 +90,6 @@ smfcore.outSetting=Material Retrieval Tatic
smfcore.sysSetting=System Settings smfcore.sysSetting=System Settings
smfcore.help=Help smfcore.help=Help
smfcore.instruction=Instruction manual smfcore.instruction=Instruction manual
smfcore.about=About
\ No newline at end of file \ No newline at end of file
smfcore.about=About
smfcore.tacticsOuput=Strategies Retrival
smfcore.labelOuput=Material grouping
\ No newline at end of file \ No newline at end of file
...@@ -62,14 +62,14 @@ smfcore.checkNg=\u30C7\u30D0\u30A4\u30B9\u306E\u8A8D\u8A3C\u306B\u5931\u6557\u30 ...@@ -62,14 +62,14 @@ smfcore.checkNg=\u30C7\u30D0\u30A4\u30B9\u306E\u8A8D\u8A3C\u306B\u5931\u6557\u30
smfcore.loadMaterialFinished=\u30C7\u30D0\u30A4\u30B9\u306E\u8AAD\u307F\u8FBC\u307F\u5B8C\u4E86\uFF1A{0} smfcore.loadMaterialFinished=\u30C7\u30D0\u30A4\u30B9\u306E\u8AAD\u307F\u8FBC\u307F\u5B8C\u4E86\uFF1A{0}
smfcore.lockMaterial=\u8A2D\u5099\u304B\u3093\u3070\u3093 smfcore.lockMaterial=\u8A2D\u5099\u304B\u3093\u3070\u3093
smfcore.lightGroup=\u30E9\u30C3\u30AF\u306E\u30B0\u30EB\u30FC\u30D4\u30F3\u30B0 smfcore.lightGroup=\u30E9\u30C3\u30AF\u306E\u30B0\u30EB\u30FC\u30D4\u30F3\u30B0
smfcore.order=\u4F5C\u696D\u6307\u793A\u7BA1\u7406 smfcore.order=\u30DE\u30C6\u30EA\u30A2\u30EB\u30DE\u30CD\u30B8\u30E1\u30F3\u30C8
smfcore.workOrder=\u4F5C\u696D\u6307\u793A smfcore.workOrder=\u30EF\u30FC\u30AF\u30AA\u30FC\u30C0\u30FC\u30A2\u30A6\u30C8
smfcore.singleOuput=\u8ABF\u3079\u308B smfcore.singleOuput=\u8ABF\u3079\u308B
smfcore.system=\u8A2D\u5B9A smfcore.system=\u8A2D\u5B9A
smfcore.bunker=\u30B5\u30A4\u30ED\u7BA1\u7406 smfcore.bunker=\u30B5\u30A4\u30ED\u7BA1\u7406
smfcore.storagePos=\u30B9\u30C8\u30EC\u30FC\u30B8\u7BA1\u7406 smfcore.storagePos=\u30B9\u30C8\u30EC\u30FC\u30B8\u7BA1\u7406
smfcore.menu=\u30E1\u30CB\u30E5\u30FC\u7BA1\u7406 smfcore.menu=\u30E1\u30CB\u30E5\u30FC\u7BA1\u7406
smfcore.materiel =\u30DE\u30C6\u30EA\u30A2\u30EB\u30DE\u30CD\u30B8\u30E1\u30F3\u30C8 smfcore.materiel =\u30A2\u30FC\u30AB\u30A4\u30D6\u7BA1\u7406
smfcore.componentParts=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8 smfcore.componentParts=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8
smfcore.barcode=\u30D0\u30FC\u30B3\u30FC\u30C9 smfcore.barcode=\u30D0\u30FC\u30B3\u30FC\u30C9
smfcore.log=\u30ED\u30B0\u7BA1\u7406 smfcore.log=\u30ED\u30B0\u7BA1\u7406
...@@ -90,4 +90,6 @@ smfcore.outSetting=\u30A2\u30A6\u30C8\u30D0\u30A6\u30F3\u30C9\u6226\u7565 ...@@ -90,4 +90,6 @@ 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
\ No newline at end of file \ No newline at end of file
smfcore.about=\u306B\u3064\u3044\u3066
smfcore.tacticsOuput=\u30B9\u30C8\u30E9\u30C6\u30B8\u30FC\u306F\u5728\u5EAB\u5207\u308C\u3067\u3059
smfcore.labelOuput=\u6750\u6599\u306E\u30B0\u30EB\u30FC\u30D7\u5316
\ No newline at end of file \ No newline at end of file
...@@ -62,14 +62,14 @@ smfcore.checkNg=\u8BBE\u5907\u9A8C\u8BC1\u5931\u8D25:{0} ...@@ -62,14 +62,14 @@ smfcore.checkNg=\u8BBE\u5907\u9A8C\u8BC1\u5931\u8D25:{0}
smfcore.loadMaterialFinished=\u8BBE\u5907\u52A0\u8F7D\u5B8C\u6210: {0} smfcore.loadMaterialFinished=\u8BBE\u5907\u52A0\u8F7D\u5B8C\u6210: {0}
smfcore.lockMaterial=\u8BBE\u5907\u770B\u677F smfcore.lockMaterial=\u8BBE\u5907\u770B\u677F
smfcore.lightGroup=\u6599\u67B6\u5206\u7EC4 smfcore.lightGroup=\u6599\u67B6\u5206\u7EC4
smfcore.order=\u5DE5\u5355\u7BA1\u7406 smfcore.order=\u7269\u6599\u7BA1\u7406
smfcore.workOrder=\u5DE5\u5355 smfcore.workOrder=\u5DE5\u5355\u51FA\u5E93
smfcore.singleOuput=\u67E5\u627E\u51FA\u5E93 smfcore.singleOuput=\u67E5\u627E\u51FA\u5E93
smfcore.system=\u8BBE\u7F6E smfcore.system=\u8BBE\u7F6E
smfcore.bunker=\u6599\u4ED3\u7BA1\u7406 smfcore.bunker=\u6599\u4ED3\u7BA1\u7406
smfcore.storagePos=\u5E93\u4F4D\u7BA1\u7406 smfcore.storagePos=\u5E93\u4F4D\u7BA1\u7406
smfcore.menu=\u83DC\u5355\u7BA1\u7406 smfcore.menu=\u83DC\u5355\u7BA1\u7406
smfcore.materiel =\u7269\u6599\u7BA1\u7406 smfcore.materiel =\u6863\u6848\u7BA1\u7406
smfcore.componentParts=\u5143\u5668\u4EF6 smfcore.componentParts=\u5143\u5668\u4EF6
smfcore.barcode=\u6761\u5F62\u7801 smfcore.barcode=\u6761\u5F62\u7801
smfcore.log=\u65E5\u5FD7\u7BA1\u7406 smfcore.log=\u65E5\u5FD7\u7BA1\u7406
...@@ -91,3 +91,5 @@ smfcore.sysSetting=\u7CFB\u7EDF\u8BBE\u7F6E ...@@ -91,3 +91,5 @@ 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=\u5173\u4E8E
smfcore.tacticsOuput=\u7B56\u7565\u51FA\u5E93
smfcore.labelOuput=\u7269\u6599\u5206\u7EC4
\ No newline at end of file \ No newline at end of file
...@@ -62,14 +62,14 @@ smfcore.checkNg=\u8A2D\u5099\u9A57\u8B49\u5931\u6557:{0} ...@@ -62,14 +62,14 @@ smfcore.checkNg=\u8A2D\u5099\u9A57\u8B49\u5931\u6557:{0}
smfcore.loadMaterialFinished=\u8A2D\u5099\u52A0\u8F09\u5B8C\u6210: {0} smfcore.loadMaterialFinished=\u8A2D\u5099\u52A0\u8F09\u5B8C\u6210: {0}
smfcore.lockMaterial=\u8A2D\u5099\u770B\u677F smfcore.lockMaterial=\u8A2D\u5099\u770B\u677F
smfcore.lightGroup=\u6599\u67B6\u5206\u7D44 smfcore.lightGroup=\u6599\u67B6\u5206\u7D44
smfcore.order=\u5DE5\u55AE\u7BA1\u7406 smfcore.order=\u7269\u6599\u7BA1\u7406
smfcore.workOrder=\u5DE5\u55AE smfcore.workOrder=\u5DE5\u55AE\u51FA\u5EAB
smfcore.singleOuput=\u67E5\u627E\u51FA\u5EAB smfcore.singleOuput=\u67E5\u627E\u51FA\u5EAB
smfcore.system=\u8A2D\u7F6E smfcore.system=\u8A2D\u7F6E
smfcore.bunker=\u6599\u5009\u7BA1\u7406 smfcore.bunker=\u6599\u5009\u7BA1\u7406
smfcore.storagePos=\u5EAB\u4F4D\u7BA1\u7406 smfcore.storagePos=\u5EAB\u4F4D\u7BA1\u7406
smfcore.menu=\u83DC\u55AE\u7BA1\u7406 smfcore.menu=\u83DC\u55AE\u7BA1\u7406
smfcore.materiel =\u7269\u6599\u7BA1\u7406 smfcore.materiel =\u6A94\u6848\u7BA1\u7406
smfcore.componentParts=\u5143\u5668\u4EF6 smfcore.componentParts=\u5143\u5668\u4EF6
smfcore.barcode=\u689D\u5F62\u78BC smfcore.barcode=\u689D\u5F62\u78BC
smfcore.log=\u65E5\u5FD7\u7BA1\u7406 smfcore.log=\u65E5\u5FD7\u7BA1\u7406
...@@ -90,4 +90,6 @@ smfcore.outSetting=\u51FA\u5EAB\u7B56\u7565 ...@@ -90,4 +90,6 @@ 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
\ No newline at end of file \ No newline at end of file
smfcore.about=\u95DC\u65BC
smfcore.tacticsOuput=\u7B56\u7565\u51FA\u5EAB
smfcore.labelOuput=\u7269\u6599\u5206\u7D44
\ No newline at end of file \ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!