Commit 70a6316ce7f7f3db600107bde132890602da8846

Authored by YunaiV
1 parent 04d1b865

feat(wms):入库管理,调整合计金额、数量的字段与交互。(前端负责展示,后端负责计算)

Showing 17 changed files with 119 additions and 45 deletions
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/inventory/vo/history/WmsInventoryHistoryRespVO.java
@@ -40,8 +40,8 @@ public class WmsInventoryHistoryRespVO { @@ -40,8 +40,8 @@ public class WmsInventoryHistoryRespVO {
40 private BigDecimal beforeQuantity; 40 private BigDecimal beforeQuantity;
41 @Schema(description = "变化后库存数量", example = "100.00") 41 @Schema(description = "变化后库存数量", example = "100.00")
42 private BigDecimal afterQuantity; 42 private BigDecimal afterQuantity;
43 - @Schema(description = "金额", example = "1000.00")  
44 - private BigDecimal amount; 43 + @Schema(description = "单价", example = "1000.00")
  44 + private BigDecimal price;
45 @Schema(description = "备注", example = "备注") 45 @Schema(description = "备注", example = "备注")
46 private String remark; 46 private String remark;
47 47
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/detail/WmsReceiptOrderDetailRespVO.java
@@ -46,8 +46,8 @@ public class WmsReceiptOrderDetailRespVO { @@ -46,8 +46,8 @@ public class WmsReceiptOrderDetailRespVO {
46 @Schema(description = "入库数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00") 46 @Schema(description = "入库数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00")
47 private BigDecimal quantity; 47 private BigDecimal quantity;
48 48
49 - @Schema(description = "金额", example = "1000.00")  
50 - private BigDecimal amount; 49 + @Schema(description = "单价", example = "1000.00")
  50 + private BigDecimal price;
51 51
52 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) 52 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
53 private LocalDateTime createTime; 53 private LocalDateTime createTime;
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/detail/WmsReceiptOrderDetailSaveReqVO.java
@@ -23,8 +23,8 @@ public class WmsReceiptOrderDetailSaveReqVO { @@ -23,8 +23,8 @@ public class WmsReceiptOrderDetailSaveReqVO {
23 @DecimalMin(value = "0", inclusive = false, message = "入库数量必须大于 0") 23 @DecimalMin(value = "0", inclusive = false, message = "入库数量必须大于 0")
24 private BigDecimal quantity; 24 private BigDecimal quantity;
25 25
26 - @Schema(description = "金额", example = "1000.00")  
27 - @DecimalMin(value = "0", message = "金额不能小于 0")  
28 - private BigDecimal amount; 26 + @Schema(description = "单价", example = "1000.00")
  27 + @DecimalMin(value = "0", message = "单价不能小于 0")
  28 + private BigDecimal price;
29 29
30 } 30 }
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/order/WmsReceiptOrderPageReqVO.java
@@ -45,10 +45,10 @@ public class WmsReceiptOrderPageReqVO extends PageParam { @@ -45,10 +45,10 @@ public class WmsReceiptOrderPageReqVO extends PageParam {
45 private BigDecimal totalQuantityMax; 45 private BigDecimal totalQuantityMax;
46 46
47 @Schema(description = "最小总金额", example = "1.00") 47 @Schema(description = "最小总金额", example = "1.00")
48 - private BigDecimal totalAmountMin; 48 + private BigDecimal totalPriceMin;
49 49
50 @Schema(description = "最大总金额", example = "1000.00") 50 @Schema(description = "最大总金额", example = "1000.00")
51 - private BigDecimal totalAmountMax; 51 + private BigDecimal totalPriceMax;
52 52
53 @Schema(description = "入库类型", example = "101") 53 @Schema(description = "入库类型", example = "101")
54 @InEnum(WmsReceiptOrderTypeEnum.class) 54 @InEnum(WmsReceiptOrderTypeEnum.class)
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/order/WmsReceiptOrderRespVO.java
@@ -66,7 +66,7 @@ public class WmsReceiptOrderRespVO { @@ -66,7 +66,7 @@ public class WmsReceiptOrderRespVO {
66 66
67 @Schema(description = "总金额", example = "1000.00") 67 @Schema(description = "总金额", example = "1000.00")
68 @ExcelProperty("总金额") 68 @ExcelProperty("总金额")
69 - private BigDecimal totalAmount; 69 + private BigDecimal totalPrice;
70 70
71 @Schema(description = "入库明细") 71 @Schema(description = "入库明细")
72 private List<WmsReceiptOrderDetailRespVO> details; 72 private List<WmsReceiptOrderDetailRespVO> details;
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/order/WmsReceiptOrderSaveReqVO.java
@@ -10,7 +10,6 @@ import jakarta.validation.constraints.NotNull; @@ -10,7 +10,6 @@ import jakarta.validation.constraints.NotNull;
10 import jakarta.validation.constraints.Size; 10 import jakarta.validation.constraints.Size;
11 import lombok.Data; 11 import lombok.Data;
12 12
13 -import java.math.BigDecimal;  
14 import java.time.LocalDateTime; 13 import java.time.LocalDateTime;
15 import java.util.List; 14 import java.util.List;
16 15
@@ -50,14 +49,6 @@ public class WmsReceiptOrderSaveReqVO { @@ -50,14 +49,6 @@ public class WmsReceiptOrderSaveReqVO {
50 @NotNull(message = "仓库不能为空") 49 @NotNull(message = "仓库不能为空")
51 private Long warehouseId; 50 private Long warehouseId;
52 51
53 - @Schema(description = "入库数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00")  
54 - @NotNull(message = "入库数量不能为空")  
55 - private BigDecimal totalQuantity;  
56 -  
57 - @Schema(description = "总金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000.00")  
58 - @NotNull(message = "总金额不能为空")  
59 - private BigDecimal totalAmount;  
60 -  
61 @Schema(description = "入库明细") 52 @Schema(description = "入库明细")
62 @Valid 53 @Valid
63 private List<WmsReceiptOrderDetailSaveReqVO> details; 54 private List<WmsReceiptOrderDetailSaveReqVO> details;
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/inventory/WmsInventoryHistoryDO.java
@@ -59,12 +59,12 @@ public class WmsInventoryHistoryDO extends BaseDO { @@ -59,12 +59,12 @@ public class WmsInventoryHistoryDO extends BaseDO {
59 */ 59 */
60 private BigDecimal afterQuantity; 60 private BigDecimal afterQuantity;
61 61
62 - // ========= 金额备注相关字段 ========= 62 + // ========= 单价备注相关字段 =========
63 63
64 /** 64 /**
65 - * 金额 65 + * 单价
66 */ 66 */
67 - private BigDecimal amount; 67 + private BigDecimal price;
68 /** 68 /**
69 * 备注 69 * 备注
70 */ 70 */
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/receipt/WmsReceiptOrderDO.java
@@ -87,6 +87,6 @@ public class WmsReceiptOrderDO extends BaseDO { @@ -87,6 +87,6 @@ public class WmsReceiptOrderDO extends BaseDO {
87 /** 87 /**
88 * 总金额 88 * 总金额
89 */ 89 */
90 - private BigDecimal totalAmount; 90 + private BigDecimal totalPrice;
91 91
92 } 92 }
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/receipt/WmsReceiptOrderDetailDO.java
@@ -54,15 +54,15 @@ public class WmsReceiptOrderDetailDO extends BaseDO { @@ -54,15 +54,15 @@ public class WmsReceiptOrderDetailDO extends BaseDO {
54 */ 54 */
55 private Long warehouseId; 55 private Long warehouseId;
56 56
57 - // ========= 汇总金额字段 ========= 57 + // ========= 数量金额字段 =========
58 58
59 /** 59 /**
60 * 入库数量 60 * 入库数量
61 */ 61 */
62 private BigDecimal quantity; 62 private BigDecimal quantity;
63 /** 63 /**
64 - * 金额(小计、非单价) 64 + * 单价
65 */ 65 */
66 - private BigDecimal amount; 66 + private BigDecimal price;
67 67
68 } 68 }
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/order/receipt/WmsReceiptOrderMapper.java
@@ -24,8 +24,8 @@ public interface WmsReceiptOrderMapper extends BaseMapperX&lt;WmsReceiptOrderDO&gt; { @@ -24,8 +24,8 @@ public interface WmsReceiptOrderMapper extends BaseMapperX&lt;WmsReceiptOrderDO&gt; {
24 .betweenIfPresent(WmsReceiptOrderDO::getOrderTime, reqVO.getOrderTime()) 24 .betweenIfPresent(WmsReceiptOrderDO::getOrderTime, reqVO.getOrderTime())
25 .geIfPresent(WmsReceiptOrderDO::getTotalQuantity, reqVO.getTotalQuantityMin()) 25 .geIfPresent(WmsReceiptOrderDO::getTotalQuantity, reqVO.getTotalQuantityMin())
26 .leIfPresent(WmsReceiptOrderDO::getTotalQuantity, reqVO.getTotalQuantityMax()) 26 .leIfPresent(WmsReceiptOrderDO::getTotalQuantity, reqVO.getTotalQuantityMax())
27 - .geIfPresent(WmsReceiptOrderDO::getTotalAmount, reqVO.getTotalAmountMin())  
28 - .leIfPresent(WmsReceiptOrderDO::getTotalAmount, reqVO.getTotalAmountMax()) 27 + .geIfPresent(WmsReceiptOrderDO::getTotalPrice, reqVO.getTotalPriceMin())
  28 + .leIfPresent(WmsReceiptOrderDO::getTotalPrice, reqVO.getTotalPriceMax())
29 .eqIfPresent(WmsReceiptOrderDO::getType, reqVO.getType()) 29 .eqIfPresent(WmsReceiptOrderDO::getType, reqVO.getType())
30 .likeIfPresent(WmsReceiptOrderDO::getBizOrderNo, reqVO.getBizOrderNo()) 30 .likeIfPresent(WmsReceiptOrderDO::getBizOrderNo, reqVO.getBizOrderNo())
31 .eqIfPresent(WmsReceiptOrderDO::getCreator, reqVO.getCreator()) 31 .eqIfPresent(WmsReceiptOrderDO::getCreator, reqVO.getCreator())
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImpl.java
@@ -189,7 +189,7 @@ public class WmsInventoryServiceImpl implements WmsInventoryService { @@ -189,7 +189,7 @@ public class WmsInventoryServiceImpl implements WmsInventoryService {
189 return new WmsInventoryHistoryDO() 189 return new WmsInventoryHistoryDO()
190 .setWarehouseId(item.getWarehouseId()).setSkuId(item.getSkuId()) 190 .setWarehouseId(item.getWarehouseId()).setSkuId(item.getSkuId())
191 .setQuantity(item.getQuantity()).setBeforeQuantity(result.get(0)).setAfterQuantity(result.get(1)) 191 .setQuantity(item.getQuantity()).setBeforeQuantity(result.get(0)).setAfterQuantity(result.get(1))
192 - .setAmount(item.getAmount()).setRemark(item.getRemark()) 192 + .setPrice(item.getPrice()).setRemark(item.getRemark())
193 .setOrderId(reqDTO.getOrderId()).setOrderNo(reqDTO.getOrderNo()).setOrderType(reqDTO.getOrderType()); 193 .setOrderId(reqDTO.getOrderId()).setOrderNo(reqDTO.getOrderNo()).setOrderType(reqDTO.getOrderType());
194 } 194 }
195 195
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/dto/WmsInventoryChangeReqDTO.java
@@ -53,12 +53,12 @@ public class WmsInventoryChangeReqDTO { @@ -53,12 +53,12 @@ public class WmsInventoryChangeReqDTO {
53 */ 53 */
54 private BigDecimal quantity; 54 private BigDecimal quantity;
55 55
56 - // ========= 金额备注相关字段 ========= 56 + // ========= 单价备注相关字段 =========
57 57
58 /** 58 /**
59 - * 金额(小计、非单价) 59 + * 单价
60 */ 60 */
61 - private BigDecimal amount; 61 + private BigDecimal price;
62 /** 62 /**
63 * 备注 63 * 备注
64 */ 64 */
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderServiceImpl.java
1 package cn.iocoder.yudao.module.wms.service.order.receipt; 1 package cn.iocoder.yudao.module.wms.service.order.receipt;
2 2
  3 +import cn.hutool.core.collection.CollUtil;
3 import cn.hutool.core.util.ObjectUtil; 4 import cn.hutool.core.util.ObjectUtil;
4 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 6 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  7 +import cn.iocoder.yudao.module.wms.controller.admin.order.receipt.vo.detail.WmsReceiptOrderDetailSaveReqVO;
6 import cn.iocoder.yudao.module.wms.controller.admin.order.receipt.vo.order.WmsReceiptOrderPageReqVO; 8 import cn.iocoder.yudao.module.wms.controller.admin.order.receipt.vo.order.WmsReceiptOrderPageReqVO;
7 import cn.iocoder.yudao.module.wms.controller.admin.order.receipt.vo.order.WmsReceiptOrderSaveReqVO; 9 import cn.iocoder.yudao.module.wms.controller.admin.order.receipt.vo.order.WmsReceiptOrderSaveReqVO;
8 import cn.iocoder.yudao.module.wms.dal.dataobject.order.receipt.WmsReceiptOrderDO; 10 import cn.iocoder.yudao.module.wms.dal.dataobject.order.receipt.WmsReceiptOrderDO;
@@ -19,6 +21,7 @@ import org.springframework.stereotype.Service; @@ -19,6 +21,7 @@ import org.springframework.stereotype.Service;
19 import org.springframework.transaction.annotation.Transactional; 21 import org.springframework.transaction.annotation.Transactional;
20 import org.springframework.validation.annotation.Validated; 22 import org.springframework.validation.annotation.Validated;
21 23
  24 +import java.math.BigDecimal;
22 import java.util.List; 25 import java.util.List;
23 26
24 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 27 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -54,6 +57,7 @@ public class WmsReceiptOrderServiceImpl implements WmsReceiptOrderService { @@ -54,6 +57,7 @@ public class WmsReceiptOrderServiceImpl implements WmsReceiptOrderService {
54 // 2.1 插入入库单 57 // 2.1 插入入库单
55 WmsReceiptOrderDO order = BeanUtils.toBean(createReqVO, WmsReceiptOrderDO.class); 58 WmsReceiptOrderDO order = BeanUtils.toBean(createReqVO, WmsReceiptOrderDO.class);
56 order.setStatus(WmsOrderStatusEnum.PREPARE.getStatus()); 59 order.setStatus(WmsOrderStatusEnum.PREPARE.getStatus());
  60 + fillReceiptOrderTotal(order, createReqVO);
57 receiptOrderMapper.insert(order); 61 receiptOrderMapper.insert(order);
58 // 2.2 插入入库单明细 62 // 2.2 插入入库单明细
59 receiptOrderDetailService.createReceiptOrderDetailList(order.getId(), createReqVO); 63 receiptOrderDetailService.createReceiptOrderDetailList(order.getId(), createReqVO);
@@ -70,6 +74,7 @@ public class WmsReceiptOrderServiceImpl implements WmsReceiptOrderService { @@ -70,6 +74,7 @@ public class WmsReceiptOrderServiceImpl implements WmsReceiptOrderService {
70 // 2.1 更新入库单 74 // 2.1 更新入库单
71 WmsReceiptOrderDO updateObj = BeanUtils.toBean(updateReqVO, WmsReceiptOrderDO.class) 75 WmsReceiptOrderDO updateObj = BeanUtils.toBean(updateReqVO, WmsReceiptOrderDO.class)
72 .setStatus(WmsOrderStatusEnum.PREPARE.getStatus()); 76 .setStatus(WmsOrderStatusEnum.PREPARE.getStatus());
  77 + fillReceiptOrderTotal(updateObj, updateReqVO);
73 receiptOrderMapper.updateById(updateObj); 78 receiptOrderMapper.updateById(updateObj);
74 // 2.2 更新入库单明细 79 // 2.2 更新入库单明细
75 receiptOrderDetailService.updateReceiptOrderDetailList(updateReqVO.getId(), updateReqVO); 80 receiptOrderDetailService.updateReceiptOrderDetailList(updateReqVO.getId(), updateReqVO);
@@ -159,6 +164,22 @@ public class WmsReceiptOrderServiceImpl implements WmsReceiptOrderService { @@ -159,6 +164,22 @@ public class WmsReceiptOrderServiceImpl implements WmsReceiptOrderService {
159 } 164 }
160 } 165 }
161 166
  167 + private void fillReceiptOrderTotal(WmsReceiptOrderDO order, WmsReceiptOrderSaveReqVO reqVO) {
  168 + BigDecimal totalQuantity = BigDecimal.ZERO;
  169 + BigDecimal totalPrice = BigDecimal.ZERO;
  170 + if (CollUtil.isNotEmpty(reqVO.getDetails())) {
  171 + for (WmsReceiptOrderDetailSaveReqVO detail : reqVO.getDetails()) {
  172 + if (detail.getQuantity() != null) {
  173 + totalQuantity = totalQuantity.add(detail.getQuantity());
  174 + }
  175 + if (detail.getQuantity() != null && detail.getPrice() != null) {
  176 + totalPrice = totalPrice.add(detail.getQuantity().multiply(detail.getPrice()));
  177 + }
  178 + }
  179 + }
  180 + order.setTotalQuantity(totalQuantity).setTotalPrice(totalPrice);
  181 + }
  182 +
162 private WmsReceiptOrderDO validateReceiptOrderExists(Long id) { 183 private WmsReceiptOrderDO validateReceiptOrderExists(Long id) {
163 WmsReceiptOrderDO order = id == null ? null : receiptOrderMapper.selectById(id); 184 WmsReceiptOrderDO order = id == null ? null : receiptOrderMapper.selectById(id);
164 if (order == null) { 185 if (order == null) {
yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImplTest.java
@@ -115,7 +115,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { @@ -115,7 +115,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest {
115 .setSkuId(sku.getId()) 115 .setSkuId(sku.getId())
116 .setWarehouseId(100L) 116 .setWarehouseId(100L)
117 .setQuantity(new BigDecimal("7.00")) 117 .setQuantity(new BigDecimal("7.00"))
118 - .setAmount(new BigDecimal("140.00")) 118 + .setPrice(new BigDecimal("140.00"))
119 .setRemark("测试入库 2")); 119 .setRemark("测试入库 2"));
120 reqDTO.setItems(items); 120 reqDTO.setItems(items);
121 121
@@ -150,7 +150,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { @@ -150,7 +150,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest {
150 .setSkuId(sku.getId()) 150 .setSkuId(sku.getId())
151 .setWarehouseId(100L) 151 .setWarehouseId(100L)
152 .setQuantity(new BigDecimal("4.00")) 152 .setQuantity(new BigDecimal("4.00"))
153 - .setAmount(new BigDecimal("80.00")) 153 + .setPrice(new BigDecimal("80.00"))
154 .setRemark("测试入库 2")); 154 .setRemark("测试入库 2"));
155 reqDTO.setItems(items); 155 reqDTO.setItems(items);
156 156
@@ -184,13 +184,13 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { @@ -184,13 +184,13 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest {
184 .setSkuId(sku.getId()) 184 .setSkuId(sku.getId())
185 .setWarehouseId(200L) 185 .setWarehouseId(200L)
186 .setQuantity(new BigDecimal("3.00")) 186 .setQuantity(new BigDecimal("3.00"))
187 - .setAmount(new BigDecimal("60.00")) 187 + .setPrice(new BigDecimal("60.00"))
188 .setRemark("测试入库 2")); 188 .setRemark("测试入库 2"));
189 items.add(new WmsInventoryChangeReqDTO.Item() 189 items.add(new WmsInventoryChangeReqDTO.Item()
190 .setSkuId(sku.getId()) 190 .setSkuId(sku.getId())
191 .setWarehouseId(100L) 191 .setWarehouseId(100L)
192 .setQuantity(new BigDecimal("-2.00")) 192 .setQuantity(new BigDecimal("-2.00"))
193 - .setAmount(new BigDecimal("40.00")) 193 + .setPrice(new BigDecimal("40.00"))
194 .setRemark("测试出库")); 194 .setRemark("测试出库"));
195 reqDTO.setItems(items); 195 reqDTO.setItems(items);
196 196
@@ -263,7 +263,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { @@ -263,7 +263,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest {
263 .setSkuId(sku.getId()) 263 .setSkuId(sku.getId())
264 .setWarehouseId(200L) 264 .setWarehouseId(200L)
265 .setQuantity(new BigDecimal("-1.00")) 265 .setQuantity(new BigDecimal("-1.00"))
266 - .setAmount(new BigDecimal("20.00")) 266 + .setPrice(new BigDecimal("20.00"))
267 .setRemark("测试出库")); 267 .setRemark("测试出库"));
268 reqDTO.setItems(items); 268 reqDTO.setItems(items);
269 mockItemSkuAndItem(item, sku); 269 mockItemSkuAndItem(item, sku);
@@ -411,7 +411,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { @@ -411,7 +411,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest {
411 .setSkuId(skuId) 411 .setSkuId(skuId)
412 .setWarehouseId(warehouseId) 412 .setWarehouseId(warehouseId)
413 .setQuantity(new BigDecimal(quantity)) 413 .setQuantity(new BigDecimal(quantity))
414 - .setAmount(new BigDecimal("100.00")) 414 + .setPrice(new BigDecimal("100.00"))
415 .setRemark("测试入库"))); 415 .setRemark("测试入库")));
416 } 416 }
417 417
yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderDetailServiceImplTest.java
@@ -126,7 +126,7 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest { @@ -126,7 +126,7 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest {
126 reqVO.setId(id); 126 reqVO.setId(id);
127 reqVO.setSkuId(skuId); 127 reqVO.setSkuId(skuId);
128 reqVO.setQuantity(new BigDecimal(quantity)); 128 reqVO.setQuantity(new BigDecimal(quantity));
129 - reqVO.setAmount(new BigDecimal("100.00")); 129 + reqVO.setPrice(new BigDecimal("100.00"));
130 return reqVO; 130 return reqVO;
131 } 131 }
132 132
@@ -136,7 +136,7 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest { @@ -136,7 +136,7 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest {
136 .skuId(skuId) 136 .skuId(skuId)
137 .warehouseId(100L) 137 .warehouseId(100L)
138 .quantity(new BigDecimal(quantity)) 138 .quantity(new BigDecimal(quantity))
139 - .amount(new BigDecimal("100.00")) 139 + .price(new BigDecimal("100.00"))
140 .build(); 140 .build();
141 } 141 }
142 142
yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderServiceImplTest.java
1 package cn.iocoder.yudao.module.wms.service.order.receipt; 1 package cn.iocoder.yudao.module.wms.service.order.receipt;
2 2
3 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; 3 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
  4 +import cn.iocoder.yudao.module.wms.controller.admin.order.receipt.vo.detail.WmsReceiptOrderDetailSaveReqVO;
  5 +import cn.iocoder.yudao.module.wms.controller.admin.order.receipt.vo.order.WmsReceiptOrderSaveReqVO;
4 import cn.iocoder.yudao.module.wms.dal.dataobject.order.receipt.WmsReceiptOrderDO; 6 import cn.iocoder.yudao.module.wms.dal.dataobject.order.receipt.WmsReceiptOrderDO;
5 import cn.iocoder.yudao.module.wms.dal.dataobject.order.receipt.WmsReceiptOrderDetailDO; 7 import cn.iocoder.yudao.module.wms.dal.dataobject.order.receipt.WmsReceiptOrderDetailDO;
6 import cn.iocoder.yudao.module.wms.dal.mysql.order.receipt.WmsReceiptOrderDetailMapper; 8 import cn.iocoder.yudao.module.wms.dal.mysql.order.receipt.WmsReceiptOrderDetailMapper;
@@ -21,6 +23,7 @@ import org.springframework.test.context.bean.override.mockito.MockitoBean; @@ -21,6 +23,7 @@ import org.springframework.test.context.bean.override.mockito.MockitoBean;
21 23
22 import java.math.BigDecimal; 24 import java.math.BigDecimal;
23 import java.time.LocalDateTime; 25 import java.time.LocalDateTime;
  26 +import java.util.Arrays;
24 27
25 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; 28 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
26 import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.RECEIPT_ORDER_DETAIL_REQUIRED; 29 import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.RECEIPT_ORDER_DETAIL_REQUIRED;
@@ -53,6 +56,43 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { @@ -53,6 +56,43 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest {
53 private WmsInventoryService inventoryService; 56 private WmsInventoryService inventoryService;
54 57
55 @Test 58 @Test
  59 + public void testCreateReceiptOrder_calculateTotal() {
  60 + // mock 数据
  61 + WmsReceiptOrderSaveReqVO reqVO = createReceiptOrderSaveReqVO(null,
  62 + createReceiptOrderDetailReqVO(null, 2001L, "1.50", "10.00"),
  63 + createReceiptOrderDetailReqVO(null, 2002L, "2.50", "20.00"));
  64 +
  65 + // 调用
  66 + Long orderId = receiptOrderService.createReceiptOrder(reqVO);
  67 +
  68 + // 断言
  69 + WmsReceiptOrderDO dbOrder = receiptOrderMapper.selectById(orderId);
  70 + assertNotNull(dbOrder);
  71 + assertEquals(0, new BigDecimal("4.00").compareTo(dbOrder.getTotalQuantity()));
  72 + assertEquals(0, new BigDecimal("65.00").compareTo(dbOrder.getTotalPrice()));
  73 + assertEquals(2, receiptOrderDetailMapper.selectListByOrderId(orderId).size());
  74 + }
  75 +
  76 + @Test
  77 + public void testUpdateReceiptOrder_calculateTotal() {
  78 + // mock 数据
  79 + WmsReceiptOrderDO order = createReceiptOrder(100L);
  80 + receiptOrderMapper.insert(order);
  81 + WmsReceiptOrderSaveReqVO reqVO = createReceiptOrderSaveReqVO(order.getId(),
  82 + createReceiptOrderDetailReqVO(null, 2001L, "3.00", "30.00"));
  83 +
  84 + // 调用
  85 + receiptOrderService.updateReceiptOrder(reqVO);
  86 +
  87 + // 断言
  88 + WmsReceiptOrderDO dbOrder = receiptOrderMapper.selectById(order.getId());
  89 + assertNotNull(dbOrder);
  90 + assertEquals(0, new BigDecimal("3.00").compareTo(dbOrder.getTotalQuantity()));
  91 + assertEquals(0, new BigDecimal("90.00").compareTo(dbOrder.getTotalPrice()));
  92 + assertEquals(1, receiptOrderDetailMapper.selectListByOrderId(order.getId()).size());
  93 + }
  94 +
  95 + @Test
56 public void testCompleteReceiptOrder_success() { 96 public void testCompleteReceiptOrder_success() {
57 // mock 数据 97 // mock 数据
58 Long warehouseId = 100L; 98 Long warehouseId = 100L;
@@ -143,7 +183,29 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { @@ -143,7 +183,29 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest {
143 .setStatus(WmsOrderStatusEnum.PREPARE.getStatus()) 183 .setStatus(WmsOrderStatusEnum.PREPARE.getStatus())
144 .setWarehouseId(warehouseId) 184 .setWarehouseId(warehouseId)
145 .setTotalQuantity(new BigDecimal("2.00")) 185 .setTotalQuantity(new BigDecimal("2.00"))
146 - .setTotalAmount(new BigDecimal("20.00")); 186 + .setTotalPrice(new BigDecimal("20.00"));
  187 + }
  188 +
  189 + private static WmsReceiptOrderSaveReqVO createReceiptOrderSaveReqVO(Long id,
  190 + WmsReceiptOrderDetailSaveReqVO... details) {
  191 + WmsReceiptOrderSaveReqVO reqVO = new WmsReceiptOrderSaveReqVO();
  192 + reqVO.setId(id);
  193 + reqVO.setNo("RK202605120001");
  194 + reqVO.setType(WmsReceiptOrderTypeEnum.PURCHASE.getType());
  195 + reqVO.setOrderTime(LocalDateTime.of(2026, 5, 12, 0, 0));
  196 + reqVO.setWarehouseId(100L);
  197 + reqVO.setDetails(Arrays.asList(details));
  198 + return reqVO;
  199 + }
  200 +
  201 + private static WmsReceiptOrderDetailSaveReqVO createReceiptOrderDetailReqVO(Long id, Long skuId,
  202 + String quantity, String price) {
  203 + WmsReceiptOrderDetailSaveReqVO reqVO = new WmsReceiptOrderDetailSaveReqVO();
  204 + reqVO.setId(id);
  205 + reqVO.setSkuId(skuId);
  206 + reqVO.setQuantity(new BigDecimal(quantity));
  207 + reqVO.setPrice(new BigDecimal(price));
  208 + return reqVO;
147 } 209 }
148 210
149 private static WmsReceiptOrderDetailDO createReceiptOrderDetail(Long orderId, Long skuId, Long warehouseId) { 211 private static WmsReceiptOrderDetailDO createReceiptOrderDetail(Long orderId, Long skuId, Long warehouseId) {
@@ -152,7 +214,7 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { @@ -152,7 +214,7 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest {
152 .skuId(skuId) 214 .skuId(skuId)
153 .warehouseId(warehouseId) 215 .warehouseId(warehouseId)
154 .quantity(new BigDecimal("2.00")) 216 .quantity(new BigDecimal("2.00"))
155 - .amount(new BigDecimal("20.00")) 217 + .price(new BigDecimal("20.00"))
156 .build(); 218 .build();
157 } 219 }
158 220
yudao-module-wms/src/test/resources/sql/create_tables.sql
@@ -60,7 +60,7 @@ CREATE TABLE IF NOT EXISTS &quot;wms_inventory_history&quot; ( @@ -60,7 +60,7 @@ CREATE TABLE IF NOT EXISTS &quot;wms_inventory_history&quot; (
60 "quantity" decimal(24, 6) NOT NULL DEFAULT '0', 60 "quantity" decimal(24, 6) NOT NULL DEFAULT '0',
61 "before_quantity" decimal(24, 6) DEFAULT NULL, 61 "before_quantity" decimal(24, 6) DEFAULT NULL,
62 "after_quantity" decimal(24, 6) DEFAULT NULL, 62 "after_quantity" decimal(24, 6) DEFAULT NULL,
63 - "amount" decimal(24, 6) DEFAULT NULL, 63 + "price" decimal(24, 6) DEFAULT NULL,
64 "remark" varchar(255) DEFAULT NULL, 64 "remark" varchar(255) DEFAULT NULL,
65 "order_id" bigint DEFAULT NULL, 65 "order_id" bigint DEFAULT NULL,
66 "order_no" varchar(64) DEFAULT NULL, 66 "order_no" varchar(64) DEFAULT NULL,
@@ -85,7 +85,7 @@ CREATE TABLE IF NOT EXISTS &quot;wms_receipt_order&quot; ( @@ -85,7 +85,7 @@ CREATE TABLE IF NOT EXISTS &quot;wms_receipt_order&quot; (
85 "remark" varchar(255) DEFAULT NULL, 85 "remark" varchar(255) DEFAULT NULL,
86 "warehouse_id" bigint NOT NULL, 86 "warehouse_id" bigint NOT NULL,
87 "total_quantity" decimal(20, 2) NOT NULL DEFAULT '0', 87 "total_quantity" decimal(20, 2) NOT NULL DEFAULT '0',
88 - "total_amount" decimal(10, 2) DEFAULT NULL, 88 + "total_price" decimal(10, 2) DEFAULT NULL,
89 "creator" varchar(64) DEFAULT '', 89 "creator" varchar(64) DEFAULT '',
90 "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 90 "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
91 "updater" varchar(64) DEFAULT '', 91 "updater" varchar(64) DEFAULT '',
@@ -101,7 +101,7 @@ CREATE TABLE IF NOT EXISTS &quot;wms_receipt_order_detail&quot; ( @@ -101,7 +101,7 @@ CREATE TABLE IF NOT EXISTS &quot;wms_receipt_order_detail&quot; (
101 "sku_id" bigint NOT NULL, 101 "sku_id" bigint NOT NULL,
102 "warehouse_id" bigint NOT NULL, 102 "warehouse_id" bigint NOT NULL,
103 "quantity" decimal(20, 2) NOT NULL DEFAULT '0', 103 "quantity" decimal(20, 2) NOT NULL DEFAULT '0',
104 - "amount" decimal(10, 2) DEFAULT NULL, 104 + "price" decimal(10, 2) DEFAULT NULL,
105 "creator" varchar(64) DEFAULT '', 105 "creator" varchar(64) DEFAULT '',
106 "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 106 "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
107 "updater" varchar(64) DEFAULT '', 107 "updater" varchar(64) DEFAULT '',