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 b0b7928..87c8725 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 @@ -42,6 +42,8 @@ public class WmsInventoryHistoryRespVO { private BigDecimal afterQuantity; @Schema(description = "单价", example = "1000.00") private BigDecimal price; + @Schema(description = "库存变化金额", example = "10000.00") + private BigDecimal totalPrice; @Schema(description = "备注", example = "备注") private String remark; diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/movement/vo/detail/WmsMovementOrderDetailRespVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/movement/vo/detail/WmsMovementOrderDetailRespVO.java index 04acda2..5136534 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/movement/vo/detail/WmsMovementOrderDetailRespVO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/movement/vo/detail/WmsMovementOrderDetailRespVO.java @@ -55,6 +55,9 @@ public class WmsMovementOrderDetailRespVO { @Schema(description = "单价", example = "100.00") private BigDecimal price; + @Schema(description = "行金额", example = "1000.00") + private BigDecimal totalPrice; + @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/movement/vo/detail/WmsMovementOrderDetailSaveReqVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/movement/vo/detail/WmsMovementOrderDetailSaveReqVO.java index d0fdc95..28b412e 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/movement/vo/detail/WmsMovementOrderDetailSaveReqVO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/movement/vo/detail/WmsMovementOrderDetailSaveReqVO.java @@ -27,4 +27,8 @@ public class WmsMovementOrderDetailSaveReqVO { @DecimalMin(value = "0", message = "单价不能小于 0") private BigDecimal price; + @Schema(description = "行金额", example = "1000.00") + @DecimalMin(value = "0", message = "行金额不能小于 0") + private BigDecimal totalPrice; + } 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 034d2b9..4c72b93 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 @@ -49,6 +49,9 @@ public class WmsReceiptOrderDetailRespVO { @Schema(description = "单价", example = "1000.00") private BigDecimal price; + @Schema(description = "行金额", example = "1500.00") + private BigDecimal totalPrice; + @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 8659cc3..a74cc90 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 @@ -27,4 +27,8 @@ public class WmsReceiptOrderDetailSaveReqVO { @DecimalMin(value = "0", message = "单价不能小于 0") private BigDecimal price; + @Schema(description = "行金额", example = "1500.00") + @DecimalMin(value = "0", message = "行金额不能小于 0") + private BigDecimal totalPrice; + } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/shipment/vo/detail/WmsShipmentOrderDetailRespVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/shipment/vo/detail/WmsShipmentOrderDetailRespVO.java index c3a3def..80e9538 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/shipment/vo/detail/WmsShipmentOrderDetailRespVO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/shipment/vo/detail/WmsShipmentOrderDetailRespVO.java @@ -49,6 +49,9 @@ public class WmsShipmentOrderDetailRespVO { @Schema(description = "单价", example = "100.00") private BigDecimal price; + @Schema(description = "行金额", example = "1000.00") + private BigDecimal totalPrice; + @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/shipment/vo/detail/WmsShipmentOrderDetailSaveReqVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/shipment/vo/detail/WmsShipmentOrderDetailSaveReqVO.java index 9039782..be8a8ba 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/shipment/vo/detail/WmsShipmentOrderDetailSaveReqVO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/shipment/vo/detail/WmsShipmentOrderDetailSaveReqVO.java @@ -27,4 +27,8 @@ public class WmsShipmentOrderDetailSaveReqVO { @DecimalMin(value = "0", message = "单价不能小于 0") private BigDecimal price; + @Schema(description = "行金额", example = "1000.00") + @DecimalMin(value = "0", message = "行金额不能小于 0") + private BigDecimal totalPrice; + } 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 56b2137..224940a 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 @@ -66,6 +66,10 @@ public class WmsInventoryHistoryDO extends BaseDO { */ private BigDecimal price; /** + * 库存变化金额 + */ + private BigDecimal totalPrice; + /** * 备注 */ private String remark; diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/check/WmsCheckOrderDO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/check/WmsCheckOrderDO.java index b09402f..7ebe50a 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/check/WmsCheckOrderDO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/check/WmsCheckOrderDO.java @@ -62,15 +62,15 @@ public class WmsCheckOrderDO extends BaseDO { // ========= 汇总金额字段 ========= /** - * 盈亏数量 + * 盈亏数量(实盘数量 - 账面数量) */ private BigDecimal totalQuantity; /** - * 总金额(账面金额) + * 总金额(账面数量 * 单价) */ private BigDecimal totalPrice; /** - * 实际金额 + * 实际金额(实盘数量 * 单价) */ private BigDecimal actualPrice; diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/check/WmsCheckOrderDetailDO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/check/WmsCheckOrderDetailDO.java index b0872a9..56f3553 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/check/WmsCheckOrderDetailDO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/check/WmsCheckOrderDetailDO.java @@ -67,7 +67,7 @@ public class WmsCheckOrderDetailDO extends BaseDO { */ private LocalDateTime receiptTime; - // ========= 汇总金额字段 ========= + // ========= 数量金额字段 ========= /** * 账面数量 diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/movement/WmsMovementOrderDetailDO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/movement/WmsMovementOrderDetailDO.java index 72f2b48..e9e9d2f 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/movement/WmsMovementOrderDetailDO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/movement/WmsMovementOrderDetailDO.java @@ -63,7 +63,7 @@ public class WmsMovementOrderDetailDO extends BaseDO { */ private Long targetWarehouseId; - // ========= 汇总金额字段 ========= + // ========= 数量金额字段 ========= /** * 移库数量 @@ -73,5 +73,9 @@ public class WmsMovementOrderDetailDO extends BaseDO { * 单价 */ private BigDecimal price; + /** + * 行金额(数量 * 单价) + */ + 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 f8b94ea..6920d36 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 @@ -64,5 +64,9 @@ public class WmsReceiptOrderDetailDO extends BaseDO { * 单价 */ private BigDecimal price; + /** + * 行金额(数量 * 单价) + */ + private BigDecimal totalPrice; } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/shipment/WmsShipmentOrderDetailDO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/shipment/WmsShipmentOrderDetailDO.java index b566a81..fdcb67e 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/shipment/WmsShipmentOrderDetailDO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/shipment/WmsShipmentOrderDetailDO.java @@ -54,7 +54,7 @@ public class WmsShipmentOrderDetailDO extends BaseDO { */ private Long warehouseId; - // ========= 汇总金额字段 ========= + // ========= 数量金额字段 ========= /** * 出库数量 @@ -64,5 +64,9 @@ public class WmsShipmentOrderDetailDO extends BaseDO { * 单价 */ private BigDecimal price; + /** + * 行金额(数量 * 单价) + */ + private BigDecimal totalPrice; } 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 e186411..61b080a 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 @@ -215,7 +215,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)) - .setPrice(item.getPrice()).setRemark(item.getRemark()) + .setPrice(item.getPrice()).setTotalPrice(item.getTotalPrice()).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 ffc4977..79636a6 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 @@ -60,6 +60,10 @@ public class WmsInventoryChangeReqDTO { */ private BigDecimal price; /** + * 库存变化金额 + */ + private BigDecimal totalPrice; + /** * 备注 */ private String remark; diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderDetailServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderDetailServiceImpl.java index 45bd4cf..ff2fd4e 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderDetailServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderDetailServiceImpl.java @@ -112,10 +112,19 @@ public class WmsMovementOrderDetailServiceImpl implements WmsMovementOrderDetail // 校验 SKU 存在 itemSkuService.validateItemSkuExists(detail.getSkuId()); // 构建对象 - return BeanUtils.toBean(detail, WmsMovementOrderDetailDO.class) + WmsMovementOrderDetailDO detailDO = BeanUtils.toBean(detail, WmsMovementOrderDetailDO.class) .setSourceWarehouseId(reqVO.getSourceWarehouseId()) .setTargetWarehouseId(reqVO.getTargetWarehouseId()); + fillDetailTotalPrice(detailDO); + return detailDO; }); } + private static void fillDetailTotalPrice(WmsMovementOrderDetailDO detail) { + if (detail.getTotalPrice() != null || detail.getQuantity() == null || detail.getPrice() == null) { + return; + } + detail.setTotalPrice(detail.getQuantity().multiply(detail.getPrice())); + } + } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderServiceImpl.java index 942ce4e..f236d89 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderServiceImpl.java @@ -169,14 +169,26 @@ public class WmsMovementOrderServiceImpl implements WmsMovementOrderService { if (detail.getQuantity() != null) { totalQuantity = totalQuantity.add(detail.getQuantity()); } - if (detail.getQuantity() != null && detail.getPrice() != null) { - totalPrice = totalPrice.add(detail.getQuantity().multiply(detail.getPrice())); + BigDecimal detailTotalPrice = getDetailTotalPrice(detail.getQuantity(), detail.getPrice(), + detail.getTotalPrice()); + if (detailTotalPrice != null) { + totalPrice = totalPrice.add(detailTotalPrice); } } } order.setTotalQuantity(totalQuantity).setTotalPrice(totalPrice); } + private static BigDecimal getDetailTotalPrice(BigDecimal quantity, BigDecimal price, BigDecimal totalPrice) { + if (totalPrice != null) { + return totalPrice; + } + if (quantity == null || price == null) { + return null; + } + return quantity.multiply(price); + } + private WmsMovementOrderDO validateMovementOrderExists(Long id) { WmsMovementOrderDO order = id == null ? null : movementOrderMapper.selectById(id); if (order == null) { @@ -208,14 +220,22 @@ public class WmsMovementOrderServiceImpl implements WmsMovementOrderService { private void changeInventory(WmsMovementOrderDO order, List details) { List items = new ArrayList<>(details.size() * 2); for (WmsMovementOrderDetailDO detail : details) { + BigDecimal detailTotalPrice = getDetailTotalPrice(detail.getQuantity(), detail.getPrice(), + detail.getTotalPrice()); items.add(BeanUtils.toBean(detail, WmsInventoryChangeReqDTO.Item.class) - .setWarehouseId(detail.getSourceWarehouseId()).setQuantity(detail.getQuantity().negate())); + .setWarehouseId(detail.getSourceWarehouseId()).setQuantity(detail.getQuantity().negate()) + .setTotalPrice(negate(detailTotalPrice))); items.add(BeanUtils.toBean(detail, WmsInventoryChangeReqDTO.Item.class) - .setWarehouseId(detail.getTargetWarehouseId()).setQuantity(detail.getQuantity())); + .setWarehouseId(detail.getTargetWarehouseId()).setQuantity(detail.getQuantity()) + .setTotalPrice(detailTotalPrice)); } inventoryService.changeInventory(new WmsInventoryChangeReqDTO() .setOrderId(order.getId()).setOrderNo(order.getNo()) .setOrderType(WmsOrderTypeEnum.MOVEMENT.getType()).setItems(items)); } + private static BigDecimal negate(BigDecimal value) { + return value == null ? null : value.negate(); + } + } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderDetailServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderDetailServiceImpl.java index 566d327..62f0e1f 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderDetailServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderDetailServiceImpl.java @@ -112,8 +112,18 @@ public class WmsReceiptOrderDetailServiceImpl implements WmsReceiptOrderDetailSe // 校验 SKU 存在 itemSkuService.validateItemSkuExists(detail.getSkuId()); // 构建对象 - return BeanUtils.toBean(detail, WmsReceiptOrderDetailDO.class).setWarehouseId(reqVO.getWarehouseId()); + WmsReceiptOrderDetailDO detailDO = BeanUtils.toBean(detail, WmsReceiptOrderDetailDO.class) + .setWarehouseId(reqVO.getWarehouseId()); + fillDetailTotalPrice(detailDO); + return detailDO; }); } + private static void fillDetailTotalPrice(WmsReceiptOrderDetailDO detail) { + if (detail.getTotalPrice() != null || detail.getQuantity() == null || detail.getPrice() == null) { + return; + } + detail.setTotalPrice(detail.getQuantity().multiply(detail.getPrice())); + } + } 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 5a40ab0..93a280e 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 @@ -176,14 +176,26 @@ public class WmsReceiptOrderServiceImpl implements WmsReceiptOrderService { if (detail.getQuantity() != null) { totalQuantity = totalQuantity.add(detail.getQuantity()); } - if (detail.getQuantity() != null && detail.getPrice() != null) { - totalPrice = totalPrice.add(detail.getQuantity().multiply(detail.getPrice())); + BigDecimal detailTotalPrice = getDetailTotalPrice(detail.getQuantity(), detail.getPrice(), + detail.getTotalPrice()); + if (detailTotalPrice != null) { + totalPrice = totalPrice.add(detailTotalPrice); } } } order.setTotalQuantity(totalQuantity).setTotalPrice(totalPrice); } + private static BigDecimal getDetailTotalPrice(BigDecimal quantity, BigDecimal price, BigDecimal totalPrice) { + if (totalPrice != null) { + return totalPrice; + } + if (quantity == null || price == null) { + return null; + } + return quantity.multiply(price); + } + private WmsReceiptOrderDO validateReceiptOrderExists(Long id) { WmsReceiptOrderDO order = id == null ? null : receiptOrderMapper.selectById(id); if (order == null) { @@ -216,7 +228,9 @@ public class WmsReceiptOrderServiceImpl implements WmsReceiptOrderService { */ private void createInventory(WmsReceiptOrderDO order, List details) { List items = convertList(details, - detail -> BeanUtils.toBean(detail, WmsInventoryChangeReqDTO.Item.class)); + detail -> BeanUtils.toBean(detail, WmsInventoryChangeReqDTO.Item.class) + .setTotalPrice(getDetailTotalPrice(detail.getQuantity(), detail.getPrice(), + detail.getTotalPrice()))); inventoryService.changeInventory(new WmsInventoryChangeReqDTO() .setOrderId(order.getId()).setOrderNo(order.getNo()) .setOrderType(WmsOrderTypeEnum.RECEIPT.getType()).setItems(items)); diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderDetailServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderDetailServiceImpl.java index fb5ef90..bd2e352 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderDetailServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderDetailServiceImpl.java @@ -112,8 +112,18 @@ public class WmsShipmentOrderDetailServiceImpl implements WmsShipmentOrderDetail // 校验 SKU 存在 itemSkuService.validateItemSkuExists(detail.getSkuId()); // 构建对象 - return BeanUtils.toBean(detail, WmsShipmentOrderDetailDO.class).setWarehouseId(reqVO.getWarehouseId()); + WmsShipmentOrderDetailDO detailDO = BeanUtils.toBean(detail, WmsShipmentOrderDetailDO.class) + .setWarehouseId(reqVO.getWarehouseId()); + fillDetailTotalPrice(detailDO); + return detailDO; }); } + private static void fillDetailTotalPrice(WmsShipmentOrderDetailDO detail) { + if (detail.getTotalPrice() != null || detail.getQuantity() == null || detail.getPrice() == null) { + return; + } + detail.setTotalPrice(detail.getQuantity().multiply(detail.getPrice())); + } + } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderServiceImpl.java index a657997..bd583f8 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderServiceImpl.java @@ -176,14 +176,26 @@ public class WmsShipmentOrderServiceImpl implements WmsShipmentOrderService { if (detail.getQuantity() != null) { totalQuantity = totalQuantity.add(detail.getQuantity()); } - if (detail.getQuantity() != null && detail.getPrice() != null) { - totalPrice = totalPrice.add(detail.getQuantity().multiply(detail.getPrice())); + BigDecimal detailTotalPrice = getDetailTotalPrice(detail.getQuantity(), detail.getPrice(), + detail.getTotalPrice()); + if (detailTotalPrice != null) { + totalPrice = totalPrice.add(detailTotalPrice); } } } order.setTotalQuantity(totalQuantity).setTotalPrice(totalPrice); } + private static BigDecimal getDetailTotalPrice(BigDecimal quantity, BigDecimal price, BigDecimal totalPrice) { + if (totalPrice != null) { + return totalPrice; + } + if (quantity == null || price == null) { + return null; + } + return quantity.multiply(price); + } + private WmsShipmentOrderDO validateShipmentOrderExists(Long id) { WmsShipmentOrderDO order = id == null ? null : shipmentOrderMapper.selectById(id); if (order == null) { @@ -215,10 +227,16 @@ public class WmsShipmentOrderServiceImpl implements WmsShipmentOrderService { private void changeInventory(WmsShipmentOrderDO order, List details) { List items = convertList(details, detail -> BeanUtils.toBean(detail, WmsInventoryChangeReqDTO.Item.class) - .setQuantity(detail.getQuantity().multiply(BigDecimal.valueOf(-1L)))); + .setQuantity(detail.getQuantity().negate()) + .setTotalPrice(negate(getDetailTotalPrice(detail.getQuantity(), detail.getPrice(), + detail.getTotalPrice())))); inventoryService.changeInventory(new WmsInventoryChangeReqDTO() .setOrderId(order.getId()).setOrderNo(order.getNo()) .setOrderType(WmsOrderTypeEnum.SHIPMENT.getType()).setItems(items)); } + private static BigDecimal negate(BigDecimal value) { + return value == null ? null : value.negate(); + } + } 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 e0fe0e5..5b6c208 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 @@ -83,6 +83,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { assertEquals(100L, history.getWarehouseId()); assertEquals(0, BigDecimal.ZERO.compareTo(history.getBeforeQuantity())); assertEquals(0, new BigDecimal("5.00").compareTo(history.getAfterQuantity())); + assertEquals(0, new BigDecimal("500.00").compareTo(history.getTotalPrice())); assertEquals(reqDTO.getOrderId(), history.getOrderId()); assertEquals(reqDTO.getOrderNo(), history.getOrderNo()); assertEquals(reqDTO.getOrderType(), history.getOrderType()); @@ -110,6 +111,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { assertEquals(0, new BigDecimal("2.00").compareTo(history.getBeforeQuantity())); assertEquals(0, new BigDecimal("5.00").compareTo(history.getAfterQuantity())); assertEquals(0, new BigDecimal("3.00").compareTo(history.getQuantity())); + assertEquals(0, new BigDecimal("300.00").compareTo(history.getTotalPrice())); } @Test @@ -124,6 +126,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { .setWarehouseId(100L) .setQuantity(new BigDecimal("7.00")) .setPrice(new BigDecimal("140.00")) + .setTotalPrice(new BigDecimal("980.00")) .setRemark("测试入库 2")); reqDTO.setItems(items); @@ -141,9 +144,11 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { assertEquals(0, BigDecimal.ZERO.compareTo(histories.get(0).getBeforeQuantity())); assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(0).getAfterQuantity())); assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(0).getQuantity())); + assertEquals(0, new BigDecimal("500.00").compareTo(histories.get(0).getTotalPrice())); assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(1).getBeforeQuantity())); assertEquals(0, new BigDecimal("12.00").compareTo(histories.get(1).getAfterQuantity())); assertEquals(0, new BigDecimal("7.00").compareTo(histories.get(1).getQuantity())); + assertEquals(0, new BigDecimal("980.00").compareTo(histories.get(1).getTotalPrice())); } @Test @@ -159,6 +164,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { .setWarehouseId(100L) .setQuantity(new BigDecimal("4.00")) .setPrice(new BigDecimal("80.00")) + .setTotalPrice(new BigDecimal("320.00")) .setRemark("测试入库 2")); reqDTO.setItems(items); @@ -176,9 +182,11 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { assertEquals(0, new BigDecimal("2.00").compareTo(histories.get(0).getBeforeQuantity())); assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(0).getAfterQuantity())); assertEquals(0, new BigDecimal("3.00").compareTo(histories.get(0).getQuantity())); + assertEquals(0, new BigDecimal("300.00").compareTo(histories.get(0).getTotalPrice())); assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(1).getBeforeQuantity())); assertEquals(0, new BigDecimal("9.00").compareTo(histories.get(1).getAfterQuantity())); assertEquals(0, new BigDecimal("4.00").compareTo(histories.get(1).getQuantity())); + assertEquals(0, new BigDecimal("320.00").compareTo(histories.get(1).getTotalPrice())); } @Test @@ -193,12 +201,14 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { .setWarehouseId(200L) .setQuantity(new BigDecimal("3.00")) .setPrice(new BigDecimal("60.00")) + .setTotalPrice(new BigDecimal("180.00")) .setRemark("测试入库 2")); items.add(new WmsInventoryChangeReqDTO.Item() .setSkuId(sku.getId()) .setWarehouseId(100L) .setQuantity(new BigDecimal("-2.00")) .setPrice(new BigDecimal("40.00")) + .setTotalPrice(new BigDecimal("-80.00")) .setRemark("测试出库")); reqDTO.setItems(items); @@ -219,12 +229,15 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { assertEquals(100L, histories.get(0).getWarehouseId()); assertEquals(0, BigDecimal.ZERO.compareTo(histories.get(0).getBeforeQuantity())); assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(0).getAfterQuantity())); + assertEquals(0, new BigDecimal("500.00").compareTo(histories.get(0).getTotalPrice())); assertEquals(200L, histories.get(1).getWarehouseId()); assertEquals(0, BigDecimal.ZERO.compareTo(histories.get(1).getBeforeQuantity())); assertEquals(0, new BigDecimal("3.00").compareTo(histories.get(1).getAfterQuantity())); + assertEquals(0, new BigDecimal("180.00").compareTo(histories.get(1).getTotalPrice())); assertEquals(100L, histories.get(2).getWarehouseId()); assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(2).getBeforeQuantity())); assertEquals(0, new BigDecimal("3.00").compareTo(histories.get(2).getAfterQuantity())); + assertEquals(0, new BigDecimal("-80.00").compareTo(histories.get(2).getTotalPrice())); } @Test @@ -314,6 +327,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { .setWarehouseId(200L) .setQuantity(new BigDecimal("-1.00")) .setPrice(new BigDecimal("20.00")) + .setTotalPrice(new BigDecimal("-20.00")) .setRemark("测试出库")); reqDTO.setItems(items); mockItemSkuAndItem(item, sku); @@ -593,6 +607,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { .setWarehouseId(warehouseId) .setQuantity(new BigDecimal(quantity)) .setPrice(new BigDecimal("100.00")) + .setTotalPrice(new BigDecimal(quantity).multiply(new BigDecimal("100.00"))) .setRemark("测试入库"))); } diff --git a/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderDetailServiceImplTest.java b/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderDetailServiceImplTest.java index 63c2ef9..39d2781 100644 --- a/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderDetailServiceImplTest.java +++ b/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderDetailServiceImplTest.java @@ -52,6 +52,8 @@ public class WmsMovementOrderDetailServiceImplTest extends BaseDbUnitTest { assertEquals(orderId, details.get(1).getOrderId()); assertEquals(100L, details.get(0).getSourceWarehouseId()); assertEquals(200L, details.get(0).getTargetWarehouseId()); + assertEquals(0, new BigDecimal("100.00").compareTo(details.get(0).getTotalPrice())); + assertEquals(0, new BigDecimal("200.00").compareTo(details.get(1).getTotalPrice())); } @Test @@ -91,6 +93,7 @@ public class WmsMovementOrderDetailServiceImplTest extends BaseDbUnitTest { assertEquals(orderId, dbUpdateDetail.getOrderId()); assertEquals(2001L, dbUpdateDetail.getSkuId()); assertEquals(0, new BigDecimal("11.00").compareTo(dbUpdateDetail.getQuantity())); + assertEquals(0, new BigDecimal("1100.00").compareTo(dbUpdateDetail.getTotalPrice())); assertEquals(100L, dbUpdateDetail.getSourceWarehouseId()); assertEquals(200L, dbUpdateDetail.getTargetWarehouseId()); // 断言:新增 @@ -102,6 +105,7 @@ public class WmsMovementOrderDetailServiceImplTest extends BaseDbUnitTest { assertNotNull(dbCreateDetail); assertEquals(orderId, dbCreateDetail.getOrderId()); assertEquals(0, new BigDecimal("22.00").compareTo(dbCreateDetail.getQuantity())); + assertEquals(0, new BigDecimal("2200.00").compareTo(dbCreateDetail.getTotalPrice())); // 断言:删除 assertNull(movementOrderDetailMapper.selectById(detail02.getId())); } @@ -132,6 +136,7 @@ public class WmsMovementOrderDetailServiceImplTest extends BaseDbUnitTest { reqVO.setSkuId(skuId); reqVO.setQuantity(new BigDecimal(quantity)); reqVO.setPrice(new BigDecimal("100.00")); + reqVO.setTotalPrice(new BigDecimal(quantity).multiply(new BigDecimal("100.00"))); return reqVO; } @@ -143,6 +148,7 @@ public class WmsMovementOrderDetailServiceImplTest extends BaseDbUnitTest { .targetWarehouseId(200L) .quantity(new BigDecimal(quantity)) .price(new BigDecimal("100.00")) + .totalPrice(new BigDecimal(quantity).multiply(new BigDecimal("100.00"))) .build(); } diff --git a/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderServiceImplTest.java b/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderServiceImplTest.java index fd6392e..a7222f3 100644 --- a/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderServiceImplTest.java +++ b/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderServiceImplTest.java @@ -22,6 +22,7 @@ import org.springframework.test.context.bean.override.mockito.MockitoBean; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Arrays; +import java.util.List; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.MOVEMENT_ORDER_DETAIL_REQUIRED; @@ -57,8 +58,8 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest { public void testCreateMovementOrder_calculateTotal() { // mock 数据 WmsMovementOrderSaveReqVO reqVO = createMovementOrderReqVO(null, 100L, 200L, - createMovementOrderDetailReqVO(null, 3001L, "1.50", "10.00"), - createMovementOrderDetailReqVO(null, 3002L, "2.50", "20.00")); + createMovementOrderDetailReqVO(null, 3001L, "1.50", "10.00", "16.00"), + createMovementOrderDetailReqVO(null, 3002L, "2.50", "20.00", "51.00")); // 调用 Long orderId = movementOrderService.createMovementOrder(reqVO); @@ -67,8 +68,10 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest { WmsMovementOrderDO dbOrder = movementOrderMapper.selectById(orderId); assertNotNull(dbOrder); assertEquals(0, new BigDecimal("4.00").compareTo(dbOrder.getTotalQuantity())); - assertEquals(0, new BigDecimal("65.00").compareTo(dbOrder.getTotalPrice())); - assertEquals(2, movementOrderDetailMapper.selectListByOrderId(orderId).size()); + assertEquals(0, new BigDecimal("67.00").compareTo(dbOrder.getTotalPrice())); + List details = movementOrderDetailMapper.selectListByOrderId(orderId); + assertEquals(2, details.size()); + assertEquals(0, new BigDecimal("16.00").compareTo(details.get(0).getTotalPrice())); } @Test @@ -77,7 +80,7 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest { WmsMovementOrderDO order = createMovementOrder(100L, 200L); movementOrderMapper.insert(order); WmsMovementOrderSaveReqVO reqVO = createMovementOrderReqVO(order.getId(), 100L, 200L, - createMovementOrderDetailReqVO(null, 3001L, "3.00", "30.00")); + createMovementOrderDetailReqVO(null, 3001L, "3.00", "30.00", "88.00")); // 调用 movementOrderService.updateMovementOrder(reqVO); @@ -86,8 +89,10 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest { WmsMovementOrderDO dbOrder = movementOrderMapper.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, movementOrderDetailMapper.selectListByOrderId(order.getId()).size()); + assertEquals(0, new BigDecimal("88.00").compareTo(dbOrder.getTotalPrice())); + List details = movementOrderDetailMapper.selectListByOrderId(order.getId()); + assertEquals(1, details.size()); + assertEquals(0, new BigDecimal("88.00").compareTo(details.get(0).getTotalPrice())); } @Test @@ -119,9 +124,11 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest { assertEquals(skuId, inventoryReqDTO.getItems().get(0).getSkuId()); assertEquals(sourceWarehouseId, inventoryReqDTO.getItems().get(0).getWarehouseId()); assertEquals(0, new BigDecimal("-2.00").compareTo(inventoryReqDTO.getItems().get(0).getQuantity())); + assertEquals(0, new BigDecimal("-40.00").compareTo(inventoryReqDTO.getItems().get(0).getTotalPrice())); assertEquals(skuId, inventoryReqDTO.getItems().get(1).getSkuId()); assertEquals(targetWarehouseId, inventoryReqDTO.getItems().get(1).getWarehouseId()); assertEquals(0, new BigDecimal("2.00").compareTo(inventoryReqDTO.getItems().get(1).getQuantity())); + assertEquals(0, new BigDecimal("40.00").compareTo(inventoryReqDTO.getItems().get(1).getTotalPrice())); } @Test @@ -241,6 +248,7 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest { .targetWarehouseId(targetWarehouseId) .quantity(new BigDecimal("2.00")) .price(new BigDecimal("20.00")) + .totalPrice(new BigDecimal("40.00")) .build(); } @@ -263,11 +271,20 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest { private static WmsMovementOrderDetailSaveReqVO createMovementOrderDetailReqVO(Long id, Long skuId, String quantity, String price) { + return createMovementOrderDetailReqVO(id, skuId, quantity, price, null); + } + + private static WmsMovementOrderDetailSaveReqVO createMovementOrderDetailReqVO(Long id, Long skuId, + String quantity, String price, + String totalPrice) { WmsMovementOrderDetailSaveReqVO reqVO = new WmsMovementOrderDetailSaveReqVO(); reqVO.setId(id); reqVO.setSkuId(skuId); reqVO.setQuantity(new BigDecimal(quantity)); reqVO.setPrice(new BigDecimal(price)); + if (totalPrice != null) { + reqVO.setTotalPrice(new BigDecimal(totalPrice)); + } return reqVO; } 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 538be96..e8d93aa 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 @@ -50,6 +50,8 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest { assertEquals(2, details.size()); assertEquals(orderId, details.get(0).getOrderId()); assertEquals(orderId, details.get(1).getOrderId()); + assertEquals(0, new BigDecimal("100.00").compareTo(details.get(0).getTotalPrice())); + assertEquals(0, new BigDecimal("200.00").compareTo(details.get(1).getTotalPrice())); } @Test @@ -89,6 +91,7 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest { assertEquals(orderId, dbUpdateDetail.getOrderId()); assertEquals(2001L, dbUpdateDetail.getSkuId()); assertEquals(0, new BigDecimal("11.00").compareTo(dbUpdateDetail.getQuantity())); + assertEquals(0, new BigDecimal("1100.00").compareTo(dbUpdateDetail.getTotalPrice())); // 断言:新增 List details = receiptOrderDetailMapper.selectListByOrderId(orderId); assertEquals(2, details.size()); @@ -98,6 +101,7 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest { assertNotNull(dbCreateDetail); assertEquals(orderId, dbCreateDetail.getOrderId()); assertEquals(0, new BigDecimal("22.00").compareTo(dbCreateDetail.getQuantity())); + assertEquals(0, new BigDecimal("2200.00").compareTo(dbCreateDetail.getTotalPrice())); // 断言:删除 assertNull(receiptOrderDetailMapper.selectById(detail02.getId())); } @@ -127,6 +131,7 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest { reqVO.setSkuId(skuId); reqVO.setQuantity(new BigDecimal(quantity)); reqVO.setPrice(new BigDecimal("100.00")); + reqVO.setTotalPrice(new BigDecimal(quantity).multiply(new BigDecimal("100.00"))); return reqVO; } @@ -137,6 +142,7 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest { .warehouseId(100L) .quantity(new BigDecimal(quantity)) .price(new BigDecimal("100.00")) + .totalPrice(new BigDecimal(quantity).multiply(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 d6e48b9..36f029c 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 @@ -24,6 +24,7 @@ import org.springframework.test.context.bean.override.mockito.MockitoBean; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Arrays; +import java.util.List; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.RECEIPT_ORDER_DETAIL_REQUIRED; @@ -60,8 +61,8 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { public void testCreateReceiptOrder_calculateTotal() { // mock 数据 WmsReceiptOrderSaveReqVO reqVO = createReceiptOrderSaveReqVO(null, - createReceiptOrderDetailReqVO(null, 2001L, "1.50", "10.00"), - createReceiptOrderDetailReqVO(null, 2002L, "2.50", "20.00")); + createReceiptOrderDetailReqVO(null, 2001L, "1.50", "10.00", "16.00"), + createReceiptOrderDetailReqVO(null, 2002L, "2.50", "20.00", "51.00")); // 调用 Long orderId = receiptOrderService.createReceiptOrder(reqVO); @@ -70,8 +71,10 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { 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()); + assertEquals(0, new BigDecimal("67.00").compareTo(dbOrder.getTotalPrice())); + List details = receiptOrderDetailMapper.selectListByOrderId(orderId); + assertEquals(2, details.size()); + assertEquals(0, new BigDecimal("16.00").compareTo(details.get(0).getTotalPrice())); } @Test @@ -80,7 +83,7 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { WmsReceiptOrderDO order = createReceiptOrder(100L); receiptOrderMapper.insert(order); WmsReceiptOrderSaveReqVO reqVO = createReceiptOrderSaveReqVO(order.getId(), - createReceiptOrderDetailReqVO(null, 2001L, "3.00", "30.00")); + createReceiptOrderDetailReqVO(null, 2001L, "3.00", "30.00", "88.00")); // 调用 receiptOrderService.updateReceiptOrder(reqVO); @@ -89,8 +92,10 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { 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()); + assertEquals(0, new BigDecimal("88.00").compareTo(dbOrder.getTotalPrice())); + List details = receiptOrderDetailMapper.selectListByOrderId(order.getId()); + assertEquals(1, details.size()); + assertEquals(0, new BigDecimal("88.00").compareTo(details.get(0).getTotalPrice())); } @Test @@ -120,6 +125,7 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { assertEquals(skuId, inventoryReqDTO.getItems().get(0).getSkuId()); assertEquals(warehouseId, inventoryReqDTO.getItems().get(0).getWarehouseId()); assertEquals(0, new BigDecimal("2.00").compareTo(inventoryReqDTO.getItems().get(0).getQuantity())); + assertEquals(0, new BigDecimal("40.00").compareTo(inventoryReqDTO.getItems().get(0).getTotalPrice())); } @Test @@ -234,11 +240,20 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { private static WmsReceiptOrderDetailSaveReqVO createReceiptOrderDetailReqVO(Long id, Long skuId, String quantity, String price) { + return createReceiptOrderDetailReqVO(id, skuId, quantity, price, null); + } + + private static WmsReceiptOrderDetailSaveReqVO createReceiptOrderDetailReqVO(Long id, Long skuId, + String quantity, String price, + String totalPrice) { WmsReceiptOrderDetailSaveReqVO reqVO = new WmsReceiptOrderDetailSaveReqVO(); reqVO.setId(id); reqVO.setSkuId(skuId); reqVO.setQuantity(new BigDecimal(quantity)); reqVO.setPrice(new BigDecimal(price)); + if (totalPrice != null) { + reqVO.setTotalPrice(new BigDecimal(totalPrice)); + } return reqVO; } @@ -249,6 +264,7 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { .warehouseId(warehouseId) .quantity(new BigDecimal("2.00")) .price(new BigDecimal("20.00")) + .totalPrice(new BigDecimal("40.00")) .build(); } diff --git a/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderDetailServiceImplTest.java b/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderDetailServiceImplTest.java index e7aac9a..2ea341c 100644 --- a/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderDetailServiceImplTest.java +++ b/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderDetailServiceImplTest.java @@ -51,6 +51,8 @@ public class WmsShipmentOrderDetailServiceImplTest extends BaseDbUnitTest { assertEquals(orderId, details.get(0).getOrderId()); assertEquals(orderId, details.get(1).getOrderId()); assertEquals(100L, details.get(0).getWarehouseId()); + assertEquals(0, new BigDecimal("100.00").compareTo(details.get(0).getTotalPrice())); + assertEquals(0, new BigDecimal("200.00").compareTo(details.get(1).getTotalPrice())); } @Test @@ -90,6 +92,7 @@ public class WmsShipmentOrderDetailServiceImplTest extends BaseDbUnitTest { assertEquals(orderId, dbUpdateDetail.getOrderId()); assertEquals(2001L, dbUpdateDetail.getSkuId()); assertEquals(0, new BigDecimal("11.00").compareTo(dbUpdateDetail.getQuantity())); + assertEquals(0, new BigDecimal("1100.00").compareTo(dbUpdateDetail.getTotalPrice())); // 断言:新增 List details = shipmentOrderDetailMapper.selectListByOrderId(orderId); assertEquals(2, details.size()); @@ -99,6 +102,7 @@ public class WmsShipmentOrderDetailServiceImplTest extends BaseDbUnitTest { assertNotNull(dbCreateDetail); assertEquals(orderId, dbCreateDetail.getOrderId()); assertEquals(0, new BigDecimal("22.00").compareTo(dbCreateDetail.getQuantity())); + assertEquals(0, new BigDecimal("2200.00").compareTo(dbCreateDetail.getTotalPrice())); // 断言:删除 assertNull(shipmentOrderDetailMapper.selectById(detail02.getId())); } @@ -128,6 +132,7 @@ public class WmsShipmentOrderDetailServiceImplTest extends BaseDbUnitTest { reqVO.setSkuId(skuId); reqVO.setQuantity(new BigDecimal(quantity)); reqVO.setPrice(new BigDecimal("100.00")); + reqVO.setTotalPrice(new BigDecimal(quantity).multiply(new BigDecimal("100.00"))); return reqVO; } @@ -138,6 +143,7 @@ public class WmsShipmentOrderDetailServiceImplTest extends BaseDbUnitTest { .warehouseId(100L) .quantity(new BigDecimal(quantity)) .price(new BigDecimal("100.00")) + .totalPrice(new BigDecimal(quantity).multiply(new BigDecimal("100.00"))) .build(); } diff --git a/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderServiceImplTest.java b/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderServiceImplTest.java index 01baa85..6a4e86c 100644 --- a/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderServiceImplTest.java +++ b/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderServiceImplTest.java @@ -24,6 +24,7 @@ import org.springframework.test.context.bean.override.mockito.MockitoBean; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Arrays; +import java.util.List; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.SHIPMENT_ORDER_DETAIL_REQUIRED; @@ -60,8 +61,8 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest { public void testCreateShipmentOrder_calculateTotal() { // mock 数据 WmsShipmentOrderSaveReqVO reqVO = createShipmentOrderSaveReqVO(null, - createShipmentOrderDetailReqVO(null, 2001L, "1.50", "10.00"), - createShipmentOrderDetailReqVO(null, 2002L, "2.50", "20.00")); + createShipmentOrderDetailReqVO(null, 2001L, "1.50", "10.00", "16.00"), + createShipmentOrderDetailReqVO(null, 2002L, "2.50", "20.00", "51.00")); // 调用 Long orderId = shipmentOrderService.createShipmentOrder(reqVO); @@ -70,8 +71,10 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest { WmsShipmentOrderDO dbOrder = shipmentOrderMapper.selectById(orderId); assertNotNull(dbOrder); assertEquals(0, new BigDecimal("4.00").compareTo(dbOrder.getTotalQuantity())); - assertEquals(0, new BigDecimal("65.00").compareTo(dbOrder.getTotalPrice())); - assertEquals(2, shipmentOrderDetailMapper.selectListByOrderId(orderId).size()); + assertEquals(0, new BigDecimal("67.00").compareTo(dbOrder.getTotalPrice())); + List details = shipmentOrderDetailMapper.selectListByOrderId(orderId); + assertEquals(2, details.size()); + assertEquals(0, new BigDecimal("16.00").compareTo(details.get(0).getTotalPrice())); } @Test @@ -80,7 +83,7 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest { WmsShipmentOrderDO order = createShipmentOrder(100L); shipmentOrderMapper.insert(order); WmsShipmentOrderSaveReqVO reqVO = createShipmentOrderSaveReqVO(order.getId(), - createShipmentOrderDetailReqVO(null, 2001L, "3.00", "30.00")); + createShipmentOrderDetailReqVO(null, 2001L, "3.00", "30.00", "88.00")); // 调用 shipmentOrderService.updateShipmentOrder(reqVO); @@ -89,8 +92,10 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest { WmsShipmentOrderDO dbOrder = shipmentOrderMapper.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, shipmentOrderDetailMapper.selectListByOrderId(order.getId()).size()); + assertEquals(0, new BigDecimal("88.00").compareTo(dbOrder.getTotalPrice())); + List details = shipmentOrderDetailMapper.selectListByOrderId(order.getId()); + assertEquals(1, details.size()); + assertEquals(0, new BigDecimal("88.00").compareTo(details.get(0).getTotalPrice())); } @Test @@ -120,6 +125,7 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest { assertEquals(skuId, inventoryReqDTO.getItems().get(0).getSkuId()); assertEquals(warehouseId, inventoryReqDTO.getItems().get(0).getWarehouseId()); assertEquals(0, new BigDecimal("-2.00").compareTo(inventoryReqDTO.getItems().get(0).getQuantity())); + assertEquals(0, new BigDecimal("-40.00").compareTo(inventoryReqDTO.getItems().get(0).getTotalPrice())); } @Test @@ -234,11 +240,20 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest { private static WmsShipmentOrderDetailSaveReqVO createShipmentOrderDetailReqVO(Long id, Long skuId, String quantity, String price) { + return createShipmentOrderDetailReqVO(id, skuId, quantity, price, null); + } + + private static WmsShipmentOrderDetailSaveReqVO createShipmentOrderDetailReqVO(Long id, Long skuId, + String quantity, String price, + String totalPrice) { WmsShipmentOrderDetailSaveReqVO reqVO = new WmsShipmentOrderDetailSaveReqVO(); reqVO.setId(id); reqVO.setSkuId(skuId); reqVO.setQuantity(new BigDecimal(quantity)); reqVO.setPrice(new BigDecimal(price)); + if (totalPrice != null) { + reqVO.setTotalPrice(new BigDecimal(totalPrice)); + } return reqVO; } @@ -249,6 +264,7 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest { .warehouseId(warehouseId) .quantity(new BigDecimal("2.00")) .price(new BigDecimal("20.00")) + .totalPrice(new BigDecimal("40.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 8742319..fa08fe5 100644 --- a/yudao-module-wms/src/test/resources/sql/create_tables.sql +++ b/yudao-module-wms/src/test/resources/sql/create_tables.sql @@ -128,6 +128,7 @@ CREATE TABLE IF NOT EXISTS "wms_inventory_history" ( "before_quantity" decimal(24, 6) DEFAULT NULL, "after_quantity" decimal(24, 6) DEFAULT NULL, "price" decimal(24, 6) DEFAULT NULL, + "total_price" decimal(24, 6) DEFAULT NULL, "remark" varchar(255) DEFAULT NULL, "order_id" bigint DEFAULT NULL, "order_no" varchar(64) DEFAULT NULL, @@ -169,6 +170,7 @@ CREATE TABLE IF NOT EXISTS "wms_receipt_order_detail" ( "warehouse_id" bigint NOT NULL, "quantity" decimal(20, 2) NOT NULL DEFAULT '0', "price" 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 '', @@ -206,6 +208,7 @@ CREATE TABLE IF NOT EXISTS "wms_shipment_order_detail" ( "warehouse_id" bigint NOT NULL, "quantity" decimal(20, 2) NOT NULL DEFAULT '0', "price" 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 '', @@ -242,6 +245,7 @@ CREATE TABLE IF NOT EXISTS "wms_movement_order_detail" ( "target_warehouse_id" bigint NOT NULL, "quantity" decimal(20, 2) NOT NULL DEFAULT '0', "price" 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 '',