From 65f25655e7d860623d57932424d9c9b71bc5cab0 Mon Sep 17 00:00:00 2001 From: zhouz <> Date: Wed, 22 Jul 2026 14:28:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9A=E4=B9=89=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E5=8D=95=E8=81=9A=E5=90=88=E5=88=9B=E5=BB=BA=E5=A5=91=E7=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nl-module-wms/nl-module-wms-server/pom.xml | 7 +- .../iostorinv/vo/IostorInvCreateReqVO.java | 75 +++++++++++++++++++ .../rpc/config/RpcConfiguration.java | 10 +++ .../service/iostorinv/IostorInvService.java | 8 ++ .../iostorinv/IostorInvServiceImpl.java | 5 ++ .../IostorInvServiceLocalSpringTest.java | 25 +++++++ 6 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 nl-module-wms/nl-module-wms-server/src/main/java/cn/code/nl/module/wms/controller/admin/iostorinv/vo/IostorInvCreateReqVO.java create mode 100644 nl-module-wms/nl-module-wms-server/src/main/java/cn/code/nl/module/wms/framework/rpc/config/RpcConfiguration.java create mode 100644 nl-module-wms/nl-module-wms-server/src/test/java/cn/code/nl/module/wms/service/iostorinv/IostorInvServiceLocalSpringTest.java diff --git a/nl-module-wms/nl-module-wms-server/pom.xml b/nl-module-wms/nl-module-wms-server/pom.xml index ef12b750..4142363f 100644 --- a/nl-module-wms/nl-module-wms-server/pom.xml +++ b/nl-module-wms/nl-module-wms-server/pom.xml @@ -42,6 +42,11 @@ nl-module-task-api ${revision} + + cn.nl.cloud + nl-module-base-api + ${revision} + @@ -146,4 +151,4 @@ - \ No newline at end of file + diff --git a/nl-module-wms/nl-module-wms-server/src/main/java/cn/code/nl/module/wms/controller/admin/iostorinv/vo/IostorInvCreateReqVO.java b/nl-module-wms/nl-module-wms-server/src/main/java/cn/code/nl/module/wms/controller/admin/iostorinv/vo/IostorInvCreateReqVO.java new file mode 100644 index 00000000..7e8a6f60 --- /dev/null +++ b/nl-module-wms/nl-module-wms-server/src/main/java/cn/code/nl/module/wms/controller/admin/iostorinv/vo/IostorInvCreateReqVO.java @@ -0,0 +1,75 @@ +package cn.code.nl.module.wms.controller.admin.iostorinv.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.DecimalMin; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +@Schema(description = "管理后台 - 出库单新增 Request VO") +@Data +public class IostorInvCreateReqVO { + + @Schema(description = "单据类型", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "单据类型不能为空") + private String billType; + + @Schema(description = "仓库标识", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "仓库标识不能为空") + private String storId; + + @Schema(description = "业务日期", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "业务日期不能为空") + private LocalDateTime bizDate; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "出库单明细", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "出库单明细不能为空") + @Valid + private List details; + + @Schema(description = "出库单明细") + @Data + public static class Detail { + + @Schema(description = "物料编码", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "物料编码不能为空") + private String materialCode; + + @Schema(description = "物料标识") + private String materialId; + + @Schema(description = "批次序列号") + private String pcsn; + + @Schema(description = "计划数量", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "计划数量不能为空") + @DecimalMin(value = "0.001", message = "计划数量不能小于 0.001") + private BigDecimal planQty; + + @Schema(description = "数量单位标识") + private String qtyUnitId; + + @Schema(description = "数量单位名称") + private String qtyUnitName; + + @Schema(description = "来源单据编号") + private String sourceBillCode; + + @Schema(description = "来源单据类型") + private String sourceBillType; + + @Schema(description = "来源单据明细标识") + private String sourceBilldtlId; + + @Schema(description = "备注") + private String remark; + } +} diff --git a/nl-module-wms/nl-module-wms-server/src/main/java/cn/code/nl/module/wms/framework/rpc/config/RpcConfiguration.java b/nl-module-wms/nl-module-wms-server/src/main/java/cn/code/nl/module/wms/framework/rpc/config/RpcConfiguration.java new file mode 100644 index 00000000..7fb84cdf --- /dev/null +++ b/nl-module-wms/nl-module-wms-server/src/main/java/cn/code/nl/module/wms/framework/rpc/config/RpcConfiguration.java @@ -0,0 +1,10 @@ +package cn.code.nl.module.wms.framework.rpc.config; + +import cn.code.nl.module.base.api.codegen.CodeGenApi; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; + +@Configuration(value = "wmsRpcConfiguration", proxyBeanMethods = false) +@EnableFeignClients(clients = CodeGenApi.class) +public class RpcConfiguration { +} diff --git a/nl-module-wms/nl-module-wms-server/src/main/java/cn/code/nl/module/wms/service/iostorinv/IostorInvService.java b/nl-module-wms/nl-module-wms-server/src/main/java/cn/code/nl/module/wms/service/iostorinv/IostorInvService.java index 42203b6d..68b722bf 100644 --- a/nl-module-wms/nl-module-wms-server/src/main/java/cn/code/nl/module/wms/service/iostorinv/IostorInvService.java +++ b/nl-module-wms/nl-module-wms-server/src/main/java/cn/code/nl/module/wms/service/iostorinv/IostorInvService.java @@ -14,6 +14,14 @@ import cn.code.nl.framework.common.pojo.PageParam; */ public interface IostorInvService { + /** + * 创建出库单 + * + * @param reqVO 出库单创建信息 + * @return 出库单编号 + */ + String createOutbound(@Valid IostorInvCreateReqVO reqVO); + /** * 创建出入库单主表 * diff --git a/nl-module-wms/nl-module-wms-server/src/main/java/cn/code/nl/module/wms/service/iostorinv/IostorInvServiceImpl.java b/nl-module-wms/nl-module-wms-server/src/main/java/cn/code/nl/module/wms/service/iostorinv/IostorInvServiceImpl.java index f6d75cb2..bcb984be 100644 --- a/nl-module-wms/nl-module-wms-server/src/main/java/cn/code/nl/module/wms/service/iostorinv/IostorInvServiceImpl.java +++ b/nl-module-wms/nl-module-wms-server/src/main/java/cn/code/nl/module/wms/service/iostorinv/IostorInvServiceImpl.java @@ -32,6 +32,11 @@ public class IostorInvServiceImpl implements IostorInvService { @Resource private IostorInvMapper iostorInvMapper; + @Override + public String createOutbound(IostorInvCreateReqVO reqVO) { + throw new UnsupportedOperationException("出库单聚合保存功能尚未实现"); + } + @Override public String createIostorInv(IostorInvSaveReqVO createReqVO) { // 插入 diff --git a/nl-module-wms/nl-module-wms-server/src/test/java/cn/code/nl/module/wms/service/iostorinv/IostorInvServiceLocalSpringTest.java b/nl-module-wms/nl-module-wms-server/src/test/java/cn/code/nl/module/wms/service/iostorinv/IostorInvServiceLocalSpringTest.java new file mode 100644 index 00000000..b4e63bb7 --- /dev/null +++ b/nl-module-wms/nl-module-wms-server/src/test/java/cn/code/nl/module/wms/service/iostorinv/IostorInvServiceLocalSpringTest.java @@ -0,0 +1,25 @@ +package cn.code.nl.module.wms.service.iostorinv; + +import cn.code.nl.module.wms.controller.admin.iostorinv.vo.IostorInvCreateReqVO; +import jakarta.annotation.Resource; +import jakarta.validation.ConstraintViolationException; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; + +import static org.junit.jupiter.api.Assertions.assertThrows; + +@SpringBootTest +@ActiveProfiles("local") +class IostorInvServiceLocalSpringTest { + + @Resource + private IostorInvService iostorInvService; + + @Test + void createOutboundShouldRejectEmptyRequest() { + IostorInvCreateReqVO reqVO = new IostorInvCreateReqVO(); + + assertThrows(ConstraintViolationException.class, () -> iostorInvService.createOutbound(reqVO)); + } +}