yaowanxin
6 天以前 9d5128803ebebb5788f13924a5775ac16494dfef
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
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.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.setChildren(new ArrayList<>());
        return dto;
    }
 
}