Commit cbfa410d sunke

线边仓间入库类型修正

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