Files
klp-oa/klp-wms/src/main/java/com/klp/service/impl/WmsCoilWarehouseOperationLogServiceImpl.java
Joshi bc99d985f5 feat(wms): 添加按钢卷ID查询操作记录功能
- 在 IWmsCoilWarehouseOperationLogService 中新增 queryByCoilId 方法
- 在 WmsCoilWarehouseOperationLogController 中新增 /byCoilId 接口
- 在 WmsCoilWarehouseOperationLogServiceImpl 中实现按钢卷ID查询逻辑
- 实现关联查询钢卷信息和库区信息的功能
- 支持按操作类型、出入库类型、时间范围进行筛选
- 将原有仓库ID查询接口的参数改为可选参数
2026-03-06 11:41:07 +08:00

262 lines
11 KiB
Java

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.domain.WmsActualWarehouse;
import com.klp.domain.WmsMaterialCoil;
import com.klp.domain.bo.WmsMaterialCoilBo;
import com.klp.domain.vo.WmsActualWarehouseVo;
import com.klp.mapper.WmsActualWarehouseMapper;
import com.klp.service.IWmsMaterialCoilService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.klp.domain.bo.WmsCoilWarehouseOperationLogBo;
import com.klp.domain.vo.WmsCoilWarehouseOperationLogVo;
import com.klp.domain.vo.WmsMaterialCoilVo;
import com.klp.domain.WmsCoilWarehouseOperationLog;
import com.klp.mapper.WmsCoilWarehouseOperationLogMapper;
import com.klp.service.IWmsCoilWarehouseOperationLogService;
import java.util.*;
import java.util.stream.Collectors;
/**
* 钢卷库区操作记录Service业务层处理
*
* @author klp
* @date 2026-03-05
*/
@RequiredArgsConstructor
@Service
public class WmsCoilWarehouseOperationLogServiceImpl implements IWmsCoilWarehouseOperationLogService {
private final WmsCoilWarehouseOperationLogMapper baseMapper;
private final WmsActualWarehouseMapper wmsActualWarehouseMapper;
private final IWmsMaterialCoilService wmsMaterialCoilService;
/**
* 查询钢卷库区操作记录
*/
@Override
public WmsCoilWarehouseOperationLogVo queryById(Long logId){
return baseMapper.selectVoById(logId);
}
/**
* 查询钢卷库区操作记录列表
*/
@Override
public TableDataInfo<WmsCoilWarehouseOperationLogVo> queryPageList(WmsCoilWarehouseOperationLogBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<WmsCoilWarehouseOperationLog> lqw = buildQueryWrapper(bo);
Page<WmsCoilWarehouseOperationLogVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询钢卷库区操作记录列表
*/
@Override
public List<WmsCoilWarehouseOperationLogVo> queryList(WmsCoilWarehouseOperationLogBo bo) {
LambdaQueryWrapper<WmsCoilWarehouseOperationLog> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<WmsCoilWarehouseOperationLog> buildQueryWrapper(WmsCoilWarehouseOperationLogBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<WmsCoilWarehouseOperationLog> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getCoilId() != null, WmsCoilWarehouseOperationLog::getCoilId, bo.getCoilId());
lqw.eq(bo.getActualWarehouseId() != null, WmsCoilWarehouseOperationLog::getActualWarehouseId, bo.getActualWarehouseId());
lqw.eq(bo.getOperationType() != null, WmsCoilWarehouseOperationLog::getOperationType, bo.getOperationType());
lqw.eq(bo.getInOutType() != null, WmsCoilWarehouseOperationLog::getInOutType, bo.getInOutType());
return lqw;
}
/**
* 新增钢卷库区操作记录
*/
@Override
public Boolean insertByBo(WmsCoilWarehouseOperationLogBo bo) {
WmsCoilWarehouseOperationLog add = BeanUtil.toBean(bo, WmsCoilWarehouseOperationLog.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setLogId(add.getLogId());
}
return flag;
}
/**
* 修改钢卷库区操作记录
*/
@Override
public Boolean updateByBo(WmsCoilWarehouseOperationLogBo bo) {
WmsCoilWarehouseOperationLog update = BeanUtil.toBean(bo, WmsCoilWarehouseOperationLog.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(WmsCoilWarehouseOperationLog entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除钢卷库区操作记录
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
@Override
public boolean deleteByCoilIdAndTypes(Long coilId, String operationType, String inOutType) {
LambdaQueryWrapper<WmsCoilWarehouseOperationLog> lqw = Wrappers.lambdaQuery();
lqw.eq(WmsCoilWarehouseOperationLog::getCoilId, coilId);
lqw.eq(WmsCoilWarehouseOperationLog::getOperationType, operationType);
lqw.eq(WmsCoilWarehouseOperationLog::getInOutType, inOutType);
return baseMapper.delete(lqw) > 0;
}
@Override
public List<WmsCoilWarehouseOperationLogVo> queryBySecondWarehouseIdAndTimeRange(Long secondWarehouseId, Integer operationType, Integer inOutType, Date startTime, Date endTime) {
Set<Long> warehouseIds = getAllChildWarehouseIds(secondWarehouseId);
if (warehouseIds.isEmpty()) {
return new ArrayList<>();
}
LambdaQueryWrapper<WmsCoilWarehouseOperationLog> lqw = Wrappers.lambdaQuery();
lqw.in(WmsCoilWarehouseOperationLog::getActualWarehouseId, warehouseIds);
lqw.eq(operationType != null, WmsCoilWarehouseOperationLog::getOperationType, operationType);
lqw.eq(inOutType != null, WmsCoilWarehouseOperationLog::getInOutType, inOutType);
lqw.ge(startTime != null, WmsCoilWarehouseOperationLog::getCreateTime, startTime);
lqw.le(endTime != null, WmsCoilWarehouseOperationLog::getCreateTime, endTime);
lqw.orderByDesc(WmsCoilWarehouseOperationLog::getCreateTime);
List<WmsCoilWarehouseOperationLogVo> list = baseMapper.selectVoList(lqw);
Set<Long> coilIds = list.stream()
.map(WmsCoilWarehouseOperationLogVo::getCoilId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
Map<Long, WmsMaterialCoilVo> coilMap = new HashMap<>();
if (!coilIds.isEmpty()) {
WmsMaterialCoilBo bo = new WmsMaterialCoilBo();
bo.setCoilIds(coilIds.stream().map(String::valueOf).collect(Collectors.joining(",")));
List<WmsMaterialCoilVo> coils = wmsMaterialCoilService.queryList(bo);
for (WmsMaterialCoilVo coil : coils) {
coilMap.put(coil.getCoilId(), coil);
}
}
Map<Long, WmsActualWarehouseVo> warehouseMap = new HashMap<>();
if (!warehouseIds.isEmpty()) {
LambdaQueryWrapper<WmsActualWarehouse> warehouseQuery = Wrappers.lambdaQuery();
warehouseQuery.in(WmsActualWarehouse::getActualWarehouseId, warehouseIds);
List<WmsActualWarehouse> warehouses = wmsActualWarehouseMapper.selectList(warehouseQuery);
for (WmsActualWarehouse warehouse : warehouses) {
WmsActualWarehouseVo vo = BeanUtil.toBean(warehouse, WmsActualWarehouseVo.class);
warehouseMap.put(warehouse.getActualWarehouseId(), vo);
}
}
for (WmsCoilWarehouseOperationLogVo vo : list) {
vo.setCoil(coilMap.get(vo.getCoilId()));
vo.setWarehouse(warehouseMap.get(vo.getActualWarehouseId()));
}
return list;
}
private Set<Long> getAllChildWarehouseIds(Long parentId) {
Set<Long> result = new HashSet<>();
if (parentId == null) {
return result;
}
result.add(parentId);
LambdaQueryWrapper<WmsActualWarehouse> lqw = Wrappers.lambdaQuery();
lqw.select(WmsActualWarehouse::getActualWarehouseId, WmsActualWarehouse::getParentId);
List<WmsActualWarehouse> allWarehouses = wmsActualWarehouseMapper.selectList(lqw);
Map<Long, List<Long>> parentChildrenMap = allWarehouses.stream()
.filter(w -> w.getParentId() != null)
.collect(java.util.stream.Collectors.groupingBy(
WmsActualWarehouse::getParentId,
java.util.stream.Collectors.mapping(WmsActualWarehouse::getActualWarehouseId, java.util.stream.Collectors.toList())
));
java.util.Queue<Long> queue = new java.util.LinkedList<>();
queue.offer(parentId);
while (!queue.isEmpty()) {
Long currentId = queue.poll();
List<Long> children = parentChildrenMap.get(currentId);
if (children != null && !children.isEmpty()) {
result.addAll(children);
queue.addAll(children);
}
}
return result;
}
@Override
public List<WmsCoilWarehouseOperationLogVo> queryByCoilId(Long coilId, Integer operationType, Integer inOutType, Date startTime, Date endTime) {
LambdaQueryWrapper<WmsCoilWarehouseOperationLog> lqw = Wrappers.lambdaQuery();
lqw.eq(WmsCoilWarehouseOperationLog::getCoilId, coilId);
lqw.eq(operationType != null, WmsCoilWarehouseOperationLog::getOperationType, operationType);
lqw.eq(inOutType != null, WmsCoilWarehouseOperationLog::getInOutType, inOutType);
lqw.ge(startTime != null, WmsCoilWarehouseOperationLog::getCreateTime, startTime);
lqw.le(endTime != null, WmsCoilWarehouseOperationLog::getCreateTime, endTime);
lqw.orderByDesc(WmsCoilWarehouseOperationLog::getCreateTime);
List<WmsCoilWarehouseOperationLogVo> list = baseMapper.selectVoList(lqw);
Set<Long> coilIds = list.stream()
.map(WmsCoilWarehouseOperationLogVo::getCoilId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
Set<Long> warehouseIds = list.stream()
.map(WmsCoilWarehouseOperationLogVo::getActualWarehouseId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
Map<Long, WmsMaterialCoilVo> coilMap = new HashMap<>();
if (!coilIds.isEmpty()) {
WmsMaterialCoilBo bo = new WmsMaterialCoilBo();
bo.setCoilIds(coilIds.stream().map(String::valueOf).collect(Collectors.joining(",")));
List<WmsMaterialCoilVo> coils = wmsMaterialCoilService.queryList(bo);
for (WmsMaterialCoilVo coil : coils) {
coilMap.put(coil.getCoilId(), coil);
}
}
Map<Long, WmsActualWarehouseVo> warehouseMap = new HashMap<>();
if (!warehouseIds.isEmpty()) {
LambdaQueryWrapper<WmsActualWarehouse> warehouseQuery = Wrappers.lambdaQuery();
warehouseQuery.in(WmsActualWarehouse::getActualWarehouseId, warehouseIds);
List<WmsActualWarehouse> warehouses = wmsActualWarehouseMapper.selectList(warehouseQuery);
for (WmsActualWarehouse warehouse : warehouses) {
WmsActualWarehouseVo vo = BeanUtil.toBean(warehouse, WmsActualWarehouseVo.class);
warehouseMap.put(warehouse.getActualWarehouseId(), vo);
}
}
for (WmsCoilWarehouseOperationLogVo vo : list) {
vo.setCoil(coilMap.get(vo.getCoilId()));
vo.setWarehouse(warehouseMap.get(vo.getActualWarehouseId()));
}
return list;
}
}