package com.ruoyi.warehouse.service.impl; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.warehouse.dto.WarehouseDto; import com.ruoyi.warehouse.dto.WarehouseGoodsShelvesDto; import com.ruoyi.warehouse.dto.WarehouseTreeDto; import com.ruoyi.warehouse.mapper.WarehouseGoodsShelvesMapper; import com.ruoyi.warehouse.mapper.WarehouseGoodsShelvesRowcolMapper; import com.ruoyi.warehouse.mapper.WarehouseMapper; import com.ruoyi.warehouse.pojo.Warehouse; import com.ruoyi.warehouse.pojo.WarehouseGoodsShelves; import com.ruoyi.warehouse.pojo.WarehouseGoodsShelvesRowcol; import com.ruoyi.warehouse.service.WarehouseGoodsShelvesService; import com.ruoyi.warehouse.service.WarehouseService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.sql.Array; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import static org.springframework.beans.BeanUtils.copyProperties; /** * @author 86151 * @description 针对表【warehouse(仓库表)】的数据库操作Service实现 * @createDate 2025-08-13 11:49:02 */ @Service @Slf4j public class WarehouseServiceImpl extends ServiceImpl implements WarehouseService { @Autowired private WarehouseMapper warehouseMapper; @Autowired private WarehouseGoodsShelvesService warehouseGoodsShelvesService; @Autowired private WarehouseGoodsShelvesMapper warehouseGoodsShelvesMapper; @Autowired private WarehouseGoodsShelvesRowcolMapper warehouseGoodsShelvesRowcolMapper; @Override public boolean deleteByIds(List ids) { // 1. 检查是否有货架 Wrapper queryWrapper = new LambdaQueryWrapper() .in(WarehouseGoodsShelves::getWarehouseId, ids); List shelvesList = warehouseGoodsShelvesService.list(queryWrapper); //获得shelvesList中所有的Id List shelvesIds = shelvesList.stream().map(WarehouseGoodsShelves::getId).collect(Collectors.toList()); // 2. 删除货架 if (!shelvesIds.isEmpty()) { boolean b = warehouseGoodsShelvesService.deleteByIds(shelvesIds); if (!b) { throw new RuntimeException("删除货架失败"); } } return removeByIds(ids); } @Override public List findList(Warehouse warehouse) { return warehouseMapper.listAll(warehouse); } /** * 查询仓库-货架-层列三级树结构 */ @Override public List findListTree() { // 查询所有根节点(仓库) LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); // 查询仓库列表(一级节点) List warehouseList = warehouseMapper.selectList(queryWrapper); // 转换为树节点并构建子树 List tree = new ArrayList<>(); for (Warehouse warehouse : warehouseList) { WarehouseTreeDto node = convertToWarehouseTreeDto(warehouse); // 为每个仓库添加货架子节点 node.setChildren(buildShelfChildrenNodes(warehouse.getId())); tree.add(node); } return tree; } /** * 构建货架子节点(二级节点) */ private List buildShelfChildrenNodes(Long warehouseId) { // 查询指定仓库下的所有货架 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(WarehouseGoodsShelves::getWarehouseId, warehouseId); List shelfList = warehouseGoodsShelvesMapper.selectList(queryWrapper); // 转换为树节点并构建层列子节点 List shelfNodes = new ArrayList<>(); for (WarehouseGoodsShelves shelf : shelfList) { WarehouseTreeDto shelfNode = convertToShelfTreeDto(shelf); // 为每个货架添加层列子节点 shelfNode.setChildren(buildRowcolChildrenNodes(shelf.getId())); shelfNodes.add(shelfNode); } return shelfNodes; } /** * 构建层列子节点(三级节点) */ private List buildRowcolChildrenNodes(Long shelfId) { // 查询指定货架下的所有层列 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(WarehouseGoodsShelvesRowcol::getWarehouseGoodsShelvesId, shelfId); List rowcolList = warehouseGoodsShelvesRowcolMapper.selectList(queryWrapper); // 转换为树节点(层列没有子节点) List rowcolNodes = new ArrayList<>(); for (WarehouseGoodsShelvesRowcol rowcol : rowcolList) { WarehouseTreeDto rowcolNode = convertToRowcolTreeDto(rowcol); rowcolNodes.add(rowcolNode); } return rowcolNodes; } /** * 仓库实体转换为树节点DTO */ private WarehouseTreeDto convertToWarehouseTreeDto(Warehouse warehouse) { WarehouseTreeDto dto = new WarehouseTreeDto(); copyProperties(warehouse, dto); dto.setLabel(warehouse.getWarehouseName()); dto.setChildren(new ArrayList<>()); return dto; } /** * 货架实体转换为树节点DTO */ private WarehouseTreeDto convertToShelfTreeDto(WarehouseGoodsShelves shelf) { WarehouseTreeDto dto = new WarehouseTreeDto(); copyProperties(shelf, dto); // dto.setLabel(shelf.getGoodsShelvesName()); dto.setLabel(shelf.getName()); dto.setChildren(new ArrayList<>()); return dto; } /** * 层列实体转换为树节点DTO */ private WarehouseTreeDto convertToRowcolTreeDto(WarehouseGoodsShelvesRowcol rowcol) { WarehouseTreeDto dto = new WarehouseTreeDto(); copyProperties(rowcol, dto); // dto.setLabel(rowcol.getStorey() + "-" + rowcol.getArrange()); dto.setLabel(rowcol.getRow() + "-" + rowcol.getCol()); dto.setChildren(new ArrayList<>()); return dto; } }