feat(wms): 查询实际库位列表时补充占用钢卷信息

- 引入 WmsMaterialCoil 和其 Mapper 依赖
- 在查询实际库位时,针对被占用的库位(isEnabled=0)补充对应的钢卷信息
- 查询当前在库且状态正常的钢卷数据(del_flag=0, status=0)
- 对同一库位多条钢卷记录的情况,取主键最大的作为最新记录
- 将钢卷编号信息(入库号、当前号、供应商号)设置到库位 VO 中返回前端展示
This commit is contained in:
2025-12-06 10:28:24 +08:00
parent 1a797a160d
commit a42ee951a9
2 changed files with 65 additions and 1 deletions

View File

@@ -18,6 +18,8 @@ import com.klp.domain.vo.WmsActualWarehouseVo;
import com.klp.domain.WmsActualWarehouse;
import com.klp.mapper.WmsActualWarehouseMapper;
import com.klp.service.IWmsActualWarehouseService;
import com.klp.domain.WmsMaterialCoil;
import com.klp.mapper.WmsMaterialCoilMapper;
import java.util.*;
import java.util.stream.Collectors;
@@ -33,6 +35,7 @@ import java.util.stream.Collectors;
public class WmsActualWarehouseServiceImpl implements IWmsActualWarehouseService {
private final WmsActualWarehouseMapper baseMapper;
private final WmsMaterialCoilMapper wmsMaterialCoilMapper;
/**
* 查询实际库区/库位自关联
@@ -109,7 +112,63 @@ public class WmsActualWarehouseServiceImpl implements IWmsActualWarehouseService
@Override
public List<WmsActualWarehouseVo> queryList(WmsActualWarehouseBo bo) {
LambdaQueryWrapper<WmsActualWarehouse> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
List<WmsActualWarehouseVo> list = baseMapper.selectVoList(lqw);
if (CollUtil.isEmpty(list)) {
return list;
}
// 仅对被占用的位置isEnabled=0补充钢卷信息
List<Long> occupiedAwIds = list.stream()
.filter(it -> it.getIsEnabled() != null && it.getIsEnabled() == 0)
.map(WmsActualWarehouseVo::getActualWarehouseId)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
if (CollUtil.isEmpty(occupiedAwIds)) {
return list;
}
// 查询当前在库(del_flag=0, status=0)并且占用这些库位的钢卷,仅选择必要列
List<WmsMaterialCoil> coils = wmsMaterialCoilMapper.selectList(
Wrappers.<WmsMaterialCoil>lambdaQuery()
.select(
WmsMaterialCoil::getActualWarehouseId,
WmsMaterialCoil::getCoilId,
WmsMaterialCoil::getEnterCoilNo,
WmsMaterialCoil::getCurrentCoilNo,
WmsMaterialCoil::getSupplierCoilNo
)
.in(WmsMaterialCoil::getActualWarehouseId, occupiedAwIds)
.eq(WmsMaterialCoil::getDelFlag, 0)
.eq(WmsMaterialCoil::getStatus, 0)
);
if (CollUtil.isEmpty(coils)) {
return list;
}
// 同一库位若有多条记录,选择最新一条(按更新顺序无字段,这里按主键最大)
Map<Long, WmsMaterialCoil> coilByAwId = coils.stream()
.collect(Collectors.toMap(
WmsMaterialCoil::getActualWarehouseId,
c -> c,
(a, b) -> a.getCoilId() != null && b.getCoilId() != null && a.getCoilId() > b.getCoilId() ? a : b
));
list.forEach(it -> {
if (it.getIsEnabled() != null && it.getIsEnabled() == 0) {
WmsMaterialCoil c = coilByAwId.get(it.getActualWarehouseId());
if (c != null) {
it.setEnterCoilNo(c.getEnterCoilNo());
it.setCurrentCoilNo(c.getCurrentCoilNo());
it.setSupplierCoilNo(c.getSupplierCoilNo());
}
}
});
return list;
}
@Override