diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java index 9858a1a..5ccee20 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java @@ -120,6 +120,31 @@ public interface BaseMapperX extends MPJBaseMapper { } /** + * 获得满足条件的一条记录,并使用 FOR UPDATE 锁定。 + * + * 注意:需要在事务中调用,否则锁会立即释放。 + * + * @param queryWrapper 查询条件 + * @return 实体 + */ + default T selectOneForUpdate(LambdaQueryWrapper queryWrapper) { + return selectOne(queryWrapper.last("FOR UPDATE")); + } + + default T selectOneForUpdate(SFunction field, Object value) { + return selectOneForUpdate(new LambdaQueryWrapper().eq(field, value)); + } + + default T selectOneForUpdate(SFunction field1, Object value1, SFunction field2, Object value2) { + return selectOneForUpdate(new LambdaQueryWrapper().eq(field1, value1).eq(field2, value2)); + } + + default T selectOneForUpdate(SFunction field1, Object value1, SFunction field2, Object value2, + SFunction field3, Object value3) { + return selectOneForUpdate(new LambdaQueryWrapper().eq(field1, value1).eq(field2, value2).eq(field3, value3)); + } + + /** * 获取满足条件的第 1 条记录 * * 目的:解决并发场景下,插入多条记录后,使用 selectOne 会报错的问题 diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/ErrorCodeConstants.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/ErrorCodeConstants.java index 8f4e05a..50a9a17 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/ErrorCodeConstants.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/enums/ErrorCodeConstants.java @@ -47,4 +47,13 @@ public interface ErrorCodeConstants { // ========== WMS 基础数据-往来企业 1-060-105-000 ========== ErrorCode MERCHANT_NOT_EXISTS = new ErrorCode(1_060_105_000, "往来企业不存在"); + // ========== WMS 入库单 1-060-200-000 ========== + ErrorCode RECEIPT_ORDER_NOT_EXISTS = new ErrorCode(1_060_200_000, "入库单不存在"); + ErrorCode RECEIPT_ORDER_NO_DUPLICATE = new ErrorCode(1_060_200_001, "入库单号重复"); + ErrorCode RECEIPT_ORDER_STATUS_NOT_PENDING = new ErrorCode(1_060_200_002, "入库单状态不是暂存,不能操作"); + ErrorCode RECEIPT_ORDER_DETAIL_REQUIRED = new ErrorCode(1_060_200_003, "入库单至少包含一条明细"); + ErrorCode RECEIPT_ORDER_AREA_REQUIRED = new ErrorCode(1_060_200_004, "库区模式下,入库单库区不能为空"); + ErrorCode RECEIPT_ORDER_AREA_NOT_MATCH_WAREHOUSE = new ErrorCode(1_060_200_005, "库区不属于入库仓库"); + ErrorCode RECEIPT_ORDER_COMPLETED_CANNOT_DELETE = new ErrorCode(1_060_200_006, "入库单已完成,不能删除"); + } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryDetailService.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryDetailService.java index d224aa2..e9cf81e 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryDetailService.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryDetailService.java @@ -4,6 +4,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.detail.WmsInventoryDetailPageReqVO; import cn.iocoder.yudao.module.wms.dal.dataobject.inventory.WmsInventoryDetailDO; +import java.util.List; + /** * WMS 库存明细 Service 接口 * @@ -19,4 +21,11 @@ public interface WmsInventoryDetailService { */ PageResult getInventoryDetailPage(WmsInventoryDetailPageReqVO pageReqVO); + /** + * 创建库存明细列表 + * + * @param list 库存明细列表 + */ + void createInventoryDetailList(List list); + } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryDetailServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryDetailServiceImpl.java index a5c33fc..3eb77fd 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryDetailServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryDetailServiceImpl.java @@ -1,13 +1,17 @@ package cn.iocoder.yudao.module.wms.service.inventory; +import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.detail.WmsInventoryDetailPageReqVO; import cn.iocoder.yudao.module.wms.dal.dataobject.inventory.WmsInventoryDetailDO; import cn.iocoder.yudao.module.wms.dal.mysql.inventory.WmsInventoryDetailMapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import java.util.List; + /** * WMS 库存明细 Service 实现类 * @@ -25,4 +29,13 @@ public class WmsInventoryDetailServiceImpl implements WmsInventoryDetailService return inventoryDetailMapper.selectPage(pageReqVO); } + @Override + @Transactional(rollbackFor = Exception.class) + public void createInventoryDetailList(List list) { + if (CollUtil.isEmpty(list)) { + return; + } + inventoryDetailMapper.insertBatch(list); + } + } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryHistoryService.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryHistoryService.java index 6700fb5..ef2bc2c 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryHistoryService.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryHistoryService.java @@ -4,6 +4,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.history.WmsInventoryHistoryPageReqVO; import cn.iocoder.yudao.module.wms.dal.dataobject.inventory.WmsInventoryHistoryDO; +import java.util.List; + /** * WMS 库存流水 Service 接口 * @@ -19,4 +21,11 @@ public interface WmsInventoryHistoryService { */ PageResult getInventoryHistoryPage(WmsInventoryHistoryPageReqVO pageReqVO); + /** + * 创建库存流水列表 + * + * @param list 库存流水列表 + */ + void createInventoryHistoryList(List list); + } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryHistoryServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryHistoryServiceImpl.java index 8c38011..5feef50 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryHistoryServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryHistoryServiceImpl.java @@ -1,13 +1,17 @@ package cn.iocoder.yudao.module.wms.service.inventory; +import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.history.WmsInventoryHistoryPageReqVO; import cn.iocoder.yudao.module.wms.dal.dataobject.inventory.WmsInventoryHistoryDO; import cn.iocoder.yudao.module.wms.dal.mysql.inventory.WmsInventoryHistoryMapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import java.util.List; + /** * WMS 库存流水 Service 实现类 * @@ -25,4 +29,13 @@ public class WmsInventoryHistoryServiceImpl implements WmsInventoryHistoryServic return inventoryHistoryMapper.selectPage(pageReqVO); } + @Override + @Transactional(rollbackFor = Exception.class) + public void createInventoryHistoryList(List list) { + if (CollUtil.isEmpty(list)) { + return; + } + inventoryHistoryMapper.insertBatch(list); + } + } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryService.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryService.java index 741b284..76d0b8d 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryService.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryService.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.wms.service.inventory; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.WmsInventoryPageReqVO; import cn.iocoder.yudao.module.wms.dal.dataobject.inventory.WmsInventoryDO; +import cn.iocoder.yudao.module.wms.service.inventory.dto.WmsInventoryChangeReqDTO; /** * WMS 库存 Service 接口 @@ -27,4 +28,11 @@ public interface WmsInventoryService { */ long getInventoryCountBySkuId(Long skuId); + /** + * 变更库存 + * + * @param reqDTO 库存变更请求 + */ + void changeInventory(WmsInventoryChangeReqDTO reqDTO); + } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImpl.java index e08e1cc..8cf79e3 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImpl.java @@ -1,14 +1,26 @@ package cn.iocoder.yudao.module.wms.service.inventory; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Tuple; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.WmsInventoryPageReqVO; +import cn.iocoder.yudao.module.wms.dal.dataobject.inventory.WmsInventoryDetailDO; import cn.iocoder.yudao.module.wms.dal.dataobject.inventory.WmsInventoryDO; +import cn.iocoder.yudao.module.wms.dal.dataobject.inventory.WmsInventoryHistoryDO; import cn.iocoder.yudao.module.wms.dal.mysql.inventory.WmsInventoryMapper; +import cn.iocoder.yudao.module.wms.framework.config.WmsProperties; +import cn.iocoder.yudao.module.wms.service.inventory.dto.WmsInventoryChangeReqDTO; import jakarta.annotation.Resource; +import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + /** * WMS 库存 Service 实现类 * @@ -21,6 +33,14 @@ public class WmsInventoryServiceImpl implements WmsInventoryService { @Resource private WmsInventoryMapper inventoryMapper; + @Resource + private WmsInventoryDetailService inventoryDetailService; + @Resource + private WmsInventoryHistoryService inventoryHistoryService; + + @Resource + private WmsProperties wmsProperties; + @Override public PageResult getInventoryPage(WmsInventoryPageReqVO pageReqVO) { if (StrUtil.equals(WmsInventoryPageReqVO.TYPE_WAREHOUSE, pageReqVO.getType())) { @@ -34,4 +54,97 @@ public class WmsInventoryServiceImpl implements WmsInventoryService { return inventoryMapper.selectCountBySkuId(skuId); } + @Override + @Transactional(rollbackFor = Exception.class) + public void changeInventory(WmsInventoryChangeReqDTO reqDTO) { + if (reqDTO == null || CollUtil.isEmpty(reqDTO.getItems())) { + return; + } + + // 1. 变更库存余额,并构建库存流水与批次库存明细 + boolean batchEnabled = wmsProperties.isBatchEnabled(); + List histories = new ArrayList<>(reqDTO.getItems().size()); + List details = batchEnabled ? new ArrayList<>(reqDTO.getItems().size()) : List.of(); + for (WmsInventoryChangeReqDTO.Item item : reqDTO.getItems()) { + // 1.1 变更库存余额 + Tuple result = changeInventory0(item); + // 1.2 构建库存流水与批次库存明细 + histories.add(buildInventoryHistory(reqDTO, item, result)); + if (batchEnabled) { + details.add(buildInventoryDetail(reqDTO, item)); + } + } + + // 2.1 批量写入库存流水 + inventoryHistoryService.createInventoryHistoryList(histories); + if (batchEnabled) { + // 2.2 批量写入批次库存明细 + inventoryDetailService.createInventoryDetailList(details); + } + } + + /** + * 变更库存余额 + * + * @param item 库存变更明细 + * @return 变更前数量、变更后数量 + */ + private Tuple changeInventory0(WmsInventoryChangeReqDTO.Item item) { + // 1. 获取或创建库存余额,使用 FOR UPDATE 锁定行 + WmsInventoryDO inventory = getOrCreateInventory(item); + // 2. 变更库存余额 + BigDecimal beforeQuantity = inventory.getQuantity(); + BigDecimal afterQuantity = beforeQuantity.add(item.getQuantity()); + inventoryMapper.updateQuantity(inventory.getId(), item.getQuantity()); + return new Tuple(beforeQuantity, afterQuantity); + } + + + private WmsInventoryDO getOrCreateInventory(WmsInventoryChangeReqDTO.Item item) { + // 1. 查询库存余额,使用 FOR UPDATE 锁定行 + WmsInventoryDO inventory = inventoryMapper.selectBySkuIdAndWarehouseIdAndAreaIdForUpdate(item.getSkuId(), + item.getWarehouseId(), item.getAreaId()); + if (inventory != null) { + return inventory; + } + // 2.1 不存在,则插入一条库存余额记录,初始数量为 0 + try { + inventory = new WmsInventoryDO().setSkuId(item.getSkuId()) + .setWarehouseId(item.getWarehouseId()).setAreaId(item.getAreaId()).setQuantity(BigDecimal.ZERO); + inventoryMapper.insert(inventory); + return inventory; + } catch (DuplicateKeyException ex) { + // 2.2 插入失败,说明有并发冲突,重试查询库存余额 + inventory = inventoryMapper.selectBySkuIdAndWarehouseIdAndAreaIdForUpdate(item.getSkuId(), + item.getWarehouseId(), item.getAreaId()); + if (inventory == null) { + throw ex; + } + return inventory; + } + } + + private WmsInventoryHistoryDO buildInventoryHistory(WmsInventoryChangeReqDTO reqDTO, + WmsInventoryChangeReqDTO.Item item, + Tuple result) { + return new WmsInventoryHistoryDO() + .setWarehouseId(item.getWarehouseId()).setAreaId(item.getAreaId()).setSkuId(item.getSkuId()) + .setQuantity(item.getQuantity()).setBeforeQuantity(result.get(0)).setAfterQuantity(result.get(1)) + .setBatchNo(item.getBatchNo()).setProductionDate(item.getProductionDate()) + .setExpirationDate(item.getExpirationDate()) + .setAmount(item.getAmount()).setRemark(item.getRemark()) + .setOrderId(reqDTO.getOrderId()).setOrderNo(reqDTO.getOrderNo()).setOrderType(reqDTO.getOrderType()); + } + + private WmsInventoryDetailDO buildInventoryDetail(WmsInventoryChangeReqDTO reqDTO, + WmsInventoryChangeReqDTO.Item item) { + return new WmsInventoryDetailDO() + .setSkuId(item.getSkuId()).setWarehouseId(item.getWarehouseId()).setAreaId(item.getAreaId()) + .setQuantity(item.getQuantity()).setRemainQuantity(item.getQuantity()) + .setBatchNo(item.getBatchNo()).setProductionDate(item.getProductionDate()) + .setExpirationDate(item.getExpirationDate()) + .setAmount(item.getAmount()).setRemark(item.getRemark()) + .setOrderId(reqDTO.getOrderId()).setOrderNo(reqDTO.getOrderNo()).setOrderType(reqDTO.getOrderType()); + } + } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/dto/WmsInventoryChangeReqDTO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/dto/WmsInventoryChangeReqDTO.java new file mode 100644 index 0000000..339a2d3 --- /dev/null +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/dto/WmsInventoryChangeReqDTO.java @@ -0,0 +1,89 @@ +package cn.iocoder.yudao.module.wms.service.inventory.dto; + +import cn.iocoder.yudao.module.wms.enums.inventory.WmsInventoryOrderTypeEnum; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * WMS 库存变更请求 DTO + * + * @author 芋道源码 + */ +@Data +public class WmsInventoryChangeReqDTO { + + /** + * 操作单编号 + */ + private Long orderId; + /** + * 操作单号 + */ + private String orderNo; + /** + * 操作类型 + * + * 枚举 {@link WmsInventoryOrderTypeEnum#getType()} + */ + private Integer orderType; + + /** + * 库存变更明细 + */ + private List items; + + /** + * WMS 库存变更明细 + */ + @Data + public static class Item { + + /** + * SKU 编号 + */ + private Long skuId; + /** + * 仓库编号 + */ + private Long warehouseId; + /** + * 库区编号 + */ + private Long areaId; + /** + * 变更数量 + */ + private BigDecimal quantity; + + // ========= 批次效期相关字段 ========= + + /** + * 批号 + */ + private String batchNo; + /** + * 生产日期 + */ + private LocalDateTime productionDate; + /** + * 过期日期 + */ + private LocalDateTime expirationDate; + + // ========= 金额备注相关字段 ========= + + /** + * 金额(小计、非单价) + */ + private BigDecimal amount; + /** + * 备注 + */ + private String remark; + + } + +} diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemSkuService.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemSkuService.java index 13abb96..d5ab997 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemSkuService.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemSkuService.java @@ -42,6 +42,14 @@ public interface WmsItemSkuService { void deleteItemSkuListByItemId(Long itemId); /** + * 校验 SKU 存在 + * + * @param id 编号 + * @return SKU + */ + WmsItemSkuDO validateItemSkuExists(Long id); + + /** * 按商品编号获得 SKU 列表 * * @param itemId 商品编号 diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemSkuServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemSkuServiceImpl.java index ce4263e..89ad41a 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemSkuServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/item/WmsItemSkuServiceImpl.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.wms.service.md.item; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.wms.controller.admin.md.item.vo.sku.WmsItemSkuSaveReqVO; @@ -91,6 +92,15 @@ public class WmsItemSkuServiceImpl implements WmsItemSkuService { } @Override + public WmsItemSkuDO validateItemSkuExists(Long id) { + WmsItemSkuDO sku = itemSkuMapper.selectById(id); + if (sku == null) { + throw exception(ITEM_SKU_NOT_EXISTS); + } + return sku; + } + + @Override public List getItemSkuList(Long itemId) { return itemSkuMapper.selectListByItemId(itemId); } @@ -108,7 +118,7 @@ public class WmsItemSkuServiceImpl implements WmsItemSkuService { @Override public List getItemSkuListByIds(Collection ids) { if (CollUtil.isEmpty(ids)) { - return List.of(); + return ListUtil.of(); } return itemSkuMapper.selectByIds(ids); } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/merchant/WmsMerchantService.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/merchant/WmsMerchantService.java index 54c750d..61d6210 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/merchant/WmsMerchantService.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/merchant/WmsMerchantService.java @@ -6,7 +6,11 @@ import cn.iocoder.yudao.module.wms.controller.admin.md.merchant.vo.WmsMerchantSa import cn.iocoder.yudao.module.wms.dal.dataobject.md.merchant.WmsMerchantDO; import jakarta.validation.Valid; +import java.util.Collection; import java.util.List; +import java.util.Map; + +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; /** * WMS 往来企业 Service 接口 @@ -69,4 +73,22 @@ public interface WmsMerchantService { */ List getMerchantList(WmsMerchantPageReqVO pageReqVO); + /** + * 按编号集合获得往来企业列表 + * + * @param ids 编号集合 + * @return 往来企业列表 + */ + List getMerchantList(Collection ids); + + /** + * 按编号集合获得往来企业 Map + * + * @param ids 编号集合 + * @return 往来企业 Map + */ + default Map getMerchantMap(Collection ids) { + return convertMap(getMerchantList(ids), WmsMerchantDO::getId); + } + } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/merchant/WmsMerchantServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/merchant/WmsMerchantServiceImpl.java index 0e9fcbb..17faa8b 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/merchant/WmsMerchantServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/md/merchant/WmsMerchantServiceImpl.java @@ -1,5 +1,7 @@ package cn.iocoder.yudao.module.wms.service.md.merchant; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.wms.controller.admin.md.merchant.vo.WmsMerchantPageReqVO; @@ -10,6 +12,7 @@ import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.util.Collection; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -78,4 +81,12 @@ public class WmsMerchantServiceImpl implements WmsMerchantService { return merchantMapper.selectList(pageReqVO); } + @Override + public List getMerchantList(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return ListUtil.of(); + } + return merchantMapper.selectByIds(ids); + } + }