Commit 8f158bb5 sunke

料仓库位信息放入缓存

1 个父辈 be279abb
...@@ -222,7 +222,7 @@ public class InquiryShelfBean { ...@@ -222,7 +222,7 @@ public class InquiryShelfBean {
if(bigRfid == null){ if(bigRfid == null){
return null; return null;
} }
ShelfInfo maxLocShelf = null; ShelfInfo minIndexShelf = null;
for (Map<String, ShelfInfo> shelfInfoMap : hSerialShelfMap.values()) { for (Map<String, ShelfInfo> shelfInfoMap : hSerialShelfMap.values()) {
for (ShelfInfo shelf : shelfInfoMap.values()) { for (ShelfInfo shelf : shelfInfoMap.values()) {
String shelfRFID = shelf.getRealRfid(); String shelfRFID = shelf.getRealRfid();
...@@ -234,16 +234,16 @@ public class InquiryShelfBean { ...@@ -234,16 +234,16 @@ public class InquiryShelfBean {
} }
}else{ }else{
//未绑定过的 //未绑定过的
if(maxLocShelf == null){ if(minIndexShelf == null){
maxLocShelf = shelf; minIndexShelf = shelf;
}else if(shelf.getUsedLocCount() > maxLocShelf.getUsedLocCount()){ }else if(shelf.getRfidIndex() < minIndexShelf.getRfidIndex()){
maxLocShelf = shelf; minIndexShelf = shelf;
} }
} }
} }
} }
} }
return maxLocShelf; return minIndexShelf;
} }
/** /**
...@@ -298,24 +298,24 @@ public class InquiryShelfBean { ...@@ -298,24 +298,24 @@ public class InquiryShelfBean {
public ShelfInfo findMaxUsedShelf(String hSerial, String shelfType){ public ShelfInfo findMaxUsedShelf(String hSerial, String shelfType){
Map<String, ShelfInfo> shelfMap = hSerialShelfMap.get(hSerial); Map<String, ShelfInfo> shelfMap = hSerialShelfMap.get(hSerial);
ShelfInfo maxLocShelf = null; ShelfInfo minIndexShelf = null;
for (ShelfInfo shelf : shelfMap.values()) { for (ShelfInfo shelf : shelfMap.values()) {
if(StorageConstants.SHEFL_TYPE.judgeType(shelfType, shelf.getShelfType())){ if(StorageConstants.SHEFL_TYPE.judgeType(shelfType, shelf.getShelfType())){
//同一种料架 //同一种料架
if(maxLocShelf == null){ if(minIndexShelf == null){
maxLocShelf = shelf; minIndexShelf = shelf;
} }
if(shelf.getUsedLocCount() > maxLocShelf.getUsedLocCount()){ if(shelf.getRfidIndex() > minIndexShelf.getRfidIndex()){
maxLocShelf = shelf; minIndexShelf = shelf;
} }
} }
} }
if(maxLocShelf != null){ if(minIndexShelf != null){
log.info("找到类型为["+shelfType+"]库位最多的同种料架["+maxLocShelf.tempRfid()+"]"); log.info("找到类型为["+shelfType+"]最小序号同种料架["+minIndexShelf.tempRfid()+"]");
}else{ }else{
log.info("已没有与["+shelfType+"]类型相同的料架");; log.info("已没有与["+shelfType+"]类型相同的料架");;
} }
return maxLocShelf; return minIndexShelf;
} }
/** /**
...@@ -346,22 +346,22 @@ public class InquiryShelfBean { ...@@ -346,22 +346,22 @@ public class InquiryShelfBean {
//未找到已经有实际RFID的料架,查找库位最多的料架 //未找到已经有实际RFID的料架,查找库位最多的料架
if(shelfInfo == null){ if(shelfInfo == null){
log.info(task.getBarcode() + "未找到实际绑定的["+rfid+"]料架,开始查找库位最多的同种料架["+task.getAppendInfo().getShelfType()+"]"); log.info(task.getBarcode() + "未找到实际绑定的["+rfid+"]料架,开始查找序号最小同种料架["+task.getAppendInfo().getShelfType()+"]");
ShelfInfo maxLocShelf = null; ShelfInfo minIndexShelf = null;
for (ShelfInfo shelf : shelfMap.values()) { for (ShelfInfo shelf : shelfMap.values()) {
if(StorageConstants.SHEFL_TYPE.judgeType(task.getAppendInfo().getShelfType(), shelf.getShelfType())){ if(StorageConstants.SHEFL_TYPE.judgeType(task.getAppendInfo().getShelfType(), shelf.getShelfType())){
//同一种料架 //同一种料架
if(maxLocShelf == null){ if(minIndexShelf == null){
maxLocShelf = shelf; minIndexShelf = shelf;
} }
if(shelf.getUsedLocCount() > maxLocShelf.getUsedLocCount()){ if(shelf.getRfidIndex() > minIndexShelf.getRfidIndex()){
maxLocShelf = shelf; minIndexShelf = shelf;
} }
} }
} }
shelfInfo = maxLocShelf; shelfInfo = minIndexShelf;
if(shelfInfo != null){ if(shelfInfo != null){
log.info(task.getBarcode() + "["+ appendInfo.getTempRfid()+"]未找到rfid=["+rfid+"]的空料架,使用库位最多的同种料架["+shelfInfo.tempRfid()+"]"); log.info(task.getBarcode() + "["+ appendInfo.getTempRfid()+"]未找到rfid=["+rfid+"]的空料架,使用序号最小的同种料架["+shelfInfo.tempRfid()+"]");
}else{ }else{
log.info("已没有与["+rfid+"]类型相同的料架");; log.info("已没有与["+rfid+"]类型相同的料架");;
} }
......
...@@ -202,6 +202,23 @@ public class ShelfInfo { ...@@ -202,6 +202,23 @@ public class ShelfInfo {
} }
/** /**
* 为包装料锁定架位
* @param shelfLoc 架位信息
* @param packageReelId 包装料条码
* @return
*/
public boolean lockForPackage(ShelfLoc shelfLoc, String packageReelId){
ShelfLoc emptyLoc = locMap.get(shelfLoc.getLoc());
if(!emptyLoc.isEmpty()){
log.info("为包装料["+packageReelId+"]锁定C型料架"+tempRfid()+"["+shelfLoc.getLoc()+"]失败,位置为不空");
return false;
}
log.info("为包装料["+packageReelId+"]锁定架位"+tempRfid()+"["+shelfLoc.getLoc()+"]");
emptyLoc.setBarcode(packageReelId);
return true;
}
/**
* 为不需要按顺序摆放的料盘锁定一个架位,如果已经锁定过,返回对应的架位 * 为不需要按顺序摆放的料盘锁定一个架位,如果已经锁定过,返回对应的架位
*/ */
public ShelfLoc lockOneEmptyLoc(String barcode, int reelType, String robotIndex){ public ShelfLoc lockOneEmptyLoc(String barcode, int reelType, String robotIndex){
......
package com.myproject.bean.update; package com.myproject.bean.update;
import com.myproject.bean.BaseMongoBean; import com.myproject.bean.BaseMongoBean;
import com.myproject.bean.json.PlateSizeBean;
import com.myproject.bean.json.UsageItem;
import com.myproject.util.PLATE_SIZE; import com.myproject.util.PLATE_SIZE;
import com.myproject.util.StorageConstants; import com.myproject.util.StorageConstants;
import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.data.annotation.Transient; import org.springframework.data.annotation.Transient;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/** /**
* Created by kangmor on 2015/12/3. * Created by kangmor on 2015/12/3.
...@@ -41,20 +45,26 @@ public class Storage extends BaseMongoBean { ...@@ -41,20 +45,26 @@ public class Storage extends BaseMongoBean {
return boxCount; return boxCount;
} }
/** /**
* 允许放入的料盘尺寸信息 * 使用情况
*/ */
@Transient private Map<String, UsageItem> usageMap = new ConcurrentHashMap<>();
private List<PLATE_SIZE> plateSizes;
// /**
// * 允许放入的料盘尺寸信息
public List<PLATE_SIZE> getPlateSizes() { // */
return plateSizes; // @Transient
} // private List<PLATE_SIZE> plateSizes;
//
public void setPlateSizes(List<PLATE_SIZE> plateSizes) { //
this.plateSizes = plateSizes; // public List<PLATE_SIZE> getPlateSizes() {
} // return plateSizes;
// }
//
// public void setPlateSizes(List<PLATE_SIZE> plateSizes) {
// this.plateSizes = plateSizes;
// }
public String getType() { public String getType() {
...@@ -180,7 +190,6 @@ public class Storage extends BaseMongoBean { ...@@ -180,7 +190,6 @@ public class Storage extends BaseMongoBean {
public boolean canPutInPos(int w, int h, int PosW, int posH){ public boolean canPutInPos(int w, int h, int PosW, int posH){
if(compatibleType == StorageConstants.COMPATIBLE_TYPE.EXACT_MATCH){//完全匹配 if(compatibleType == StorageConstants.COMPATIBLE_TYPE.EXACT_MATCH){//完全匹配
if(w == PosW && h == posH){ if(w == PosW && h == posH){
return true; return true;
...@@ -201,9 +210,9 @@ public class Storage extends BaseMongoBean { ...@@ -201,9 +210,9 @@ public class Storage extends BaseMongoBean {
* 判断料盘是否能够放入该仓库: 0=完全匹配,1=完全兼容,2=同尺寸兼容 * 判断料盘是否能够放入该仓库: 0=完全匹配,1=完全兼容,2=同尺寸兼容
*/ */
public boolean canPutIn(int w, int h){ public boolean canPutIn(int w, int h){
if(plateSizes != null){ if(usageMap != null){
for (PLATE_SIZE plateSize : plateSizes) { for (UsageItem usageItem : usageMap.values()) {
if(canPutInPos(w,h, plateSize.getW(), plateSize.getH())){ if(canPutInPos(w,h, usageItem.getW(), usageItem.getH())){
return true; return true;
} }
} }
...@@ -226,4 +235,70 @@ public class Storage extends BaseMongoBean { ...@@ -226,4 +235,70 @@ public class Storage extends BaseMongoBean {
public void setCompatibleType(StorageConstants.COMPATIBLE_TYPE compatibleType) { public void setCompatibleType(StorageConstants.COMPATIBLE_TYPE compatibleType) {
this.compatibleType = compatibleType; this.compatibleType = compatibleType;
} }
public Map<String, UsageItem> getUsageMap() {
return usageMap;
}
public void setUsageMap(Map<String, UsageItem> usageMap) {
this.usageMap = usageMap;
}
/**
* 使用一个仓位,更新使用情况
*/
public void useOnePos(StoragePos pos){
if(usageMap != null){
String sizeStr = pos.getSizeStr();
UsageItem usageItem = usageMap.get(sizeStr);
if(usageItem != null){
this.emptySlots = this.emptySlots - 1;
int usedCount = usageItem.getUsedCount();
usageItem.setUsedCount(usedCount + 1);
usageMap.put(sizeStr, usageItem);
}
}
}
public void emptyOnePos(StoragePos pos){
if(usageMap != null){
String sizeStr = pos.getSizeStr();
UsageItem usageItem = usageMap.get(sizeStr);
if(usageItem != null){
this.emptySlots = this.emptySlots + 1;
int usedCount = usageItem.getUsedCount();
usageItem.setUsedCount(usedCount - 1);
usageMap.put(sizeStr, usageItem);
}
}
}
public void initUsage(List<PlateSizeBean> plateSizeBeanList){
usageMap = new ConcurrentHashMap<>();
int totalPosCount = 0;
int emptyPosCount = 0;
for (PlateSizeBean plateSizeBean : plateSizeBeanList) {
String sizeStr = plateSizeBean.getSizeStr();
UsageItem usageItem = usageMap.get(sizeStr);
if(usageItem == null){
usageItem = new UsageItem();
usageItem.setW(plateSizeBean.getPlateSize().getW());
usageItem.setH(plateSizeBean.getPlateSize().getH());
}
if(plateSizeBean.getPlateSize().isUsed()){
int usedCount = plateSizeBean.getCount();
usageItem.setUsedCount(usedCount);
usageItem.setTotalCount(usedCount + usageItem.getTotalCount());
}else{
//未使用的数量
int idleCount = plateSizeBean.getCount();
usageItem.setTotalCount(idleCount + usageItem.getTotalCount());
emptyPosCount = emptyPosCount + idleCount;
}
totalPosCount = totalPosCount + plateSizeBean.getCount();
usageMap.put(sizeStr, usageItem);
}
this.setEmptySlots(emptyPosCount);
this.setTotalSlots(totalPosCount);
}
} }
...@@ -187,4 +187,8 @@ public class StoragePos extends BaseMongoBean { ...@@ -187,4 +187,8 @@ public class StoragePos extends BaseMongoBean {
public void setLimitPnList(List<String> limitPnList) { public void setLimitPnList(List<String> limitPnList) {
this.limitPnList = limitPnList; this.limitPnList = limitPnList;
} }
public String getSizeStr(){
return w + "x" + h;
}
} }
...@@ -372,7 +372,7 @@ public class FileUploadController extends BaseFormController { ...@@ -372,7 +372,7 @@ public class FileUploadController extends BaseFormController {
storagePosManager.save(storagePos); storagePosManager.save(storagePos);
} }
} }
dataCache.updateStorage(storage); dataCache.reloadStorage(storage);
String msg = "读取到["+list.size()+"]个位置信息:新增【"+newRowCount+"】更新【" +updateRowCount +"】"; String msg = "读取到["+list.size()+"]个位置信息:新增【"+newRowCount+"】更新【" +updateRowCount +"】";
log.info(msg); log.info(msg);
......
...@@ -85,13 +85,13 @@ public class StorageCloudUpdateController extends BaseUpdateController { ...@@ -85,13 +85,13 @@ public class StorageCloudUpdateController extends BaseUpdateController {
} else { } else {
try { try {
Storage storage = storageUpdateForm.getStorage(); Storage storage = storageUpdateForm.getStorage();
storage = dataCache.updateStorage(storage); storage = dataCache.reloadStorage(storage);
fileUpload.setParam(storage.getId()); fileUpload.setParam(storage.getId());
saveMessage(request, getText("storage.saveSuccess", request.getLocale())); saveMessage(request, getText("storage.saveSuccess", request.getLocale()));
return "redirect:storageUpdate.html?id="+storage.getId(); return "redirect:storageUpdate.html?id="+storage.getId();
} catch (ValidateException e) { } catch (Exception e) {
log.error(e); log.error(e);
String errormsg = getText(e.getMessage(), e.getParams(), request.getLocale()); String errormsg = getText(e.getMessage(), request.getLocale());
log.error(errormsg); log.error(errormsg);
saveError(request, errormsg); saveError(request, errormsg);
} }
......
...@@ -66,13 +66,13 @@ public class StorageUpdateController extends BaseUpdateController { ...@@ -66,13 +66,13 @@ public class StorageUpdateController extends BaseUpdateController {
return getSuccessView(); return getSuccessView();
} else { } else {
try { try {
dataCache.updateStorage(storage); dataCache.reloadStorage(storage);
//fileUpload.setParam(storage.getId()); //fileUpload.setParam(storage.getId());
saveMessage(request, getText("storage.saveSuccess", request.getLocale())); saveMessage(request, getText("storage.saveSuccess", request.getLocale()));
//return "redirect:storageUpdate.html?id="+storage.getId(); //return "redirect:storageUpdate.html?id="+storage.getId();
} catch (ValidateException e) { } catch (Exception e) {
log.error(e); log.error(e);
String errormsg = getText(e.getMessage(), e.getParams(), request.getLocale()); String errormsg = getText(e.getMessage(), request.getLocale());
log.error(errormsg); log.error(errormsg);
saveError(request, errormsg); saveError(request, errormsg);
} }
......
...@@ -203,7 +203,7 @@ public class VirtualBoxController extends BaseController{ ...@@ -203,7 +203,7 @@ public class VirtualBoxController extends BaseController{
} }
storagePosManager.insertAll(posList); storagePosManager.insertAll(posList);
dataCache.updateStorage(virtualStorage); dataCache.reloadStorage(virtualStorage);
return "保存成功"; return "保存成功";
......
...@@ -7,6 +7,7 @@ import com.google.common.collect.Maps; ...@@ -7,6 +7,7 @@ import com.google.common.collect.Maps;
import com.google.common.collect.Multiset; import com.google.common.collect.Multiset;
import com.myproject.bean.CodeBean; import com.myproject.bean.CodeBean;
import com.myproject.bean.json.InventoryItem; import com.myproject.bean.json.InventoryItem;
import com.myproject.bean.json.PlateSizeBean;
import com.myproject.bean.update.*; import com.myproject.bean.update.*;
import com.myproject.dao.mongo.*; import com.myproject.dao.mongo.*;
import com.myproject.exception.ValidateException; import com.myproject.exception.ValidateException;
...@@ -509,9 +510,13 @@ public class DataCache{ ...@@ -509,9 +510,13 @@ public class DataCache{
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<PLATE_SIZE> plateSizes = storagePosManager.distinctPlateSize(storage.getId());
storage.setPlateSizes(plateSizes); List<PlateSizeBean> plateSizeBeanList = storagePosManager.getStoragePosUsage(storage.getId());
storage.initUsage(plateSizeBeanList);
map.put(storage.getCid(), storage); map.put(storage.getCid(), storage);
} }
allStorage = map; allStorage = map;
log.info("加载所有料仓["+all.size()+"]信息到缓存"); log.info("加载所有料仓["+all.size()+"]信息到缓存");
...@@ -524,17 +529,6 @@ public class DataCache{ ...@@ -524,17 +529,6 @@ public class DataCache{
/** /**
* 获取某区域可以放入该尺寸料盘的所有料仓名称
*/
public List<String> getCanPutInStorages(String areaId, int w, int h){
List<String> storageList = Lists.newArrayList();
for(Storage storage : getAllStorage().values()){
storageList.add(storage.getName());
}
return storageList;
}
/**
* 根据 cid 获取料仓信息 * 根据 cid 获取料仓信息
*/ */
public Storage getStorage(String cid){ public Storage getStorage(String cid){
...@@ -559,21 +553,26 @@ public class DataCache{ ...@@ -559,21 +553,26 @@ public class DataCache{
/** /**
* 更新料仓信息 * 更新料仓信息
*/ */
public Storage updateStorage(String cid) throws ValidateException { // public Storage updateStorage(String cid) throws ValidateException {
Storage storage = getStorage(cid); // Storage storage = getStorage(cid);
return updateStorage(storage); // return updateStorage(storage);
} // }
//
/** // /**
* 更新料仓信息 // * 更新料仓信息
*/ // */
public Storage updateStorage(Storage storage) throws ValidateException { // public Storage updateStorage(Storage storage) throws ValidateException {
storage.setTotalSlots(storagePosManager.countTotalStorageSize(storage.getId())); // storage.setTotalSlots(storagePosManager.countTotalStorageSize(storage.getId()));
storage.setEmptySlots(storagePosManager.countEmptyStorageSize(storage.getId())); // storage.setEmptySlots(storagePosManager.countEmptyStorageSize(storage.getId()));
storageManager.save(storage); // storageManager.save(storage);
List<PLATE_SIZE> plateSizes = storagePosManager.distinctPlateSize(storage.getId()); // getAllStorage().put(storage.getCid(), storage);
storage.setPlateSizes(plateSizes); // return storage;
getAllStorage().put(storage.getCid(), storage); // }
public Storage reloadStorage(Storage storage){
List<PlateSizeBean> plateSizeBeanList = storagePosManager.getStoragePosUsage(storage.getId());
storage.initUsage(plateSizeBeanList);
allStorage.put(storage.getCid(), storage);
return storage; return storage;
} }
...@@ -681,7 +680,24 @@ public class DataCache{ ...@@ -681,7 +680,24 @@ public class DataCache{
/** /**
* 修改库存,出库为负,入库为正 * 修改库存,出库为负,入库为正
*/ */
public int updateInventory(String cid, String partNumber, int amount){ 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){
//出库
amount = - barcode.getAmount();
storage.emptyOnePos(pos);
}else{
//入库
amount = barcode.getAmount();
storage.useOnePos(pos);
}
allStorage.put(cid, storage);
if(amount != 0){ if(amount != 0){
InventoryItem inventoryItem = getStorageInventoryByPartNumber(cid,partNumber); InventoryItem inventoryItem = getStorageInventoryByPartNumber(cid,partNumber);
if(inventoryItem == null){ if(inventoryItem == null){
......
...@@ -1036,21 +1036,25 @@ public class QisdaApiController extends BaseController { ...@@ -1036,21 +1036,25 @@ public class QisdaApiController extends BaseController {
private List<DataLog> checkOutTail(OutItem outItem){ private List<DataLog> checkOutTail(OutItem outItem){
List<DataLog> tasks = new ArrayList<>(); List<DataLog> tasks = new ArrayList<>();
if(outItem.getSendQty() > outItem.getQty()){
//出经发完料
return tasks;
}
//再绑定一遍 //再绑定一遍
firstBindCutReel(outItem); firstBindCutReel(outItem);
secondBindCutReel(outItem); secondBindCutReel(outItem);
realBindReel(outItem); realBindReel(outItem);
List<StoragePos> bindPosList = storagePosDao.findBindList(outItem.getSo(), outItem.getSlotlocation()); List<StoragePos> bindPosList = storagePosDao.findBindList(outItem.getSo(), outItem.getSlotlocation());
//没有顺序 //没有顺序
int outQty = outItem.getOutQty(); int sendQty = outItem.getSendQty();
for (StoragePos pos : bindPosList) { for (StoragePos pos : bindPosList) {
Barcode posBarcode = pos.getBarcode(); Barcode posBarcode = pos.getBarcode();
DataLog task = newTask(outItem, pos); DataLog task = newTask(outItem, pos);
task = InquiryShelfBean.addUnlimitLoc(task, outItem); task = InquiryShelfBean.addUnlimitLoc(task, outItem);
task = dataLogDao.save(task); task = dataLogDao.save(task);
tasks.add(task); tasks.add(task);
outQty = outQty + posBarcode.getAmount(); sendQty = sendQty + posBarcode.getAmount();
if(outQty > outItem.getQty()){ if(sendQty > outItem.getQty()){
break; break;
} }
} }
...@@ -1064,8 +1068,8 @@ public class QisdaApiController extends BaseController { ...@@ -1064,8 +1068,8 @@ public class QisdaApiController extends BaseController {
secondBindCutReel(outItem); secondBindCutReel(outItem);
realBindReel(outItem); realBindReel(outItem);
if(outItem.getOutQty() > 0){ if(outItem.getSendQty() > 0){
//出经出完 //出经发完料
return tasks; return tasks;
} }
......
...@@ -207,7 +207,7 @@ public class QisdaDeviceController extends BaseController { ...@@ -207,7 +207,7 @@ public class QisdaDeviceController extends BaseController {
//未找到,说明是未绑定过的新料架,找相同类型的进行绑定 //未找到,说明是未绑定过的新料架,找相同类型的进行绑定
//未找到已经有实际RFID的料架,查找库位最多的料架 //未找到已经有实际RFID的料架,查找库位最多的料架
if(bigShelf == null){ if(bigShelf == null){
log.info("未找到实际绑定的["+bigRfid+"]料架,开始查找库位最多的C型料架"); log.info("未找到实际绑定的["+bigRfid+"]料架,开始查找序号最小的C型料架");
ShelfInfo maxLocShelf = inquiryShelfBean.findMaxUsedShelf(hSerial, StorageConstants.SHEFL_TYPE.C); ShelfInfo maxLocShelf = inquiryShelfBean.findMaxUsedShelf(hSerial, StorageConstants.SHEFL_TYPE.C);
if(maxLocShelf != null){ if(maxLocShelf != null){
bigShelf = maxLocShelf; bigShelf = maxLocShelf;
...@@ -283,7 +283,9 @@ public class QisdaDeviceController extends BaseController { ...@@ -283,7 +283,9 @@ public class QisdaDeviceController extends BaseController {
bigLoc = shelfLoc.getLoc() + ""; bigLoc = shelfLoc.getLoc() + "";
} }
}else{ }else{
//尾料,不需要固定位置 //尾料,不需要固定位置,返回机器人架位的同时,锁定此位置
bigShelf.lockForPackage(shelfLoc,barcode);
InquiryShelfBean.updateShelfInfo(bigShelf);
bigLoc = shelfLoc.getLoc() + ""; bigLoc = shelfLoc.getLoc() + "";
} }
} }
......
...@@ -600,7 +600,7 @@ public class StorageDataController extends BaseController { ...@@ -600,7 +600,7 @@ public class StorageDataController extends BaseController {
taskService.addPutInTaskToExecute(theStorage, barcode, pos); taskService.addPutInTaskToExecute(theStorage, barcode, pos);
}else{ }else{
resultMap.put("result","104"); resultMap.put("result","104");
errorMsg = "未找到可用的仓位"; errorMsg = "未找到可用的["+barcode.getPlateSize() + "x" + barcode.getHeight()+"]仓位";
resultMap.put("msg",errorMsg); resultMap.put("msg",errorMsg);
} }
} catch (ValidateException e) { } catch (ValidateException e) {
...@@ -661,39 +661,55 @@ public class StorageDataController extends BaseController { ...@@ -661,39 +661,55 @@ public class StorageDataController extends BaseController {
return componentList.getList(); return componentList.getList();
} }
@RequestMapping("/getStorageUseage") @RequestMapping("/getStorage")
@ResponseBody @ResponseBody
public List<PlateSizeBean> getStorageUseage(HttpServletRequest request, HttpServletResponse response){ public Storage getStorageUseage(HttpServletRequest request, HttpServletResponse response){
String cid = request.getParameter("cid"); String cid = request.getParameter("cid");
Storage storage = dataCache.getStorage(cid); return dataCache.getStorage(cid);
if(storage == null){ }
return null; //
} // @RequestMapping("/listStorageUseage")
String storageId = storage.getId(); // @ResponseBody
return storagePosManager.getStoragePosUsage(storageId); // public Map<String,List<PlateSizeBean>> listStorageUseage(HttpServletRequest request, HttpServletResponse response){
} // String cids = request.getParameter("cids");
// Collection<String> cidList;
// if(Strings.isNullOrEmpty(cids)){
// cidList = dataCache.getAllStorage().keySet();
// }else{
// cidList = Lists.newArrayList(cids.split(","));
// }
// Map<String, List<PlateSizeBean>> map= Maps.newHashMap();
// for (String cid : cidList) {
// Storage storage = dataCache.getStorage(cid);
// if(storage == null){
// continue;
// }
// String storageId = storage.getId();
// List<PlateSizeBean> usage = storagePosManager.getStoragePosUsage(storageId);
// map.put(cid, usage);
// }
// return map;
// }
@RequestMapping("/listStorageUseage") @RequestMapping("/storageList")
@ResponseBody @ResponseBody
public Map<String,List<PlateSizeBean>> listStorageUseage(HttpServletRequest request, HttpServletResponse response){ public Collection<Storage> usageMap(HttpServletRequest request, HttpServletResponse response){
String cids = request.getParameter("cids"); String cids = request.getParameter("cids");
Collection<String> cidList; Collection<Storage> storageList = null;
if(Strings.isNullOrEmpty(cids)){ if(Strings.isNullOrEmpty(cids)){
cidList = dataCache.getAllStorage().keySet(); storageList = dataCache.getAllStorage().values();
}else{ }else{
cidList = Lists.newArrayList(cids.split(",")); storageList = new ArrayList<>();
} for (String cid : Lists.newArrayList(cids.split(","))) {
Map<String, List<PlateSizeBean>> map= Maps.newHashMap();
for (String cid : cidList) {
Storage storage = dataCache.getStorage(cid); Storage storage = dataCache.getStorage(cid);
if(storage == null){ if(storage == null){
continue; continue;
} }
String storageId = storage.getId(); storageList.add(storage);
List<PlateSizeBean> usage = storagePosManager.getStoragePosUsage(storageId);
map.put(cid, usage);
} }
return map; }
return storageList;
} }
@RequestMapping("/deviceInfos") @RequestMapping("/deviceInfos")
......
...@@ -1012,6 +1012,8 @@ public class TaskService implements ITaskService { ...@@ -1012,6 +1012,8 @@ public class TaskService implements ITaskService {
} }
if(storageTask != null){ if(storageTask != null){
log.info("出库首盘料任务"+storageTask.getBarcode()+"["+storageTask.getPosName()+"]" + storageTask.getAppendInfo()); log.info("出库首盘料任务"+storageTask.getBarcode()+"["+storageTask.getPosName()+"]" + storageTask.getAppendInfo());
}else{
return null;
} }
//如果当前任务(执行中或已完成出库但未放到料架上的任务)的C或D料架数量大于2个,不允许出库 //如果当前任务(执行中或已完成出库但未放到料架上的任务)的C或D料架数量大于2个,不允许出库
...@@ -1035,12 +1037,17 @@ public class TaskService implements ITaskService { ...@@ -1035,12 +1037,17 @@ public class TaskService implements ITaskService {
} }
} }
} }
if(!shelfNameList.contains(storageTask.getAppendInfo().getTempRfid())){ if(!shelfNameList.contains(storageTask.getAppendInfo().getTempRfid())){
if(storageTask.getAppendInfo().isCShelfTask()){ for (String shelfName : shelfNameList) {
//判断未完成的工单料架中是否有大料架
if(StorageConstants.SHEFL_TYPE.isCShelf(shelfName)){
//大料(C料架)只能同时出一个架子,不然到包装料工位时无法切换 //大料(C料架)只能同时出一个架子,不然到包装料工位时无法切换
log.info("未完成的工单料架为:["+String.join(",",shelfNameList)+ "]大料架任务["+storageTask.getBarcode()+"]暂停出库,以免包装工位无法切换"); log.info("未完成的工单料架为:["+String.join(",",shelfNameList)+ "]大料架任务["+storageTask.getBarcode()+"]暂停出库,以免包装工位无法切换");
return null; return null;
} }
}
//未完成的工单任务料架数量>2,且未包含此任务,任务先不出,等到只有一个料架时再说 //未完成的工单任务料架数量>2,且未包含此任务,任务先不出,等到只有一个料架时再说
if(shelfNameList.size() >= 2){ if(shelfNameList.size() >= 2){
log.info("未完成的工单任务料架为:["+String.join(",",shelfNameList)+ "]任务"+storageTask.getBarcode()+"暂停出库"); log.info("未完成的工单任务料架为:["+String.join(",",shelfNameList)+ "]任务"+storageTask.getBarcode()+"暂停出库");
...@@ -1688,8 +1695,8 @@ public class TaskService implements ITaskService { ...@@ -1688,8 +1695,8 @@ public class TaskService implements ITaskService {
task.setAppendInfo(barcode.getAppendInfo()); task.setAppendInfo(barcode.getAppendInfo());
task.setNum(barcode.getAmount()); task.setNum(barcode.getAmount());
dataCache.updateInventory(task.getCid(), barcode.getPartNumber(),barcode.getAmount()); dataCache.updateInventory(pos,barcode);
dataCache.updateStorage(task.getCid()); //dataCache.updateStorage(task.getCid());
}else{ }else{
barcode = pos.getBarcode(); barcode = pos.getBarcode();
...@@ -1707,8 +1714,8 @@ public class TaskService implements ITaskService { ...@@ -1707,8 +1714,8 @@ public class TaskService implements ITaskService {
storagePosManager.save(pos); storagePosManager.save(pos);
dataCache.updateInventory(task.getCid(), barcode.getPartNumber(), - barcode.getAmount()); dataCache.updateInventory(pos, barcode);
dataCache.updateStorage(task.getCid()); //dataCache.updateStorage(task.getCid());
} }
...@@ -1846,17 +1853,17 @@ public class TaskService implements ITaskService { ...@@ -1846,17 +1853,17 @@ public class TaskService implements ITaskService {
/** /**
* 仓位状态 * 仓位状态
*/ */
componentPos.setBarcode(componentBarcode);
componentPos.setUsed(true);
componentPos.setCanCheckOutTime(canCheckOutTime);
storagePosManager.save(componentPos);
//更新缓存中的库存信息 //更新缓存中的库存信息
int stockReel = dataCache.updateInventory(task.getCid(), componentBarcode.getPartNumber(),componentBarcode.getAmount()); int stockReel = dataCache.updateInventory(storagePos,componentBarcode);
dataCache.updateStorage(task.getCid()); //dataCache.updateStorage(task.getCid());
log.info("入库"+componentBarcode.getPartNumber()+"["+componentBarcode.getBarcode()+"]当前库存:"+stockReel+"到"+componentPos.getPosName()+"可出库时间:"+new Date(canCheckOutTime)); log.info("入库"+componentBarcode.getPartNumber()+"["+componentBarcode.getBarcode()+"]当前库存:"+stockReel+"到"+componentPos.getPosName()+"可出库时间:"+new Date(canCheckOutTime));
componentPos.setBarcode(componentBarcode);
componentPos.setUsed(true);
componentPos.setCanCheckOutTime(canCheckOutTime);
storagePosManager.save(componentPos);
} }
}else{//条码不是夹具 }else{//条码不是夹具
...@@ -1891,9 +1898,9 @@ public class TaskService implements ITaskService { ...@@ -1891,9 +1898,9 @@ public class TaskService implements ITaskService {
storagePosManager.save(storagePos); storagePosManager.save(storagePos);
//更新缓存中的库存信息 //更新缓存中的库存信息
dataCache.updateInventory(task.getCid(), task.getPartNumber(),barcode.getAmount()); dataCache.updateInventory(storagePos,barcode);
dataCache.updateStorage(task.getCid()); //dataCache.updateStorage(task.getCid());
// //
// Storage storage = dataCache.getStorage(task.getCid()); // Storage storage = dataCache.getStorage(task.getCid());
// if(storage != null){ // if(storage != null){
...@@ -1908,7 +1915,6 @@ public class TaskService implements ITaskService { ...@@ -1908,7 +1915,6 @@ public class TaskService implements ITaskService {
dataLogDao.save(task); dataLogDao.save(task);
finishedTaskMap.put(task.getBarcode(),task); finishedTaskMap.put(task.getBarcode(),task);
updateInQisdaData(barcode, task); updateInQisdaData(barcode, task);
...@@ -2005,9 +2011,8 @@ public class TaskService implements ITaskService { ...@@ -2005,9 +2011,8 @@ public class TaskService implements ITaskService {
String outItemId = appendInfo.getOutItemId(); String outItemId = appendInfo.getOutItemId();
log.info("出库完成,清空仓位: " + storagePos.getId() + "[" + storagePos.getPosName() + "]outItemId"+ outItemId); log.info("出库完成,清空仓位: " + storagePos.getId() + "[" + storagePos.getPosName() + "]outItemId"+ outItemId);
dataCache.updateStorage(task.getCid());
//更新缓存中的库存信息 //更新缓存中的库存信息
dataCache.updateInventory(task.getCid(), task.getPartNumber(),0-task.getNum()); dataCache.updateInventory(storagePos,barcode);
//记录日志 //记录日志
task.setStatus(StorageConstants.OP_STATUS.OUTBOX.name()); task.setStatus(StorageConstants.OP_STATUS.OUTBOX.name());
...@@ -2015,7 +2020,7 @@ public class TaskService implements ITaskService { ...@@ -2015,7 +2020,7 @@ public class TaskService implements ITaskService {
finishedTaskMap.put(task.getBarcode(),task); finishedTaskMap.put(task.getBarcode(),task);
dataCache.updateStorage(task.getCid()); //dataCache.updateStorage(task.getCid());
finishedOrderTask(task); finishedOrderTask(task);
//checkTaskSetFinished(task); //checkTaskSetFinished(task);
......
...@@ -52,7 +52,8 @@ ...@@ -52,7 +52,8 @@
</form> </form>
<display:table name="searchCriteria.pageList" requestURI="" <display:table name="searchCriteria.pageList" requestURI=""
sort="external" sort="external"
defaultsort="1" class="table table-striped table-bordered table-hover" export="false" id="alarmInfo"> defaultsort="1" class="table table-striped table-bordered table-hover" export="true" id="alarmInfo">
<display:setProperty name="export.csv.filename" value="alarmInfoList.csv" />
<display:column titleKey="alarmInfo.position" sortable="true" sortProperty="storageName"> <display:column titleKey="alarmInfo.position" sortable="true" sortProperty="storageName">
${alarmInfo.storageName}<c:if test="${alarmInfo.boxId != 0}">-BOX ${alarmInfo.boxId}</c:if> ${alarmInfo.storageName}<c:if test="${alarmInfo.boxId != 0}">-BOX ${alarmInfo.boxId}</c:if>
</display:column> </display:column>
......
...@@ -84,7 +84,7 @@ ...@@ -84,7 +84,7 @@
<div class="table-scrollable"> <div class="table-scrollable">
<display:table name="searchCriteria.pageList" cellspacing="0" cellpadding="0" requestURI="componentSearch.html?type=${type}" <display:table name="searchCriteria.pageList" cellspacing="0" cellpadding="0" requestURI="componentSearch.html?type=${type}"
sort="external" sort="external"
defaultsort="1" class="table table-striped table-bordered table-hover" export="false" id="component"> defaultsort="1" class="table table-striped table-bordered table-hover" export="true" id="component">
<%--<display:column property="name" titleKey="component.name"/>--%> <%--<display:column property="name" titleKey="component.name"/>--%>
<display:column titleKey="component.partNumber"> <display:column titleKey="component.partNumber">
<a href="${ctx}/component/componentUpdate.html?type=${component.type}&id=${component.id}">${component.partNumber}</a> <a href="${ctx}/component/componentUpdate.html?type=${component.type}&id=${component.id}">${component.partNumber}</a>
......
...@@ -761,27 +761,10 @@ ...@@ -761,27 +761,10 @@
//刷新库存情况 //刷新库存情况
function flushUsageItem(){ function flushUsageItem(){
$.post("${ctx}/service/store/listStorageUseage", {cids:"${cids}"}, function (dataMap) { $.post("${ctx}/service/store/storageList", {cids:"${cids}"}, function (storageList) {
for(var cid in dataMap){ for(var i in storageList){
var data = dataMap[cid]; var storage = storageList[i];
var sizeData = {}; var sizeData = storage.usageMap;
for(var i in data){
var itemData = data[i];
var sizeItem = sizeData[itemData.sizeStr];
if(!sizeItem){
sizeItem = {};
sizeItem["w"] = itemData.plateSize.w;
sizeItem["h"] = itemData.plateSize.h;
sizeItem["usedCount"] = 0;
sizeItem["idleCount"] = 0;
}
if(itemData.plateSize.used){
sizeItem["usedCount"] = itemData.count;
}else{
sizeItem["idleCount"] = itemData.count;
}
sizeData[itemData.sizeStr] = sizeItem;
}
var sizeList = new Array(); var sizeList = new Array();
for(var sizeStr in sizeData){ for(var sizeStr in sizeData){
...@@ -797,10 +780,12 @@ ...@@ -797,10 +780,12 @@
return w1 - w2; return w1 - w2;
}); });
var cid = storage.cid;
for(var i in sizeList){ for(var i in sizeList){
var sizeItem = sizeList[i]; var sizeItem = sizeList[i];
var sizeStr = sizeItem.w + "x" + sizeItem.h; var sizeStr = sizeItem.sizeStr;
var html = getItemBar(sizeItem["w"],sizeItem["h"],sizeItem["usedCount"],sizeItem["idleCount"]); var idleCount = sizeItem.totalCount - sizeItem.usedCount;
var html = getItemBar(sizeItem["w"],sizeItem["h"],sizeItem["usedCount"],idleCount);
var sizeDom = $("#"+cid+" ."+sizeStr); var sizeDom = $("#"+cid+" ."+sizeStr);
if(sizeDom.length == 0){ if(sizeDom.length == 0){
......
...@@ -470,32 +470,16 @@ ...@@ -470,32 +470,16 @@
} }
function flushUsageItem(){ function flushUsageItem(){
$.post("${ctx}/service/store/getStorageUseage", {cid: '${show}'}, function (data) { $.post("${ctx}/service/store/getStorage", {cid: '${show}'}, function (storage) {
if(!isLimitOpt(data)){ if(!isLimitOpt(storage)){
var sizeData = {}; var sizeData = storage.usageMap;
for(var i in data){
var itemData = data[i];
var sizeItem = sizeData[itemData.sizeStr];
if(!sizeItem){
sizeItem = {};
sizeItem["w"] = itemData.plateSize.w;
sizeItem["h"] = itemData.plateSize.h;
sizeItem["usedCount"] = 0;
sizeItem["idleCount"] = 0;
}
if(itemData.plateSize.used){
sizeItem["usedCount"] = itemData.count;
}else{
sizeItem["idleCount"] = itemData.count;
}
sizeData[itemData.sizeStr] = sizeItem;
}
var cid = storage.cid;
var totalCount = 0; var totalCount = 0;
for(var sizeStr in sizeData){ for(var sizeStr in sizeData){
sizeItem = sizeData[sizeStr]; var sizeItem = sizeData[sizeStr];
totalCount = totalCount + sizeItem["usedCount"] + sizeItem["idleCount"]; var idleCount = sizeItem.totalCount - sizeItem.usedCount;
var html = getItemBar(sizeItem["w"],sizeItem["h"],sizeItem["usedCount"],sizeItem["idleCount"]); var html = getItemBar(sizeItem["w"],sizeItem["h"],sizeItem["usedCount"],idleCount);
var sizeDom = $("#"+sizeStr); var sizeDom = $("#"+sizeStr);
if(sizeDom.length == 0){ if(sizeDom.length == 0){
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!