feat(wms): 扩展钢卷待处理动作查询功能并完善分卷合卷业务逻辑
- 在WmsCoilPendingActionMapper.xml中新增仓库名称、规格、材质、生产厂家等物料信息字段查询 - 为WmsCoilPendingActionVo添加specification、material、manufacturer等物料属性字段 - 完善分卷合卷业务逻辑,增加对历史卷的分卷限制验证 - 新增validateOriginalCoilsForMerge方法用于合卷前验证原始钢卷数据状态 - 优化实际库区ID更新条件,当状态为1时也清除实际库区绑定 - 移除分卷新卷继承母卷实际库区ID的逻辑 - 增强合卷操作前的原始钢卷数据校验机制
This commit is contained in:
@@ -919,7 +919,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
baseMapper.update(null, updateWrapper);
|
||||
}
|
||||
// 如果实际库区id为-1或状态为1,则清空钢卷上的实际库区绑定
|
||||
if ((bo.getActualWarehouseId() != null && bo.getActualWarehouseId().equals(-1L))
|
||||
if ((bo.getActualWarehouseId() != null && bo.getActualWarehouseId().equals(-1L))
|
||||
|| (bo.getStatus() != null && bo.getStatus().equals(1))) {
|
||||
clearActualWarehouseBinding(oldCoil.getActualWarehouseId(), bo.getCoilId());
|
||||
}
|
||||
@@ -1131,6 +1131,10 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
throw new RuntimeException("原钢卷不存在");
|
||||
}
|
||||
}
|
||||
// oldCoil 如果是历史卷也就是date_type=0 的时候就不能分卷
|
||||
if (oldCoil != null && oldCoil.getDataType() == 0) {
|
||||
throw new RuntimeException("原钢卷已分卷,不能再分卷");
|
||||
}
|
||||
|
||||
// 判断是分卷还是合卷
|
||||
boolean isSplit = false;
|
||||
@@ -1218,9 +1222,6 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
if (newCoil.getWarehouseId() == null) {
|
||||
newCoil.setWarehouseId(oldCoil.getWarehouseId());
|
||||
}
|
||||
if (newCoil.getActualWarehouseId() == null){
|
||||
newCoil.setActualWarehouseId(oldCoil.getActualWarehouseId());
|
||||
}
|
||||
|
||||
// 在子卷的 parent_coil_nos 字段中记录母卷号
|
||||
newCoil.setParentCoilNos(oldCoil.getCurrentCoilNo());
|
||||
@@ -1242,6 +1243,8 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
} else if (isMerge) {
|
||||
// 合卷:将bo作为合卷后的新钢卷,newCoils中的对象作为参与合卷的原始钢卷
|
||||
// 1. 将参与合卷的原始钢卷的二维码标记为失效,并将钢卷标记为历史数据
|
||||
//在合卷之前需要判断前端传来的bo.getNewCoils()中的所有原始钢卷的coilId是否已经是历史卷
|
||||
validateOriginalCoilsForMerge(bo.getNewCoils());
|
||||
for (WmsMaterialCoilBo originalCoilBo : bo.getNewCoils()) {
|
||||
if (originalCoilBo.getCoilId() != null) {
|
||||
WmsMaterialCoil originalCoil = baseMapper.selectById(originalCoilBo.getCoilId());
|
||||
@@ -1326,6 +1329,39 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证参与合卷的原始钢卷是否都是当前数据(而非历史数据)
|
||||
* @param originalCoils 参与合卷的原始钢卷列表
|
||||
*/
|
||||
private void validateOriginalCoilsForMerge(List<WmsMaterialCoilBo> originalCoils) {
|
||||
if (CollectionUtils.isEmpty(originalCoils)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 收集所有需要验证的coilId
|
||||
List<Long> coilIds = originalCoils.stream()
|
||||
.map(WmsMaterialCoilBo::getCoilId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (CollectionUtils.isEmpty(coilIds)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 批量查询钢卷数据,避免N+1查询问题
|
||||
List<WmsMaterialCoil> originalCoilsData = baseMapper.selectBatchIds(coilIds);
|
||||
|
||||
// 检查是否有历史数据
|
||||
List<String> historyCoils = originalCoilsData.stream()
|
||||
.filter(coil -> coil.getDataType() != null && coil.getDataType() == 0) // dataType=0表示历史数据
|
||||
.map(coil -> ": " + coil.getCurrentCoilNo())
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (!historyCoils.isEmpty()) {
|
||||
String errorDetails = String.join(", ", historyCoils);
|
||||
throw new RuntimeException("合卷操作需要所有原始钢卷为当前数据,以下卷号已被合卷" + errorDetails);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 为分卷生成新二维码(每个子钢卷一个)
|
||||
|
||||
Reference in New Issue
Block a user