Commit 5f31b32c121e167c29047568fbb89611a493d58e
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
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
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
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
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 "wms_inventory_history" ( |
| 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 "wms_receipt_order_detail" ( |
| 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 "wms_shipment_order_detail" ( |
| 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 "wms_movement_order_detail" ( |
| 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 '', | ... | ... |