yaowanxin
4 天以前 b33e6f53dd537abaebad066de12474580fcc33b2
src/main/java/com/ruoyi/warehouse/service/impl/WarehouseServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,175 @@
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<WarehouseMapper, Warehouse>
    implements WarehouseService {
    @Autowired
    private WarehouseMapper warehouseMapper;
    @Autowired
    private WarehouseGoodsShelvesService warehouseGoodsShelvesService;
    @Autowired
    private WarehouseGoodsShelvesMapper warehouseGoodsShelvesMapper;
    @Autowired
    private WarehouseGoodsShelvesRowcolMapper warehouseGoodsShelvesRowcolMapper;
    @Override
    public boolean deleteByIds(List<Long> ids) {
        // 1. æ£€æŸ¥æ˜¯å¦æœ‰è´§æž¶
        Wrapper<WarehouseGoodsShelves> queryWrapper = new LambdaQueryWrapper<WarehouseGoodsShelves>()
                .in(WarehouseGoodsShelves::getWarehouseId, ids);
        List<WarehouseGoodsShelves> shelvesList = warehouseGoodsShelvesService.list(queryWrapper);
        //获得shelvesList中所有的Id
        List<Long> 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<Warehouse> findList(Warehouse warehouse) {
        return warehouseMapper.listAll(warehouse);
    }
    /**
     * æŸ¥è¯¢ä»“库-货架-层列三级树结构
     */
    @Override
    public List<WarehouseTreeDto> findListTree() {
        // æŸ¥è¯¢æ‰€æœ‰æ ¹èŠ‚ç‚¹ï¼ˆä»“åº“ï¼‰
        LambdaQueryWrapper<Warehouse> queryWrapper = new LambdaQueryWrapper<>();
        // æŸ¥è¯¢ä»“库列表(一级节点)
        List<Warehouse> warehouseList = warehouseMapper.selectList(queryWrapper);
        // è½¬æ¢ä¸ºæ ‘节点并构建子树
        List<WarehouseTreeDto> tree = new ArrayList<>();
        for (Warehouse warehouse : warehouseList) {
            WarehouseTreeDto node = convertToWarehouseTreeDto(warehouse);
            // ä¸ºæ¯ä¸ªä»“库添加货架子节点
            node.setChildren(buildShelfChildrenNodes(warehouse.getId()));
            tree.add(node);
        }
        return tree;
    }
    /**
     * æž„建货架子节点(二级节点)
     */
    private List<WarehouseTreeDto> buildShelfChildrenNodes(Long warehouseId) {
        // æŸ¥è¯¢æŒ‡å®šä»“库下的所有货架
        LambdaQueryWrapper<WarehouseGoodsShelves> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(WarehouseGoodsShelves::getWarehouseId, warehouseId);
        List<WarehouseGoodsShelves> shelfList = warehouseGoodsShelvesMapper.selectList(queryWrapper);
        // è½¬æ¢ä¸ºæ ‘节点并构建层列子节点
        List<WarehouseTreeDto> shelfNodes = new ArrayList<>();
        for (WarehouseGoodsShelves shelf : shelfList) {
            WarehouseTreeDto shelfNode = convertToShelfTreeDto(shelf);
            // ä¸ºæ¯ä¸ªè´§æž¶æ·»åŠ å±‚åˆ—å­èŠ‚ç‚¹
            shelfNode.setChildren(buildRowcolChildrenNodes(shelf.getId()));
            shelfNodes.add(shelfNode);
        }
        return shelfNodes;
    }
    /**
     * æž„建层列子节点(三级节点)
     */
    private List<WarehouseTreeDto> buildRowcolChildrenNodes(Long shelfId) {
        // æŸ¥è¯¢æŒ‡å®šè´§æž¶ä¸‹çš„æ‰€æœ‰å±‚列
        LambdaQueryWrapper<WarehouseGoodsShelvesRowcol> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(WarehouseGoodsShelvesRowcol::getWarehouseGoodsShelvesId, shelfId);
        List<WarehouseGoodsShelvesRowcol> rowcolList = warehouseGoodsShelvesRowcolMapper.selectList(queryWrapper);
        // è½¬æ¢ä¸ºæ ‘节点(层列没有子节点)
        List<WarehouseTreeDto> 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;
    }
}