Commit 3a5ac57b LN

工单出库:PN出库修改。

1 个父辈 691a7087
...@@ -91,7 +91,7 @@ public class DataCache { ...@@ -91,7 +91,7 @@ public class DataCache {
/** /**
* 库位占用Map, key为cid,value为已使用的库位列表 * 库位占用Map, key为cid,value为已使用的库位列表
*/ */
private static Map<String, List<String>> usedPosNameMap = new ConcurrentHashMap<>(); private static Map<String, List<StoragePos>> usedPosMap = new ConcurrentHashMap<>();
/** /**
* 锡膏料仓冷藏区和回温区使用库位数, key为cid, key为 WarmPos 时value表示回温区使用数量,key为 ColdingPos 时value为冷藏区使用数量 * 锡膏料仓冷藏区和回温区使用库位数, key为cid, key为 WarmPos 时value表示回温区使用数量,key为 ColdingPos 时value为冷藏区使用数量
...@@ -436,40 +436,75 @@ public class DataCache { ...@@ -436,40 +436,75 @@ public class DataCache {
/** /**
* 出库时清除使用库位列表 * 出库时清除使用库位列表
*/ */
private void removeUsedPosNameList(String cid, String posName) { private void removeUsedPosList(String cid, StoragePos pos) {
List<String> usedPosNameList = getUsedPosNameList(cid); List<StoragePos> usedPosNameList = getUsedPosList(cid);
usedPosNameList.remove(posName);
usedPosNameMap.put(cid, usedPosNameList); // usedPosNameList.remove(posName);
Iterator<StoragePos> iterator = usedPosNameList.iterator();
while (iterator.hasNext()) {
StoragePos book = iterator.next();
if (book.getPosName() .equals(pos.getPosName())) {
iterator.remove();
break;
}
}
List<StoragePos> list=new ArrayList<>();
iterator.forEachRemaining(list::add);
usedPosMap.put(cid, list);
} }
/** /**
* 入库时增加使用库位列表 * 入库时增加使用库位列表
*/ */
private void addUsedPosNameList(String cid, String posName) { private void addUsedPosList(String cid, StoragePos pos) {
List<String> usedPosNameList = getUsedPosNameList(cid); List<StoragePos> usedPosList = getUsedPosList(cid);
usedPosNameList.add(posName); usedPosList.add(pos);
usedPosNameMap.put(cid, usedPosNameList); usedPosMap.put(cid, usedPosList);
}/**
* 获取设备所有占用的库位名称列表
*/
public List<StoragePos> getUsedPosList(String cid) {
List<StoragePos> allPos = usedPosMap.get(cid);
if (allPos == null) {
Storage storage = getStorage(cid);
if (storage != null) {
log.info("加载[" + cid + "]所有已使用库位到缓存");
allPos = storagePosManager.findUsedPosNameByStorageId(storage.getId());
// for (StoragePos pos : allPos) {
// posNameList.add(pos.getPosName());
// }
usedPosMap.put(cid, allPos);
}
}
return allPos;
} }
/** /**
* 获取设备所有占用的库位名称列表 * 获取设备所有占用的库位名称列表
*/ */
public List<String> getUsedPosNameList(String cid) { public List<String> getUsedPosNameList(String cid) {
List<String> posNameList = usedPosNameMap.get(cid); List<String> posNameList = new ArrayList<>();
if (posNameList == null) { List<StoragePos> allPos = usedPosMap.get(cid);
if (allPos == null) {
Storage storage = getStorage(cid); Storage storage = getStorage(cid);
posNameList = new ArrayList<>();
if (storage != null) { if (storage != null) {
log.info("加载[" + cid + "]所有已使用库位到缓存"); log.info("加载[" + cid + "]所有已使用库位到缓存");
List<StoragePos> allPos = storagePosManager.findUsedPosNameByStorageId(storage.getId()); allPos = storagePosManager.findUsedPosNameByStorageId(storage.getId());
for (StoragePos pos : allPos) {
posNameList.add(pos.getPosName()); usedPosMap.put(cid, allPos);
}
usedPosNameMap.put(cid, posNameList);
} }
} }
for (StoragePos pos : allPos) {
posNameList.add(pos.getPosName());
}
return posNameList; return posNameList;
} }
public List<List<StoragePos>> getAllUsedPosMap() {
List<List<StoragePos>> posList = new ArrayList<>(usedPosMap.values());
return posList;
}
/** /**
* 锁定库存 * 锁定库存
...@@ -640,13 +675,13 @@ public class DataCache { ...@@ -640,13 +675,13 @@ public class DataCache {
amount = -barcode.getAmount(); amount = -barcode.getAmount();
storage.emptyOnePos(pos); storage.emptyOnePos(pos);
updateSpUsePosCount(storage, pos, -1); updateSpUsePosCount(storage, pos, -1);
removeUsedPosNameList(cid, pos.getPosName()); removeUsedPosList(cid, pos );
} else { } else {
//入库 //入库
amount = barcode.getAmount(); amount = barcode.getAmount();
storage.useOnePos(pos); storage.useOnePos(pos);
updateSpUsePosCount(storage, pos, 1); updateSpUsePosCount(storage, pos, 1);
addUsedPosNameList(cid, pos.getPosName()); addUsedPosList(cid, pos );
//入库单处理 //入库单处理
if (ObjectUtil.isNotEmpty(storage.getInListName())) { if (ObjectUtil.isNotEmpty(storage.getInListName())) {
inListCache.UpdateInList(storage.getInListName(), pos, barcode); inListCache.UpdateInList(storage.getInListName(), pos, barcode);
......
...@@ -7,12 +7,12 @@ import com.neotel.smfcore.common.exception.ValidateException; ...@@ -7,12 +7,12 @@ import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.Constants; import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.common.utils.QueryHelp; import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.materialLog.rest.query.MaterialLogCriteria;
import com.neotel.smfcore.core.selfAudit.enums.SELFAUDIT_STATUS; import com.neotel.smfcore.core.selfAudit.enums.SELFAUDIT_STATUS;
import com.neotel.smfcore.core.selfAudit.rest.dto.SelfAuditDto; import com.neotel.smfcore.core.selfAudit.rest.dto.SelfAuditDto;
import com.neotel.smfcore.core.selfAudit.rest.dto.SelfAuditItemDto; import com.neotel.smfcore.core.selfAudit.rest.dto.SelfAuditItemDto;
import com.neotel.smfcore.core.selfAudit.rest.mapstruct.SelfAuditItemMapper; import com.neotel.smfcore.core.selfAudit.rest.mapstruct.SelfAuditItemMapper;
import com.neotel.smfcore.core.selfAudit.rest.mapstruct.SelfAuditMapper; import com.neotel.smfcore.core.selfAudit.rest.mapstruct.SelfAuditMapper;
import com.neotel.smfcore.core.selfAudit.rest.query.SelfAuditCriteria;
import com.neotel.smfcore.core.selfAudit.service.manager.ISelfAuditManager; import com.neotel.smfcore.core.selfAudit.service.manager.ISelfAuditManager;
import com.neotel.smfcore.core.selfAudit.service.po.SelfAudit; import com.neotel.smfcore.core.selfAudit.service.po.SelfAudit;
import com.neotel.smfcore.core.selfAudit.service.po.SelfAuditItem; import com.neotel.smfcore.core.selfAudit.service.po.SelfAuditItem;
...@@ -179,7 +179,7 @@ public class SelfAuditController { ...@@ -179,7 +179,7 @@ public class SelfAuditController {
} }
@ApiOperation("查询盘点日志") @ApiOperation("查询盘点日志")
@GetMapping(value = "/list") @GetMapping(value = "/list")
public PageData<SelfAuditDto> queryList(MaterialLogCriteria criteria, Pageable pageable) { public PageData<SelfAuditDto> queryList(SelfAuditCriteria criteria, Pageable pageable) {
Query query = QueryHelp.getQuery(criteria); Query query = QueryHelp.getQuery(criteria);
PageData<SelfAudit> pages = selfAuditManager.findByPage(query, pageable); PageData<SelfAudit> pages = selfAuditManager.findByPage(query, pageable);
......
package com.neotel.smfcore.core.selfAudit.rest.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.BetweenData;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
public class SelfAuditCriteria {
@QueryCondition(blurry = "barcode,posName,locInfo")
private String blurry;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private BetweenData<Date> createDate;
@QueryCondition(blurry = "barcode")
private String barcode;
@QueryCondition(blurry = "posName")
private String posName;
@ApiModelProperty("status")
@QueryCondition(blurry = "status")
private String status;
}
...@@ -32,6 +32,7 @@ import org.springframework.stereotype.Service; ...@@ -32,6 +32,7 @@ import org.springframework.stereotype.Service;
import java.text.ParseException; import java.text.ParseException;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Pattern;
@Service @Service
@Slf4j @Slf4j
...@@ -261,9 +262,25 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -261,9 +262,25 @@ public class StoragePosManagerImpl implements IStoragePosManager {
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);
} }
private String escapeExprSpecialWord(String keyword) {
if (ObjectUtil.isNotEmpty(keyword)) {
String[] fbsArr = { "\\", "$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|" };
for (String key : fbsArr) {
if (keyword.contains(key)) {
keyword = keyword.replace(key, "\\" + key);
}
}
}
return keyword;
}
@Override @Override
public StoragePos findPartNumberInStorages(List<String> storageIdList,String labelId, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType,Map<String, String> appendDate) { public StoragePos findPartNumberInStorages(List<String> storageIdList,String labelId, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType,Map<String, String> appendDate) {
Criteria c = Criteria.where("barcode.partNumber").is(pn) //
//criteria = criteria.and(attributeName).regex(pattern);
String regex="^"+escapeExprSpecialWord(pn.toString())+".*";
Pattern pattern = Pattern.compile(regex );
Criteria c = Criteria.where("barcode.partNumber").regex(pattern)
.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);//没有被锁定的仓位;
...@@ -281,14 +298,34 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -281,14 +298,34 @@ public class StoragePosManagerImpl implements IStoragePosManager {
if (pos == null) { if (pos == null) {
log.info("使用" + checkOutType + " 策略出库 partNumber=" + pn + ",未找到可以出库的物料 "); log.info("使用" + checkOutType + " 策略出库 partNumber=" + pn + ",未找到可以出库的物料 ");
} else { } else {
log.info("使用" + checkOutType + " 策略出库 partNumber=" + pn + ",找到出仓位置【" + pos.getPosName() + "】,RI【" + pos.getBarcode().getBarcode() + "】 "); log.info("使用" + checkOutType + " 策略出库 partNumber=" + pn + ",找到出仓位置【" + pos.getPosName() + "】,RI【" + pos.getBarcode().getBarcode() + "】 PN【"+pos.getBarcode().getPartNumber()+"】");
} }
return pos; 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) {
return findPartNumberInStorages(storageIdList,labelId,pn,excludePosIds,checkOutType,new HashMap<>()); // return findPartNumberInStorages(storageIdList,labelId,pn,excludePosIds,checkOutType,new HashMap<>());
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);
}
Query q = new Query(c);
Sort sort = getSortByCheckOutType(checkOutType);
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;
} }
/** /**
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!