Browse Source

库位校验

master
han\hanst 3 months ago
parent
commit
ba6436a749
  1. 55
      src/main/java/com/gaotao/modules/warehouse/controller/WarehouseController.java
  2. 20
      src/main/java/com/gaotao/modules/warehouse/entity/LocationPickingValidationRequest.java
  3. 25
      src/main/java/com/gaotao/modules/warehouse/entity/LocationValidationRequest.java
  4. 19
      src/main/java/com/gaotao/modules/warehouse/service/LocationService.java
  5. 93
      src/main/java/com/gaotao/modules/warehouse/service/impl/LocationServiceImpl.java

55
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<Warehouse> 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<String, Object> 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<String, Object> 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());
}
}
}

20
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;
}

25
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;
}

19
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<Location> {
* @return 有效的库位信息如果无效返回null
*/
Location getValidLocation(String site, String locationId);
/**
* 校验库位类型是否匹配receiveCaseDB要求
* @param site 站点
* @param locationId 库位ID
* @param receiveCaseDB 收货方式
* @return 校验结果包含是否有效和错误信息
*/
Map<String, Object> validateLocationForReceiveCase(String site, String locationId, String receiveCaseDB);
/**
* 校验库位是否为PICKING类型检验合格入库用
* @param site 站点
* @param locationId 库位ID
* @return 校验结果包含是否有效和错误信息
*/
Map<String, Object> validateLocationForPicking(String site, String locationId);
}

93
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<LocationMapper, Location> i
return baseMapper.getValidLocation(site, locationId);
}
@Override
public Map<String, Object> validateLocationForReceiveCase(String site, String locationId, String receiveCaseDB) {
Map<String, Object> 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<String, Object> validateLocationForPicking(String site, String locationId) {
Map<String, Object> 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;
}
}
Loading…
Cancel
Save