Files
klp-oa/klp-wms/src/main/java/com/klp/service/impl/WmsStockLogServiceImpl.java
JR 66e47e221e feat(wms): 新增物流管理和快递问题模块
- 添加物流预览、快递问题相关API
- 实现物流剩余时间、物流状态编辑组件
- 开发设计项目汇报详情页面,包括货物类别自动补全、图片预览等功能- 新增物流类型枚举
2025-08-11 17:21:27 +08:00

182 lines
6.4 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 com.klp.domain.WmsWarehouse;
import com.klp.mapper.WmsWarehouseMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.klp.domain.bo.WmsStockLogBo;
import com.klp.domain.vo.WmsStockLogVo;
import com.klp.domain.WmsStockLog;
import com.klp.mapper.WmsStockLogMapper;
import com.klp.service.IWmsStockLogService;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 库存流水Service业务层处理
*
* @author JR
* @date 2025-08-11
*/
@RequiredArgsConstructor
@Service
public class WmsStockLogServiceImpl implements IWmsStockLogService {
private final WmsStockLogMapper baseMapper;
@Resource
private WmsWarehouseMapper warehouseMapper;
/**
* 查询库存流水
*/
@Override
public WmsStockLogVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 查询库存流水列表
*/
@Override
public TableDataInfo<WmsStockLogVo> queryPageList(WmsStockLogBo bo, PageQuery pageQuery) {
QueryWrapper<WmsStockLog> lqw = buildQueryWrapperPlus(bo);
Page<WmsStockLogVo> result = baseMapper.selectVoPagePlus(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询库存流水列表
*/
@Override
public List<WmsStockLogVo> queryList(WmsStockLogBo bo) {
LambdaQueryWrapper<WmsStockLog> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private QueryWrapper<WmsStockLog> buildQueryWrapperPlus(WmsStockLogBo bo) {
QueryWrapper<WmsStockLog> lqw = Wrappers.query();
lqw.eq("sl.del_flag", 0);
// 处理仓库ID查询支持递归查询子节点
if (bo.getWarehouseId() != null) {
List<Long> warehouseIds = getWarehouseIdsWithChildren(bo.getWarehouseId());
if (warehouseIds.size() == 1) {
lqw.eq("sl.warehouse_id", warehouseIds.get(0));
} else {
lqw.in("sl.warehouse_id", warehouseIds);
}
}
lqw.eq(bo.getItemId() != null, "sl.item_id", bo.getItemId());
lqw.eq(StringUtils.isNotBlank(bo.getItemType()), "sl.item_type", bo.getItemType());
lqw.eq(bo.getChangeQty() != null, "sl.change_qty", bo.getChangeQty());
lqw.eq(bo.getAfterQty() != null, "sl.after_qty", bo.getAfterQty());
lqw.eq(StringUtils.isNotBlank(bo.getChangeType()), "sl.change_type", bo.getChangeType());
// 根据时间区间查询
lqw.ge(bo.getStartTime() != null, "sl.change_time", bo.getStartTime());
lqw.le(bo.getEndTime() != null, "sl.change_time", bo.getEndTime());
return lqw;
}
private LambdaQueryWrapper<WmsStockLog> buildQueryWrapper(WmsStockLogBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<WmsStockLog> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getWarehouseId() != null, WmsStockLog::getWarehouseId, bo.getWarehouseId());
lqw.eq(bo.getItemId() != null, WmsStockLog::getItemId, bo.getItemId());
lqw.eq(StringUtils.isNotBlank(bo.getItemType()), WmsStockLog::getItemType, bo.getItemType());
lqw.eq(bo.getChangeQty() != null, WmsStockLog::getChangeQty, bo.getChangeQty());
lqw.eq(bo.getAfterQty() != null, WmsStockLog::getAfterQty, bo.getAfterQty());
lqw.eq(StringUtils.isNotBlank(bo.getChangeType()), WmsStockLog::getChangeType, bo.getChangeType());
// 根据时间区间查询
lqw.ge(bo.getStartTime() != null, WmsStockLog::getChangeTime, bo.getStartTime());
lqw.le(bo.getEndTime() != null, WmsStockLog::getChangeTime, bo.getEndTime());
return lqw;
}
/**
* 新增库存流水
*/
@Override
public Boolean insertByBo(WmsStockLogBo bo) {
WmsStockLog add = BeanUtil.toBean(bo, WmsStockLog.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改库存流水
*/
@Override
public Boolean updateByBo(WmsStockLogBo bo) {
WmsStockLog update = BeanUtil.toBean(bo, WmsStockLog.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(WmsStockLog entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除库存流水
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
/**
* 获取指定仓库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);
}
}
}