From 7810dc37ad48e1f98e87286d287f5c72ec88f875 Mon Sep 17 00:00:00 2001 From: Huluwa22 <2667400744@qq.com> Date: Sun, 23 Feb 2025 14:38:44 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=85=A5=E5=BA=93=E4=BB=BB=E5=8A=A1):=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=85=A5=E5=BA=93=E5=88=A4=E6=96=AD=E9=AB=98?= =?UTF-8?q?=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/wms/constants/WmsConstants.java | 16 ++ .../com/wms/constants/enums/AreaEnum.java | 37 +++ .../parent/ContainerImplement.java | 219 ++++++------------ src/main/java/com/wms/utils/MyPassword.java | 5 +- src/main/resources/application.yml | 14 +- 5 files changed, 138 insertions(+), 153 deletions(-) create mode 100644 src/main/java/com/wms/constants/enums/AreaEnum.java diff --git a/src/main/java/com/wms/constants/WmsConstants.java b/src/main/java/com/wms/constants/WmsConstants.java index e3170e8..93721e1 100644 --- a/src/main/java/com/wms/constants/WmsConstants.java +++ b/src/main/java/com/wms/constants/WmsConstants.java @@ -20,6 +20,22 @@ public class WmsConstants { public static String ROOT_MENU_ID = "0"; + /** + * 固定空托盘编号 + */ + public static String EMPTY_VEHICHLE_ID = "B0000001"; + + /** + * 高度为1 去一层 + */ + public static String LOW_FLOOR = "1"; + + + /** + * 高度为2 去234层 + */ + public static String HIGH_FLOOR= "2"; + /** * 虚拟库位设备号 diff --git a/src/main/java/com/wms/constants/enums/AreaEnum.java b/src/main/java/com/wms/constants/enums/AreaEnum.java new file mode 100644 index 0000000..e10f28b --- /dev/null +++ b/src/main/java/com/wms/constants/enums/AreaEnum.java @@ -0,0 +1,37 @@ +package com.wms.constants.enums; + +import com.wms.utils.StringUtils; +import lombok.Getter; + +/** + * @Classname AreaEnum + * @Date 2025-02-22 14:53 + * @Created by luyifan + */ +@Getter +public enum AreaEnum { + METAAREA("毛坯区域","A"), + WAITAREA("待置区域","B"), + GOODSAREA("物料区域","C"); + + + private String desc; + private String value; + + AreaEnum(String desc, String value) { + this.desc = desc; + this.value = value; + } + // 根据value获取枚举 + public static AreaEnum getEnumByValue(String value) { + if (StringUtils.isEmpty(value)) { + return null; + } + for (AreaEnum areaEnum : AreaEnum.values()) { + if (areaEnum.getValue().equals(value)) { + return areaEnum; + } + } + return null; + } +} 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 db119a8..d265ee7 100644 --- a/src/main/java/com/wms/service/serviceImplements/parent/ContainerImplement.java +++ b/src/main/java/com/wms/service/serviceImplements/parent/ContainerImplement.java @@ -1,6 +1,7 @@ package com.wms.service.serviceImplements.parent; import com.wms.bussiness.TaskOperation; +import com.wms.constants.WmsConstants; import com.wms.constants.enums.*; import com.wms.entity.app.ResponseEntity; import com.wms.entity.app.container.*; @@ -85,8 +86,8 @@ public class ContainerImplement implements ContainerService { * @param request 请求信息 * @return 响应信息 */ + @Override - @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) public CreateInstoreTaskResponse createInstoreTask(CreateInstoreTaskRequest request) { //进行MD5加密的验证 String md5 = StringUtils.containerMd5(request.getRequestId()); @@ -95,153 +96,88 @@ public class ContainerImplement implements ContainerService { } CreateInstoreTaskResponse success = new CreateInstoreTaskResponse(); - // 判断是否为有判断好 B0000001代表无托盘号 - if("B0000001".equals(request.getPalletNo())) { - String virtualVehicleNo = WmsUtils.generateUUIDString(); - log.info("无托盘号,生成虚拟托盘号{}",virtualVehicleNo); - // 设置虚拟托盘号 - AppOrderIn appOrderIn = new AppOrderIn(); - String rowId = UUID.randomUUID().toString(); - String Guid = UUID.randomUUID().toString(); - appOrderIn.setRowId(rowId); - appOrderIn.setGuid(Guid); - appOrderIn.setInType(1); - appOrderIn.setBatchNo(null); - appOrderIn.setVehicleNo(virtualVehicleNo); - appOrderIn.setGoodsId("00000"); - appOrderIn.setGoodsNum(null); - appOrderIn.setWareHouse("A"); - appOrderIn.setOrderStatus(0); - appOrderIn.setCreateTime(LocalDateTime.now()); - appOrderIn.setCreatePerson("WMS"); - appOrderIn.setUpdateTime(LocalDateTime.now()); - appOrderIn.setRemark("空托盘入库"); - //appOrderIn.setProductionDate(request.abcSelect); - int insert = appOrderInMapper.insert(appOrderIn); - if (insert <= 0) { - return new CreateInstoreTaskResponse("400", "创建入库单失败"); - } - /* 查找可用库位 */ - List canUseLocations = locationUtils.getNewLocation(2,appOrderIn).stream().filter(location -> location.getLayer() == 1).collect(Collectors.toList()); - if(canUseLocations.isEmpty()){ - log.info("无可用库位"); - return new CreateInstoreTaskResponse("400", "没有可用库位"); - } - Location useLocation = locationUtils.checkCanUse(canUseLocations); - // 筛选出可用区域为第一层的库位 - if(useLocation == null) { - log.info("暂没有可以直接使用的库位,因为存在互锁的库位,请等待当前任务都执行完成后再试"); - return new CreateInstoreTaskResponse("400", "暂没有可以直接使用的库位,因为存在互锁的库位,请等待当前任务都执行完成后再试"); - } + // 查询待入库的批次号 + AppOrderIn waitInStockQuery = new AppOrderIn(); + waitInStockQuery.setVehicleNo(request.getPalletNo()); + //waitInStockQuery.setOrderStatus(OrderInStatusEnum.CREATE.getCode()); + 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(); + } - 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()); - newInTask.setGoodsId("00000"); - newInTask.setWeight(Double.valueOf(request.getWeight())); - newInTask.setCreateTime(new java.util.Date()); - newInTask.setUserName("四向车API"); - newInTask.setVehicleSize(Integer.valueOf(request.getHeight())); - newInTask.setVehicleNo(virtualVehicleNo); - newInTask.setTaskPriority(1); - newInTask.setProductionDate(null); - int insertTaskResult = taskMapper.addTask(newInTask); - if(insertTaskResult < 1) { - log.info("生成任务失败,无法插入新的入库任务"); - return new CreateInstoreTaskResponse("400", "生成任务失败,无法插入新的入库任务"); - } + if (WmsConstants.HIGH_FLOOR.equals(request.getHeight())) { + canUseLocations = canUseLocations.stream().filter(l -> l.getLayer() != 1).toList(); + } - // 更新入库单状态 + Location useLocation = locationUtils.checkCanUse(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()); + //newInTask.setGoodsId(String.format("%s 等 %d 个物料", waitInStockList.get(0).getGoodsId(), waitInStockList.size())); + 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())); + if(WmsConstants.EMPTY_VEHICHLE_ID.equals(request.getPalletNo())){ + // 生成空托盘的虚拟id + newInTask.setVehicleNo(WmsUtils.generateUUIDString()); + }else { + 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(rowId); + 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(virtualVehicleNo); - locationMapper.modifyLocation(location); - - success.setCode("200"); - success.setMessage("生成入库任务成功"); - success.setWmsTaskId(newInTask.getTaskId()); - success.setPalletNo(virtualVehicleNo); - success.setFromCellNo(request.getFromCellNo()); - success.setToCellNo(useLocation.getLocationId()); - }else { - // 查询待入库的批次号 - AppOrderIn waitInStockQuery = new AppOrderIn(); - waitInStockQuery.setVehicleNo(request.getPalletNo()); - //waitInStockQuery.setOrderStatus(OrderInStatusEnum.CREATE.getCode()); - List waitInStockList = appOrderInMapper.select(waitInStockQuery); // 查找待入库的批次号 - if(waitInStockList.isEmpty()) { - 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", "没有可用库位"); - } - Location useLocation = locationUtils.checkCanUse(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()); - //newInTask.setGoodsId(String.format("%s 等 %d 个物料", waitInStockList.get(0).getGoodsId(), waitInStockList.size())); - 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) { - 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()); } + + // 占用库位 + 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; } @@ -283,7 +219,6 @@ public class ContainerImplement implements ContainerService { } return new ContainerApiLocalResponse("400", String.format("不支持的任务状态:%s", request.getTaskState())); - } diff --git a/src/main/java/com/wms/utils/MyPassword.java b/src/main/java/com/wms/utils/MyPassword.java index 7617ec7..d277e6f 100644 --- a/src/main/java/com/wms/utils/MyPassword.java +++ b/src/main/java/com/wms/utils/MyPassword.java @@ -111,8 +111,5 @@ public class MyPassword { return result; } - public static void main(String[] args) { - String pwd = decrypt("812C0C84E2970FA98456DDC5B0B59594"); - System.out.println(pwd); - } + } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 6059fc8..118665c 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,15 +1,15 @@ spring: # 本地测试环境 + datasource: + url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true + username: root + password: "000000" + + # 在线环境 # datasource: # url: jdbc:mysql://localhost:3306/wms_fdbk_xuzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true # username: root -# password: "000000" - - # 在线环境 - datasource: - url: jdbc:mysql://localhost:3306/wms_fdbk_xuzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true - username: root - password: 123456 +# password: 123456 profiles: active: online