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