Commit 8fe89ed5 zshaohui

盘点优化

1 个父辈 6a0d9ce8
......@@ -104,6 +104,7 @@ public class InventoryController {
public ResultBean getInventoryInfo() {
Map<String, Object> resultMap = new HashMap<>();
int inventoryCount = 0;
List<String> finishInventory = new ArrayList<>();
String storageId = "";
for (Storage storage : dataCache.getAllStorage().values()) {
if (!storage.isVirtual()) {
......@@ -111,19 +112,55 @@ public class InventoryController {
break;
}
}
int count = storagePosManager.countByQuery(new Query(Criteria.where("storageId").is(storageId)));
String inventoryBatch = dataCache.getCache(INVENTORY_DATA) + "";
if (inventoryBatch != null) {
inventoryCount = inventoryDataManager.countByQuery(new Query(Criteria.where("inventoryBatch").is(inventoryBatch).and("status").is(InventoryStatus.FINISHED.name())));
if (StringUtils.isNotBlank(inventoryBatch) && !"-1".equals(inventoryBatch)) {
List<InventoryData> dataList = inventoryDataManager.findByQuery(new Query(Criteria.where("inventoryBatch").is(inventoryBatch).and("status").is(InventoryStatus.FINISHED.name())));
if (dataList != null && !dataList.isEmpty()) {
List<String> posNameList = new ArrayList<>();
for (InventoryData data : dataList) {
if (posNameList.isEmpty()) {
posNameList.add(data.getPosName());
} else {
if (!posNameList.contains(data.getPosName())) {
posNameList.add(data.getPosName());
}
}
}
inventoryCount = posNameList.size();
}
finishInventory = getFinishInventoryPosName(inventoryBatch);
}
resultMap.put("inventoryCount", inventoryCount);
resultMap.put("count", count);
resultMap.put("inventoryBatch", StringUtils.isBlank(inventoryBatch) || "-1".equals(inventoryBatch) ? "" : inventoryBatch);
resultMap.put("finishInventory", finishInventory);
return ResultBean.newOkResult(resultMap);
}
private List<String> getFinishInventoryPosName(String inventoryBatch) {
List<String> finishPosName = new ArrayList<>();
List<InventoryData> dataList = inventoryDataManager.findByQuery(new Query(Criteria.where("inventoryBatch").is(inventoryBatch)));
//获取原始库位
List<String> oriPosNameList = dataList.stream().map(InventoryData::getOriPosName).collect(Collectors.toList());
oriPosNameList = oriPosNameList.stream().distinct().collect(Collectors.toList());
for (String oriPosName : oriPosNameList) {
boolean isFinished = true;
for (InventoryData data : dataList) {
if (data.getOriPosName().equals(oriPosName)){
if (!data.getStatus().equals(InventoryStatus.FINISHED.name())){
isFinished = false;
break;
}
}
}
if (isFinished) {
finishPosName.add(oriPosName);
}
}
return finishPosName;
}
/**
* 开始盘点
......@@ -254,6 +291,15 @@ public class InventoryController {
if (storagePosList == null || storagePosList.isEmpty()) {
return ResultBean.newErrorResult(-1, "smfcore.label.noReel", "未找到可出库的物料");
}
//核验是否已经盘点出库
List<String> posNameList = storagePosList.stream().map(StoragePos::getPosName).collect(Collectors.toList());
List<InventoryData> dataList = inventoryDataManager.findByQuery(new Query(Criteria.where("inventoryBatch").is(inventoryBatch).and("posName").in(posNameList)));
if (dataList != null && !dataList.isEmpty()) {
List<String> dataPosNameList = dataList.stream().map(InventoryData::getPosName).collect(Collectors.toList());
dataPosNameList = dataPosNameList.stream().distinct().collect(Collectors.toList());
return ResultBean.newErrorResult(-1,"",JsonUtil.toJsonStr(dataPosNameList)+"已经进行过盘点出库,请核实");
}
for (StoragePos pos : storagePosList) {
Barcode barcode = pos.getBarcode();
if (barcode != null) {
......@@ -305,19 +351,17 @@ public class InventoryController {
Barcode barcode = barcodeManager.findByBarcode(boxStr);
List<PartitionInfo> partitionInfoList = BoxUtil.getPartitionInfo(currentRfid, barcode);
//盘点批次
Long inventoryBatch = dataCache.getCache(INVENTORY_DATA);
if(inventoryBatch == null) {
inventoryBatch = -1l;
}
String inventoryBatch = dataCache.getCache(INVENTORY_DATA) + "";
if (StringUtils.isNotBlank(inventoryBatch) && !"-1".equals(inventoryBatch)) {
//获取需要盘点的信息
List<InventoryData> dataList = inventoryDataManager.findByQuery(new Query(Criteria.where("inventoryBatch").is(inventoryBatch).and("box").is(boxStr)));
List<InventoryData> dataList = inventoryDataManager.findByQuery(new Query(Criteria.where("inventoryBatch").is(inventoryBatch).and("box").is(boxStr).and("needInventory").is(true)));
if (dataList != null && !dataList.isEmpty()) {
if (partitionInfoList != null && !partitionInfoList.isEmpty()) {
for (InventoryData inventoryData : dataList) {
partitionInfoList = partitionInfoList.stream().map(item -> {
if (inventoryData.getBoxPartition().equals(item.getPartition())) {
//判断是否展示
if (inventoryData.getInventoryReelCount() < inventoryData.getReelCount()){
if (inventoryData.getInventoryReelCount() < inventoryData.getReelCount()) {
item.setStatus(1);
}
item.setInventory(true);
......@@ -330,6 +374,7 @@ public class InventoryController {
}
}
}
}
return ResultBean.newOkResult(partitionInfoList);
}
......@@ -420,7 +465,16 @@ public class InventoryController {
}
//开始查找空库位
Barcode boxBarcode = barcodeManager.findByBarcode(boxStr);
StoragePos pos = taskService.findEmptyPosForPutIn(storageList, boxBarcode, "", "");
//如果盘点批次为空的话,则查找新的库位,否则用原来的库位
String inventoryBatch = dataCache.getCache(INVENTORY_DATA);
StoragePos pos = null;
if (StringUtils.isBlank(inventoryBatch) || "-1".equals(inventoryBatch)) {
pos = taskService.findEmptyPosForPutIn(storageList, boxBarcode, "", "");
} else {
InventoryData data = inventoryDataManager.findOne(new Query(Criteria.where("inventoryBatch").is(inventoryBatch).and("box").is(boxStr)));
String posName = data.getPosName();
pos = storagePosManager.getByPosName(posName);
}
if (pos == null) {
return ResultBean.newErrorResult(-1, "", boxStr + "未找到可用库位");
}
......@@ -488,9 +542,9 @@ public class InventoryController {
}
//开始查询盘点数据
//盘点批次
Long inventoryBatch = dataCache.getCache(INVENTORY_DATA);
if (inventoryBatch == null) {
inventoryBatch = -1l;
String inventoryBatch = dataCache.getCache(INVENTORY_DATA) + "";
if (StringUtils.isBlank(inventoryBatch) || "-1".equals(inventoryBatch)) {
return "当前没有要盘点的批次";
}
InventoryData data = inventoryDataManager.findOne(new Query(Criteria.where("inventoryBatch").is(inventoryBatch).and("boxPartition").is(posName)));
if (data != null) {
......@@ -519,7 +573,7 @@ public class InventoryController {
}
data.setReelCount(BoxUtil.getPartitionCount(posName, boxBarcode.getSubCodeList()));
data.setAmout(BoxUtil.getPartitionNum(posName, boxBarcode.getSubCodeList()));
data.setInventoryBatch(inventoryBatch+"");
data.setInventoryBatch(inventoryBatch + "");
data.setCreator(SecurityUtils.getCurrentUsername());
}
data.setInventoryReelCount(data.getInventoryReelCount() + 1);
......@@ -532,6 +586,10 @@ public class InventoryController {
} else {
data.setStatus(InventoryStatus.EXECUTING.name());
}
//判断data是否需要盘点,如果不是,则改成需要盘点
if (!data.isNeedInventory()){
data.setNeedInventory(true);
}
inventoryDataManager.save(data);
return errorMsg;
}
......@@ -568,6 +626,7 @@ public class InventoryController {
for (int i = 1; i <= count; i++) {
String priPartition = boxStr + "-" + i;
InventoryData data = new InventoryData();
data.setBox(boxStr);
data.setBoxPartition(priPartition);
//料号
String partNumber = BoxUtil.getPartitionPartNumber(priPartition, subCodeList);
......@@ -591,6 +650,9 @@ public class InventoryController {
data.setNeedInventory(false);
data.setStatus(InventoryStatus.FINISHED.name());
}
if(subCodeList == null || subCodeList.isEmpty()){
data.setMatch(true);
}
inventoryDataManager.save(data);
}
}
......
package com.neotel.smfcore.custom.lizhen.agvBox.util;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.util.DataCache;
......@@ -172,8 +173,8 @@ public class BoxUtil {
* @return
*/
public static boolean isInventoryFinished(String boxStr) {
Long inventoryBatch = dataCache.getCache(INVENTORY_DATA);
if (inventoryBatch == null) {
String inventoryBatch = dataCache.getCache(INVENTORY_DATA) +"";
if (StringUtils.isBlank(inventoryBatch) || "-1".equals(inventoryBatch)) {
return true;
}
List<InventoryData> dataList = inventoryDataManager.findByQuery(new Query(Criteria.where("inventoryBatch").is(inventoryBatch).and("box").is(boxStr)));
......
......@@ -741,6 +741,7 @@ public class OuterReportController {
map.put("隔口", data.getBoxPartition());
map.put("料号", data.getPartNumber());
map.put("描述", "");
//map.put("原储位",data.getOriPosName());
map.put("储位", data.getPosName());
map.put("卷数", data.getReelCount());
map.put("数量", data.getAmout());
......@@ -750,6 +751,8 @@ public class OuterReportController {
map.put("盘点人", data.getCreator());
map.put("盘点状态", InventoryStatus.getValue(data.getStatus()));
map.put("盘点批次", data.getInventoryBatch());
map.put("人工是否确认", data.isNeedInventory() ? "是" : "否");
map.put("创建时间",data.getCreateDate());
results.add(map);
}
try {
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!