Commit a7048ed6 zshaohui

1.料串分配到指定料仓,逻辑修改

1 个父辈 c4ac20cb
package com.neotel.smfcore.custom.Jkem21481.bean;
import lombok.Data;
@Data
public class StackerAvailableStorage {
private int w;
private int h;
private int count;
private String storageName;
private int emptyCount;
}
......@@ -4,9 +4,11 @@ import com.alibaba.fastjson.JSON;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.storage.bean.UsageItem;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.Jkem21481.bean.MJPartNumber;
import com.neotel.smfcore.custom.Jkem21481.bean.StackerAvailableStorage;
import com.neotel.smfcore.custom.Jkem21481.bean.StackerCache;
import com.neotel.smfcore.custom.Jkem21481.manager.IPartNumberManager;
import com.neotel.smfcore.custom.Jkem21481.util.StackerUtil;
......@@ -79,7 +81,7 @@ public class StackerController {
@RequestMapping("/getAvailableStorageByStacker")
@AnonymousAccess
public ResultBean getAvailableStorageByStacker(String stacker) {
log.info("移除料串[{}]信息", stacker);
log.info("获取可用料仓[{}]信息", stacker);
if (StringUtils.isEmpty(stacker)) {
return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"stacker"});
}
......@@ -94,57 +96,99 @@ public class StackerController {
private static final List<String> msdCidList = Arrays.asList("XLR4A","XLR4B","XLR5A","XLR5B","XLR6A","XLR6B");
private List<String> getAvailableStorage(String stacker) {
List<StackerCache> stackerCacheList = StackerUtil.getDetailByStacker(stacker);
//Msd和非Msd列表
List<StackerCache> msdList = new ArrayList<>();
List<StackerCache> noMsdList = new ArrayList<>();
for (StackerCache cache : stackerCacheList) {
if (cache.getMsd() == 1) {
msdList.add(cache);
} else {
noMsdList.add(cache);
}
}
if (msdList != null && !msdList.isEmpty()) {
log.info("料串[{}]的msd不为空,信息为[{}],直接返回Msd列表", stacker, JSON.toJSONString(msdList));
return msdCidList;
}
List<String> availableStorageList = new ArrayList<>();
//不是msd的料仓
List<Storage> noMsdStorageList = new ArrayList<>();
for (Storage storage : dataCache.getAllStorage().values()) {
if (msdCidList.contains(storage.getCid())){
continue;
if (!msdCidList.contains(storage.getCid())) {
noMsdStorageList.add(storage);
}
for (StackerCache stackerCache : noMsdList) {
if (storage.canPutIn(stackerCache.getW(),stackerCache.getH())){
availableStorageList.add(storage.getCid());
}
List<String> noMsdAvailableStorageList = getAvailableStorage(stacker,noMsdStorageList, stackerCacheList);
if (noMsdAvailableStorageList != null && !noMsdAvailableStorageList.isEmpty()) {
return noMsdAvailableStorageList;
}
//msd的料仓
List<Storage> msdStorageList = new ArrayList<>();
for (Storage storage : dataCache.getAllStorage().values()) {
if (msdCidList.contains(storage.getCid())) {
msdStorageList.add(storage);
}
if (availableStorageList != null && !availableStorageList.isEmpty()){
availableStorageList = availableStorageList.stream().distinct().collect(Collectors.toList());
return availableStorageList;
}
List<String> msdAvailableStorageList = getAvailableStorage(stacker,msdStorageList, stackerCacheList);
if (msdAvailableStorageList != null && !msdAvailableStorageList.isEmpty()) {
return msdAvailableStorageList;
}
return new ArrayList<>();
}
for (Storage storage : dataCache.getAllStorage().values()) {
if (!msdCidList.contains(storage.getCid())){
continue;
private List<String> getAvailableStorage(String stacker, List<Storage> storageList, List<StackerCache> stackerList) {
List<String> availableStorageList = new ArrayList<>();
List<StackerAvailableStorage> stackerAvailableStorageList = new ArrayList<>();
//按数量最多的进行排序
stackerList = stackerList.stream().sorted(Comparator.comparing(StackerCache::getCount).reversed()).collect(Collectors.toList());
for (StackerCache stackerCache : stackerList) {
String sizeStr = stackerCache.getW() + "x" + stackerCache.getH();
log.info("料串[{}],包含的尺寸信息有[{}]",stacker,sizeStr);
//根据尺寸找到空库位最多的料仓进行入库
for (Storage storage : storageList) {
Map<String, UsageItem> usageMap = storage.getUsageMap();
UsageItem usageItem = usageMap.get(sizeStr);
if (usageItem != null) {
int emptyCount = usageItem.getTotalCount() - usageItem.getUsedCount();
log.info("获取到料仓[{}],对应的空库位数量[{}],尺寸为[{}]",storage.getName(),emptyCount,sizeStr);
if (emptyCount > 0) {
StackerAvailableStorage stackerAvailableStorage = new StackerAvailableStorage();
stackerAvailableStorage.setStorageName(storage.getCid());
stackerAvailableStorage.setCount(stackerCache.getCount());
stackerAvailableStorage.setEmptyCount(emptyCount);
stackerAvailableStorage.setW(stackerCache.getW());
stackerAvailableStorage.setH(stackerCache.getH());
stackerAvailableStorageList.add(stackerAvailableStorage);
}
} else {
//判断是否为同尺寸兼容
for (UsageItem item : usageMap.values()) {
if (storage.canPutInPos(stackerCache.getW(),stackerCache.getH(),item.getW(),item.getH())){
int emptyCount = item.getTotalCount() - item.getUsedCount();
log.info("同尺寸没有可放入的,找到兼容料仓,料仓为[{}],尺寸为[{}],料串为[{}],找到对应料仓尺寸为[{}]",storage.getName(),sizeStr,stacker,item.getSizeStr());
if (emptyCount > 0) {
StackerAvailableStorage stackerAvailableStorage = new StackerAvailableStorage();
stackerAvailableStorage.setStorageName(storage.getCid());
stackerAvailableStorage.setCount(stackerCache.getCount());
stackerAvailableStorage.setEmptyCount(emptyCount);
stackerAvailableStorage.setW(stackerCache.getW());
stackerAvailableStorage.setH(stackerCache.getH());
stackerAvailableStorageList.add(stackerAvailableStorage);
}
}
for (StackerCache stackerCache : noMsdList) {
if (storage.canPutIn(stackerCache.getW(),stackerCache.getH())){
availableStorageList.add(storage.getCid());
}
}
}
if (availableStorageList != null && !availableStorageList.isEmpty()){
availableStorageList = availableStorageList.stream().distinct().collect(Collectors.toList());
return availableStorageList;
}
return new ArrayList<>();
//按空库位进行排序
if (stackerAvailableStorageList != null && !stackerAvailableStorageList.isEmpty()){
stackerAvailableStorageList = stackerAvailableStorageList.stream().sorted(Comparator.comparing(StackerAvailableStorage :: getCount).reversed()
.thenComparing(Comparator.comparing(StackerAvailableStorage::getEmptyCount).reversed())).collect(Collectors.toList());
log.info(JSON.toJSONString(stackerAvailableStorageList));
for (StackerAvailableStorage stackerAvailableStorage : stackerAvailableStorageList) {
availableStorageList.add(stackerAvailableStorage.getStorageName());
}
availableStorageList = availableStorageList.stream().distinct().collect(Collectors.toList());
}
return availableStorageList;
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!