diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/inventory/vo/history/WmsInventoryHistoryRespVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/inventory/vo/history/WmsInventoryHistoryRespVO.java index d3aef86..0613722 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/inventory/vo/history/WmsInventoryHistoryRespVO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/inventory/vo/history/WmsInventoryHistoryRespVO.java @@ -40,8 +40,8 @@ public class WmsInventoryHistoryRespVO { private BigDecimal beforeQuantity; @Schema(description = "变化后库存数量", example = "100.00") private BigDecimal afterQuantity; - @Schema(description = "金额", example = "1000.00") - private BigDecimal amount; + @Schema(description = "单价", example = "1000.00") + private BigDecimal price; @Schema(description = "备注", example = "备注") private String remark; diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/detail/WmsReceiptOrderDetailRespVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/detail/WmsReceiptOrderDetailRespVO.java index 1376d48..034d2b9 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/detail/WmsReceiptOrderDetailRespVO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/detail/WmsReceiptOrderDetailRespVO.java @@ -46,8 +46,8 @@ public class WmsReceiptOrderDetailRespVO { @Schema(description = "入库数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00") private BigDecimal quantity; - @Schema(description = "金额", example = "1000.00") - private BigDecimal amount; + @Schema(description = "单价", example = "1000.00") + private BigDecimal price; @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) private LocalDateTime createTime; diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/detail/WmsReceiptOrderDetailSaveReqVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/detail/WmsReceiptOrderDetailSaveReqVO.java index ca4e7d5..8659cc3 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/detail/WmsReceiptOrderDetailSaveReqVO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/detail/WmsReceiptOrderDetailSaveReqVO.java @@ -23,8 +23,8 @@ public class WmsReceiptOrderDetailSaveReqVO { @DecimalMin(value = "0", inclusive = false, message = "入库数量必须大于 0") private BigDecimal quantity; - @Schema(description = "金额", example = "1000.00") - @DecimalMin(value = "0", message = "金额不能小于 0") - private BigDecimal amount; + @Schema(description = "单价", example = "1000.00") + @DecimalMin(value = "0", message = "单价不能小于 0") + private BigDecimal price; } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/order/WmsReceiptOrderPageReqVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/order/WmsReceiptOrderPageReqVO.java index 2440d8d..351d150 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/order/WmsReceiptOrderPageReqVO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/order/WmsReceiptOrderPageReqVO.java @@ -45,10 +45,10 @@ public class WmsReceiptOrderPageReqVO extends PageParam { private BigDecimal totalQuantityMax; @Schema(description = "最小总金额", example = "1.00") - private BigDecimal totalAmountMin; + private BigDecimal totalPriceMin; @Schema(description = "最大总金额", example = "1000.00") - private BigDecimal totalAmountMax; + private BigDecimal totalPriceMax; @Schema(description = "入库类型", example = "101") @InEnum(WmsReceiptOrderTypeEnum.class) diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/order/WmsReceiptOrderRespVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/order/WmsReceiptOrderRespVO.java index 602b90a..24d3b04 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/order/WmsReceiptOrderRespVO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/order/WmsReceiptOrderRespVO.java @@ -66,7 +66,7 @@ public class WmsReceiptOrderRespVO { @Schema(description = "总金额", example = "1000.00") @ExcelProperty("总金额") - private BigDecimal totalAmount; + private BigDecimal totalPrice; @Schema(description = "入库明细") private List details; diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/order/WmsReceiptOrderSaveReqVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/order/WmsReceiptOrderSaveReqVO.java index 2071ea4..b8619fc 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/order/WmsReceiptOrderSaveReqVO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/order/WmsReceiptOrderSaveReqVO.java @@ -10,7 +10,6 @@ import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; import lombok.Data; -import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; @@ -50,14 +49,6 @@ public class WmsReceiptOrderSaveReqVO { @NotNull(message = "仓库不能为空") private Long warehouseId; - @Schema(description = "入库数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00") - @NotNull(message = "入库数量不能为空") - private BigDecimal totalQuantity; - - @Schema(description = "总金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000.00") - @NotNull(message = "总金额不能为空") - private BigDecimal totalAmount; - @Schema(description = "入库明细") @Valid private List details; diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/inventory/WmsInventoryHistoryDO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/inventory/WmsInventoryHistoryDO.java index 45c91f6..857f1b7 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/inventory/WmsInventoryHistoryDO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/inventory/WmsInventoryHistoryDO.java @@ -59,12 +59,12 @@ public class WmsInventoryHistoryDO extends BaseDO { */ private BigDecimal afterQuantity; - // ========= 金额备注相关字段 ========= + // ========= 单价备注相关字段 ========= /** - * 金额 + * 单价 */ - private BigDecimal amount; + private BigDecimal price; /** * 备注 */ diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/receipt/WmsReceiptOrderDO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/receipt/WmsReceiptOrderDO.java index 2fa8dd1..86458cf 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/receipt/WmsReceiptOrderDO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/receipt/WmsReceiptOrderDO.java @@ -87,6 +87,6 @@ public class WmsReceiptOrderDO extends BaseDO { /** * 总金额 */ - private BigDecimal totalAmount; + private BigDecimal totalPrice; } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/receipt/WmsReceiptOrderDetailDO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/receipt/WmsReceiptOrderDetailDO.java index 697951a..f8b94ea 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/receipt/WmsReceiptOrderDetailDO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/receipt/WmsReceiptOrderDetailDO.java @@ -54,15 +54,15 @@ public class WmsReceiptOrderDetailDO extends BaseDO { */ private Long warehouseId; - // ========= 汇总金额字段 ========= + // ========= 数量金额字段 ========= /** * 入库数量 */ private BigDecimal quantity; /** - * 金额(小计、非单价) + * 单价 */ - private BigDecimal amount; + private BigDecimal price; } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/order/receipt/WmsReceiptOrderMapper.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/order/receipt/WmsReceiptOrderMapper.java index 5669f63..85cf105 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/order/receipt/WmsReceiptOrderMapper.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/order/receipt/WmsReceiptOrderMapper.java @@ -24,8 +24,8 @@ public interface WmsReceiptOrderMapper extends BaseMapperX { .betweenIfPresent(WmsReceiptOrderDO::getOrderTime, reqVO.getOrderTime()) .geIfPresent(WmsReceiptOrderDO::getTotalQuantity, reqVO.getTotalQuantityMin()) .leIfPresent(WmsReceiptOrderDO::getTotalQuantity, reqVO.getTotalQuantityMax()) - .geIfPresent(WmsReceiptOrderDO::getTotalAmount, reqVO.getTotalAmountMin()) - .leIfPresent(WmsReceiptOrderDO::getTotalAmount, reqVO.getTotalAmountMax()) + .geIfPresent(WmsReceiptOrderDO::getTotalPrice, reqVO.getTotalPriceMin()) + .leIfPresent(WmsReceiptOrderDO::getTotalPrice, reqVO.getTotalPriceMax()) .eqIfPresent(WmsReceiptOrderDO::getType, reqVO.getType()) .likeIfPresent(WmsReceiptOrderDO::getBizOrderNo, reqVO.getBizOrderNo()) .eqIfPresent(WmsReceiptOrderDO::getCreator, reqVO.getCreator()) diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImpl.java index 9f00359..0ab6f23 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImpl.java @@ -189,7 +189,7 @@ public class WmsInventoryServiceImpl implements WmsInventoryService { return new WmsInventoryHistoryDO() .setWarehouseId(item.getWarehouseId()).setSkuId(item.getSkuId()) .setQuantity(item.getQuantity()).setBeforeQuantity(result.get(0)).setAfterQuantity(result.get(1)) - .setAmount(item.getAmount()).setRemark(item.getRemark()) + .setPrice(item.getPrice()).setRemark(item.getRemark()) .setOrderId(reqDTO.getOrderId()).setOrderNo(reqDTO.getOrderNo()).setOrderType(reqDTO.getOrderType()); } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/dto/WmsInventoryChangeReqDTO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/dto/WmsInventoryChangeReqDTO.java index de7071b..41db54e 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/dto/WmsInventoryChangeReqDTO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/dto/WmsInventoryChangeReqDTO.java @@ -53,12 +53,12 @@ public class WmsInventoryChangeReqDTO { */ private BigDecimal quantity; - // ========= 金额备注相关字段 ========= + // ========= 单价备注相关字段 ========= /** - * 金额(小计、非单价) + * 单价 */ - private BigDecimal amount; + private BigDecimal price; /** * 备注 */ diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderServiceImpl.java index db4c0b1..6455c44 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderServiceImpl.java @@ -1,8 +1,10 @@ package cn.iocoder.yudao.module.wms.service.order.receipt; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.wms.controller.admin.order.receipt.vo.detail.WmsReceiptOrderDetailSaveReqVO; import cn.iocoder.yudao.module.wms.controller.admin.order.receipt.vo.order.WmsReceiptOrderPageReqVO; import cn.iocoder.yudao.module.wms.controller.admin.order.receipt.vo.order.WmsReceiptOrderSaveReqVO; import cn.iocoder.yudao.module.wms.dal.dataobject.order.receipt.WmsReceiptOrderDO; @@ -19,6 +21,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import java.math.BigDecimal; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -54,6 +57,7 @@ public class WmsReceiptOrderServiceImpl implements WmsReceiptOrderService { // 2.1 插入入库单 WmsReceiptOrderDO order = BeanUtils.toBean(createReqVO, WmsReceiptOrderDO.class); order.setStatus(WmsOrderStatusEnum.PREPARE.getStatus()); + fillReceiptOrderTotal(order, createReqVO); receiptOrderMapper.insert(order); // 2.2 插入入库单明细 receiptOrderDetailService.createReceiptOrderDetailList(order.getId(), createReqVO); @@ -70,6 +74,7 @@ public class WmsReceiptOrderServiceImpl implements WmsReceiptOrderService { // 2.1 更新入库单 WmsReceiptOrderDO updateObj = BeanUtils.toBean(updateReqVO, WmsReceiptOrderDO.class) .setStatus(WmsOrderStatusEnum.PREPARE.getStatus()); + fillReceiptOrderTotal(updateObj, updateReqVO); receiptOrderMapper.updateById(updateObj); // 2.2 更新入库单明细 receiptOrderDetailService.updateReceiptOrderDetailList(updateReqVO.getId(), updateReqVO); @@ -159,6 +164,22 @@ public class WmsReceiptOrderServiceImpl implements WmsReceiptOrderService { } } + private void fillReceiptOrderTotal(WmsReceiptOrderDO order, WmsReceiptOrderSaveReqVO reqVO) { + BigDecimal totalQuantity = BigDecimal.ZERO; + BigDecimal totalPrice = BigDecimal.ZERO; + if (CollUtil.isNotEmpty(reqVO.getDetails())) { + for (WmsReceiptOrderDetailSaveReqVO detail : reqVO.getDetails()) { + if (detail.getQuantity() != null) { + totalQuantity = totalQuantity.add(detail.getQuantity()); + } + if (detail.getQuantity() != null && detail.getPrice() != null) { + totalPrice = totalPrice.add(detail.getQuantity().multiply(detail.getPrice())); + } + } + } + order.setTotalQuantity(totalQuantity).setTotalPrice(totalPrice); + } + private WmsReceiptOrderDO validateReceiptOrderExists(Long id) { WmsReceiptOrderDO order = id == null ? null : receiptOrderMapper.selectById(id); if (order == null) { diff --git a/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImplTest.java b/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImplTest.java index f1f5d64..bb06a72 100644 --- a/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImplTest.java +++ b/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImplTest.java @@ -115,7 +115,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { .setSkuId(sku.getId()) .setWarehouseId(100L) .setQuantity(new BigDecimal("7.00")) - .setAmount(new BigDecimal("140.00")) + .setPrice(new BigDecimal("140.00")) .setRemark("测试入库 2")); reqDTO.setItems(items); @@ -150,7 +150,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { .setSkuId(sku.getId()) .setWarehouseId(100L) .setQuantity(new BigDecimal("4.00")) - .setAmount(new BigDecimal("80.00")) + .setPrice(new BigDecimal("80.00")) .setRemark("测试入库 2")); reqDTO.setItems(items); @@ -184,13 +184,13 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { .setSkuId(sku.getId()) .setWarehouseId(200L) .setQuantity(new BigDecimal("3.00")) - .setAmount(new BigDecimal("60.00")) + .setPrice(new BigDecimal("60.00")) .setRemark("测试入库 2")); items.add(new WmsInventoryChangeReqDTO.Item() .setSkuId(sku.getId()) .setWarehouseId(100L) .setQuantity(new BigDecimal("-2.00")) - .setAmount(new BigDecimal("40.00")) + .setPrice(new BigDecimal("40.00")) .setRemark("测试出库")); reqDTO.setItems(items); @@ -263,7 +263,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { .setSkuId(sku.getId()) .setWarehouseId(200L) .setQuantity(new BigDecimal("-1.00")) - .setAmount(new BigDecimal("20.00")) + .setPrice(new BigDecimal("20.00")) .setRemark("测试出库")); reqDTO.setItems(items); mockItemSkuAndItem(item, sku); @@ -411,7 +411,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { .setSkuId(skuId) .setWarehouseId(warehouseId) .setQuantity(new BigDecimal(quantity)) - .setAmount(new BigDecimal("100.00")) + .setPrice(new BigDecimal("100.00")) .setRemark("测试入库"))); } diff --git a/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderDetailServiceImplTest.java b/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderDetailServiceImplTest.java index 4106364..538be96 100644 --- a/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderDetailServiceImplTest.java +++ b/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderDetailServiceImplTest.java @@ -126,7 +126,7 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest { reqVO.setId(id); reqVO.setSkuId(skuId); reqVO.setQuantity(new BigDecimal(quantity)); - reqVO.setAmount(new BigDecimal("100.00")); + reqVO.setPrice(new BigDecimal("100.00")); return reqVO; } @@ -136,7 +136,7 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest { .skuId(skuId) .warehouseId(100L) .quantity(new BigDecimal(quantity)) - .amount(new BigDecimal("100.00")) + .price(new BigDecimal("100.00")) .build(); } diff --git a/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderServiceImplTest.java b/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderServiceImplTest.java index 5ff526f..0b58e54 100644 --- a/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderServiceImplTest.java +++ b/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderServiceImplTest.java @@ -1,6 +1,8 @@ package cn.iocoder.yudao.module.wms.service.order.receipt; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; +import cn.iocoder.yudao.module.wms.controller.admin.order.receipt.vo.detail.WmsReceiptOrderDetailSaveReqVO; +import cn.iocoder.yudao.module.wms.controller.admin.order.receipt.vo.order.WmsReceiptOrderSaveReqVO; import cn.iocoder.yudao.module.wms.dal.dataobject.order.receipt.WmsReceiptOrderDO; import cn.iocoder.yudao.module.wms.dal.dataobject.order.receipt.WmsReceiptOrderDetailDO; import cn.iocoder.yudao.module.wms.dal.mysql.order.receipt.WmsReceiptOrderDetailMapper; @@ -21,6 +23,7 @@ import org.springframework.test.context.bean.override.mockito.MockitoBean; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.Arrays; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.RECEIPT_ORDER_DETAIL_REQUIRED; @@ -53,6 +56,43 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { private WmsInventoryService inventoryService; @Test + public void testCreateReceiptOrder_calculateTotal() { + // mock 数据 + WmsReceiptOrderSaveReqVO reqVO = createReceiptOrderSaveReqVO(null, + createReceiptOrderDetailReqVO(null, 2001L, "1.50", "10.00"), + createReceiptOrderDetailReqVO(null, 2002L, "2.50", "20.00")); + + // 调用 + Long orderId = receiptOrderService.createReceiptOrder(reqVO); + + // 断言 + WmsReceiptOrderDO dbOrder = receiptOrderMapper.selectById(orderId); + assertNotNull(dbOrder); + assertEquals(0, new BigDecimal("4.00").compareTo(dbOrder.getTotalQuantity())); + assertEquals(0, new BigDecimal("65.00").compareTo(dbOrder.getTotalPrice())); + assertEquals(2, receiptOrderDetailMapper.selectListByOrderId(orderId).size()); + } + + @Test + public void testUpdateReceiptOrder_calculateTotal() { + // mock 数据 + WmsReceiptOrderDO order = createReceiptOrder(100L); + receiptOrderMapper.insert(order); + WmsReceiptOrderSaveReqVO reqVO = createReceiptOrderSaveReqVO(order.getId(), + createReceiptOrderDetailReqVO(null, 2001L, "3.00", "30.00")); + + // 调用 + receiptOrderService.updateReceiptOrder(reqVO); + + // 断言 + WmsReceiptOrderDO dbOrder = receiptOrderMapper.selectById(order.getId()); + assertNotNull(dbOrder); + assertEquals(0, new BigDecimal("3.00").compareTo(dbOrder.getTotalQuantity())); + assertEquals(0, new BigDecimal("90.00").compareTo(dbOrder.getTotalPrice())); + assertEquals(1, receiptOrderDetailMapper.selectListByOrderId(order.getId()).size()); + } + + @Test public void testCompleteReceiptOrder_success() { // mock 数据 Long warehouseId = 100L; @@ -143,7 +183,29 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { .setStatus(WmsOrderStatusEnum.PREPARE.getStatus()) .setWarehouseId(warehouseId) .setTotalQuantity(new BigDecimal("2.00")) - .setTotalAmount(new BigDecimal("20.00")); + .setTotalPrice(new BigDecimal("20.00")); + } + + private static WmsReceiptOrderSaveReqVO createReceiptOrderSaveReqVO(Long id, + WmsReceiptOrderDetailSaveReqVO... details) { + WmsReceiptOrderSaveReqVO reqVO = new WmsReceiptOrderSaveReqVO(); + reqVO.setId(id); + reqVO.setNo("RK202605120001"); + reqVO.setType(WmsReceiptOrderTypeEnum.PURCHASE.getType()); + reqVO.setOrderTime(LocalDateTime.of(2026, 5, 12, 0, 0)); + reqVO.setWarehouseId(100L); + reqVO.setDetails(Arrays.asList(details)); + return reqVO; + } + + private static WmsReceiptOrderDetailSaveReqVO createReceiptOrderDetailReqVO(Long id, Long skuId, + String quantity, String price) { + WmsReceiptOrderDetailSaveReqVO reqVO = new WmsReceiptOrderDetailSaveReqVO(); + reqVO.setId(id); + reqVO.setSkuId(skuId); + reqVO.setQuantity(new BigDecimal(quantity)); + reqVO.setPrice(new BigDecimal(price)); + return reqVO; } private static WmsReceiptOrderDetailDO createReceiptOrderDetail(Long orderId, Long skuId, Long warehouseId) { @@ -152,7 +214,7 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { .skuId(skuId) .warehouseId(warehouseId) .quantity(new BigDecimal("2.00")) - .amount(new BigDecimal("20.00")) + .price(new BigDecimal("20.00")) .build(); } diff --git a/yudao-module-wms/src/test/resources/sql/create_tables.sql b/yudao-module-wms/src/test/resources/sql/create_tables.sql index 5512bb8..918380a 100644 --- a/yudao-module-wms/src/test/resources/sql/create_tables.sql +++ b/yudao-module-wms/src/test/resources/sql/create_tables.sql @@ -60,7 +60,7 @@ CREATE TABLE IF NOT EXISTS "wms_inventory_history" ( "quantity" decimal(24, 6) NOT NULL DEFAULT '0', "before_quantity" decimal(24, 6) DEFAULT NULL, "after_quantity" decimal(24, 6) DEFAULT NULL, - "amount" decimal(24, 6) DEFAULT NULL, + "price" decimal(24, 6) DEFAULT NULL, "remark" varchar(255) DEFAULT NULL, "order_id" bigint DEFAULT NULL, "order_no" varchar(64) DEFAULT NULL, @@ -85,7 +85,7 @@ CREATE TABLE IF NOT EXISTS "wms_receipt_order" ( "remark" varchar(255) DEFAULT NULL, "warehouse_id" bigint NOT NULL, "total_quantity" decimal(20, 2) NOT NULL DEFAULT '0', - "total_amount" decimal(10, 2) DEFAULT NULL, + "total_price" decimal(10, 2) DEFAULT NULL, "creator" varchar(64) DEFAULT '', "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, "updater" varchar(64) DEFAULT '', @@ -101,7 +101,7 @@ CREATE TABLE IF NOT EXISTS "wms_receipt_order_detail" ( "sku_id" bigint NOT NULL, "warehouse_id" bigint NOT NULL, "quantity" decimal(20, 2) NOT NULL DEFAULT '0', - "amount" decimal(10, 2) DEFAULT NULL, + "price" decimal(10, 2) DEFAULT NULL, "creator" varchar(64) DEFAULT '', "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, "updater" varchar(64) DEFAULT '',