Files
klp-oa/klp-wms/src/main/java/com/klp/service/impl/WmsStockServiceImpl.java

173 lines
5.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.klp.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.klp.common.utils.StringUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.klp.domain.bo.WmsStockBo;
import com.klp.domain.vo.WmsStockVo;
import com.klp.domain.WmsStock;
import com.klp.domain.WmsWarehouse;
import com.klp.mapper.WmsStockMapper;
import com.klp.mapper.WmsWarehouseMapper;
import com.klp.service.IWmsStockService;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.ArrayList;
/**
* 库存:原材料/产品与库区/库位的存放关系Service业务层处理
*
* @author Joshi
* @date 2025-07-18
*/
@RequiredArgsConstructor
@Service
public class WmsStockServiceImpl implements IWmsStockService {
private final WmsStockMapper baseMapper;
private final WmsWarehouseMapper warehouseMapper;
/**
* 查询库存:原材料/产品与库区/库位的存放关系
*/
@Override
public WmsStockVo queryById(Long stockId){
return baseMapper.selectVoById(stockId);
}
/**
* 查询库存:原材料/产品与库区/库位的存放关系列表
*/
@Override
public TableDataInfo<WmsStockVo> queryPageList(WmsStockBo bo, PageQuery pageQuery) {
QueryWrapper<WmsStock> lqw = buildQueryWrapper(bo);
Page<WmsStockVo> result = baseMapper.selectVoPagePlus(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询库存:原材料/产品与库区/库位的存放关系列表
*/
@Override
public List<WmsStockVo> queryList(WmsStockBo bo) {
QueryWrapper<WmsStock> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private QueryWrapper<WmsStock> buildQueryWrapper(WmsStockBo bo) { // 注意:这里改用 QueryWrapper 而非 LambdaQueryWrapper
Map<String, Object> params = bo.getParams();
QueryWrapper<WmsStock> qw = Wrappers.query(); // 使用普通 QueryWrapper
qw.eq("s.del_flag", 0); // 手动添加逻辑删除条件
// 处理仓库ID查询支持递归查询子节点
if (bo.getWarehouseId() != null) {
List<Long> warehouseIds = getWarehouseIdsWithChildren(bo.getWarehouseId());
if (warehouseIds.size() == 1) {
qw.eq("s.warehouse_id", warehouseIds.get(0));
} else {
qw.in("s.warehouse_id", warehouseIds);
}
}
qw.eq(StringUtils.isNotBlank(bo.getItemType()), "s.item_type", bo.getItemType());
qw.eq(bo.getItemId() != null, "s.item_id", bo.getItemId());
qw.eq(bo.getQuantity() != null, "s.quantity", bo.getQuantity());
qw.eq(StringUtils.isNotBlank(bo.getUnit()), "s.unit", bo.getUnit());
qw.eq(StringUtils.isNotBlank(bo.getBatchNo()), "s.batch_no", bo.getBatchNo());
return qw;
}
/**
* 新增库存:原材料/产品与库区/库位的存放关系
*/
@Override
public Boolean insertByBo(WmsStockBo bo) {
WmsStock add = BeanUtil.toBean(bo, WmsStock.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setStockId(add.getStockId());
}
return flag;
}
/**
* 修改库存:原材料/产品与库区/库位的存放关系
*/
@Override
public Boolean updateByBo(WmsStockBo bo) {
WmsStock update = BeanUtil.toBean(bo, WmsStock.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(WmsStock entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除库存:原材料/产品与库区/库位的存放关系
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
@Override
public BigDecimal getStockByItemId(Long rawMaterialId) {
return baseMapper.getStockByItemId(rawMaterialId);
}
/**
* 获取指定仓库ID及其所有子仓库ID
* @param warehouseId 仓库ID
* @return 包含当前仓库ID和所有子仓库ID的列表
*/
private List<Long> getWarehouseIdsWithChildren(Long warehouseId) {
List<Long> warehouseIds = new ArrayList<>();
warehouseIds.add(warehouseId); // 添加当前仓库ID
// 递归获取所有子仓库ID
getChildWarehouseIds(warehouseId, warehouseIds);
return warehouseIds;
}
/**
* 递归获取子仓库ID
* @param parentId 父仓库ID
* @param warehouseIds 仓库ID列表用于收集结果
*/
private void getChildWarehouseIds(Long parentId, List<Long> warehouseIds) {
// 查询直接子仓库
List<WmsWarehouse> children = warehouseMapper.selectList(
Wrappers.<WmsWarehouse>lambdaQuery()
.eq(WmsWarehouse::getParentId, parentId)
.eq(WmsWarehouse::getDelFlag, 0)
);
// 递归处理每个子仓库
for (WmsWarehouse child : children) {
warehouseIds.add(child.getWarehouseId());
getChildWarehouseIds(child.getWarehouseId(), warehouseIds);
}
}
}