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;
|
}
|
|
}
|