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