refactor(wms): 优化钢卷分卷步骤中child_coil_ids的更新逻辑
- 将child_coil_ids设置到对应的分卷步骤中,而不是最外层 - 支持多次分卷,每次的child_coil_ids都会记录在各自的分卷步骤中 - 修改注释明确更新的是分卷步骤中的child_coil_ids字段 - 添加查找最新分卷步骤的逻辑,确保在正确的步骤中设置child_coil_ids - 更新日志信息以反映分卷步骤的child_coil_ids更新 - 添加对分卷步骤不存在时的警告处理
This commit is contained in:
@@ -1337,7 +1337,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
// 更新实际库区的启用状态
|
||||
updateActualWarehouseEnableStatus(oldCoil.getActualWarehouseId(), newCoilBo.getActualWarehouseId());
|
||||
}
|
||||
// 批量更新所有子钢卷的child_coil_ids
|
||||
// 更新所有子钢卷二维码中的分卷步骤child_coil_ids
|
||||
List<Long> newCoilIds = newCoils.stream()
|
||||
.map(WmsMaterialCoil::getCoilId)
|
||||
.collect(Collectors.toList());
|
||||
@@ -1345,19 +1345,16 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
.map(String::valueOf)
|
||||
.collect(Collectors.joining(","));
|
||||
|
||||
log.info("分卷操作:准备更新{}个子钢卷的child_coil_ids,子钢卷IDs: {}", newCoils.size(), childCoilIdsStr);
|
||||
|
||||
for (WmsMaterialCoil newChildCoil : newCoils) {
|
||||
if (newChildCoil.getQrcodeRecordId() != null) {
|
||||
// 传入childCoilIdsStr,更新所有子钢卷ID
|
||||
log.debug("更新子钢卷二维码,coilId: {}, qrcodeRecordId: {}", newChildCoil.getCoilId(), newChildCoil.getQrcodeRecordId());
|
||||
// 更新该子钢卷的分卷步骤中的child_coil_ids字段
|
||||
updateChildCoilIdsQrcodeCoilId(newChildCoil.getQrcodeRecordId(), newChildCoil.getCoilId(), childCoilIdsStr);
|
||||
} else {
|
||||
log.warn("子钢卷缺少二维码记录ID,跳过child_coil_ids更新,coilId: {}", newChildCoil.getCoilId());
|
||||
log.warn("子钢卷缺少二维码记录ID,跳过分卷步骤child_coil_ids更新,coilId: {}", newChildCoil.getCoilId());
|
||||
}
|
||||
}
|
||||
|
||||
log.info("分卷操作:所有子钢卷的child_coil_ids更新完成");
|
||||
} else if (isMerge) {
|
||||
// 合卷:将bo作为合卷后的新钢卷,newCoils中的对象作为参与合卷的原始钢卷
|
||||
// 1. 将参与合卷的原始钢卷的二维码标记为失效,并将钢卷标记为历史数据
|
||||
@@ -1517,6 +1514,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
splitStep.put("old_coil_id", String.valueOf(oldCoil.getCoilId()));
|
||||
splitStep.put("new_current_coil_nos", String.join(",", allNewCoilNos));
|
||||
splitStep.put("child_coils", allNewCoilNos);
|
||||
// 分卷产生的子钢卷ID将在后续步骤中设置
|
||||
splitStep.put("operator", LoginHelper.getUsername()); // 操作者
|
||||
steps.add(splitStep);
|
||||
|
||||
@@ -1892,6 +1890,8 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
extractCoilId(step, "coil_id", allCoilNos);
|
||||
extractCoilId(step, "old_coil_id", allCoilNos);
|
||||
extractCoilId(step, "parent_coil_ids", allCoilNos);
|
||||
// 从分卷步骤中提取子钢卷IDs
|
||||
extractCoilId(step, "child_coil_ids", allCoilNos);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3046,14 +3046,15 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
|
||||
/**
|
||||
* 更新分卷子钢卷的二维码记录中的child_coil_ids字段
|
||||
* 用于让每个子钢卷知道其他兄弟子钢卷的ID
|
||||
* 将child_coil_ids设置到对应的分卷步骤中,而不是最外层
|
||||
* 支持多次分卷,每次的child_coil_ids都会记录在各自的分卷步骤中
|
||||
*
|
||||
* @param qrcodeRecordId 二维码记录ID
|
||||
* @param currentCoilId 当前子钢卷ID
|
||||
* @param childCoilIdsStr 所有子钢卷ID的逗号分隔字符串
|
||||
* @param childCoilIdsStr 本次分卷产生的所有子钢卷ID的逗号分隔字符串
|
||||
*/
|
||||
private void updateChildCoilIdsQrcodeCoilId(Long qrcodeRecordId, Long currentCoilId, String childCoilIdsStr) {
|
||||
log.info("开始更新子钢卷二维码的child_coil_ids,qrcodeRecordId: {}, currentCoilId: {}, childCoilIdsStr: {}",
|
||||
log.info("开始更新子钢卷二维码的分卷步骤child_coil_ids,qrcodeRecordId: {}, currentCoilId: {}, childCoilIdsStr: {}",
|
||||
qrcodeRecordId, currentCoilId, childCoilIdsStr);
|
||||
|
||||
try {
|
||||
@@ -3076,11 +3077,36 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
|
||||
// 解析现有content
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, Object> contentMap = objectMapper.readValue(record.getContent(), Map.class);
|
||||
|
||||
// 更新child_coil_ids字段
|
||||
contentMap.put("child_coil_ids", childCoilIdsStr);
|
||||
log.debug("已设置child_coil_ids字段: {}", childCoilIdsStr);
|
||||
// 获取steps数组
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Map<String, Object>> steps = (List<Map<String, Object>>) contentMap.get("steps");
|
||||
if (steps == null || steps.isEmpty()) {
|
||||
log.warn("二维码记录中没有steps信息,跳过child_coil_ids更新,qrcodeRecordId: {}", qrcodeRecordId);
|
||||
return;
|
||||
}
|
||||
|
||||
// 找到最后一个分卷步骤(最新的分卷操作)
|
||||
Map<String, Object> lastSplitStep = null;
|
||||
for (int i = steps.size() - 1; i >= 0; i--) {
|
||||
Map<String, Object> step = steps.get(i);
|
||||
String operation = (String) step.get("operation");
|
||||
if ("分卷".equals(operation)) {
|
||||
lastSplitStep = step;
|
||||
break; // 找到最新的分卷步骤就停止
|
||||
}
|
||||
}
|
||||
|
||||
if (lastSplitStep == null) {
|
||||
log.warn("未找到分卷步骤,无法设置child_coil_ids,qrcodeRecordId: {}", qrcodeRecordId);
|
||||
return;
|
||||
}
|
||||
|
||||
// 在分卷步骤中设置child_coil_ids
|
||||
lastSplitStep.put("child_coil_ids", childCoilIdsStr);
|
||||
log.debug("已在分卷步骤中设置child_coil_ids: {}", childCoilIdsStr);
|
||||
|
||||
// 确保current_coil_id已设置(虽然在前面应该已经设置过了,但这里再确认一下)
|
||||
if (!contentMap.containsKey("current_coil_id") || "null".equals(contentMap.get("current_coil_id"))) {
|
||||
@@ -3095,11 +3121,11 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
updateBo.setContent(newContentJson);
|
||||
generateRecordService.updateByBo(updateBo);
|
||||
|
||||
log.info("成功更新子钢卷二维码的child_coil_ids,qrcodeRecordId: {}, currentCoilId: {}, childCoilIdsStr: {}",
|
||||
log.info("成功更新子钢卷二维码的分卷步骤child_coil_ids,qrcodeRecordId: {}, currentCoilId: {}, childCoilIdsStr: {}",
|
||||
qrcodeRecordId, currentCoilId, childCoilIdsStr);
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("更新子钢卷二维码的child_coil_ids失败,qrcodeRecordId: {}, currentCoilId: {}, childCoilIdsStr: {}",
|
||||
log.error("更新子钢卷二维码的分卷步骤child_coil_ids失败,qrcodeRecordId: {}, currentCoilId: {}, childCoilIdsStr: {}",
|
||||
qrcodeRecordId, currentCoilId, childCoilIdsStr, e);
|
||||
throw new RuntimeException("更新子钢卷二维码失败: " + e.getMessage());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user