feat:出库单一键设置功能及移库单CRUD

This commit is contained in:
zhouz
2026-07-28 16:21:22 +08:00
parent 9e43129c37
commit 04ffd865a3
56 changed files with 2638 additions and 23 deletions

View File

@@ -0,0 +1,19 @@
package cn.code.nl.module.wms.api.moveinv;
import cn.code.nl.framework.common.pojo.CommonResult;
import cn.code.nl.module.wms.api.moveinv.dto.MoveInvAutoCreateReqDTO;
import cn.code.nl.module.wms.api.moveinv.dto.MoveInvAutoCreateRespDTO;
import cn.code.nl.module.wms.enums.ApiConstants;
import jakarta.validation.Valid;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(name = ApiConstants.NAME)
public interface MoveInvApi {
String PREFIX = ApiConstants.PREFIX + "/move-inv";
@PostMapping(PREFIX + "/autoCreate")
CommonResult<MoveInvAutoCreateRespDTO> autoCreate(@Valid @RequestBody MoveInvAutoCreateReqDTO reqDTO);
}

View File

@@ -0,0 +1,16 @@
package cn.code.nl.module.wms.api.moveinv.dto;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import java.util.List;
/**
* 自动创建移库单请求。
*/
@Data
public class MoveInvAutoCreateReqDTO {
@NotEmpty(message = "来源载具不能为空")
private List<String> vehicleCodes;
}

View File

@@ -0,0 +1,17 @@
package cn.code.nl.module.wms.api.moveinv.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 自动创建移库单结果。
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MoveInvAutoCreateRespDTO {
private Long moveinvId;
private String billCode;
}

View File

@@ -0,0 +1,15 @@
package cn.code.nl.module.wms.enums;
import cn.code.nl.framework.common.enums.RpcConstants;
/**
* WMS API 常量。
*/
public final class ApiConstants {
public static final String NAME = "wms-server";
public static final String PREFIX = RpcConstants.RPC_API_PREFIX + "/wms";
private ApiConstants() {
}
}

View File

@@ -19,6 +19,18 @@ public interface ErrorCodeConstants {
ErrorCode IOSTOR_INV_NO_MATCHING_INVENTORY = new ErrorCode(6_000_6, "没有符合当前出库明细的可用库存");
ErrorCode IOSTOR_INV_MANUAL_STATUS_INVALID = new ErrorCode(6_000_7, "只有生成或分配中的明细允许手工分配");
ErrorCode IOSTOR_INV_UPDATE_STATUS_INVALID = new ErrorCode(6_000_8, "只有生成状态的出库单允许修改");
ErrorCode IOSTOR_INV_NO_PENDING_ALLOCATION = new ErrorCode(6_000_9, "当前明细没有生成状态的分配记录");
ErrorCode IOSTOR_INV_NO_MOVE_LOCATION = new ErrorCode(6_001_0, "没有可用于移库的空闲仓位");
// ================ 移库单相关错误码 =================
ErrorCode MOVE_INV_NOT_EXISTS = new ErrorCode(6_002_0, "移库单不存在");
ErrorCode MOVE_INV_STATUS_INVALID = new ErrorCode(6_002_1, "只有生成状态的移库单允许修改或删除");
ErrorCode MOVE_INV_SOURCE_INVALID = new ErrorCode(6_002_2, "来源载具不存在、库存不可用或仓位已锁定");
ErrorCode MOVE_INV_TARGET_INVALID = new ErrorCode(6_002_3, "目标仓位不可用或与来源仓位不在同一库区同一层");
ErrorCode MOVE_INV_TARGET_DUPLICATE = new ErrorCode(6_002_4, "同一移库单的目标仓位不能重复");
ErrorCode MOVE_INV_NO_TARGET_STRUCT = new ErrorCode(6_002_5, "未找到同库区同层的可用目标仓位");
ErrorCode MOVE_INV_LOCK_FAILED = new ErrorCode(6_002_6, "移库仓位已被占用,请刷新后重试");
ErrorCode MOVE_INV_CODE_GENERATE_FAILED = new ErrorCode(6_002_7, "移库单号生成失败");
ErrorCode IOSTORINV_DTL_NOT_EXISTS = new ErrorCode(5, "出入库单明细不存在");

View File

@@ -0,0 +1,21 @@
package cn.code.nl.module.wms.enums;
import lombok.Getter;
/**
* 出库目的点。
*
* TODO 配置现场实际的两个出库点位编码。
*/
@Getter
public enum OutboundPointEnum {
OUTBOUND_POINT_1("CK01"),
OUTBOUND_POINT_2("CK02");
private final String pointCode;
OutboundPointEnum(String pointCode) {
this.pointCode = pointCode;
}
}