diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/inventory/vo/history/WmsInventoryHistoryPageReqVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/inventory/vo/history/WmsInventoryHistoryPageReqVO.java index 3dd8fbd..23b42bc 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/inventory/vo/history/WmsInventoryHistoryPageReqVO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/inventory/vo/history/WmsInventoryHistoryPageReqVO.java @@ -35,10 +35,10 @@ public class WmsInventoryHistoryPageReqVO extends PageParam { @Schema(description = "仓库编号", example = "2048") private Long warehouseId; - @Schema(description = "操作单号", example = "RK202605110001") + @Schema(description = "单据号", example = "RK202605110001") private String orderNo; - @Schema(description = "操作类型", example = "1") + @Schema(description = "单据类型", example = "1") private Integer orderType; @Schema(description = "操作时间") 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 0613722..b0b7928 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 @@ -45,11 +45,11 @@ public class WmsInventoryHistoryRespVO { @Schema(description = "备注", example = "备注") private String remark; - @Schema(description = "操作单编号", example = "1024") + @Schema(description = "单据编号", example = "1024") private Long orderId; - @Schema(description = "操作单号", example = "RK202605110001") + @Schema(description = "单据号", example = "RK202605110001") private String orderNo; - @Schema(description = "操作类型", example = "1") + @Schema(description = "单据类型", example = "1") private Integer orderType; @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/check/WmsCheckOrderController.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/WmsCheckOrderController.java index 9ebdf7f..9c0cd09 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/WmsCheckOrderController.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/WmsCheckOrderController.java @@ -36,7 +36,6 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.io.IOException; -import java.math.BigDecimal; import java.util.Collections; import java.util.List; import java.util.Map; @@ -193,11 +192,6 @@ public class WmsCheckOrderController { .setItemName(item.getName()).setUnit(item.getUnit())); }); MapUtils.findAndThen(warehouseMap, vo.getWarehouseId(), warehouse -> vo.setWarehouseName(warehouse.getName())); - if (vo.getQuantity() != null && vo.getCheckQuantity() != null) { - vo.setDifferenceQuantity(vo.getCheckQuantity().subtract(vo.getQuantity())); - } else { - vo.setDifferenceQuantity(BigDecimal.ZERO); - } }); } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/WmsCheckOrderDetailController.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/WmsCheckOrderDetailController.java index 374cf40..2519825 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/WmsCheckOrderDetailController.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/WmsCheckOrderDetailController.java @@ -24,7 +24,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import java.math.BigDecimal; import java.util.Collections; import java.util.List; import java.util.Map; @@ -76,11 +75,6 @@ public class WmsCheckOrderDetailController { .setItemName(item.getName()).setUnit(item.getUnit())); }); MapUtils.findAndThen(warehouseMap, vo.getWarehouseId(), warehouse -> vo.setWarehouseName(warehouse.getName())); - if (vo.getQuantity() != null && vo.getCheckQuantity() != null) { - vo.setDifferenceQuantity(vo.getCheckQuantity().subtract(vo.getQuantity())); - } else { - vo.setDifferenceQuantity(BigDecimal.ZERO); - } }); } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/vo/detail/WmsCheckOrderDetailRespVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/vo/detail/WmsCheckOrderDetailRespVO.java index a58dfce..399caa3 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/vo/detail/WmsCheckOrderDetailRespVO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/vo/detail/WmsCheckOrderDetailRespVO.java @@ -55,11 +55,8 @@ public class WmsCheckOrderDetailRespVO { @Schema(description = "实盘数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "98.00") private BigDecimal checkQuantity; - @Schema(description = "盈亏数量", example = "-2.00") - private BigDecimal differenceQuantity; - - @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/check/vo/detail/WmsCheckOrderDetailSaveReqVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/vo/detail/WmsCheckOrderDetailSaveReqVO.java index 22c5082..709ddba 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/vo/detail/WmsCheckOrderDetailSaveReqVO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/vo/detail/WmsCheckOrderDetailSaveReqVO.java @@ -35,8 +35,8 @@ public class WmsCheckOrderDetailSaveReqVO { @DecimalMin(value = "0", message = "实盘数量不能小于 0") private BigDecimal checkQuantity; - @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/check/vo/order/WmsCheckOrderPageReqVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/vo/order/WmsCheckOrderPageReqVO.java index 5f8d062..2182fc6 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/vo/order/WmsCheckOrderPageReqVO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/vo/order/WmsCheckOrderPageReqVO.java @@ -41,10 +41,16 @@ public class WmsCheckOrderPageReqVO 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 = "1.00") + private BigDecimal actualPriceMin; + + @Schema(description = "最大实际金额", example = "1000.00") + private BigDecimal actualPriceMax; @Schema(description = "创建用户", example = "1") private String creator; diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/vo/order/WmsCheckOrderRespVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/vo/order/WmsCheckOrderRespVO.java index 7d0d549..962de82 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/vo/order/WmsCheckOrderRespVO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/vo/order/WmsCheckOrderRespVO.java @@ -48,9 +48,13 @@ public class WmsCheckOrderRespVO { @ExcelProperty("盈亏数量") private BigDecimal totalQuantity; - @Schema(description = "总金额", example = "1000.00") + @Schema(description = "总金额(账面金额)", example = "1000.00") @ExcelProperty("总金额") - private BigDecimal totalAmount; + private BigDecimal totalPrice; + + @Schema(description = "实际金额", example = "980.00") + @ExcelProperty("实际金额") + private BigDecimal actualPrice; @Schema(description = "盘库明细") private List details; diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/vo/order/WmsCheckOrderSaveReqVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/vo/order/WmsCheckOrderSaveReqVO.java index 43488a5..21660ce 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/vo/order/WmsCheckOrderSaveReqVO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/check/vo/order/WmsCheckOrderSaveReqVO.java @@ -8,7 +8,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; @@ -36,14 +35,6 @@ public class WmsCheckOrderSaveReqVO { @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 857f1b7..56b2137 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 @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.wms.dal.dataobject.inventory; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemSkuDO; import cn.iocoder.yudao.module.wms.dal.dataobject.md.warehouse.WmsWarehouseDO; -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum; +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -73,17 +73,17 @@ public class WmsInventoryHistoryDO extends BaseDO { // ========= 来源单据相关字段 ========= /** - * 操作单编号 + * 单据编号 */ private Long orderId; /** - * 操作单号 + * 单据号 */ private String orderNo; /** - * 操作类型 + * 单据类型 * - * 枚举 {@link WmsInventoryOrderTypeEnum#getType()} + * 枚举 {@link WmsOrderTypeEnum#getType()} */ private Integer orderType; 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 d14fe7a..b09402f 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 @@ -66,8 +66,12 @@ public class WmsCheckOrderDO extends BaseDO { */ private BigDecimal totalQuantity; /** - * 总金额 + * 总金额(账面金额) */ - private BigDecimal totalAmount; + 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 3fc9160..b0872a9 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 @@ -78,8 +78,8 @@ public class WmsCheckOrderDetailDO extends BaseDO { */ private BigDecimal checkQuantity; /** - * 金额(小计、非单价) + * 单价 */ - private BigDecimal amount; + private BigDecimal price; } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/order/check/WmsCheckOrderMapper.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/order/check/WmsCheckOrderMapper.java index ea8d88a..723269c 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/order/check/WmsCheckOrderMapper.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/order/check/WmsCheckOrderMapper.java @@ -23,8 +23,10 @@ public interface WmsCheckOrderMapper extends BaseMapperX { .betweenIfPresent(WmsCheckOrderDO::getOrderTime, reqVO.getOrderTime()) .geIfPresent(WmsCheckOrderDO::getTotalQuantity, reqVO.getTotalQuantityMin()) .leIfPresent(WmsCheckOrderDO::getTotalQuantity, reqVO.getTotalQuantityMax()) - .geIfPresent(WmsCheckOrderDO::getTotalAmount, reqVO.getTotalAmountMin()) - .leIfPresent(WmsCheckOrderDO::getTotalAmount, reqVO.getTotalAmountMax()) + .geIfPresent(WmsCheckOrderDO::getTotalPrice, reqVO.getTotalPriceMin()) + .leIfPresent(WmsCheckOrderDO::getTotalPrice, reqVO.getTotalPriceMax()) + .geIfPresent(WmsCheckOrderDO::getActualPrice, reqVO.getActualPriceMin()) + .leIfPresent(WmsCheckOrderDO::getActualPrice, reqVO.getActualPriceMax()) .eqIfPresent(WmsCheckOrderDO::getCreator, reqVO.getCreator()) .eqIfPresent(WmsCheckOrderDO::getUpdater, reqVO.getUpdater()) .betweenIfPresent(WmsCheckOrderDO::getCreateTime, reqVO.getCreateTime()) diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/DictTypeConstants.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/DictTypeConstants.java index 973f8cb..e854bc5 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/DictTypeConstants.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/DictTypeConstants.java @@ -9,8 +9,8 @@ public interface DictTypeConstants { String MERCHANT_TYPE = "merchant_type"; String ORDER_STATUS = "wms_order_status"; + String ORDER_TYPE = "wms_order_type"; String RECEIPT_ORDER_TYPE = "wms_receipt_order_type"; String SHIPMENT_ORDER_TYPE = "wms_shipment_order_type"; - String INVENTORY_HISTORY_TYPE = "wms_inventory_history_type"; } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/order/WmsOrderTypeConstants.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/order/WmsOrderTypeConstants.java index 5738ba5..3f9017d 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/order/WmsOrderTypeConstants.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/order/WmsOrderTypeConstants.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.wms.enums.order; /** - * WMS 单据类型常量 + * WMS 单据业务类型常量 * * 集中管理业务类型枚举的编号,按业务域分段。 * 各枚举类引用此处常量,避免硬编码数字。(也避免冲突!!!) @@ -12,13 +12,6 @@ public final class WmsOrderTypeConstants { private WmsOrderTypeConstants() {} - // ========== 单据名称 ========== - - public static final String ORDER_NAME_RECEIPT = "入库单"; - public static final String ORDER_NAME_SHIPMENT = "出库单"; - public static final String ORDER_NAME_MOVEMENT = "移库单"; - public static final String ORDER_NAME_CHECK = "盘库单"; - // ========== 入库单类型 [100, 200) ========== public static final int RECEIPT_PRODUCTION = 100; // 生产入库:WmsReceiptOrderDO diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/inventory/WmsInventoryOrderTypeEnum.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/order/WmsOrderTypeEnum.java index cbfb007..701f713 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/inventory/WmsInventoryOrderTypeEnum.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/order/WmsOrderTypeEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.wms.enums.inventory; +package cn.iocoder.yudao.module.wms.enums.order; import cn.iocoder.yudao.framework.common.core.ArrayValuable; import lombok.AllArgsConstructor; @@ -7,20 +7,20 @@ import lombok.Getter; import java.util.Arrays; /** - * WMS 库存操作类型枚举 + * WMS 单据类型枚举 * * @author 芋道源码 */ @Getter @AllArgsConstructor -public enum WmsInventoryOrderTypeEnum implements ArrayValuable { +public enum WmsOrderTypeEnum implements ArrayValuable { - RECEIPT(1, "入库"), - SHIPMENT(2, "出库"), - MOVEMENT(3, "移库"), - CHECK(4, "盘库"); + RECEIPT(1, "入库单"), + SHIPMENT(2, "出库单"), + MOVEMENT(3, "移库单"), + CHECK(4, "盘库单"); - public static final Integer[] ARRAYS = Arrays.stream(values()).map(WmsInventoryOrderTypeEnum::getType).toArray(Integer[]::new); + public static final Integer[] ARRAYS = Arrays.stream(values()).map(WmsOrderTypeEnum::getType).toArray(Integer[]::new); /** * 类型 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 41db54e..ffc4977 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 @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.wms.service.inventory.dto; -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum; +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum; import lombok.Data; import java.math.BigDecimal; @@ -15,17 +15,17 @@ import java.util.List; public class WmsInventoryChangeReqDTO { /** - * 操作单编号 + * 单据编号 */ private Long orderId; /** - * 操作单号 + * 单据号 */ private String orderNo; /** - * 操作类型 + * 单据类型 * - * 枚举 {@link WmsInventoryOrderTypeEnum#getType()} + * 枚举 {@link WmsOrderTypeEnum#getType()} */ private Integer orderType; diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemSkuServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemSkuServiceImpl.java index 8a7fb49..8a8be71 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemSkuServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemSkuServiceImpl.java @@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.wms.controller.admin.md.item.vo.sku.WmsItemSkuSaveReqVO; import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemSkuDO; import cn.iocoder.yudao.module.wms.dal.mysql.md.item.WmsItemSkuMapper; +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum; import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryService; import cn.iocoder.yudao.module.wms.service.order.check.WmsCheckOrderDetailService; import cn.iocoder.yudao.module.wms.service.order.movement.WmsMovementOrderDetailService; @@ -27,7 +28,6 @@ import java.util.Set; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.*; -import static cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeConstants.*; /** * WMS 商品 SKU Service 实现类 @@ -172,16 +172,16 @@ public class WmsItemSkuServiceImpl implements WmsItemSkuService { private void validateItemSkuOrderUnused(WmsItemSkuDO sku) { if (receiptOrderDetailService.getReceiptOrderDetailCountBySkuId(sku.getId()) > 0) { - throw exception(ITEM_SKU_HAS_ORDER, sku.getName(), ORDER_NAME_RECEIPT); + throw exception(ITEM_SKU_HAS_ORDER, sku.getName(), WmsOrderTypeEnum.RECEIPT.getName()); } if (shipmentOrderDetailService.getShipmentOrderDetailCountBySkuId(sku.getId()) > 0) { - throw exception(ITEM_SKU_HAS_ORDER, sku.getName(), ORDER_NAME_SHIPMENT); + throw exception(ITEM_SKU_HAS_ORDER, sku.getName(), WmsOrderTypeEnum.SHIPMENT.getName()); } if (movementOrderDetailService.getMovementOrderDetailCountBySkuId(sku.getId()) > 0) { - throw exception(ITEM_SKU_HAS_ORDER, sku.getName(), ORDER_NAME_MOVEMENT); + throw exception(ITEM_SKU_HAS_ORDER, sku.getName(), WmsOrderTypeEnum.MOVEMENT.getName()); } if (checkOrderDetailService.getCheckOrderDetailCountBySkuId(sku.getId()) > 0) { - throw exception(ITEM_SKU_HAS_ORDER, sku.getName(), ORDER_NAME_CHECK); + throw exception(ITEM_SKU_HAS_ORDER, sku.getName(), WmsOrderTypeEnum.CHECK.getName()); } } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/merchant/WmsMerchantServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/merchant/WmsMerchantServiceImpl.java index 23552fb..58924a8 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/merchant/WmsMerchantServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/merchant/WmsMerchantServiceImpl.java @@ -10,6 +10,7 @@ import cn.iocoder.yudao.module.wms.controller.admin.md.merchant.vo.WmsMerchantSa import cn.iocoder.yudao.module.wms.dal.dataobject.md.merchant.WmsMerchantDO; import cn.iocoder.yudao.module.wms.dal.mysql.md.merchant.WmsMerchantMapper; import cn.iocoder.yudao.module.wms.enums.md.WmsMerchantTypeEnum; +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum; import cn.iocoder.yudao.module.wms.service.order.receipt.WmsReceiptOrderService; import cn.iocoder.yudao.module.wms.service.order.shipment.WmsShipmentOrderService; import jakarta.annotation.Resource; @@ -22,7 +23,6 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.*; -import static cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeConstants.*; /** * WMS 往来企业 Service 实现类 @@ -72,10 +72,10 @@ public class WmsMerchantServiceImpl implements WmsMerchantService { private void validateMerchantUnused(Long id) { if (receiptOrderService.getReceiptOrderCountByMerchantId(id) > 0) { - throw exception(MERCHANT_HAS_ORDER, ORDER_NAME_RECEIPT); + throw exception(MERCHANT_HAS_ORDER, WmsOrderTypeEnum.RECEIPT.getName()); } if (shipmentOrderService.getShipmentOrderCountByMerchantId(id) > 0) { - throw exception(MERCHANT_HAS_ORDER, ORDER_NAME_SHIPMENT); + throw exception(MERCHANT_HAS_ORDER, WmsOrderTypeEnum.SHIPMENT.getName()); } } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/warehouse/WmsWarehouseServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/warehouse/WmsWarehouseServiceImpl.java index 3fac0df..f7ce2ee 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/warehouse/WmsWarehouseServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/warehouse/WmsWarehouseServiceImpl.java @@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.wms.controller.admin.md.warehouse.vo.WmsWarehouse import cn.iocoder.yudao.module.wms.controller.admin.md.warehouse.vo.WmsWarehouseSaveReqVO; import cn.iocoder.yudao.module.wms.dal.dataobject.md.warehouse.WmsWarehouseDO; import cn.iocoder.yudao.module.wms.dal.mysql.md.warehouse.WmsWarehouseMapper; +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum; import cn.iocoder.yudao.module.wms.service.order.check.WmsCheckOrderService; import cn.iocoder.yudao.module.wms.service.order.movement.WmsMovementOrderService; import cn.iocoder.yudao.module.wms.service.order.receipt.WmsReceiptOrderService; @@ -24,7 +25,6 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.*; -import static cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeConstants.*; /** * WMS 仓库 Service 实现类 @@ -114,16 +114,16 @@ public class WmsWarehouseServiceImpl implements WmsWarehouseService { private void validateWarehouseUnused(Long id) { if (receiptOrderService.getReceiptOrderCountByWarehouseId(id) > 0) { - throw exception(WAREHOUSE_HAS_ORDER, ORDER_NAME_RECEIPT); + throw exception(WAREHOUSE_HAS_ORDER, WmsOrderTypeEnum.RECEIPT.getName()); } if (shipmentOrderService.getShipmentOrderCountByWarehouseId(id) > 0) { - throw exception(WAREHOUSE_HAS_ORDER, ORDER_NAME_SHIPMENT); + throw exception(WAREHOUSE_HAS_ORDER, WmsOrderTypeEnum.SHIPMENT.getName()); } if (movementOrderService.getMovementOrderCountByWarehouseId(id) > 0) { - throw exception(WAREHOUSE_HAS_ORDER, ORDER_NAME_MOVEMENT); + throw exception(WAREHOUSE_HAS_ORDER, WmsOrderTypeEnum.MOVEMENT.getName()); } if (checkOrderService.getCheckOrderCountByWarehouseId(id) > 0) { - throw exception(WAREHOUSE_HAS_ORDER, ORDER_NAME_CHECK); + throw exception(WAREHOUSE_HAS_ORDER, WmsOrderTypeEnum.CHECK.getName()); } } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/check/WmsCheckOrderServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/check/WmsCheckOrderServiceImpl.java index e676f41..b4a05aa 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/check/WmsCheckOrderServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/check/WmsCheckOrderServiceImpl.java @@ -4,12 +4,13 @@ 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.check.vo.detail.WmsCheckOrderDetailSaveReqVO; import cn.iocoder.yudao.module.wms.controller.admin.order.check.vo.order.WmsCheckOrderPageReqVO; import cn.iocoder.yudao.module.wms.controller.admin.order.check.vo.order.WmsCheckOrderSaveReqVO; import cn.iocoder.yudao.module.wms.dal.dataobject.order.check.WmsCheckOrderDO; import cn.iocoder.yudao.module.wms.dal.dataobject.order.check.WmsCheckOrderDetailDO; import cn.iocoder.yudao.module.wms.dal.mysql.order.check.WmsCheckOrderMapper; -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum; +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum; import cn.iocoder.yudao.module.wms.enums.order.WmsOrderStatusEnum; import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryService; import cn.iocoder.yudao.module.wms.service.inventory.dto.WmsInventoryChangeReqDTO; @@ -53,6 +54,7 @@ public class WmsCheckOrderServiceImpl implements WmsCheckOrderService { // 2.1 插入盘库单 WmsCheckOrderDO order = BeanUtils.toBean(createReqVO, WmsCheckOrderDO.class); order.setStatus(WmsOrderStatusEnum.PREPARE.getStatus()); + fillCheckOrderTotal(order, createReqVO); checkOrderMapper.insert(order); // 2.2 插入盘库单明细 checkOrderDetailService.createCheckOrderDetailList(order.getId(), createReqVO); @@ -69,6 +71,7 @@ public class WmsCheckOrderServiceImpl implements WmsCheckOrderService { // 2.1 更新盘库单 WmsCheckOrderDO updateObj = BeanUtils.toBean(updateReqVO, WmsCheckOrderDO.class) .setStatus(WmsOrderStatusEnum.PREPARE.getStatus()); + fillCheckOrderTotal(updateObj, updateReqVO); checkOrderMapper.updateById(updateObj); // 2.2 更新盘库单明细 checkOrderDetailService.updateCheckOrderDetailList(updateReqVO.getId(), updateReqVO); @@ -149,6 +152,35 @@ public class WmsCheckOrderServiceImpl implements WmsCheckOrderService { } } + private void fillCheckOrderTotal(WmsCheckOrderDO order, WmsCheckOrderSaveReqVO reqVO) { + BigDecimal totalQuantity = BigDecimal.ZERO; + BigDecimal totalPrice = BigDecimal.ZERO; + BigDecimal actualPrice = BigDecimal.ZERO; + if (CollUtil.isNotEmpty(reqVO.getDetails())) { + for (WmsCheckOrderDetailSaveReqVO detail : reqVO.getDetails()) { + BigDecimal differenceQuantity = calculateDifferenceQuantity(detail.getQuantity(), detail.getCheckQuantity()); + totalQuantity = totalQuantity.add(differenceQuantity); + if (detail.getPrice() == null) { + continue; + } + if (detail.getQuantity() != null) { + totalPrice = totalPrice.add(detail.getQuantity().multiply(detail.getPrice())); + } + if (detail.getCheckQuantity() != null) { + actualPrice = actualPrice.add(detail.getCheckQuantity().multiply(detail.getPrice())); + } + } + } + order.setTotalQuantity(totalQuantity).setTotalPrice(totalPrice).setActualPrice(actualPrice); + } + + private BigDecimal calculateDifferenceQuantity(BigDecimal quantity, BigDecimal checkQuantity) { + if (quantity == null || checkQuantity == null) { + return BigDecimal.ZERO; + } + return checkQuantity.subtract(quantity); + } + private WmsCheckOrderDO validateCheckOrderExists(Long id) { WmsCheckOrderDO order = id == null ? null : checkOrderMapper.selectById(id); if (order == null) { @@ -180,7 +212,7 @@ public class WmsCheckOrderServiceImpl implements WmsCheckOrderService { private void changeInventory(WmsCheckOrderDO order, List details) { List items = new ArrayList<>(details.size()); for (WmsCheckOrderDetailDO detail : details) { - BigDecimal differenceQuantity = detail.getCheckQuantity().subtract(detail.getQuantity()); + BigDecimal differenceQuantity = calculateDifferenceQuantity(detail.getQuantity(), detail.getCheckQuantity()); if (differenceQuantity.compareTo(BigDecimal.ZERO) == 0) { continue; } @@ -193,7 +225,7 @@ public class WmsCheckOrderServiceImpl implements WmsCheckOrderService { } inventoryService.changeInventory(new WmsInventoryChangeReqDTO() .setOrderId(order.getId()).setOrderNo(order.getNo()) - .setOrderType(WmsInventoryOrderTypeEnum.CHECK.getType()).setItems(items)); + .setOrderType(WmsOrderTypeEnum.CHECK.getType()).setItems(items)); } } 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 05652ae..a02de22 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 @@ -10,7 +10,7 @@ import cn.iocoder.yudao.module.wms.controller.admin.order.movement.vo.order.WmsM import cn.iocoder.yudao.module.wms.dal.dataobject.order.movement.WmsMovementOrderDO; import cn.iocoder.yudao.module.wms.dal.dataobject.order.movement.WmsMovementOrderDetailDO; import cn.iocoder.yudao.module.wms.dal.mysql.order.movement.WmsMovementOrderMapper; -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum; +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum; import cn.iocoder.yudao.module.wms.enums.order.WmsOrderStatusEnum; import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryService; import cn.iocoder.yudao.module.wms.service.inventory.dto.WmsInventoryChangeReqDTO; @@ -211,7 +211,7 @@ public class WmsMovementOrderServiceImpl implements WmsMovementOrderService { } inventoryService.changeInventory(new WmsInventoryChangeReqDTO() .setOrderId(order.getId()).setOrderNo(order.getNo()) - .setOrderType(WmsInventoryOrderTypeEnum.MOVEMENT.getType()).setItems(items)); + .setOrderType(WmsOrderTypeEnum.MOVEMENT.getType()).setItems(items)); } } 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 6455c44..bcb1df0 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 @@ -10,7 +10,7 @@ import cn.iocoder.yudao.module.wms.controller.admin.order.receipt.vo.order.WmsRe 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.WmsReceiptOrderMapper; -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum; +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum; import cn.iocoder.yudao.module.wms.enums.order.WmsOrderStatusEnum; import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryService; import cn.iocoder.yudao.module.wms.service.inventory.dto.WmsInventoryChangeReqDTO; @@ -215,7 +215,7 @@ public class WmsReceiptOrderServiceImpl implements WmsReceiptOrderService { detail -> BeanUtils.toBean(detail, WmsInventoryChangeReqDTO.Item.class)); inventoryService.changeInventory(new WmsInventoryChangeReqDTO() .setOrderId(order.getId()).setOrderNo(order.getNo()) - .setOrderType(WmsInventoryOrderTypeEnum.RECEIPT.getType()).setItems(items)); + .setOrderType(WmsOrderTypeEnum.RECEIPT.getType()).setItems(items)); } } 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 2580cba..ba016e9 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 @@ -10,7 +10,7 @@ import cn.iocoder.yudao.module.wms.controller.admin.order.shipment.vo.order.WmsS import cn.iocoder.yudao.module.wms.dal.dataobject.order.shipment.WmsShipmentOrderDO; import cn.iocoder.yudao.module.wms.dal.dataobject.order.shipment.WmsShipmentOrderDetailDO; import cn.iocoder.yudao.module.wms.dal.mysql.order.shipment.WmsShipmentOrderMapper; -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum; +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum; import cn.iocoder.yudao.module.wms.enums.order.WmsOrderStatusEnum; import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryService; import cn.iocoder.yudao.module.wms.service.inventory.dto.WmsInventoryChangeReqDTO; @@ -214,7 +214,7 @@ public class WmsShipmentOrderServiceImpl implements WmsShipmentOrderService { .setQuantity(detail.getQuantity().multiply(BigDecimal.valueOf(-1L)))); inventoryService.changeInventory(new WmsInventoryChangeReqDTO() .setOrderId(order.getId()).setOrderNo(order.getNo()) - .setOrderType(WmsInventoryOrderTypeEnum.SHIPMENT.getType()).setItems(items)); + .setOrderType(WmsOrderTypeEnum.SHIPMENT.getType()).setItems(items)); } } 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 bb06a72..a0ab5f7 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 @@ -11,7 +11,7 @@ import cn.iocoder.yudao.module.wms.dal.mysql.inventory.WmsInventoryHistoryMapper import cn.iocoder.yudao.module.wms.dal.mysql.inventory.WmsInventoryMapper; import cn.iocoder.yudao.module.wms.dal.mysql.md.item.WmsItemMapper; import cn.iocoder.yudao.module.wms.dal.mysql.md.item.WmsItemSkuMapper; -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum; +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum; import cn.iocoder.yudao.module.wms.service.inventory.dto.WmsInventoryChangeReqDTO; import cn.iocoder.yudao.module.wms.service.md.item.WmsItemService; import cn.iocoder.yudao.module.wms.service.md.item.WmsItemSkuService; @@ -406,7 +406,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { return new WmsInventoryChangeReqDTO() .setOrderId(1L) .setOrderNo("RK202605120001") - .setOrderType(WmsInventoryOrderTypeEnum.RECEIPT.getType()) + .setOrderType(WmsOrderTypeEnum.RECEIPT.getType()) .setItems(Collections.singletonList(new WmsInventoryChangeReqDTO.Item() .setSkuId(skuId) .setWarehouseId(warehouseId) diff --git a/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/check/WmsCheckOrderDetailServiceImplTest.java b/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/check/WmsCheckOrderDetailServiceImplTest.java index 6127b93..fe3aae6 100644 --- a/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/check/WmsCheckOrderDetailServiceImplTest.java +++ b/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/check/WmsCheckOrderDetailServiceImplTest.java @@ -91,6 +91,7 @@ public class WmsCheckOrderDetailServiceImplTest extends BaseDbUnitTest { assertEquals(2001L, dbUpdateDetail.getSkuId()); assertEquals(0, new BigDecimal("11.00").compareTo(dbUpdateDetail.getQuantity())); assertEquals(0, new BigDecimal("8.00").compareTo(dbUpdateDetail.getCheckQuantity())); + assertEquals(0, new BigDecimal("100.00").compareTo(dbUpdateDetail.getPrice())); assertEquals(100L, dbUpdateDetail.getWarehouseId()); // 断言:新增 List details = checkOrderDetailMapper.selectListByOrderId(orderId); @@ -133,7 +134,7 @@ public class WmsCheckOrderDetailServiceImplTest extends BaseDbUnitTest { reqVO.setInventoryId(300L); reqVO.setQuantity(new BigDecimal(quantity)); reqVO.setCheckQuantity(new BigDecimal(checkQuantity)); - reqVO.setAmount(new BigDecimal("100.00")); + reqVO.setPrice(new BigDecimal("100.00")); return reqVO; } @@ -146,7 +147,7 @@ public class WmsCheckOrderDetailServiceImplTest extends BaseDbUnitTest { .inventoryId(300L) .quantity(new BigDecimal(quantity)) .checkQuantity(new BigDecimal(checkQuantity)) - .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/check/WmsCheckOrderServiceImplTest.java b/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/check/WmsCheckOrderServiceImplTest.java index 4a8e70d..8a4a6ad 100644 --- a/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/check/WmsCheckOrderServiceImplTest.java +++ b/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/check/WmsCheckOrderServiceImplTest.java @@ -1,11 +1,13 @@ package cn.iocoder.yudao.module.wms.service.order.check; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; +import cn.iocoder.yudao.module.wms.controller.admin.order.check.vo.detail.WmsCheckOrderDetailSaveReqVO; +import cn.iocoder.yudao.module.wms.controller.admin.order.check.vo.order.WmsCheckOrderSaveReqVO; import cn.iocoder.yudao.module.wms.dal.dataobject.order.check.WmsCheckOrderDO; import cn.iocoder.yudao.module.wms.dal.dataobject.order.check.WmsCheckOrderDetailDO; import cn.iocoder.yudao.module.wms.dal.mysql.order.check.WmsCheckOrderDetailMapper; import cn.iocoder.yudao.module.wms.dal.mysql.order.check.WmsCheckOrderMapper; -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum; +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum; import cn.iocoder.yudao.module.wms.enums.order.WmsOrderStatusEnum; import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryService; import cn.iocoder.yudao.module.wms.service.inventory.dto.WmsInventoryChangeReqDTO; @@ -19,6 +21,8 @@ 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.CHECK_ORDER_DETAIL_REQUIRED; @@ -49,6 +53,54 @@ public class WmsCheckOrderServiceImplTest extends BaseDbUnitTest { private WmsInventoryService inventoryService; @Test + public void testCreateCheckOrder_calculateTotals() { + // mock 数据 + WmsCheckOrderSaveReqVO reqVO = createCheckOrderReqVO(100L, + createCheckOrderDetailReqVO(null, 200L, "10.00", "7.00", "5.00"), + createCheckOrderDetailReqVO(null, 201L, "20.00", "25.00", "2.00")); + + // 调用 + Long orderId = checkOrderService.createCheckOrder(reqVO); + + // 断言:盘库单汇总由后端计算 + WmsCheckOrderDO order = checkOrderMapper.selectById(orderId); + assertNotNull(order); + assertEquals(0, new BigDecimal("2.00").compareTo(order.getTotalQuantity())); + assertEquals(0, new BigDecimal("90.00").compareTo(order.getTotalPrice())); + assertEquals(0, new BigDecimal("85.00").compareTo(order.getActualPrice())); + // 断言:盘库明细保存单价 + List details = checkOrderDetailMapper.selectListByOrderId(orderId); + assertEquals(2, details.size()); + assertEquals(0, new BigDecimal("5.00").compareTo(details.get(0).getPrice())); + } + + @Test + public void testUpdateCheckOrder_calculateTotals() { + // mock 数据 + WmsCheckOrderDO order = createCheckOrder(100L); + checkOrderMapper.insert(order); + WmsCheckOrderDetailDO oldDetail = createCheckOrderDetail(order.getId(), 200L, 100L, "10.00", "7.00"); + checkOrderDetailMapper.insert(oldDetail); + WmsCheckOrderSaveReqVO reqVO = createCheckOrderReqVO(100L, + createCheckOrderDetailReqVO(oldDetail.getId(), 200L, "8.00", "10.00", "6.00"), + createCheckOrderDetailReqVO(null, 201L, "2.00", "1.00", "4.00")); + reqVO.setId(order.getId()); + reqVO.setNo(order.getNo()); + + // 调用 + checkOrderService.updateCheckOrder(reqVO); + + // 断言:盘库单汇总由后端重新计算 + WmsCheckOrderDO dbOrder = checkOrderMapper.selectById(order.getId()); + assertNotNull(dbOrder); + assertEquals(0, new BigDecimal("1.00").compareTo(dbOrder.getTotalQuantity())); + assertEquals(0, new BigDecimal("56.00").compareTo(dbOrder.getTotalPrice())); + assertEquals(0, new BigDecimal("64.00").compareTo(dbOrder.getActualPrice())); + List details = checkOrderDetailMapper.selectListByOrderId(order.getId()); + assertEquals(2, details.size()); + } + + @Test public void testCompleteCheckOrder_success() { // mock 数据 Long warehouseId = 100L; @@ -71,11 +123,12 @@ public class WmsCheckOrderServiceImplTest extends BaseDbUnitTest { WmsInventoryChangeReqDTO inventoryReqDTO = captor.getValue(); assertEquals(order.getId(), inventoryReqDTO.getOrderId()); assertEquals(order.getNo(), inventoryReqDTO.getOrderNo()); - assertEquals(WmsInventoryOrderTypeEnum.CHECK.getType(), inventoryReqDTO.getOrderType()); + assertEquals(WmsOrderTypeEnum.CHECK.getType(), inventoryReqDTO.getOrderType()); assertEquals(1, inventoryReqDTO.getItems().size()); assertEquals(skuId, inventoryReqDTO.getItems().get(0).getSkuId()); assertEquals(warehouseId, inventoryReqDTO.getItems().get(0).getWarehouseId()); assertEquals(0, new BigDecimal("-3.00").compareTo(inventoryReqDTO.getItems().get(0).getQuantity())); + assertEquals(0, new BigDecimal("30.00").compareTo(inventoryReqDTO.getItems().get(0).getPrice())); } @Test @@ -158,7 +211,8 @@ public class WmsCheckOrderServiceImplTest extends BaseDbUnitTest { .setStatus(WmsOrderStatusEnum.PREPARE.getStatus()) .setWarehouseId(warehouseId) .setTotalQuantity(new BigDecimal("-3.00")) - .setTotalAmount(new BigDecimal("30.00")); + .setTotalPrice(new BigDecimal("300.00")) + .setActualPrice(new BigDecimal("210.00")); } private static WmsCheckOrderDetailDO createCheckOrderDetail(Long orderId, Long skuId, Long warehouseId, @@ -170,8 +224,30 @@ public class WmsCheckOrderServiceImplTest extends BaseDbUnitTest { .inventoryId(300L) .quantity(new BigDecimal(quantity)) .checkQuantity(new BigDecimal(checkQuantity)) - .amount(new BigDecimal("30.00")) + .price(new BigDecimal("30.00")) .build(); } + private static WmsCheckOrderSaveReqVO createCheckOrderReqVO(Long warehouseId, WmsCheckOrderDetailSaveReqVO... details) { + WmsCheckOrderSaveReqVO reqVO = new WmsCheckOrderSaveReqVO(); + reqVO.setNo("PK202605120002"); + reqVO.setOrderTime(LocalDateTime.of(2026, 5, 12, 0, 0)); + reqVO.setWarehouseId(warehouseId); + reqVO.setDetails(Arrays.asList(details)); + return reqVO; + } + + private static WmsCheckOrderDetailSaveReqVO createCheckOrderDetailReqVO(Long id, Long skuId, + String quantity, String checkQuantity, + String price) { + WmsCheckOrderDetailSaveReqVO reqVO = new WmsCheckOrderDetailSaveReqVO(); + reqVO.setId(id); + reqVO.setSkuId(skuId); + reqVO.setInventoryId(300L); + reqVO.setQuantity(new BigDecimal(quantity)); + reqVO.setCheckQuantity(new BigDecimal(checkQuantity)); + reqVO.setPrice(new BigDecimal(price)); + return reqVO; + } + } 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 3979846..33aefed 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 @@ -7,7 +7,7 @@ import cn.iocoder.yudao.module.wms.dal.dataobject.order.movement.WmsMovementOrde import cn.iocoder.yudao.module.wms.dal.dataobject.order.movement.WmsMovementOrderDetailDO; import cn.iocoder.yudao.module.wms.dal.mysql.order.movement.WmsMovementOrderDetailMapper; import cn.iocoder.yudao.module.wms.dal.mysql.order.movement.WmsMovementOrderMapper; -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum; +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum; import cn.iocoder.yudao.module.wms.enums.order.WmsOrderStatusEnum; import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryService; import cn.iocoder.yudao.module.wms.service.inventory.dto.WmsInventoryChangeReqDTO; @@ -113,7 +113,7 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest { WmsInventoryChangeReqDTO inventoryReqDTO = captor.getValue(); assertEquals(order.getId(), inventoryReqDTO.getOrderId()); assertEquals(order.getNo(), inventoryReqDTO.getOrderNo()); - assertEquals(WmsInventoryOrderTypeEnum.MOVEMENT.getType(), inventoryReqDTO.getOrderType()); + assertEquals(WmsOrderTypeEnum.MOVEMENT.getType(), inventoryReqDTO.getOrderType()); assertEquals(2, inventoryReqDTO.getItems().size()); assertEquals(skuId, inventoryReqDTO.getItems().get(0).getSkuId()); assertEquals(sourceWarehouseId, inventoryReqDTO.getItems().get(0).getWarehouseId()); 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 0b58e54..2f28877 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 @@ -7,7 +7,7 @@ import cn.iocoder.yudao.module.wms.dal.dataobject.order.receipt.WmsReceiptOrderD import cn.iocoder.yudao.module.wms.dal.dataobject.order.receipt.WmsReceiptOrderDetailDO; import cn.iocoder.yudao.module.wms.dal.mysql.order.receipt.WmsReceiptOrderDetailMapper; import cn.iocoder.yudao.module.wms.dal.mysql.order.receipt.WmsReceiptOrderMapper; -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum; +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum; import cn.iocoder.yudao.module.wms.enums.order.WmsOrderStatusEnum; import cn.iocoder.yudao.module.wms.enums.order.WmsReceiptOrderTypeEnum; import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryService; @@ -114,7 +114,7 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { WmsInventoryChangeReqDTO inventoryReqDTO = captor.getValue(); assertEquals(order.getId(), inventoryReqDTO.getOrderId()); assertEquals(order.getNo(), inventoryReqDTO.getOrderNo()); - assertEquals(WmsInventoryOrderTypeEnum.RECEIPT.getType(), inventoryReqDTO.getOrderType()); + assertEquals(WmsOrderTypeEnum.RECEIPT.getType(), inventoryReqDTO.getOrderType()); assertEquals(1, inventoryReqDTO.getItems().size()); assertEquals(skuId, inventoryReqDTO.getItems().get(0).getSkuId()); assertEquals(warehouseId, inventoryReqDTO.getItems().get(0).getWarehouseId()); 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 319395f..76d3179 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 @@ -7,7 +7,7 @@ import cn.iocoder.yudao.module.wms.dal.dataobject.order.shipment.WmsShipmentOrde import cn.iocoder.yudao.module.wms.dal.dataobject.order.shipment.WmsShipmentOrderDetailDO; import cn.iocoder.yudao.module.wms.dal.mysql.order.shipment.WmsShipmentOrderDetailMapper; import cn.iocoder.yudao.module.wms.dal.mysql.order.shipment.WmsShipmentOrderMapper; -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum; +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum; import cn.iocoder.yudao.module.wms.enums.order.WmsOrderStatusEnum; import cn.iocoder.yudao.module.wms.enums.order.WmsShipmentOrderTypeEnum; import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryService; @@ -114,7 +114,7 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest { WmsInventoryChangeReqDTO inventoryReqDTO = captor.getValue(); assertEquals(order.getId(), inventoryReqDTO.getOrderId()); assertEquals(order.getNo(), inventoryReqDTO.getOrderNo()); - assertEquals(WmsInventoryOrderTypeEnum.SHIPMENT.getType(), inventoryReqDTO.getOrderType()); + assertEquals(WmsOrderTypeEnum.SHIPMENT.getType(), inventoryReqDTO.getOrderType()); assertEquals(1, inventoryReqDTO.getItems().size()); assertEquals(skuId, inventoryReqDTO.getItems().get(0).getSkuId()); assertEquals(warehouseId, inventoryReqDTO.getItems().get(0).getWarehouseId()); 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 6c13b96..218a2b7 100644 --- a/yudao-module-wms/src/test/resources/sql/create_tables.sql +++ b/yudao-module-wms/src/test/resources/sql/create_tables.sql @@ -192,7 +192,8 @@ CREATE TABLE IF NOT EXISTS "wms_check_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, + "actual_price" decimal(10, 2) DEFAULT NULL, "creator" varchar(64) DEFAULT '', "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, "updater" varchar(64) DEFAULT '', @@ -211,7 +212,7 @@ CREATE TABLE IF NOT EXISTS "wms_check_order_detail" ( "receipt_time" timestamp DEFAULT NULL, "quantity" decimal(20, 2) NOT NULL DEFAULT '0', "check_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 '',