yaowanxin
4 天以前 b33e6f53dd537abaebad066de12474580fcc33b2
src/main/java/com/ruoyi/warehouse/service/impl/WarehouseGoodsShelvesServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,179 @@
package com.ruoyi.warehouse.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.warehouse.dto.WarehouseGoodsShelvesDto;
import com.ruoyi.warehouse.mapper.DocumentationMapper;
import com.ruoyi.warehouse.mapper.WarehouseGoodsShelvesMapper;
import com.ruoyi.warehouse.mapper.WarehouseGoodsShelvesRowcolMapper;
import com.ruoyi.warehouse.pojo.Documentation;
import com.ruoyi.warehouse.pojo.WarehouseGoodsShelvesRowcol;
import com.ruoyi.warehouse.service.DocumentationService;
import com.ruoyi.warehouse.service.WarehouseGoodsShelvesRowcolService;
import com.ruoyi.warehouse.service.WarehouseGoodsShelvesService;
import lombok.extern.slf4j.Slf4j;
import com.ruoyi.warehouse.pojo.WarehouseGoodsShelves;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author 86151
* @description é’ˆå¯¹è¡¨ã€warehouse_goods_shelves(仓库货架表)】的数据库操作Service实现
* @createDate 2025-08-13 11:49:02
*/
@Service
@Slf4j
@Transactional(rollbackFor = Exception.class)
public class WarehouseGoodsShelvesServiceImpl extends ServiceImpl<WarehouseGoodsShelvesMapper, WarehouseGoodsShelves>
    implements WarehouseGoodsShelvesService {
    @Autowired
    private WarehouseGoodsShelvesRowcolService warehouseGoodsShelvesRowcolService;
    @Autowired
    private WarehouseGoodsShelvesRowcolMapper warehouseGoodsShelvesRowcolMapper;
    @Autowired
    private WarehouseGoodsShelvesMapper warehouseGoodsShelvesMapper;
    @Autowired
    private DocumentationService documentationService;
    @Autowired
    private DocumentationMapper documentationMapper;
    @Override
    public boolean add(WarehouseGoodsShelves warehouseGoodsShelves) {
        WarehouseGoodsShelves one = warehouseGoodsShelvesMapper.selectOne(new LambdaQueryWrapper<WarehouseGoodsShelves>().eq(WarehouseGoodsShelves::getId, warehouseGoodsShelves.getId()));
        // 1. æ£€æŸ¥è´§æž¶åç§°æ˜¯å¦å·²å­˜åœ¨
        if (one == null) {
            if(warehouseGoodsShelves.getRow() == null || warehouseGoodsShelves.getRow() == 0 && warehouseGoodsShelves.getCol() == null || warehouseGoodsShelves.getCol() == 0){
                throw new IllegalArgumentException("层数和列数不能为空");
            }
            int insert = warehouseGoodsShelvesMapper.insert(warehouseGoodsShelves);
            if (insert <= 0) return false;
        }
        Long shelvesId = warehouseGoodsShelves.getId();
        Long warehouseId = warehouseGoodsShelves.getWarehouseId();
        // 3. æ‰¹é‡åˆ›å»ºè¡Œåˆ—记录
        List<WarehouseGoodsShelvesRowcol> rowcolList = new ArrayList<>();
        for (long i = 1; i <= warehouseGoodsShelves.getRow(); i++) {
            for (long j = 1; j <= warehouseGoodsShelves.getCol(); j++) {
                WarehouseGoodsShelvesRowcol rowcol = new WarehouseGoodsShelvesRowcol();
                rowcol.setRow(i);
                rowcol.setCol(j);
                rowcol.setWarehouseGoodsShelvesId(shelvesId);
                rowcolList.add(rowcol);
            }
        }
        // 4. æ‰¹é‡æ’入行列记录
        if (!rowcolList.isEmpty()) {
            try {
                // ä½¿ç”¨æ‰¹é‡æ’入方法替代循环单条插入
                warehouseGoodsShelvesRowcolService.saveBatch(rowcolList);
            } catch (Exception e) {
                // æŠ›å‡ºå¼‚常触发事务回滚
                throw e;
            }
        }
        return true;
    }
    /**
     * æ ¹æ®ID更新货架及其行列信息
     * @param warehouseGoodsShelves è´§æž¶ä¿¡æ¯
     * @return æ˜¯å¦æ›´æ–°æˆåŠŸ
     */
    @Override
    public boolean updateRowcolById(WarehouseGoodsShelves warehouseGoodsShelves) {
        Long shelvesId = warehouseGoodsShelves.getId();
        // æž„建查询条件:查询该货架下的所有行列记录
        Wrapper<WarehouseGoodsShelvesRowcol> queryWrapper = new LambdaQueryWrapper<WarehouseGoodsShelvesRowcol>()
                .eq(WarehouseGoodsShelvesRowcol::getWarehouseGoodsShelvesId, shelvesId);
        List<WarehouseGoodsShelvesRowcol> rowcolList = warehouseGoodsShelvesRowcolService.list(queryWrapper);
        //获得rowcolList中所有的Id
        List<Long> rowcolIds = rowcolList.stream()
                .map(WarehouseGoodsShelvesRowcol::getId)
                .collect(Collectors.toList());
        // 3. æ£€æŸ¥æ˜¯å¦æœ‰å•†å“
        Wrapper<Documentation> queryWrapper1 = new LambdaQueryWrapper<Documentation>()
                .in(Documentation::getWarehouseGoodsShelvesRowcolId, rowcolIds);
        List<Documentation> documentations = documentationMapper.selectList(queryWrapper1);
        if (!documentations.isEmpty()) throw new RuntimeException("货架下有商品,不能删除");
        // å…ˆæ›´æ–°è´§æž¶ä¸»ä¿¡æ¯
        updateById(warehouseGoodsShelves);
        // åˆ é™¤æ—§çš„行列记录
        warehouseGoodsShelvesRowcolService.removeByIds(rowcolIds);
        // æ·»åŠ æ–°çš„è¡Œåˆ—è®°å½•
        add(warehouseGoodsShelves);
        return true;
    }
    /**
     * æ‰¹é‡åˆ é™¤è´§æž¶åŠå…¶å…³è”的行列记录
     * @param ids è´§æž¶ID列表
     * @return æ˜¯å¦åˆ é™¤æˆåŠŸ
     */
    @Override
    public boolean deleteByIds(List<Long> ids) {
        // 1. å…ˆæŸ¥è¯¢æ‰€æœ‰è¦åˆ é™¤çš„货架信息
        List<WarehouseGoodsShelves> shelvesList = warehouseGoodsShelvesMapper.selectBatchIds(ids);
        // 2. æ£€æŸ¥æ‰€æœ‰è´§æž¶æ˜¯å¦å­˜åœ¨å•†å“ï¼ˆæœ‰å•†å“åˆ™ä¸å…è®¸åˆ é™¤ï¼‰
        for (WarehouseGoodsShelves shelves : shelvesList) {
            Long shelvesId = shelves.getId();
            // æž„建查询条件:查询当前货架的所有行列记录
            Wrapper<WarehouseGoodsShelvesRowcol> queryWrapper = new LambdaQueryWrapper<WarehouseGoodsShelvesRowcol>()
                    .eq(WarehouseGoodsShelvesRowcol::getWarehouseGoodsShelvesId, shelvesId);
            List<WarehouseGoodsShelvesRowcol> rowcolList = warehouseGoodsShelvesRowcolService.list(queryWrapper);
            if (CollectionUtils.isEmpty(rowcolList)) {
                continue; // æ— å…³è”记录,跳过检查
            }
            //获得rowcolList中所有的Id
            List<Long> rowcolIds = rowcolList.stream()
                    .map(WarehouseGoodsShelvesRowcol::getId)
                    .collect(Collectors.toList());
            // 3. æ£€æŸ¥æ˜¯å¦æœ‰å•†å“
            Wrapper<Documentation> queryWrapper1 = new LambdaQueryWrapper<Documentation>()
                    .in(Documentation::getWarehouseGoodsShelvesRowcolId, rowcolIds);
            List<Documentation> documentations = documentationMapper.selectList(queryWrapper1);
            if (!documentations.isEmpty()) throw new RuntimeException("货架下有商品,不能删除"); // ä»»ä¸€è´§æž¶æœ‰å•†å“åˆ™ç»ˆæ­¢åˆ é™¤
        }
        // 3. å…ˆåˆ é™¤è´§æž¶ä¸»è®°å½•
        warehouseGoodsShelvesMapper.deleteBatchIds(ids);
        // 4. æ‰¹é‡åˆ é™¤æ‰€æœ‰è¡Œåˆ—记录
        List<Long> allShelvesIds = shelvesList.stream()
                .map(WarehouseGoodsShelves::getId)
                .collect(Collectors.toList());
        // æž„建批量删除条件
        Wrapper<WarehouseGoodsShelvesRowcol> deleteWrapper = new LambdaQueryWrapper<WarehouseGoodsShelvesRowcol>()
                .in(WarehouseGoodsShelvesRowcol::getWarehouseGoodsShelvesId, allShelvesIds);
        warehouseGoodsShelvesRowcolService.remove(deleteWrapper);
        return true;
    }
    @Override
    public List<WarehouseGoodsShelvesDto> findList(WarehouseGoodsShelves warehouseGoodsShelves) {
        return warehouseGoodsShelvesMapper.listAll(warehouseGoodsShelves);
    }
}