Commit 5f31b32c121e167c29047568fbb89611a493d58e

Authored by YunaiV
1 parent 34c0197b

feat(wms): 持久化出入库移库明细行金额并补全库存流水金额展示

Showing 29 changed files with 251 additions and 41 deletions
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/inventory/vo/history/WmsInventoryHistoryRespVO.java
@@ -42,6 +42,8 @@ public class WmsInventoryHistoryRespVO { @@ -42,6 +42,8 @@ public class WmsInventoryHistoryRespVO {
42 private BigDecimal afterQuantity; 42 private BigDecimal afterQuantity;
43 @Schema(description = "单价", example = "1000.00") 43 @Schema(description = "单价", example = "1000.00")
44 private BigDecimal price; 44 private BigDecimal price;
  45 + @Schema(description = "库存变化金额", example = "10000.00")
  46 + private BigDecimal totalPrice;
45 @Schema(description = "备注", example = "备注") 47 @Schema(description = "备注", example = "备注")
46 private String remark; 48 private String remark;
47 49
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/movement/vo/detail/WmsMovementOrderDetailRespVO.java
@@ -55,6 +55,9 @@ public class WmsMovementOrderDetailRespVO { @@ -55,6 +55,9 @@ public class WmsMovementOrderDetailRespVO {
55 @Schema(description = "单价", example = "100.00") 55 @Schema(description = "单价", example = "100.00")
56 private BigDecimal price; 56 private BigDecimal price;
57 57
  58 + @Schema(description = "行金额", example = "1000.00")
  59 + private BigDecimal totalPrice;
  60 +
58 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) 61 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
59 private LocalDateTime createTime; 62 private LocalDateTime createTime;
60 63
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/movement/vo/detail/WmsMovementOrderDetailSaveReqVO.java
@@ -27,4 +27,8 @@ public class WmsMovementOrderDetailSaveReqVO { @@ -27,4 +27,8 @@ public class WmsMovementOrderDetailSaveReqVO {
27 @DecimalMin(value = "0", message = "单价不能小于 0") 27 @DecimalMin(value = "0", message = "单价不能小于 0")
28 private BigDecimal price; 28 private BigDecimal price;
29 29
  30 + @Schema(description = "行金额", example = "1000.00")
  31 + @DecimalMin(value = "0", message = "行金额不能小于 0")
  32 + private BigDecimal totalPrice;
  33 +
30 } 34 }
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/detail/WmsReceiptOrderDetailRespVO.java
@@ -49,6 +49,9 @@ public class WmsReceiptOrderDetailRespVO { @@ -49,6 +49,9 @@ public class WmsReceiptOrderDetailRespVO {
49 @Schema(description = "单价", example = "1000.00") 49 @Schema(description = "单价", example = "1000.00")
50 private BigDecimal price; 50 private BigDecimal price;
51 51
  52 + @Schema(description = "行金额", example = "1500.00")
  53 + private BigDecimal totalPrice;
  54 +
52 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) 55 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
53 private LocalDateTime createTime; 56 private LocalDateTime createTime;
54 57
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/receipt/vo/detail/WmsReceiptOrderDetailSaveReqVO.java
@@ -27,4 +27,8 @@ public class WmsReceiptOrderDetailSaveReqVO { @@ -27,4 +27,8 @@ public class WmsReceiptOrderDetailSaveReqVO {
27 @DecimalMin(value = "0", message = "单价不能小于 0") 27 @DecimalMin(value = "0", message = "单价不能小于 0")
28 private BigDecimal price; 28 private BigDecimal price;
29 29
  30 + @Schema(description = "行金额", example = "1500.00")
  31 + @DecimalMin(value = "0", message = "行金额不能小于 0")
  32 + private BigDecimal totalPrice;
  33 +
30 } 34 }
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/shipment/vo/detail/WmsShipmentOrderDetailRespVO.java
@@ -49,6 +49,9 @@ public class WmsShipmentOrderDetailRespVO { @@ -49,6 +49,9 @@ public class WmsShipmentOrderDetailRespVO {
49 @Schema(description = "单价", example = "100.00") 49 @Schema(description = "单价", example = "100.00")
50 private BigDecimal price; 50 private BigDecimal price;
51 51
  52 + @Schema(description = "行金额", example = "1000.00")
  53 + private BigDecimal totalPrice;
  54 +
52 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) 55 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
53 private LocalDateTime createTime; 56 private LocalDateTime createTime;
54 57
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/order/shipment/vo/detail/WmsShipmentOrderDetailSaveReqVO.java
@@ -27,4 +27,8 @@ public class WmsShipmentOrderDetailSaveReqVO { @@ -27,4 +27,8 @@ public class WmsShipmentOrderDetailSaveReqVO {
27 @DecimalMin(value = "0", message = "单价不能小于 0") 27 @DecimalMin(value = "0", message = "单价不能小于 0")
28 private BigDecimal price; 28 private BigDecimal price;
29 29
  30 + @Schema(description = "行金额", example = "1000.00")
  31 + @DecimalMin(value = "0", message = "行金额不能小于 0")
  32 + private BigDecimal totalPrice;
  33 +
30 } 34 }
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/inventory/WmsInventoryHistoryDO.java
@@ -66,6 +66,10 @@ public class WmsInventoryHistoryDO extends BaseDO { @@ -66,6 +66,10 @@ public class WmsInventoryHistoryDO extends BaseDO {
66 */ 66 */
67 private BigDecimal price; 67 private BigDecimal price;
68 /** 68 /**
  69 + * 库存变化金额
  70 + */
  71 + private BigDecimal totalPrice;
  72 + /**
69 * 备注 73 * 备注
70 */ 74 */
71 private String remark; 75 private String remark;
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/check/WmsCheckOrderDO.java
@@ -62,15 +62,15 @@ public class WmsCheckOrderDO extends BaseDO { @@ -62,15 +62,15 @@ public class WmsCheckOrderDO extends BaseDO {
62 // ========= 汇总金额字段 ========= 62 // ========= 汇总金额字段 =========
63 63
64 /** 64 /**
65 - * 盈亏数量 65 + * 盈亏数量(实盘数量 - 账面数量)
66 */ 66 */
67 private BigDecimal totalQuantity; 67 private BigDecimal totalQuantity;
68 /** 68 /**
69 - * 总金额(账面金额) 69 + * 总金额(账面数量 * 单价)
70 */ 70 */
71 private BigDecimal totalPrice; 71 private BigDecimal totalPrice;
72 /** 72 /**
73 - * 实际金额 73 + * 实际金额(实盘数量 * 单价)
74 */ 74 */
75 private BigDecimal actualPrice; 75 private BigDecimal actualPrice;
76 76
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/check/WmsCheckOrderDetailDO.java
@@ -67,7 +67,7 @@ public class WmsCheckOrderDetailDO extends BaseDO { @@ -67,7 +67,7 @@ public class WmsCheckOrderDetailDO extends BaseDO {
67 */ 67 */
68 private LocalDateTime receiptTime; 68 private LocalDateTime receiptTime;
69 69
70 - // ========= 汇总金额字段 ========= 70 + // ========= 数量金额字段 =========
71 71
72 /** 72 /**
73 * 账面数量 73 * 账面数量
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/movement/WmsMovementOrderDetailDO.java
@@ -63,7 +63,7 @@ public class WmsMovementOrderDetailDO extends BaseDO { @@ -63,7 +63,7 @@ public class WmsMovementOrderDetailDO extends BaseDO {
63 */ 63 */
64 private Long targetWarehouseId; 64 private Long targetWarehouseId;
65 65
66 - // ========= 汇总金额字段 ========= 66 + // ========= 数量金额字段 =========
67 67
68 /** 68 /**
69 * 移库数量 69 * 移库数量
@@ -73,5 +73,9 @@ public class WmsMovementOrderDetailDO extends BaseDO { @@ -73,5 +73,9 @@ public class WmsMovementOrderDetailDO extends BaseDO {
73 * 单价 73 * 单价
74 */ 74 */
75 private BigDecimal price; 75 private BigDecimal price;
  76 + /**
  77 + * 行金额(数量 * 单价)
  78 + */
  79 + private BigDecimal totalPrice;
76 80
77 } 81 }
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/receipt/WmsReceiptOrderDetailDO.java
@@ -64,5 +64,9 @@ public class WmsReceiptOrderDetailDO extends BaseDO { @@ -64,5 +64,9 @@ public class WmsReceiptOrderDetailDO extends BaseDO {
64 * 单价 64 * 单价
65 */ 65 */
66 private BigDecimal price; 66 private BigDecimal price;
  67 + /**
  68 + * 行金额(数量 * 单价)
  69 + */
  70 + private BigDecimal totalPrice;
67 71
68 } 72 }
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/dataobject/order/shipment/WmsShipmentOrderDetailDO.java
@@ -54,7 +54,7 @@ public class WmsShipmentOrderDetailDO extends BaseDO { @@ -54,7 +54,7 @@ public class WmsShipmentOrderDetailDO extends BaseDO {
54 */ 54 */
55 private Long warehouseId; 55 private Long warehouseId;
56 56
57 - // ========= 汇总金额字段 ========= 57 + // ========= 数量金额字段 =========
58 58
59 /** 59 /**
60 * 出库数量 60 * 出库数量
@@ -64,5 +64,9 @@ public class WmsShipmentOrderDetailDO extends BaseDO { @@ -64,5 +64,9 @@ public class WmsShipmentOrderDetailDO extends BaseDO {
64 * 单价 64 * 单价
65 */ 65 */
66 private BigDecimal price; 66 private BigDecimal price;
  67 + /**
  68 + * 行金额(数量 * 单价)
  69 + */
  70 + private BigDecimal totalPrice;
67 71
68 } 72 }
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImpl.java
@@ -215,7 +215,7 @@ public class WmsInventoryServiceImpl implements WmsInventoryService { @@ -215,7 +215,7 @@ public class WmsInventoryServiceImpl implements WmsInventoryService {
215 return new WmsInventoryHistoryDO() 215 return new WmsInventoryHistoryDO()
216 .setWarehouseId(item.getWarehouseId()).setSkuId(item.getSkuId()) 216 .setWarehouseId(item.getWarehouseId()).setSkuId(item.getSkuId())
217 .setQuantity(item.getQuantity()).setBeforeQuantity(result.get(0)).setAfterQuantity(result.get(1)) 217 .setQuantity(item.getQuantity()).setBeforeQuantity(result.get(0)).setAfterQuantity(result.get(1))
218 - .setPrice(item.getPrice()).setRemark(item.getRemark()) 218 + .setPrice(item.getPrice()).setTotalPrice(item.getTotalPrice()).setRemark(item.getRemark())
219 .setOrderId(reqDTO.getOrderId()).setOrderNo(reqDTO.getOrderNo()).setOrderType(reqDTO.getOrderType()); 219 .setOrderId(reqDTO.getOrderId()).setOrderNo(reqDTO.getOrderNo()).setOrderType(reqDTO.getOrderType());
220 } 220 }
221 221
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/dto/WmsInventoryChangeReqDTO.java
@@ -60,6 +60,10 @@ public class WmsInventoryChangeReqDTO { @@ -60,6 +60,10 @@ public class WmsInventoryChangeReqDTO {
60 */ 60 */
61 private BigDecimal price; 61 private BigDecimal price;
62 /** 62 /**
  63 + * 库存变化金额
  64 + */
  65 + private BigDecimal totalPrice;
  66 + /**
63 * 备注 67 * 备注
64 */ 68 */
65 private String remark; 69 private String remark;
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderDetailServiceImpl.java
@@ -112,10 +112,19 @@ public class WmsMovementOrderDetailServiceImpl implements WmsMovementOrderDetail @@ -112,10 +112,19 @@ public class WmsMovementOrderDetailServiceImpl implements WmsMovementOrderDetail
112 // 校验 SKU 存在 112 // 校验 SKU 存在
113 itemSkuService.validateItemSkuExists(detail.getSkuId()); 113 itemSkuService.validateItemSkuExists(detail.getSkuId());
114 // 构建对象 114 // 构建对象
115 - return BeanUtils.toBean(detail, WmsMovementOrderDetailDO.class) 115 + WmsMovementOrderDetailDO detailDO = BeanUtils.toBean(detail, WmsMovementOrderDetailDO.class)
116 .setSourceWarehouseId(reqVO.getSourceWarehouseId()) 116 .setSourceWarehouseId(reqVO.getSourceWarehouseId())
117 .setTargetWarehouseId(reqVO.getTargetWarehouseId()); 117 .setTargetWarehouseId(reqVO.getTargetWarehouseId());
  118 + fillDetailTotalPrice(detailDO);
  119 + return detailDO;
118 }); 120 });
119 } 121 }
120 122
  123 + private static void fillDetailTotalPrice(WmsMovementOrderDetailDO detail) {
  124 + if (detail.getTotalPrice() != null || detail.getQuantity() == null || detail.getPrice() == null) {
  125 + return;
  126 + }
  127 + detail.setTotalPrice(detail.getQuantity().multiply(detail.getPrice()));
  128 + }
  129 +
121 } 130 }
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderServiceImpl.java
@@ -169,14 +169,26 @@ public class WmsMovementOrderServiceImpl implements WmsMovementOrderService { @@ -169,14 +169,26 @@ public class WmsMovementOrderServiceImpl implements WmsMovementOrderService {
169 if (detail.getQuantity() != null) { 169 if (detail.getQuantity() != null) {
170 totalQuantity = totalQuantity.add(detail.getQuantity()); 170 totalQuantity = totalQuantity.add(detail.getQuantity());
171 } 171 }
172 - if (detail.getQuantity() != null && detail.getPrice() != null) {  
173 - totalPrice = totalPrice.add(detail.getQuantity().multiply(detail.getPrice())); 172 + BigDecimal detailTotalPrice = getDetailTotalPrice(detail.getQuantity(), detail.getPrice(),
  173 + detail.getTotalPrice());
  174 + if (detailTotalPrice != null) {
  175 + totalPrice = totalPrice.add(detailTotalPrice);
174 } 176 }
175 } 177 }
176 } 178 }
177 order.setTotalQuantity(totalQuantity).setTotalPrice(totalPrice); 179 order.setTotalQuantity(totalQuantity).setTotalPrice(totalPrice);
178 } 180 }
179 181
  182 + private static BigDecimal getDetailTotalPrice(BigDecimal quantity, BigDecimal price, BigDecimal totalPrice) {
  183 + if (totalPrice != null) {
  184 + return totalPrice;
  185 + }
  186 + if (quantity == null || price == null) {
  187 + return null;
  188 + }
  189 + return quantity.multiply(price);
  190 + }
  191 +
180 private WmsMovementOrderDO validateMovementOrderExists(Long id) { 192 private WmsMovementOrderDO validateMovementOrderExists(Long id) {
181 WmsMovementOrderDO order = id == null ? null : movementOrderMapper.selectById(id); 193 WmsMovementOrderDO order = id == null ? null : movementOrderMapper.selectById(id);
182 if (order == null) { 194 if (order == null) {
@@ -208,14 +220,22 @@ public class WmsMovementOrderServiceImpl implements WmsMovementOrderService { @@ -208,14 +220,22 @@ public class WmsMovementOrderServiceImpl implements WmsMovementOrderService {
208 private void changeInventory(WmsMovementOrderDO order, List<WmsMovementOrderDetailDO> details) { 220 private void changeInventory(WmsMovementOrderDO order, List<WmsMovementOrderDetailDO> details) {
209 List<WmsInventoryChangeReqDTO.Item> items = new ArrayList<>(details.size() * 2); 221 List<WmsInventoryChangeReqDTO.Item> items = new ArrayList<>(details.size() * 2);
210 for (WmsMovementOrderDetailDO detail : details) { 222 for (WmsMovementOrderDetailDO detail : details) {
  223 + BigDecimal detailTotalPrice = getDetailTotalPrice(detail.getQuantity(), detail.getPrice(),
  224 + detail.getTotalPrice());
211 items.add(BeanUtils.toBean(detail, WmsInventoryChangeReqDTO.Item.class) 225 items.add(BeanUtils.toBean(detail, WmsInventoryChangeReqDTO.Item.class)
212 - .setWarehouseId(detail.getSourceWarehouseId()).setQuantity(detail.getQuantity().negate())); 226 + .setWarehouseId(detail.getSourceWarehouseId()).setQuantity(detail.getQuantity().negate())
  227 + .setTotalPrice(negate(detailTotalPrice)));
213 items.add(BeanUtils.toBean(detail, WmsInventoryChangeReqDTO.Item.class) 228 items.add(BeanUtils.toBean(detail, WmsInventoryChangeReqDTO.Item.class)
214 - .setWarehouseId(detail.getTargetWarehouseId()).setQuantity(detail.getQuantity())); 229 + .setWarehouseId(detail.getTargetWarehouseId()).setQuantity(detail.getQuantity())
  230 + .setTotalPrice(detailTotalPrice));
215 } 231 }
216 inventoryService.changeInventory(new WmsInventoryChangeReqDTO() 232 inventoryService.changeInventory(new WmsInventoryChangeReqDTO()
217 .setOrderId(order.getId()).setOrderNo(order.getNo()) 233 .setOrderId(order.getId()).setOrderNo(order.getNo())
218 .setOrderType(WmsOrderTypeEnum.MOVEMENT.getType()).setItems(items)); 234 .setOrderType(WmsOrderTypeEnum.MOVEMENT.getType()).setItems(items));
219 } 235 }
220 236
  237 + private static BigDecimal negate(BigDecimal value) {
  238 + return value == null ? null : value.negate();
  239 + }
  240 +
221 } 241 }
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderDetailServiceImpl.java
@@ -112,8 +112,18 @@ public class WmsReceiptOrderDetailServiceImpl implements WmsReceiptOrderDetailSe @@ -112,8 +112,18 @@ public class WmsReceiptOrderDetailServiceImpl implements WmsReceiptOrderDetailSe
112 // 校验 SKU 存在 112 // 校验 SKU 存在
113 itemSkuService.validateItemSkuExists(detail.getSkuId()); 113 itemSkuService.validateItemSkuExists(detail.getSkuId());
114 // 构建对象 114 // 构建对象
115 - return BeanUtils.toBean(detail, WmsReceiptOrderDetailDO.class).setWarehouseId(reqVO.getWarehouseId()); 115 + WmsReceiptOrderDetailDO detailDO = BeanUtils.toBean(detail, WmsReceiptOrderDetailDO.class)
  116 + .setWarehouseId(reqVO.getWarehouseId());
  117 + fillDetailTotalPrice(detailDO);
  118 + return detailDO;
116 }); 119 });
117 } 120 }
118 121
  122 + private static void fillDetailTotalPrice(WmsReceiptOrderDetailDO detail) {
  123 + if (detail.getTotalPrice() != null || detail.getQuantity() == null || detail.getPrice() == null) {
  124 + return;
  125 + }
  126 + detail.setTotalPrice(detail.getQuantity().multiply(detail.getPrice()));
  127 + }
  128 +
119 } 129 }
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderServiceImpl.java
@@ -176,14 +176,26 @@ public class WmsReceiptOrderServiceImpl implements WmsReceiptOrderService { @@ -176,14 +176,26 @@ public class WmsReceiptOrderServiceImpl implements WmsReceiptOrderService {
176 if (detail.getQuantity() != null) { 176 if (detail.getQuantity() != null) {
177 totalQuantity = totalQuantity.add(detail.getQuantity()); 177 totalQuantity = totalQuantity.add(detail.getQuantity());
178 } 178 }
179 - if (detail.getQuantity() != null && detail.getPrice() != null) {  
180 - totalPrice = totalPrice.add(detail.getQuantity().multiply(detail.getPrice())); 179 + BigDecimal detailTotalPrice = getDetailTotalPrice(detail.getQuantity(), detail.getPrice(),
  180 + detail.getTotalPrice());
  181 + if (detailTotalPrice != null) {
  182 + totalPrice = totalPrice.add(detailTotalPrice);
181 } 183 }
182 } 184 }
183 } 185 }
184 order.setTotalQuantity(totalQuantity).setTotalPrice(totalPrice); 186 order.setTotalQuantity(totalQuantity).setTotalPrice(totalPrice);
185 } 187 }
186 188
  189 + private static BigDecimal getDetailTotalPrice(BigDecimal quantity, BigDecimal price, BigDecimal totalPrice) {
  190 + if (totalPrice != null) {
  191 + return totalPrice;
  192 + }
  193 + if (quantity == null || price == null) {
  194 + return null;
  195 + }
  196 + return quantity.multiply(price);
  197 + }
  198 +
187 private WmsReceiptOrderDO validateReceiptOrderExists(Long id) { 199 private WmsReceiptOrderDO validateReceiptOrderExists(Long id) {
188 WmsReceiptOrderDO order = id == null ? null : receiptOrderMapper.selectById(id); 200 WmsReceiptOrderDO order = id == null ? null : receiptOrderMapper.selectById(id);
189 if (order == null) { 201 if (order == null) {
@@ -216,7 +228,9 @@ public class WmsReceiptOrderServiceImpl implements WmsReceiptOrderService { @@ -216,7 +228,9 @@ public class WmsReceiptOrderServiceImpl implements WmsReceiptOrderService {
216 */ 228 */
217 private void createInventory(WmsReceiptOrderDO order, List<WmsReceiptOrderDetailDO> details) { 229 private void createInventory(WmsReceiptOrderDO order, List<WmsReceiptOrderDetailDO> details) {
218 List<WmsInventoryChangeReqDTO.Item> items = convertList(details, 230 List<WmsInventoryChangeReqDTO.Item> items = convertList(details,
219 - detail -> BeanUtils.toBean(detail, WmsInventoryChangeReqDTO.Item.class)); 231 + detail -> BeanUtils.toBean(detail, WmsInventoryChangeReqDTO.Item.class)
  232 + .setTotalPrice(getDetailTotalPrice(detail.getQuantity(), detail.getPrice(),
  233 + detail.getTotalPrice())));
220 inventoryService.changeInventory(new WmsInventoryChangeReqDTO() 234 inventoryService.changeInventory(new WmsInventoryChangeReqDTO()
221 .setOrderId(order.getId()).setOrderNo(order.getNo()) 235 .setOrderId(order.getId()).setOrderNo(order.getNo())
222 .setOrderType(WmsOrderTypeEnum.RECEIPT.getType()).setItems(items)); 236 .setOrderType(WmsOrderTypeEnum.RECEIPT.getType()).setItems(items));
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderDetailServiceImpl.java
@@ -112,8 +112,18 @@ public class WmsShipmentOrderDetailServiceImpl implements WmsShipmentOrderDetail @@ -112,8 +112,18 @@ public class WmsShipmentOrderDetailServiceImpl implements WmsShipmentOrderDetail
112 // 校验 SKU 存在 112 // 校验 SKU 存在
113 itemSkuService.validateItemSkuExists(detail.getSkuId()); 113 itemSkuService.validateItemSkuExists(detail.getSkuId());
114 // 构建对象 114 // 构建对象
115 - return BeanUtils.toBean(detail, WmsShipmentOrderDetailDO.class).setWarehouseId(reqVO.getWarehouseId()); 115 + WmsShipmentOrderDetailDO detailDO = BeanUtils.toBean(detail, WmsShipmentOrderDetailDO.class)
  116 + .setWarehouseId(reqVO.getWarehouseId());
  117 + fillDetailTotalPrice(detailDO);
  118 + return detailDO;
116 }); 119 });
117 } 120 }
118 121
  122 + private static void fillDetailTotalPrice(WmsShipmentOrderDetailDO detail) {
  123 + if (detail.getTotalPrice() != null || detail.getQuantity() == null || detail.getPrice() == null) {
  124 + return;
  125 + }
  126 + detail.setTotalPrice(detail.getQuantity().multiply(detail.getPrice()));
  127 + }
  128 +
119 } 129 }
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderServiceImpl.java
@@ -176,14 +176,26 @@ public class WmsShipmentOrderServiceImpl implements WmsShipmentOrderService { @@ -176,14 +176,26 @@ public class WmsShipmentOrderServiceImpl implements WmsShipmentOrderService {
176 if (detail.getQuantity() != null) { 176 if (detail.getQuantity() != null) {
177 totalQuantity = totalQuantity.add(detail.getQuantity()); 177 totalQuantity = totalQuantity.add(detail.getQuantity());
178 } 178 }
179 - if (detail.getQuantity() != null && detail.getPrice() != null) {  
180 - totalPrice = totalPrice.add(detail.getQuantity().multiply(detail.getPrice())); 179 + BigDecimal detailTotalPrice = getDetailTotalPrice(detail.getQuantity(), detail.getPrice(),
  180 + detail.getTotalPrice());
  181 + if (detailTotalPrice != null) {
  182 + totalPrice = totalPrice.add(detailTotalPrice);
181 } 183 }
182 } 184 }
183 } 185 }
184 order.setTotalQuantity(totalQuantity).setTotalPrice(totalPrice); 186 order.setTotalQuantity(totalQuantity).setTotalPrice(totalPrice);
185 } 187 }
186 188
  189 + private static BigDecimal getDetailTotalPrice(BigDecimal quantity, BigDecimal price, BigDecimal totalPrice) {
  190 + if (totalPrice != null) {
  191 + return totalPrice;
  192 + }
  193 + if (quantity == null || price == null) {
  194 + return null;
  195 + }
  196 + return quantity.multiply(price);
  197 + }
  198 +
187 private WmsShipmentOrderDO validateShipmentOrderExists(Long id) { 199 private WmsShipmentOrderDO validateShipmentOrderExists(Long id) {
188 WmsShipmentOrderDO order = id == null ? null : shipmentOrderMapper.selectById(id); 200 WmsShipmentOrderDO order = id == null ? null : shipmentOrderMapper.selectById(id);
189 if (order == null) { 201 if (order == null) {
@@ -215,10 +227,16 @@ public class WmsShipmentOrderServiceImpl implements WmsShipmentOrderService { @@ -215,10 +227,16 @@ public class WmsShipmentOrderServiceImpl implements WmsShipmentOrderService {
215 private void changeInventory(WmsShipmentOrderDO order, List<WmsShipmentOrderDetailDO> details) { 227 private void changeInventory(WmsShipmentOrderDO order, List<WmsShipmentOrderDetailDO> details) {
216 List<WmsInventoryChangeReqDTO.Item> items = convertList(details, 228 List<WmsInventoryChangeReqDTO.Item> items = convertList(details,
217 detail -> BeanUtils.toBean(detail, WmsInventoryChangeReqDTO.Item.class) 229 detail -> BeanUtils.toBean(detail, WmsInventoryChangeReqDTO.Item.class)
218 - .setQuantity(detail.getQuantity().multiply(BigDecimal.valueOf(-1L)))); 230 + .setQuantity(detail.getQuantity().negate())
  231 + .setTotalPrice(negate(getDetailTotalPrice(detail.getQuantity(), detail.getPrice(),
  232 + detail.getTotalPrice()))));
219 inventoryService.changeInventory(new WmsInventoryChangeReqDTO() 233 inventoryService.changeInventory(new WmsInventoryChangeReqDTO()
220 .setOrderId(order.getId()).setOrderNo(order.getNo()) 234 .setOrderId(order.getId()).setOrderNo(order.getNo())
221 .setOrderType(WmsOrderTypeEnum.SHIPMENT.getType()).setItems(items)); 235 .setOrderType(WmsOrderTypeEnum.SHIPMENT.getType()).setItems(items));
222 } 236 }
223 237
  238 + private static BigDecimal negate(BigDecimal value) {
  239 + return value == null ? null : value.negate();
  240 + }
  241 +
224 } 242 }
yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImplTest.java
@@ -83,6 +83,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { @@ -83,6 +83,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest {
83 assertEquals(100L, history.getWarehouseId()); 83 assertEquals(100L, history.getWarehouseId());
84 assertEquals(0, BigDecimal.ZERO.compareTo(history.getBeforeQuantity())); 84 assertEquals(0, BigDecimal.ZERO.compareTo(history.getBeforeQuantity()));
85 assertEquals(0, new BigDecimal("5.00").compareTo(history.getAfterQuantity())); 85 assertEquals(0, new BigDecimal("5.00").compareTo(history.getAfterQuantity()));
  86 + assertEquals(0, new BigDecimal("500.00").compareTo(history.getTotalPrice()));
86 assertEquals(reqDTO.getOrderId(), history.getOrderId()); 87 assertEquals(reqDTO.getOrderId(), history.getOrderId());
87 assertEquals(reqDTO.getOrderNo(), history.getOrderNo()); 88 assertEquals(reqDTO.getOrderNo(), history.getOrderNo());
88 assertEquals(reqDTO.getOrderType(), history.getOrderType()); 89 assertEquals(reqDTO.getOrderType(), history.getOrderType());
@@ -110,6 +111,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { @@ -110,6 +111,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest {
110 assertEquals(0, new BigDecimal("2.00").compareTo(history.getBeforeQuantity())); 111 assertEquals(0, new BigDecimal("2.00").compareTo(history.getBeforeQuantity()));
111 assertEquals(0, new BigDecimal("5.00").compareTo(history.getAfterQuantity())); 112 assertEquals(0, new BigDecimal("5.00").compareTo(history.getAfterQuantity()));
112 assertEquals(0, new BigDecimal("3.00").compareTo(history.getQuantity())); 113 assertEquals(0, new BigDecimal("3.00").compareTo(history.getQuantity()));
  114 + assertEquals(0, new BigDecimal("300.00").compareTo(history.getTotalPrice()));
113 } 115 }
114 116
115 @Test 117 @Test
@@ -124,6 +126,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { @@ -124,6 +126,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest {
124 .setWarehouseId(100L) 126 .setWarehouseId(100L)
125 .setQuantity(new BigDecimal("7.00")) 127 .setQuantity(new BigDecimal("7.00"))
126 .setPrice(new BigDecimal("140.00")) 128 .setPrice(new BigDecimal("140.00"))
  129 + .setTotalPrice(new BigDecimal("980.00"))
127 .setRemark("测试入库 2")); 130 .setRemark("测试入库 2"));
128 reqDTO.setItems(items); 131 reqDTO.setItems(items);
129 132
@@ -141,9 +144,11 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { @@ -141,9 +144,11 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest {
141 assertEquals(0, BigDecimal.ZERO.compareTo(histories.get(0).getBeforeQuantity())); 144 assertEquals(0, BigDecimal.ZERO.compareTo(histories.get(0).getBeforeQuantity()));
142 assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(0).getAfterQuantity())); 145 assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(0).getAfterQuantity()));
143 assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(0).getQuantity())); 146 assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(0).getQuantity()));
  147 + assertEquals(0, new BigDecimal("500.00").compareTo(histories.get(0).getTotalPrice()));
144 assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(1).getBeforeQuantity())); 148 assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(1).getBeforeQuantity()));
145 assertEquals(0, new BigDecimal("12.00").compareTo(histories.get(1).getAfterQuantity())); 149 assertEquals(0, new BigDecimal("12.00").compareTo(histories.get(1).getAfterQuantity()));
146 assertEquals(0, new BigDecimal("7.00").compareTo(histories.get(1).getQuantity())); 150 assertEquals(0, new BigDecimal("7.00").compareTo(histories.get(1).getQuantity()));
  151 + assertEquals(0, new BigDecimal("980.00").compareTo(histories.get(1).getTotalPrice()));
147 } 152 }
148 153
149 @Test 154 @Test
@@ -159,6 +164,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { @@ -159,6 +164,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest {
159 .setWarehouseId(100L) 164 .setWarehouseId(100L)
160 .setQuantity(new BigDecimal("4.00")) 165 .setQuantity(new BigDecimal("4.00"))
161 .setPrice(new BigDecimal("80.00")) 166 .setPrice(new BigDecimal("80.00"))
  167 + .setTotalPrice(new BigDecimal("320.00"))
162 .setRemark("测试入库 2")); 168 .setRemark("测试入库 2"));
163 reqDTO.setItems(items); 169 reqDTO.setItems(items);
164 170
@@ -176,9 +182,11 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { @@ -176,9 +182,11 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest {
176 assertEquals(0, new BigDecimal("2.00").compareTo(histories.get(0).getBeforeQuantity())); 182 assertEquals(0, new BigDecimal("2.00").compareTo(histories.get(0).getBeforeQuantity()));
177 assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(0).getAfterQuantity())); 183 assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(0).getAfterQuantity()));
178 assertEquals(0, new BigDecimal("3.00").compareTo(histories.get(0).getQuantity())); 184 assertEquals(0, new BigDecimal("3.00").compareTo(histories.get(0).getQuantity()));
  185 + assertEquals(0, new BigDecimal("300.00").compareTo(histories.get(0).getTotalPrice()));
179 assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(1).getBeforeQuantity())); 186 assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(1).getBeforeQuantity()));
180 assertEquals(0, new BigDecimal("9.00").compareTo(histories.get(1).getAfterQuantity())); 187 assertEquals(0, new BigDecimal("9.00").compareTo(histories.get(1).getAfterQuantity()));
181 assertEquals(0, new BigDecimal("4.00").compareTo(histories.get(1).getQuantity())); 188 assertEquals(0, new BigDecimal("4.00").compareTo(histories.get(1).getQuantity()));
  189 + assertEquals(0, new BigDecimal("320.00").compareTo(histories.get(1).getTotalPrice()));
182 } 190 }
183 191
184 @Test 192 @Test
@@ -193,12 +201,14 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { @@ -193,12 +201,14 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest {
193 .setWarehouseId(200L) 201 .setWarehouseId(200L)
194 .setQuantity(new BigDecimal("3.00")) 202 .setQuantity(new BigDecimal("3.00"))
195 .setPrice(new BigDecimal("60.00")) 203 .setPrice(new BigDecimal("60.00"))
  204 + .setTotalPrice(new BigDecimal("180.00"))
196 .setRemark("测试入库 2")); 205 .setRemark("测试入库 2"));
197 items.add(new WmsInventoryChangeReqDTO.Item() 206 items.add(new WmsInventoryChangeReqDTO.Item()
198 .setSkuId(sku.getId()) 207 .setSkuId(sku.getId())
199 .setWarehouseId(100L) 208 .setWarehouseId(100L)
200 .setQuantity(new BigDecimal("-2.00")) 209 .setQuantity(new BigDecimal("-2.00"))
201 .setPrice(new BigDecimal("40.00")) 210 .setPrice(new BigDecimal("40.00"))
  211 + .setTotalPrice(new BigDecimal("-80.00"))
202 .setRemark("测试出库")); 212 .setRemark("测试出库"));
203 reqDTO.setItems(items); 213 reqDTO.setItems(items);
204 214
@@ -219,12 +229,15 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { @@ -219,12 +229,15 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest {
219 assertEquals(100L, histories.get(0).getWarehouseId()); 229 assertEquals(100L, histories.get(0).getWarehouseId());
220 assertEquals(0, BigDecimal.ZERO.compareTo(histories.get(0).getBeforeQuantity())); 230 assertEquals(0, BigDecimal.ZERO.compareTo(histories.get(0).getBeforeQuantity()));
221 assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(0).getAfterQuantity())); 231 assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(0).getAfterQuantity()));
  232 + assertEquals(0, new BigDecimal("500.00").compareTo(histories.get(0).getTotalPrice()));
222 assertEquals(200L, histories.get(1).getWarehouseId()); 233 assertEquals(200L, histories.get(1).getWarehouseId());
223 assertEquals(0, BigDecimal.ZERO.compareTo(histories.get(1).getBeforeQuantity())); 234 assertEquals(0, BigDecimal.ZERO.compareTo(histories.get(1).getBeforeQuantity()));
224 assertEquals(0, new BigDecimal("3.00").compareTo(histories.get(1).getAfterQuantity())); 235 assertEquals(0, new BigDecimal("3.00").compareTo(histories.get(1).getAfterQuantity()));
  236 + assertEquals(0, new BigDecimal("180.00").compareTo(histories.get(1).getTotalPrice()));
225 assertEquals(100L, histories.get(2).getWarehouseId()); 237 assertEquals(100L, histories.get(2).getWarehouseId());
226 assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(2).getBeforeQuantity())); 238 assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(2).getBeforeQuantity()));
227 assertEquals(0, new BigDecimal("3.00").compareTo(histories.get(2).getAfterQuantity())); 239 assertEquals(0, new BigDecimal("3.00").compareTo(histories.get(2).getAfterQuantity()));
  240 + assertEquals(0, new BigDecimal("-80.00").compareTo(histories.get(2).getTotalPrice()));
228 } 241 }
229 242
230 @Test 243 @Test
@@ -314,6 +327,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { @@ -314,6 +327,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest {
314 .setWarehouseId(200L) 327 .setWarehouseId(200L)
315 .setQuantity(new BigDecimal("-1.00")) 328 .setQuantity(new BigDecimal("-1.00"))
316 .setPrice(new BigDecimal("20.00")) 329 .setPrice(new BigDecimal("20.00"))
  330 + .setTotalPrice(new BigDecimal("-20.00"))
317 .setRemark("测试出库")); 331 .setRemark("测试出库"));
318 reqDTO.setItems(items); 332 reqDTO.setItems(items);
319 mockItemSkuAndItem(item, sku); 333 mockItemSkuAndItem(item, sku);
@@ -593,6 +607,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest { @@ -593,6 +607,7 @@ public class WmsInventoryServiceImplTest extends BaseDbUnitTest {
593 .setWarehouseId(warehouseId) 607 .setWarehouseId(warehouseId)
594 .setQuantity(new BigDecimal(quantity)) 608 .setQuantity(new BigDecimal(quantity))
595 .setPrice(new BigDecimal("100.00")) 609 .setPrice(new BigDecimal("100.00"))
  610 + .setTotalPrice(new BigDecimal(quantity).multiply(new BigDecimal("100.00")))
596 .setRemark("测试入库"))); 611 .setRemark("测试入库")));
597 } 612 }
598 613
yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderDetailServiceImplTest.java
@@ -52,6 +52,8 @@ public class WmsMovementOrderDetailServiceImplTest extends BaseDbUnitTest { @@ -52,6 +52,8 @@ public class WmsMovementOrderDetailServiceImplTest extends BaseDbUnitTest {
52 assertEquals(orderId, details.get(1).getOrderId()); 52 assertEquals(orderId, details.get(1).getOrderId());
53 assertEquals(100L, details.get(0).getSourceWarehouseId()); 53 assertEquals(100L, details.get(0).getSourceWarehouseId());
54 assertEquals(200L, details.get(0).getTargetWarehouseId()); 54 assertEquals(200L, details.get(0).getTargetWarehouseId());
  55 + assertEquals(0, new BigDecimal("100.00").compareTo(details.get(0).getTotalPrice()));
  56 + assertEquals(0, new BigDecimal("200.00").compareTo(details.get(1).getTotalPrice()));
55 } 57 }
56 58
57 @Test 59 @Test
@@ -91,6 +93,7 @@ public class WmsMovementOrderDetailServiceImplTest extends BaseDbUnitTest { @@ -91,6 +93,7 @@ public class WmsMovementOrderDetailServiceImplTest extends BaseDbUnitTest {
91 assertEquals(orderId, dbUpdateDetail.getOrderId()); 93 assertEquals(orderId, dbUpdateDetail.getOrderId());
92 assertEquals(2001L, dbUpdateDetail.getSkuId()); 94 assertEquals(2001L, dbUpdateDetail.getSkuId());
93 assertEquals(0, new BigDecimal("11.00").compareTo(dbUpdateDetail.getQuantity())); 95 assertEquals(0, new BigDecimal("11.00").compareTo(dbUpdateDetail.getQuantity()));
  96 + assertEquals(0, new BigDecimal("1100.00").compareTo(dbUpdateDetail.getTotalPrice()));
94 assertEquals(100L, dbUpdateDetail.getSourceWarehouseId()); 97 assertEquals(100L, dbUpdateDetail.getSourceWarehouseId());
95 assertEquals(200L, dbUpdateDetail.getTargetWarehouseId()); 98 assertEquals(200L, dbUpdateDetail.getTargetWarehouseId());
96 // 断言:新增 99 // 断言:新增
@@ -102,6 +105,7 @@ public class WmsMovementOrderDetailServiceImplTest extends BaseDbUnitTest { @@ -102,6 +105,7 @@ public class WmsMovementOrderDetailServiceImplTest extends BaseDbUnitTest {
102 assertNotNull(dbCreateDetail); 105 assertNotNull(dbCreateDetail);
103 assertEquals(orderId, dbCreateDetail.getOrderId()); 106 assertEquals(orderId, dbCreateDetail.getOrderId());
104 assertEquals(0, new BigDecimal("22.00").compareTo(dbCreateDetail.getQuantity())); 107 assertEquals(0, new BigDecimal("22.00").compareTo(dbCreateDetail.getQuantity()));
  108 + assertEquals(0, new BigDecimal("2200.00").compareTo(dbCreateDetail.getTotalPrice()));
105 // 断言:删除 109 // 断言:删除
106 assertNull(movementOrderDetailMapper.selectById(detail02.getId())); 110 assertNull(movementOrderDetailMapper.selectById(detail02.getId()));
107 } 111 }
@@ -132,6 +136,7 @@ public class WmsMovementOrderDetailServiceImplTest extends BaseDbUnitTest { @@ -132,6 +136,7 @@ public class WmsMovementOrderDetailServiceImplTest extends BaseDbUnitTest {
132 reqVO.setSkuId(skuId); 136 reqVO.setSkuId(skuId);
133 reqVO.setQuantity(new BigDecimal(quantity)); 137 reqVO.setQuantity(new BigDecimal(quantity));
134 reqVO.setPrice(new BigDecimal("100.00")); 138 reqVO.setPrice(new BigDecimal("100.00"));
  139 + reqVO.setTotalPrice(new BigDecimal(quantity).multiply(new BigDecimal("100.00")));
135 return reqVO; 140 return reqVO;
136 } 141 }
137 142
@@ -143,6 +148,7 @@ public class WmsMovementOrderDetailServiceImplTest extends BaseDbUnitTest { @@ -143,6 +148,7 @@ public class WmsMovementOrderDetailServiceImplTest extends BaseDbUnitTest {
143 .targetWarehouseId(200L) 148 .targetWarehouseId(200L)
144 .quantity(new BigDecimal(quantity)) 149 .quantity(new BigDecimal(quantity))
145 .price(new BigDecimal("100.00")) 150 .price(new BigDecimal("100.00"))
  151 + .totalPrice(new BigDecimal(quantity).multiply(new BigDecimal("100.00")))
146 .build(); 152 .build();
147 } 153 }
148 154
yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/movement/WmsMovementOrderServiceImplTest.java
@@ -22,6 +22,7 @@ import org.springframework.test.context.bean.override.mockito.MockitoBean; @@ -22,6 +22,7 @@ import org.springframework.test.context.bean.override.mockito.MockitoBean;
22 import java.math.BigDecimal; 22 import java.math.BigDecimal;
23 import java.time.LocalDateTime; 23 import java.time.LocalDateTime;
24 import java.util.Arrays; 24 import java.util.Arrays;
  25 +import java.util.List;
25 26
26 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; 27 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
27 import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.MOVEMENT_ORDER_DETAIL_REQUIRED; 28 import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.MOVEMENT_ORDER_DETAIL_REQUIRED;
@@ -57,8 +58,8 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest { @@ -57,8 +58,8 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest {
57 public void testCreateMovementOrder_calculateTotal() { 58 public void testCreateMovementOrder_calculateTotal() {
58 // mock 数据 59 // mock 数据
59 WmsMovementOrderSaveReqVO reqVO = createMovementOrderReqVO(null, 100L, 200L, 60 WmsMovementOrderSaveReqVO reqVO = createMovementOrderReqVO(null, 100L, 200L,
60 - createMovementOrderDetailReqVO(null, 3001L, "1.50", "10.00"),  
61 - createMovementOrderDetailReqVO(null, 3002L, "2.50", "20.00")); 61 + createMovementOrderDetailReqVO(null, 3001L, "1.50", "10.00", "16.00"),
  62 + createMovementOrderDetailReqVO(null, 3002L, "2.50", "20.00", "51.00"));
62 63
63 // 调用 64 // 调用
64 Long orderId = movementOrderService.createMovementOrder(reqVO); 65 Long orderId = movementOrderService.createMovementOrder(reqVO);
@@ -67,8 +68,10 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest { @@ -67,8 +68,10 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest {
67 WmsMovementOrderDO dbOrder = movementOrderMapper.selectById(orderId); 68 WmsMovementOrderDO dbOrder = movementOrderMapper.selectById(orderId);
68 assertNotNull(dbOrder); 69 assertNotNull(dbOrder);
69 assertEquals(0, new BigDecimal("4.00").compareTo(dbOrder.getTotalQuantity())); 70 assertEquals(0, new BigDecimal("4.00").compareTo(dbOrder.getTotalQuantity()));
70 - assertEquals(0, new BigDecimal("65.00").compareTo(dbOrder.getTotalPrice()));  
71 - assertEquals(2, movementOrderDetailMapper.selectListByOrderId(orderId).size()); 71 + assertEquals(0, new BigDecimal("67.00").compareTo(dbOrder.getTotalPrice()));
  72 + List<WmsMovementOrderDetailDO> details = movementOrderDetailMapper.selectListByOrderId(orderId);
  73 + assertEquals(2, details.size());
  74 + assertEquals(0, new BigDecimal("16.00").compareTo(details.get(0).getTotalPrice()));
72 } 75 }
73 76
74 @Test 77 @Test
@@ -77,7 +80,7 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest { @@ -77,7 +80,7 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest {
77 WmsMovementOrderDO order = createMovementOrder(100L, 200L); 80 WmsMovementOrderDO order = createMovementOrder(100L, 200L);
78 movementOrderMapper.insert(order); 81 movementOrderMapper.insert(order);
79 WmsMovementOrderSaveReqVO reqVO = createMovementOrderReqVO(order.getId(), 100L, 200L, 82 WmsMovementOrderSaveReqVO reqVO = createMovementOrderReqVO(order.getId(), 100L, 200L,
80 - createMovementOrderDetailReqVO(null, 3001L, "3.00", "30.00")); 83 + createMovementOrderDetailReqVO(null, 3001L, "3.00", "30.00", "88.00"));
81 84
82 // 调用 85 // 调用
83 movementOrderService.updateMovementOrder(reqVO); 86 movementOrderService.updateMovementOrder(reqVO);
@@ -86,8 +89,10 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest { @@ -86,8 +89,10 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest {
86 WmsMovementOrderDO dbOrder = movementOrderMapper.selectById(order.getId()); 89 WmsMovementOrderDO dbOrder = movementOrderMapper.selectById(order.getId());
87 assertNotNull(dbOrder); 90 assertNotNull(dbOrder);
88 assertEquals(0, new BigDecimal("3.00").compareTo(dbOrder.getTotalQuantity())); 91 assertEquals(0, new BigDecimal("3.00").compareTo(dbOrder.getTotalQuantity()));
89 - assertEquals(0, new BigDecimal("90.00").compareTo(dbOrder.getTotalPrice()));  
90 - assertEquals(1, movementOrderDetailMapper.selectListByOrderId(order.getId()).size()); 92 + assertEquals(0, new BigDecimal("88.00").compareTo(dbOrder.getTotalPrice()));
  93 + List<WmsMovementOrderDetailDO> details = movementOrderDetailMapper.selectListByOrderId(order.getId());
  94 + assertEquals(1, details.size());
  95 + assertEquals(0, new BigDecimal("88.00").compareTo(details.get(0).getTotalPrice()));
91 } 96 }
92 97
93 @Test 98 @Test
@@ -119,9 +124,11 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest { @@ -119,9 +124,11 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest {
119 assertEquals(skuId, inventoryReqDTO.getItems().get(0).getSkuId()); 124 assertEquals(skuId, inventoryReqDTO.getItems().get(0).getSkuId());
120 assertEquals(sourceWarehouseId, inventoryReqDTO.getItems().get(0).getWarehouseId()); 125 assertEquals(sourceWarehouseId, inventoryReqDTO.getItems().get(0).getWarehouseId());
121 assertEquals(0, new BigDecimal("-2.00").compareTo(inventoryReqDTO.getItems().get(0).getQuantity())); 126 assertEquals(0, new BigDecimal("-2.00").compareTo(inventoryReqDTO.getItems().get(0).getQuantity()));
  127 + assertEquals(0, new BigDecimal("-40.00").compareTo(inventoryReqDTO.getItems().get(0).getTotalPrice()));
122 assertEquals(skuId, inventoryReqDTO.getItems().get(1).getSkuId()); 128 assertEquals(skuId, inventoryReqDTO.getItems().get(1).getSkuId());
123 assertEquals(targetWarehouseId, inventoryReqDTO.getItems().get(1).getWarehouseId()); 129 assertEquals(targetWarehouseId, inventoryReqDTO.getItems().get(1).getWarehouseId());
124 assertEquals(0, new BigDecimal("2.00").compareTo(inventoryReqDTO.getItems().get(1).getQuantity())); 130 assertEquals(0, new BigDecimal("2.00").compareTo(inventoryReqDTO.getItems().get(1).getQuantity()));
  131 + assertEquals(0, new BigDecimal("40.00").compareTo(inventoryReqDTO.getItems().get(1).getTotalPrice()));
125 } 132 }
126 133
127 @Test 134 @Test
@@ -241,6 +248,7 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest { @@ -241,6 +248,7 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest {
241 .targetWarehouseId(targetWarehouseId) 248 .targetWarehouseId(targetWarehouseId)
242 .quantity(new BigDecimal("2.00")) 249 .quantity(new BigDecimal("2.00"))
243 .price(new BigDecimal("20.00")) 250 .price(new BigDecimal("20.00"))
  251 + .totalPrice(new BigDecimal("40.00"))
244 .build(); 252 .build();
245 } 253 }
246 254
@@ -263,11 +271,20 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest { @@ -263,11 +271,20 @@ public class WmsMovementOrderServiceImplTest extends BaseDbUnitTest {
263 271
264 private static WmsMovementOrderDetailSaveReqVO createMovementOrderDetailReqVO(Long id, Long skuId, 272 private static WmsMovementOrderDetailSaveReqVO createMovementOrderDetailReqVO(Long id, Long skuId,
265 String quantity, String price) { 273 String quantity, String price) {
  274 + return createMovementOrderDetailReqVO(id, skuId, quantity, price, null);
  275 + }
  276 +
  277 + private static WmsMovementOrderDetailSaveReqVO createMovementOrderDetailReqVO(Long id, Long skuId,
  278 + String quantity, String price,
  279 + String totalPrice) {
266 WmsMovementOrderDetailSaveReqVO reqVO = new WmsMovementOrderDetailSaveReqVO(); 280 WmsMovementOrderDetailSaveReqVO reqVO = new WmsMovementOrderDetailSaveReqVO();
267 reqVO.setId(id); 281 reqVO.setId(id);
268 reqVO.setSkuId(skuId); 282 reqVO.setSkuId(skuId);
269 reqVO.setQuantity(new BigDecimal(quantity)); 283 reqVO.setQuantity(new BigDecimal(quantity));
270 reqVO.setPrice(new BigDecimal(price)); 284 reqVO.setPrice(new BigDecimal(price));
  285 + if (totalPrice != null) {
  286 + reqVO.setTotalPrice(new BigDecimal(totalPrice));
  287 + }
271 return reqVO; 288 return reqVO;
272 } 289 }
273 290
yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderDetailServiceImplTest.java
@@ -50,6 +50,8 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest { @@ -50,6 +50,8 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest {
50 assertEquals(2, details.size()); 50 assertEquals(2, details.size());
51 assertEquals(orderId, details.get(0).getOrderId()); 51 assertEquals(orderId, details.get(0).getOrderId());
52 assertEquals(orderId, details.get(1).getOrderId()); 52 assertEquals(orderId, details.get(1).getOrderId());
  53 + assertEquals(0, new BigDecimal("100.00").compareTo(details.get(0).getTotalPrice()));
  54 + assertEquals(0, new BigDecimal("200.00").compareTo(details.get(1).getTotalPrice()));
53 } 55 }
54 56
55 @Test 57 @Test
@@ -89,6 +91,7 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest { @@ -89,6 +91,7 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest {
89 assertEquals(orderId, dbUpdateDetail.getOrderId()); 91 assertEquals(orderId, dbUpdateDetail.getOrderId());
90 assertEquals(2001L, dbUpdateDetail.getSkuId()); 92 assertEquals(2001L, dbUpdateDetail.getSkuId());
91 assertEquals(0, new BigDecimal("11.00").compareTo(dbUpdateDetail.getQuantity())); 93 assertEquals(0, new BigDecimal("11.00").compareTo(dbUpdateDetail.getQuantity()));
  94 + assertEquals(0, new BigDecimal("1100.00").compareTo(dbUpdateDetail.getTotalPrice()));
92 // 断言:新增 95 // 断言:新增
93 List<WmsReceiptOrderDetailDO> details = receiptOrderDetailMapper.selectListByOrderId(orderId); 96 List<WmsReceiptOrderDetailDO> details = receiptOrderDetailMapper.selectListByOrderId(orderId);
94 assertEquals(2, details.size()); 97 assertEquals(2, details.size());
@@ -98,6 +101,7 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest { @@ -98,6 +101,7 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest {
98 assertNotNull(dbCreateDetail); 101 assertNotNull(dbCreateDetail);
99 assertEquals(orderId, dbCreateDetail.getOrderId()); 102 assertEquals(orderId, dbCreateDetail.getOrderId());
100 assertEquals(0, new BigDecimal("22.00").compareTo(dbCreateDetail.getQuantity())); 103 assertEquals(0, new BigDecimal("22.00").compareTo(dbCreateDetail.getQuantity()));
  104 + assertEquals(0, new BigDecimal("2200.00").compareTo(dbCreateDetail.getTotalPrice()));
101 // 断言:删除 105 // 断言:删除
102 assertNull(receiptOrderDetailMapper.selectById(detail02.getId())); 106 assertNull(receiptOrderDetailMapper.selectById(detail02.getId()));
103 } 107 }
@@ -127,6 +131,7 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest { @@ -127,6 +131,7 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest {
127 reqVO.setSkuId(skuId); 131 reqVO.setSkuId(skuId);
128 reqVO.setQuantity(new BigDecimal(quantity)); 132 reqVO.setQuantity(new BigDecimal(quantity));
129 reqVO.setPrice(new BigDecimal("100.00")); 133 reqVO.setPrice(new BigDecimal("100.00"));
  134 + reqVO.setTotalPrice(new BigDecimal(quantity).multiply(new BigDecimal("100.00")));
130 return reqVO; 135 return reqVO;
131 } 136 }
132 137
@@ -137,6 +142,7 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest { @@ -137,6 +142,7 @@ public class WmsReceiptOrderDetailServiceImplTest extends BaseDbUnitTest {
137 .warehouseId(100L) 142 .warehouseId(100L)
138 .quantity(new BigDecimal(quantity)) 143 .quantity(new BigDecimal(quantity))
139 .price(new BigDecimal("100.00")) 144 .price(new BigDecimal("100.00"))
  145 + .totalPrice(new BigDecimal(quantity).multiply(new BigDecimal("100.00")))
140 .build(); 146 .build();
141 } 147 }
142 148
yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/receipt/WmsReceiptOrderServiceImplTest.java
@@ -24,6 +24,7 @@ import org.springframework.test.context.bean.override.mockito.MockitoBean; @@ -24,6 +24,7 @@ import org.springframework.test.context.bean.override.mockito.MockitoBean;
24 import java.math.BigDecimal; 24 import java.math.BigDecimal;
25 import java.time.LocalDateTime; 25 import java.time.LocalDateTime;
26 import java.util.Arrays; 26 import java.util.Arrays;
  27 +import java.util.List;
27 28
28 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; 29 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
29 import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.RECEIPT_ORDER_DETAIL_REQUIRED; 30 import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.RECEIPT_ORDER_DETAIL_REQUIRED;
@@ -60,8 +61,8 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { @@ -60,8 +61,8 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest {
60 public void testCreateReceiptOrder_calculateTotal() { 61 public void testCreateReceiptOrder_calculateTotal() {
61 // mock 数据 62 // mock 数据
62 WmsReceiptOrderSaveReqVO reqVO = createReceiptOrderSaveReqVO(null, 63 WmsReceiptOrderSaveReqVO reqVO = createReceiptOrderSaveReqVO(null,
63 - createReceiptOrderDetailReqVO(null, 2001L, "1.50", "10.00"),  
64 - createReceiptOrderDetailReqVO(null, 2002L, "2.50", "20.00")); 64 + createReceiptOrderDetailReqVO(null, 2001L, "1.50", "10.00", "16.00"),
  65 + createReceiptOrderDetailReqVO(null, 2002L, "2.50", "20.00", "51.00"));
65 66
66 // 调用 67 // 调用
67 Long orderId = receiptOrderService.createReceiptOrder(reqVO); 68 Long orderId = receiptOrderService.createReceiptOrder(reqVO);
@@ -70,8 +71,10 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { @@ -70,8 +71,10 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest {
70 WmsReceiptOrderDO dbOrder = receiptOrderMapper.selectById(orderId); 71 WmsReceiptOrderDO dbOrder = receiptOrderMapper.selectById(orderId);
71 assertNotNull(dbOrder); 72 assertNotNull(dbOrder);
72 assertEquals(0, new BigDecimal("4.00").compareTo(dbOrder.getTotalQuantity())); 73 assertEquals(0, new BigDecimal("4.00").compareTo(dbOrder.getTotalQuantity()));
73 - assertEquals(0, new BigDecimal("65.00").compareTo(dbOrder.getTotalPrice()));  
74 - assertEquals(2, receiptOrderDetailMapper.selectListByOrderId(orderId).size()); 74 + assertEquals(0, new BigDecimal("67.00").compareTo(dbOrder.getTotalPrice()));
  75 + List<WmsReceiptOrderDetailDO> details = receiptOrderDetailMapper.selectListByOrderId(orderId);
  76 + assertEquals(2, details.size());
  77 + assertEquals(0, new BigDecimal("16.00").compareTo(details.get(0).getTotalPrice()));
75 } 78 }
76 79
77 @Test 80 @Test
@@ -80,7 +83,7 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { @@ -80,7 +83,7 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest {
80 WmsReceiptOrderDO order = createReceiptOrder(100L); 83 WmsReceiptOrderDO order = createReceiptOrder(100L);
81 receiptOrderMapper.insert(order); 84 receiptOrderMapper.insert(order);
82 WmsReceiptOrderSaveReqVO reqVO = createReceiptOrderSaveReqVO(order.getId(), 85 WmsReceiptOrderSaveReqVO reqVO = createReceiptOrderSaveReqVO(order.getId(),
83 - createReceiptOrderDetailReqVO(null, 2001L, "3.00", "30.00")); 86 + createReceiptOrderDetailReqVO(null, 2001L, "3.00", "30.00", "88.00"));
84 87
85 // 调用 88 // 调用
86 receiptOrderService.updateReceiptOrder(reqVO); 89 receiptOrderService.updateReceiptOrder(reqVO);
@@ -89,8 +92,10 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { @@ -89,8 +92,10 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest {
89 WmsReceiptOrderDO dbOrder = receiptOrderMapper.selectById(order.getId()); 92 WmsReceiptOrderDO dbOrder = receiptOrderMapper.selectById(order.getId());
90 assertNotNull(dbOrder); 93 assertNotNull(dbOrder);
91 assertEquals(0, new BigDecimal("3.00").compareTo(dbOrder.getTotalQuantity())); 94 assertEquals(0, new BigDecimal("3.00").compareTo(dbOrder.getTotalQuantity()));
92 - assertEquals(0, new BigDecimal("90.00").compareTo(dbOrder.getTotalPrice()));  
93 - assertEquals(1, receiptOrderDetailMapper.selectListByOrderId(order.getId()).size()); 95 + assertEquals(0, new BigDecimal("88.00").compareTo(dbOrder.getTotalPrice()));
  96 + List<WmsReceiptOrderDetailDO> details = receiptOrderDetailMapper.selectListByOrderId(order.getId());
  97 + assertEquals(1, details.size());
  98 + assertEquals(0, new BigDecimal("88.00").compareTo(details.get(0).getTotalPrice()));
94 } 99 }
95 100
96 @Test 101 @Test
@@ -120,6 +125,7 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { @@ -120,6 +125,7 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest {
120 assertEquals(skuId, inventoryReqDTO.getItems().get(0).getSkuId()); 125 assertEquals(skuId, inventoryReqDTO.getItems().get(0).getSkuId());
121 assertEquals(warehouseId, inventoryReqDTO.getItems().get(0).getWarehouseId()); 126 assertEquals(warehouseId, inventoryReqDTO.getItems().get(0).getWarehouseId());
122 assertEquals(0, new BigDecimal("2.00").compareTo(inventoryReqDTO.getItems().get(0).getQuantity())); 127 assertEquals(0, new BigDecimal("2.00").compareTo(inventoryReqDTO.getItems().get(0).getQuantity()));
  128 + assertEquals(0, new BigDecimal("40.00").compareTo(inventoryReqDTO.getItems().get(0).getTotalPrice()));
123 } 129 }
124 130
125 @Test 131 @Test
@@ -234,11 +240,20 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { @@ -234,11 +240,20 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest {
234 240
235 private static WmsReceiptOrderDetailSaveReqVO createReceiptOrderDetailReqVO(Long id, Long skuId, 241 private static WmsReceiptOrderDetailSaveReqVO createReceiptOrderDetailReqVO(Long id, Long skuId,
236 String quantity, String price) { 242 String quantity, String price) {
  243 + return createReceiptOrderDetailReqVO(id, skuId, quantity, price, null);
  244 + }
  245 +
  246 + private static WmsReceiptOrderDetailSaveReqVO createReceiptOrderDetailReqVO(Long id, Long skuId,
  247 + String quantity, String price,
  248 + String totalPrice) {
237 WmsReceiptOrderDetailSaveReqVO reqVO = new WmsReceiptOrderDetailSaveReqVO(); 249 WmsReceiptOrderDetailSaveReqVO reqVO = new WmsReceiptOrderDetailSaveReqVO();
238 reqVO.setId(id); 250 reqVO.setId(id);
239 reqVO.setSkuId(skuId); 251 reqVO.setSkuId(skuId);
240 reqVO.setQuantity(new BigDecimal(quantity)); 252 reqVO.setQuantity(new BigDecimal(quantity));
241 reqVO.setPrice(new BigDecimal(price)); 253 reqVO.setPrice(new BigDecimal(price));
  254 + if (totalPrice != null) {
  255 + reqVO.setTotalPrice(new BigDecimal(totalPrice));
  256 + }
242 return reqVO; 257 return reqVO;
243 } 258 }
244 259
@@ -249,6 +264,7 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest { @@ -249,6 +264,7 @@ public class WmsReceiptOrderServiceImplTest extends BaseDbUnitTest {
249 .warehouseId(warehouseId) 264 .warehouseId(warehouseId)
250 .quantity(new BigDecimal("2.00")) 265 .quantity(new BigDecimal("2.00"))
251 .price(new BigDecimal("20.00")) 266 .price(new BigDecimal("20.00"))
  267 + .totalPrice(new BigDecimal("40.00"))
252 .build(); 268 .build();
253 } 269 }
254 270
yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderDetailServiceImplTest.java
@@ -51,6 +51,8 @@ public class WmsShipmentOrderDetailServiceImplTest extends BaseDbUnitTest { @@ -51,6 +51,8 @@ public class WmsShipmentOrderDetailServiceImplTest extends BaseDbUnitTest {
51 assertEquals(orderId, details.get(0).getOrderId()); 51 assertEquals(orderId, details.get(0).getOrderId());
52 assertEquals(orderId, details.get(1).getOrderId()); 52 assertEquals(orderId, details.get(1).getOrderId());
53 assertEquals(100L, details.get(0).getWarehouseId()); 53 assertEquals(100L, details.get(0).getWarehouseId());
  54 + assertEquals(0, new BigDecimal("100.00").compareTo(details.get(0).getTotalPrice()));
  55 + assertEquals(0, new BigDecimal("200.00").compareTo(details.get(1).getTotalPrice()));
54 } 56 }
55 57
56 @Test 58 @Test
@@ -90,6 +92,7 @@ public class WmsShipmentOrderDetailServiceImplTest extends BaseDbUnitTest { @@ -90,6 +92,7 @@ public class WmsShipmentOrderDetailServiceImplTest extends BaseDbUnitTest {
90 assertEquals(orderId, dbUpdateDetail.getOrderId()); 92 assertEquals(orderId, dbUpdateDetail.getOrderId());
91 assertEquals(2001L, dbUpdateDetail.getSkuId()); 93 assertEquals(2001L, dbUpdateDetail.getSkuId());
92 assertEquals(0, new BigDecimal("11.00").compareTo(dbUpdateDetail.getQuantity())); 94 assertEquals(0, new BigDecimal("11.00").compareTo(dbUpdateDetail.getQuantity()));
  95 + assertEquals(0, new BigDecimal("1100.00").compareTo(dbUpdateDetail.getTotalPrice()));
93 // 断言:新增 96 // 断言:新增
94 List<WmsShipmentOrderDetailDO> details = shipmentOrderDetailMapper.selectListByOrderId(orderId); 97 List<WmsShipmentOrderDetailDO> details = shipmentOrderDetailMapper.selectListByOrderId(orderId);
95 assertEquals(2, details.size()); 98 assertEquals(2, details.size());
@@ -99,6 +102,7 @@ public class WmsShipmentOrderDetailServiceImplTest extends BaseDbUnitTest { @@ -99,6 +102,7 @@ public class WmsShipmentOrderDetailServiceImplTest extends BaseDbUnitTest {
99 assertNotNull(dbCreateDetail); 102 assertNotNull(dbCreateDetail);
100 assertEquals(orderId, dbCreateDetail.getOrderId()); 103 assertEquals(orderId, dbCreateDetail.getOrderId());
101 assertEquals(0, new BigDecimal("22.00").compareTo(dbCreateDetail.getQuantity())); 104 assertEquals(0, new BigDecimal("22.00").compareTo(dbCreateDetail.getQuantity()));
  105 + assertEquals(0, new BigDecimal("2200.00").compareTo(dbCreateDetail.getTotalPrice()));
102 // 断言:删除 106 // 断言:删除
103 assertNull(shipmentOrderDetailMapper.selectById(detail02.getId())); 107 assertNull(shipmentOrderDetailMapper.selectById(detail02.getId()));
104 } 108 }
@@ -128,6 +132,7 @@ public class WmsShipmentOrderDetailServiceImplTest extends BaseDbUnitTest { @@ -128,6 +132,7 @@ public class WmsShipmentOrderDetailServiceImplTest extends BaseDbUnitTest {
128 reqVO.setSkuId(skuId); 132 reqVO.setSkuId(skuId);
129 reqVO.setQuantity(new BigDecimal(quantity)); 133 reqVO.setQuantity(new BigDecimal(quantity));
130 reqVO.setPrice(new BigDecimal("100.00")); 134 reqVO.setPrice(new BigDecimal("100.00"));
  135 + reqVO.setTotalPrice(new BigDecimal(quantity).multiply(new BigDecimal("100.00")));
131 return reqVO; 136 return reqVO;
132 } 137 }
133 138
@@ -138,6 +143,7 @@ public class WmsShipmentOrderDetailServiceImplTest extends BaseDbUnitTest { @@ -138,6 +143,7 @@ public class WmsShipmentOrderDetailServiceImplTest extends BaseDbUnitTest {
138 .warehouseId(100L) 143 .warehouseId(100L)
139 .quantity(new BigDecimal(quantity)) 144 .quantity(new BigDecimal(quantity))
140 .price(new BigDecimal("100.00")) 145 .price(new BigDecimal("100.00"))
  146 + .totalPrice(new BigDecimal(quantity).multiply(new BigDecimal("100.00")))
141 .build(); 147 .build();
142 } 148 }
143 149
yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/order/shipment/WmsShipmentOrderServiceImplTest.java
@@ -24,6 +24,7 @@ import org.springframework.test.context.bean.override.mockito.MockitoBean; @@ -24,6 +24,7 @@ import org.springframework.test.context.bean.override.mockito.MockitoBean;
24 import java.math.BigDecimal; 24 import java.math.BigDecimal;
25 import java.time.LocalDateTime; 25 import java.time.LocalDateTime;
26 import java.util.Arrays; 26 import java.util.Arrays;
  27 +import java.util.List;
27 28
28 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; 29 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
29 import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.SHIPMENT_ORDER_DETAIL_REQUIRED; 30 import static cn.iocoder.yudao.module.wms.enums.ErrorCodeConstants.SHIPMENT_ORDER_DETAIL_REQUIRED;
@@ -60,8 +61,8 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest { @@ -60,8 +61,8 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest {
60 public void testCreateShipmentOrder_calculateTotal() { 61 public void testCreateShipmentOrder_calculateTotal() {
61 // mock 数据 62 // mock 数据
62 WmsShipmentOrderSaveReqVO reqVO = createShipmentOrderSaveReqVO(null, 63 WmsShipmentOrderSaveReqVO reqVO = createShipmentOrderSaveReqVO(null,
63 - createShipmentOrderDetailReqVO(null, 2001L, "1.50", "10.00"),  
64 - createShipmentOrderDetailReqVO(null, 2002L, "2.50", "20.00")); 64 + createShipmentOrderDetailReqVO(null, 2001L, "1.50", "10.00", "16.00"),
  65 + createShipmentOrderDetailReqVO(null, 2002L, "2.50", "20.00", "51.00"));
65 66
66 // 调用 67 // 调用
67 Long orderId = shipmentOrderService.createShipmentOrder(reqVO); 68 Long orderId = shipmentOrderService.createShipmentOrder(reqVO);
@@ -70,8 +71,10 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest { @@ -70,8 +71,10 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest {
70 WmsShipmentOrderDO dbOrder = shipmentOrderMapper.selectById(orderId); 71 WmsShipmentOrderDO dbOrder = shipmentOrderMapper.selectById(orderId);
71 assertNotNull(dbOrder); 72 assertNotNull(dbOrder);
72 assertEquals(0, new BigDecimal("4.00").compareTo(dbOrder.getTotalQuantity())); 73 assertEquals(0, new BigDecimal("4.00").compareTo(dbOrder.getTotalQuantity()));
73 - assertEquals(0, new BigDecimal("65.00").compareTo(dbOrder.getTotalPrice()));  
74 - assertEquals(2, shipmentOrderDetailMapper.selectListByOrderId(orderId).size()); 74 + assertEquals(0, new BigDecimal("67.00").compareTo(dbOrder.getTotalPrice()));
  75 + List<WmsShipmentOrderDetailDO> details = shipmentOrderDetailMapper.selectListByOrderId(orderId);
  76 + assertEquals(2, details.size());
  77 + assertEquals(0, new BigDecimal("16.00").compareTo(details.get(0).getTotalPrice()));
75 } 78 }
76 79
77 @Test 80 @Test
@@ -80,7 +83,7 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest { @@ -80,7 +83,7 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest {
80 WmsShipmentOrderDO order = createShipmentOrder(100L); 83 WmsShipmentOrderDO order = createShipmentOrder(100L);
81 shipmentOrderMapper.insert(order); 84 shipmentOrderMapper.insert(order);
82 WmsShipmentOrderSaveReqVO reqVO = createShipmentOrderSaveReqVO(order.getId(), 85 WmsShipmentOrderSaveReqVO reqVO = createShipmentOrderSaveReqVO(order.getId(),
83 - createShipmentOrderDetailReqVO(null, 2001L, "3.00", "30.00")); 86 + createShipmentOrderDetailReqVO(null, 2001L, "3.00", "30.00", "88.00"));
84 87
85 // 调用 88 // 调用
86 shipmentOrderService.updateShipmentOrder(reqVO); 89 shipmentOrderService.updateShipmentOrder(reqVO);
@@ -89,8 +92,10 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest { @@ -89,8 +92,10 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest {
89 WmsShipmentOrderDO dbOrder = shipmentOrderMapper.selectById(order.getId()); 92 WmsShipmentOrderDO dbOrder = shipmentOrderMapper.selectById(order.getId());
90 assertNotNull(dbOrder); 93 assertNotNull(dbOrder);
91 assertEquals(0, new BigDecimal("3.00").compareTo(dbOrder.getTotalQuantity())); 94 assertEquals(0, new BigDecimal("3.00").compareTo(dbOrder.getTotalQuantity()));
92 - assertEquals(0, new BigDecimal("90.00").compareTo(dbOrder.getTotalPrice()));  
93 - assertEquals(1, shipmentOrderDetailMapper.selectListByOrderId(order.getId()).size()); 95 + assertEquals(0, new BigDecimal("88.00").compareTo(dbOrder.getTotalPrice()));
  96 + List<WmsShipmentOrderDetailDO> details = shipmentOrderDetailMapper.selectListByOrderId(order.getId());
  97 + assertEquals(1, details.size());
  98 + assertEquals(0, new BigDecimal("88.00").compareTo(details.get(0).getTotalPrice()));
94 } 99 }
95 100
96 @Test 101 @Test
@@ -120,6 +125,7 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest { @@ -120,6 +125,7 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest {
120 assertEquals(skuId, inventoryReqDTO.getItems().get(0).getSkuId()); 125 assertEquals(skuId, inventoryReqDTO.getItems().get(0).getSkuId());
121 assertEquals(warehouseId, inventoryReqDTO.getItems().get(0).getWarehouseId()); 126 assertEquals(warehouseId, inventoryReqDTO.getItems().get(0).getWarehouseId());
122 assertEquals(0, new BigDecimal("-2.00").compareTo(inventoryReqDTO.getItems().get(0).getQuantity())); 127 assertEquals(0, new BigDecimal("-2.00").compareTo(inventoryReqDTO.getItems().get(0).getQuantity()));
  128 + assertEquals(0, new BigDecimal("-40.00").compareTo(inventoryReqDTO.getItems().get(0).getTotalPrice()));
123 } 129 }
124 130
125 @Test 131 @Test
@@ -234,11 +240,20 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest { @@ -234,11 +240,20 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest {
234 240
235 private static WmsShipmentOrderDetailSaveReqVO createShipmentOrderDetailReqVO(Long id, Long skuId, 241 private static WmsShipmentOrderDetailSaveReqVO createShipmentOrderDetailReqVO(Long id, Long skuId,
236 String quantity, String price) { 242 String quantity, String price) {
  243 + return createShipmentOrderDetailReqVO(id, skuId, quantity, price, null);
  244 + }
  245 +
  246 + private static WmsShipmentOrderDetailSaveReqVO createShipmentOrderDetailReqVO(Long id, Long skuId,
  247 + String quantity, String price,
  248 + String totalPrice) {
237 WmsShipmentOrderDetailSaveReqVO reqVO = new WmsShipmentOrderDetailSaveReqVO(); 249 WmsShipmentOrderDetailSaveReqVO reqVO = new WmsShipmentOrderDetailSaveReqVO();
238 reqVO.setId(id); 250 reqVO.setId(id);
239 reqVO.setSkuId(skuId); 251 reqVO.setSkuId(skuId);
240 reqVO.setQuantity(new BigDecimal(quantity)); 252 reqVO.setQuantity(new BigDecimal(quantity));
241 reqVO.setPrice(new BigDecimal(price)); 253 reqVO.setPrice(new BigDecimal(price));
  254 + if (totalPrice != null) {
  255 + reqVO.setTotalPrice(new BigDecimal(totalPrice));
  256 + }
242 return reqVO; 257 return reqVO;
243 } 258 }
244 259
@@ -249,6 +264,7 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest { @@ -249,6 +264,7 @@ public class WmsShipmentOrderServiceImplTest extends BaseDbUnitTest {
249 .warehouseId(warehouseId) 264 .warehouseId(warehouseId)
250 .quantity(new BigDecimal("2.00")) 265 .quantity(new BigDecimal("2.00"))
251 .price(new BigDecimal("20.00")) 266 .price(new BigDecimal("20.00"))
  267 + .totalPrice(new BigDecimal("40.00"))
252 .build(); 268 .build();
253 } 269 }
254 270
yudao-module-wms/src/test/resources/sql/create_tables.sql
@@ -128,6 +128,7 @@ CREATE TABLE IF NOT EXISTS &quot;wms_inventory_history&quot; ( @@ -128,6 +128,7 @@ CREATE TABLE IF NOT EXISTS &quot;wms_inventory_history&quot; (
128 "before_quantity" decimal(24, 6) DEFAULT NULL, 128 "before_quantity" decimal(24, 6) DEFAULT NULL,
129 "after_quantity" decimal(24, 6) DEFAULT NULL, 129 "after_quantity" decimal(24, 6) DEFAULT NULL,
130 "price" decimal(24, 6) DEFAULT NULL, 130 "price" decimal(24, 6) DEFAULT NULL,
  131 + "total_price" decimal(24, 6) DEFAULT NULL,
131 "remark" varchar(255) DEFAULT NULL, 132 "remark" varchar(255) DEFAULT NULL,
132 "order_id" bigint DEFAULT NULL, 133 "order_id" bigint DEFAULT NULL,
133 "order_no" varchar(64) DEFAULT NULL, 134 "order_no" varchar(64) DEFAULT NULL,
@@ -169,6 +170,7 @@ CREATE TABLE IF NOT EXISTS &quot;wms_receipt_order_detail&quot; ( @@ -169,6 +170,7 @@ CREATE TABLE IF NOT EXISTS &quot;wms_receipt_order_detail&quot; (
169 "warehouse_id" bigint NOT NULL, 170 "warehouse_id" bigint NOT NULL,
170 "quantity" decimal(20, 2) NOT NULL DEFAULT '0', 171 "quantity" decimal(20, 2) NOT NULL DEFAULT '0',
171 "price" decimal(10, 2) DEFAULT NULL, 172 "price" decimal(10, 2) DEFAULT NULL,
  173 + "total_price" decimal(10, 2) DEFAULT NULL,
172 "creator" varchar(64) DEFAULT '', 174 "creator" varchar(64) DEFAULT '',
173 "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 175 "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
174 "updater" varchar(64) DEFAULT '', 176 "updater" varchar(64) DEFAULT '',
@@ -206,6 +208,7 @@ CREATE TABLE IF NOT EXISTS &quot;wms_shipment_order_detail&quot; ( @@ -206,6 +208,7 @@ CREATE TABLE IF NOT EXISTS &quot;wms_shipment_order_detail&quot; (
206 "warehouse_id" bigint NOT NULL, 208 "warehouse_id" bigint NOT NULL,
207 "quantity" decimal(20, 2) NOT NULL DEFAULT '0', 209 "quantity" decimal(20, 2) NOT NULL DEFAULT '0',
208 "price" decimal(10, 2) DEFAULT NULL, 210 "price" decimal(10, 2) DEFAULT NULL,
  211 + "total_price" decimal(10, 2) DEFAULT NULL,
209 "creator" varchar(64) DEFAULT '', 212 "creator" varchar(64) DEFAULT '',
210 "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 213 "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
211 "updater" varchar(64) DEFAULT '', 214 "updater" varchar(64) DEFAULT '',
@@ -242,6 +245,7 @@ CREATE TABLE IF NOT EXISTS &quot;wms_movement_order_detail&quot; ( @@ -242,6 +245,7 @@ CREATE TABLE IF NOT EXISTS &quot;wms_movement_order_detail&quot; (
242 "target_warehouse_id" bigint NOT NULL, 245 "target_warehouse_id" bigint NOT NULL,
243 "quantity" decimal(20, 2) NOT NULL DEFAULT '0', 246 "quantity" decimal(20, 2) NOT NULL DEFAULT '0',
244 "price" decimal(10, 2) DEFAULT NULL, 247 "price" decimal(10, 2) DEFAULT NULL,
  248 + "total_price" decimal(10, 2) DEFAULT NULL,
245 "creator" varchar(64) DEFAULT '', 249 "creator" varchar(64) DEFAULT '',
246 "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 250 "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
247 "updater" varchar(64) DEFAULT '', 251 "updater" varchar(64) DEFAULT '',