Commit a9464080299950c94ca2c27127fafef18dee6a4d

Authored by YunaiV
1 parent 65a1337d

feat(wms):优化盘库单的实现

Showing 31 changed files with 204 additions and 109 deletions
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 {
35 35 @Schema(description = "仓库编号", example = "2048")
36 36 private Long warehouseId;
37 37  
38   - @Schema(description = "操作单号", example = "RK202605110001")
  38 + @Schema(description = "单据号", example = "RK202605110001")
39 39 private String orderNo;
40 40  
41   - @Schema(description = "操作类型", example = "1")
  41 + @Schema(description = "单据类型", example = "1")
42 42 private Integer orderType;
43 43  
44 44 @Schema(description = "操作时间")
... ...
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 {
45 45 @Schema(description = "备注", example = "备注")
46 46 private String remark;
47 47  
48   - @Schema(description = "操作单编号", example = "1024")
  48 + @Schema(description = "单据编号", example = "1024")
49 49 private Long orderId;
50   - @Schema(description = "操作单号", example = "RK202605110001")
  50 + @Schema(description = "单据号", example = "RK202605110001")
51 51 private String orderNo;
52   - @Schema(description = "操作类型", example = "1")
  52 + @Schema(description = "单据类型", example = "1")
53 53 private Integer orderType;
54 54 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
55 55 private LocalDateTime createTime;
... ...
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;
36 36 import org.springframework.web.bind.annotation.*;
37 37  
38 38 import java.io.IOException;
39   -import java.math.BigDecimal;
40 39 import java.util.Collections;
41 40 import java.util.List;
42 41 import java.util.Map;
... ... @@ -193,11 +192,6 @@ public class WmsCheckOrderController {
193 192 .setItemName(item.getName()).setUnit(item.getUnit()));
194 193 });
195 194 MapUtils.findAndThen(warehouseMap, vo.getWarehouseId(), warehouse -> vo.setWarehouseName(warehouse.getName()));
196   - if (vo.getQuantity() != null && vo.getCheckQuantity() != null) {
197   - vo.setDifferenceQuantity(vo.getCheckQuantity().subtract(vo.getQuantity()));
198   - } else {
199   - vo.setDifferenceQuantity(BigDecimal.ZERO);
200   - }
201 195 });
202 196 }
203 197  
... ...
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;
24 24 import org.springframework.web.bind.annotation.RequestParam;
25 25 import org.springframework.web.bind.annotation.RestController;
26 26  
27   -import java.math.BigDecimal;
28 27 import java.util.Collections;
29 28 import java.util.List;
30 29 import java.util.Map;
... ... @@ -76,11 +75,6 @@ public class WmsCheckOrderDetailController {
76 75 .setItemName(item.getName()).setUnit(item.getUnit()));
77 76 });
78 77 MapUtils.findAndThen(warehouseMap, vo.getWarehouseId(), warehouse -> vo.setWarehouseName(warehouse.getName()));
79   - if (vo.getQuantity() != null && vo.getCheckQuantity() != null) {
80   - vo.setDifferenceQuantity(vo.getCheckQuantity().subtract(vo.getQuantity()));
81   - } else {
82   - vo.setDifferenceQuantity(BigDecimal.ZERO);
83   - }
84 78 });
85 79 }
86 80  
... ...
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 {
55 55 @Schema(description = "实盘数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "98.00")
56 56 private BigDecimal checkQuantity;
57 57  
58   - @Schema(description = "盈亏数量", example = "-2.00")
59   - private BigDecimal differenceQuantity;
60   -
61   - @Schema(description = "金额", example = "1000.00")
62   - private BigDecimal amount;
  58 + @Schema(description = "单价", example = "1000.00")
  59 + private BigDecimal price;
63 60  
64 61 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
65 62 private LocalDateTime createTime;
... ...
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 {
35 35 @DecimalMin(value = "0", message = "实盘数量不能小于 0")
36 36 private BigDecimal checkQuantity;
37 37  
38   - @Schema(description = "金额", example = "1000.00")
39   - @DecimalMin(value = "0", message = "金额不能小于 0")
40   - private BigDecimal amount;
  38 + @Schema(description = "单价", example = "1000.00")
  39 + @DecimalMin(value = "0", message = "单价不能小于 0")
  40 + private BigDecimal price;
41 41  
42 42 }
... ...
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 {
41 41 private BigDecimal totalQuantityMax;
42 42  
43 43 @Schema(description = "最小总金额", example = "1.00")
44   - private BigDecimal totalAmountMin;
  44 + private BigDecimal totalPriceMin;
45 45  
46 46 @Schema(description = "最大总金额", example = "1000.00")
47   - private BigDecimal totalAmountMax;
  47 + private BigDecimal totalPriceMax;
  48 +
  49 + @Schema(description = "最小实际金额", example = "1.00")
  50 + private BigDecimal actualPriceMin;
  51 +
  52 + @Schema(description = "最大实际金额", example = "1000.00")
  53 + private BigDecimal actualPriceMax;
48 54  
49 55 @Schema(description = "创建用户", example = "1")
50 56 private String creator;
... ...
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 {
48 48 @ExcelProperty("盈亏数量")
49 49 private BigDecimal totalQuantity;
50 50  
51   - @Schema(description = "总金额", example = "1000.00")
  51 + @Schema(description = "总金额(账面金额)", example = "1000.00")
52 52 @ExcelProperty("总金额")
53   - private BigDecimal totalAmount;
  53 + private BigDecimal totalPrice;
  54 +
  55 + @Schema(description = "实际金额", example = "980.00")
  56 + @ExcelProperty("实际金额")
  57 + private BigDecimal actualPrice;
54 58  
55 59 @Schema(description = "盘库明细")
56 60 private List<WmsCheckOrderDetailRespVO> details;
... ...
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;
8 8 import jakarta.validation.constraints.Size;
9 9 import lombok.Data;
10 10  
11   -import java.math.BigDecimal;
12 11 import java.time.LocalDateTime;
13 12 import java.util.List;
14 13  
... ... @@ -36,14 +35,6 @@ public class WmsCheckOrderSaveReqVO {
36 35 @NotNull(message = "仓库不能为空")
37 36 private Long warehouseId;
38 37  
39   - @Schema(description = "盈亏数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00")
40   - @NotNull(message = "盈亏数量不能为空")
41   - private BigDecimal totalQuantity;
42   -
43   - @Schema(description = "总金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000.00")
44   - @NotNull(message = "总金额不能为空")
45   - private BigDecimal totalAmount;
46   -
47 38 @Schema(description = "盘库明细")
48 39 @Valid
49 40 private List<WmsCheckOrderDetailSaveReqVO> details;
... ...
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;
3 3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
4 4 import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemSkuDO;
5 5 import cn.iocoder.yudao.module.wms.dal.dataobject.md.warehouse.WmsWarehouseDO;
6   -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum;
  6 +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum;
7 7 import com.baomidou.mybatisplus.annotation.KeySequence;
8 8 import com.baomidou.mybatisplus.annotation.TableId;
9 9 import com.baomidou.mybatisplus.annotation.TableName;
... ... @@ -73,17 +73,17 @@ public class WmsInventoryHistoryDO extends BaseDO {
73 73 // ========= 来源单据相关字段 =========
74 74  
75 75 /**
76   - * 操作单编号
  76 + * 单据编号
77 77 */
78 78 private Long orderId;
79 79 /**
80   - * 操作单号
  80 + * 单据号
81 81 */
82 82 private String orderNo;
83 83 /**
84   - * 操作类型
  84 + * 单据类型
85 85 *
86   - * 枚举 {@link WmsInventoryOrderTypeEnum#getType()}
  86 + * 枚举 {@link WmsOrderTypeEnum#getType()}
87 87 */
88 88 private Integer orderType;
89 89  
... ...
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 {
66 66 */
67 67 private BigDecimal totalQuantity;
68 68 /**
69   - * 总金额
  69 + * 总金额(账面金额)
70 70 */
71   - private BigDecimal totalAmount;
  71 + private BigDecimal totalPrice;
  72 + /**
  73 + * 实际金额
  74 + */
  75 + private BigDecimal actualPrice;
72 76  
73 77 }
... ...
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 {
78 78 */
79 79 private BigDecimal checkQuantity;
80 80 /**
81   - * 金额(小计、非单价)
  81 + * 单价
82 82 */
83   - private BigDecimal amount;
  83 + private BigDecimal price;
84 84  
85 85 }
... ...
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&lt;WmsCheckOrderDO&gt; {
23 23 .betweenIfPresent(WmsCheckOrderDO::getOrderTime, reqVO.getOrderTime())
24 24 .geIfPresent(WmsCheckOrderDO::getTotalQuantity, reqVO.getTotalQuantityMin())
25 25 .leIfPresent(WmsCheckOrderDO::getTotalQuantity, reqVO.getTotalQuantityMax())
26   - .geIfPresent(WmsCheckOrderDO::getTotalAmount, reqVO.getTotalAmountMin())
27   - .leIfPresent(WmsCheckOrderDO::getTotalAmount, reqVO.getTotalAmountMax())
  26 + .geIfPresent(WmsCheckOrderDO::getTotalPrice, reqVO.getTotalPriceMin())
  27 + .leIfPresent(WmsCheckOrderDO::getTotalPrice, reqVO.getTotalPriceMax())
  28 + .geIfPresent(WmsCheckOrderDO::getActualPrice, reqVO.getActualPriceMin())
  29 + .leIfPresent(WmsCheckOrderDO::getActualPrice, reqVO.getActualPriceMax())
28 30 .eqIfPresent(WmsCheckOrderDO::getCreator, reqVO.getCreator())
29 31 .eqIfPresent(WmsCheckOrderDO::getUpdater, reqVO.getUpdater())
30 32 .betweenIfPresent(WmsCheckOrderDO::getCreateTime, reqVO.getCreateTime())
... ...
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/DictTypeConstants.java
... ... @@ -9,8 +9,8 @@ public interface DictTypeConstants {
9 9  
10 10 String MERCHANT_TYPE = "merchant_type";
11 11 String ORDER_STATUS = "wms_order_status";
  12 + String ORDER_TYPE = "wms_order_type";
12 13 String RECEIPT_ORDER_TYPE = "wms_receipt_order_type";
13 14 String SHIPMENT_ORDER_TYPE = "wms_shipment_order_type";
14   - String INVENTORY_HISTORY_TYPE = "wms_inventory_history_type";
15 15  
16 16 }
... ...
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/order/WmsOrderTypeConstants.java
1 1 package cn.iocoder.yudao.module.wms.enums.order;
2 2  
3 3 /**
4   - * WMS 单据类型常量
  4 + * WMS 单据业务类型常量
5 5 *
6 6 * 集中管理业务类型枚举的编号,按业务域分段。
7 7 * 各枚举类引用此处常量,避免硬编码数字。(也避免冲突!!!)
... ... @@ -12,13 +12,6 @@ public final class WmsOrderTypeConstants {
12 12  
13 13 private WmsOrderTypeConstants() {}
14 14  
15   - // ========== 单据名称 ==========
16   -
17   - public static final String ORDER_NAME_RECEIPT = "入库单";
18   - public static final String ORDER_NAME_SHIPMENT = "出库单";
19   - public static final String ORDER_NAME_MOVEMENT = "移库单";
20   - public static final String ORDER_NAME_CHECK = "盘库单";
21   -
22 15 // ========== 入库单类型 [100, 200) ==========
23 16  
24 17 public static final int RECEIPT_PRODUCTION = 100; // 生产入库:WmsReceiptOrderDO
... ...
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/inventory/WmsInventoryOrderTypeEnum.java renamed to yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/order/WmsOrderTypeEnum.java
1   -package cn.iocoder.yudao.module.wms.enums.inventory;
  1 +package cn.iocoder.yudao.module.wms.enums.order;
2 2  
3 3 import cn.iocoder.yudao.framework.common.core.ArrayValuable;
4 4 import lombok.AllArgsConstructor;
... ... @@ -7,20 +7,20 @@ import lombok.Getter;
7 7 import java.util.Arrays;
8 8  
9 9 /**
10   - * WMS 库存操作类型枚举
  10 + * WMS 单据类型枚举
11 11 *
12 12 * @author 芋道源码
13 13 */
14 14 @Getter
15 15 @AllArgsConstructor
16   -public enum WmsInventoryOrderTypeEnum implements ArrayValuable<Integer> {
  16 +public enum WmsOrderTypeEnum implements ArrayValuable<Integer> {
17 17  
18   - RECEIPT(1, "入库"),
19   - SHIPMENT(2, "出库"),
20   - MOVEMENT(3, "移库"),
21   - CHECK(4, "盘库");
  18 + RECEIPT(1, "入库单"),
  19 + SHIPMENT(2, "出库单"),
  20 + MOVEMENT(3, "移库单"),
  21 + CHECK(4, "盘库单");
22 22  
23   - public static final Integer[] ARRAYS = Arrays.stream(values()).map(WmsInventoryOrderTypeEnum::getType).toArray(Integer[]::new);
  23 + public static final Integer[] ARRAYS = Arrays.stream(values()).map(WmsOrderTypeEnum::getType).toArray(Integer[]::new);
24 24  
25 25 /**
26 26 * 类型
... ...
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/dto/WmsInventoryChangeReqDTO.java
1 1 package cn.iocoder.yudao.module.wms.service.inventory.dto;
2 2  
3   -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum;
  3 +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum;
4 4 import lombok.Data;
5 5  
6 6 import java.math.BigDecimal;
... ... @@ -15,17 +15,17 @@ import java.util.List;
15 15 public class WmsInventoryChangeReqDTO {
16 16  
17 17 /**
18   - * 操作单编号
  18 + * 单据编号
19 19 */
20 20 private Long orderId;
21 21 /**
22   - * 操作单号
  22 + * 单据号
23 23 */
24 24 private String orderNo;
25 25 /**
26   - * 操作类型
  26 + * 单据类型
27 27 *
28   - * 枚举 {@link WmsInventoryOrderTypeEnum#getType()}
  28 + * 枚举 {@link WmsOrderTypeEnum#getType()}
29 29 */
30 30 private Integer orderType;
31 31  
... ...
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;
7 7 import cn.iocoder.yudao.module.wms.controller.admin.md.item.vo.sku.WmsItemSkuSaveReqVO;
8 8 import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemSkuDO;
9 9 import cn.iocoder.yudao.module.wms.dal.mysql.md.item.WmsItemSkuMapper;
  10 +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum;
10 11 import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryService;
11 12 import cn.iocoder.yudao.module.wms.service.order.check.WmsCheckOrderDetailService;
12 13 import cn.iocoder.yudao.module.wms.service.order.movement.WmsMovementOrderDetailService;
... ... @@ -27,7 +28,6 @@ import java.util.Set;
27 28 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
28 29 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;
29 30 import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.*;
30   -import static cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeConstants.*;
31 31  
32 32 /**
33 33 * WMS 商品 SKU Service 实现类
... ... @@ -172,16 +172,16 @@ public class WmsItemSkuServiceImpl implements WmsItemSkuService {
172 172  
173 173 private void validateItemSkuOrderUnused(WmsItemSkuDO sku) {
174 174 if (receiptOrderDetailService.getReceiptOrderDetailCountBySkuId(sku.getId()) > 0) {
175   - throw exception(ITEM_SKU_HAS_ORDER, sku.getName(), ORDER_NAME_RECEIPT);
  175 + throw exception(ITEM_SKU_HAS_ORDER, sku.getName(), WmsOrderTypeEnum.RECEIPT.getName());
176 176 }
177 177 if (shipmentOrderDetailService.getShipmentOrderDetailCountBySkuId(sku.getId()) > 0) {
178   - throw exception(ITEM_SKU_HAS_ORDER, sku.getName(), ORDER_NAME_SHIPMENT);
  178 + throw exception(ITEM_SKU_HAS_ORDER, sku.getName(), WmsOrderTypeEnum.SHIPMENT.getName());
179 179 }
180 180 if (movementOrderDetailService.getMovementOrderDetailCountBySkuId(sku.getId()) > 0) {
181   - throw exception(ITEM_SKU_HAS_ORDER, sku.getName(), ORDER_NAME_MOVEMENT);
  181 + throw exception(ITEM_SKU_HAS_ORDER, sku.getName(), WmsOrderTypeEnum.MOVEMENT.getName());
182 182 }
183 183 if (checkOrderDetailService.getCheckOrderDetailCountBySkuId(sku.getId()) > 0) {
184   - throw exception(ITEM_SKU_HAS_ORDER, sku.getName(), ORDER_NAME_CHECK);
  184 + throw exception(ITEM_SKU_HAS_ORDER, sku.getName(), WmsOrderTypeEnum.CHECK.getName());
185 185 }
186 186 }
187 187  
... ...
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
10 10 import cn.iocoder.yudao.module.wms.dal.dataobject.md.merchant.WmsMerchantDO;
11 11 import cn.iocoder.yudao.module.wms.dal.mysql.md.merchant.WmsMerchantMapper;
12 12 import cn.iocoder.yudao.module.wms.enums.md.WmsMerchantTypeEnum;
  13 +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum;
13 14 import cn.iocoder.yudao.module.wms.service.order.receipt.WmsReceiptOrderService;
14 15 import cn.iocoder.yudao.module.wms.service.order.shipment.WmsShipmentOrderService;
15 16 import jakarta.annotation.Resource;
... ... @@ -22,7 +23,6 @@ import java.util.List;
22 23  
23 24 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
24 25 import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.*;
25   -import static cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeConstants.*;
26 26  
27 27 /**
28 28 * WMS 往来企业 Service 实现类
... ... @@ -72,10 +72,10 @@ public class WmsMerchantServiceImpl implements WmsMerchantService {
72 72  
73 73 private void validateMerchantUnused(Long id) {
74 74 if (receiptOrderService.getReceiptOrderCountByMerchantId(id) > 0) {
75   - throw exception(MERCHANT_HAS_ORDER, ORDER_NAME_RECEIPT);
  75 + throw exception(MERCHANT_HAS_ORDER, WmsOrderTypeEnum.RECEIPT.getName());
76 76 }
77 77 if (shipmentOrderService.getShipmentOrderCountByMerchantId(id) > 0) {
78   - throw exception(MERCHANT_HAS_ORDER, ORDER_NAME_SHIPMENT);
  78 + throw exception(MERCHANT_HAS_ORDER, WmsOrderTypeEnum.SHIPMENT.getName());
79 79 }
80 80 }
81 81  
... ...
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
9 9 import cn.iocoder.yudao.module.wms.controller.admin.md.warehouse.vo.WmsWarehouseSaveReqVO;
10 10 import cn.iocoder.yudao.module.wms.dal.dataobject.md.warehouse.WmsWarehouseDO;
11 11 import cn.iocoder.yudao.module.wms.dal.mysql.md.warehouse.WmsWarehouseMapper;
  12 +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum;
12 13 import cn.iocoder.yudao.module.wms.service.order.check.WmsCheckOrderService;
13 14 import cn.iocoder.yudao.module.wms.service.order.movement.WmsMovementOrderService;
14 15 import cn.iocoder.yudao.module.wms.service.order.receipt.WmsReceiptOrderService;
... ... @@ -24,7 +25,6 @@ import java.util.List;
24 25  
25 26 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
26 27 import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.*;
27   -import static cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeConstants.*;
28 28  
29 29 /**
30 30 * WMS 仓库 Service 实现类
... ... @@ -114,16 +114,16 @@ public class WmsWarehouseServiceImpl implements WmsWarehouseService {
114 114  
115 115 private void validateWarehouseUnused(Long id) {
116 116 if (receiptOrderService.getReceiptOrderCountByWarehouseId(id) > 0) {
117   - throw exception(WAREHOUSE_HAS_ORDER, ORDER_NAME_RECEIPT);
  117 + throw exception(WAREHOUSE_HAS_ORDER, WmsOrderTypeEnum.RECEIPT.getName());
118 118 }
119 119 if (shipmentOrderService.getShipmentOrderCountByWarehouseId(id) > 0) {
120   - throw exception(WAREHOUSE_HAS_ORDER, ORDER_NAME_SHIPMENT);
  120 + throw exception(WAREHOUSE_HAS_ORDER, WmsOrderTypeEnum.SHIPMENT.getName());
121 121 }
122 122 if (movementOrderService.getMovementOrderCountByWarehouseId(id) > 0) {
123   - throw exception(WAREHOUSE_HAS_ORDER, ORDER_NAME_MOVEMENT);
  123 + throw exception(WAREHOUSE_HAS_ORDER, WmsOrderTypeEnum.MOVEMENT.getName());
124 124 }
125 125 if (checkOrderService.getCheckOrderCountByWarehouseId(id) > 0) {
126   - throw exception(WAREHOUSE_HAS_ORDER, ORDER_NAME_CHECK);
  126 + throw exception(WAREHOUSE_HAS_ORDER, WmsOrderTypeEnum.CHECK.getName());
127 127 }
128 128 }
129 129  
... ...
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;
4 4 import cn.hutool.core.util.ObjectUtil;
5 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 6 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  7 +import cn.iocoder.yudao.module.wms.controller.admin.order.check.vo.detail.WmsCheckOrderDetailSaveReqVO;
7 8 import cn.iocoder.yudao.module.wms.controller.admin.order.check.vo.order.WmsCheckOrderPageReqVO;
8 9 import cn.iocoder.yudao.module.wms.controller.admin.order.check.vo.order.WmsCheckOrderSaveReqVO;
9 10 import cn.iocoder.yudao.module.wms.dal.dataobject.order.check.WmsCheckOrderDO;
10 11 import cn.iocoder.yudao.module.wms.dal.dataobject.order.check.WmsCheckOrderDetailDO;
11 12 import cn.iocoder.yudao.module.wms.dal.mysql.order.check.WmsCheckOrderMapper;
12   -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum;
  13 +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum;
13 14 import cn.iocoder.yudao.module.wms.enums.order.WmsOrderStatusEnum;
14 15 import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryService;
15 16 import cn.iocoder.yudao.module.wms.service.inventory.dto.WmsInventoryChangeReqDTO;
... ... @@ -53,6 +54,7 @@ public class WmsCheckOrderServiceImpl implements WmsCheckOrderService {
53 54 // 2.1 插入盘库单
54 55 WmsCheckOrderDO order = BeanUtils.toBean(createReqVO, WmsCheckOrderDO.class);
55 56 order.setStatus(WmsOrderStatusEnum.PREPARE.getStatus());
  57 + fillCheckOrderTotal(order, createReqVO);
56 58 checkOrderMapper.insert(order);
57 59 // 2.2 插入盘库单明细
58 60 checkOrderDetailService.createCheckOrderDetailList(order.getId(), createReqVO);
... ... @@ -69,6 +71,7 @@ public class WmsCheckOrderServiceImpl implements WmsCheckOrderService {
69 71 // 2.1 更新盘库单
70 72 WmsCheckOrderDO updateObj = BeanUtils.toBean(updateReqVO, WmsCheckOrderDO.class)
71 73 .setStatus(WmsOrderStatusEnum.PREPARE.getStatus());
  74 + fillCheckOrderTotal(updateObj, updateReqVO);
72 75 checkOrderMapper.updateById(updateObj);
73 76 // 2.2 更新盘库单明细
74 77 checkOrderDetailService.updateCheckOrderDetailList(updateReqVO.getId(), updateReqVO);
... ... @@ -149,6 +152,35 @@ public class WmsCheckOrderServiceImpl implements WmsCheckOrderService {
149 152 }
150 153 }
151 154  
  155 + private void fillCheckOrderTotal(WmsCheckOrderDO order, WmsCheckOrderSaveReqVO reqVO) {
  156 + BigDecimal totalQuantity = BigDecimal.ZERO;
  157 + BigDecimal totalPrice = BigDecimal.ZERO;
  158 + BigDecimal actualPrice = BigDecimal.ZERO;
  159 + if (CollUtil.isNotEmpty(reqVO.getDetails())) {
  160 + for (WmsCheckOrderDetailSaveReqVO detail : reqVO.getDetails()) {
  161 + BigDecimal differenceQuantity = calculateDifferenceQuantity(detail.getQuantity(), detail.getCheckQuantity());
  162 + totalQuantity = totalQuantity.add(differenceQuantity);
  163 + if (detail.getPrice() == null) {
  164 + continue;
  165 + }
  166 + if (detail.getQuantity() != null) {
  167 + totalPrice = totalPrice.add(detail.getQuantity().multiply(detail.getPrice()));
  168 + }
  169 + if (detail.getCheckQuantity() != null) {
  170 + actualPrice = actualPrice.add(detail.getCheckQuantity().multiply(detail.getPrice()));
  171 + }
  172 + }
  173 + }
  174 + order.setTotalQuantity(totalQuantity).setTotalPrice(totalPrice).setActualPrice(actualPrice);
  175 + }
  176 +
  177 + private BigDecimal calculateDifferenceQuantity(BigDecimal quantity, BigDecimal checkQuantity) {
  178 + if (quantity == null || checkQuantity == null) {
  179 + return BigDecimal.ZERO;
  180 + }
  181 + return checkQuantity.subtract(quantity);
  182 + }
  183 +
152 184 private WmsCheckOrderDO validateCheckOrderExists(Long id) {
153 185 WmsCheckOrderDO order = id == null ? null : checkOrderMapper.selectById(id);
154 186 if (order == null) {
... ... @@ -180,7 +212,7 @@ public class WmsCheckOrderServiceImpl implements WmsCheckOrderService {
180 212 private void changeInventory(WmsCheckOrderDO order, List<WmsCheckOrderDetailDO> details) {
181 213 List<WmsInventoryChangeReqDTO.Item> items = new ArrayList<>(details.size());
182 214 for (WmsCheckOrderDetailDO detail : details) {
183   - BigDecimal differenceQuantity = detail.getCheckQuantity().subtract(detail.getQuantity());
  215 + BigDecimal differenceQuantity = calculateDifferenceQuantity(detail.getQuantity(), detail.getCheckQuantity());
184 216 if (differenceQuantity.compareTo(BigDecimal.ZERO) == 0) {
185 217 continue;
186 218 }
... ... @@ -193,7 +225,7 @@ public class WmsCheckOrderServiceImpl implements WmsCheckOrderService {
193 225 }
194 226 inventoryService.changeInventory(new WmsInventoryChangeReqDTO()
195 227 .setOrderId(order.getId()).setOrderNo(order.getNo())
196   - .setOrderType(WmsInventoryOrderTypeEnum.CHECK.getType()).setItems(items));
  228 + .setOrderType(WmsOrderTypeEnum.CHECK.getType()).setItems(items));
197 229 }
198 230  
199 231 }
... ...
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
10 10 import cn.iocoder.yudao.module.wms.dal.dataobject.order.movement.WmsMovementOrderDO;
11 11 import cn.iocoder.yudao.module.wms.dal.dataobject.order.movement.WmsMovementOrderDetailDO;
12 12 import cn.iocoder.yudao.module.wms.dal.mysql.order.movement.WmsMovementOrderMapper;
13   -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum;
  13 +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum;
14 14 import cn.iocoder.yudao.module.wms.enums.order.WmsOrderStatusEnum;
15 15 import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryService;
16 16 import cn.iocoder.yudao.module.wms.service.inventory.dto.WmsInventoryChangeReqDTO;
... ... @@ -211,7 +211,7 @@ public class WmsMovementOrderServiceImpl implements WmsMovementOrderService {
211 211 }
212 212 inventoryService.changeInventory(new WmsInventoryChangeReqDTO()
213 213 .setOrderId(order.getId()).setOrderNo(order.getNo())
214   - .setOrderType(WmsInventoryOrderTypeEnum.MOVEMENT.getType()).setItems(items));
  214 + .setOrderType(WmsOrderTypeEnum.MOVEMENT.getType()).setItems(items));
215 215 }
216 216  
217 217 }
... ...
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
10 10 import cn.iocoder.yudao.module.wms.dal.dataobject.order.receipt.WmsReceiptOrderDO;
11 11 import cn.iocoder.yudao.module.wms.dal.dataobject.order.receipt.WmsReceiptOrderDetailDO;
12 12 import cn.iocoder.yudao.module.wms.dal.mysql.order.receipt.WmsReceiptOrderMapper;
13   -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum;
  13 +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum;
14 14 import cn.iocoder.yudao.module.wms.enums.order.WmsOrderStatusEnum;
15 15 import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryService;
16 16 import cn.iocoder.yudao.module.wms.service.inventory.dto.WmsInventoryChangeReqDTO;
... ... @@ -215,7 +215,7 @@ public class WmsReceiptOrderServiceImpl implements WmsReceiptOrderService {
215 215 detail -> BeanUtils.toBean(detail, WmsInventoryChangeReqDTO.Item.class));
216 216 inventoryService.changeInventory(new WmsInventoryChangeReqDTO()
217 217 .setOrderId(order.getId()).setOrderNo(order.getNo())
218   - .setOrderType(WmsInventoryOrderTypeEnum.RECEIPT.getType()).setItems(items));
  218 + .setOrderType(WmsOrderTypeEnum.RECEIPT.getType()).setItems(items));
219 219 }
220 220  
221 221 }
... ...
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
10 10 import cn.iocoder.yudao.module.wms.dal.dataobject.order.shipment.WmsShipmentOrderDO;
11 11 import cn.iocoder.yudao.module.wms.dal.dataobject.order.shipment.WmsShipmentOrderDetailDO;
12 12 import cn.iocoder.yudao.module.wms.dal.mysql.order.shipment.WmsShipmentOrderMapper;
13   -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum;
  13 +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum;
14 14 import cn.iocoder.yudao.module.wms.enums.order.WmsOrderStatusEnum;
15 15 import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryService;
16 16 import cn.iocoder.yudao.module.wms.service.inventory.dto.WmsInventoryChangeReqDTO;
... ... @@ -214,7 +214,7 @@ public class WmsShipmentOrderServiceImpl implements WmsShipmentOrderService {
214 214 .setQuantity(detail.getQuantity().multiply(BigDecimal.valueOf(-1L))));
215 215 inventoryService.changeInventory(new WmsInventoryChangeReqDTO()
216 216 .setOrderId(order.getId()).setOrderNo(order.getNo())
217   - .setOrderType(WmsInventoryOrderTypeEnum.SHIPMENT.getType()).setItems(items));
  217 + .setOrderType(WmsOrderTypeEnum.SHIPMENT.getType()).setItems(items));
218 218 }
219 219  
220 220 }
... ...
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
11 11 import cn.iocoder.yudao.module.wms.dal.mysql.inventory.WmsInventoryMapper;
12 12 import cn.iocoder.yudao.module.wms.dal.mysql.md.item.WmsItemMapper;
13 13 import cn.iocoder.yudao.module.wms.dal.mysql.md.item.WmsItemSkuMapper;
14   -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum;
  14 +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum;
15 15 import cn.iocoder.yudao.module.wms.service.inventory.dto.WmsInventoryChangeReqDTO;
16 16 import cn.iocoder.yudao.module.wms.service.md.item.WmsItemService;
17 17 import cn.iocoder.yudao.module.wms.service.md.item.WmsItemSkuService;
... ... @@ -406,7 +406,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest {
406 406 return new WmsInventoryChangeReqDTO()
407 407 .setOrderId(1L)
408 408 .setOrderNo("RK202605120001")
409   - .setOrderType(WmsInventoryOrderTypeEnum.RECEIPT.getType())
  409 + .setOrderType(WmsOrderTypeEnum.RECEIPT.getType())
410 410 .setItems(Collections.singletonList(new WmsInventoryChangeReqDTO.Item()
411 411 .setSkuId(skuId)
412 412 .setWarehouseId(warehouseId)
... ...
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 {
91 91 assertEquals(2001L, dbUpdateDetail.getSkuId());
92 92 assertEquals(0, new BigDecimal("11.00").compareTo(dbUpdateDetail.getQuantity()));
93 93 assertEquals(0, new BigDecimal("8.00").compareTo(dbUpdateDetail.getCheckQuantity()));
  94 + assertEquals(0, new BigDecimal("100.00").compareTo(dbUpdateDetail.getPrice()));
94 95 assertEquals(100L, dbUpdateDetail.getWarehouseId());
95 96 // 断言:新增
96 97 List<WmsCheckOrderDetailDO> details = checkOrderDetailMapper.selectListByOrderId(orderId);
... ... @@ -133,7 +134,7 @@ public class WmsCheckOrderDetailServiceImplTest extends BaseDbUnitTest {
133 134 reqVO.setInventoryId(300L);
134 135 reqVO.setQuantity(new BigDecimal(quantity));
135 136 reqVO.setCheckQuantity(new BigDecimal(checkQuantity));
136   - reqVO.setAmount(new BigDecimal("100.00"));
  137 + reqVO.setPrice(new BigDecimal("100.00"));
137 138 return reqVO;
138 139 }
139 140  
... ... @@ -146,7 +147,7 @@ public class WmsCheckOrderDetailServiceImplTest extends BaseDbUnitTest {
146 147 .inventoryId(300L)
147 148 .quantity(new BigDecimal(quantity))
148 149 .checkQuantity(new BigDecimal(checkQuantity))
149   - .amount(new BigDecimal("100.00"))
  150 + .price(new BigDecimal("100.00"))
150 151 .build();
151 152 }
152 153  
... ...
yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/check/WmsCheckOrderServiceImplTest.java
1 1 package cn.iocoder.yudao.module.wms.service.order.check;
2 2  
3 3 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
  4 +import cn.iocoder.yudao.module.wms.controller.admin.order.check.vo.detail.WmsCheckOrderDetailSaveReqVO;
  5 +import cn.iocoder.yudao.module.wms.controller.admin.order.check.vo.order.WmsCheckOrderSaveReqVO;
4 6 import cn.iocoder.yudao.module.wms.dal.dataobject.order.check.WmsCheckOrderDO;
5 7 import cn.iocoder.yudao.module.wms.dal.dataobject.order.check.WmsCheckOrderDetailDO;
6 8 import cn.iocoder.yudao.module.wms.dal.mysql.order.check.WmsCheckOrderDetailMapper;
7 9 import cn.iocoder.yudao.module.wms.dal.mysql.order.check.WmsCheckOrderMapper;
8   -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum;
  10 +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum;
9 11 import cn.iocoder.yudao.module.wms.enums.order.WmsOrderStatusEnum;
10 12 import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryService;
11 13 import cn.iocoder.yudao.module.wms.service.inventory.dto.WmsInventoryChangeReqDTO;
... ... @@ -19,6 +21,8 @@ import org.springframework.test.context.bean.override.mockito.MockitoBean;
19 21  
20 22 import java.math.BigDecimal;
21 23 import java.time.LocalDateTime;
  24 +import java.util.Arrays;
  25 +import java.util.List;
22 26  
23 27 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
24 28 import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.CHECK_ORDER_DETAIL_REQUIRED;
... ... @@ -49,6 +53,54 @@ public class WmsCheckOrderServiceImplTest extends BaseDbUnitTest {
49 53 private WmsInventoryService inventoryService;
50 54  
51 55 @Test
  56 + public void testCreateCheckOrder_calculateTotals() {
  57 + // mock 数据
  58 + WmsCheckOrderSaveReqVO reqVO = createCheckOrderReqVO(100L,
  59 + createCheckOrderDetailReqVO(null, 200L, "10.00", "7.00", "5.00"),
  60 + createCheckOrderDetailReqVO(null, 201L, "20.00", "25.00", "2.00"));
  61 +
  62 + // 调用
  63 + Long orderId = checkOrderService.createCheckOrder(reqVO);
  64 +
  65 + // 断言:盘库单汇总由后端计算
  66 + WmsCheckOrderDO order = checkOrderMapper.selectById(orderId);
  67 + assertNotNull(order);
  68 + assertEquals(0, new BigDecimal("2.00").compareTo(order.getTotalQuantity()));
  69 + assertEquals(0, new BigDecimal("90.00").compareTo(order.getTotalPrice()));
  70 + assertEquals(0, new BigDecimal("85.00").compareTo(order.getActualPrice()));
  71 + // 断言:盘库明细保存单价
  72 + List<WmsCheckOrderDetailDO> details = checkOrderDetailMapper.selectListByOrderId(orderId);
  73 + assertEquals(2, details.size());
  74 + assertEquals(0, new BigDecimal("5.00").compareTo(details.get(0).getPrice()));
  75 + }
  76 +
  77 + @Test
  78 + public void testUpdateCheckOrder_calculateTotals() {
  79 + // mock 数据
  80 + WmsCheckOrderDO order = createCheckOrder(100L);
  81 + checkOrderMapper.insert(order);
  82 + WmsCheckOrderDetailDO oldDetail = createCheckOrderDetail(order.getId(), 200L, 100L, "10.00", "7.00");
  83 + checkOrderDetailMapper.insert(oldDetail);
  84 + WmsCheckOrderSaveReqVO reqVO = createCheckOrderReqVO(100L,
  85 + createCheckOrderDetailReqVO(oldDetail.getId(), 200L, "8.00", "10.00", "6.00"),
  86 + createCheckOrderDetailReqVO(null, 201L, "2.00", "1.00", "4.00"));
  87 + reqVO.setId(order.getId());
  88 + reqVO.setNo(order.getNo());
  89 +
  90 + // 调用
  91 + checkOrderService.updateCheckOrder(reqVO);
  92 +
  93 + // 断言:盘库单汇总由后端重新计算
  94 + WmsCheckOrderDO dbOrder = checkOrderMapper.selectById(order.getId());
  95 + assertNotNull(dbOrder);
  96 + assertEquals(0, new BigDecimal("1.00").compareTo(dbOrder.getTotalQuantity()));
  97 + assertEquals(0, new BigDecimal("56.00").compareTo(dbOrder.getTotalPrice()));
  98 + assertEquals(0, new BigDecimal("64.00").compareTo(dbOrder.getActualPrice()));
  99 + List<WmsCheckOrderDetailDO> details = checkOrderDetailMapper.selectListByOrderId(order.getId());
  100 + assertEquals(2, details.size());
  101 + }
  102 +
  103 + @Test
52 104 public void testCompleteCheckOrder_success() {
53 105 // mock 数据
54 106 Long warehouseId = 100L;
... ... @@ -71,11 +123,12 @@ public class WmsCheckOrderServiceImplTest extends BaseDbUnitTest {
71 123 WmsInventoryChangeReqDTO inventoryReqDTO = captor.getValue();
72 124 assertEquals(order.getId(), inventoryReqDTO.getOrderId());
73 125 assertEquals(order.getNo(), inventoryReqDTO.getOrderNo());
74   - assertEquals(WmsInventoryOrderTypeEnum.CHECK.getType(), inventoryReqDTO.getOrderType());
  126 + assertEquals(WmsOrderTypeEnum.CHECK.getType(), inventoryReqDTO.getOrderType());
75 127 assertEquals(1, inventoryReqDTO.getItems().size());
76 128 assertEquals(skuId, inventoryReqDTO.getItems().get(0).getSkuId());
77 129 assertEquals(warehouseId, inventoryReqDTO.getItems().get(0).getWarehouseId());
78 130 assertEquals(0, new BigDecimal("-3.00").compareTo(inventoryReqDTO.getItems().get(0).getQuantity()));
  131 + assertEquals(0, new BigDecimal("30.00").compareTo(inventoryReqDTO.getItems().get(0).getPrice()));
79 132 }
80 133  
81 134 @Test
... ... @@ -158,7 +211,8 @@ public class WmsCheckOrderServiceImplTest extends BaseDbUnitTest {
158 211 .setStatus(WmsOrderStatusEnum.PREPARE.getStatus())
159 212 .setWarehouseId(warehouseId)
160 213 .setTotalQuantity(new BigDecimal("-3.00"))
161   - .setTotalAmount(new BigDecimal("30.00"));
  214 + .setTotalPrice(new BigDecimal("300.00"))
  215 + .setActualPrice(new BigDecimal("210.00"));
162 216 }
163 217  
164 218 private static WmsCheckOrderDetailDO createCheckOrderDetail(Long orderId, Long skuId, Long warehouseId,
... ... @@ -170,8 +224,30 @@ public class WmsCheckOrderServiceImplTest extends BaseDbUnitTest {
170 224 .inventoryId(300L)
171 225 .quantity(new BigDecimal(quantity))
172 226 .checkQuantity(new BigDecimal(checkQuantity))
173   - .amount(new BigDecimal("30.00"))
  227 + .price(new BigDecimal("30.00"))
174 228 .build();
175 229 }
176 230  
  231 + private static WmsCheckOrderSaveReqVO createCheckOrderReqVO(Long warehouseId, WmsCheckOrderDetailSaveReqVO... details) {
  232 + WmsCheckOrderSaveReqVO reqVO = new WmsCheckOrderSaveReqVO();
  233 + reqVO.setNo("PK202605120002");
  234 + reqVO.setOrderTime(LocalDateTime.of(2026, 5, 12, 0, 0));
  235 + reqVO.setWarehouseId(warehouseId);
  236 + reqVO.setDetails(Arrays.asList(details));
  237 + return reqVO;
  238 + }
  239 +
  240 + private static WmsCheckOrderDetailSaveReqVO createCheckOrderDetailReqVO(Long id, Long skuId,
  241 + String quantity, String checkQuantity,
  242 + String price) {
  243 + WmsCheckOrderDetailSaveReqVO reqVO = new WmsCheckOrderDetailSaveReqVO();
  244 + reqVO.setId(id);
  245 + reqVO.setSkuId(skuId);
  246 + reqVO.setInventoryId(300L);
  247 + reqVO.setQuantity(new BigDecimal(quantity));
  248 + reqVO.setCheckQuantity(new BigDecimal(checkQuantity));
  249 + reqVO.setPrice(new BigDecimal(price));
  250 + return reqVO;
  251 + }
  252 +
177 253 }
... ...
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
7 7 import cn.iocoder.yudao.module.wms.dal.dataobject.order.movement.WmsMovementOrderDetailDO;
8 8 import cn.iocoder.yudao.module.wms.dal.mysql.order.movement.WmsMovementOrderDetailMapper;
9 9 import cn.iocoder.yudao.module.wms.dal.mysql.order.movement.WmsMovementOrderMapper;
10   -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum;
  10 +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum;
11 11 import cn.iocoder.yudao.module.wms.enums.order.WmsOrderStatusEnum;
12 12 import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryService;
13 13 import cn.iocoder.yudao.module.wms.service.inventory.dto.WmsInventoryChangeReqDTO;
... ... @@ -113,7 +113,7 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest {
113 113 WmsInventoryChangeReqDTO inventoryReqDTO = captor.getValue();
114 114 assertEquals(order.getId(), inventoryReqDTO.getOrderId());
115 115 assertEquals(order.getNo(), inventoryReqDTO.getOrderNo());
116   - assertEquals(WmsInventoryOrderTypeEnum.MOVEMENT.getType(), inventoryReqDTO.getOrderType());
  116 + assertEquals(WmsOrderTypeEnum.MOVEMENT.getType(), inventoryReqDTO.getOrderType());
117 117 assertEquals(2, inventoryReqDTO.getItems().size());
118 118 assertEquals(skuId, inventoryReqDTO.getItems().get(0).getSkuId());
119 119 assertEquals(sourceWarehouseId, inventoryReqDTO.getItems().get(0).getWarehouseId());
... ...
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
7 7 import cn.iocoder.yudao.module.wms.dal.dataobject.order.receipt.WmsReceiptOrderDetailDO;
8 8 import cn.iocoder.yudao.module.wms.dal.mysql.order.receipt.WmsReceiptOrderDetailMapper;
9 9 import cn.iocoder.yudao.module.wms.dal.mysql.order.receipt.WmsReceiptOrderMapper;
10   -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum;
  10 +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum;
11 11 import cn.iocoder.yudao.module.wms.enums.order.WmsOrderStatusEnum;
12 12 import cn.iocoder.yudao.module.wms.enums.order.WmsReceiptOrderTypeEnum;
13 13 import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryService;
... ... @@ -114,7 +114,7 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest {
114 114 WmsInventoryChangeReqDTO inventoryReqDTO = captor.getValue();
115 115 assertEquals(order.getId(), inventoryReqDTO.getOrderId());
116 116 assertEquals(order.getNo(), inventoryReqDTO.getOrderNo());
117   - assertEquals(WmsInventoryOrderTypeEnum.RECEIPT.getType(), inventoryReqDTO.getOrderType());
  117 + assertEquals(WmsOrderTypeEnum.RECEIPT.getType(), inventoryReqDTO.getOrderType());
118 118 assertEquals(1, inventoryReqDTO.getItems().size());
119 119 assertEquals(skuId, inventoryReqDTO.getItems().get(0).getSkuId());
120 120 assertEquals(warehouseId, inventoryReqDTO.getItems().get(0).getWarehouseId());
... ...
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
7 7 import cn.iocoder.yudao.module.wms.dal.dataobject.order.shipment.WmsShipmentOrderDetailDO;
8 8 import cn.iocoder.yudao.module.wms.dal.mysql.order.shipment.WmsShipmentOrderDetailMapper;
9 9 import cn.iocoder.yudao.module.wms.dal.mysql.order.shipment.WmsShipmentOrderMapper;
10   -import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum;
  10 +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum;
11 11 import cn.iocoder.yudao.module.wms.enums.order.WmsOrderStatusEnum;
12 12 import cn.iocoder.yudao.module.wms.enums.order.WmsShipmentOrderTypeEnum;
13 13 import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryService;
... ... @@ -114,7 +114,7 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest {
114 114 WmsInventoryChangeReqDTO inventoryReqDTO = captor.getValue();
115 115 assertEquals(order.getId(), inventoryReqDTO.getOrderId());
116 116 assertEquals(order.getNo(), inventoryReqDTO.getOrderNo());
117   - assertEquals(WmsInventoryOrderTypeEnum.SHIPMENT.getType(), inventoryReqDTO.getOrderType());
  117 + assertEquals(WmsOrderTypeEnum.SHIPMENT.getType(), inventoryReqDTO.getOrderType());
118 118 assertEquals(1, inventoryReqDTO.getItems().size());
119 119 assertEquals(skuId, inventoryReqDTO.getItems().get(0).getSkuId());
120 120 assertEquals(warehouseId, inventoryReqDTO.getItems().get(0).getWarehouseId());
... ...
yudao-module-wms/src/test/resources/sql/create_tables.sql
... ... @@ -192,7 +192,8 @@ CREATE TABLE IF NOT EXISTS &quot;wms_check_order&quot; (
192 192 "remark" varchar(255) DEFAULT NULL,
193 193 "warehouse_id" bigint NOT NULL,
194 194 "total_quantity" decimal(20, 2) NOT NULL DEFAULT '0',
195   - "total_amount" decimal(10, 2) DEFAULT NULL,
  195 + "total_price" decimal(10, 2) DEFAULT NULL,
  196 + "actual_price" decimal(10, 2) DEFAULT NULL,
196 197 "creator" varchar(64) DEFAULT '',
197 198 "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
198 199 "updater" varchar(64) DEFAULT '',
... ... @@ -211,7 +212,7 @@ CREATE TABLE IF NOT EXISTS &quot;wms_check_order_detail&quot; (
211 212 "receipt_time" timestamp DEFAULT NULL,
212 213 "quantity" decimal(20, 2) NOT NULL DEFAULT '0',
213 214 "check_quantity" decimal(20, 2) NOT NULL DEFAULT '0',
214   - "amount" decimal(10, 2) DEFAULT NULL,
  215 + "price" decimal(10, 2) DEFAULT NULL,
215 216 "creator" varchar(64) DEFAULT '',
216 217 "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
217 218 "updater" varchar(64) DEFAULT '',
... ...