Commit a6d2d05d zshaohui

盘点数据优化

bug修改
1 个父辈 6fb330ee
......@@ -558,9 +558,12 @@ public class BarcodeRule {
}
if(batch_item.hasThisField()){
String batch = batch_item.getStrValue(codeArr);
if (batch.indexOf("-") != -1){
batch = batch.substring(0,batch.lastIndexOf("-"));
if (batch.indexOf("-") == -1){
log.info("条码解析失败,BATCH字段不合规则");
codeBean.setError("smfcore.error.barcode.noField",new String[]{"BATCH"},"条码解析失败,未找到{0}字段");
return codeBean;
}
batch = batch.substring(0,batch.lastIndexOf("-"));
b.setBatch(batch);
}
int quantity = 0;
......@@ -612,9 +615,12 @@ public class BarcodeRule {
if (dateCode_item.hasThisField()){
String dateCode = dateCode_item.getStrValue(codeArr);
if (dateCode.indexOf("-") != -1){
dateCode = dateCode.substring(dateCode.lastIndexOf("-")+1);
if (dateCode.indexOf("-") == -1){
log.info("条码解析失败,DATECODE字段不合规则");
codeBean.setError("smfcore.error.barcode.noField",new String[]{"DATECODE"},"条码解析失败,未找到{0}字段");
return codeBean;
}
dateCode = dateCode.substring(dateCode.lastIndexOf("-")+1);
b.setDateCode(dateCode);
}
......
......@@ -365,6 +365,7 @@ public class DeviceController {
for (ReelLockPosInfo lockPosInfo : copyList) {
if (System.currentTimeMillis() - lockPosInfo.getCreateDate().getTime() >= 1000 * 60 * 60) {
ReelLockPosUtil.removeReelLockPosInfo(lockPosInfo.getBarcode());
log.info(lockPosInfo.getBarcode()+"锁定时间超过1小时,解除锁定:"+lockPosInfo.getCreateDate());
}
}
return resultMap;
......
......@@ -15,6 +15,11 @@ import java.util.List;
public class InventoryData extends BasePo {
/**
* 原始库位
*/
private String oriPosName;
/**
* 料箱号
*/
private String box;
......@@ -77,13 +82,17 @@ public class InventoryData extends BasePo {
/**
* 盘点批次
*/
private Long inventoryBatch;
private String inventoryBatch;
/**
* 盘点的barcode集合
*/
private List<Barcode> barcodeList;
/**
* 是否需要盘点,默认false
*/
private boolean needInventory = false;
public synchronized void updateBarcodeList(Barcode barcode) {
if (barcodeList == null) {
......
......@@ -4,10 +4,7 @@ import com.google.common.collect.Lists;
import com.neotel.smfcore.common.bean.ReelLockPosInfo;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.ReelLockPosUtil;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.common.utils.*;
import com.neotel.smfcore.core.barcode.bean.CodeBean;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
......@@ -109,7 +106,7 @@ public class InventoryController {
int inventoryCount = 0;
String storageId = "";
for (Storage storage : dataCache.getAllStorage().values()) {
if (!storage.isVirtual()){
if (!storage.isVirtual()) {
storageId = storage.getId();
break;
}
......@@ -117,13 +114,13 @@ public class InventoryController {
int count = storagePosManager.countByQuery(new Query(Criteria.where("storageId").is(storageId)));
Long inventoryBatch = dataCache.getCache(INVENTORY_DATA);
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())));
}
resultMap.put("inventoryCount", inventoryCount);
resultMap.put("count", count);
resultMap.put("inventoryBatch",inventoryBatch == -1 ? "" : inventoryBatch);
resultMap.put("inventoryBatch", StringUtils.isBlank(inventoryBatch) || "-1".equals(inventoryBatch) ? "" : inventoryBatch);
return ResultBean.newOkResult(resultMap);
}
......@@ -136,9 +133,9 @@ public class InventoryController {
@RequestMapping("/inventoryStart")
@AnonymousAccess
public ResultBean inventoryStart() {
Long inventoryBatch = dataCache.getCache(INVENTORY_DATA);
if (inventoryBatch == null || inventoryBatch == -1) {
inventoryBatch = System.currentTimeMillis();
String inventoryBatch = dataCache.getCache(INVENTORY_DATA) + "";
if (StringUtils.isBlank(inventoryBatch) || "-1".equals(inventoryBatch)) {
inventoryBatch = DateUtil.toDateString(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss.SSS");
dataCache.updateCache(INVENTORY_DATA, inventoryBatch);
}
log.info(SecurityUtils.getCurrentUsername() + "开始盘点,批次为:" + inventoryBatch);
......@@ -155,8 +152,8 @@ public class InventoryController {
@RequestMapping("/inventoryEnd")
@AnonymousAccess
public ResultBean inventoryEnd(int type) {
Long inventoryBatch = dataCache.getCache(INVENTORY_DATA);
if (inventoryBatch == null) {
String inventoryBatch = dataCache.getCache(INVENTORY_DATA) + "";
if (StringUtils.isBlank(inventoryBatch) || "-1".equals(inventoryBatch)) {
return ResultBean.newErrorResult(-1, "", "当前没有要盘点的批次");
}
//根据批次查询所有的盘点数据
......@@ -200,14 +197,13 @@ public class InventoryController {
@RequestMapping("/getStoragePosData")
@AnonymousAccess
public List<StoragePosDto> getStoragePosData(String posName) {
Map<String, List<StoragePosDto>> resultMap = new HashMap<>();
List<Storage> storageList = new ArrayList<>();
for (Storage storage : dataCache.getAllStorage().values()) {
if (!storage.isVirtual()) {
storageList.add(storage);
}
}
Long inventoryBatch = dataCache.getCache(INVENTORY_DATA);
String inventoryBatch = dataCache.getCache(INVENTORY_DATA) + "";
//获取所有库位信息
for (Storage storage : storageList) {
List<StoragePos> storagePosList = storagePosManager.findByQuery(inventoryQuery(posName, storage.getId(), null));
......@@ -222,14 +218,15 @@ public class InventoryController {
}
if (statusList.contains(InventoryStatus.NEW.name())) {
pos.setInventoryStatus(InventoryStatus.NEW.name());
} else if (!statusList.contains(InventoryStatus.NEW.name()) && statusList.contains(InventoryStatus.EXECUTING.name())){
} else if (!statusList.contains(InventoryStatus.NEW.name()) && statusList.contains(InventoryStatus.EXECUTING.name())) {
pos.setInventoryStatus(InventoryStatus.EXECUTING.name());
} else if (!statusList.contains(InventoryStatus.NEW.name()) && !statusList.contains(InventoryStatus.EXECUTING.name())){
} else if (!statusList.contains(InventoryStatus.NEW.name()) && !statusList.contains(InventoryStatus.EXECUTING.name())) {
pos.setInventoryStatus(InventoryStatus.FINISHED.name());
}
}
}
}
storagePosDtos = storagePosDtos.stream().sorted(Comparator.comparing(StoragePosDto :: getPosName).reversed()).collect(Collectors.toList());
return storagePosDtos;
}
return new ArrayList<>();
......@@ -245,6 +242,10 @@ public class InventoryController {
@RequestMapping("/inventoryOut")
@AnonymousAccess
public ResultBean inventoryOut(@RequestBody List<String> storagePosIdList) {
String inventoryBatch = dataCache.getCache(INVENTORY_DATA) + "";
if (StringUtils.isBlank(inventoryBatch) || "-1".equals(inventoryBatch)) {
return ResultBean.newErrorResult(-1, "", "请点击开始盘点");
}
if (storagePosIdList == null || storagePosIdList.isEmpty()) {
return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"ID"});
}
......@@ -262,17 +263,17 @@ public class InventoryController {
//生成出库任务
DataLog dataLog = new DataLog(storage, barcode, pos);
dataLog.setType(OP.CHECKOUT);
//dataLog.setCreator(SecurityUtils.getCurrentUsername());
dataLog.setCreator(SecurityUtils.getCurrentUsername());
dataLog.setExtendType(ExtendType.INVENTORY_CHECKOUT); //盘点出库
try {
taskService.addTaskToExecute(dataLog);
}catch (Exception e){
log.error("盘点出库失败:"+e.getMessage());
} catch (Exception e) {
log.error("盘点出库失败:" + e.getMessage());
continue;
}
//生成盘点数据
generateInventoryData(barcode, pos);
}
//生成盘点数据
generateInventoryData(barcode, pos);
}
}
return ResultBean.newOkResult("");
......@@ -518,7 +519,8 @@ 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);
data.setInventoryAmout(data.getInventoryAmout() + barcode.getAmount());
......@@ -543,38 +545,54 @@ public class InventoryController {
*/
private void generateInventoryData(Barcode barcode, StoragePos pos) {
//判断盘点批次是否存在
Long inventoryBatch = dataCache.getCache(INVENTORY_DATA);
if (inventoryBatch == null) {
inventoryBatch = System.currentTimeMillis();
dataCache.updateCache(INVENTORY_DATA, inventoryBatch);
}
String inventoryBatch = dataCache.getCache(INVENTORY_DATA);
//获取原始库位
String posName = pos.getPosName();
String oriPosName = posName.substring(0, posName.lastIndexOf("-"));
//开始处理数据
List<Barcode> subCodeList = barcode.getSubCodeList();
if (subCodeList != null && !subCodeList.isEmpty()) {
if (barcode == null) {
InventoryData data = new InventoryData();
//料箱号
data.setBox(barcode.getBarcode());
//隔口码
String partition = getInventoryPartition(subCodeList);
data.setBoxPartition(partition);
//料号
String partNumber = BoxUtil.getPartitionPartNumber(partition, subCodeList);
data.setPartNumber(partNumber);
//物料描述
data.setDescribe("");
//储位
data.setPosName(pos.getPosName());
//卷数
int partitionCount = BoxUtil.getPartitionCount(partition, subCodeList);
data.setReelCount(partitionCount);
//数量
int partitionNum = BoxUtil.getPartitionNum(partition, subCodeList);
data.setAmout(partitionNum);
//创建人
data.setMatch(true);
data.setStatus(InventoryStatus.FINISHED.name());
data.setNeedInventory(false);
data.setCreator(SecurityUtils.getCurrentUsername());
//盘点批次
data.setInventoryBatch(inventoryBatch);
data.setOriPosName(oriPosName);
data.setPosName(pos.getPosName());
inventoryDataManager.save(data);
} else {
List<Barcode> subCodeList = barcode.getSubCodeList();
String partition = getInventoryPartition(subCodeList);
String boxStr = barcode.getBarcode();
int count = boxStr.startsWith("CS") ? 8 : 2; //CS开头的8个隔口,其他是2个
for (int i = 1; i <= count; i++) {
String priPartition = boxStr + "-" + i;
InventoryData data = new InventoryData();
data.setBoxPartition(priPartition);
//料号
String partNumber = BoxUtil.getPartitionPartNumber(priPartition, subCodeList);
data.setPartNumber(partNumber);
//物料描述
data.setDescribe("");
//储位
data.setPosName(pos.getPosName());
//卷数
int partitionCount = BoxUtil.getPartitionCount(priPartition, subCodeList);
data.setReelCount(partitionCount);
//数量
int partitionNum = BoxUtil.getPartitionNum(priPartition, subCodeList);
data.setAmout(partitionNum);
data.setCreator(SecurityUtils.getCurrentUsername());
data.setInventoryBatch(inventoryBatch);
data.setOriPosName(oriPosName);
if (partition.equals(boxStr + "-" + i)) {
data.setNeedInventory(true);
} else {
data.setNeedInventory(false);
data.setStatus(InventoryStatus.FINISHED.name());
}
inventoryDataManager.save(data);
}
}
}
......@@ -585,8 +603,12 @@ public class InventoryController {
* @return
*/
private String getInventoryPartition(List<Barcode> subCodeList) {
int index = new Random().nextInt(subCodeList.size());
return subCodeList.get(index).getPosName();
if (subCodeList != null && !subCodeList.isEmpty()) {
int index = new Random().nextInt(subCodeList.size());
return subCodeList.get(index).getPosName();
} else {
return "";
}
}
......
......@@ -65,8 +65,11 @@ public class BoxUtil {
* @return
*/
public static int getPartitionNum(String partition, List<Barcode> subCodeList) {
int num = subCodeList.stream().filter(item -> partition.equals(item.getPosName())).mapToInt(Barcode::getAmount).sum();
return num;
if (subCodeList != null && !subCodeList.isEmpty()) {
int num = subCodeList.stream().filter(item -> partition.equals(item.getPosName())).mapToInt(Barcode::getAmount).sum();
return num;
}
return 0;
}
......@@ -97,8 +100,11 @@ public class BoxUtil {
* @return
*/
public static int getPartitionCount(String partition, List<Barcode> subCodeList) {
int partitionCount = (int) subCodeList.stream().filter(item -> partition.equals(item.getPosName())).count();
return partitionCount;
if (subCodeList != null && !subCodeList.isEmpty()) {
int partitionCount = (int) subCodeList.stream().filter(item -> partition.equals(item.getPosName())).count();
return partitionCount;
}
return 0;
}
/**
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!