feat(wms): 钢卷发货状态批量更新清除库区id释放占用库区
- 新增批量查询钢卷信息的方法支持 - 实现发货状态更新时清空实际库区ID的功能 - 添加库区释放逻辑,更新对应库区为启用状态 - 优化状态参数说明,明确发货状态含义 - 使用BeanUtils进行对象属性复制转换 - 完善批量更新的成功状态返回机制
This commit is contained in:
@@ -23,6 +23,7 @@ import com.klp.system.service.ISysUserService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import com.klp.mapper.WmsMaterialCoilMapper;
|
||||
@@ -1134,8 +1135,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
// 标记钢卷为历史数据
|
||||
LambdaUpdateWrapper<WmsMaterialCoil> originalUpdateWrapper = new LambdaUpdateWrapper<>();
|
||||
originalUpdateWrapper.eq(WmsMaterialCoil::getCoilId, originalCoilBo.getCoilId())
|
||||
.set(WmsMaterialCoil::getDataType, 0) // 设置为历史数据
|
||||
.set(WmsMaterialCoil::getActualWarehouseId, (Long) null); // 同步清空实际库区绑定
|
||||
.set(WmsMaterialCoil::getDataType, 0); // 设置为历史数据
|
||||
baseMapper.update(null, originalUpdateWrapper);
|
||||
|
||||
// 启用原始钢卷的实际库区
|
||||
@@ -2104,7 +2104,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
* 批量更新钢卷发货状态
|
||||
*
|
||||
* @param coilIds 钢卷ID列表
|
||||
* @param status 目标状态 (0=在库, 1=在途, 2=已出库)
|
||||
* @param status 目标状态 (0=在库, 1=在途/已发货, 2=已出库)
|
||||
* @return 是否更新成功
|
||||
*/
|
||||
@Override
|
||||
@@ -2117,17 +2117,66 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
throw new RuntimeException("无效的状态值,状态必须在0-2之间");
|
||||
}
|
||||
|
||||
// ********** 批量查询钢卷原库区ID(仅当发货状态时需要)**********
|
||||
Map<Long, Long> coilWarehouseMap = new HashMap<>(); // key: coilId, value: oldActualWarehouseId
|
||||
if (status == 1) { // 仅当设置为"已发货/在途"状态时,才处理库区释放逻辑
|
||||
// 批量查询钢卷信息,获取原实际库区ID
|
||||
List<WmsMaterialCoilVo> coilVoList = queryBatchByIds(coilIds);
|
||||
for (WmsMaterialCoilVo vo : coilVoList) {
|
||||
if (vo != null && vo.getActualWarehouseId() != null) {
|
||||
coilWarehouseMap.put(vo.getCoilId(), vo.getActualWarehouseId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 构造更新条件
|
||||
LambdaUpdateWrapper<WmsMaterialCoil> updateWrapper = Wrappers.lambdaUpdate();
|
||||
updateWrapper.in(WmsMaterialCoil::getCoilId, coilIds);
|
||||
updateWrapper.set(WmsMaterialCoil::getStatus, status);
|
||||
|
||||
// 如果是设置为已出库状态,同时更新出库时间
|
||||
// ********** 发货状态时清空库区ID + 更新出库时间 **********
|
||||
if (status == 1) {
|
||||
updateWrapper.set(WmsMaterialCoil::getExportTime, new Date());
|
||||
updateWrapper.set(WmsMaterialCoil::getActualWarehouseId, null); // 清空实际库区ID
|
||||
}
|
||||
|
||||
return baseMapper.update(null, updateWrapper) > 0;
|
||||
// 执行批量更新
|
||||
int updateCount = baseMapper.update(null, updateWrapper);
|
||||
boolean updateSuccess = updateCount > 0;
|
||||
|
||||
// ********** 批量释放原库区占用(仅当更新成功且有库区ID时)**********
|
||||
if (updateSuccess && status == 1 && !coilWarehouseMap.isEmpty()) {
|
||||
// 去重库区ID(避免重复更新同一个库区)
|
||||
Set<Long> warehouseIds = new HashSet<>(coilWarehouseMap.values());
|
||||
for (Long warehouseId : warehouseIds) {
|
||||
WmsActualWarehouseBo releaseBo = new WmsActualWarehouseBo();
|
||||
releaseBo.setActualWarehouseId(warehouseId);
|
||||
releaseBo.setIsEnabled(1); // 释放:设置为启用
|
||||
actualWarehouseService.updateByBo(releaseBo);
|
||||
}
|
||||
}
|
||||
|
||||
return updateSuccess;
|
||||
}
|
||||
|
||||
// 补充:批量查询钢卷信息的方法(需要确保你的Mapper里有对应的批量查询逻辑)
|
||||
private List<WmsMaterialCoilVo> queryBatchByIds(List<Long> coilIds) {
|
||||
if (coilIds == null || coilIds.isEmpty()) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
// 这里替换成你实际的批量查询逻辑(比如用IN条件查询)
|
||||
LambdaQueryWrapper<WmsMaterialCoil> queryWrapper = Wrappers.lambdaQuery();
|
||||
queryWrapper.in(WmsMaterialCoil::getCoilId, coilIds);
|
||||
List<WmsMaterialCoil> coilList = baseMapper.selectList(queryWrapper);
|
||||
|
||||
// 转换为Vo
|
||||
return coilList.stream()
|
||||
.map(coil -> {
|
||||
WmsMaterialCoilVo vo = new WmsMaterialCoilVo();
|
||||
BeanUtils.copyProperties(coil, vo);
|
||||
return vo;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user