From 60ca56879fe068b62ff6893135a76e24cd4ec2b9 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Wed, 12 Mar 2025 16:12:00 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E5=8D=95xml=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D=EF=BC=9A=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E7=A9=BA=E6=9F=9C=E4=BD=93=E5=88=97=E8=A1=A8=E5=92=8C?= =?UTF-8?q?=E6=9D=BF=E6=9D=90=E5=AF=B9=E5=BA=94=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DefaultOrderImportXmlParserHandler.java | 106 ++++++++++-------- .../admin/files/xml/VO/RoomBoxXmlVO.java | 4 +- 2 files changed, 62 insertions(+), 48 deletions(-) diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/DefaultOrderImportXmlParserHandler.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/DefaultOrderImportXmlParserHandler.java index 2f154d508..69c5e28ad 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/DefaultOrderImportXmlParserHandler.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/DefaultOrderImportXmlParserHandler.java @@ -117,7 +117,8 @@ public class DefaultOrderImportXmlParserHandler { // todo 对编码去重,如果后期性能瓶颈需要改造到消费后用数据库 private Set groupCodeSet = new HashSet<>(); - private Map> roomBodyCodeMap = new HashMap<>(); + private Map roomMap = new HashMap<>(); + private Map roomBodyMap = new HashMap<>(); /** * 补板用 @@ -173,12 +174,6 @@ public class DefaultOrderImportXmlParserHandler { private SnowFlakeGenerator snowFlakeGenerator; - private Map NOT_ASSIGNED_BODY_EXISTS_MAP = MapUtil.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 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 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 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 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); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/RoomBoxXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/RoomBoxXmlVO.java index 0fbdef396..b0f3288e5 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/RoomBoxXmlVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/RoomBoxXmlVO.java @@ -11,10 +11,10 @@ import java.io.Serializable; @NoArgsConstructor public class RoomBoxXmlVO implements Serializable { - // 房间名称 + // 柜体名称 private String name; - // 房间编号 + // 柜体编号 private String code; // 房间高度