| | |
| | | package com.ruoyi.system.service.impl; |
| | | |
| | | import cn.hutool.core.bean.BeanUtil; |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | 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.common.core.domain.entity.SysDept; |
| | | import com.ruoyi.common.exception.ServiceException; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.system.dto.asset.AssetWarehouseDTO; |
| | | import com.ruoyi.system.mapper.AssetWarehouseMapper; |
| | | import com.ruoyi.system.mapper.SysDeptMapper; |
| | | import com.ruoyi.system.model.AssetInventoryRecord; |
| | | import com.ruoyi.system.model.AssetWarehouse; |
| | | import com.ruoyi.system.query.AssetWarehousePageQuery; |
| | | import com.ruoyi.system.service.AssetInventoryRecordService; |
| | | import com.ruoyi.system.service.AssetWarehouseService; |
| | | import com.ruoyi.system.vo.asset.AssetWarehouseVO; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | * @since 2025-09-15 |
| | | */ |
| | | @Service |
| | | @RequiredArgsConstructor |
| | | public class AssetWarehouseServiceImpl extends ServiceImpl<AssetWarehouseMapper, AssetWarehouse> implements AssetWarehouseService { |
| | | |
| | | private final AssetInventoryRecordService assetInventoryRecordService; |
| | | private final SysDeptMapper sysDeptMapper; |
| | | |
| | | @Override |
| | | public IPage<AssetWarehouseVO> getPageList(AssetWarehousePageQuery pageQuery) { |
| | | LambdaQueryWrapper<AssetWarehouse> queryWrapper = new LambdaQueryWrapper<>(); |
| | | if (StringUtils.isNotBlank(pageQuery.getKeyword())) { |
| | | queryWrapper.like(AssetWarehouse::getWarehouseName, pageQuery.getKeyword()) |
| | | .or() |
| | | .like(AssetWarehouse::getManagerName, pageQuery.getKeyword()); |
| | | } |
| | | Page<AssetWarehouse> page = this.page(new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()), queryWrapper); |
| | | Page<AssetWarehouseVO> pageVO = new Page<>(); |
| | | BeanUtil.copyProperties(page, pageVO, "records"); |
| | | List<AssetWarehouseVO> assetWarehouseVOS = BeanUtil.copyToList(page.getRecords(), AssetWarehouseVO.class); |
| | | if (CollUtil.isEmpty(assetWarehouseVOS)) { |
| | | return pageVO; |
| | | } |
| | | List<Integer> warehouseIds = assetWarehouseVOS.stream().map(AssetWarehouseVO::getId).collect(Collectors.toList()); |
| | | List<Integer> deptIds = assetWarehouseVOS.stream().map(AssetWarehouseVO::getDeptId).distinct().collect(Collectors.toList()); |
| | | |
| | | List<SysDept> sysDepts = sysDeptMapper.selectByIds(deptIds); |
| | | Map<Integer, String> deptMap = sysDepts.stream() |
| | | .collect(Collectors.toMap(item->item.getDeptId().intValue(), SysDept::getDeptName)); |
| | | //查询库存数量 |
| | | Map<Integer, List<AssetInventoryRecord>> inventoryRecordMap = assetInventoryRecordService.lambdaQuery() |
| | | .in(AssetInventoryRecord::getWarehouseId, warehouseIds) |
| | | .list().stream().collect(Collectors.groupingBy(AssetInventoryRecord::getWarehouseId)); |
| | | //计算当前库存 |
| | | assetWarehouseVOS.forEach(warehouseVO -> { |
| | | List<AssetInventoryRecord> assetInventoryRecords = inventoryRecordMap.get(warehouseVO.getId()); |
| | | if (CollUtil.isEmpty(assetInventoryRecords)) { |
| | | warehouseVO.setCurrentStock(0); |
| | | } |
| | | long inStock = assetInventoryRecords.stream().filter(item -> item.getType().equals(0)).count(); |
| | | long outStock = assetInventoryRecords.stream().filter(item -> item.getType().equals(1)).count(); |
| | | warehouseVO.setCurrentStock((int) (inStock - outStock)); |
| | | //设置部门名称 |
| | | warehouseVO.setDeptName(deptMap.getOrDefault(warehouseVO.getDeptId(), "")); |
| | | }); |
| | | pageVO.setRecords(assetWarehouseVOS); |
| | | return pageVO; |
| | | } |
| | | |
| | | @Override |
| | | public void add(AssetWarehouseDTO dto) { |
| | | AssetWarehouse assetWarehouse = BeanUtil.copyProperties(dto, AssetWarehouse.class); |
| | | String username = SecurityUtils.getUsername(); |
| | | assetWarehouse.setCreateBy(username); |
| | | this.save(assetWarehouse); |
| | | } |
| | | |
| | | @Override |
| | | public void edit(AssetWarehouseDTO dto) { |
| | | if (Objects.isNull(dto.getId())) { |
| | | throw new ServiceException("仓库ID不能为空"); |
| | | } |
| | | AssetWarehouse assetWarehouse = BeanUtil.copyProperties(dto, AssetWarehouse.class); |
| | | String username = SecurityUtils.getUsername(); |
| | | assetWarehouse.setUpdateBy(username); |
| | | this.updateById(assetWarehouse); |
| | | } |
| | | |
| | | @Override |
| | | public void delete(Integer id) { |
| | | if (Objects.isNull(id)) { |
| | | throw new ServiceException("仓库ID不能为空"); |
| | | } |
| | | List<AssetInventoryRecord> list = assetInventoryRecordService.lambdaQuery().eq(AssetInventoryRecord::getWarehouseId, id).list(); |
| | | if (CollUtil.isNotEmpty(list)) { |
| | | List<Integer> inStockIds = list.stream().filter(item -> item.getType().equals(0)).map(AssetInventoryRecord::getAssetMainId).collect(Collectors.toList()); |
| | | list.stream().filter(item -> item.getType().equals(1)).forEach(item -> { |
| | | inStockIds.remove(item.getAssetMainId()); |
| | | }); |
| | | if (CollUtil.isNotEmpty(inStockIds)) { |
| | | throw new ServiceException("该仓库存在库存记录,不能删除"); |
| | | } |
| | | } |
| | | this.removeById(id); |
| | | } |
| | | } |