feat(wms): 添加钢卷复活功能
- 在 IWmsMaterialCoilService 中新增 reviveCoil 方法定义
- 在 WmsMaterialCoilController 中添加 /reviveCoil/{coilId} 接口
- 在 WmsMaterialCoilServiceImpl 中实现复活逻辑
- 实现将 dataType=0 的历史钢卷恢复为 dataType=1 的当前钢卷
- 添加实际库位绑定清空和钢卷号重复检查功能
- 完善异常处理和事务回滚机制
This commit is contained in:
@@ -300,5 +300,31 @@ public class WmsMaterialCoilController extends BaseController {
|
||||
return R.ok(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 复活历史钢卷
|
||||
* 将dataType=0的历史钢卷恢复为dataType=1的当前钢卷
|
||||
* 同时清空实际库位绑定,并检查当前钢卷号是否重复
|
||||
*
|
||||
* @param coilId 钢卷ID
|
||||
* @return 复活结果,包含success状态、错误信息、钢卷ID和当前钢卷号
|
||||
*/
|
||||
@Log(title = "钢卷物料表", businessType = BusinessType.UPDATE)
|
||||
@GetMapping("/reviveCoil/{coilId}")
|
||||
public R<Map<String, Object>> reviveCoil(
|
||||
@NotNull(message = "钢卷ID不能为空")
|
||||
@PathVariable("coilId") Long coilId) {
|
||||
try {
|
||||
Map<String, Object> result = iWmsMaterialCoilService.reviveCoil(coilId);
|
||||
// 根据业务结果返回成功/失败的统一响应
|
||||
if (Boolean.TRUE.equals(result.get("success"))) {
|
||||
return R.ok(result);
|
||||
} else {
|
||||
return R.fail(result.get("message").toString(), result);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return R.fail("复活钢卷失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -148,5 +148,15 @@ public interface IWmsMaterialCoilService {
|
||||
* }
|
||||
*/
|
||||
Map<String, Object> getDuplicateCoilGroups();
|
||||
|
||||
/**
|
||||
* 复活历史钢卷
|
||||
* 将dataType=0的历史钢卷恢复为dataType=1的当前钢卷
|
||||
* 同时清空实际库位绑定,并检查当前钢卷号是否重复
|
||||
*
|
||||
* @param coilId 钢卷ID
|
||||
* @return 复活结果,包含success状态和错误信息
|
||||
*/
|
||||
Map<String, Object> reviveCoil(@NotNull(message = "钢卷ID不能为空") Long coilId);
|
||||
}
|
||||
|
||||
|
||||
@@ -2753,4 +2753,73 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 复活历史钢卷
|
||||
* 将dataType=0的历史钢卷恢复为dataType=1的当前钢卷
|
||||
* 同时清空实际库位绑定,并检查当前钢卷号是否重复
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Map<String, Object> reviveCoil(Long coilId) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("success", false);
|
||||
|
||||
// 1. 查询钢卷信息
|
||||
WmsMaterialCoil coil = baseMapper.selectById(coilId);
|
||||
if (coil == null) {
|
||||
result.put("message", "钢卷不存在");
|
||||
return result;
|
||||
}
|
||||
|
||||
// 2. 检查是否为历史数据
|
||||
if (coil.getDataType() != 0) {
|
||||
result.put("message", "该钢卷不是历史数据,无需复活");
|
||||
return result;
|
||||
}
|
||||
|
||||
// 3. 检查当前钢卷号是否重复(现存且未逻辑删除的)
|
||||
if (StringUtils.isNotBlank(coil.getCurrentCoilNo())) {
|
||||
LambdaQueryWrapper<WmsMaterialCoil> duplicateCheck = Wrappers.lambdaQuery();
|
||||
duplicateCheck.eq(WmsMaterialCoil::getCurrentCoilNo, coil.getCurrentCoilNo())
|
||||
.eq(WmsMaterialCoil::getDelFlag, 0)
|
||||
.eq(WmsMaterialCoil::getDataType, 1) // 只检查当前数据
|
||||
.ne(WmsMaterialCoil::getCoilId, coilId); // 排除自身
|
||||
|
||||
long duplicateCount = baseMapper.selectCount(duplicateCheck);
|
||||
if (duplicateCount > 0) {
|
||||
result.put("message", "当前钢卷号[" + coil.getCurrentCoilNo() + "]已存在重复记录,请先删除错误钢卷后再复活");
|
||||
result.put("duplicateCoilNo", coil.getCurrentCoilNo());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
// 4. 执行复活操作
|
||||
try {
|
||||
// 记录原实际库位ID,用于后续释放
|
||||
Long oldActualWarehouseId = coil.getActualWarehouseId();
|
||||
|
||||
// 更新钢卷状态:dataType=1,actualWarehouseId=null
|
||||
LambdaUpdateWrapper<WmsMaterialCoil> updateWrapper = Wrappers.lambdaUpdate();
|
||||
updateWrapper.eq(WmsMaterialCoil::getCoilId, coilId)
|
||||
.set(WmsMaterialCoil::getDataType, 1) // 恢复为当前数据
|
||||
.set(WmsMaterialCoil::getActualWarehouseId, (Long) null); // 清空实际库位绑定
|
||||
|
||||
int updateCount = baseMapper.update(null, updateWrapper);
|
||||
if (updateCount <= 0) {
|
||||
throw new RuntimeException("复活钢卷失败:数据库更新异常");
|
||||
}
|
||||
|
||||
result.put("success", true);
|
||||
result.put("message", "钢卷复活成功");
|
||||
result.put("coilId", coilId);
|
||||
result.put("currentCoilNo", coil.getCurrentCoilNo());
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("复活钢卷失败,coilId: {}", coilId, e);
|
||||
throw new RuntimeException("复活钢卷失败: " + e.getMessage());
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user