Commit ef46faa2 LN

锡膏料仓 data增加useMix ,warmPosUseCount , coldingPosUseCount

1 个父辈 91669353
...@@ -6,9 +6,6 @@ import com.google.common.collect.Lists; ...@@ -6,9 +6,6 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
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.Constants;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.common.utils.YmlUpdateUtil;
import com.neotel.smfcore.core.barcode.service.manager.IComponentManager; import com.neotel.smfcore.core.barcode.service.manager.IComponentManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.service.po.Component; import com.neotel.smfcore.core.barcode.service.po.Component;
...@@ -16,7 +13,6 @@ import com.neotel.smfcore.core.barcode.utils.CodeResolve; ...@@ -16,7 +13,6 @@ import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.bean.StatusBean; import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.inList.util.InListCache; import com.neotel.smfcore.core.inList.util.InListCache;
import com.neotel.smfcore.core.language.service.bean.LanguageInfo; import com.neotel.smfcore.core.language.service.bean.LanguageInfo;
import com.neotel.smfcore.core.language.service.po.LanguageMsg;
import com.neotel.smfcore.core.language.util.MessageUtils; import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.storage.bean.InventoryItem; import com.neotel.smfcore.core.storage.bean.InventoryItem;
import com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE; import com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE;
...@@ -41,8 +37,6 @@ import org.springframework.stereotype.Repository; ...@@ -41,8 +37,6 @@ import org.springframework.stereotype.Repository;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/** /**
* 缓存 * 缓存
...@@ -92,7 +86,15 @@ public class DataCache { ...@@ -92,7 +86,15 @@ public class DataCache {
/** /**
* 库位占用Map, key为cid,value为已使用的库位列表 * 库位占用Map, key为cid,value为已使用的库位列表
*/ */
private static Map<String,List<String>> usedPosNameMap = new ConcurrentHashMap<>(); private static Map<String, List<String>> usedPosNameMap = new ConcurrentHashMap<>();
/**
* 锡膏料仓冷藏区和回温区使用库位数, key为cid, key为 WarmPos 时value表示回温区使用数量,key为 ColdingPos 时value为冷藏区使用数量
*/
private static Map<String, Map<String, Integer>> spUsedPosCountMap = new ConcurrentHashMap<>();
public static String warmPosUseCount = "warmPosUseCount";
public static String coldingPosUseCount = "coldingPosUseCount";
/** /**
* 禁用库位名称列表 * 禁用库位名称列表
...@@ -121,14 +123,15 @@ public class DataCache { ...@@ -121,14 +123,15 @@ public class DataCache {
/** /**
* 获取缓存信息 * 获取缓存信息
*
* @param cacheKey * @param cacheKey
* @param <T> * @param <T>
* @return * @return
*/ */
public <T> T getCache(String cacheKey){ public <T> T getCache(String cacheKey) {
Object value = cacheMap.get(cacheKey); Object value = cacheMap.get(cacheKey);
if(value != null){ if (value != null) {
return (T)value; return (T) value;
} }
return null; return null;
} }
...@@ -141,7 +144,7 @@ public class DataCache { ...@@ -141,7 +144,7 @@ public class DataCache {
return orderSetting; return orderSetting;
} }
public List<LanguageInfo> getLanguageList(){ public List<LanguageInfo> getLanguageList() {
List<LanguageInfo> lanList = getCache(Constants.CACHE_languageType); List<LanguageInfo> lanList = getCache(Constants.CACHE_languageType);
if (lanList == null || lanList.size() <= 0) { if (lanList == null || lanList.size() <= 0) {
lanList = MessageUtils.getDefaultLanList(); lanList = MessageUtils.getDefaultLanList();
...@@ -153,27 +156,27 @@ public class DataCache { ...@@ -153,27 +156,27 @@ public class DataCache {
/** /**
* 更新缓存信息 * 更新缓存信息
*/ */
public void updateCache(String cacheKey, Object value){ public void updateCache(String cacheKey, Object value) {
cacheItemDao.updateCacheItem(cacheKey,value); cacheItemDao.updateCacheItem(cacheKey, value);
cacheMap.put(cacheKey,value); cacheMap.put(cacheKey, value);
if(cacheKey.equals(Constants.CACHE_CodeRule)){ if (cacheKey.equals(Constants.CACHE_CodeRule)) {
List<String> ruleList=(List<String>)value; List<String> ruleList = (List<String>) value;
codeResolve.updateBarcodeRuleList(ruleList); codeResolve.updateBarcodeRuleList(ruleList);
} }
log.info("updateCache ["+cacheKey+"]=["+value+"]"); log.info("updateCache [" + cacheKey + "]=[" + value + "]");
} }
/** /**
* 获取配置信息同时插入数据库,如果配置值为空,使用数据库配置的值 * 获取配置信息同时插入数据库,如果配置值为空,使用数据库配置的值
*/ */
public String getConfigCache(String configKey,String configValue) { public String getConfigCache(String configKey, String configValue) {
if(Strings.isNullOrEmpty(configValue)){ if (Strings.isNullOrEmpty(configValue)) {
//没有配置,使用数据库的配置值 //没有配置,使用数据库的配置值
return getCache(configKey); return getCache(configKey);
}else{ } else {
//有配置值,将配置值写入数据库 //有配置值,将配置值写入数据库
updateCache(configKey,configValue); updateCache(configKey, configValue);
return configValue; return configValue;
} }
} }
...@@ -181,9 +184,9 @@ public class DataCache { ...@@ -181,9 +184,9 @@ public class DataCache {
/** /**
* 是否需要推送温湿度报警值 * 是否需要推送温湿度报警值
*/ */
public boolean needUpdateHumidiy(String cid){ public boolean needUpdateHumidiy(String cid) {
Boolean needUpdateHumidiy = needUpdateHumidityMap.get(cid); Boolean needUpdateHumidiy = needUpdateHumidityMap.get(cid);
if(needUpdateHumidiy == null || needUpdateHumidiy){ if (needUpdateHumidiy == null || needUpdateHumidiy) {
needUpdateHumidityMap.put(cid, false); needUpdateHumidityMap.put(cid, false);
return true; return true;
} }
...@@ -191,14 +194,14 @@ public class DataCache { ...@@ -191,14 +194,14 @@ public class DataCache {
} }
public Settings getSettings(){ public Settings getSettings() {
if(settings == null){ if (settings == null) {
List<Settings> allSettings = settingsDao.findAll(); List<Settings> allSettings = settingsDao.findAll();
if(allSettings == null || allSettings.isEmpty()){ if (allSettings == null || allSettings.isEmpty()) {
settings = new Settings(); settings = new Settings();
// settings.setOutType(CHECKOUT_TYPE.EFFICIENCY.name()); // settings.setOutType(CHECKOUT_TYPE.EFFICIENCY.name());
settings = settingsDao.save(settings); settings = settingsDao.save(settings);
}else{ } else {
settings = allSettings.get(0); settings = allSettings.get(0);
} }
...@@ -212,18 +215,18 @@ public class DataCache { ...@@ -212,18 +215,18 @@ public class DataCache {
/** /**
* 出库方式 * 出库方式
*/ */
public CHECKOUT_TYPE getCheckOutType(){ public CHECKOUT_TYPE getCheckOutType() {
// String outType = getSettings().getOutType(); // String outType = getSettings().getOutType();
String outType = getCache(Constants.CACHE_CheckOutType); String outType = getCache(Constants.CACHE_CheckOutType);
if(ObjectUtil.isEmpty(outType)){ if (ObjectUtil.isEmpty(outType)) {
outType=CHECKOUT_TYPE.EFFICIENCY.name(); outType = CHECKOUT_TYPE.EFFICIENCY.name();
updateCache(Constants.CACHE_CheckOutType,outType); updateCache(Constants.CACHE_CheckOutType, outType);
log.info("未配置 出库策略配置类型,默认为"+outType); log.info("未配置 出库策略配置类型,默认为" + outType);
} }
return CHECKOUT_TYPE.valueOf(outType); return CHECKOUT_TYPE.valueOf(outType);
} }
public Settings updateSettings(Settings newSetting){ public Settings updateSettings(Settings newSetting) {
settings = settingsDao.save(newSetting); settings = settingsDao.save(newSetting);
List<String> ruleItems = settings.getCodeRuleList(); List<String> ruleItems = settings.getCodeRuleList();
codeResolve.updateBarcodeRuleList(ruleItems); codeResolve.updateBarcodeRuleList(ruleItems);
...@@ -272,8 +275,7 @@ public class DataCache { ...@@ -272,8 +275,7 @@ public class DataCache {
/** /**
* 库存 map, key 为 cid,value 为料盘存量 map(key为 PartNumber,value 为 库存数量及盘数的Bean) * 库存 map, key 为 cid,value 为料盘存量 map(key为 PartNumber,value 为 库存数量及盘数的Bean)
*/ */
private static Map<String,Map<String,InventoryItem>> inventoryMap = new ConcurrentHashMap<>(); private static Map<String, Map<String, InventoryItem>> inventoryMap = new ConcurrentHashMap<>();
/** /**
...@@ -296,14 +298,14 @@ public class DataCache { ...@@ -296,14 +298,14 @@ public class DataCache {
// return storageIds; // return storageIds;
// } // }
// //
public Map<String, Storage> getAllStorage(){ public Map<String, Storage> getAllStorage() {
if(allStorage.isEmpty()){ if (allStorage.isEmpty()) {
synchronized (allStorage){ synchronized (allStorage) {
if(allStorage.isEmpty()){ if (allStorage.isEmpty()) {
List<Storage> all = storageManager.findAll(); List<Storage> all = storageManager.findAll();
if(all != null){ if (all != null) {
Map<String, Storage> map = new ConcurrentHashMap<>(); Map<String, Storage> map = new ConcurrentHashMap<>();
for(Storage storage : all){ for (Storage storage : all) {
List<PlateSizeBean> plateSizeBeanList = storagePosManager.getStoragePosUsage(storage.getId()); List<PlateSizeBean> plateSizeBeanList = storagePosManager.getStoragePosUsage(storage.getId());
storage.initUsage(plateSizeBeanList); storage.initUsage(plateSizeBeanList);
...@@ -313,7 +315,7 @@ public class DataCache { ...@@ -313,7 +315,7 @@ public class DataCache {
} }
allStorage = map; allStorage = map;
log.info("加载所有料仓["+all.size()+"]信息到缓存"); log.info("加载所有料仓[" + all.size() + "]信息到缓存");
} }
} }
} }
...@@ -336,8 +338,8 @@ public class DataCache { ...@@ -336,8 +338,8 @@ public class DataCache {
/** /**
* 根据 cid 获取料仓信息 * 根据 cid 获取料仓信息
*/ */
public Storage getStorage(String cid){ public Storage getStorage(String cid) {
if(Strings.isNullOrEmpty(cid)){ if (Strings.isNullOrEmpty(cid)) {
return null; return null;
} }
return getAllStorage().get(cid); return getAllStorage().get(cid);
...@@ -346,9 +348,9 @@ public class DataCache { ...@@ -346,9 +348,9 @@ public class DataCache {
/** /**
* 根据 Id 获取料仓信息 * 根据 Id 获取料仓信息
*/ */
public Storage getStorageById(String storageId){ public Storage getStorageById(String storageId) {
for(Storage storage : getAllStorage().values()){ for (Storage storage : getAllStorage().values()) {
if(storage.getId().equals(storageId)){ if (storage.getId().equals(storageId)) {
return storage; return storage;
} }
} }
...@@ -357,15 +359,15 @@ public class DataCache { ...@@ -357,15 +359,15 @@ public class DataCache {
/** /**
* 根据 料仓名称 Name 获取料仓信息 * 根据 料仓名称 Name 获取料仓信息
*/ */
public Storage getStorageByName(String storageName){ public Storage getStorageByName(String storageName) {
for(Storage storage : getAllStorage().values()){ for (Storage storage : getAllStorage().values()) {
if(storage.getName().equals(storageName)){ if (storage.getName().equals(storageName)) {
return storage; return storage;
} }
} }
return null; return null;
} }
public Storage reloadStorage(Storage storage,String oldCid) throws ValidateException { public Storage reloadStorage(Storage storage, String oldCid) throws ValidateException {
if (!oldCid.equals("") && allStorage.containsKey(oldCid)) { if (!oldCid.equals("") && allStorage.containsKey(oldCid)) {
allStorage.remove(oldCid); allStorage.remove(oldCid);
...@@ -390,7 +392,7 @@ public class DataCache { ...@@ -390,7 +392,7 @@ public class DataCache {
/** /**
* 获取禁用库位缓存 * 获取禁用库位缓存
*/ */
public Set<String> getDisabledPosNameSet(){ public Set<String> getDisabledPosNameSet() {
initDisabledPosNameSet(); initDisabledPosNameSet();
return disabledPosNameSet; return disabledPosNameSet;
} }
...@@ -398,8 +400,8 @@ public class DataCache { ...@@ -398,8 +400,8 @@ public class DataCache {
/** /**
* 初始化禁用库位缓存 * 初始化禁用库位缓存
*/ */
private synchronized void initDisabledPosNameSet(){ private synchronized void initDisabledPosNameSet() {
if(disabledPosNameSet == null){ if (disabledPosNameSet == null) {
disabledPosNameSet = new HashSet<>(); disabledPosNameSet = new HashSet<>();
List<StoragePos> disabledPosList = storagePosManager.findDisabled(); List<StoragePos> disabledPosList = storagePosManager.findDisabled();
for (StoragePos disabledPos : disabledPosList) { for (StoragePos disabledPos : disabledPosList) {
...@@ -412,11 +414,11 @@ public class DataCache { ...@@ -412,11 +414,11 @@ public class DataCache {
/** /**
* 更新禁用库位缓存 * 更新禁用库位缓存
*/ */
public void updateDisablePos(StoragePos pos){ public void updateDisablePos(StoragePos pos) {
initDisabledPosNameSet(); initDisabledPosNameSet();
if(pos.isEnabled()){ if (pos.isEnabled()) {
disabledPosNameSet.remove(pos.getPosName()); disabledPosNameSet.remove(pos.getPosName());
}else{ } else {
disabledPosNameSet.add(pos.getPosName()); disabledPosNameSet.add(pos.getPosName());
} }
} }
...@@ -424,7 +426,7 @@ public class DataCache { ...@@ -424,7 +426,7 @@ public class DataCache {
/** /**
* 出库时清除使用库位列表 * 出库时清除使用库位列表
*/ */
private void removeUsedPosNameList(String cid, String posName){ private void removeUsedPosNameList(String cid, String posName) {
List<String> usedPosNameList = getUsedPosNameList(cid); List<String> usedPosNameList = getUsedPosNameList(cid);
usedPosNameList.remove(posName); usedPosNameList.remove(posName);
usedPosNameMap.put(cid, usedPosNameList); usedPosNameMap.put(cid, usedPosNameList);
...@@ -433,7 +435,7 @@ public class DataCache { ...@@ -433,7 +435,7 @@ public class DataCache {
/** /**
* 入库时增加使用库位列表 * 入库时增加使用库位列表
*/ */
private void addUsedPosNameList(String cid, String posName){ private void addUsedPosNameList(String cid, String posName) {
List<String> usedPosNameList = getUsedPosNameList(cid); List<String> usedPosNameList = getUsedPosNameList(cid);
usedPosNameList.add(posName); usedPosNameList.add(posName);
usedPosNameMap.put(cid, usedPosNameList); usedPosNameMap.put(cid, usedPosNameList);
...@@ -441,18 +443,18 @@ public class DataCache { ...@@ -441,18 +443,18 @@ public class DataCache {
/** /**
* 获取设备所有占用的库位名称列表 * 获取设备所有占用的库位名称列表
*/ */
public List<String> getUsedPosNameList(String cid){ public List<String> getUsedPosNameList(String cid) {
List<String> posNameList = usedPosNameMap.get(cid); List<String> posNameList = usedPosNameMap.get(cid);
if(posNameList == null){ if (posNameList == null) {
Storage storage = getStorage(cid); Storage storage = getStorage(cid);
posNameList = new ArrayList<>(); posNameList = new ArrayList<>();
if(storage != null){ if (storage != null) {
log.info("加载["+cid+"]所有已使用库位到缓存"); log.info("加载[" + cid + "]所有已使用库位到缓存");
List<StoragePos> allPos = storagePosManager.findUsedPosNameByStorageId(storage.getId()); List<StoragePos> allPos = storagePosManager.findUsedPosNameByStorageId(storage.getId());
for (StoragePos pos : allPos) { for (StoragePos pos : allPos) {
posNameList.add(pos.getPosName()); posNameList.add(pos.getPosName());
} }
usedPosNameMap.put(cid,posNameList); usedPosNameMap.put(cid, posNameList);
} }
} }
return posNameList; return posNameList;
...@@ -463,38 +465,38 @@ public class DataCache { ...@@ -463,38 +465,38 @@ public class DataCache {
* 锁定库存 * 锁定库存
* @param cid * @param cid
* @param partNumber 物料编号 * @param partNumber 物料编号
* @return 锁定结果,true 表示有足够的库存,锁定成功;false表示库存不足,锁定失败 * @return 锁定结果, true 表示有足够的库存,锁定成功;false表示库存不足,锁定失败
*/ */
public boolean lockOneReel(String cid, String partNumber){ public boolean lockOneReel(String cid, String partNumber) {
boolean result = false; boolean result = false;
InventoryItem inventoryItem = getStorageInventoryByPartNumber(cid, partNumber); InventoryItem inventoryItem = getStorageInventoryByPartNumber(cid, partNumber);
if(inventoryItem != null) { if (inventoryItem != null) {
int lockReel = inventoryItem.getLockReel(); int lockReel = inventoryItem.getLockReel();
//理论上这里是同一个对象,不需要再显式的放入map 中 //理论上这里是同一个对象,不需要再显式的放入map 中
result = inventoryItem.lockOne(); result = inventoryItem.lockOne();
log.info("锁定料仓["+cid+"]物料["+partNumber+"],锁定数量["+lockReel+"]=>["+inventoryItem.getLockReel()+"],当前库存:"+inventoryItem.getStockReel()); log.info("锁定料仓[" + cid + "]物料[" + partNumber + "],锁定数量[" + lockReel + "]=>[" + inventoryItem.getLockReel() + "],当前库存:" + inventoryItem.getStockReel());
updateStorageInventory(cid,inventoryItem); updateStorageInventory(cid, inventoryItem);
} }
return result; return result;
} }
/** /**
* 解除锁定库存(出库任务完成或取消时调用) * 解除锁定库存(出库任务完成或取消时调用)
*/ */
public void unLockOneReel(String cid, String partNumber){ public void unLockOneReel(String cid, String partNumber) {
InventoryItem partNumberInventory = getStorageInventoryByPartNumber(cid, partNumber); InventoryItem partNumberInventory = getStorageInventoryByPartNumber(cid, partNumber);
if(partNumberInventory != null) { if (partNumberInventory != null) {
int lockReel = partNumberInventory.getLockReel(); int lockReel = partNumberInventory.getLockReel();
//理论上这里是同一个对象,不需要再显式的放入map 中 //理论上这里是同一个对象,不需要再显式的放入map 中
partNumberInventory.unLock(1); partNumberInventory.unLock(1);
log.info("解除锁定料仓["+cid+"]物料["+partNumber+"],锁定数量["+lockReel+"]=>["+partNumberInventory.getLockReel()+"],当前库存:"+partNumberInventory.getStockReel()); log.info("解除锁定料仓[" + cid + "]物料[" + partNumber + "],锁定数量[" + lockReel + "]=>[" + partNumberInventory.getLockReel() + "],当前库存:" + partNumberInventory.getStockReel());
updateStorageInventory(cid,partNumberInventory); updateStorageInventory(cid, partNumberInventory);
} }
} }
/** /**
* 获取库存信息,key 为 PN * 获取库存信息,key 为 PN
*/ */
public Map<String,InventoryItem> getAllInventory(List<String> storageIds,String blurry) { public Map<String, InventoryItem> getAllInventory(List<String> storageIds, String blurry) {
Map<String, Storage> allStorages = getAllStorage(); Map<String, Storage> allStorages = getAllStorage();
List<Storage> storages = Lists.newArrayList(); List<Storage> storages = Lists.newArrayList();
for (Storage storage : allStorages.values()) { for (Storage storage : allStorages.values()) {
...@@ -506,7 +508,7 @@ public class DataCache { ...@@ -506,7 +508,7 @@ public class DataCache {
Map<String, InventoryItem> resultMap = new HashMap<>(); Map<String, InventoryItem> resultMap = new HashMap<>();
for (InventoryItem item : map.values()) { for (InventoryItem item : map.values()) {
if (ObjectUtil.isNotEmpty(blurry)) { if (ObjectUtil.isNotEmpty(blurry)) {
if(item.getPartNumber().contains(blurry)){ if (item.getPartNumber().contains(blurry)) {
resultMap.put(item.getPartNumber(), item); resultMap.put(item.getPartNumber(), item);
} }
} else { } else {
...@@ -519,19 +521,19 @@ public class DataCache { ...@@ -519,19 +521,19 @@ public class DataCache {
/** /**
* 获取某些料仓的库存信息 * 获取某些料仓的库存信息
*/ */
private Map<String,InventoryItem> getInventory(Collection<Storage> storageList){ private Map<String, InventoryItem> getInventory(Collection<Storage> storageList) {
Map<String,InventoryItem> resultMap = Maps.newHashMap(); Map<String, InventoryItem> resultMap = Maps.newHashMap();
for (Storage storage : storageList) { for (Storage storage : storageList) {
Map<String, InventoryItem> storageInventory = getStorageInventory(storage.getCid()); Map<String, InventoryItem> storageInventory = getStorageInventory(storage.getCid());
for(InventoryItem storageInventoryItem : storageInventory.values()){ for (InventoryItem storageInventoryItem : storageInventory.values()) {
storageInventoryItem.setStorageName(storage.getName()); storageInventoryItem.setStorageName(storage.getName());
String partNumber = storageInventoryItem.getPartNumber(); String partNumber = storageInventoryItem.getPartNumber();
InventoryItem pnInventoryItem = resultMap.get(storageInventoryItem.getPartNumber()); InventoryItem pnInventoryItem = resultMap.get(storageInventoryItem.getPartNumber());
if(pnInventoryItem == null){ if (pnInventoryItem == null) {
pnInventoryItem = new InventoryItem(); pnInventoryItem = new InventoryItem();
pnInventoryItem.setStorageName(storageInventoryItem.getStorageName()); pnInventoryItem.setStorageName(storageInventoryItem.getStorageName());
pnInventoryItem.setStorageId(storage.getId()); pnInventoryItem.setStorageId(storage.getId());
}else{ } else {
pnInventoryItem.setStorageName(null); pnInventoryItem.setStorageName(null);
pnInventoryItem.setStorageId(null); pnInventoryItem.setStorageId(null);
} }
...@@ -541,7 +543,7 @@ public class DataCache { ...@@ -541,7 +543,7 @@ public class DataCache {
pnInventoryItem.setStockReel(pnInventoryItem.getStockReel() + storageInventoryItem.getStockReel()); pnInventoryItem.setStockReel(pnInventoryItem.getStockReel() + storageInventoryItem.getStockReel());
pnInventoryItem.setLockReel(pnInventoryItem.getLockReel() + storageInventoryItem.getLockReel()); pnInventoryItem.setLockReel(pnInventoryItem.getLockReel() + storageInventoryItem.getLockReel());
resultMap.put(partNumber,pnInventoryItem); resultMap.put(partNumber, pnInventoryItem);
} }
} }
return resultMap; return resultMap;
...@@ -550,26 +552,26 @@ public class DataCache { ...@@ -550,26 +552,26 @@ public class DataCache {
/** /**
* 获取料仓的库存信息 * 获取料仓的库存信息
*/ */
public Map<String, InventoryItem> getStorageInventory(String cid){ public Map<String, InventoryItem> getStorageInventory(String cid) {
Map<String, InventoryItem> storageInventory = inventoryMap.get(cid); Map<String, InventoryItem> storageInventory = inventoryMap.get(cid);
if(storageInventory == null){ if (storageInventory == null) {
storageInventory = initInventory(cid); storageInventory = initInventory(cid);
} }
return storageInventory; return storageInventory;
} }
public InventoryItem getStorageInventoryByPartNumber(String cid, String partNumber){ public InventoryItem getStorageInventoryByPartNumber(String cid, String partNumber) {
Map<String, InventoryItem> storageInventory = getStorageInventory(cid); Map<String, InventoryItem> storageInventory = getStorageInventory(cid);
InventoryItem partNumberInventoryItem = storageInventory.get(partNumber); InventoryItem partNumberInventoryItem = storageInventory.get(partNumber);
if(partNumberInventoryItem == null){ if (partNumberInventoryItem == null) {
partNumberInventoryItem = new InventoryItem(); partNumberInventoryItem = new InventoryItem();
partNumberInventoryItem.setPartNumber(partNumber); partNumberInventoryItem.setPartNumber(partNumber);
} }
return partNumberInventoryItem; return partNumberInventoryItem;
} }
private synchronized Map<String, InventoryItem> initInventory(String cid){ private synchronized Map<String, InventoryItem> initInventory(String cid) {
Storage storage = getStorage(cid); Storage storage = getStorage(cid);
Map<String, InventoryItem> storageInventoryMap = storagePosManager.getInventory(storage.getId()); Map<String, InventoryItem> storageInventoryMap = storagePosManager.getInventory(storage.getId());
//未完成的 Task 也需要锁定 //未完成的 Task 也需要锁定
...@@ -587,7 +589,7 @@ public class DataCache { ...@@ -587,7 +589,7 @@ public class DataCache {
// } // }
// } // }
log.info("初始化料仓["+cid+"]的库存信息["+storageInventoryMap.size()+"]条"); log.info("初始化料仓[" + cid + "]的库存信息[" + storageInventoryMap.size() + "]条");
inventoryMap.put(cid, storageInventoryMap); inventoryMap.put(cid, storageInventoryMap);
return storageInventoryMap; return storageInventoryMap;
} }
...@@ -599,10 +601,10 @@ public class DataCache { ...@@ -599,10 +601,10 @@ public class DataCache {
* @param amount * @param amount
* @return * @return
*/ */
public int updateInventoryAmount(String cid,String partNumber,int amount){ public int updateInventoryAmount(String cid, String partNumber, int amount) {
if(amount != 0){ if (amount != 0) {
InventoryItem inventoryItem = getStorageInventoryByPartNumber(cid,partNumber); InventoryItem inventoryItem = getStorageInventoryByPartNumber(cid, partNumber);
if(inventoryItem == null){ if (inventoryItem == null) {
inventoryItem = new InventoryItem(); inventoryItem = new InventoryItem();
inventoryItem.setPartNumber(partNumber); inventoryItem.setPartNumber(partNumber);
} }
...@@ -616,46 +618,48 @@ public class DataCache { ...@@ -616,46 +618,48 @@ public class DataCache {
/** /**
* 修改库存,出库为负,入库为正 * 修改库存,出库为负,入库为正
*/ */
public int updateInventory(StoragePos pos, Barcode barcode){ public int updateInventory(StoragePos pos, Barcode barcode) {
Storage storage = getStorageById(pos.getStorageId()); Storage storage = getStorageById(pos.getStorageId());
String cid = storage.getCid(); String cid = storage.getCid();
String partNumber = barcode.getPartNumber(); String partNumber = barcode.getPartNumber();
int amount = 0; int amount = 0;
String sizeStr = pos.getSizeStr(); String sizeStr = pos.getSizeStr();
if(pos.getBarcode() == null){ if (pos.getBarcode() == null) {
//出库 //出库
amount = - barcode.getAmount(); amount = -barcode.getAmount();
storage.emptyOnePos(pos); storage.emptyOnePos(pos);
updateSpUsePosCount(storage, pos, -1);
removeUsedPosNameList(cid, pos.getPosName()); removeUsedPosNameList(cid, pos.getPosName());
}else{ } else {
//入库 //入库
amount = barcode.getAmount(); amount = barcode.getAmount();
storage.useOnePos(pos); storage.useOnePos(pos);
updateSpUsePosCount(storage, pos, 1);
addUsedPosNameList(cid, pos.getPosName()); addUsedPosNameList(cid, pos.getPosName());
//入库单处理 //入库单处理
if(ObjectUtil.isNotEmpty(storage.getInListName())){ if (ObjectUtil.isNotEmpty(storage.getInListName())) {
inListCache.UpdateInList(storage.getInListName(),pos,barcode); inListCache.UpdateInList(storage.getInListName(), pos, barcode);
} }
} }
allStorage.put(cid, storage); allStorage.put(cid, storage);
return updateInventoryAmount(cid,partNumber,amount); return updateInventoryAmount(cid, partNumber, amount);
} }
private void updateStorageInventory(String cid, InventoryItem inventoryItem){ private void updateStorageInventory(String cid, InventoryItem inventoryItem) {
Map<String, InventoryItem> storageInventory = inventoryMap.get(cid); Map<String, InventoryItem> storageInventory = inventoryMap.get(cid);
storageInventory.put(inventoryItem.getPartNumber(), inventoryItem); storageInventory.put(inventoryItem.getPartNumber(), inventoryItem);
inventoryMap.put(cid, storageInventory); inventoryMap.put(cid, storageInventory);
} }
public List<String> getCidsByGroupId(String groupId,boolean nullReturnAll){ public List<String> getCidsByGroupId(String groupId, boolean nullReturnAll) {
if(groupId!=null&&groupId.equals("-1")){ if (groupId != null && groupId.equals("-1")) {
groupId=""; groupId = "";
} }
List<String> cidList = Lists.newArrayList(); List<String> cidList = Lists.newArrayList();
for (Storage storage : getAllStorage().values()) { for (Storage storage : getAllStorage().values()) {
if (groupId!=null) { if (groupId != null) {
// String storageGroupId = storage.getGroupId(); // String storageGroupId = storage.getGroupId();
// if(ObjectUtils.isEmpty(storageGroupId)){ // if(ObjectUtils.isEmpty(storageGroupId)){
// storageGroupId=""; // storageGroupId="";
...@@ -663,48 +667,48 @@ public class DataCache { ...@@ -663,48 +667,48 @@ public class DataCache {
// if ( storageGroupId.equals(groupId)) { // if ( storageGroupId.equals(groupId)) {
// cidList.add(storage.getCid()); // cidList.add(storage.getCid());
// } // }
if(storage.IsRightGroup(groupId)){ if (storage.IsRightGroup(groupId)) {
cidList.add(storage.getCid()); cidList.add(storage.getCid());
} }
} else if(nullReturnAll){ } else if (nullReturnAll) {
cidList.add(storage.getCid()); cidList.add(storage.getCid());
} }
} }
return cidList; return cidList;
} }
public List<String> getStorageIdsByGroupId(String groupId,boolean nullReturnAll){ public List<String> getStorageIdsByGroupId(String groupId, boolean nullReturnAll) {
if(groupId!=null&&groupId.equals("-1")){ if (groupId != null && groupId.equals("-1")) {
groupId=""; groupId = "";
} }
List<String> storageIds = Lists.newArrayList(); List<String> storageIds = Lists.newArrayList();
for (Storage storage : getAllStorage().values()) { for (Storage storage : getAllStorage().values()) {
if (groupId!=null) { if (groupId != null) {
if(storage.IsRightGroup(groupId)){ if (storage.IsRightGroup(groupId)) {
storageIds.add(storage.getId()); storageIds.add(storage.getId());
} }
} else if(nullReturnAll){ } else if (nullReturnAll) {
storageIds.add(storage.getId()); storageIds.add(storage.getId());
} }
} }
return storageIds; return storageIds;
} }
public void clearGroup(String groupId){ public void clearGroup(String groupId) {
if(ObjectUtil.isEmpty(groupId)||groupId.equals("-1")){ if (ObjectUtil.isEmpty(groupId) || groupId.equals("-1")) {
return; return;
} }
for (String key : for (String key :
allStorage.keySet()) { allStorage.keySet()) {
if(allStorage.get(key).getGroupId().equals(groupId)){ if (allStorage.get(key).getGroupId().equals(groupId)) {
allStorage.get(key).setGroupId(""); allStorage.get(key).setGroupId("");
} }
} }
} }
public List<String> getAvailableStorageIds(){ public List<String> getAvailableStorageIds() {
List<String> availableStorageIds = new ArrayList<>(); List<String> availableStorageIds = new ArrayList<>();
for (Storage storage : getAllStorage().values()) { for (Storage storage : getAllStorage().values()) {
StatusBean bean = DevicesStatusUtil.getStatusBean(storage.getCid()); StatusBean bean = DevicesStatusUtil.getStatusBean(storage.getCid());
...@@ -715,10 +719,10 @@ public class DataCache { ...@@ -715,10 +719,10 @@ public class DataCache {
} }
return availableStorageIds; return availableStorageIds;
} }
public List<String> getAvailableStorageIds(DeviceType deviceType){ public List<String> getAvailableStorageIds(DeviceType deviceType) {
List<String> availableStorageIds = new ArrayList<>(); List<String> availableStorageIds = new ArrayList<>();
for (Storage storage : getAllStorage().values()) { for (Storage storage : getAllStorage().values()) {
if(storage.getType().equals(deviceType.name())) { if (storage.getType().equals(deviceType.name())) {
StatusBean bean = DevicesStatusUtil.getStatusBean(storage.getCid()); StatusBean bean = DevicesStatusUtil.getStatusBean(storage.getCid());
if (bean == null || bean.timeOut() || !bean.isAvailable()) { if (bean == null || bean.timeOut() || !bean.isAvailable()) {
continue; continue;
...@@ -728,7 +732,7 @@ public class DataCache { ...@@ -728,7 +732,7 @@ public class DataCache {
} }
return availableStorageIds; return availableStorageIds;
} }
public Storage AutoCreateStorage(String cid,String deviceType) { public Storage AutoCreateStorage(String cid, String deviceType) {
//判断cid存在 //判断cid存在
Storage storage = null; Storage storage = null;
storage = getStorage(cid); storage = getStorage(cid);
...@@ -751,27 +755,77 @@ public class DataCache { ...@@ -751,27 +755,77 @@ public class DataCache {
storage = storageManager.save(storage); storage = storageManager.save(storage);
reloadStorage(storage, ""); reloadStorage(storage, "");
log.info("AutoCreateStorage :自动创建料仓完成:cid["+storage.getCid()+"]name["+storage.getName()+"]type["+storage.getType()+"]"); log.info("AutoCreateStorage :自动创建料仓完成:cid[" + storage.getCid() + "]name[" + storage.getName() + "]type[" + storage.getType() + "]");
return storage; return storage;
} }
public int getPNsluggishDay(String pn){ public int getPNsluggishDay(String pn) {
Component component = componentManager.findOneByPN(pn); Component component = componentManager.findOneByPN(pn);
if(component!=null){ if (component != null) {
return component.getSluggishDay(); return component.getSluggishDay();
} }
return 0; return 0;
} }
public Storage getOneStorageByType(DeviceType type){ public Storage getOneStorageByType(DeviceType type) {
//查找mimo的cid //查找mimo的cid
String cid = ""; String cid = "";
DeviceType[] types=new DeviceType[]{type}; DeviceType[] types = new DeviceType[]{type};
for (Storage storage : for (Storage storage :
allStorage.values()) { allStorage.values()) {
if (storage.isType( types)) { if (storage.isType(types)) {
return storage; return storage;
} }
} }
return null; return null;
} }
public void updateSpUsePosCount(Storage storage, StoragePos pos, int addCount) {
try {
if (!storage.isSolderPaste()) {
return;
}
String cid = storage.getCid();
String type = pos.isWarmPos() ? warmPosUseCount : coldingPosUseCount;
if (!spUsedPosCountMap.containsKey(cid)) {
LoadStorageUsePosCount(cid);
}
Map<String, Integer> map = spUsedPosCountMap.get(cid);
Integer value = map.get(type) + addCount;
map.put(type, value);
spUsedPosCountMap.put(cid, map);
} catch (Exception ex) {
log.error("updateSpUsePosCount " + storage.getCid() + "," + pos.getPosName() + "," + addCount + " 出错:" + ex.getMessage());
}
}
private void LoadStorageUsePosCount(String cid) {
Storage storage = getStorage(cid);
int waramCount = 0;
int coldingCount = 0;
if (ObjectUtil.isNotEmpty(storage)) {
List<StoragePos> allPos = storagePosManager.findUsedPosNameByStorageId(storage.getId());
for (StoragePos pos :
allPos) {
if (pos.isWarmPos()) {
waramCount++;
} else {
coldingCount++;
}
}
}
Map<String, Integer> map = new HashMap<>();
map.put(warmPosUseCount, waramCount);
map.put(coldingPosUseCount, coldingCount);
spUsedPosCountMap.put(cid, map);
}
public Integer getSpUsePosCount(String cid, String type) {
if (!spUsedPosCountMap.containsKey(cid)) {
LoadStorageUsePosCount(cid);
}
Map<String, Integer> map = spUsedPosCountMap.get(cid);
return map.get(type);
}
} }
...@@ -2,7 +2,6 @@ package com.neotel.smfcore.core.kanban.rest; ...@@ -2,7 +2,6 @@ package com.neotel.smfcore.core.kanban.rest;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.bean.PageData; import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.bean.ResultBean; import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
...@@ -23,20 +22,16 @@ import com.neotel.smfcore.core.storage.service.po.Storage; ...@@ -23,20 +22,16 @@ import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos; import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.manager.impl.DataLogManagerImpl; import com.neotel.smfcore.core.system.service.manager.impl.DataLogManagerImpl;
import com.neotel.smfcore.core.system.service.po.DataLog; import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.service.po.Humiture;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil; import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.security.annotation.AnonymousAccess; import com.neotel.smfcore.security.annotation.AnonymousAccess;
import com.neotel.smfcore.security.annotation.AnonymousPutMapping; import com.neotel.smfcore.security.annotation.AnonymousPutMapping;
import com.neotel.smfcore.security.service.manager.IGroupManager; import com.neotel.smfcore.security.service.manager.IGroupManager;
import com.neotel.smfcore.security.service.manager.impl.GroupManagerImpl;
import com.neotel.smfcore.security.service.manager.impl.UserManagerImpl; import com.neotel.smfcore.security.service.manager.impl.UserManagerImpl;
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 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 javafx.concurrent.Task;
import lombok.Data;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -44,7 +39,6 @@ import org.springframework.data.domain.Pageable; ...@@ -44,7 +39,6 @@ import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
...@@ -470,6 +464,13 @@ public class BoxKanbanController { ...@@ -470,6 +464,13 @@ public class BoxKanbanController {
} }
} }
} }
//如果是锡膏料仓,需要把回温区物料数量,冷藏区物料数量显示
if(storage.isSolderPaste()){
Integer warmUseCount=dataCache.getSpUsePosCount(storage.getCid(),DataCache.warmPosUseCount);
Integer coldingUseCount=dataCache.getSpUsePosCount(storage.getCid(),DataCache.coldingPosUseCount);
boxDto.getData().put(DataCache.warmPosUseCount,warmUseCount.toString());
boxDto.getData().put(DataCache.warmPosUseCount,coldingUseCount.toString());
}
return boxDto; return boxDto;
} }
......
package com.neotel.smfcore.custom.micron20031.bean; package com.neotel.smfcore.custom.micron20031.bean.dto;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
......
package com.neotel.smfcore.custom.micron20031.bean; package com.neotel.smfcore.custom.micron20031.bean.dto;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
......
package com.neotel.smfcore.custom.micron20031.bean; package com.neotel.smfcore.custom.micron20031.bean.dto;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
......
package com.neotel.smfcore.custom.micron20031.bean; package com.neotel.smfcore.custom.micron20031.bean.dto;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
......
package com.neotel.smfcore.custom.micron20031.bean.dto;
import com.neotel.smfcore.core.barcode.rest.bean.dto.BarcodeDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SpUnloadDto {
@ApiModelProperty("库位ID")
private String id;
@ApiModelProperty("料仓ID")
private String storageId;
@ApiModelProperty("库位号")
private String posName;
@ApiModelProperty("条码")
private String barcode;
@ApiModelProperty("物料编号")
private String partNumber;
@ApiModelProperty("数量")
private int num;
@ApiModelProperty("出库结果,默认1=成功,0=失败")
private int unloadState = 1;
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!