Commit cbfa410d sunke

线边仓间入库类型修正

出入库记录只记录补料单号
1 个父辈 7d58d994
...@@ -27,6 +27,8 @@ import com.neotel.smfcore.core.hik.enums.IN_OUT_TYPE; ...@@ -27,6 +27,8 @@ import com.neotel.smfcore.core.hik.enums.IN_OUT_TYPE;
import com.neotel.smfcore.core.message.util.DeviceMessageUtil; import com.neotel.smfcore.core.message.util.DeviceMessageUtil;
import com.neotel.smfcore.core.order.LiteOrderCache; import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.enums.ORDER_COLOR; import com.neotel.smfcore.core.order.enums.ORDER_COLOR;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager;
import com.neotel.smfcore.core.order.service.po.LiteOrder; import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem; import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import com.neotel.smfcore.core.storage.enums.DeviceType; import com.neotel.smfcore.core.storage.enums.DeviceType;
...@@ -95,6 +97,12 @@ public class BaseDeviceHandler implements IDeviceHandler { ...@@ -95,6 +97,12 @@ public class BaseDeviceHandler implements IDeviceHandler {
@Autowired @Autowired
protected LiteOrderCache liteOrderCache; protected LiteOrderCache liteOrderCache;
@Autowired
private ILiteOrderManager liteOrderManager;
@Autowired
private ILiteOrderItemManager liteOrderItemManager;
/** /**
* CID的服务器消息(key 为 cid) * CID的服务器消息(key 为 cid)
*/ */
...@@ -663,13 +671,15 @@ public class BaseDeviceHandler implements IDeviceHandler { ...@@ -663,13 +671,15 @@ public class BaseDeviceHandler implements IDeviceHandler {
//判断是否是工单出库 //判断是否是工单出库
if(ObjectUtil.isNotEmpty( task.getSourceId())&&ObjectUtil.isNotEmpty(task.getSourceName())&&task.isOrderTask()){ if(ObjectUtil.isNotEmpty( task.getSourceId())&&ObjectUtil.isNotEmpty(task.getSourceName())&&task.isOrderTask()){
log.info("工单["+task.getSourceId()+"]物料["+task.getBarcode()+"]ItemId=" + task.getSubSourceId() + "出库完成");
LiteOrder liteOrder=liteOrderCache.findOrderByNo(task.getSourceName()); LiteOrder liteOrder=liteOrderManager.get(task.getSourceId());
LiteOrderItem item=liteOrder.getItemById(task.getSubSourceId()); //LiteOrderItem item= liteOrderItemManager.get(task.getSubSourceId());
//liteOrder.getItemById(task.getSubSourceId());
String station = task.getSubSourceInfo();
int interceptFlag=task.isNeedSplitting()?1:0; int interceptFlag=task.isNeedSplitting()?1:0;
int interceptQty=task.getNeedQty(); int interceptQty=task.getNeedQty();
//工单出库出库完成,7.3排程发料过账接口 //工单出库出库完成,7.3排程发料过账接口
ScheduleTaskInfo taskInfo=new ScheduleTaskInfo(liteOrder.getJobNo(),liteOrder.getReplenishmentNo(),item.getStation(),liteOrder.getBaseCode(),liteOrder.getLgort(),task.getNum(),interceptFlag,interceptQty,task.getBarcode()); ScheduleTaskInfo taskInfo=new ScheduleTaskInfo(liteOrder.getJobNo(),liteOrder.getReplenishmentNo(),station,liteOrder.getBaseCode(),liteOrder.getLgort(),task.getNum(),interceptFlag,interceptQty,task.getBarcode());
boolean result=HikApi.scheduleTaskApi(task.getOperator(),taskInfo ); boolean result=HikApi.scheduleTaskApi(task.getOperator(),taskInfo );
}else { }else {
//出库完成,调用 ,7.6出库下架过账接口 //出库完成,调用 ,7.6出库下架过账接口
......
...@@ -112,7 +112,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{ ...@@ -112,7 +112,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{
taskService.updateQueueTask(queueTask); taskService.updateQueueTask(queueTask);
if(Strings.isNotBlank(queueTask.getPosName())){ if(Strings.isNotBlank(queueTask.getPosName())){
statusBean.addData("open", queueTask.getPosName() + "=" + color.name()); statusBean.addData("open", queueTask.getPosName() + "=" + color.name());
log.info("库位[" + queueTask.getPosName() + "]["+queueTask.getBarcode()+"]+亮灯:" + color.name()); log.info("发送到客户端库位[" + queueTask.getPosName() + "]["+queueTask.getBarcode()+"]+亮灯:" + color.name());
} }
} }
} }
...@@ -151,7 +151,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{ ...@@ -151,7 +151,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{
List<String> ngToOk=new ArrayList<>(); List<String> ngToOk=new ArrayList<>();
//数据库有信息,实际无料 //数据库有信息,实际无料
if(noReelPosErrorList.length>0){ if(noReelPosErrorList.length>0){
log.info("开始检测noReelPosErrorList"); //log.info("开始检测noReelPosErrorList");
Query query=new Query(Criteria.where("posName").in(noReelPosErrorList)); Query query=new Query(Criteria.where("posName").in(noReelPosErrorList));
List<StoragePos> posList= storagePosManager.findByQuery(query); List<StoragePos> posList= storagePosManager.findByQuery(query);
for (StoragePos pos:posList) { for (StoragePos pos:posList) {
......
...@@ -6,31 +6,28 @@ import com.google.common.collect.Lists; ...@@ -6,31 +6,28 @@ 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.StringUtils;
import com.neotel.smfcore.common.utils.YmlUpdateUtil; import com.neotel.smfcore.common.utils.YmlUpdateUtil;
import com.neotel.smfcore.core.barcode.bean.PlateSizeBean;
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;
import com.neotel.smfcore.core.barcode.utils.CodeResolve; import com.neotel.smfcore.core.barcode.utils.CodeResolve;
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;
import com.neotel.smfcore.core.storage.enums.COMPATIBLE_TYPE; import com.neotel.smfcore.core.storage.enums.COMPATIBLE_TYPE;
import com.neotel.smfcore.core.storage.enums.DeviceType; import com.neotel.smfcore.core.storage.service.manager.IStorageManager;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos; import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.bean.OrderSetting; import com.neotel.smfcore.core.system.bean.OrderSetting;
import com.neotel.smfcore.core.system.service.dao.ICacheItemDao; import com.neotel.smfcore.core.system.service.dao.ICacheItemDao;
import com.neotel.smfcore.core.system.service.dao.ISettingsDao; import com.neotel.smfcore.core.system.service.dao.ISettingsDao;
import com.neotel.smfcore.core.barcode.bean.PlateSizeBean;
import com.neotel.smfcore.core.storage.service.manager.IStorageManager;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.system.service.po.CacheItem; import com.neotel.smfcore.core.system.service.po.CacheItem;
import com.neotel.smfcore.core.system.service.po.Settings; import com.neotel.smfcore.core.system.service.po.Settings;
import com.neotel.smfcore.core.storage.service.po.Storage;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -39,8 +36,6 @@ import org.springframework.stereotype.Repository; ...@@ -39,8 +36,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;
/** /**
* 缓存 * 缓存
...@@ -49,46 +44,46 @@ import java.util.regex.Pattern; ...@@ -49,46 +44,46 @@ import java.util.regex.Pattern;
@Repository @Repository
public class DataCache { public class DataCache {
/**
* 是否需要推送温湿度报警值
*/
public static Map<String, Boolean> needUpdateHumidityMap = new ConcurrentHashMap<>();
/**
* 一些设置的缓存
*/
public static Map<String, Object> cacheMap = Maps.newConcurrentMap();
/**
* 出库方式
*/
private static Settings settings;
/**
* 库存 map, key 为 cid,value 为料盘存量 map(key为 PartNumber,value 为 库存数量及盘数的Bean)
*/
private static Map<String, Map<String, InventoryItem>> inventoryMap = new ConcurrentHashMap<>();
/**
* 库位占用Map, key为cid,value为已使用的库位列表
*/
private static Map<String, List<String>> usedPosNameMap = new ConcurrentHashMap<>();
/**
* 所有的料仓 key 为 cid, value 为 Storage
*/
private static Map<String, Storage> allStorage = new ConcurrentHashMap<>();
protected final transient Logger log = LogManager.getLogger(getClass()); protected final transient Logger log = LogManager.getLogger(getClass());
@Autowired @Autowired
private IStoragePosManager storagePosManager; private IStoragePosManager storagePosManager;
@Autowired @Autowired
private IStorageManager storageManager; private IStorageManager storageManager;
@Autowired @Autowired
private ISettingsDao settingsDao; private ISettingsDao settingsDao;
@Autowired @Autowired
private CodeResolve codeResolve; private CodeResolve codeResolve;
@Autowired @Autowired
private ICacheItemDao cacheItemDao; private ICacheItemDao cacheItemDao;
@Autowired @Autowired
private InListCache inListCache; private InListCache inListCache;
@Autowired @Autowired
private IComponentManager componentManager; private IComponentManager componentManager;
/**
* 是否需要推送温湿度报警值
*/
public static Map<String, Boolean> needUpdateHumidityMap = new ConcurrentHashMap<>();
/**
* 一些设置的缓存
*/
public static Map<String, Object> cacheMap = Maps.newConcurrentMap();
/**
* 出库方式
*/
private static Settings settings;
@PostConstruct @PostConstruct
public void initialize() { public void initialize() {
settings = getSettings(); settings = getSettings();
...@@ -111,14 +106,15 @@ public class DataCache { ...@@ -111,14 +106,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;
} }
...@@ -131,7 +127,7 @@ public class DataCache { ...@@ -131,7 +127,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();
...@@ -143,18 +139,18 @@ public class DataCache { ...@@ -143,18 +139,18 @@ 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 cacheKey ,String configKey,String configValue) { public String GetConfigCache(String cacheKey, String configKey, String configValue) {
if (StringUtils.isEmpty(configKey) || StringUtils.isEmpty(cacheKey)) { if (StringUtils.isEmpty(configKey) || StringUtils.isEmpty(cacheKey)) {
return configValue; return configValue;
} }
...@@ -177,56 +173,15 @@ public class DataCache { ...@@ -177,56 +173,15 @@ 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;
} }
return false; return false;
} }
public Settings getSettings(){
if(settings == null){
List<Settings> allSettings = settingsDao.findAll();
if(allSettings == null || allSettings.isEmpty()){
settings = new Settings();
// settings.setOutType(CHECKOUT_TYPE.EFFICIENCY.name());
settings = settingsDao.save(settings);
}else{
settings = allSettings.get(0);
}
List<String> ruleList = settings.getCodeRuleList();
codeResolve.updateBarcodeRuleList(ruleList);
}
return settings;
}
/**
* 出库方式
*/
public CHECKOUT_TYPE getCheckOutType(){
// String outType = getSettings().getOutType();
String outType = getCache(Constants.CACHE_CheckOutType);
if(ObjectUtil.isEmpty(outType)){
outType=CHECKOUT_TYPE.EFFICIENCY.name();
updateCache(Constants.CACHE_CheckOutType,outType);
log.info("未配置 出库策略配置类型,默认为"+outType);
}
return CHECKOUT_TYPE.valueOf(outType);
}
public Settings updateSettings(Settings newSetting){
settings = settingsDao.save(newSetting);
List<String> ruleItems = settings.getCodeRuleList();
codeResolve.updateBarcodeRuleList(ruleItems);
needUpdateHumidityMap = new ConcurrentHashMap<>();
return settings;
}
// public List<String> getCids(){ // public List<String> getCids(){
// List<String> cids = new ArrayList<>(); // List<String> cids = new ArrayList<>();
// for (Storage storage : getAllStorage().values()){ // for (Storage storage : getAllStorage().values()){
...@@ -264,23 +219,46 @@ public class DataCache { ...@@ -264,23 +219,46 @@ public class DataCache {
// return null; // return null;
// } // }
public Settings getSettings() {
if (settings == null) {
List<Settings> allSettings = settingsDao.findAll();
if (allSettings == null || allSettings.isEmpty()) {
settings = new Settings();
// settings.setOutType(CHECKOUT_TYPE.EFFICIENCY.name());
settings = settingsDao.save(settings);
} else {
settings = allSettings.get(0);
}
/** List<String> ruleList = settings.getCodeRuleList();
* 库存 map, key 为 cid,value 为料盘存量 map(key为 PartNumber,value 为 库存数量及盘数的Bean) codeResolve.updateBarcodeRuleList(ruleList);
*/ }
private static Map<String,Map<String,InventoryItem>> inventoryMap = new ConcurrentHashMap<>(); return settings;
}
/** /**
* 库位占用Map, key为cid,value为已使用的库位列表 * 出库方式
*/ */
private static Map<String,List<String>> usedPosNameMap = new ConcurrentHashMap<>(); public CHECKOUT_TYPE getCheckOutType() {
// String outType = getSettings().getOutType();
String outType = getCache(Constants.CACHE_CheckOutType);
if (ObjectUtil.isEmpty(outType)) {
outType = CHECKOUT_TYPE.EFFICIENCY.name();
updateCache(Constants.CACHE_CheckOutType, outType);
log.info("未配置 出库策略配置类型,默认为" + outType);
}
return CHECKOUT_TYPE.valueOf(outType);
}
public Settings updateSettings(Settings newSetting) {
settings = settingsDao.save(newSetting);
List<String> ruleItems = settings.getCodeRuleList();
codeResolve.updateBarcodeRuleList(ruleItems);
needUpdateHumidityMap = new ConcurrentHashMap<>();
return settings;
}
/** //
* 所有的料仓 key 为 cid, value 为 Storage
*/
private static Map<String, Storage> allStorage = new ConcurrentHashMap<>();
//
// //
// /** // /**
// * 某个区域需要进行清理呆滞物料的所有料仓(虚拟仓应该不需要清理的) // * 某个区域需要进行清理呆滞物料的所有料仓(虚拟仓应该不需要清理的)
...@@ -296,14 +274,14 @@ public class DataCache { ...@@ -296,14 +274,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 +291,7 @@ public class DataCache { ...@@ -313,7 +291,7 @@ public class DataCache {
} }
allStorage = map; allStorage = map;
log.info("加载所有料仓["+all.size()+"]信息到缓存"); log.info("加载所有料仓[" + all.size() + "]信息到缓存");
} }
} }
} }
...@@ -336,8 +314,8 @@ public class DataCache { ...@@ -336,8 +314,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,26 +324,28 @@ public class DataCache { ...@@ -346,26 +324,28 @@ 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;
} }
} }
return null; return null;
} }
/** /**
* 根据 料仓名称 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,40 +370,42 @@ public class DataCache { ...@@ -390,40 +370,42 @@ 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 : for (Storage storage :
...@@ -436,7 +418,7 @@ public class DataCache { ...@@ -436,7 +418,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 {
...@@ -449,19 +431,19 @@ public class DataCache { ...@@ -449,19 +431,19 @@ public class DataCache {
/** /**
* 获取某些料仓的库存信息 * 获取某些料仓的库存信息
*/ */
public Map<String,InventoryItem> getInventory(Collection<Storage> storageList){ public 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);
} }
...@@ -471,7 +453,7 @@ public class DataCache { ...@@ -471,7 +453,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;
...@@ -480,9 +462,9 @@ public class DataCache { ...@@ -480,9 +462,9 @@ 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;
...@@ -492,7 +474,7 @@ public class DataCache { ...@@ -492,7 +474,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);
...@@ -501,43 +483,44 @@ public class DataCache { ...@@ -501,43 +483,44 @@ 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);
} }
/** /**
* 获取设备所有占用的库位名称列表 * 获取设备所有占用的库位名称列表
*/ */
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.findNotEmptyByStorageId(storage.getId()); List<StoragePos> allPos = storagePosManager.findNotEmptyByStorageId(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;
} }
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 也需要锁定
...@@ -555,22 +538,23 @@ public class DataCache { ...@@ -555,22 +538,23 @@ 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;
} }
/** /**
* 手动修改数量的时候更新库存 * 手动修改数量的时候更新库存
*
* @param cid * @param cid
* @param partNumber * @param partNumber
* @param amount * @param amount
* @return * @return
*/ */
private int updateInventoryAmount(String cid,String partNumber,int amount){ private 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);
} }
...@@ -584,46 +568,47 @@ public class DataCache { ...@@ -584,46 +568,47 @@ 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);
removeUsedPosNameList(cid, pos.getPosName()); removeUsedPosNameList(cid, pos.getPosName());
}else{ } else {
//入库 //入库
amount = barcode.getAmount(); amount = barcode.getAmount();
storage.useOnePos(pos); storage.useOnePos(pos);
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){
if(groupId!=null&&groupId.equals("-1")){ public List<String> getCidsByGroupId(String groupId, boolean nullReturnAll) {
groupId="";
if (groupId != null && groupId.equals("-1")) {
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="";
...@@ -631,48 +616,49 @@ public class DataCache { ...@@ -631,48 +616,49 @@ 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 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()) {
//默认所有料仓可用 if (storage.isAvailable()) {
// StatusBean statusBean =dataCache. getStatus(storage.getCid()); //设置为不可用的料架,不再进行自动挑料
// if (statusBean.isAvailable())
{
availableStorageIds.add(storage.getId()); availableStorageIds.add(storage.getId());
} else {
log.info("设备" + storage.getName() + "不可用,挑料时忽略此设备");
} }
} }
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);
...@@ -695,12 +681,13 @@ public class DataCache { ...@@ -695,12 +681,13 @@ 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;
......
...@@ -248,13 +248,14 @@ public class SingleInController { ...@@ -248,13 +248,14 @@ public class SingleInController {
if(inList != null){ if(inList != null){
if(inList.getDocType() == 4){ if(inList.getDocType() == 4){
//线边仓间入库 //线边仓间入库
businessType = "01"; businessType = "02";
businessNo = docName; businessNo = docName;
} }
} }
} }
if(inType.equals(4)){ if(inType.equals(4)){
//退料入库
businessType = "01"; businessType = "01";
} }
......
...@@ -104,6 +104,20 @@ public class LiteOrderCache implements ITaskListener { ...@@ -104,6 +104,20 @@ public class LiteOrderCache implements ITaskListener {
liteOrderMap.put(order.getOrderNo(), order); liteOrderMap.put(order.getOrderNo(), order);
} }
public LiteOrder findOrderById(String orderId){
for (LiteOrder order : liteOrderMap.values()) {
if(order.getId().equals(orderId)){
return order;
}
}
LiteOrder order=liteOrderManager.get(orderId);
if(order!=null){
addOrderToMap(order);
return order;
}
return null;
}
public LiteOrder findOrderByNo(String orderNo){ public LiteOrder findOrderByNo(String orderNo){
if(liteOrderMap.containsKey(orderNo)){ if(liteOrderMap.containsKey(orderNo)){
...@@ -184,18 +198,19 @@ public class LiteOrderCache implements ITaskListener { ...@@ -184,18 +198,19 @@ public class LiteOrderCache implements ITaskListener {
private synchronized void finishedOrderTask(DataLog task) throws ValidateException { private synchronized void finishedOrderTask(DataLog task) throws ValidateException {
//更新工单状态 //更新工单状态
String orderNo = task.getSourceName(); String sourceName = task.getSourceName();
if (!Strings.isNullOrEmpty(orderNo)) { if (!Strings.isNullOrEmpty(task.getSourceId())) {
LiteOrder order = liteOrderMap.get(orderNo); LiteOrder order = findOrderById(task.getSourceId());
if (order == null) { if (order == null) {
log.info("缓存中未找到[" + orderNo + "],从数据库中重新加载"); log.info("缓存中未找到"+sourceName+"[" + task.getSourceId() + "],从数据库中重新加载");
order = liteOrderManager.findByOrderNo(orderNo); order = liteOrderManager.get(task.getSourceId());
if (order != null) { if (order != null) {
List<LiteOrderItem> items = liteOrderItemManager.findOrderItems(orderNo); List<LiteOrderItem> items = liteOrderItemManager.findOrderItems(sourceName);
order.setOrderItems(items); order.setOrderItems(items);
} }
} }
if (order != null) { if (order != null) {
String orderNo = order.getOrderNo();
//任务是取消的,需要将总待出库数量-1 //任务是取消的,需要将总待出库数量-1
if (task.isCancel()) { if (task.isCancel()) {
order.setTaskReelCount(order.getTaskReelCount() - 1); order.setTaskReelCount(order.getTaskReelCount() - 1);
...@@ -239,9 +254,9 @@ public class LiteOrderCache implements ITaskListener { ...@@ -239,9 +254,9 @@ public class LiteOrderCache implements ITaskListener {
} }
} }
liteOrderManager.save(order); liteOrderManager.save(order);
liteOrderMap.put(orderNo, order); liteOrderMap.put(order.getOrderNo(), order);
} else { } else {
log.error("完成任务时,未找到工单[" + orderNo + "]信息"); log.error("完成任务时,未找到工单"+sourceName+"[" + task.getSourceId() + "]信息");
} }
} }
...@@ -565,7 +580,6 @@ public class LiteOrderCache implements ITaskListener { ...@@ -565,7 +580,6 @@ public class LiteOrderCache implements ITaskListener {
DataLog task = taskService.newTask(pos) ; DataLog task = taskService.newTask(pos) ;
task.setSourceId(cacheOrder.getId()); task.setSourceId(cacheOrder.getId());
task.setSourceName(cacheOrder.getOrderNo());
task.setSubSourceId(orderItem.getId()); task.setSubSourceId(orderItem.getId());
task.setSubSourceInfo(orderItem.getStation()); task.setSubSourceInfo(orderItem.getStation());
task.setType(OP.CHECKOUT); task.setType(OP.CHECKOUT);
...@@ -574,7 +588,9 @@ public class LiteOrderCache implements ITaskListener { ...@@ -574,7 +588,9 @@ public class LiteOrderCache implements ITaskListener {
task.setOperator(userName); task.setOperator(userName);
task.setOutType(IN_OUT_TYPE.OUT_ORDER);//工单出库类型为10 task.setOutType(IN_OUT_TYPE.OUT_ORDER);//工单出库类型为10
task.setSourceName(cacheOrder.getJobNo());
if(cacheOrder.isRepleOrder()){ if(cacheOrder.isRepleOrder()){
//task.setSourceName(cacheOrder.getReplenishmentNo());
task.setOutType(IN_OUT_TYPE.OUT_REPLE);//补料出库类型为11 task.setOutType(IN_OUT_TYPE.OUT_REPLE);//补料出库类型为11
} }
if(jieliaoPosMap.containsKey(pos.getPosName())){ if(jieliaoPosMap.containsKey(pos.getPosName())){
......
...@@ -243,6 +243,11 @@ public class LiteOrder extends BasePo implements Serializable { ...@@ -243,6 +243,11 @@ public class LiteOrder extends BasePo implements Serializable {
setClosed(true); setClosed(true);
} }
} }
if(isRepleOrder()){
//产线补料,直接关闭
setClosed(true);
}
setTaskFinishedTime(System.currentTimeMillis()); setTaskFinishedTime(System.currentTimeMillis());
} }
......
...@@ -30,6 +30,7 @@ import io.swagger.annotations.Api; ...@@ -30,6 +30,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
...@@ -215,6 +216,10 @@ public class OutListController { ...@@ -215,6 +216,10 @@ public class OutListController {
Integer type = Convert.toInt(params.get("docType")); Integer type = Convert.toInt(params.get("docType"));
//先从已存在的出库单查询是否存在 //先从已存在的出库单查询是否存在
if(Strings.isBlank(name)){
return ResultBean.newErrorResult(1, "smfcore.empty", "出库单号不能为空");
}
OutList outList = outListCache.getOutList(name); OutList outList = outListCache.getOutList(name);
if (outList == null) { if (outList == null) {
//从接口获取出库单 //从接口获取出库单
......
...@@ -7,7 +7,6 @@ import com.neotel.smfcore.common.bean.ResultBean; ...@@ -7,7 +7,6 @@ import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.csv.CsvReader; import com.neotel.smfcore.common.csv.CsvReader;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.FileUtil; import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.PointUtil;
import com.neotel.smfcore.common.utils.QueryHelp; import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.SecurityUtils; import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.device.bean.BoxStatusBean; import com.neotel.smfcore.core.device.bean.BoxStatusBean;
...@@ -24,11 +23,8 @@ import com.neotel.smfcore.core.storage.service.manager.IStorageManager; ...@@ -24,11 +23,8 @@ import com.neotel.smfcore.core.storage.service.manager.IStorageManager;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager; import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.Storage; 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.bean.OrderSetting;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil; import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import com.neotel.smfcore.security.bean.FileProperties; import com.neotel.smfcore.security.bean.FileProperties;
import com.neotel.smfcore.security.rest.bean.dto.RoleDto;
import com.neotel.smfcore.security.service.manager.IGroupManager; import com.neotel.smfcore.security.service.manager.IGroupManager;
import com.neotel.smfcore.security.service.manager.IUserManager; import com.neotel.smfcore.security.service.manager.IUserManager;
import com.neotel.smfcore.security.service.po.Group; import com.neotel.smfcore.security.service.po.Group;
...@@ -39,7 +35,6 @@ import lombok.RequiredArgsConstructor; ...@@ -39,7 +35,6 @@ 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;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.geo.Point;
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.http.HttpStatus; import org.springframework.http.HttpStatus;
...@@ -86,12 +81,12 @@ public class StorageController { ...@@ -86,12 +81,12 @@ public class StorageController {
@ApiOperation("查询料仓") @ApiOperation("查询料仓")
@GetMapping @GetMapping
@PreAuthorize("@el.check('storage:list')") @PreAuthorize("@el.check('storage:list')")
public PageData<StorageDto> query(StorageQueryCriteria criteria, Pageable pageable){ public PageData<StorageDto> query(StorageQueryCriteria criteria, Pageable pageable) {
Query query= QueryHelp.getQuery(criteria); Query query = QueryHelp.getQuery(criteria);
PageData<Storage> pages=storageManager.findByPage(query,pageable); PageData<Storage> pages = storageManager.findByPage(query, pageable);
List<StorageDto> StorageDtos=storageMapper.toDto(pages.getContent()); List<StorageDto> StorageDtos = storageMapper.toDto(pages.getContent());
StorageDtos=updateDtos(StorageDtos); StorageDtos = updateDtos(StorageDtos);
for (int i=0;i<StorageDtos.size();i++) { for (int i = 0; i < StorageDtos.size(); i++) {
StorageDtos.get(i).setOnLine(false); StorageDtos.get(i).setOnLine(false);
StorageDtos.get(i).setStatus(0); StorageDtos.get(i).setStatus(0);
StatusBean bean = DevicesStatusUtil.getStatusBean(StorageDtos.get(i).getCid()); StatusBean bean = DevicesStatusUtil.getStatusBean(StorageDtos.get(i).getCid());
...@@ -105,11 +100,11 @@ public class StorageController { ...@@ -105,11 +100,11 @@ public class StorageController {
} }
} }
} }
return new PageData(StorageDtos,pages.getTotalElements()); return new PageData(StorageDtos, pages.getTotalElements());
} }
private List<StorageDto> updateDtos(List<StorageDto> dtoList){ private List<StorageDto> updateDtos(List<StorageDto> dtoList) {
for (int i=0;i<dtoList.size();i++) { for (int i = 0; i < dtoList.size(); i++) {
String groupId = ""; String groupId = "";
if (dtoList.get(i).getGroupId() != null && (!dtoList.get(i).getGroupId().isEmpty())) { if (dtoList.get(i).getGroupId() != null && (!dtoList.get(i).getGroupId().isEmpty())) {
groupId = dtoList.get(i).getGroupId(); groupId = dtoList.get(i).getGroupId();
...@@ -134,6 +129,7 @@ public class StorageController { ...@@ -134,6 +129,7 @@ public class StorageController {
} }
return dtoList; return dtoList;
} }
@ApiOperation("根据组权限返回所有料仓") @ApiOperation("根据组权限返回所有料仓")
@GetMapping(value = "/all") @GetMapping(value = "/all")
// @PreAuthorize("@el.check('storage:list')") // @PreAuthorize("@el.check('storage:list')")
...@@ -166,20 +162,21 @@ public class StorageController { ...@@ -166,20 +162,21 @@ public class StorageController {
@ApiOperation("物料入库界面,返回所有料仓") @ApiOperation("物料入库界面,返回所有料仓")
@GetMapping(value = "/allList") @GetMapping(value = "/allList")
public List<StorageDto> all() { public List<StorageDto> all() {
List<Storage> storages=storageManager.findAll(); List<Storage> storages = storageManager.findAll();
List<StorageDto> storageDtos=storageMapper.toDto(storages); List<StorageDto> storageDtos = storageMapper.toDto(storages);
storageDtos=updateDtos(storageDtos); storageDtos = updateDtos(storageDtos);
return storageDtos; return storageDtos;
} }
@ApiOperation("料架设置界面,返回所有的料架列表") @ApiOperation("料架设置界面,返回所有的料架列表")
@GetMapping(value = "/allShelf") @GetMapping(value = "/allShelf")
public List<StorageDto> allShelf() { public List<StorageDto> allShelf() {
Query query=new Query(Criteria.where("type").in(new String[]{DeviceType.NLP.name(),DeviceType.NL.name() })); Query query = new Query(Criteria.where("type").in(new String[]{DeviceType.NLP.name(), DeviceType.NL.name()}));
List<Storage> storages=storageManager.findByQuery(query); List<Storage> storages = storageManager.findByQuery(query);
List<StorageDto> storageDtos= new ArrayList<>(); List<StorageDto> storageDtos = new ArrayList<>();
for (Storage storage : for (Storage storage :
storages) { storages) {
StorageDto dto=new StorageDto(); StorageDto dto = new StorageDto();
dto.setName(storage.getName()); dto.setName(storage.getName());
dto.setId(storage.getId()); dto.setId(storage.getId());
dto.setCid(storage.getCid()); dto.setCid(storage.getCid());
...@@ -187,20 +184,20 @@ public class StorageController { ...@@ -187,20 +184,20 @@ public class StorageController {
StatusBean bean = DevicesStatusUtil.getStatusBean(storage.getCid()); StatusBean bean = DevicesStatusUtil.getStatusBean(storage.getCid());
if (bean != null && bean.getBoxStatus() != null) { if (bean != null && bean.getBoxStatus() != null) {
dto.setClientIp(bean.getClientIp()); dto.setClientIp(bean.getClientIp());
String url="http://"+bean.getClientIp()+":5000/"; String url = "http://" + bean.getClientIp() + ":5000/";
dto.setClientUrl(url); dto.setClientUrl(url);
} }
storageDtos.add(dto); storageDtos.add(dto);
} }
return storageDtos; return storageDtos;
} }
@ApiOperation("返回所有料仓类型") @ApiOperation("返回所有料仓类型")
@GetMapping(value = "/typeList") @GetMapping(value = "/typeList")
public List<String> typeList() { public List<String> typeList() {
List<DeviceType> availableTypeList= DeviceType.availableTypeList(); List<DeviceType> availableTypeList = DeviceType.availableTypeList();
List<String> allList=new ArrayList<>(); List<String> allList = new ArrayList<>();
for (DeviceType type : for (DeviceType type : availableTypeList) {
availableTypeList) {
allList.add(type.getName()); allList.add(type.getName());
} }
return allList; return allList;
...@@ -210,7 +207,7 @@ public class StorageController { ...@@ -210,7 +207,7 @@ public class StorageController {
@PostMapping @PostMapping
@PreAuthorize("@el.check('storage:add')") @PreAuthorize("@el.check('storage:add')")
public ResponseEntity<Object> create(@Validated @RequestBody StorageDto resources) { public ResponseEntity<Object> create(@Validated @RequestBody StorageDto resources) {
Storage Storage=storageMapper.toEntity(resources); Storage Storage = storageMapper.toEntity(resources);
saveStorage(Storage); saveStorage(Storage);
return new ResponseEntity<>(HttpStatus.CREATED); return new ResponseEntity<>(HttpStatus.CREATED);
} }
...@@ -219,16 +216,15 @@ public class StorageController { ...@@ -219,16 +216,15 @@ public class StorageController {
@PutMapping @PutMapping
@PreAuthorize("@el.check('storage:edit')") @PreAuthorize("@el.check('storage:edit')")
public ResponseEntity<Object> update(@Validated @RequestBody StorageDto resources) { public ResponseEntity<Object> update(@Validated @RequestBody StorageDto resources) {
Storage Storage=storageMapper.toEntity(resources); Storage Storage = storageMapper.toEntity(resources);
if (Storage.getId() == null) { if (Storage.getId() == null) {
throw new ValidateException("smfcore.valueCanotNull","{0}不能为空",new String[]{"ID"} ); throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"ID"});
} }
saveStorage(Storage); saveStorage(Storage);
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
} }
@ApiOperation("删除料仓") @ApiOperation("删除料仓")
@DeleteMapping @DeleteMapping
@PreAuthorize("@el.check('storage:del')") @PreAuthorize("@el.check('storage:del')")
...@@ -236,12 +232,13 @@ public class StorageController { ...@@ -236,12 +232,13 @@ public class StorageController {
for (String id : ids) { for (String id : ids) {
if (id == null) { if (id == null) {
throw new ValidateException("smfcore.valueCanotNull","{0}不能为空",new String[]{"ID"} ); throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"ID"});
} }
} }
deleteStorages(ids); deleteStorages(ids);
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
} }
public void deleteStorages(Set<String> ids) { public void deleteStorages(Set<String> ids) {
Query querySto = new Query(Criteria.where("id").in(ids)); Query querySto = new Query(Criteria.where("id").in(ids));
...@@ -252,16 +249,16 @@ public class StorageController { ...@@ -252,16 +249,16 @@ public class StorageController {
//验证料仓是否有料 //验证料仓是否有料
Query query = new Query(Criteria.where("storageId").is(storage.getId())); Query query = new Query(Criteria.where("storageId").is(storage.getId()));
List<StoragePos> posList = storagePosManager.findByQuery(query); List<StoragePos> posList = storagePosManager.findByQuery(query);
if(posList!=null) { if (posList != null) {
if(posList.size()>0){ if (posList.size() > 0) {
throw new ValidateException("smfcore.posNotDel","删除失败,请先删除料仓[{0}]的所有库位",new String[]{ storage.getName() }); throw new ValidateException("smfcore.posNotDel", "删除失败,请先删除料仓[{0}]的所有库位", new String[]{storage.getName()});
} }
for (StoragePos pos : posList for (StoragePos pos : posList
) { ) {
if (pos.getBarcode() == null || pos.getBarcode().equals("")) { if (pos.getBarcode() == null || pos.getBarcode().equals("")) {
} else { } else {
throw new ValidateException("smfcore.posIsused","删除失败,料仓[{0}]的库位[{1}}]有料[{2}]",new String[]{ storage.getName() ,pos.getPosName(),pos.getBarcode().getBarcode()}); throw new ValidateException("smfcore.posIsused", "删除失败,料仓[{0}]的库位[{1}}]有料[{2}]", new String[]{storage.getName(), pos.getPosName(), pos.getBarcode().getBarcode()});
// throw new BadRequestException("料仓[" + storage.getName() + "]的库位[" + pos.getPosName() + "]有料[" + pos.getBarcode() + "],删除失败"); // throw new BadRequestException("料仓[" + storage.getName() + "]的库位[" + pos.getPosName() + "]有料[" + pos.getBarcode() + "],删除失败");
} }
} }
...@@ -274,51 +271,54 @@ public class StorageController { ...@@ -274,51 +271,54 @@ public class StorageController {
} }
log.info("手动删除料仓" + delStoName + "完成"); log.info("手动删除料仓" + delStoName + "完成");
} }
private Storage saveStorage(Storage storage) { private Storage saveStorage(Storage storage) {
if(storage.getName()==null){ if (storage.getName() == null) {
throw new ValidateException("smfcore.valueCanotNull","{0}不能为空",new String[]{"name"} ); throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"name"});
// throw new BadRequestException("料仓名称不能为空"); // throw new BadRequestException("料仓名称不能为空");
} if(storage.getCid()==null){ }
throw new ValidateException("smfcore.valueCanotNull","{0}不能为空",new String[]{"cid"} ); if (storage.getCid() == null) {
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"cid"});
// throw new BadRequestException("料仓编号不能为空"); // throw new BadRequestException("料仓编号不能为空");
} if(storage.getType()==null){ }
throw new ValidateException("smfcore.valueCanotNull","{0}不能为空",new String[]{"type"} ); if (storage.getType() == null) {
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"type"});
// throw new BadRequestException("料仓类型不能为空"); // throw new BadRequestException("料仓类型不能为空");
} if(storage.getCompatibleType()==null){ }
throw new ValidateException("smfcore.valueCanotNull","{0}不能为空",new String[]{"compatibleType"} ); if (storage.getCompatibleType() == null) {
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"compatibleType"});
// throw new BadRequestException("料仓兼容性不能为空"); // throw new BadRequestException("料仓兼容性不能为空");
} }
String oldCid=""; String oldCid = "";
boolean isNew=(storage.getId()==null); boolean isNew = (storage.getId() == null);
//判断名称是否重复,cid是否重复 //判断名称是否重复,cid是否重复
Map<String, Storage> storageMap=dataCache.getAllStorage(); Map<String, Storage> storageMap = dataCache.getAllStorage();
for (Storage s:storageMap.values() for (Storage s : storageMap.values()
) { ) {
if(isNew || (!storage.getId().equals(s.getId()))) { if (isNew || (!storage.getId().equals(s.getId()))) {
if(s.getName().equals(storage.getName())){ if (s.getName().equals(storage.getName())) {
throw new ValidateException("smfcore.valueAlreadyExist","{0}[{1}]已存在",new String[]{"name",storage.getName()}); throw new ValidateException("smfcore.valueAlreadyExist", "{0}[{1}]已存在", new String[]{"name", storage.getName()});
// throw new BadRequestException("料仓名称["+storage.getCid()+"]已存在"); // throw new BadRequestException("料仓名称["+storage.getCid()+"]已存在");
} }
if(s.getCid().equals(storage.getCid())){ if (s.getCid().equals(storage.getCid())) {
throw new ValidateException("smfcore.valueAlreadyExist","{0}[{1}]已存在",new String[]{"cid",storage.getCid()}); throw new ValidateException("smfcore.valueAlreadyExist", "{0}[{1}]已存在", new String[]{"cid", storage.getCid()});
// throw new BadRequestException("料仓cid["+storage.getCid()+"]已存在"); // throw new BadRequestException("料仓cid["+storage.getCid()+"]已存在");
} }
} } else if ((!isNew) && storage.getId().equals(s.getId())) {
else if((!isNew)&&storage.getId().equals(s.getId())){ oldCid = s.getCid();
oldCid=s.getCid();
} }
} }
if(storage.getSourcePath()==null){ if (storage.getSourcePath() == null) {
storage.setSourcePath(""); storage.setSourcePath("");
} }
if(storage.getGroupId()==null|| storage.getGroupId().isEmpty()){ if (storage.getGroupId() == null || storage.getGroupId().isEmpty()) {
storage.setGroupId(""); storage.setGroupId("");
} }
storage= storageDao.save(storage); storage = storageDao.save(storage);
dataCache.reloadStorage(storage,oldCid); dataCache.reloadStorage(storage, oldCid);
return storage; return storage;
} }
...@@ -328,12 +328,12 @@ public class StorageController { ...@@ -328,12 +328,12 @@ public class StorageController {
// 验证文件上传的格式 // 验证文件上传的格式
String image = "csv"; String image = "csv";
String fileType = FileUtil.getExtensionName(uploadFile.getOriginalFilename()); String fileType = FileUtil.getExtensionName(uploadFile.getOriginalFilename());
if(fileType != null && !image.contains(fileType)){ if (fileType != null && !image.contains(fileType)) {
throw new ValidateException("smfcore.feleFormatError","文件格式错误!, 仅支持{0}格式",new String[]{image}); throw new ValidateException("smfcore.feleFormatError", "文件格式错误!, 仅支持{0}格式", new String[]{image});
} }
File folder = new File(properties.getPath(),"pos"); File folder = new File(properties.getPath(), "pos");
File file = FileUtil.upload(uploadFile, folder.getAbsolutePath()); File file = FileUtil.upload(uploadFile, folder.getAbsolutePath());
String resultMsg = handleStoragePos(file.getAbsolutePath(),storageId); String resultMsg = handleStoragePos(file.getAbsolutePath(), storageId);
return ResultBean.newOkResult(resultMsg); return ResultBean.newOkResult(resultMsg);
} }
...@@ -345,7 +345,7 @@ public class StorageController { ...@@ -345,7 +345,7 @@ public class StorageController {
downloadPosModel(response); downloadPosModel(response);
} }
public void downloadPosModel( HttpServletResponse response) throws IOException { public void downloadPosModel(HttpServletResponse response) throws IOException {
try { try {
List<Map<String, Object>> maps = new ArrayList<>(); List<Map<String, Object>> maps = new ArrayList<>();
List<String> titles = new ArrayList<>(); List<String> titles = new ArrayList<>();
...@@ -354,11 +354,11 @@ public class StorageController { ...@@ -354,11 +354,11 @@ public class StorageController {
// int hIndex = csvRead.getCsvIndex("高度","h"); // int hIndex = csvRead.getCsvIndex("高度","h");
// int wIndex = csvRead.getCsvIndex("宽度","w"); // int wIndex = csvRead.getCsvIndex("宽度","w");
titles.add("pos" ); titles.add("pos");
titles.add("pri"); titles.add("pri");
titles.add(("h")); titles.add(("h"));
titles.add("w"); titles.add("w");
for(int i=1;i<=10;i++) { for (int i = 1; i <= 10; i++) {
Map<String, Object> map = new LinkedHashMap<>(); Map<String, Object> map = new LinkedHashMap<>();
...@@ -376,83 +376,81 @@ public class StorageController { ...@@ -376,83 +376,81 @@ public class StorageController {
} }
protected String handleStoragePos(String fileURL, String storageId) throws Exception {
protected String handleStoragePos(String fileURL, String storageId) throws Exception log.info("开始更新料仓【" + storageId + "】的位置信息");
{
log.info("开始更新料仓【"+storageId+"】的位置信息");
if (Strings.isNullOrEmpty(storageId)) { if (Strings.isNullOrEmpty(storageId)) {
log.error("Storage id is null"); log.error("Storage id is null");
throw new ValidateException("smfcore.valueCanotNull","{0}不能为空",new String[]{"storageId"} ); throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"storageId"});
} }
Storage storage = storageManager.get(storageId); Storage storage = storageManager.get(storageId);
if (storage == null) { if (storage == null) {
log.error("Storage id is not exist"); log.error("Storage id is not exist");
throw new ValidateException("smfcore.storage.error.notExist","未找到料仓{0}",new String[]{storageId}); throw new ValidateException("smfcore.storage.error.notExist", "未找到料仓{0}", new String[]{storageId});
} }
CsvReader csvRead =CsvReader.newReader(fileURL,"位置","pos") ; CsvReader csvRead = CsvReader.newReader(fileURL, "位置", "pos");
int posIndex =csvRead.getCsvIndex( "位置","pos"); int posIndex = csvRead.getCsvIndex("位置", "pos");
int priIndex = csvRead.getCsvIndex("优先级","pri"); int priIndex = csvRead.getCsvIndex("优先级", "pri");
int hIndex = csvRead.getCsvIndex("高度","h"); int hIndex = csvRead.getCsvIndex("高度", "h");
int wIndex = csvRead.getCsvIndex("宽度","w"); int wIndex = csvRead.getCsvIndex("宽度", "w");
int row = 1; int row = 1;
int newRowCount = 0; int newRowCount = 0;
int existRowCount=0; int existRowCount = 0;
int updateRowCount = 0; int updateRowCount = 0;
List<StoragePos> storagePosList=storagePosManager.findByStorage(storage.getId()); List<StoragePos> storagePosList = storagePosManager.findByStorage(storage.getId());
List<StoragePos> newList=new ArrayList<>(); List<StoragePos> newList = new ArrayList<>();
while(csvRead.readRecord()){ while (csvRead.readRecord()) {
row++; row++;
String[] lineValues = csvRead.getValues(); String[] lineValues = csvRead.getValues();
String posName = lineValues[posIndex]; String posName = lineValues[posIndex];
Integer priority =0; Integer priority = 0;
Integer height =0; Integer height = 0;
Integer width =0; Integer width = 0;
try { try {
priority =Integer.parseInt(lineValues[priIndex]) ; priority = Integer.parseInt(lineValues[priIndex]);
height = Integer.parseInt(lineValues[hIndex]); height = Integer.parseInt(lineValues[hIndex]);
width = Integer.parseInt(lineValues[wIndex]); width = Integer.parseInt(lineValues[wIndex]);
}catch (Exception ex){ } catch (Exception ex) {
log.warn("第"+row+"行中有空白内容,此行忽略"); log.warn("第" + row + "行中有空白内容,此行忽略");
continue; continue;
} }
if(posName.isEmpty() ){ if (posName.isEmpty()) {
log.warn("第"+row+"行中有空白内容,此行忽略"); log.warn("第" + row + "行中有空白内容,此行忽略");
continue; continue;
} }
// StoragePos posInfo = storagePosManager.getByPosName(posName); // StoragePos posInfo = storagePosManager.getByPosName(posName);
StoragePos posInfo =findFormList(storagePosList,posName); StoragePos posInfo = findFormList(storagePosList, posName);
if(posInfo == null){ if (posInfo == null) {
posInfo=new StoragePos(storageId,posName,height,width,priority); posInfo = new StoragePos(storageId, posName, height, width, priority);
newRowCount++; newRowCount++;
newList.add(posInfo); newList.add(posInfo);
}else{ } else {
boolean needUpdate=posInfo.updatePosInfo(storageId,posName,height,width,priority); boolean needUpdate = posInfo.updatePosInfo(storageId, posName, height, width, priority);
if(needUpdate){ if (needUpdate) {
updateRowCount++; updateRowCount++;
storagePosManager.save(posInfo); storagePosManager.save(posInfo);
}else{ } else {
existRowCount++; existRowCount++;
} }
} }
} }
if(newList.size()>0){ if (newList.size() > 0) {
storagePosManager.insertAll(newList); storagePosManager.insertAll(newList);
} }
dataCache.reloadStorage(storage,""); dataCache.reloadStorage(storage, "");
String msg = "读取到["+row+"]行数据:新增【"+newRowCount+"】,已存在【"+existRowCount+"】,更新【" +updateRowCount +"】"; String msg = "读取到[" + row + "]行数据:新增【" + newRowCount + "】,已存在【" + existRowCount + "】,更新【" + updateRowCount + "】";
log.info(msg); log.info(msg);
return msg; return msg;
} }
private StoragePos findFormList(List<StoragePos> list ,String posName)
{ private StoragePos findFormList(List<StoragePos> list, String posName) {
for (StoragePos pos : for (StoragePos pos :
list) { list) {
if( pos.getPosName().equals(posName)){ if (pos.getPosName().equals(posName)) {
return pos; return pos;
} }
} }
......
...@@ -81,6 +81,7 @@ public class StoragePos extends BasePo implements Serializable { ...@@ -81,6 +81,7 @@ public class StoragePos extends BasePo implements Serializable {
*/ */
private List<String> limitPnList; private List<String> limitPnList;
//海康项目小于0时用于锁定料架上的库位,不进行工单挑料
//进料优先级,数字越大优先级越高,例:1-1的优先级为100 仓1-2的优先级200,那么入仓时就会优先进入1-2仓 //进料优先级,数字越大优先级越高,例:1-1的优先级为100 仓1-2的优先级200,那么入仓时就会优先进入1-2仓
private double priority = 0f; private double priority = 0f;
......
package com.neotel.smfcore.hikvision.bean; package com.neotel.smfcore.hikvision.bean;
import com.sun.corba.se.impl.resolver.SplitLocalResolverImpl;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
......
...@@ -424,7 +424,7 @@ public class PanaApiController implements IOpAuthApi, ITaskListener{ ...@@ -424,7 +424,7 @@ public class PanaApiController implements IOpAuthApi, ITaskListener{
} }
} }
}else{ }else{
log.info("没有配置PanaCIM条码检测接口,查找setConfiguration注册的IP 及端口"); //log.info("没有配置PanaCIM条码检测接口,查找setConfiguration注册的IP 及端口");
return null; return null;
} }
} catch (Exception e) { } catch (Exception e) {
...@@ -477,7 +477,7 @@ public class PanaApiController implements IOpAuthApi, ITaskListener{ ...@@ -477,7 +477,7 @@ public class PanaApiController implements IOpAuthApi, ITaskListener{
String result = HttpHelper.postJson(inNotifyApi,params); String result = HttpHelper.postJson(inNotifyApi,params);
log.info("Response Of checkInNotification From PanaCIM:"+result); log.info("Response Of checkInNotification From PanaCIM:"+result);
}else{ }else{
log.info("没有配置PanaCIM接口,无需通知"); //log.info("没有配置PanaCIM接口,无需通知");
} }
} catch (Exception e) { } catch (Exception e) {
...@@ -511,7 +511,7 @@ public class PanaApiController implements IOpAuthApi, ITaskListener{ ...@@ -511,7 +511,7 @@ public class PanaApiController implements IOpAuthApi, ITaskListener{
log.info("Response Of deliverNotification From PanaCIM:"+result); log.info("Response Of deliverNotification From PanaCIM:"+result);
}else{ }else{
log.info("没有配置PanaCIM接口,无需通知"); //log.info("没有配置PanaCIM接口,无需通知");
} }
} catch (Exception e) { } catch (Exception e) {
log.error("出库通知PanaCIM["+outNotifyApi+"]料盘"+task.getBarcode()+" 出错",e); log.error("出库通知PanaCIM["+outNotifyApi+"]料盘"+task.getBarcode()+" 出错",e);
......
...@@ -4,12 +4,9 @@ import com.neotel.smfcore.common.annotation.QueryCondition; ...@@ -4,12 +4,9 @@ import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.BetweenData; import com.neotel.smfcore.common.bean.BetweenData;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy;
import java.io.Serializable; import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Date; import java.util.Date;
import java.util.List;
@ApiModel @ApiModel
public class RoleQueryCriteria implements Serializable { public class RoleQueryCriteria implements Serializable {
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!