Commit 12c1121a hjh

UID出库增加线体和PN出库回显

1 个父辈 fa9b0cbe
...@@ -83,6 +83,9 @@ public class Barcode extends BasePo implements Serializable { ...@@ -83,6 +83,9 @@ public class Barcode extends BasePo implements Serializable {
* 盘高 * 盘高
*/ */
private int height = 0; private int height = 0;
/**
* 供应商
*/
private String provider; private String provider;
/** /**
* 批次 * 批次
...@@ -561,4 +564,7 @@ public class Barcode extends BasePo implements Serializable { ...@@ -561,4 +564,7 @@ public class Barcode extends BasePo implements Serializable {
} }
} }
} }
public String getPartNumberAndProvider(){
return this.partNumber+"_"+this.provider;
}
} }
...@@ -468,10 +468,12 @@ public class DataCache { ...@@ -468,10 +468,12 @@ public class DataCache {
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.getPartNumberAndProvider(), item);
// resultMap.put(item.getPartNumber(), item);
} }
} else { } else {
resultMap.put(item.getPartNumber(), item); resultMap.put(item.getPartNumberAndProvider(), item);
// resultMap.put(item.getPartNumber(), item);
} }
} }
return resultMap; return resultMap;
...@@ -488,7 +490,9 @@ public class DataCache { ...@@ -488,7 +490,9 @@ public class DataCache {
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()); String provider = storageInventoryItem.getProvider();
InventoryItem pnInventoryItem = resultMap.get(storageInventoryItem.getPartNumberAndProvider());
// 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());
...@@ -498,12 +502,13 @@ public class DataCache { ...@@ -498,12 +502,13 @@ public class DataCache {
pnInventoryItem.setStorageId(null); pnInventoryItem.setStorageId(null);
} }
pnInventoryItem.setPartNumber(partNumber); pnInventoryItem.setPartNumber(partNumber);
pnInventoryItem.setProvider(provider);
pnInventoryItem.setStockCount(pnInventoryItem.getStockCount() + storageInventoryItem.getStockCount()); pnInventoryItem.setStockCount(pnInventoryItem.getStockCount() + storageInventoryItem.getStockCount());
pnInventoryItem.setLockCount(pnInventoryItem.getLockCount() + storageInventoryItem.getLockCount()); pnInventoryItem.setLockCount(pnInventoryItem.getLockCount() + storageInventoryItem.getLockCount());
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(storageInventoryItem.getPartNumberAndProvider(),pnInventoryItem);
resultMap.put(partNumber,pnInventoryItem); // resultMap.put(partNumber,pnInventoryItem);
} }
} }
return resultMap; return resultMap;
...@@ -523,10 +528,13 @@ public class DataCache { ...@@ -523,10 +528,13 @@ public class DataCache {
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);
// 添加供货商
partNumberInventoryItem.setProvider("");
} }
return partNumberInventoryItem; return partNumberInventoryItem;
} }
......
...@@ -18,6 +18,13 @@ public class InventoryItem { ...@@ -18,6 +18,13 @@ public class InventoryItem {
*/ */
private String partNumber; private String partNumber;
//加个字段(供应商)
/**
* 供货商编号
*/
private String provider;
/** /**
* 库存数量 * 库存数量
*/ */
...@@ -154,4 +161,8 @@ public class InventoryItem { ...@@ -154,4 +161,8 @@ public class InventoryItem {
public void setLockCount(int lockCount) { public void setLockCount(int lockCount) {
this.lockCount = lockCount; this.lockCount = lockCount;
} }
public String getPartNumberAndProvider(){
return this.partNumber+"_"+this.provider;
}
} }
...@@ -704,6 +704,10 @@ public class StoragePosController { ...@@ -704,6 +704,10 @@ public class StoragePosController {
if (checkOutDto.getSingleOut() == null) { if (checkOutDto.getSingleOut() == null) {
checkOutDto.setSingleOut(true + ""); checkOutDto.setSingleOut(true + "");
} }
// 判断线体是否为空
if (StringUtils.isNotEmpty(checkOutDto.getLine())) {
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"线体"});
}
String isSingleOutStr = checkOutDto.getSingleOut(); String isSingleOutStr = checkOutDto.getSingleOut();
boolean isSingleOut = Boolean.valueOf(isSingleOutStr); boolean isSingleOut = Boolean.valueOf(isSingleOutStr);
...@@ -724,9 +728,8 @@ public class StoragePosController { ...@@ -724,9 +728,8 @@ public class StoragePosController {
// if(!result) { // if(!result) {
// throw new ValidateException("smfcore.error.getMaterialLot.out", "条码[{0}]验证失败,无法出库", new String[]{pos.getBarcode().getBarcode()}); // throw new ValidateException("smfcore.error.getMaterialLot.out", "条码[{0}]验证失败,无法出库", new String[]{pos.getBarcode().getBarcode()});
// } // }
log.info("出库料仓【" + storage.getName() + "_" + storage.getCid() + "】位置仓位【" + pos.getPosName() + "】"); log.info("出库料仓【" + storage.getName() + "_" + storage.getCid() + "】位置仓位【" + pos.getPosName() + "】");
String outResult = taskService.checkout(storage, pos, isSingleOut,SecurityUtils.getCurrentUsername(),null,ExtendType.MANUAL_CHECKOUT); String outResult = taskService.checkout(storage, pos, isSingleOut,SecurityUtils.getCurrentUsername(),null,ExtendType.MANUAL_CHECKOUT,checkOutDto.getLine());
if (!Strings.isNullOrEmpty(outResult)) { if (!Strings.isNullOrEmpty(outResult)) {
throw new ValidateException("smfcore.error", outResult); throw new ValidateException("smfcore.error", outResult);
} }
......
...@@ -5,8 +5,11 @@ import lombok.Data; ...@@ -5,8 +5,11 @@ import lombok.Data;
@Data @Data
public class CheckOutDto { public class CheckOutDto {
@ApiModelProperty("库位ID号 ") @ApiModelProperty("库位ID号 ")
private String[] pids; private String[] pids;
@ApiModelProperty("是否是单盘出库") @ApiModelProperty("是否是单盘出库")
private String singleOut; private String singleOut;
@ApiModelProperty("线体")
private String line;
} }
...@@ -12,6 +12,9 @@ public class InventoryItemDto implements Serializable { ...@@ -12,6 +12,9 @@ public class InventoryItemDto implements Serializable {
@ApiModelProperty("物编") @ApiModelProperty("物编")
private String partNumber; private String partNumber;
@ApiModelProperty("供应商")
private String provider;
@ApiModelProperty("库存数量") @ApiModelProperty("库存数量")
private int stockCount = 0; private int stockCount = 0;
......
...@@ -12,6 +12,9 @@ public class TacticsOutDto implements Serializable { ...@@ -12,6 +12,9 @@ public class TacticsOutDto implements Serializable {
@ApiModelProperty("物编") @ApiModelProperty("物编")
private String partNumber; private String partNumber;
@ApiModelProperty("供应商")
private String provider;
@ApiModelProperty("出库盘数") @ApiModelProperty("出库盘数")
private Integer plateNumber; private Integer plateNumber;
......
...@@ -33,6 +33,10 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> { ...@@ -33,6 +33,10 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
StoragePos findPartNumberInStorages(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType); StoragePos findPartNumberInStorages(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType);
StoragePos findPartNumberAndProviderInStorages(List<String> storageIdList, String pn, String provider,Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType);
StoragePos findPartNumberAndProviderNumberInStorages(List<String> storageIdList,String labelId, String pn,String provider, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType);
StoragePos findPartNumberInStorages(List<String> storageIdList,String labelId, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType); StoragePos findPartNumberInStorages(List<String> storageIdList,String labelId, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType);
StoragePos findPartNumberInStorages(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType,String brand); StoragePos findPartNumberInStorages(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType,String brand);
......
...@@ -46,10 +46,10 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -46,10 +46,10 @@ public class StoragePosManagerImpl implements IStoragePosManager {
private DataCache dataCache; private DataCache dataCache;
*/ */
@Override @Override
public List<PlateSizeBean> getStoragePosUsage(String storageId){ public List<PlateSizeBean> getStoragePosUsage(String storageId) {
Aggregation agg = Aggregation.newAggregation( Aggregation agg = Aggregation.newAggregation(
Aggregation.match(Criteria.where("storageId").is(storageId).and("enabled").is(true)), Aggregation.match(Criteria.where("storageId").is(storageId).and("enabled").is(true)),
Aggregation.group("w","h","used").count().as("count"), Aggregation.group("w", "h", "used").count().as("count"),
Aggregation.project("count").and("plateSize").previousOperation() Aggregation.project("count").and("plateSize").previousOperation()
); );
AggregationResults<PlateSizeBean> results = storagePosDao.getMongoTemplate().aggregate(agg, StoragePos.class, PlateSizeBean.class); AggregationResults<PlateSizeBean> results = storagePosDao.getMongoTemplate().aggregate(agg, StoragePos.class, PlateSizeBean.class);
...@@ -58,30 +58,32 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -58,30 +58,32 @@ public class StoragePosManagerImpl implements IStoragePosManager {
} }
@Override @Override
public Map<String, InventoryItem> getInventory(String storageId){ public Map<String, InventoryItem> getInventory(String storageId) {
return getInventory(-1, storageId); return getInventory(-1, storageId);
} }
private List<InventoryItem> inventory(int type,String... storageIds){ private List<InventoryItem> inventory(int type, String... storageIds) {
Criteria c = Criteria.where("barcode").exists(true).and("storageId").in(storageIds); Criteria c = Criteria.where("barcode").exists(true).and("storageId").in(storageIds);
if(type != -1){ if (type != -1) {
c = c.and("barcode.type").is(type); c = c.and("barcode.type").is(type);
} }
Aggregation agg = Aggregation.newAggregation( Aggregation agg = Aggregation.newAggregation(
Aggregation.match(c), Aggregation.match(c),
Aggregation.group("barcode.partNumber").sum("barcode.amount").as("stockCount").count().as("stockReel"), Aggregation.group("barcode.partNumber")
Aggregation.project("stockCount", "stockReel").and("partNumber").previousOperation() .first("barcode.provider").as("provider")
.sum("barcode.amount").as("stockCount").count().as("stockReel"),
Aggregation.project("stockCount", "stockReel", "provider").and("partNumber").previousOperation()
); );
AggregationResults<InventoryItem> results = storagePosDao.getMongoTemplate().aggregate(agg, StoragePos.class, InventoryItem.class); AggregationResults<InventoryItem> results = storagePosDao.getMongoTemplate().aggregate(agg, StoragePos.class, InventoryItem.class);
return results.getMappedResults(); return results.getMappedResults();
} }
private List<InventoryItem> lockInventory(int type,String... storageIds){ private List<InventoryItem> lockInventory(int type, String... storageIds) {
//被锁定的仓位 //被锁定的仓位
//TODO:这里还需要去掉被指定批次锁定的,因为出错,暂时不加了.. //TODO:这里还需要去掉被指定批次锁定的,因为出错,暂时不加了..
Criteria c = Criteria.where("barcode").exists(true).and("storageId").in(storageIds) Criteria c = Criteria.where("barcode").exists(true).and("storageId").in(storageIds)
.andOperator(Criteria.where("canCheckOutTime").gt(System.currentTimeMillis())); .andOperator(Criteria.where("canCheckOutTime").gt(System.currentTimeMillis()));
if(type != -1){ if (type != -1) {
c = c.and("barcode.type").is(type); c = c.and("barcode.type").is(type);
} }
...@@ -94,47 +96,43 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -94,47 +96,43 @@ public class StoragePosManagerImpl implements IStoragePosManager {
return results.getMappedResults(); return results.getMappedResults();
} }
private Map<String, InventoryItem> getInventory(int type,String... storageIds){ private Map<String, InventoryItem> getInventory(int type, String... storageIds) {
Map<String, InventoryItem> inventoryMap = Maps.newHashMap(); Map<String, InventoryItem> inventoryMap = Maps.newHashMap();
List<InventoryItem> inventory = inventory(type,storageIds); List<InventoryItem> inventory = inventory(type, storageIds);
List<InventoryItem> lockInventory = lockInventory(type, storageIds); List<InventoryItem> lockInventory = lockInventory(type, storageIds);
for (InventoryItem inventoryItem : inventory) { for (InventoryItem inventoryItem : inventory) {
inventoryMap.put(inventoryItem.getPartNumber(),inventoryItem); inventoryMap.put(inventoryItem.getPartNumberAndProvider(), inventoryItem);
} }
for (InventoryItem lockInventoryItem : lockInventory) { for (InventoryItem lockInventoryItem : lockInventory) {
String partNumber = lockInventoryItem.getPartNumber(); InventoryItem inventoryItem = inventoryMap.get(lockInventoryItem.getPartNumberAndProvider());
InventoryItem inventoryItem = inventoryMap.get(partNumber); if (inventoryItem != null) {
if(inventoryItem != null){
inventoryItem.setLockReel(lockInventoryItem.getLockReel()); inventoryItem.setLockReel(lockInventoryItem.getLockReel());
} }
inventoryMap.put(partNumber,inventoryItem); inventoryMap.put(lockInventoryItem.getPartNumberAndProvider(), inventoryItem);
} }
List<InventoryItem> expireInventory = expireInventory(type, 0,storageIds); List<InventoryItem> expireInventory = expireInventory(type, 0, storageIds);
for (InventoryItem expireInventoryItem : expireInventory) { for (InventoryItem expireInventoryItem : expireInventory) {
String partNumber = expireInventoryItem.getPartNumber(); InventoryItem inventoryItem = inventoryMap.get(expireInventoryItem.getPartNumberAndProvider());
InventoryItem inventoryItem = inventoryMap.get(partNumber); if (inventoryItem != null) {
if(inventoryItem != null){
inventoryItem.setExpireReel(expireInventoryItem.getExpireReel()); inventoryItem.setExpireReel(expireInventoryItem.getExpireReel());
} }
inventoryMap.put(partNumber,inventoryItem); inventoryMap.put(expireInventoryItem.getPartNumberAndProvider(), inventoryItem);
} }
//统计2个小时内即将过期的 //统计2个小时内即将过期的
int inHours = 2; int inHours = 2;
List<InventoryItem> willExpireInventory = expireInventory(type, inHours, storageIds); List<InventoryItem> willExpireInventory = expireInventory(type, inHours, storageIds);
for (InventoryItem wiilExpireInventoryItem : willExpireInventory) { for (InventoryItem wiilExpireInventoryItem : willExpireInventory) {
String partNumber = wiilExpireInventoryItem.getPartNumber(); InventoryItem inventoryItem = inventoryMap.get(wiilExpireInventoryItem.getPartNumberAndProvider());
InventoryItem inventoryItem = inventoryMap.get(partNumber); if (inventoryItem != null) {
if(inventoryItem != null){
inventoryItem.setWillExireReel(wiilExpireInventoryItem.getWillExireReel()); inventoryItem.setWillExireReel(wiilExpireInventoryItem.getWillExireReel());
} }
inventoryMap.put(partNumber,inventoryItem); inventoryMap.put(wiilExpireInventoryItem.getPartNumberAndProvider(), inventoryItem);
} }
//获取agv类型的库存 //获取agv类型的库存
Map<String,InventoryItem> agvInventory = getAgvBoxInventory(storageIds); Map<String, InventoryItem> agvInventory = getAgvBoxInventory(storageIds);
if (agvInventory != null && agvInventory.size() >0){ if (agvInventory != null && agvInventory.size() > 0) {
inventoryMap.putAll(agvInventory); inventoryMap.putAll(agvInventory);
} }
...@@ -149,10 +147,11 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -149,10 +147,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
/** /**
* 得到agvBox存储信息 * 得到agvBox存储信息
*
* @param storageIds * @param storageIds
* @return * @return
*/ */
private Map<String, InventoryItem> getAgvBoxInventory(String...storageIds) { private Map<String, InventoryItem> getAgvBoxInventory(String... storageIds) {
Map<String, InventoryItem> resultMap = new HashMap<>(); Map<String, InventoryItem> resultMap = new HashMap<>();
for (String storageId : storageIds) { for (String storageId : storageIds) {
/*Storage storage = dataCache.getStorageById(storageId); /*Storage storage = dataCache.getStorageById(storageId);
...@@ -166,17 +165,18 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -166,17 +165,18 @@ public class StoragePosManagerImpl implements IStoragePosManager {
List<Barcode> subCodeList = pos.getBarcode().getSubCodeList(); List<Barcode> subCodeList = pos.getBarcode().getSubCodeList();
if (subCodeList != null && !subCodeList.isEmpty()) { if (subCodeList != null && !subCodeList.isEmpty()) {
for (Barcode barcode : subCodeList) { for (Barcode barcode : subCodeList) {
InventoryItem item = resultMap.get(barcode.getPartNumber()); InventoryItem item = resultMap.get(barcode.getPartNumber()+"_"+barcode.getProvider());
if (item != null) { if (item != null) {
item.setStockReel(item.getStockReel() + 1); item.setStockReel(item.getStockReel() + 1);
item.setStockCount(item.getStockCount() + barcode.getAmount()); item.setStockCount(item.getStockCount() + barcode.getAmount());
} else { } else {
item = new InventoryItem(); item = new InventoryItem();
item.setPartNumber(barcode.getPartNumber()); item.setPartNumber(barcode.getPartNumber());
item.setProvider(barcode.getProvider());
item.setStockCount(barcode.getAmount()); item.setStockCount(barcode.getAmount());
item.setStockReel(1); item.setStockReel(1);
} }
resultMap.put(barcode.getPartNumber(), item); resultMap.put(item.getPartNumberAndProvider(), item);
} }
} }
} }
...@@ -188,22 +188,23 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -188,22 +188,23 @@ public class StoragePosManagerImpl implements IStoragePosManager {
/** /**
* 统计多少个小时内即将过期的物料(inHours 为0表示截止到目前已经过期的,为1表示1个小时后过期,但现在还没过期的) * 统计多少个小时内即将过期的物料(inHours 为0表示截止到目前已经过期的,为1表示1个小时后过期,但现在还没过期的)
*
* @param storageIds * @param storageIds
* @param type * @param type
* @param inHours * @param inHours
* @return * @return
*/ */
private List<InventoryItem> expireInventory(int type, int inHours,String[] storageIds){ private List<InventoryItem> expireInventory(int type, int inHours, String[] storageIds) {
//过期的仓位 //过期的仓位
Criteria c = Criteria.where("barcode").exists(true).and("storageId").in(storageIds); Criteria c = Criteria.where("barcode").exists(true).and("storageId").in(storageIds);
if(type != -1){ if (type != -1) {
c = c.and("barcode.type").is(type); c = c.and("barcode.type").is(type);
} }
Criteria expireCriteria = Criteria.where("expireTime").gt(System.currentTimeMillis()); Criteria expireCriteria = Criteria.where("expireTime").gt(System.currentTimeMillis());
if(inHours > 0){ if (inHours > 0) {
expireCriteria = Criteria.where("expireTime").gt(System.currentTimeMillis()).lte(System.currentTimeMillis() + inHours * 60 * 60 * 1000); expireCriteria = Criteria.where("expireTime").gt(System.currentTimeMillis()).lte(System.currentTimeMillis() + inHours * 60 * 60 * 1000);
}else{ } else {
expireCriteria = Criteria.where("expireTime").lte(System.currentTimeMillis()); expireCriteria = Criteria.where("expireTime").lte(System.currentTimeMillis());
} }
...@@ -211,8 +212,8 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -211,8 +212,8 @@ public class StoragePosManagerImpl implements IStoragePosManager {
Aggregation.match(c), Aggregation.match(c),
Aggregation.project("barcode").andExpression("barcode.putInTime + barcode.maxStorageTime * 60 * 60 * 1000").as("expireTime"), Aggregation.project("barcode").andExpression("barcode.putInTime + barcode.maxStorageTime * 60 * 60 * 1000").as("expireTime"),
Aggregation.match(expireCriteria), Aggregation.match(expireCriteria),
Aggregation.group("barcode.partNumber").count().as("expireReel"), Aggregation.group("barcode.partNumber").first("barcode.provider").as("provider").count().as("expireReel"),
Aggregation.project("expireReel").and("partNumber").previousOperation() Aggregation.project("expireReel", "provider").and("partNumber").previousOperation()
); );
AggregationResults<InventoryItem> results = storagePosDao.getMongoTemplate().aggregate(agg, StoragePos.class, InventoryItem.class); AggregationResults<InventoryItem> results = storagePosDao.getMongoTemplate().aggregate(agg, StoragePos.class, InventoryItem.class);
return results.getMappedResults(); return results.getMappedResults();
...@@ -221,11 +222,11 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -221,11 +222,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override @Override
public StoragePos getByPosName(String posName) { public StoragePos getByPosName(String posName) {
StoragePos pos = storagePosDao.findOneByCondition(new String[]{"posName"}, new String[]{posName}); StoragePos pos = storagePosDao.findOneByCondition(new String[]{"posName"}, new String[]{posName});
if(pos==null){ if (pos == null) {
//库位的条码有可能是前面带了SOxxx-,所以这里去除SO-再查一遍库位,保持与之前的兼容 //库位的条码有可能是前面带了SOxxx-,所以这里去除SO-再查一遍库位,保持与之前的兼容
int index=posName.indexOf("-"); int index = posName.indexOf("-");
if(index>=0){ if (index >= 0) {
String posNameStr=posName.substring(index+1); String posNameStr = posName.substring(index + 1);
pos = storagePosDao.findOneByCondition(new String[]{"posName"}, new String[]{posNameStr}); pos = storagePosDao.findOneByCondition(new String[]{"posName"}, new String[]{posNameStr});
} }
} }
...@@ -238,8 +239,8 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -238,8 +239,8 @@ public class StoragePosManagerImpl implements IStoragePosManager {
} }
@Override @Override
public List<StoragePos> findPosList(String storageId, List<String> posNames){ public List<StoragePos> findPosList(String storageId, List<String> posNames) {
if(posNames == null || posNames.isEmpty()){ if (posNames == null || posNames.isEmpty()) {
return Lists.newArrayList(); return Lists.newArrayList();
} }
Criteria c = Criteria.where("storageId").is(storageId) Criteria c = Criteria.where("storageId").is(storageId)
...@@ -247,9 +248,10 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -247,9 +248,10 @@ public class StoragePosManagerImpl implements IStoragePosManager {
Query q = new Query(c); Query q = new Query(c);
return storagePosDao.findByQuery(q); return storagePosDao.findByQuery(q);
} }
@Override @Override
public StoragePos save(StoragePos storagePos) throws ValidateException { public StoragePos save(StoragePos storagePos) throws ValidateException {
if(!storagePos.isUsed()) { if (!storagePos.isUsed()) {
//出库 //出库
List<String> mergePosNames = storagePos.getMergePosList(); List<String> mergePosNames = storagePos.getMergePosList();
List<StoragePos> mergePosList = findPosList(storagePos.getStorageId(), mergePosNames); List<StoragePos> mergePosList = findPosList(storagePos.getStorageId(), mergePosNames);
...@@ -262,7 +264,7 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -262,7 +264,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
allPos += mergePos.getPosName() + ","; allPos += mergePos.getPosName() + ",";
} }
if (ObjectUtil.isNotEmpty(allPos)) { if (ObjectUtil.isNotEmpty(allPos)) {
log.info("设置库位["+storagePos.getPosName()+"]合并的关联库位[ " + allPos + " ]使用状态为:false"); log.info("设置库位[" + storagePos.getPosName() + "]合并的关联库位[ " + allPos + " ]使用状态为:false");
} }
storagePos.setMergePosList(null); storagePos.setMergePosList(null);
} }
...@@ -274,11 +276,11 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -274,11 +276,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override @Override
public void delete(StoragePos object) throws ValidateException { public void delete(StoragePos object) throws ValidateException {
storagePosDao.removeOneById(object.getId()); storagePosDao.removeOneById(object.getId());
} }
@Override @Override
public StoragePos getByBarcode(String barcode){ public StoragePos getByBarcode(String barcode) {
List<Criteria> orCriterialList = Lists.newArrayList(); List<Criteria> orCriterialList = Lists.newArrayList();
orCriterialList.add(Criteria.where("barcode.barcode").is(barcode)); orCriterialList.add(Criteria.where("barcode.barcode").is(barcode));
orCriterialList.add(Criteria.where("barcode.subCodeList.barcode").is(barcode)); orCriterialList.add(Criteria.where("barcode.subCodeList.barcode").is(barcode));
...@@ -287,10 +289,10 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -287,10 +289,10 @@ public class StoragePosManagerImpl implements IStoragePosManager {
} }
@Override @Override
public List<StoragePos> findNotEmptyByStorageId(String storageId){ public List<StoragePos> findNotEmptyByStorageId(String storageId) {
Criteria c = Criteria.where("barcode").exists(true) Criteria c = Criteria.where("barcode").exists(true)
.and("enabled").is(true);//可用; .and("enabled").is(true);//可用;
if(!Strings.isNullOrEmpty(storageId)){ if (!Strings.isNullOrEmpty(storageId)) {
c = c.and("storageId").is(storageId); c = c.and("storageId").is(storageId);
} }
Query query = new Query(c); Query query = new Query(c);
...@@ -302,7 +304,7 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -302,7 +304,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
public List<StoragePos> findNotEmptyByStorageIdList(List<String> storageIdList) { public List<StoragePos> findNotEmptyByStorageIdList(List<String> storageIdList) {
Criteria c = Criteria.where("barcode").exists(true) Criteria c = Criteria.where("barcode").exists(true)
.and("enabled").is(true);//可用; .and("enabled").is(true);//可用;
if (storageIdList != null && !storageIdList.isEmpty()){ if (storageIdList != null && !storageIdList.isEmpty()) {
c = c.and("storageId").in(storageIdList); c = c.and("storageId").in(storageIdList);
} }
Query query = new Query(c); Query query = new Query(c);
...@@ -319,10 +321,44 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -319,10 +321,44 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override @Override
public StoragePos findPartNumberInStorages(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType) { public StoragePos findPartNumberInStorages(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType) {
return findPartNumberInStorages(storageIdList,"",pn,excludePosIds,checkOutType); return findPartNumberInStorages(storageIdList, "", pn, excludePosIds, checkOutType);
}
@Override
public StoragePos findPartNumberAndProviderInStorages(List<String> storageIdList, String pn,String provider, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType) {
return findPartNumberAndProviderNumberInStorages(storageIdList, "", pn,provider, excludePosIds, checkOutType);
}
@Override
public StoragePos findPartNumberAndProviderNumberInStorages(List<String> storageIdList, String labelId, String pn,String provider, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType) {
Criteria c = Criteria.where("barcode.partNumber").is(pn)
.and("id").nin(excludePosIds)
.and("enabled").is(true)//可用
.and("barcode.lockId").is(null);//没有被锁定的仓位;
if (storageIdList != null) {
c = c.and("storageId").in(storageIdList);
}
if (ObjectUtil.isNotEmpty(labelId)) {
c.and("labelId").is(labelId);
}
if (ObjectUtil.isNotEmpty(provider)) {
c.and("provider").is(provider);
}
Query q = new Query(c);
//Sort sort = getSortByCheckOutType(checkOutType);
Sort sort = Sort.by(Sort.Direction.ASC, "barcode.amount", "barcode.putInDate");
q.with(sort);
StoragePos pos = storagePosDao.findOne(q);
if (pos == null) {
log.info("使用" + checkOutType + " 策略出库 partNumber=" + pn + ",未找到可以出库的物料 ");
} else {
log.info("使用" + checkOutType + " 策略出库 partNumber=" + pn + ",找到出仓位置【" + pos.getPosName() + "】,RI【" + pos.getBarcode().getBarcode() + "】 ");
}
return pos;
} }
@Override @Override
public StoragePos findPartNumberInStorages(List<String> storageIdList,String labelId, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType) { public StoragePos findPartNumberInStorages(List<String> storageIdList, String labelId, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType) {
Criteria c = Criteria.where("barcode.partNumber").is(pn) Criteria c = Criteria.where("barcode.partNumber").is(pn)
.and("id").nin(excludePosIds) .and("id").nin(excludePosIds)
.and("enabled").is(true)//可用 .and("enabled").is(true)//可用
...@@ -335,7 +371,7 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -335,7 +371,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
} }
Query q = new Query(c); Query q = new Query(c);
//Sort sort = getSortByCheckOutType(checkOutType); //Sort sort = getSortByCheckOutType(checkOutType);
Sort sort = Sort.by(Sort.Direction.ASC,"barcode.amount","barcode.putInDate"); Sort sort = Sort.by(Sort.Direction.ASC, "barcode.amount", "barcode.putInDate");
q.with(sort); q.with(sort);
StoragePos pos = storagePosDao.findOne(q); StoragePos pos = storagePosDao.findOne(q);
if (pos == null) { if (pos == null) {
...@@ -360,7 +396,7 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -360,7 +396,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
} }
Query q = new Query(c); Query q = new Query(c);
//Sort sort = getSortByCheckOutType(checkOutType); //Sort sort = getSortByCheckOutType(checkOutType);
Sort sort = Sort.by(Sort.Direction.ASC, "barcode.amount", "barcode.expireDate","barcode.createDate"); Sort sort = Sort.by(Sort.Direction.ASC, "barcode.amount", "barcode.expireDate", "barcode.createDate");
q.with(sort); q.with(sort);
StoragePos pos = storagePosDao.findOne(q); StoragePos pos = storagePosDao.findOne(q);
if (pos == null) { if (pos == null) {
...@@ -388,11 +424,11 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -388,11 +424,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
if (ObjectUtil.isNotEmpty(pn)) { if (ObjectUtil.isNotEmpty(pn)) {
c.and("barcode.subCodeList.partNumber").is(pn); c.and("barcode.subCodeList.partNumber").is(pn);
} }
if (isOut){ if (isOut) {
c.and("barcode.subCodeList.isOut").is(isOut); c.and("barcode.subCodeList.isOut").is(isOut);
} }
//Sort sort = getSortByCheckOutType(checkOutType); //Sort sort = getSortByCheckOutType(checkOutType);
Sort sort = Sort.by(Sort.Direction.ASC, "barcode.subCodeList.amount","barcode.subCodeList.createDate"/*,"canCheckOutTime", "barcode.usedCount"*/); Sort sort = Sort.by(Sort.Direction.ASC, "barcode.subCodeList.amount", "barcode.subCodeList.createDate"/*,"canCheckOutTime", "barcode.usedCount"*/);
Query q = new Query(c); Query q = new Query(c);
q.with(sort); q.with(sort);
StoragePos pos = storagePosDao.findOne(q); StoragePos pos = storagePosDao.findOne(q);
...@@ -413,7 +449,7 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -413,7 +449,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
public List<StoragePos> findNotEmptyPosNameByStorageId(String storageId) { public List<StoragePos> findNotEmptyPosNameByStorageId(String storageId) {
Criteria c = Criteria.where("barcode").exists(true) Criteria c = Criteria.where("barcode").exists(true)
.and("enabled").is(true);//可用; .and("enabled").is(true);//可用;
if(!Strings.isNullOrEmpty(storageId)){ if (!Strings.isNullOrEmpty(storageId)) {
c = c.and("storageId").is(storageId); c = c.and("storageId").is(storageId);
} }
Query query = new Query(c); Query query = new Query(c);
...@@ -422,7 +458,7 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -422,7 +458,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
} }
@Override @Override
public StoragePos findOneEmptyPosNameByStorageId(String storageId,String posName) { public StoragePos findOneEmptyPosNameByStorageId(String storageId, String posName) {
Criteria c = Criteria.where("barcode").exists(false) Criteria c = Criteria.where("barcode").exists(false)
.and("enabled").is(true);//可用; .and("enabled").is(true);//可用;
if (!Strings.isNullOrEmpty(storageId)) { if (!Strings.isNullOrEmpty(storageId)) {
...@@ -438,10 +474,10 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -438,10 +474,10 @@ public class StoragePosManagerImpl implements IStoragePosManager {
} }
@Override @Override
public List<StoragePos> findEmptyByStorageId(String storageId){ public List<StoragePos> findEmptyByStorageId(String storageId) {
Criteria c = Criteria.where("barcode").exists(false) Criteria c = Criteria.where("barcode").exists(false)
.and("enabled").is(true);//可用; .and("enabled").is(true);//可用;
if(!Strings.isNullOrEmpty(storageId)){ if (!Strings.isNullOrEmpty(storageId)) {
c = c.and("storageId").is(storageId); c = c.and("storageId").is(storageId);
} }
Query query = new Query(c); Query query = new Query(c);
...@@ -453,18 +489,18 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -453,18 +489,18 @@ public class StoragePosManagerImpl implements IStoragePosManager {
/** /**
* 根据出库方式获取不同的 Sort * 根据出库方式获取不同的 Sort
*/ */
private Sort getSortByCheckOutType(CHECKOUT_TYPE checkoutType){ private Sort getSortByCheckOutType(CHECKOUT_TYPE checkoutType) {
Sort sort = null; Sort sort = null;
if(CHECKOUT_TYPE.EXPIRE_FIRST.equals(checkoutType)){//先过期先出 if (CHECKOUT_TYPE.EXPIRE_FIRST.equals(checkoutType)) {//先过期先出
sort = Sort.by(Sort.Direction.ASC, "barcode.expTime","barcode.expireDate","canCheckOutTime"); sort = Sort.by(Sort.Direction.ASC, "barcode.expTime", "barcode.expireDate", "canCheckOutTime");
}else if(CHECKOUT_TYPE.FIFO.equals(checkoutType)){//严格的先进先出 } else if (CHECKOUT_TYPE.FIFO.equals(checkoutType)) {//严格的先进先出
sort = Sort.by(Sort.Direction.ASC, "canCheckOutTime", "barcode.usedCount"); sort = Sort.by(Sort.Direction.ASC, "canCheckOutTime", "barcode.usedCount");
}else if(CHECKOUT_TYPE.USED_FIRST.equals(checkoutType)){//尾料优先 } else if (CHECKOUT_TYPE.USED_FIRST.equals(checkoutType)) {//尾料优先
sort = Sort.by(Sort.Direction.ASC, "barcode.amount", "canCheckOutTime"); sort = Sort.by(Sort.Direction.ASC, "barcode.amount", "canCheckOutTime");
}else if(CHECKOUT_TYPE.PRODUCE_DATE.equals(checkoutType)){ } else if (CHECKOUT_TYPE.PRODUCE_DATE.equals(checkoutType)) {
//先生产先出 //先生产先出
sort = Sort.by(Sort.Direction.ASC, "barcode.amount","barcode.produceDate", "canCheckOutTime"); sort = Sort.by(Sort.Direction.ASC, "barcode.amount", "barcode.produceDate", "canCheckOutTime");
}else{//效率优先 } else {//效率优先
sort = Sort.by(Sort.Direction.ASC, "canCheckOutTime", "createDate"); sort = Sort.by(Sort.Direction.ASC, "canCheckOutTime", "createDate");
} }
return sort; return sort;
...@@ -474,7 +510,7 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -474,7 +510,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
public PageData<StoragePos> findByPage(Query query, Pageable pageable) { public PageData<StoragePos> findByPage(Query query, Pageable pageable) {
int totalCount = storagePosDao.countByQuery(query); int totalCount = storagePosDao.countByQuery(query);
List<StoragePos> list = storagePosDao.findByQuery(query, pageable); List<StoragePos> list = storagePosDao.findByQuery(query, pageable);
return new PageData<StoragePos>(list,totalCount); return new PageData<StoragePos>(list, totalCount);
} }
@Override @Override
...@@ -490,31 +526,32 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -490,31 +526,32 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override @Override
public void removePosByStorageId(String storageId) { public void removePosByStorageId(String storageId) {
Query query=new Query(Criteria.where("storageId").is(storageId)); Query query = new Query(Criteria.where("storageId").is(storageId));
storagePosDao.removeByQuery(query); storagePosDao.removeByQuery(query);
} }
@Override @Override
public void deletePoss(Set<String> ids) { public void deletePoss(Set<String> ids) {
Query query =new Query(Criteria.where("id").in(ids)); Query query = new Query(Criteria.where("id").in(ids));
List<StoragePos> poss= storagePosDao.findByQuery(query); List<StoragePos> poss = storagePosDao.findByQuery(query);
String delPosName=""; String delPosName = "";
for (StoragePos pos : for (StoragePos pos :
poss) { poss) {
if(pos.getBarcode()==null||pos.getBarcode().equals("")) { if (pos.getBarcode() == null || pos.getBarcode().equals("")) {
}else{ } else {
throw new ValidateException("smfcore.thePosIsused"," 库位[{0}]有料[{1}],不能删除",new String[]{ pos.getPosName(),pos.getBarcode().getBarcode()}); throw new ValidateException("smfcore.thePosIsused", " 库位[{0}]有料[{1}],不能删除", new String[]{pos.getPosName(), pos.getBarcode().getBarcode()});
// throw new BadRequestException("库位[" + pos.getPosName() + "]中有料[" + pos.getBarcode() + "],不能删除"); // throw new BadRequestException("库位[" + pos.getPosName() + "]中有料[" + pos.getBarcode() + "],不能删除");
} }
delPosName+="["+pos.getId()+"_"+pos.getPosName()+"]"; delPosName += "[" + pos.getId() + "_" + pos.getPosName() + "]";
} }
log.info("手动删除库位:"+delPosName+" 完成 "); log.info("手动删除库位:" + delPosName + " 完成 ");
storagePosDao.removeByQuery(query); storagePosDao.removeByQuery(query);
} }
@Override @Override
public StoragePos getEmptyPosByStorage(Storage storage, Barcode barcode, Collection<String> excludePosIds) throws ValidateException{ public StoragePos getEmptyPosByStorage(Storage storage, Barcode barcode, Collection<String> excludePosIds) throws ValidateException {
return getEmptyPos(storage,barcode, excludePosIds,true); return getEmptyPos(storage, barcode, excludePosIds, true);
} }
private StoragePos getEmptyPos(Storage storage, Barcode barcode, Collection<String> excludePosIds, boolean warmPos) throws ValidateException { private StoragePos getEmptyPos(Storage storage, Barcode barcode, Collection<String> excludePosIds, boolean warmPos) throws ValidateException {
...@@ -522,26 +559,26 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -522,26 +559,26 @@ public class StoragePosManagerImpl implements IStoragePosManager {
Criteria c = Criteria.where("storageId").is(storage.getId()); Criteria c = Criteria.where("storageId").is(storage.getId());
COMPATIBLE_TYPE compatibleType = storage.getCompatibleType(); COMPATIBLE_TYPE compatibleType = storage.getCompatibleType();
if(compatibleType == COMPATIBLE_TYPE.EXACT_MATCH){//完全匹配 if (compatibleType == COMPATIBLE_TYPE.EXACT_MATCH) {//完全匹配
c = c.and("w").is(barcode.getPlateSize()).and("h").is(barcode.getHeight()); c = c.and("w").is(barcode.getPlateSize()).and("h").is(barcode.getHeight());
}else if(compatibleType == COMPATIBLE_TYPE.FULLY_COMPATIBLE){//完全兼容 } else if (compatibleType == COMPATIBLE_TYPE.FULLY_COMPATIBLE) {//完全兼容
c = c.and("w").gte(barcode.getPlateSize()).and("h").gte(barcode.getHeight());//宽度大于等于料盘宽度,高度大于等于料盘高度 c = c.and("w").gte(barcode.getPlateSize()).and("h").gte(barcode.getHeight());//宽度大于等于料盘宽度,高度大于等于料盘高度
}else if(compatibleType == COMPATIBLE_TYPE.SIZE_COMPATIBLE){//同尺寸兼容 } else if (compatibleType == COMPATIBLE_TYPE.SIZE_COMPATIBLE) {//同尺寸兼容
c = c.and("w").is(barcode.getPlateSize()).and("h").gte(barcode.getHeight());//宽度等于料盘宽度,高度大于等于料盘高度 c = c.and("w").is(barcode.getPlateSize()).and("h").gte(barcode.getHeight());//宽度等于料盘宽度,高度大于等于料盘高度
} }
c = c.and("enabled").is(true)//可用 c = c.and("enabled").is(true)//可用
.and("used").is(false);//未使用 .and("used").is(false);//未使用
if(storage.isSolderPaste()){ if (storage.isSolderPaste()) {
if(warmPos){ if (warmPos) {
c = c.and("warmPos").is(true);//回温库位 c = c.and("warmPos").is(true);//回温库位
}else{ } else {
c = c.and("warmPos").ne(true);//不是回温库位 c = c.and("warmPos").ne(true);//不是回温库位
} }
} }
//去除的仓位 //去除的仓位
if(excludePosIds != null && !excludePosIds.isEmpty()){ if (excludePosIds != null && !excludePosIds.isEmpty()) {
c = c.and("id").nin(excludePosIds); c = c.and("id").nin(excludePosIds);
} }
Query query = new Query(c); Query query = new Query(c);
...@@ -552,7 +589,7 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -552,7 +589,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
} }
@Override @Override
public StoragePos getEmptyPosByStorage(Storage storage, Barcode barcode, Collection<String> excludePosIds,String lastPosId) throws ValidateException { public StoragePos getEmptyPosByStorage(Storage storage, Barcode barcode, Collection<String> excludePosIds, String lastPosId) throws ValidateException {
Criteria c = Criteria.where("storageId").is(storage.getId()); Criteria c = Criteria.where("storageId").is(storage.getId());
...@@ -578,29 +615,31 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -578,29 +615,31 @@ public class StoragePosManagerImpl implements IStoragePosManager {
String msg = ""; String msg = "";
// if (lastPosId == null || lastPosId.equals("")) { // if (lastPosId == null || lastPosId.equals("")) {
//优先放入最合适的位置(根据尺寸),相同尺寸按优先级排序 //优先放入最合适的位置(根据尺寸),相同尺寸按优先级排序
query.with(Sort.by(Sort.Direction.ASC, "w").and(Sort.by(Sort.Direction.ASC, "h")).and(Sort.by(Sort.Direction.DESC, "priority"))); query.with(Sort.by(Sort.Direction.ASC, "w").and(Sort.by(Sort.Direction.ASC, "h")).and(Sort.by(Sort.Direction.DESC, "priority")));
// } else { // } else {
// Point point = PointUtil.getPosPoint(lastPosId, false); // Point point = PointUtil.getPosPoint(lastPosId, false);
// query.addCriteria(Criteria.where("coordinate").nearSphere(point)); // query.addCriteria(Criteria.where("coordinate").nearSphere(point));
// msg += "getEmptyPosByStorage 根据就近坐标查询[" + lastPosId + "][" + point.getX() + "," + point.getY() + "]"; // msg += "getEmptyPosByStorage 根据就近坐标查询[" + lastPosId + "][" + point.getX() + "," + point.getY() + "]";
// } // }
StoragePos pos = storagePosDao.findOne(query); StoragePos pos = storagePosDao.findOne(query);
if ((!ObjectUtil.isNotEmpty(msg) )&& (pos != null)) { if ((!ObjectUtil.isNotEmpty(msg)) && (pos != null)) {
Point targetP = PointUtil.getPosPoint(lastPosId, false); Point targetP = PointUtil.getPosPoint(lastPosId, false);
log.info(msg + "结果:[" + pos.getPosName() + "][" + targetP.getX() + "," + targetP.getY() + "]"); log.info(msg + "结果:[" + pos.getPosName() + "][" + targetP.getX() + "," + targetP.getY() + "]");
} }
return pos; return pos;
} }
@Override @Override
public List<StoragePos> findNotEmpty(){ public List<StoragePos> findNotEmpty() {
return findNotEmptyByStorageId(null); return findNotEmptyByStorageId(null);
} }
@Override @Override
public List<StoragePos> findByStorage(String storageId) { public List<StoragePos> findByStorage(String storageId) {
return storagePosDao.findListByCondition(new String[]{"storageId" }, new String[]{storageId }); return storagePosDao.findListByCondition(new String[]{"storageId"}, new String[]{storageId});
} }
@Override @Override
public void insertAll(List<StoragePos> posList) { public void insertAll(List<StoragePos> posList) {
storagePosDao.insertAll(posList); storagePosDao.insertAll(posList);
...@@ -619,27 +658,26 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -619,27 +658,26 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override @Override
public void clearStoragePosLabel(String labelId) { public void clearStoragePosLabel(String labelId) {
Query query = new Query(Criteria.where("labelId").is(labelId)); Query query = new Query(Criteria.where("labelId").is(labelId));
storagePosDao.updateMulti(query, Update.update("labelId","")); storagePosDao.updateMulti(query, Update.update("labelId", ""));
storagePosDao.updateMulti(query, Update.update("labelName","")); storagePosDao.updateMulti(query, Update.update("labelName", ""));
} }
@Override @Override
public void updatePosLabel( String[] posIds, String labelId,String labelName) { public void updatePosLabel(String[] posIds, String labelId, String labelName) {
Query query = new Query(Criteria.where("id").in(posIds)); Query query = new Query(Criteria.where("id").in(posIds));
storagePosDao.updateMulti(query, Update.update("labelId",labelId)); storagePosDao.updateMulti(query, Update.update("labelId", labelId));
storagePosDao.updateMulti(query, Update.update("labelName",labelName)); storagePosDao.updateMulti(query, Update.update("labelName", labelName));
} }
@Override @Override
public void clearLockPos(String lockId) { public void clearLockPos(String lockId) {
Query query = new Query( Criteria.where("barcode.lockId").is(lockId)); Query query = new Query(Criteria.where("barcode.lockId").is(lockId));
storagePosDao.updateMulti(query, Update.update("barcode.lockId","")); storagePosDao.updateMulti(query, Update.update("barcode.lockId", ""));
} }
@Override @Override
public StoragePos autoFindNextEmptyPos(Storage storage, Collection<String> excludePosIds,StoragePos currentPos) { public StoragePos autoFindNextEmptyPos(Storage storage, Collection<String> excludePosIds, StoragePos currentPos) {
Criteria c = Criteria.where("storageId").is(storage.getId()); Criteria c = Criteria.where("storageId").is(storage.getId());
// c.and("priority").lt(currentPos.getPriority()); // c.and("priority").lt(currentPos.getPriority());
...@@ -671,16 +709,18 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -671,16 +709,18 @@ public class StoragePosManagerImpl implements IStoragePosManager {
StoragePos pos = storagePosDao.findOne(query); StoragePos pos = storagePosDao.findOne(query);
return pos; return pos;
} }
@Override @Override
public void updateBarcodeMsd(String pn,String msl,String thickness){ public void updateBarcodeMsd(String pn, String msl, String thickness) {
Query query = new Query( Criteria.where("barcode.partNumber").is(pn)); Query query = new Query(Criteria.where("barcode.partNumber").is(pn));
storagePosDao.updateMulti(query, Update.update("barcode.msl",msl)); storagePosDao.updateMulti(query, Update.update("barcode.msl", msl));
storagePosDao.updateMulti(query, Update.update("barcode.thickness",thickness)); storagePosDao.updateMulti(query, Update.update("barcode.thickness", thickness));
} }
/** /**
* 查找同尺寸连续的库位,合并库位放置料盘,仅用于智能料架 * 查找同尺寸连续的库位,合并库位放置料盘,仅用于智能料架
*
* @param storage * @param storage
* @param barcode * @param barcode
* @return * @return
...@@ -688,17 +728,17 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -688,17 +728,17 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override @Override
public List<StoragePos> getSameSizeContinuityEmptyPosList(Storage storage, Barcode barcode) throws ValidateException { public List<StoragePos> getSameSizeContinuityEmptyPosList(Storage storage, Barcode barcode) throws ValidateException {
if(storage == null||(!storage.isNLMShelf())){ if (storage == null || (!storage.isNLMShelf())) {
//只适合移动料架NLM //只适合移动料架NLM
throw new ValidateException( "smfcore.shelf.nlm.notFound", "未找到移动料架{0}",new String[]{storage.getId()}); throw new ValidateException("smfcore.shelf.nlm.notFound", "未找到移动料架{0}", new String[]{storage.getId()});
} }
if(!storage.isMergePos()){ if (!storage.isMergePos()) {
return new ArrayList<>(); return new ArrayList<>();
} }
Criteria c = Criteria.where("storageId").is(storage.getId()); Criteria c = Criteria.where("storageId").is(storage.getId());
if(barcode.getPlateSize() > 7){ if (barcode.getPlateSize() > 7) {
c = c.and("w").gte(barcode.getPlateSize()); c = c.and("w").gte(barcode.getPlateSize());
}else{ } else {
c = c.and("w").is(barcode.getPlateSize()); c = c.and("w").is(barcode.getPlateSize());
} }
c = c.and("h").gte(0);//宽度大于等于料盘宽度,高度大于等于料盘高度 c = c.and("h").gte(0);//宽度大于等于料盘宽度,高度大于等于料盘高度
...@@ -709,9 +749,9 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -709,9 +749,9 @@ public class StoragePosManagerImpl implements IStoragePosManager {
query.with(Sort.by(Sort.Direction.ASC, "posName")); query.with(Sort.by(Sort.Direction.ASC, "posName"));
List<StoragePos> posList = storagePosDao.findByQuery(query); List<StoragePos> posList = storagePosDao.findByQuery(query);
//把不连续的过滤掉 //把不连续的过滤掉
Map<String,StoragePos> posMap = new ConcurrentHashMap<>(); Map<String, StoragePos> posMap = new ConcurrentHashMap<>();
for(StoragePos pos : posList){ for (StoragePos pos : posList) {
posMap.put(pos.getPosName(),pos); posMap.put(pos.getPosName(), pos);
} }
Set<String> posNames = posMap.keySet(); Set<String> posNames = posMap.keySet();
for (String posName : posNames) { for (String posName : posNames) {
...@@ -720,13 +760,13 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -720,13 +760,13 @@ public class StoragePosManagerImpl implements IStoragePosManager {
List<StoragePos> emptyPosList = new ArrayList<>(); List<StoragePos> emptyPosList = new ArrayList<>();
emptyPosList.add(currentPos); emptyPosList.add(currentPos);
String nextPosName = posName; String nextPosName = posName;
while (true){ while (true) {
if(totalHeight >= barcode.getHeight()){ if (totalHeight >= barcode.getHeight()) {
return emptyPosList; return emptyPosList;
} }
nextPosName = getNextPosName(nextPosName); nextPosName = getNextPosName(nextPosName);
StoragePos nextPos = posMap.get(nextPosName); StoragePos nextPos = posMap.get(nextPosName);
if(nextPos == null){ if (nextPos == null) {
break; break;
} }
emptyPosList.add(nextPos); emptyPosList.add(nextPos);
...@@ -760,8 +800,8 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -760,8 +800,8 @@ public class StoragePosManagerImpl implements IStoragePosManager {
c = c.and("id").nin(excludePosIds); c = c.and("id").nin(excludePosIds);
} }
if (StringUtils.isNotBlank(logo)){ if (StringUtils.isNotBlank(logo)) {
Pattern pattern=Pattern.compile(QueryHelp.escapeExprSpecialWord(logo), Pattern.CASE_INSENSITIVE); Pattern pattern = Pattern.compile(QueryHelp.escapeExprSpecialWord(logo), Pattern.CASE_INSENSITIVE);
c.and("posName").regex(pattern); c.and("posName").regex(pattern);
} }
...@@ -777,7 +817,7 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -777,7 +817,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
// msg += "getEmptyPosByStorage 根据就近坐标查询[" + lastPosId + "][" + point.getX() + "," + point.getY() + "]"; // msg += "getEmptyPosByStorage 根据就近坐标查询[" + lastPosId + "][" + point.getX() + "," + point.getY() + "]";
// } // }
StoragePos pos = storagePosDao.findOne(query); StoragePos pos = storagePosDao.findOne(query);
if ((!ObjectUtil.isNotEmpty(msg) )&& (pos != null)) { if ((!ObjectUtil.isNotEmpty(msg)) && (pos != null)) {
Point targetP = PointUtil.getPosPoint(lastPosId, false); Point targetP = PointUtil.getPosPoint(lastPosId, false);
log.info(msg + "结果:[" + pos.getPosName() + "][" + targetP.getX() + "," + targetP.getY() + "]"); log.info(msg + "结果:[" + pos.getPosName() + "][" + targetP.getX() + "," + targetP.getY() + "]");
} }
...@@ -788,27 +828,27 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -788,27 +828,27 @@ public class StoragePosManagerImpl implements IStoragePosManager {
/** /**
* 获取下一库位的库位名(后缀数字+1) * 获取下一库位的库位名(后缀数字+1)
*/ */
private String getNextPosName(String posName){ private String getNextPosName(String posName) {
String posIndexStr = ""; String posIndexStr = "";
String prefixStr = ""; String prefixStr = "";
for(int i=1;i<=posName.length();i++){ for (int i = 1; i <= posName.length(); i++) {
char c = posName.charAt(posName.length() - i); char c = posName.charAt(posName.length() - i);
if(!Character.isDigit(c)){ if (!Character.isDigit(c)) {
prefixStr = posName.substring(0, posName.length() - i + 1); prefixStr = posName.substring(0, posName.length() - i + 1);
break; break;
} }
posIndexStr = c + posIndexStr; posIndexStr = c + posIndexStr;
} }
if(posIndexStr.isEmpty()){ if (posIndexStr.isEmpty()) {
return ""; return "";
} }
int posIndex = Integer.valueOf(posIndexStr); int posIndex = Integer.valueOf(posIndexStr);
int nextPosIndex = posIndex + 1; int nextPosIndex = posIndex + 1;
return prefixStr +String.format("%0"+posIndexStr.length()+"d",nextPosIndex); return prefixStr + String.format("%0" + posIndexStr.length() + "d", nextPosIndex);
} }
public List<StoragePos> findNotEmptyPosName(){ public List<StoragePos> findNotEmptyPosName() {
Criteria c = Criteria.where("barcode").exists(true) Criteria c = Criteria.where("barcode").exists(true)
.and("enabled").is(true);//可用; .and("enabled").is(true);//可用;
Query query = new Query(c); Query query = new Query(c);
...@@ -817,7 +857,7 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -817,7 +857,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
} }
@Override @Override
public StoragePos getPosNameByPnAndStrId(String partNumber,String storageId) { public StoragePos getPosNameByPnAndStrId(String partNumber, String storageId) {
return storagePosDao.findOne(new Query(Criteria.where("partNumber").is(partNumber).and("storageId").is(storageId))); return storagePosDao.findOne(new Query(Criteria.where("partNumber").is(partNumber).and("storageId").is(storageId)));
} }
...@@ -839,7 +879,7 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -839,7 +879,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
Criteria c = Criteria.where("barcode.partNumber").is(pn) Criteria c = Criteria.where("barcode.partNumber").is(pn)
.and("id").nin(excludePosIds) .and("id").nin(excludePosIds)
.and("enabled").is(true);//可用 .and("enabled").is(true);//可用
//.and("barcode.lockId").is(null);//没有被锁定的仓位; //.and("barcode.lockId").is(null);//没有被锁定的仓位;
if (storageIdList != null) { if (storageIdList != null) {
c = c.and("storageId").in(storageIdList); c = c.and("storageId").in(storageIdList);
} }
...@@ -854,8 +894,8 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -854,8 +894,8 @@ public class StoragePosManagerImpl implements IStoragePosManager {
public void batchUpdatePosEnabled(List<String> idList, boolean enabled) { public void batchUpdatePosEnabled(List<String> idList, boolean enabled) {
Query query = new Query(Criteria.where("id").in(idList)); Query query = new Query(Criteria.where("id").in(idList));
Update update = new Update(); Update update = new Update();
update.set("enabled",enabled); update.set("enabled", enabled);
storagePosDao.updateMulti(query,update); storagePosDao.updateMulti(query, update);
} }
@Override @Override
......
...@@ -141,7 +141,7 @@ public class TaskService { ...@@ -141,7 +141,7 @@ public class TaskService {
public synchronized String checkout(Storage storage, StoragePos pos, boolean isSingleOut, String opUserName, String stationName) throws ValidateException { public synchronized String checkout(Storage storage, StoragePos pos, boolean isSingleOut, String opUserName, String stationName) throws ValidateException {
return checkout(storage, pos, isSingleOut, opUserName, stationName, -1); return checkout(storage, pos, isSingleOut, opUserName, stationName, -1,"");
} }
/** /**
...@@ -153,13 +153,11 @@ public class TaskService { ...@@ -153,13 +153,11 @@ public class TaskService {
* @return * @return
* @throws ValidateException * @throws ValidateException
*/ */
public synchronized String checkout(Storage storage, StoragePos pos, boolean isSingleOut, String opUserName, String stationName, int extendType) throws ValidateException { public synchronized String checkout(Storage storage, StoragePos pos, boolean isSingleOut, String opUserName, String stationName, int extendType,String line) throws ValidateException {
if (pos.getBarcode() == null) { if (pos.getBarcode() == null) {
String msg = "库位[" + pos.getPosName() + "]中已无物料,忽略"; String msg = "库位[" + pos.getPosName() + "]中已无物料,忽略";
log.info(msg); log.info(msg);
throw new ValidateException("smfcore.allBoxView.noReel", "库位{0}中无物料", new String[]{pos.getPosName()}); throw new ValidateException("smfcore.allBoxView.noReel", "库位{0}中无物料", new String[]{pos.getPosName()});
// Barcode barcode=new Barcode(); // Barcode barcode=new Barcode();
// SimpleDateFormat formatter= new SimpleDateFormat("HHmmss"); // SimpleDateFormat formatter= new SimpleDateFormat("HHmmss");
// Date date = new Date(System.currentTimeMillis()); // Date date = new Date(System.currentTimeMillis());
...@@ -207,6 +205,9 @@ public class TaskService { ...@@ -207,6 +205,9 @@ public class TaskService {
if (extendType != -1) { if (extendType != -1) {
task.setExtendType(extendType); task.setExtendType(extendType);
} }
if (StringUtils.isNotEmpty(line)){
task.setLine(line);
}
addTaskToExecute(task); addTaskToExecute(task);
//} //}
return ""; return "";
...@@ -1211,17 +1212,18 @@ public class TaskService { ...@@ -1211,17 +1212,18 @@ public class TaskService {
//其他出库模式一次性全部生成任务 //其他出库模式一次性全部生成任务
for (TacticsOutDto item : tacticsOutDtos) { for (TacticsOutDto item : tacticsOutDtos) {
log.info("开始执行策略出库[" + item.getPartNumber() + "] [" + item.getStorageId() + "] 盘数=" + item.getPlateNumber()); log.info("开始执行策略出库[" + item.getPartNumber() + "][" + item.getProvider() + "] [" + item.getStorageId() + "] 盘数=" + item.getPlateNumber());
String partNumber = item.getPartNumber(); String partNumber = item.getPartNumber();
String provider = item.getProvider();
for (int i = 1; i <= item.getPlateNumber(); i++) { for (int i = 1; i <= item.getPlateNumber(); i++) {
Collection<String> excludePosIds = excludePosIds(); Collection<String> excludePosIds = excludePosIds();
StoragePos pos = null; StoragePos pos = null;
if (item.getStorageId() != null) { if (item.getStorageId() != null) {
String[] storageIds = new String[]{item.getStorageId()}; String[] storageIds = new String[]{item.getStorageId()};
pos = storagePosManager.findPartNumberInStorages(Lists.newArrayList(storageIds), partNumber, excludePosIds, checkoutType); pos = storagePosManager.findPartNumberAndProviderInStorages(Lists.newArrayList(storageIds), partNumber,provider, excludePosIds, checkoutType);
} else { } else {
pos = storagePosManager.findPartNumberInStorages(availableStorageIds, partNumber, excludePosIds, checkoutType); pos = storagePosManager.findPartNumberAndProviderInStorages(availableStorageIds, partNumber,provider, excludePosIds, checkoutType);
} }
if (pos == null) { if (pos == null) {
log.error("策略出库[" + item.getPartNumber() + "] 未找到可以出库的物料[" + partNumber + "]"); log.error("策略出库[" + item.getPartNumber() + "] 未找到可以出库的物料[" + partNumber + "]");
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!