From 75d7144ce74e7b755c4466bb1e03b2c1b9f5d5ba Mon Sep 17 00:00:00 2001 From: Huluwa22 <2667400744@qq.com> Date: Tue, 8 Apr 2025 18:02:55 +0800 Subject: [PATCH] 1 --- .../java/com/wms/bussiness/JobComponent.java | 10 +- .../java/com/wms/bussiness/TaskOperation.java | 2 +- .../serviceImplements/OrderInImplement.java | 111 +++++++------ .../parent/ContainerImplement.java | 150 +++++++++--------- 4 files changed, 135 insertions(+), 138 deletions(-) diff --git a/src/main/java/com/wms/bussiness/JobComponent.java b/src/main/java/com/wms/bussiness/JobComponent.java index 9bbdae3..b58295b 100644 --- a/src/main/java/com/wms/bussiness/JobComponent.java +++ b/src/main/java/com/wms/bussiness/JobComponent.java @@ -78,7 +78,7 @@ public class JobComponent extends BaseController { private final VehicleMapper vehicleMapper; - @Scheduled(fixedDelay = 1000) + @Scheduled(fixedDelay = 2000) public void sendTasksToWcs() { try { // 查找待下发的任务 @@ -94,14 +94,14 @@ public class JobComponent extends BaseController { sendTasksInToWcs(task); return; } + if(task.getTaskType().equals(TaskType.MOVE.getCode())){ + sendTasksMoveToWcs(task); + return; + } if(task.getTaskType().equals(TaskType.OUT.getCode()) || task.getTaskType().equals(TaskType.INVENTORY.getCode())){ sendTasksOutToWcs(task); return; } - if(task.getTaskType().equals(TaskType.MOVE.getCode())){ - sendTasksMoveToWcs(task); -// return; - } } }catch (Exception exception){ logger.error("定时器下发任务发生异常:{}", exception.toString()); diff --git a/src/main/java/com/wms/bussiness/TaskOperation.java b/src/main/java/com/wms/bussiness/TaskOperation.java index b0b52d3..acbcf0d 100644 --- a/src/main/java/com/wms/bussiness/TaskOperation.java +++ b/src/main/java/com/wms/bussiness/TaskOperation.java @@ -145,7 +145,7 @@ public class TaskOperation { addStock.setProviderId(""); addStock.setProviderName(""); addStock.setExpirationDate(null); - addStock.setStockStatus(0); + addStock.setStockStatus(StockStatus.OK.getCode()); addStock.setGoodsStatus(null); addStock.setCreateTime(new Date()); addStock.setLastUpdateTime(null); diff --git a/src/main/java/com/wms/service/serviceImplements/OrderInImplement.java b/src/main/java/com/wms/service/serviceImplements/OrderInImplement.java index b8f5f40..7f3c7c8 100644 --- a/src/main/java/com/wms/service/serviceImplements/OrderInImplement.java +++ b/src/main/java/com/wms/service/serviceImplements/OrderInImplement.java @@ -31,11 +31,12 @@ public class OrderInImplement implements IOrderInService { /** * 查询入库单 + * * @param request 查询参数 * @return 返回结果 */ public WmsApiResponse> queryOrderIn(queryOrderInRequest request) { - if(request.getOrderStatus() == null || request.getOrderStatus().isEmpty()) { + if (request.getOrderStatus() == null || request.getOrderStatus().isEmpty()) { return new WmsApiResponse<>(0, "查询成功", new ArrayList<>()); // 没有查询参数,返回空 } List appOrderIns = appOrderInMapper.selectWithParams(request.getSearchStr(), request.getOrderStatus()); @@ -43,14 +44,14 @@ public class OrderInImplement implements IOrderInService { } - /** * 添加入库单 + * * @param request 入库单参数 * @return 返回结果 */ - public WmsApiResponse addOrderIn(downOrderInRequest request){ - if (WmsConstants.EMPTY_STOCK_BATCH_NO.equals(request.getVehicleNo())){ + public WmsApiResponse addOrderIn(downOrderInRequest request) { + if (WmsConstants.EMPTY_STOCK_BATCH_NO.equals(request.getVehicleNo())) { log.info("托盘{}为空托盘入库", request.vehicleNo); AppOrderIn appOrderIn = new AppOrderIn(); appOrderIn.setRowId(UUID.randomUUID().toString()); @@ -69,49 +70,45 @@ public class OrderInImplement implements IOrderInService { //appOrderIn.setProductionDate(request.abcSelect); appOrderInMapper.insert(appOrderIn); return new WmsApiResponse<>(0, "添加成功", appOrderIn); - }else{ - AppOrderIn selectOrderIn = new AppOrderIn(); - selectOrderIn.setRemark("带物料托盘入库"); - selectOrderIn.setVehicleNo(request.vehicleNo); - List selEmpty = appOrderInMapper.select(selectOrderIn); - if (selEmpty == null || selEmpty.isEmpty()){ - if (request.goodsNum <= 0){ - return new WmsApiResponse<>(1, "数量必须大于0", null); - } - /* 插入数据,插入记录表 */ - //OrderOut orderOutList = new OrderOut(); - AppOrderIn appOrderIn = new AppOrderIn(); - appOrderIn.setRowId(UUID.randomUUID().toString()); - appOrderIn.setGuid(UUID.randomUUID().toString()); - appOrderIn.setInType(1); - appOrderIn.setBatchNo(null); - appOrderIn.setVehicleNo(request.vehicleNo); - appOrderIn.setGoodsId(request.goodsId); - appOrderIn.setGoodsNum(BigDecimal.valueOf(request.goodsNum)); - appOrderIn.setWareHouse(request.abcSelect); - if (Objects.equals(request.efSelect, "E")){ - appOrderIn.setOrderStatus(0); - }else { - appOrderIn.setOrderStatus(2); - } - appOrderIn.setCreateTime(LocalDateTime.now()); - appOrderIn.setCreatePerson("WMS"); - appOrderIn.setUpdateTime(LocalDateTime.now()); - appOrderIn.setRemark(""); - appOrderInMapper.insert(appOrderIn); - return new WmsApiResponse<>(0, "添加成功", appOrderIn); - }else { - return new WmsApiResponse<>(1, "必须先删除带物料托盘入库任务!", null); + } + AppOrderIn selectOrderIn = new AppOrderIn(); + selectOrderIn.setRemark("带物料托盘入库"); + selectOrderIn.setVehicleNo(request.vehicleNo); + List selEmpty = appOrderInMapper.select(selectOrderIn); + if (selEmpty == null || selEmpty.isEmpty()) { + if (request.goodsNum <= 0) { + return new WmsApiResponse<>(1, "数量必须大于0", null); } + /* 插入数据,插入记录表 */ + //OrderOut orderOutList = new OrderOut(); + AppOrderIn appOrderIn = new AppOrderIn(); + appOrderIn.setRowId(UUID.randomUUID().toString()); + appOrderIn.setGuid(UUID.randomUUID().toString()); + appOrderIn.setInType(1); + appOrderIn.setBatchNo(null); + appOrderIn.setVehicleNo(request.vehicleNo); + appOrderIn.setGoodsId(request.goodsId); + appOrderIn.setGoodsNum(BigDecimal.valueOf(request.goodsNum)); + appOrderIn.setWareHouse(request.abcSelect); + appOrderIn.setOrderStatus(OrderInStatusEnum.CREATE.getCode()); + appOrderIn.setCreateTime(LocalDateTime.now()); + appOrderIn.setCreatePerson("WMS"); + appOrderIn.setUpdateTime(LocalDateTime.now()); + appOrderIn.setRemark(""); + appOrderInMapper.insert(appOrderIn); + return new WmsApiResponse<>(0, "添加成功", appOrderIn); + } else { + return new WmsApiResponse<>(1, "当前托盘已有任务!", null); } } /** * 修改数量 + * * @param request 修改数量参数 * @return 返回结果 */ - public WmsApiResponse updateForNum(updateNumRequest request){ + public WmsApiResponse updateForNum(updateNumRequest request) { // if (request.get){ // // } @@ -119,32 +116,33 @@ public class OrderInImplement implements IOrderInService { AppOrderIn appOrderIn = new AppOrderIn(); appOrderIn.setRowId(request.getRowId()); List appOrderIns = appOrderInMapper.select(appOrderIn); - if (appOrderIns.get(0).getGoodsId() == null || appOrderIns.get(0).getGoodsId().isEmpty()){ + if (appOrderIns.get(0).getGoodsId() == null || appOrderIns.get(0).getGoodsId().isEmpty()) { return new WmsApiResponse<>(999, "空托盘不允许修改物料数量,修改失败", null); } appOrderIn.setGoodsNum(request.getRealNum()); int i = appOrderInMapper.update(appOrderIn); - if(i > 0) { + if (i > 0) { return new WmsApiResponse<>(0, "修改成功", null); - }else { + } else { return new WmsApiResponse<>(999, "修改失败", null); } } /** * 绑定载具 + * * @param request 绑定参数 * @return 返回结果 */ public WmsApiResponse bindingVehicle(bindingVehicleRequest request) { String vehicleNo = request.getVehicleNo(); String code = request.getCode(); - if(StringUtils.isEmpty(vehicleNo) || StringUtils.isEmpty(code)) { + if (StringUtils.isEmpty(vehicleNo) || StringUtils.isEmpty(code)) { return new WmsApiResponse<>(999, "载具号或者条码为空", null); } // 拆分条码 // 前八位是零件号,后面六位是批次,后面一位是班次,最后五位是数量 - if(code.length() == 22) { + if (code.length() == 22) { //return new WmsApiResponse<>(999, "条码长度错误", null); String goodsId = code.substring(0, 10); // 物料编码 String productionDate = code.substring(10, 16); //生产日期 @@ -159,12 +157,12 @@ public class OrderInImplement implements IOrderInService { String batchNo = code.substring(0, 16); // 批次 ---- 这个批次应该是料号加中间六位 String shift = code.substring(17, 18); // 班次 String goodsNumStr = code.substring(18, 22); // 数量字符串 - if(!goodsNumStr.matches("[0-9]+")) { + if (!goodsNumStr.matches("[0-9]+")) { return new WmsApiResponse<>(999, "数量错误", null); } BigDecimal goodsNum = new BigDecimal(goodsNumStr); // 数量 List selectRows = appOrderInMapper.select(new AppOrderIn(batchNo, goodsNum, OrderInStatusEnum.CREATE.getCode())); - if(selectRows == null || selectRows.isEmpty()) { + if (selectRows == null || selectRows.isEmpty()) { return new WmsApiResponse<>(999, String.format("条码找不到入库单,无法绑定,条码:%s, 批次: %s, 数量: %s", code, batchNo, goodsNum), null); } AppOrderIn orderIn = selectRows.get(0); // 这条数据 @@ -176,7 +174,7 @@ public class OrderInImplement implements IOrderInService { bindingOrderIn.setUpdateTime(java.time.LocalDateTime.now()); //bindingOrderIn.setProductionDate(date); //bindingOrderIn.setUpdateTime(date); - if(appOrderInMapper.update(bindingOrderIn) > 0) { + if (appOrderInMapper.update(bindingOrderIn) > 0) { return new WmsApiResponse<>(0, "绑定成功", null); } return new WmsApiResponse<>(999, "绑定失败,未知异常,请重试", null); @@ -194,12 +192,12 @@ public class OrderInImplement implements IOrderInService { String batchNo = code.substring(0, 14); // 批次 ---- 这个批次应该是料号加中间六位 //String shift = code.substring(17, 18); // 班次 String goodsNumStr = code.substring(16, 20); // 数量字符串 - if(!goodsNumStr.matches("[0-9]+")) { + if (!goodsNumStr.matches("[0-9]+")) { return new WmsApiResponse<>(999, "数量错误", null); } BigDecimal goodsNum = new BigDecimal(goodsNumStr); // 数量 List selectRows = appOrderInMapper.select(new AppOrderIn(batchNo, goodsNum, OrderInStatusEnum.CREATE.getCode())); - if(selectRows == null || selectRows.isEmpty()) { + if (selectRows == null || selectRows.isEmpty()) { return new WmsApiResponse<>(999, String.format("条码找不到入库单,无法绑定,条码:%s, 批次: %s, 数量: %s", code, batchNo, goodsNum), null); } AppOrderIn orderIn = selectRows.get(0); // 这条数据 @@ -211,7 +209,7 @@ public class OrderInImplement implements IOrderInService { bindingOrderIn.setUpdateTime(java.time.LocalDateTime.now()); //bindingOrderIn.setProductionDate(date); //bindingOrderIn.setUpdateTime(date); - if(appOrderInMapper.update(bindingOrderIn) > 0) { + if (appOrderInMapper.update(bindingOrderIn) > 0) { return new WmsApiResponse<>(0, "绑定成功", null); } return new WmsApiResponse<>(999, "绑定失败,未知异常,请重试", null); @@ -221,22 +219,21 @@ public class OrderInImplement implements IOrderInService { } - - /** * 根据载具号查询入库单 + * * @param vehicleNo 载具号 * @return 返回结果 */ public WmsApiResponse> getOrderInWithVehicleNo(String vehicleNo) { - if(vehicleNo == null || vehicleNo.isEmpty()) { + if (vehicleNo == null || vehicleNo.isEmpty()) { return new WmsApiResponse<>(999, "载具号不能为空", null); } AppOrderIn appOrderInQuery = new AppOrderIn(); appOrderInQuery.setVehicleNo(vehicleNo); appOrderInQuery.setOrderStatus(OrderInStatusEnum.BINDING.getCode()); List appOrderIns = appOrderInMapper.select(appOrderInQuery); - if(appOrderIns == null) { + if (appOrderIns == null) { return new WmsApiResponse<>(999, "查询失败,请重试", new ArrayList<>()); } return new WmsApiResponse<>(0, "查询成功", appOrderIns); @@ -244,11 +241,12 @@ public class OrderInImplement implements IOrderInService { /** * 解绑载具 + * * @param rowId 入库单行号 * @return 返回结果 */ public WmsApiResponse unBindingVehicle(String rowId) { - if(rowId == null || rowId.isEmpty()) { + if (rowId == null || rowId.isEmpty()) { return new WmsApiResponse<>(999, "入库单行号不能为空", null); } AppOrderIn unBindingVehicle = new AppOrderIn(); @@ -257,7 +255,7 @@ public class OrderInImplement implements IOrderInService { unBindingVehicle.setVehicleNo(""); unBindingVehicle.setUpdateTime(java.time.LocalDateTime.now()); int updateResult = appOrderInMapper.update(unBindingVehicle); - if(updateResult > 0) { + if (updateResult > 0) { return new WmsApiResponse<>(0, "解绑成功", null); } return new WmsApiResponse<>(999, "解绑失败,请重试", null); @@ -276,7 +274,8 @@ public class OrderInImplement implements IOrderInService { return new WmsApiResponse<>(0, "删除成功", true); } else { return new WmsApiResponse<>(1, "订单不存在", false); - } } catch (Exception e) { + } + } catch (Exception e) { // 记录异常 return new WmsApiResponse<>(1, "删除失败", false); } diff --git a/src/main/java/com/wms/service/serviceImplements/parent/ContainerImplement.java b/src/main/java/com/wms/service/serviceImplements/parent/ContainerImplement.java index 66056e1..b485a2c 100644 --- a/src/main/java/com/wms/service/serviceImplements/parent/ContainerImplement.java +++ b/src/main/java/com/wms/service/serviceImplements/parent/ContainerImplement.java @@ -84,7 +84,6 @@ public class ContainerImplement implements ContainerService { * @param request 请求信息 * @return 响应信息 */ - @Override @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) public CreateInstoreTaskResponse createInstoreTask(CreateInstoreTaskRequest request) { @@ -156,82 +155,81 @@ public class ContainerImplement implements ContainerService { success.setPalletNo(virtualPalletId); success.setFromCellNo(request.getFromCellNo()); success.setToCellNo(useLocation.getLocationId()); - }else { - // 查询待入库的批次号 - AppOrderIn waitInStockQuery = new AppOrderIn(); - waitInStockQuery.setVehicleNo(request.getPalletNo()); - List waitInStockList = appOrderInMapper.select(waitInStockQuery); // 查找待入库的批次号 - if(waitInStockList.isEmpty()) { - log.error("条码:{} 不存在待入库的任务", request.getPalletNo()); - return new CreateInstoreTaskResponse("400", String.format("条码:%s 不存在待入库的任务", request.getPalletNo())); - } - AppOrderIn appOrderIn = waitInStockList.get(0); - /* 查找可用库位 */ - List canUseLocations = locationUtils.getNewLocation(2,appOrderIn); - if(canUseLocations.isEmpty()){ - return new CreateInstoreTaskResponse("400", "没有可用库位"); - } - // 判断高度来决定物料去低层还是高层 - if (WmsConstants.LOW_FLOOR.equals(request.getHeight())) { - canUseLocations = canUseLocations.stream().filter(l -> l.getLayer() == 1).toList(); - } - - if (WmsConstants.HIGH_FLOOR.equals(request.getHeight())) { - canUseLocations = canUseLocations.stream().filter(l -> l.getLayer() != 1).toList(); - } - - Location useLocation = locationUtils.checkCanUseAndChange(canUseLocations); - if(useLocation == null) { - return new CreateInstoreTaskResponse("400", "暂没有可以直接使用的库位,因为存在互锁的库位,请等待当前任务都执行完成后再试"); - } - /* 找到可用的库位 */ /* 生成任务(生成的任务直接运行中,因为此处会把任务直接回回去),更新库存表内状态为入库中 */ - // 新建任务 插入任务表 - Task newInTask = new Task(); - newInTask.setTaskId(String.valueOf(Calendar.getInstance().getTimeInMillis())); - newInTask.setTaskGroup(UUID.randomUUID().toString()); - newInTask.setTaskType(TaskType.IN.getCode()); - newInTask.setTaskStatus(WmsTaskStatus.WAIT.getCode()); // 因为任务是直接返回去的,所以直接是已下发状态 - newInTask.setOrigin(request.getFromCellNo()); - newInTask.setDestination(useLocation.getLocationId()); - if (!waitInStockList.isEmpty() && waitInStockList.get(0) != null) { - newInTask.setGoodsId(waitInStockList.get(0).getGoodsId()); - } else { - newInTask.setGoodsId(null); // 或者你可以选择不设置 - } - newInTask.setWeight(Double.valueOf(request.getWeight())); - newInTask.setCreateTime(new java.util.Date()); - newInTask.setUserName("四向车API"); - newInTask.setVehicleSize(Integer.valueOf(request.getHeight())); - newInTask.setVehicleNo(request.getPalletNo()); - newInTask.setTaskPriority(1); - newInTask.setProductionDate(null); - int insertTaskResult = taskMapper.addTask(newInTask); // 添加入库任务 - if(insertTaskResult < 1) { - log.error("生成任务失败,无法插入新的入库任务"); - return new CreateInstoreTaskResponse("400", "生成任务失败,无法插入新的入库任务"); - } - // 更新库存中的待入库记录为入库中,并将库位更新进去 - for(AppOrderIn waitInStock : waitInStockList) { - AppOrderIn updateAppOrderIn = new AppOrderIn(); - updateAppOrderIn.setRowId(waitInStock.getRowId()); - updateAppOrderIn.setOrderStatus(OrderInStatusEnum.IN.getCode()); - updateAppOrderIn.setUpdateTime(LocalDateTime.now()); - appOrderInMapper.update(updateAppOrderIn); - } - - // 占用库位 - Location location = new Location(); - location.setLocationId(useLocation.getLocationId()); - location.setLocationStatus(LocationStatus.OCCUPY.getCode()); - location.setVehicleId(request.getPalletNo()); - locationMapper.modifyLocation(location); - success.setCode("200"); - success.setMessage("生成入库任务成功"); - success.setWmsTaskId(newInTask.getTaskId()); - success.setPalletNo(request.getPalletNo()); - success.setFromCellNo(request.getFromCellNo()); - success.setToCellNo(useLocation.getLocationId()); + return success; } + // 查询待入库的批次号 + AppOrderIn waitInStockQuery = new AppOrderIn(); + waitInStockQuery.setVehicleNo(request.getPalletNo()); + List waitInStockList = appOrderInMapper.select(waitInStockQuery); // 查找待入库的批次号 + if(waitInStockList.isEmpty()) { + log.error("托盘:{} 不存在待入库的任务", request.getPalletNo()); + return new CreateInstoreTaskResponse("400", String.format("条码:%s 不存在待入库的任务", request.getPalletNo())); + } + AppOrderIn appOrderIn = waitInStockList.get(0); + /* 查找可用库位 */ + List canUseLocations = locationUtils.getNewLocation(2,appOrderIn); + if(canUseLocations.isEmpty()){ + return new CreateInstoreTaskResponse("400", "没有可用库位"); + } + // 判断高度来决定物料去低层还是高层 + if (WmsConstants.LOW_FLOOR.equals(request.getHeight())) { + canUseLocations = canUseLocations.stream().filter(l -> l.getLayer() == 1).toList(); + } + if (WmsConstants.HIGH_FLOOR.equals(request.getHeight())) { + canUseLocations = canUseLocations.stream().filter(l -> l.getLayer() != 1).toList(); + } + + Location useLocation = locationUtils.checkCanUseAndChange(canUseLocations); + if(useLocation == null) { + return new CreateInstoreTaskResponse("400", "暂没有可以直接使用的库位,因为存在互锁的库位,请等待当前任务都执行完成后再试"); + } + /* 找到可用的库位 */ /* 生成任务(生成的任务直接运行中,因为此处会把任务直接回回去),更新库存表内状态为入库中 */ + // 新建任务 插入任务表 + Task newInTask = new Task(); + newInTask.setTaskId(String.valueOf(Calendar.getInstance().getTimeInMillis())); + newInTask.setTaskGroup(UUID.randomUUID().toString()); + newInTask.setTaskType(TaskType.IN.getCode()); + newInTask.setTaskStatus(WmsTaskStatus.WAIT.getCode()); // 因为任务是直接返回去的,所以直接是已下发状态 + newInTask.setOrigin(request.getFromCellNo()); + newInTask.setDestination(useLocation.getLocationId()); + if (!waitInStockList.isEmpty() && waitInStockList.get(0) != null) { + newInTask.setGoodsId(waitInStockList.get(0).getGoodsId()); + } else { + newInTask.setGoodsId(null); // 或者你可以选择不设置 + } + newInTask.setWeight(Double.valueOf(request.getWeight())); + newInTask.setCreateTime(new java.util.Date()); + newInTask.setUserName("四向车请求"); + newInTask.setVehicleSize(Integer.valueOf(request.getHeight())); + newInTask.setVehicleNo(request.getPalletNo()); + newInTask.setTaskPriority(1); + newInTask.setProductionDate(null); + int insertTaskResult = taskMapper.addTask(newInTask); // 添加入库任务 + if(insertTaskResult < 1) { + log.error("生成任务失败,无法插入新的入库任务"); + return new CreateInstoreTaskResponse("400", "生成任务失败,无法插入新的入库任务"); + } + // 更新库存中的待入库记录为入库中,并将库位更新进去 + for(AppOrderIn waitInStock : waitInStockList) { + AppOrderIn updateAppOrderIn = new AppOrderIn(); + updateAppOrderIn.setRowId(waitInStock.getRowId()); + updateAppOrderIn.setOrderStatus(OrderInStatusEnum.IN.getCode()); + updateAppOrderIn.setUpdateTime(LocalDateTime.now()); + appOrderInMapper.update(updateAppOrderIn); + } + + // 占用库位 + Location location = new Location(); + location.setLocationId(useLocation.getLocationId()); + location.setLocationStatus(LocationStatus.OCCUPY.getCode()); + location.setVehicleId(request.getPalletNo()); + locationMapper.modifyLocation(location); + success.setCode("200"); + success.setMessage("生成入库任务成功"); + success.setWmsTaskId(newInTask.getTaskId()); + success.setPalletNo(request.getPalletNo()); + success.setFromCellNo(request.getFromCellNo()); + success.setToCellNo(useLocation.getLocationId()); return success; }