生产单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 对编码去重,如果后期性能瓶颈需要改造到消费后用数据库
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 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_AXISYROTATE = "axisYrotate";
@@ -452,18 +447,14 @@ public class DefaultOrderImportXmlParserHandler {
if (ObjectUtil.isNull(roomXml)) {
roomXml = new RoomXmlVO();
}
// 每解析到一次room,设置一次全局roomcode给box列表用
// room完接下来都认为是box,直到新的room出现
roomXmlVO = roomXml;
// 校验房间属性
checkRoom(roomXmlVO);
// 每解析到一次room,设置一次全局roomcode给box列表用
// room完接下来都认为是box,直到新的room出现
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<>());
}
// 缓存房间
roomMap.put(roomXmlVO.getCode(), roomXmlVO);
}
/**
@@ -511,16 +502,13 @@ public class DefaultOrderImportXmlParserHandler {
String bodyCode = boxXmlVO.getCode();
String roomCode = roomXmlVO.getCode();
String roomName = roomXmlVO.getName();
// 缓存roomCode+bodyCode
Set<String> bodyCodeSet = roomBodyCodeMap.get(roomCode);
if (CollUtil.isNotEmpty(bodyCodeSet)) {
if (!bodyCodeSet.contains(bodyCode)) {
bodyCodeSet.add(bodyCode);
}
} else {
roomBodyCodeMap.put(roomCode, new HashSet<>() {{
add(bodyCode);
}});
String roomBodyKey = bodyCode + roomCode;
RoomBoxXmlVO roomBoxXmlVO = roomBodyMap.get(roomBodyKey);
if (ObjectUtil.isNull(roomBoxXmlVO)) {
roomBodyMap.put(roomBodyKey, boxXmlVO);
}
// 添加到临时表
@@ -529,7 +517,7 @@ public class DefaultOrderImportXmlParserHandler {
.orderId(orderId)
.taskId(taskId)
.type(OrderImportTmpDataTypeEnum.BODY.getType())
.roomName(roomXmlVO.getName())
.roomName(roomName)
.roomCode(roomCode)
.bodyName(boxXmlVO.getName())
.bodyCode(bodyCode)
@@ -693,7 +681,7 @@ public class DefaultOrderImportXmlParserHandler {
String boxCode = blockXmlVO.getBoxCode();
String groupCodes = blockXmlVO.getGroupCodes();
// 校验检查房间、柜体、加工组编号
checkRoomBoxGroup(se, roomCode, blockXmlVO.getRoomName(), boxCode, blockXmlVO.getBoxName(), groupCodes);
checkRoomBoxGroup(se, roomCode, boxCode, groupCodes);
blockXmlVO.setRoomCode(roomCode);
blockXmlVO.setBoxCode(boxCode);
@@ -794,7 +782,7 @@ public class DefaultOrderImportXmlParserHandler {
String boxCode = edgingXmlVO.getBoxCode();
String groupCodes = edgingXmlVO.getGroupCode();
// 校验检查房间、柜体、加工组编号
checkRoomBoxGroup(se, roomCode, edgingXmlVO.getRoomName(), boxCode, edgingXmlVO.getBoxName(), groupCodes);
checkRoomBoxGroup(se, roomCode, boxCode, groupCodes);
// 设置全局参数
String itemCode = edgingXmlVO.getItemCode();
@@ -868,7 +856,7 @@ public class DefaultOrderImportXmlParserHandler {
String boxCode = hardwareXmlVO.getBoxCode();
String groupCodes = hardwareXmlVO.getGroupCode();
// 校验检查房间、柜体、加工组编号
checkRoomBoxGroup(se, roomCode, hardwareXmlVO.getRoomName(), boxCode, hardwareXmlVO.getBoxName(), groupCodes);
checkRoomBoxGroup(se, roomCode, boxCode, groupCodes);
// 设置全局参数
String itemCode = hardwareXmlVO.getItemCode();
@@ -939,7 +927,7 @@ public class DefaultOrderImportXmlParserHandler {
String boxCode = assemblyXmlVO.getBoxCode();
String groupCodes = assemblyXmlVO.getGroupCode();
// 校验检查房间、柜体、加工组编号
checkRoomBoxGroup(se, roomCode, assemblyXmlVO.getRoomName(), boxCode, assemblyXmlVO.getBoxName(), groupCodes);
checkRoomBoxGroup(se, roomCode, boxCode, groupCodes);
// 设置全局参数
String itemCode = assemblyXmlVO.getItemCode();
@@ -1276,7 +1264,7 @@ public class DefaultOrderImportXmlParserHandler {
// 设置全局参数
inPoints = true;
// 从标签属性生成points对象
if(inGroove) {
if (inGroove) {
groovePointXmlVOS = getJavaBeanFromXmlAttr(PointXmlVOS.class, attributes);
} else {
pointXmlVOS = getJavaBeanFromXmlAttr(PointXmlVOS.class, attributes);
@@ -1291,7 +1279,7 @@ public class DefaultOrderImportXmlParserHandler {
if (ObjectUtil.isNotNull(pointXmlVOS) && CollUtil.isEmpty(points)) {
throw ServiceExceptionUtil.exception(ORDER_IMPORT_DETAIL_VALID_ERROR, inIslet ? "孤岛点阵列表不可为空" : "槽点坐标列表不可为空");
}
if(inGroove) {
if (inGroove) {
groovePointXmlVOS.setPointXmlVOList(ListUtil.toList(points));
} else {
pointXmlVOS.setPointXmlVOList(ListUtil.toList(points));
@@ -1355,7 +1343,7 @@ public class DefaultOrderImportXmlParserHandler {
// 从标签属性生成grooves对象
isletXmlVOS = getJavaBeanFromXmlAttr(IsletXmlVOS.class, attributes);
if (ObjectUtil.isNotNull(isletXmlVOS)) {
isletXmlVOS.setIsletXmlVOList(new ArrayList<>());
isletXmlVOS.setIsletXmlVOList(new ArrayList<>());
}
}
@@ -1643,11 +1631,35 @@ public class DefaultOrderImportXmlParserHandler {
* @param boxCode
* @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 bodyEmpty = StringUtil.equals(boxCode, NOT_ASSIGNED_CODE);
String existKey = roomEmpty + "%" + bodyEmpty;
if ((roomEmpty || bodyEmpty) && NOT_ASSIGNED_BODY_EXISTS_MAP.containsKey(existKey) && !NOT_ASSIGNED_BODY_EXISTS_MAP.get(existKey)) {
String roomBodyKey = roomCode + boxCode;
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()
.id((Long) snowFlakeGenerator.nextId(null))
.orderId(orderId)
@@ -1660,20 +1672,22 @@ public class DefaultOrderImportXmlParserHandler {
.createTime(LocalDateTime.now())
.sort(sort++)
.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)) {
throw ServiceExceptionUtil.exception(ORDER_IMPORT_GROUPCODE_NOT_EXIST_VALID_ERROR, se, groupCodes);
@@ -11,10 +11,10 @@ import java.io.Serializable;
@NoArgsConstructor
public class RoomBoxXmlVO implements Serializable {
// 房间名称
// 柜体名称
private String name;
// 房间编号
// 柜体编号
private String code;
// 房间高度