生产单xml导入问题修复:导入空柜体列表和板材对应修复

This commit is contained in:
gaoqr
2025-03-12 16:12:00 +08:00
parent 379f1fcca1
commit 60ca56879f
2 changed files with 62 additions and 48 deletions
@@ -117,7 +117,8 @@ public class DefaultOrderImportXmlParserHandler {
// todo 对编码去重,如果后期性能瓶颈需要改造到消费后用数据库 // todo 对编码去重,如果后期性能瓶颈需要改造到消费后用数据库
private Set<String> groupCodeSet = new HashSet<>(); private Set<String> groupCodeSet = new HashSet<>();
private Map<String, Set<String>> roomBodyCodeMap = new HashMap<>(); private Map<String, RoomXmlVO> roomMap = new HashMap<>();
private Map<String, RoomBoxXmlVO> roomBodyMap = new HashMap<>();
/** /**
* 补板用 * 补板用
@@ -173,12 +174,6 @@ public class DefaultOrderImportXmlParserHandler {
private SnowFlakeGenerator snowFlakeGenerator; private SnowFlakeGenerator snowFlakeGenerator;
private Map<String, Boolean> NOT_ASSIGNED_BODY_EXISTS_MAP = MapUtil.<String, Boolean>builder()
.put("false%true", false)
.put("true%true", false)
.put("true%false", false)
.build();
// 基础常量 // 基础常量
private static final String FIELD_AXISXROTATE = "axisXrotate"; private static final String FIELD_AXISXROTATE = "axisXrotate";
private static final String FIELD_AXISYROTATE = "axisYrotate"; private static final String FIELD_AXISYROTATE = "axisYrotate";
@@ -452,18 +447,14 @@ public class DefaultOrderImportXmlParserHandler {
if (ObjectUtil.isNull(roomXml)) { if (ObjectUtil.isNull(roomXml)) {
roomXml = new RoomXmlVO(); roomXml = new RoomXmlVO();
} }
// 每解析到一次room,设置一次全局roomcode给box列表用
// room完接下来都认为是box,直到新的room出现
roomXmlVO = roomXml; roomXmlVO = roomXml;
// 校验房间属性 // 校验房间属性
checkRoom(roomXmlVO); checkRoom(roomXmlVO);
// 每解析到一次room,设置一次全局roomcode给box列表用 // 缓存房间
// room完接下来都认为是box,直到新的room出现 roomMap.put(roomXmlVO.getCode(), roomXmlVO);
String roomCode = StringUtils.isNotEmpty(roomXmlVO.getCode()) ? roomXmlVO.getCode() : NOT_ASSIGNED_CODE;
Set<String> bodyCodeSet = roomBodyCodeMap.get(roomCode);
if (CollUtil.isEmpty(bodyCodeSet)) {
roomBodyCodeMap.put(roomCode, new HashSet<>());
}
} }
/** /**
@@ -511,16 +502,13 @@ public class DefaultOrderImportXmlParserHandler {
String bodyCode = boxXmlVO.getCode(); String bodyCode = boxXmlVO.getCode();
String roomCode = roomXmlVO.getCode(); String roomCode = roomXmlVO.getCode();
String roomName = roomXmlVO.getName();
// 缓存roomCode+bodyCode // 缓存roomCode+bodyCode
Set<String> bodyCodeSet = roomBodyCodeMap.get(roomCode); String roomBodyKey = bodyCode + roomCode;
if (CollUtil.isNotEmpty(bodyCodeSet)) { RoomBoxXmlVO roomBoxXmlVO = roomBodyMap.get(roomBodyKey);
if (!bodyCodeSet.contains(bodyCode)) { if (ObjectUtil.isNull(roomBoxXmlVO)) {
bodyCodeSet.add(bodyCode); roomBodyMap.put(roomBodyKey, boxXmlVO);
}
} else {
roomBodyCodeMap.put(roomCode, new HashSet<>() {{
add(bodyCode);
}});
} }
// 添加到临时表 // 添加到临时表
@@ -529,7 +517,7 @@ public class DefaultOrderImportXmlParserHandler {
.orderId(orderId) .orderId(orderId)
.taskId(taskId) .taskId(taskId)
.type(OrderImportTmpDataTypeEnum.BODY.getType()) .type(OrderImportTmpDataTypeEnum.BODY.getType())
.roomName(roomXmlVO.getName()) .roomName(roomName)
.roomCode(roomCode) .roomCode(roomCode)
.bodyName(boxXmlVO.getName()) .bodyName(boxXmlVO.getName())
.bodyCode(bodyCode) .bodyCode(bodyCode)
@@ -693,7 +681,7 @@ public class DefaultOrderImportXmlParserHandler {
String boxCode = blockXmlVO.getBoxCode(); String boxCode = blockXmlVO.getBoxCode();
String groupCodes = blockXmlVO.getGroupCodes(); String groupCodes = blockXmlVO.getGroupCodes();
// 校验检查房间、柜体、加工组编号 // 校验检查房间、柜体、加工组编号
checkRoomBoxGroup(se, roomCode, blockXmlVO.getRoomName(), boxCode, blockXmlVO.getBoxName(), groupCodes); checkRoomBoxGroup(se, roomCode, boxCode, groupCodes);
blockXmlVO.setRoomCode(roomCode); blockXmlVO.setRoomCode(roomCode);
blockXmlVO.setBoxCode(boxCode); blockXmlVO.setBoxCode(boxCode);
@@ -794,7 +782,7 @@ public class DefaultOrderImportXmlParserHandler {
String boxCode = edgingXmlVO.getBoxCode(); String boxCode = edgingXmlVO.getBoxCode();
String groupCodes = edgingXmlVO.getGroupCode(); String groupCodes = edgingXmlVO.getGroupCode();
// 校验检查房间、柜体、加工组编号 // 校验检查房间、柜体、加工组编号
checkRoomBoxGroup(se, roomCode, edgingXmlVO.getRoomName(), boxCode, edgingXmlVO.getBoxName(), groupCodes); checkRoomBoxGroup(se, roomCode, boxCode, groupCodes);
// 设置全局参数 // 设置全局参数
String itemCode = edgingXmlVO.getItemCode(); String itemCode = edgingXmlVO.getItemCode();
@@ -868,7 +856,7 @@ public class DefaultOrderImportXmlParserHandler {
String boxCode = hardwareXmlVO.getBoxCode(); String boxCode = hardwareXmlVO.getBoxCode();
String groupCodes = hardwareXmlVO.getGroupCode(); String groupCodes = hardwareXmlVO.getGroupCode();
// 校验检查房间、柜体、加工组编号 // 校验检查房间、柜体、加工组编号
checkRoomBoxGroup(se, roomCode, hardwareXmlVO.getRoomName(), boxCode, hardwareXmlVO.getBoxName(), groupCodes); checkRoomBoxGroup(se, roomCode, boxCode, groupCodes);
// 设置全局参数 // 设置全局参数
String itemCode = hardwareXmlVO.getItemCode(); String itemCode = hardwareXmlVO.getItemCode();
@@ -939,7 +927,7 @@ public class DefaultOrderImportXmlParserHandler {
String boxCode = assemblyXmlVO.getBoxCode(); String boxCode = assemblyXmlVO.getBoxCode();
String groupCodes = assemblyXmlVO.getGroupCode(); String groupCodes = assemblyXmlVO.getGroupCode();
// 校验检查房间、柜体、加工组编号 // 校验检查房间、柜体、加工组编号
checkRoomBoxGroup(se, roomCode, assemblyXmlVO.getRoomName(), boxCode, assemblyXmlVO.getBoxName(), groupCodes); checkRoomBoxGroup(se, roomCode, boxCode, groupCodes);
// 设置全局参数 // 设置全局参数
String itemCode = assemblyXmlVO.getItemCode(); String itemCode = assemblyXmlVO.getItemCode();
@@ -1643,11 +1631,35 @@ public class DefaultOrderImportXmlParserHandler {
* @param boxCode * @param boxCode
* @param groupCodes * @param groupCodes
*/ */
private void checkRoomBoxGroup(StartElement se, String roomCode, String roomName, String boxCode, String boxName, String groupCodes) { private void checkRoomBoxGroup(StartElement se, String roomCode, String boxCode, String groupCodes) {
boolean roomEmpty = StringUtil.equals(roomCode, NOT_ASSIGNED_CODE); boolean roomEmpty = StringUtil.equals(roomCode, NOT_ASSIGNED_CODE);
boolean bodyEmpty = StringUtil.equals(boxCode, NOT_ASSIGNED_CODE); boolean bodyEmpty = StringUtil.equals(boxCode, NOT_ASSIGNED_CODE);
String existKey = roomEmpty + "%" + bodyEmpty; String roomBodyKey = roomCode + boxCode;
if ((roomEmpty || bodyEmpty) && NOT_ASSIGNED_BODY_EXISTS_MAP.containsKey(existKey) && !NOT_ASSIGNED_BODY_EXISTS_MAP.get(existKey)) {
RoomBoxXmlVO roomBoxXmlVO = roomBodyMap.get(roomBodyKey);
RoomXmlVO roomXml = roomMap.get(roomCode);
// 板件列表存在柜体没有缓存的
if (ObjectUtil.isNull(roomBoxXmlVO)) {
// 检查roomCode
if (!bodyEmpty) {
throw ServiceExceptionUtil.exception(ORDER_IMPORT_BODYCODE_NOT_EXIST_VALID_ERROR, se, boxCode);
}
String roomName = NOT_ASSIGNED;
String boxName = NOT_ASSIGNED;
// 房间缓存了取房间名
if (ObjectUtil.isNotNull(roomXml)) {
roomName = roomXml.getName();
} else {
// 检查roomCode
if (!roomEmpty) {
throw ServiceExceptionUtil.exception(ORDER_IMPORT_ROOMCODE_NOT_EXIST_VALID_ERROR, se, roomCode);
}
}
cachedDataList.add(OrderImportTempDataDO.builder() cachedDataList.add(OrderImportTempDataDO.builder()
.id((Long) snowFlakeGenerator.nextId(null)) .id((Long) snowFlakeGenerator.nextId(null))
.orderId(orderId) .orderId(orderId)
@@ -1660,20 +1672,22 @@ public class DefaultOrderImportXmlParserHandler {
.createTime(LocalDateTime.now()) .createTime(LocalDateTime.now())
.sort(sort++) .sort(sort++)
.build()); .build());
// 添加到标识缓存map
NOT_ASSIGNED_BODY_EXISTS_MAP.put(existKey, true);
}
// 校验板件的房间、柜体、加工组编号
Set<String> bodyCodeSet = roomBodyCodeMap.get(roomCode);
if (CollUtil.isNotEmpty(bodyCodeSet)) {
if (!bodyCodeSet.contains(boxCode) && !StringUtils.equals(NOT_ASSIGNED_CODE, boxCode)) {
throw ServiceExceptionUtil.exception(ORDER_IMPORT_BODYCODE_NOT_EXIST_VALID_ERROR, se, boxCode);
}
} else if (!StringUtils.equals(NOT_ASSIGNED_CODE, roomCode)) {
throw ServiceExceptionUtil.exception(ORDER_IMPORT_ROOMCODE_NOT_EXIST_VALID_ERROR, se, roomCode);
} }
// // 校验板件的房间、柜体、加工组编号
// Set<String> bodyCodeSet = roomBodyCodeMap.get(roomCode);
// if (ObjectUtil.isNull(bodyCodeSet)) {
// // 房间不存在roomCode且不是未命名房间的抛出提示
// if (!StringUtils.equals(NOT_ASSIGNED_CODE, roomCode)) {
//
// }
// } else if (CollUtil.isNotEmpty(bodyCodeSet)) {
// // 房间下柜体没有该boxCode且不是未命名柜体的抛出提示
// if (!bodyCodeSet.contains(boxCode) && !StringUtils.equals(NOT_ASSIGNED_CODE, boxCode)) {
//
// }
// }
if (StringUtils.isNotEmpty(groupCodes) && !groupCodeSet.contains(groupCodes)) { if (StringUtils.isNotEmpty(groupCodes) && !groupCodeSet.contains(groupCodes)) {
throw ServiceExceptionUtil.exception(ORDER_IMPORT_GROUPCODE_NOT_EXIST_VALID_ERROR, se, groupCodes); throw ServiceExceptionUtil.exception(ORDER_IMPORT_GROUPCODE_NOT_EXIST_VALID_ERROR, se, groupCodes);
@@ -11,10 +11,10 @@ import java.io.Serializable;
@NoArgsConstructor @NoArgsConstructor
public class RoomBoxXmlVO implements Serializable { public class RoomBoxXmlVO implements Serializable {
// 房间名称 // 柜体名称
private String name; private String name;
// 房间编号 // 柜体编号
private String code; private String code;
// 房间高度 // 房间高度