Commit 467324c9 sunke

Merge remote-tracking branch 'origin/master'

2 个父辈 f11f6c78 ef46faa2
正在显示 15 个修改的文件 包含 568 行增加140 行删除
...@@ -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,14 +755,77 @@ public class DataCache { ...@@ -751,14 +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) {
//查找mimo的cid
String cid = "";
DeviceType[] types = new DeviceType[]{type};
for (Storage storage :
allStorage.values()) {
if (storage.isType(types)) {
return storage;
}
}
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);
}
} }
...@@ -99,7 +99,7 @@ public class InListController { ...@@ -99,7 +99,7 @@ public class InListController {
if (inListItems.size() <= 0) { if (inListItems.size() <= 0) {
continue; continue;
} }
InList inList = new InList(name, INLIST_STATUS.WAIT, inListItems); InList inList = new InList(name, INLIST_STATUS.WAIT, inListItems,0L);
InList dbList = inListManager.findByName(name); InList dbList = inListManager.findByName(name);
if (dbList != null) { if (dbList != null) {
......
...@@ -26,4 +26,8 @@ public class InList extends BasePo implements Serializable { ...@@ -26,4 +26,8 @@ public class InList extends BasePo implements Serializable {
private List<InListItem> inListItems; private List<InListItem> inListItems;
/**
* 开始入库单入库时间,超时需要发送邮件
*/
private long startTime=0L;
} }
...@@ -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;
} }
......
...@@ -17,7 +17,6 @@ import java.util.List; ...@@ -17,7 +17,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
@Controller @Controller
@RequestMapping("/rest/api/micron")
@Slf4j @Slf4j
public class MicronApi extends BaseSmfApiListener { public class MicronApi extends BaseSmfApiListener {
......
...@@ -17,6 +17,10 @@ import java.util.*; ...@@ -17,6 +17,10 @@ import java.util.*;
*/ */
@Slf4j @Slf4j
public class Micron20031Api { public class Micron20031Api {
public static String MODE_DISABLE_SAP="DISABLE_SAP";
public static String MODE_DISABLE_MAM="DISABLE_MAM";
public static String MODE_DISABLE_MAM_AND_SAP="DISABLE_MAM_AND_SAP";
public static String MODE_ENABLE_MAM_SAP="ENABLE_MAM_SAP";
private static String AUTH_TOKEN = ""; private static String AUTH_TOKEN = "";
...@@ -151,19 +155,24 @@ public class Micron20031Api { ...@@ -151,19 +155,24 @@ public class Micron20031Api {
* //Input: MatReqNo, MaterialType * //Input: MatReqNo, MaterialType
* //Output: MatReqNo, Micron Part Number, Lot No, Quantity, UnitOfMeasures, MaterialType, Message, Status * //Output: MatReqNo, Micron Part Number, Lot No, Quantity, UnitOfMeasures, MaterialType, Message, Status
*/ */
public static DepositMatReqBean getMatReqDetail(String matReqNo) throws ApiException { public static List<DepositMatReqBean> getMatReqDetail(String matReqNo) throws ApiException {
//pnMap的key为pn, value为库存数量 //pnMap的key为pn, value为库存数量
String getMatReqDetailUrl = ""; String getMatReqDetailUrl = "";
String auth = getAuthToken(); String auth = getAuthToken();
Map<String,Object> dataMap = new HashMap<>(); Map<String, Object> dataMap = new HashMap<>();
dataMap.put("MatReqNo",matReqNo); dataMap.put("MatReqNo", matReqNo);
dataMap.put("MaterialType",MATERIAL_TYPE); dataMap.put("MaterialType", MATERIAL_TYPE);
log.info("调用MES接口 getMatReqDetail,参数:"+JsonUtil.toJsonStr(dataMap)); log.info("调用MES接口 getMatReqDetail,参数:" + JsonUtil.toJsonStr(dataMap));
String resultStr = HttpHelper.postJsonWithAuth(getMatReqDetailUrl, dataMap, auth); String resultStr = HttpHelper.postJsonWithAuth(getMatReqDetailUrl, dataMap, auth);
log.info("调用MES接口 getMatReqDetail 返回:" + resultStr); log.info("调用MES接口 getMatReqDetail 返回:" + resultStr);
DepositMatReqBean depositMatReqBean = JsonUtil.toObj(resultStr,DepositMatReqBean.class); Map<String, Object> resultMap = JsonUtil.toMap(resultStr);
return depositMatReqBean; List<DepositMatReqBean> beans = new ArrayList<>();
if (resultMap.containsKey("materialDocList")) {
beans = (List<DepositMatReqBean>) resultMap.get("materialDocList");
}
// DepositMatReqBean depositMatReqBean = JsonUtil.toObj(resultStr,DepositMatReqBean.class);
return beans;
} }
/** /**
......
package com.neotel.smfcore.custom.micron20031;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.exception.ApiException;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.core.api.bean.CodeValidateParam;
import com.neotel.smfcore.core.api.listener.BaseSmfApiListener;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.inList.enums.INLIST_STATUS;
import com.neotel.smfcore.core.inList.service.po.InList;
import com.neotel.smfcore.core.inList.util.InListCache;
import com.neotel.smfcore.core.storage.service.po.Storage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import javax.swing.text.html.InlineView;
@Slf4j
public class MicronSpApiListener extends BaseSmfApiListener {
@Autowired
private InListCache inListCache;
@Override
public boolean isForThisApi(String apiName) {
return false;
}
@Override
public Barcode canPutInAfterResolve(String inCheckUrl, CodeValidateParam params, Barcode barcode) throws ValidateException {
//判断是否是入库单入库
for (Storage storage :
params.getStorageList()) {
if (ObjectUtil.isNotEmpty(storage.getInListName())) {
//如果入库单还在执行中,验证是否可以入库
InList inList = inListCache.getInList(storage.getInListName());
if (inList.getStatus() < INLIST_STATUS.WAIT) {
try {
Barcode resultBarcode = Micron20031Api.depositCreateMA(barcode, params.getLoginUser());
if(resultBarcode!=null){
return resultBarcode;
}
} catch (ApiException apiException) {
log.error("MicronSpApiListener canPutInAfterResolve depositCreateMA error: " + apiException.getMessage());
return null;
}
}
//普通入库验证 调用return
try {
Barcode resultBarcode = Micron20031Api.returnMaterial(barcode, Micron20031Api.MODE_ENABLE_MAM_SAP, params.getLoginUser());
if(resultBarcode!=null){
return resultBarcode;
}
} catch (ApiException apiException) {
log.error("MicronSpApiListener canPutInAfterResolve returnMaterial error: " + apiException.getMessage());
return null;
}
}
}
return null;
}
}
...@@ -53,6 +53,10 @@ public class MicronSpController { ...@@ -53,6 +53,10 @@ public class MicronSpController {
Integer used = 0; Integer used = 0;
if (pos.isUsed()) { if (pos.isUsed()) {
used = 1; used = 1;
boolean AuthoriseNg= pos.getBarcode().getAppendData("AuthoriseNg") ;
if(AuthoriseNg){
used=2;
}
} }
// used=1; // used=1;
......
package com.neotel.smfcore.custom.micron20031;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ApiException;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.inList.rest.bean.dto.InListDto;
import com.neotel.smfcore.core.inList.rest.bean.mapstruct.InListMapper;
import com.neotel.smfcore.core.inList.service.manager.IInListManager;
import com.neotel.smfcore.core.inList.service.po.InList;
import com.neotel.smfcore.core.inList.service.po.InListItem;
import com.neotel.smfcore.core.inList.util.InListCache;
import com.neotel.smfcore.core.storage.enums.DeviceType;
import com.neotel.smfcore.core.storage.service.manager.IStorageManager;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.custom.micron20031.bean.DepositMatReqBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@RestController
@Api(tags = "20031:load Desposit/Return")
@RequestMapping("/rest/micron/sp")
public class MicronSpLoadController {
@Autowired
private InListCache inListCache;
@Autowired
private IInListManager inListManager;
@Autowired
private InListMapper inListMapper;
@Autowired
private IStorageManager storageManager;
@Autowired
private DataCache dataCache;
@ApiOperation("获取入库单详情")
@GetMapping(value = "/desposit/getMatReqDetail")
public ResultBean getMatReqDetail(String matReqNo) {
if (ObjectUtil.isEmpty(matReqNo)) {
return ResultBean.newOkResult(null);
}
try {
//先查询入库单是否存在
InList inList = inListCache.getInList(matReqNo);
if (inList == null) {
List<DepositMatReqBean> beans = Micron20031Api.getMatReqDetail(matReqNo);
inList = new InList();
inList.setName(matReqNo);
List<InListItem> items = new ArrayList<>();
for (DepositMatReqBean bean :
beans) {
InListItem item = new InListItem();
item.setPN(bean.getMicronPN());
item.setNum(bean.getQuantity());
item.setName(matReqNo);
items.add(item);
}
inList.setInListItems(items);
log.info("load 获取到入库单:" + inList.getName() + ",共" + items.size() + "条工单详情");
inList = inListManager.createWithItems(inList);
inListCache.addInListToMap(inList);
//保存入库单
// return ResultBean.newOkResult(reqBean);
}
InListDto inListDto = inListMapper.toDto(inList);
return ResultBean.newOkResult(inListDto);
} catch (ApiException e) {
return ResultBean.newErrorResult(1, e.getMessage(), e.getMessage());
}
}
@ApiOperation("开始入库单 入库")
@RequestMapping(value = "/desposit/start")
public ResultBean startDesposit(String matReqNo) {
InList inList = inListCache.getInList(matReqNo);
if (inList == null) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
}
Storage storage = dataCache.getOneStorageByType(DeviceType.AUTO);
if (storage == null) {
//未找到料仓,无法开始入库
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
}
inList.setStartTime(System.currentTimeMillis());
inListManager.save(inList);
inListCache.addInListToMap(inList);
storage.setInListName(matReqNo);
log.info("设置料仓[" + storage.getName() + "]的入库单为:[" + matReqNo + "],同时更新入库单开始时间");
storageManager.save(storage);
dataCache.reloadStorage(storage, storage.getCid());
return ResultBean.newOkResult(matReqNo);
}
@ApiOperation("开始回库 ")
@RequestMapping(value = "/return/start")
public ResultBean startReturn() {
Storage storage = dataCache.getOneStorageByType(DeviceType.AUTO);
if (storage == null) {
//未找到料仓,无法开始入库
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
}
storage.setInListName("");
log.info("设置料仓[" + storage.getName() + "]开始 return ");
storageManager.save(storage);
dataCache.reloadStorage(storage, storage.getCid());
return ResultBean.newOkResult("");
}
}
package com.neotel.smfcore.custom.micron20031;
import com.google.common.base.Strings;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ApiException;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.storage.rest.dto.StoragePosDto;
import com.neotel.smfcore.core.storage.rest.mapstruct.StoragePosMapper;
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.TaskService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@Slf4j
@RestController
@Api(tags = "20031:Unload Withdraw_new/Withdraw_Offline/Removal")
@RequestMapping("/rest/micron/sp")
public class MicronSpUnloadController {
@Autowired
private DataCache dataCache;
@Autowired
private TaskService taskService;
@Autowired
private IStoragePosManager storagePosManager;
@Autowired
private StoragePosMapper storagePosMapper;
@ApiOperation("出库:Withdraw Offline GetEquipIDList")
@GetMapping(value = "/unload/offlineIdList")
public ResultBean getEquipIdList() {
try {
List<String> equipIdList = Micron20031Api.getEquipIDList();
return ResultBean.newOkResult(equipIdList);
} catch (ApiException e) {
return ResultBean.newErrorResult(1, e.getMessage(), e.getMessage());
}
}
@ApiOperation("出库:Withdraw Offline GetMicronPN")
@GetMapping(value = "/unload/getMicronPN")
public ResultBean GetMicronPN(String lotId,String lineId) {
try {
String pn = Micron20031Api.getMicronPN(lotId, lineId);
//根据PN查找对应的物料,验证成功后返回
Criteria c = Criteria.where("used").is(true);
c.and("barcode.partNumber").is(pn);
c.and("barcode.appendData.AuthoriseNg").ne(true);
List<StoragePos> posList = storagePosManager.findByQuery(new Query(c));
for (StoragePos pos :
posList) {
try {
//验证
Micron20031Api.chkAuthoriseToDispatch(pos.getBarcode(), Micron20031Api.MODE_ENABLE_MAM_SAP, SecurityUtils.getCurrentUsername());
log.info("unload/getMicronPN [" + pn + "] barcode [" + pos.getBarcode().getBarcode() + "] chkAuthoriseToDispatch 成功");
StoragePosDto dto = storagePosMapper.toDto(pos);
return ResultBean.newOkResult(dto);
} catch (ApiException ex) {
log.error("unload/getMicronPN [" + pn + "] barcode [" + pos.getBarcode().getBarcode() + "] chkAuthoriseToDispatch 失败:" + ex.toString());
//需要标记此物料
Barcode barcode = pos.getBarcode();
barcode.updateAppendData("AuthoriseNg", true);
pos.setBarcode(barcode);
storagePosManager.save(pos);
log.info("unload/getMicronPN [" + pn + "] barcode [" + pos.getBarcode().getBarcode() + "] 标记为NG");
}
}
return ResultBean.newOkResult(pn);
} catch (ApiException e) {
return ResultBean.newErrorResult(1, e.getMessage(), e.getMessage());
}
}
@ApiOperation("开始出库")
@PutMapping("/unload/checkout")
public ResultBean checkout( @RequestBody Map<String,String> params) {
String posName = params.get("posName");
StoragePos pos = storagePosManager.getByPosName(posName);
if (pos == null) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
}
Storage storage = dataCache.getStorageById(pos.getStorageId());
if (storage == null) {
throw new ValidateException("smfcore.valueNotExist", "{0}[{1}]不存在", new String[]{"storageId", pos.getStorageId()});
}
log.info("出库料仓【" + storage.getName() + "_" + storage.getCid() + "】位置仓位【" + pos.getPosName() + "】");
String outResult = taskService.checkout(storage, pos, true, SecurityUtils.getCurrentUsername());
if (!Strings.isNullOrEmpty(outResult)) {
throw new ValidateException("smfcore.error", outResult);
}
return ResultBean.newOkResult("");
}
}
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!