From ba6436a749f5895402759737d865417684b4dfbc Mon Sep 17 00:00:00 2001 From: "han\\hanst" Date: Fri, 3 Oct 2025 18:55:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=93=E4=BD=8D=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WarehouseController.java | 55 +++++++++++ .../LocationPickingValidationRequest.java | 20 ++++ .../entity/LocationValidationRequest.java | 25 +++++ .../warehouse/service/LocationService.java | 19 ++++ .../service/impl/LocationServiceImpl.java | 93 +++++++++++++++++++ 5 files changed, 212 insertions(+) create mode 100644 src/main/java/com/gaotao/modules/warehouse/entity/LocationPickingValidationRequest.java create mode 100644 src/main/java/com/gaotao/modules/warehouse/entity/LocationValidationRequest.java diff --git a/src/main/java/com/gaotao/modules/warehouse/controller/WarehouseController.java b/src/main/java/com/gaotao/modules/warehouse/controller/WarehouseController.java index f330371..5da982d 100644 --- a/src/main/java/com/gaotao/modules/warehouse/controller/WarehouseController.java +++ b/src/main/java/com/gaotao/modules/warehouse/controller/WarehouseController.java @@ -5,6 +5,7 @@ import com.gaotao.common.utils.PageUtils; import com.gaotao.common.utils.R; import com.gaotao.modules.sys.entity.SysUserEntity; import com.gaotao.modules.warehouse.entity.*; +import com.gaotao.modules.warehouse.service.LocationService; import com.gaotao.modules.warehouse.service.WarehouseService; import io.lettuce.core.ScriptOutputType; import org.apache.shiro.SecurityUtils; @@ -22,6 +23,9 @@ import java.util.Map; public class WarehouseController { @Autowired WarehouseService warehouseService; + + @Autowired + LocationService locationService; /** * @Author ZHB @@ -288,4 +292,55 @@ public class WarehouseController { List list = warehouseService.getWarehouseList(data); return R.ok().put("dataList", list); } + + /** + * @Author System + * @Description 校验库位类型是否匹配收货方式要求 + * @Date 2025/1/17 + * @Param [LocationValidationRequest] + * @return com.gaotao.common.utils.R + **/ + @PostMapping("validateLocationForReceiveCase") + public R validateLocationForReceiveCase(@RequestBody LocationValidationRequest request) { + try { + Map result = locationService.validateLocationForReceiveCase( + request.getSite(), + request.getLocationId(), + request.getReceiveCaseDB() + ); + + if ((Boolean) result.get("valid")) { + return R.ok((String) result.get("message")).put("data", result); + } else { + return R.error((String) result.get("message")).put("data", result); + } + } catch (Exception e) { + return R.error("库位校验失败: " + e.getMessage()); + } + } + + /** + * @Author System + * @Description 校验库位是否为PICKING类型(检验合格入库用) + * @Date 2025/1/17 + * @Param [LocationPickingValidationRequest] + * @return com.gaotao.common.utils.R + **/ + @PostMapping("validateLocationForPicking") + public R validateLocationForPicking(@RequestBody LocationPickingValidationRequest request) { + try { + Map result = locationService.validateLocationForPicking( + request.getSite(), + request.getLocationId() + ); + + if ((Boolean) result.get("valid")) { + return R.ok((String) result.get("message")).put("data", result); + } else { + return R.error((String) result.get("message")).put("data", result); + } + } catch (Exception e) { + return R.error("库位校验失败: " + e.getMessage()); + } + } } diff --git a/src/main/java/com/gaotao/modules/warehouse/entity/LocationPickingValidationRequest.java b/src/main/java/com/gaotao/modules/warehouse/entity/LocationPickingValidationRequest.java new file mode 100644 index 0000000..31a53ca --- /dev/null +++ b/src/main/java/com/gaotao/modules/warehouse/entity/LocationPickingValidationRequest.java @@ -0,0 +1,20 @@ +package com.gaotao.modules.warehouse.entity; + +import lombok.Data; + +/** + * PICKING类型库位校验请求DTO + */ +@Data +public class LocationPickingValidationRequest { + + /** + * 站点 + */ + private String site; + + /** + * 库位ID + */ + private String locationId; +} diff --git a/src/main/java/com/gaotao/modules/warehouse/entity/LocationValidationRequest.java b/src/main/java/com/gaotao/modules/warehouse/entity/LocationValidationRequest.java new file mode 100644 index 0000000..a3ed6cd --- /dev/null +++ b/src/main/java/com/gaotao/modules/warehouse/entity/LocationValidationRequest.java @@ -0,0 +1,25 @@ +package com.gaotao.modules.warehouse.entity; + +import lombok.Data; + +/** + * 库位校验请求DTO + */ +@Data +public class LocationValidationRequest { + + /** + * 站点 + */ + private String site; + + /** + * 库位ID + */ + private String locationId; + + /** + * 收货方式DB值 + */ + private String receiveCaseDB; +} diff --git a/src/main/java/com/gaotao/modules/warehouse/service/LocationService.java b/src/main/java/com/gaotao/modules/warehouse/service/LocationService.java index 7459086..855ef72 100644 --- a/src/main/java/com/gaotao/modules/warehouse/service/LocationService.java +++ b/src/main/java/com/gaotao/modules/warehouse/service/LocationService.java @@ -3,6 +3,8 @@ package com.gaotao.modules.warehouse.service; import com.baomidou.mybatisplus.extension.service.IService; import com.gaotao.modules.warehouse.entity.Location; +import java.util.Map; + /** * 库位服务接口 */ @@ -31,5 +33,22 @@ public interface LocationService extends IService { * @return 有效的库位信息,如果无效返回null */ Location getValidLocation(String site, String locationId); + + /** + * 校验库位类型是否匹配receiveCaseDB要求 + * @param site 站点 + * @param locationId 库位ID + * @param receiveCaseDB 收货方式 + * @return 校验结果,包含是否有效和错误信息 + */ + Map validateLocationForReceiveCase(String site, String locationId, String receiveCaseDB); + + /** + * 校验库位是否为PICKING类型(检验合格入库用) + * @param site 站点 + * @param locationId 库位ID + * @return 校验结果,包含是否有效和错误信息 + */ + Map validateLocationForPicking(String site, String locationId); } diff --git a/src/main/java/com/gaotao/modules/warehouse/service/impl/LocationServiceImpl.java b/src/main/java/com/gaotao/modules/warehouse/service/impl/LocationServiceImpl.java index 2c06f22..aea1d31 100644 --- a/src/main/java/com/gaotao/modules/warehouse/service/impl/LocationServiceImpl.java +++ b/src/main/java/com/gaotao/modules/warehouse/service/impl/LocationServiceImpl.java @@ -7,6 +7,9 @@ import com.gaotao.modules.warehouse.service.LocationService; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import java.util.HashMap; +import java.util.Map; + /** * 库位服务实现类 */ @@ -40,5 +43,95 @@ public class LocationServiceImpl extends ServiceImpl i return baseMapper.getValidLocation(site, locationId); } + + @Override + public Map validateLocationForReceiveCase(String site, String locationId, String receiveCaseDB) { + Map result = new HashMap<>(); + + // 1. 基础参数校验 + if (!StringUtils.hasText(site) || !StringUtils.hasText(locationId) || !StringUtils.hasText(receiveCaseDB)) { + result.put("valid", false); + result.put("message", "参数不能为空"); + return result; + } + + // 2. 查询库位信息 + Location location = getValidLocation(site, locationId); + if (location == null) { + result.put("valid", false); + result.put("message", "库位不存在或已停用"); + return result; + } + + // 3. 校验库位类型是否匹配receiveCaseDB要求 + String locationType = location.getLocationType(); + boolean isValid = false; + String expectedType = ""; + + switch (receiveCaseDB) { + case "ARRINV": + expectedType = "QA"; + isValid = "QA".equals(locationType); + break; + case "QAINV": + expectedType = "QA"; + isValid = "QA".equals(locationType); + break; + case "INVDIR": + expectedType = "PICKING"; + isValid = "PICKING".equals(locationType); + break; + default: + result.put("valid", false); + result.put("message", "不支持的收货方式: " + receiveCaseDB); + return result; + } + + if (isValid) { + result.put("valid", true); + result.put("message", "库位校验通过"); + result.put("location", location); + } else { + result.put("valid", false); + result.put("message", String.format("库位类型不匹配,收货方式 %s 要求库位类型为 %s,实际为 %s", + receiveCaseDB, expectedType, locationType != null ? locationType : "未设置")); + } + + return result; + } + + @Override + public Map validateLocationForPicking(String site, String locationId) { + Map result = new HashMap<>(); + + // 1. 基础参数校验 + if (!StringUtils.hasText(site) || !StringUtils.hasText(locationId)) { + result.put("valid", false); + result.put("message", "参数不能为空"); + return result; + } + + // 2. 查询库位信息 + Location location = getValidLocation(site, locationId); + if (location == null) { + result.put("valid", false); + result.put("message", "库位不存在或已停用"); + return result; + } + + // 3. 校验库位类型是否为PICKING + String locationType = location.getLocationType(); + if ("PICKING".equals(locationType)) { + result.put("valid", true); + result.put("message", "库位校验通过"); + result.put("location", location); + } else { + result.put("valid", false); + result.put("message", String.format("库位必须是PICKING类型,实际为 %s", + locationType != null ? locationType : "未设置")); + } + + return result; + } }