Commit c14cd7dc zshaohui

盘点功能更新

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