package cn.iocoder.yudao.module.wms.controller.admin.inventory; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.dict.core.DictFrameworkUtils; import cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.WmsInventoryReservePageReqVO; import cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.WmsInventoryReserveRespVO; import cn.iocoder.yudao.module.wms.dal.dataobject.inventory.WmsInventoryReserveDO; import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemSkuDO; import cn.iocoder.yudao.module.wms.dal.dataobject.md.warehouse.WmsWarehouseDO; import cn.iocoder.yudao.module.wms.enums.DictTypeConstants; import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryReserveService; import cn.iocoder.yudao.module.wms.service.md.item.WmsItemSkuService; import cn.iocoder.yudao.module.wms.service.md.warehouse.WmsWarehouseService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; @Tag(name = "管理后台 - 库存预留") @RestController @RequestMapping("/wms/inventory-reserve") @Validated public class WmsInventoryReserveController { @Resource private WmsInventoryReserveService reserveService; @Resource private WmsItemSkuService itemSkuService; @Resource private WmsWarehouseService warehouseService; @GetMapping("/page") @Operation(summary = "获得库存预留分页") @PreAuthorize("@ss.hasPermission('wms:inventory-reserve:query')") public CommonResult> getInventoryReservePage(@Valid WmsInventoryReservePageReqVO reqVO) { PageResult pageResult = reserveService.getReservePage(reqVO); // 转换 PageResult voPageResult = BeanUtils.toBean(pageResult, WmsInventoryReserveRespVO.class); // 补充信息 enrichReserveList(voPageResult.getList()); return success(voPageResult); } @GetMapping("/get") @Operation(summary = "获得库存预留详情") @Parameter(name = "id", description = "编号", required = true, example = "1") @PreAuthorize("@ss.hasPermission('wms:inventory-reserve:query')") public CommonResult getInventoryReserve(@RequestParam("id") Long id) { WmsInventoryReserveDO reserve = reserveService.getReserve(id); if (reserve == null) { return success(null); } WmsInventoryReserveRespVO respVO = BeanUtils.toBean(reserve, WmsInventoryReserveRespVO.class); // 补充信息 enrichReserve(respVO); return success(respVO); } @PostMapping("/release") @Operation(summary = "释放库存预留") @Parameter(name = "id", description = "编号", required = true, example = "1") @PreAuthorize("@ss.hasPermission('wms:inventory-reserve:release')") public CommonResult releaseInventoryReserve(@RequestParam("id") Long id) { WmsInventoryReserveDO reserve = reserveService.getReserve(id); if (reserve != null) { reserveService.releaseReserve(reserve.getReserveNo()); } return success(true); } /** * 批量补充预留记录信息 */ private void enrichReserveList(List list) { if (list == null || list.isEmpty()) { return; } // 获取 SKU 信息 Map skuMap = itemSkuService.getItemSkuMap( convertSet(list, WmsInventoryReserveRespVO::getSkuId)); // 获取仓库信息 Map warehouseMap = warehouseService.getWarehouseMap( convertSet(list, WmsInventoryReserveRespVO::getWarehouseId)); for (WmsInventoryReserveRespVO vo : list) { // 业务类型名称 vo.setBizTypeName(DictFrameworkUtils.parseDictDataLabel(DictTypeConstants.WMS_RESERVE_BIZ_TYPE, vo.getBizType())); // 状态名称 vo.setStatusName(DictFrameworkUtils.parseDictDataLabel(DictTypeConstants.WMS_RESERVE_STATUS, vo.getStatus())); // SKU 名称 WmsItemSkuDO sku = skuMap.get(vo.getSkuId()); if (sku != null) { vo.setSkuName(sku.getName()); } // 仓库名称 WmsWarehouseDO warehouse = warehouseMap.get(vo.getWarehouseId()); if (warehouse != null) { vo.setWarehouseName(warehouse.getName()); } } } /** * 补充单个预留记录信息 */ private void enrichReserve(WmsInventoryReserveRespVO vo) { // 业务类型名称 vo.setBizTypeName(DictFrameworkUtils.parseDictDataLabel(DictTypeConstants.WMS_RESERVE_BIZ_TYPE, vo.getBizType())); // 状态名称 vo.setStatusName(DictFrameworkUtils.parseDictDataLabel(DictTypeConstants.WMS_RESERVE_STATUS, vo.getStatus())); // SKU 名称 List skuList = itemSkuService.getItemSkuListByIds(List.of(vo.getSkuId())); if (!skuList.isEmpty()) { vo.setSkuName(skuList.get(0).getName()); } // 仓库名称 WmsWarehouseDO warehouse = warehouseService.getWarehouse(vo.getWarehouseId()); if (warehouse != null) { vo.setWarehouseName(warehouse.getName()); } } }