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());
|
updateActualWarehouseEnableStatus(oldCoil.getActualWarehouseId(), newCoilBo.getActualWarehouseId());
|
||||||
}
|
}
|
||||||
// 批量更新所有子钢卷的child_coil_ids
|
// 更新所有子钢卷二维码中的分卷步骤child_coil_ids
|
||||||
List<Long> newCoilIds = newCoils.stream()
|
List<Long> newCoilIds = newCoils.stream()
|
||||||
.map(WmsMaterialCoil::getCoilId)
|
.map(WmsMaterialCoil::getCoilId)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
@@ -1345,19 +1345,16 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
|||||||
.map(String::valueOf)
|
.map(String::valueOf)
|
||||||
.collect(Collectors.joining(","));
|
.collect(Collectors.joining(","));
|
||||||
|
|
||||||
log.info("分卷操作:准备更新{}个子钢卷的child_coil_ids,子钢卷IDs: {}", newCoils.size(), childCoilIdsStr);
|
|
||||||
|
|
||||||
for (WmsMaterialCoil newChildCoil : newCoils) {
|
for (WmsMaterialCoil newChildCoil : newCoils) {
|
||||||
if (newChildCoil.getQrcodeRecordId() != null) {
|
if (newChildCoil.getQrcodeRecordId() != null) {
|
||||||
// 传入childCoilIdsStr,更新所有子钢卷ID
|
// 更新该子钢卷的分卷步骤中的child_coil_ids字段
|
||||||
log.debug("更新子钢卷二维码,coilId: {}, qrcodeRecordId: {}", newChildCoil.getCoilId(), newChildCoil.getQrcodeRecordId());
|
|
||||||
updateChildCoilIdsQrcodeCoilId(newChildCoil.getQrcodeRecordId(), newChildCoil.getCoilId(), childCoilIdsStr);
|
updateChildCoilIdsQrcodeCoilId(newChildCoil.getQrcodeRecordId(), newChildCoil.getCoilId(), childCoilIdsStr);
|
||||||
} else {
|
} 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) {
|
} else if (isMerge) {
|
||||||
// 合卷:将bo作为合卷后的新钢卷,newCoils中的对象作为参与合卷的原始钢卷
|
// 合卷:将bo作为合卷后的新钢卷,newCoils中的对象作为参与合卷的原始钢卷
|
||||||
// 1. 将参与合卷的原始钢卷的二维码标记为失效,并将钢卷标记为历史数据
|
// 1. 将参与合卷的原始钢卷的二维码标记为失效,并将钢卷标记为历史数据
|
||||||
@@ -1517,6 +1514,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
|||||||
splitStep.put("old_coil_id", String.valueOf(oldCoil.getCoilId()));
|
splitStep.put("old_coil_id", String.valueOf(oldCoil.getCoilId()));
|
||||||
splitStep.put("new_current_coil_nos", String.join(",", allNewCoilNos));
|
splitStep.put("new_current_coil_nos", String.join(",", allNewCoilNos));
|
||||||
splitStep.put("child_coils", allNewCoilNos);
|
splitStep.put("child_coils", allNewCoilNos);
|
||||||
|
// 分卷产生的子钢卷ID将在后续步骤中设置
|
||||||
splitStep.put("operator", LoginHelper.getUsername()); // 操作者
|
splitStep.put("operator", LoginHelper.getUsername()); // 操作者
|
||||||
steps.add(splitStep);
|
steps.add(splitStep);
|
||||||
|
|
||||||
@@ -1892,6 +1890,8 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
|||||||
extractCoilId(step, "coil_id", allCoilNos);
|
extractCoilId(step, "coil_id", allCoilNos);
|
||||||
extractCoilId(step, "old_coil_id", allCoilNos);
|
extractCoilId(step, "old_coil_id", allCoilNos);
|
||||||
extractCoilId(step, "parent_coil_ids", 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字段
|
* 更新分卷子钢卷的二维码记录中的child_coil_ids字段
|
||||||
* 用于让每个子钢卷知道其他兄弟子钢卷的ID
|
* 将child_coil_ids设置到对应的分卷步骤中,而不是最外层
|
||||||
|
* 支持多次分卷,每次的child_coil_ids都会记录在各自的分卷步骤中
|
||||||
*
|
*
|
||||||
* @param qrcodeRecordId 二维码记录ID
|
* @param qrcodeRecordId 二维码记录ID
|
||||||
* @param currentCoilId 当前子钢卷ID
|
* @param currentCoilId 当前子钢卷ID
|
||||||
* @param childCoilIdsStr 所有子钢卷ID的逗号分隔字符串
|
* @param childCoilIdsStr 本次分卷产生的所有子钢卷ID的逗号分隔字符串
|
||||||
*/
|
*/
|
||||||
private void updateChildCoilIdsQrcodeCoilId(Long qrcodeRecordId, Long currentCoilId, String childCoilIdsStr) {
|
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);
|
qrcodeRecordId, currentCoilId, childCoilIdsStr);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -3076,11 +3077,36 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
|||||||
|
|
||||||
// 解析现有content
|
// 解析现有content
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
Map<String, Object> contentMap = objectMapper.readValue(record.getContent(), Map.class);
|
Map<String, Object> contentMap = objectMapper.readValue(record.getContent(), Map.class);
|
||||||
|
|
||||||
// 更新child_coil_ids字段
|
// 获取steps数组
|
||||||
contentMap.put("child_coil_ids", childCoilIdsStr);
|
@SuppressWarnings("unchecked")
|
||||||
log.debug("已设置child_coil_ids字段: {}", childCoilIdsStr);
|
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已设置(虽然在前面应该已经设置过了,但这里再确认一下)
|
// 确保current_coil_id已设置(虽然在前面应该已经设置过了,但这里再确认一下)
|
||||||
if (!contentMap.containsKey("current_coil_id") || "null".equals(contentMap.get("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);
|
updateBo.setContent(newContentJson);
|
||||||
generateRecordService.updateByBo(updateBo);
|
generateRecordService.updateByBo(updateBo);
|
||||||
|
|
||||||
log.info("成功更新子钢卷二维码的child_coil_ids,qrcodeRecordId: {}, currentCoilId: {}, childCoilIdsStr: {}",
|
log.info("成功更新子钢卷二维码的分卷步骤child_coil_ids,qrcodeRecordId: {}, currentCoilId: {}, childCoilIdsStr: {}",
|
||||||
qrcodeRecordId, currentCoilId, childCoilIdsStr);
|
qrcodeRecordId, currentCoilId, childCoilIdsStr);
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("更新子钢卷二维码的child_coil_ids失败,qrcodeRecordId: {}, currentCoilId: {}, childCoilIdsStr: {}",
|
log.error("更新子钢卷二维码的分卷步骤child_coil_ids失败,qrcodeRecordId: {}, currentCoilId: {}, childCoilIdsStr: {}",
|
||||||
qrcodeRecordId, currentCoilId, childCoilIdsStr, e);
|
qrcodeRecordId, currentCoilId, childCoilIdsStr, e);
|
||||||
throw new RuntimeException("更新子钢卷二维码失败: " + e.getMessage());
|
throw new RuntimeException("更新子钢卷二维码失败: " + e.getMessage());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user