2026-03-05 11:12:44 +08:00
|
|
|
package com.klp.service.impl;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
2026-03-05 13:07:01 +08:00
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
2026-03-05 11:12:44 +08:00
|
|
|
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;
|
2026-03-05 15:38:50 +08:00
|
|
|
import com.klp.domain.WmsActualWarehouse;
|
2026-03-05 13:07:01 +08:00
|
|
|
import com.klp.domain.WmsMaterialCoil;
|
|
|
|
|
import com.klp.domain.bo.WmsMaterialCoilBo;
|
2026-03-05 15:38:50 +08:00
|
|
|
import com.klp.domain.vo.WmsActualWarehouseVo;
|
|
|
|
|
import com.klp.mapper.WmsActualWarehouseMapper;
|
2026-03-05 13:07:01 +08:00
|
|
|
import com.klp.service.IWmsMaterialCoilService;
|
2026-03-05 11:12:44 +08:00
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import com.klp.domain.bo.WmsCoilWarehouseOperationLogBo;
|
|
|
|
|
import com.klp.domain.vo.WmsCoilWarehouseOperationLogVo;
|
2026-03-05 13:07:01 +08:00
|
|
|
import com.klp.domain.vo.WmsMaterialCoilVo;
|
2026-03-05 11:12:44 +08:00
|
|
|
import com.klp.domain.WmsCoilWarehouseOperationLog;
|
|
|
|
|
import com.klp.mapper.WmsCoilWarehouseOperationLogMapper;
|
|
|
|
|
import com.klp.service.IWmsCoilWarehouseOperationLogService;
|
|
|
|
|
|
2026-03-05 13:07:01 +08:00
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
2026-03-05 11:12:44 +08:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 钢卷库区操作记录Service业务层处理
|
|
|
|
|
*
|
|
|
|
|
* @author klp
|
|
|
|
|
* @date 2026-03-05
|
|
|
|
|
*/
|
|
|
|
|
@RequiredArgsConstructor
|
|
|
|
|
@Service
|
|
|
|
|
public class WmsCoilWarehouseOperationLogServiceImpl implements IWmsCoilWarehouseOperationLogService {
|
|
|
|
|
|
|
|
|
|
private final WmsCoilWarehouseOperationLogMapper baseMapper;
|
2026-03-05 15:38:50 +08:00
|
|
|
private final WmsActualWarehouseMapper wmsActualWarehouseMapper;
|
2026-03-05 13:07:01 +08:00
|
|
|
private final IWmsMaterialCoilService wmsMaterialCoilService;
|
2026-03-05 11:12:44 +08:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 查询钢卷库区操作记录
|
|
|
|
|
*/
|
|
|
|
|
@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;
|
|
|
|
|
}
|
2026-03-05 13:07:01 +08:00
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public boolean deleteByCoilIdAndTypes(Long coilId, String operationType, String inOutType) {
|
|
|
|
|
LambdaQueryWrapper<WmsCoilWarehouseOperationLog> lqw = Wrappers.lambdaQuery();
|
2026-03-05 15:38:50 +08:00
|
|
|
lqw.eq(WmsCoilWarehouseOperationLog::getCoilId, coilId);
|
|
|
|
|
lqw.eq(WmsCoilWarehouseOperationLog::getOperationType, operationType);
|
|
|
|
|
lqw.eq(WmsCoilWarehouseOperationLog::getInOutType, inOutType);
|
2026-03-05 13:07:01 +08:00
|
|
|
return baseMapper.delete(lqw) > 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
2026-03-06 10:21:02 +08:00
|
|
|
public List<WmsCoilWarehouseOperationLogVo> queryBySecondWarehouseIdAndTimeRange(Long secondWarehouseId, Integer operationType, Integer inOutType, Date startTime, Date endTime) {
|
2026-03-05 13:07:01 +08:00
|
|
|
Set<Long> warehouseIds = getAllChildWarehouseIds(secondWarehouseId);
|
|
|
|
|
if (warehouseIds.isEmpty()) {
|
|
|
|
|
return new ArrayList<>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LambdaQueryWrapper<WmsCoilWarehouseOperationLog> lqw = Wrappers.lambdaQuery();
|
|
|
|
|
lqw.in(WmsCoilWarehouseOperationLog::getActualWarehouseId, warehouseIds);
|
2026-03-06 11:00:36 +08:00
|
|
|
lqw.eq(operationType != null, WmsCoilWarehouseOperationLog::getOperationType, operationType);
|
|
|
|
|
lqw.eq(inOutType != null, WmsCoilWarehouseOperationLog::getInOutType, inOutType);
|
2026-03-05 13:07:01 +08:00
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2026-03-05 15:38:50 +08:00
|
|
|
Map<Long, WmsActualWarehouseVo> warehouseMap = new HashMap<>();
|
2026-03-05 13:07:01 +08:00
|
|
|
if (!warehouseIds.isEmpty()) {
|
2026-03-05 15:38:50 +08:00
|
|
|
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);
|
2026-03-05 13:07:01 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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<>();
|
2026-03-05 16:36:44 +08:00
|
|
|
if (parentId == null) {
|
|
|
|
|
return result;
|
|
|
|
|
}
|
2026-03-05 13:07:01 +08:00
|
|
|
result.add(parentId);
|
2026-03-05 15:38:50 +08:00
|
|
|
LambdaQueryWrapper<WmsActualWarehouse> lqw = Wrappers.lambdaQuery();
|
2026-03-05 16:36:44 +08:00
|
|
|
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);
|
|
|
|
|
}
|
2026-03-05 13:07:01 +08:00
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
2026-03-06 11:41:07 +08:00
|
|
|
|
|
|
|
|
@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;
|
|
|
|
|
}
|
2026-03-05 11:12:44 +08:00
|
|
|
}
|