Commit c14cd7dc zshaohui

盘点功能更新

1 个父辈 6325b4fa
......@@ -252,7 +252,11 @@ public class DataInitManager {
//料串绑定
addNewFunctionMenu(7, raw, "manualBindStacker", "料串绑定", "manualBindStacker", "manualBindStacker/index", "docOut", functionMenuMap);
//盘点
Menu pandian = Menu.CreatePMenu("盘点", 999, "pandian", 3, "mIDList", raw);
addNewFunctionMenu(1,pandian,"sysInventory", "盘点出库","sysInventory", "system/sysInventory/index","mIDList",functionMenuMap);
addNewFunctionMenu(2, pandian, "staWorkSurface/s1", "盘点作业","staWorkSurface/s1", "outers/staWorkSurface/index","index",functionMenuMap);
addNewFunctionMenu(3,pandian,"sysInReport","盘点报表","sysInReport","neolight/sysInReport/index","mIDList",functionMenuMap);
//addNewFunctionMenu(132,null,"outPage","线外入库","outPage","outers/outPage/index","index",functionMenuMap);
......@@ -324,7 +328,7 @@ public class DataInitManager {
addNewFunctionMenu(80, pMenuReport,"inventoryReport", "库存", "inventoryReport", "neolight/inventoryReport/index", "BOM",functionMenuMap);
addNewFunctionMenu(81, pMenuReport,"materialShortageReport", "缺料", "materialShortageReport", "neolight/materialShortageReport/index", "mShortageReport",functionMenuMap);
addNewFunctionMenu(82,pMenuReport,"pkSearch","PK查询","pkSearch","neolight/pkSearch/index","findOut",functionMenuMap);
addNewFunctionMenu(83,pMenuReport,"sysInReport","盘点","sysInReport","neolight/sysInReport/index","mIDList",functionMenuMap);
//addNewFunctionMenu(83,pMenuReport,"sysInReport","盘点","sysInReport","neolight/sysInReport/index","mIDList",functionMenuMap);
addNewFunctionMenu(84,pMenuReport,"materialTrack","物料追溯","materialTrack","report/materialTrack/index","mTrack",functionMenuMap);
......@@ -379,7 +383,7 @@ public class DataInitManager {
Menu s1 = Menu.CreatePMenu("工位1", 13, "/s1", 2, "index", null);
addNewFunctionMenu(123, s1, "outerWarehouse/s1", "入库扫码装箱","outerWarehouse/s1", "outers/outerWarehouse/index","index",functionMenuMap);
addNewFunctionMenu(124, s1, "outOperation/s1", "出库作业","outOperation/s1", "outers/outOperation/index","index",functionMenuMap);
addNewFunctionMenu(125, s1, "staWorkSurface/s1", "盘点作业","staWorkSurface/s1", "outers/staWorkSurface/index","index",functionMenuMap);
//addNewFunctionMenu(125, s1, "staWorkSurface/s1", "盘点作业","staWorkSurface/s1", "outers/staWorkSurface/index","index",functionMenuMap);
Menu s2 = Menu.CreatePMenu("工位2", 14, "/s2", 2, "index", null);
addNewFunctionMenu(124, s2, "outerWarehouse/s2", "入库扫码装箱","outerWarehouse/s2", "outers/outerWarehouse/index","index",functionMenuMap);
......@@ -413,7 +417,7 @@ public class DataInitManager {
//内外仓电子看板
//addNewFunctionMenu(1,null,"elecKanban", "电子看板","elecKanban", "elecKanban/index","kanban",functionMenuMap);
addNewFunctionMenu(135,null,"sysInventory", "盘点出库","sysInventory", "system/sysInventory/index","mIDList",functionMenuMap);
//addNewFunctionMenu(135,null,"sysInventory", "盘点出库","sysInventory", "system/sysInventory/index","mIDList",functionMenuMap);
//汇总报表
Menu meMenuReport = Menu.CreatePMenu("汇总报表", 17, "meReport", 3, "inOutData",null);
......
......@@ -7,6 +7,8 @@ import com.neotel.smfcore.common.bean.ReelLockPosInfo;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.*;
import com.neotel.smfcore.core.barcode.bean.CodeBean;
import com.neotel.smfcore.core.barcode.enums.BARCODE_STATUS;
import com.neotel.smfcore.core.barcode.rest.bean.dto.BarcodeDto;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.utils.CodeResolve;
......@@ -31,6 +33,8 @@ import com.neotel.smfcore.custom.lizhen.agvBox.service.manager.InventoryDataMana
import com.neotel.smfcore.custom.lizhen.agvBox.util.BoxUtil;
import com.neotel.smfcore.custom.lizhen.agvBox.util.StationCacheUtil;
import com.neotel.smfcore.custom.lizhen.innerBox.enums.ExtendType;
import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.enums.TaskCurrentLoc;
import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.util.BoxHandleUtil;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -123,7 +127,7 @@ public class InventoryController {
if (dataList != null && !dataList.isEmpty()) {
List<String> posNameList = new ArrayList<>();
for (InventoryData data : dataList) {
boolean isFinished = isInventoryDataFinshed(data.getPosName(),dataList);
boolean isFinished = isInventoryDataFinshed(data.getPosName(), dataList);
if (isFinished) {
if (posNameList.isEmpty()) {
posNameList.add(data.getPosName());
......@@ -136,7 +140,7 @@ public class InventoryController {
}
inventoryCount = posNameList.size();
}
finishInventory = getFinishInventoryPosName(inventoryBatch,dataList);
finishInventory = getFinishInventoryPosName(inventoryBatch, dataList);
}
resultMap.put("inventoryCount", inventoryCount);
resultMap.put("count", count);
......@@ -201,14 +205,6 @@ public class InventoryController {
data.setStatus(InventoryStatus.FINISHED.name());
inventoryDataManager.save(data);
}
String box = data.getBox();
Barcode barcode = barcodeManager.findByBarcode(box);
if (barcode != null) {
if (barcode.isInventory()) {
barcode.setInventory(false);
barcodeManager.save(barcode);
}
}
}
} else {
......@@ -243,10 +239,16 @@ public class InventoryController {
//获取所有库位信息
for (Storage storage : storageList) {
List<StoragePos> storagePosList = storagePosManager.findByQuery(inventoryQuery(posName, storage.getId(), null));
List<StoragePosDto> resultList = new ArrayList<>();
List<StoragePosDto> storagePosDtos = storagePosMapper.toDto(storagePosList);
if (inventoryBatch != null) {
for (StoragePosDto pos : storagePosDtos) {
List<InventoryData> dataList = inventoryDataManager.findByQuery(new Query(Criteria.where("inventoryBatch").is(inventoryBatch).and("posName").is(pos.getPosName())));
BarcodeDto barcode = pos.getBarcode();
if (barcode != null) {
if (barcode.getStatus() != BARCODE_STATUS.IN_STORE) {
pos.setBarcode(null);
} else {
List<InventoryData> dataList = inventoryDataManager.findByQuery(new Query(Criteria.where("inventoryBatch").is(inventoryBatch).and("box").is(barcode.getBarcode())));
if (dataList != null && !dataList.isEmpty()) {
List<String> statusList = new ArrayList<>();
for (InventoryData data : dataList) {
......@@ -262,8 +264,11 @@ public class InventoryController {
}
}
}
storagePosDtos = storagePosDtos.stream().sorted(Comparator.comparing(StoragePosDto :: getPosName).reversed()).collect(Collectors.toList());
return storagePosDtos;
resultList.add(pos);
}
}
resultList = resultList.stream().sorted(Comparator.comparing(StoragePosDto::getPosName).reversed()).collect(Collectors.toList());
return resultList;
}
return new ArrayList<>();
}
......@@ -291,33 +296,62 @@ 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)));
//查询到料箱信息
List<String> barcodeList = new ArrayList<>();
for (StoragePos pos : storagePosList) {
Barcode barcode = pos.getBarcode();
if (barcode != null) {
if (barcode.getStatus() != BARCODE_STATUS.IN_STORE) {
log.info(barcode.getBarcode() + "料箱不在库,跳过");
} else {
barcodeList.add(barcode.getBarcode());
}
}
}
//判断是否已经生成盘点记录
List<InventoryData> dataList = inventoryDataManager.findByQuery(new Query(Criteria.where("inventoryBatch").is(inventoryBatch).and("box").in(barcodeList)));
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) + "已经进行过盘点出库,请核实");
List<String> boxList = dataList.stream().map(InventoryData::getBox).collect(Collectors.toList());
boxList = boxList.stream().distinct().collect(Collectors.toList());
return ResultBean.newErrorResult(-1, "", JsonUtil.toJsonStr(boxList) + "已经进行过盘点出库,请核实");
}
//判断是否有未完成的任务
List<DataLog> allTasks = taskService.getAllTasks();
for (String barcodeStr : barcodeList) {
for (DataLog dataLog : allTasks) {
if (!dataLog.isFinished() && !dataLog.isCancel()) {
if (barcodeStr.equals(dataLog.getBarcode())) {
log.info(barcodeStr + "有未完成的任务");
return ResultBean.newErrorResult(-1, "", barcodeStr + "有未完成的任务,请确认");
}
}
}
}
for (StoragePos pos : storagePosList) {
log.info("盘点出库的库位为:" + pos.getPosName());
Barcode barcode = pos.getBarcode();
if (barcode != null) {
if (barcode.getStatus() != BARCODE_STATUS.IN_STORE) {
continue;
}
log.info("盘点出库的物料为:" + barcode.getBarcode());
Storage storage = dataCache.getStorageById(pos.getStorageId());
barcode.setInventory(true);
barcode = barcodeManager.save(barcode);
//生成出库任务
DataLog dataLog = new DataLog(storage, barcode, pos);
dataLog.setType(OP.CHECKOUT);
dataLog.setCreator(SecurityUtils.getCurrentUsername());
dataLog.setCreator(SecurityUtils.getLoginUsername());
dataLog.setExtendType(ExtendType.INVENTORY_CHECKOUT); //盘点出库
dataLog.setInventoryBatch(dataCache.getCache(INVENTORY_DATA));
dataLog.setLoc(TaskCurrentLoc.Manual_FeedingInlet);
dataLog.setSourceName("盘点出库");
try {
taskService.addTaskToExecute(dataLog);
} catch (Exception e) {
log.error("盘点出库失败:" + e.getMessage());
log.error("盘点出库失败:", e);
msg = StringUtils.isBlank(msg) ? dataLog.getBarcode() : msg + "," + dataLog.getBarcode();
continue;
}
......@@ -326,9 +360,9 @@ public class InventoryController {
generateInventoryData(barcode, pos);
}
}
if (StringUtils.isNotBlank(msg)){
msg = msg +"已经有出入库任务请核实";
return ResultBean.newOkResult("","",msg);
if (StringUtils.isNotBlank(msg)) {
msg = msg + "已经有出入库任务请核实";
return ResultBean.newOkResult("", "", msg);
}
return ResultBean.newOkResult("");
}
......@@ -352,32 +386,28 @@ public class InventoryController {
/**
* 料箱信息
*
* @param name
* @param boxStr
* @return
*/
@RequestMapping("/inventoryBoxInfo")
//@AnonymousAccess
public ResultBean inventoryBoxInfo(String name) {
//根据名称获取当前工位上的箱子
Station station = StationCacheUtil.getStation(name);
if (station == null) {
return ResultBean.newErrorResult(-1, "", name + "工位信息未上传成功,请重试", new String[]{});
}
//当前料箱的信息
String currentRfid = station.getCurrentRfid();
if (StringUtils.isBlank(currentRfid)) {
return ResultBean.newErrorResult(-1, "", name + "当前工位料箱信息未上传成功,请重试", new String[]{});
public ResultBean inventoryBoxInfo(String boxStr) {
if (StringUtils.isEmpty(boxStr)) {
return ResultBean.newErrorResult(-1, "", "料箱信息不能为空");
}
//获取料箱信息
String boxStr = BoxUtil.getBoxStr(currentRfid);
String newBoxStr = BoxUtil.getBoxStr(boxStr);
//查找barcode
Barcode barcode = barcodeManager.findByBarcode(boxStr);
List<PartitionInfo> partitionInfoList = BoxUtil.getPartitionInfo(currentRfid, barcode);
Barcode barcode = barcodeManager.findByBarcode(newBoxStr);
if (barcode == null){
return ResultBean.newErrorResult(-1,"",boxStr+"对应的料箱信息不存在");
}
List<PartitionInfo> partitionInfoList = BoxUtil.getPartitionInfo(boxStr, barcode);
//盘点批次
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).and("needInventory").is(true)));
List<InventoryData> dataList = inventoryDataManager.findByQuery(new Query(Criteria.where("inventoryBatch").is(inventoryBatch).and("box").is(newBoxStr).and("needInventory").is(true)));
if (dataList != null && !dataList.isEmpty()) {
if (partitionInfoList != null && !partitionInfoList.isEmpty()) {
for (InventoryData inventoryData : dataList) {
......@@ -411,19 +441,10 @@ public class InventoryController {
@RequestMapping("/inventoryReel")
//@AnonymousAccess
public synchronized ResultBean inventoryReel(@RequestBody Map<String, String> paramMap) {
String name = paramMap.get("name");
String boxStr = paramMap.get("boxStr");
String bacodeStr = paramMap.get("bacodeStr");
log.info("盘点人:" + SecurityUtils.getCurrentUsername() + ",工位为:" + name + ",物料编码为:" + bacodeStr);
Station station = StationCacheUtil.getStation(name);
if (station == null) {
return ResultBean.newErrorResult(-1, "", name + "工位信息未上传成功,请重试");
}
//判断当前工位是否有料箱
String currentRfid = station.getCurrentRfid();
if (StringUtils.isBlank(currentRfid)) {
return ResultBean.newErrorResult(-1, "", name + "当前工位料箱信息未上传成功,请重试", new String[]{});
}
String errorMsg = inventoryReel(currentRfid, bacodeStr);
log.info("盘点人:" + SecurityUtils.getCurrentUsername() + ",料箱位:" + boxStr + ",物料编码为:" + bacodeStr);
String errorMsg = inventoryReel(boxStr, bacodeStr);
if (StringUtils.isNotBlank(errorMsg)) {
return ResultBean.newErrorResult(-1, "", "盘点失败:" + errorMsg);
}
......@@ -433,6 +454,7 @@ public class InventoryController {
/**
* 盘点完成并入库
*
* @param paramMap
* @return
*/
......@@ -440,92 +462,36 @@ public class InventoryController {
//@AnonymousAccess
public ResultBean inventoryFinished(@RequestBody Map<String, String> paramMap) {
String code = paramMap.get("barcode"); //料箱条码
String name = paramMap.get("name"); //工位名称
List<Storage> storageList = new ArrayList<>();
List<String> cidList = Lists.newArrayList();
for (Storage storage : dataCache.getAllStorage().values()) {
if (storage.isType(new DeviceType[]{DeviceType.AGV_BOX})) {
storageList.add(storage);
cidList.add(storage.getCid());
break;
}
}
log.info("盘点完成并入库,条码为:{},工位为:{}", code, name);
Station station = StationCacheUtil.getStation(name);
if (station == null) {
return ResultBean.newErrorResult(-1, "", name + "工位信息未上传成功,请重试");
}
//先找可用料仓
if (storageList == null || storageList.isEmpty()) {
return ResultBean.newErrorResult(-1, "", "没有可以入库的料仓");
if (StringUtils.isEmpty(code)) {
return ResultBean.newErrorResult(-1, "", "料箱条码不能为空");
}
//得到箱子号
String boxStr = BoxUtil.getBoxStr(code);
//校验rfid是否一致
String currentRfid = station.getCurrentRfid();
if (StringUtils.isBlank(currentRfid)) {
return ResultBean.newErrorResult(-1, "", name + "当前工位料箱信息未上传成功,请重试", new String[]{});
} else if (!currentRfid.startsWith(boxStr)) {
return ResultBean.newErrorResult(-1, "", "当前工位料箱" + currentRfid + "与" + "要入库的料箱:" + boxStr + "不一致", new String[]{});
//判断料箱信息是否存在
Barcode boxBarcode = barcodeManager.findByBarcode(boxStr);
if (boxBarcode == null) {
return ResultBean.newErrorResult(-1, "", boxStr + "对应的料箱信息不存在");
}
//判断是否盘点完成
boolean finished = BoxUtil.isInventoryFinished(boxStr);
if (!finished) {
return ResultBean.newErrorResult(-1, "", boxStr + "盘点未完成,请继续盘点");
}
//判断是否正在进行出入库任务
//判断是否有出库任务
for (DataLog dataLog : taskService.getAllTasks()) {
if (dataLog.getBarcode().equals(boxStr)) {
if (!dataLog.isFinished()) {
if (!dataLog.isCancel() && !dataLog.isFinished() && dataLog.getBarcode().equals(boxBarcode.getBarcode())) {
if (dataLog.isPutInTask()) {
//已有入库任务
return ResultBean.newErrorResult(-1, "", "物料[" + dataLog.getBarcode() + "]已有入库任务,需继续执行入库动作", new String[]{});
} else if (dataLog.isCheckOutTask()) {
//已有出库任务
return ResultBean.newErrorResult(-1, "", "物料[" + dataLog.getBarcode() + "]已有出库任务,需继续执行出库动作", new String[]{});
}
return ResultBean.newErrorResult(-1, "", boxStr + "有正在执行的入库任务,请确认");
} else {
log.info(boxStr + "有正在执行的出库任务,服务器更改状态为完成");
if (!dataLog.isOutFromPos()) {
taskService.moveTaskToFinished(dataLog);
BoxHandleUtil.outFromPos(dataLog);
dataLog.setOutFromPos(true);
}
dataLog.setStatus(OP_STATUS.FINISHED.name());
taskService.updateFinishedTask(dataLog);
}
}
//开始查找空库位
Barcode boxBarcode = barcodeManager.findByBarcode(boxStr);
//如果盘点批次为空的话,则查找新的库位,否则用原来的库位
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))
.with(Sort.by(Sort.Direction.DESC, "createDate")));
String posName = data.getPosName();
pos = storagePosManager.getByPosName(posName);
}
if (pos == null) {
return ResultBean.newErrorResult(-1, "", boxStr + "未找到可用库位");
}
if (pos != null) {
Storage theStorage = dataCache.getStorageById(pos.getStorageId());
ReelLockPosInfo oldLockInfo = ReelLockPosUtil.getLockPosInfoByCode(boxBarcode.getBarcode());
if (oldLockInfo != null) {
if (!oldLockInfo.getBarcode().equals(boxBarcode.getBarcode())) {
ReelLockPosUtil.removeReelLockPosInfo(oldLockInfo.getBarcode());
log.info("清理锁定库位:库位号[" + oldLockInfo.getLockPosName() + "]上物料[" + oldLockInfo.getBarcode() + "]锁定的库位");
}
}
ReelLockPosInfo reelLocInfo = new ReelLockPosInfo();
reelLocInfo.setBarcode(boxBarcode.getBarcode());
reelLocInfo.setCid(theStorage.getCid());
reelLocInfo.setLockPosName(pos.getPosName());
reelLocInfo.setLockPosId(pos.getId());
reelLocInfo = ReelLockPosUtil.addReelLockPosInfo(reelLocInfo, cidList);
if (reelLocInfo == null) {
return ResultBean.newErrorResult(-1, "", "[" + boxBarcode.getBarcode() + "]库位[" + reelLocInfo.getLockPosName() + "]已被锁定,暂停入库", new String[]{});
}
//生成入库任务
boxBarcode.setInventory(false);
barcodeManager.save(boxBarcode);
generateTask(dataCache.getStorageById(pos.getStorageId()), boxBarcode, pos, OP.PUT_IN, OP_STATUS.WAIT.name(), ExtendType.INVENTORY_PUTIN);
}
return ResultBean.newOkResult("");
}
......@@ -611,7 +577,7 @@ public class InventoryController {
String boxStr = BoxUtil.getBoxStr(currentRfid);
//判断当前料箱是否为要盘点的料箱
Barcode boxBarcode = barcodeManager.findByBarcode(boxStr);
if (boxBarcode == null || !boxBarcode.isInventory()) {
if (boxBarcode == null || BoxUtil.isInventoryFinished(boxStr)) {
return boxStr + "不是要盘点的料箱";
}
Barcode barcode = codeBean.getBarcode();
......@@ -625,10 +591,10 @@ public class InventoryController {
return barcode.getBarcode() + "存在料箱中:" + barcode.getPosName() + "与当前工位上的料箱:" + boxStr + "不一致";
}
//判断料号是否正确
Map<String, Object> barandMap = lizhenApi.brandQty(barcode.getPartNumber(), barcode.getProvider());
/*Map<String, Object> barandMap = lizhenApi.brandQty(barcode.getPartNumber(), barcode.getProvider());
if (barandMap.get("qty") == null) {
return barcode.getPartNumber() + "MES未返回料卷数量,未找到对应的料卷数量";
}
}*/
log.info(barcode.getBarcode() + "隔口信息:" + barcode.getPosName());
//开始查询盘点数据
//盘点批次
......@@ -683,14 +649,14 @@ public class InventoryController {
data.setNeedInventory(true);
}
//设置创建人为当前盘点人
data.setCreator(SecurityUtils.getCurrentUsername());
data.setCreator(SecurityUtils.getLoginUsername());
inventoryDataManager.save(data);
//同时,把当前料箱的盘点人,都改成当前登录人
List<InventoryData> inventoryDataList = inventoryDataManager.findByQuery(new Query(Criteria.where("inventoryBatch").is(inventoryBatch).and("box").is(boxStr).and("oriPosName").is(data.getOriPosName())));
if (inventoryDataList != null && !inventoryDataList.isEmpty()){
if (inventoryDataList != null && !inventoryDataList.isEmpty()) {
for (InventoryData inventoryData : inventoryDataList) {
inventoryData.setCreator(SecurityUtils.getCurrentUsername());
inventoryData.setCreator(SecurityUtils.getLoginUsername());
inventoryDataManager.save(inventoryData);
}
}
......@@ -709,7 +675,7 @@ public class InventoryController {
String inventoryBatch = dataCache.getCache(INVENTORY_DATA);
//获取原始库位
String posName = pos.getPosName();
String oriPosName = posName.substring(0, posName.lastIndexOf("-"));
//String oriPosName = posName.substring(0, posName.lastIndexOf("-"));
//开始处理数据
if (barcode == null) {
InventoryData data = new InventoryData();
......@@ -718,16 +684,16 @@ public class InventoryController {
data.setNeedInventory(false);
data.setCreator(SecurityUtils.getCurrentUsername());
data.setInventoryBatch(inventoryBatch);
data.setOriPosName(oriPosName);
data.setOriPosName(posName);
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") || boxStr.startsWith("CB") ? 8 : 2; //CS开头的8个隔口,其他是2
int count = boxStr.startsWith("C07") ? 6 : 3; //C07开头的6个隔口,其他是3
for (int i = 1; i <= count; i++) {
String priPartition = boxStr + "-" + i;
String priPartition = boxStr + "-0" + i;
InventoryData data = new InventoryData();
data.setBox(boxStr);
data.setBoxPartition(priPartition);
......@@ -745,8 +711,8 @@ public class InventoryController {
int partitionNum = BoxUtil.getPartitionNum(priPartition, subCodeList);
data.setAmout(partitionNum);
data.setInventoryBatch(inventoryBatch);
data.setOriPosName(oriPosName);
if (partition.equals(boxStr + "-" + i)) {
data.setOriPosName(posName);
if (partition.equals(boxStr + "-0" + i)) {
data.setNeedInventory(true);
} else {
data.setNeedInventory(false);
......@@ -778,16 +744,20 @@ public class InventoryController {
private Query inventoryQuery(String posName, String storageId, List<String> storagePosIdList) {
Query query = new Query();
//Criteria criteria = Criteria.where("barcode.status").is(BARCODE_STATUS.IN_STORE);
Criteria criteria = new Criteria();
if (storagePosIdList != null && !storagePosIdList.isEmpty()) {
query.addCriteria(Criteria.where("id").in(storagePosIdList));
criteria.and("id").in(storagePosIdList);
}
if (StringUtils.isNotBlank(storageId)) {
query.addCriteria(Criteria.where("storageId").is(storageId)/*.and("used").is(true)*/);
criteria.and("storageId").is(storageId);
}
if (StringUtils.isNotBlank(posName)) {
Pattern pattern = Pattern.compile(QueryHelp.escapeExprSpecialWord(posName), Pattern.CASE_INSENSITIVE);
query.addCriteria(Criteria.where("posName").regex(pattern));
criteria.and("posName").regex(pattern);
}
//获取到在库的库存信息
query.addCriteria(criteria);
//query.fields().include("barcode", "updateDate", "storageId","posName");
return query;
}
......
......@@ -124,7 +124,7 @@ public class BoxUtil {
Map<String, PartitionInfo> infoMap = new HashMap<>();
String boxStr = getBoxStr(boxSideStr);
for (int i = 1; i < 9; i++) {
String partition = boxStr + "-" + i;
String partition = boxStr + "-0" + i;
PartitionInfo info = new PartitionInfo();
info.setPartition(partition);
info.setReelCount(getPartitionCount(partition, subCodeList));
......@@ -132,37 +132,39 @@ public class BoxUtil {
info.setNum(getPartitionNum(partition, subCodeList));
infoMap.put(partition, info);
}
String par01 = boxStr+"-01";
String par02 = boxStr+"-02";
String par03 = boxStr+"-03";
String par04 = boxStr+"-04";
String par05 = boxStr+"-05";
String par06 = boxStr+"-06";
if (boxSideStr.endsWith("A")) {
if (boxSideStr.startsWith("CS") || boxSideStr.startsWith("CB")) {
for (int i = 8; i > 4; i--) {
String partition = boxStr + "-" + i;
infoList.add(infoMap.get(partition));
}
for (int i = 1; i < 5; i++) {
String partition = boxStr + "-" + i;
infoList.add(infoMap.get(partition));
}
if (boxSideStr.startsWith("C07")) {
infoList.add(infoMap.get(par02));
infoList.add(infoMap.get(par04));
infoList.add(infoMap.get(par05));
infoList.add(infoMap.get(par01));
infoList.add(infoMap.get(par03));
infoList.add(infoMap.get(par05));
} else {
for (int i = 2; i > 0; i--) {
String partition = boxStr + "-" + i;
infoList.add(infoMap.get(partition));
}
infoList.add(infoMap.get(par01));
infoList.add(infoMap.get(par02));
infoList.add(infoMap.get(par03));
}
} else if (boxSideStr.endsWith("B")) {
if (boxSideStr.startsWith("CS") || boxSideStr.startsWith("CB")) {
for (int i = 4; i > 0; i--) {
String partition = boxStr + "-" + i;
infoList.add(infoMap.get(partition));
}
for (int i = 5; i < 9; i++) {
String partition = boxStr + "-" + i;
infoList.add(infoMap.get(partition));
}
if (boxSideStr.startsWith("C07")) {
infoList.add(infoMap.get(par05));
infoList.add(infoMap.get(par03));
infoList.add(infoMap.get(par01));
infoList.add(infoMap.get(par06));
infoList.add(infoMap.get(par04));
infoList.add(infoMap.get(par02));
} else {
for (int i = 1; i < 3; i++) {
String partition = boxStr + "-" + i;
infoList.add(infoMap.get(partition));
}
infoList.add(infoMap.get(par03));
infoList.add(infoMap.get(par02));
infoList.add(infoMap.get(par01));
}
}
}
......
......@@ -34,6 +34,7 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Api(tags = "虚拟仓盘点")
@RequestMapping("/virInventory")
......@@ -190,4 +191,34 @@ public class VirInventoryController {
return ResultBean.newOkResult(cache.toString());
}
}
@ApiOperation("获取所有库位")
@RequestMapping("/getAllPosName")
@AnonymousAccess
public void getAllPosName() {
List<String> posNameList = new ArrayList<>();
Query query = new Query();
query.fields().include("posName","storageId");
List<StoragePos> storagePosList = storagePosManager.findByQuery(query);
for (StoragePos pos : storagePosList) {
Storage storage = dataCache.getStorageById(pos.getStorageId());
if (storage.isVirtual()){
continue;
}
String posName = pos.getPosName();
posName = posName.substring(13,posName.length());
posNameList.add(posName);
}
posNameList = posNameList.stream().distinct().collect(Collectors.toList());
posNameList = posNameList.stream().collect(Collectors.toList());
for (String s : posNameList) {
log.info(s);
}
}
}
......@@ -364,6 +364,12 @@ public class ManualGrPutInController {
return ResultBean.newErrorResult(-1, "smfcore.error.barcode.invalid", "条码无效");
}
//判断盘点是否完成
boolean finished = BoxUtil.isInventoryFinished(boxStr);
if (!finished) {
return ResultBean.newErrorResult(-1, "", boxStr + "盘点未完成,请继续盘点");
}
//1.清理要出库的数据
List<Barcode> newSubCodeList = new ArrayList<>();
......@@ -378,9 +384,7 @@ public class ManualGrPutInController {
barcode.setOrderItemId("");
barcode.setOut(false);
barcode = barcodeManager.save(barcode);
BoxHandleUtil.manualGenerateTask(barcode,OP_STATUS.CANCEL.name(),barcode.getAmount(),OP.CHECKOUT,orderItemId,"");
}
newSubCodeList.add(barcode);
}
......@@ -389,6 +393,13 @@ public class ManualGrPutInController {
boxBarcode.setSubCodeList(newSubCodeList);
boxBarcode = barcodeManager.save(boxBarcode);
//同时更新pos表
StoragePos storagePos = BoxHandleUtil.locOnePos(boxBarcode);
if (storagePos != null){
storagePos.setBarcode(boxBarcode);
storagePosManager.save(storagePos);
}
//1.判断是否有正在入库的任务
for (DataLog dataLog : taskService.getAllTasks()) {
......
......@@ -14,6 +14,7 @@ import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.lizhen.agvBox.util.BoxUtil;
import com.neotel.smfcore.custom.luxsan.factory_c.common.util.CacheNameUtil;
import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.kafka.service.KafkaService;
import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.util.BoxHandleUtil;
......@@ -135,6 +136,11 @@ public class ManualLineController {
return ResultBean.newErrorResult(-1, "smfcore.error.barcode.invalid", "条码无效");
}
boolean finished = BoxUtil.isInventoryFinished(boxBarcode.getBarcode());
if (!finished) {
return ResultBean.newErrorResult(-1, "", boxStr + "盘点未完成,请继续盘点");
}
//1.清理要出库的数据
List<Barcode> newSubCodeList = new ArrayList<>();
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!