34、JsonUtils

UserUtils中有一个操作Json的类:
user = JSON.parseObject(jsondata, User.class);
该JSON类在JsonUtils.jar中,因为Android中操作json的类有很多,不再细述,知道有该库即可。
// ===== 参数构建 ===== private static final Map<String, HoleProcessor> HOLE_PROCESSORS = new HashMap<>(); static { HOLE_PROCESSORS.put("A板", (propMap, hole) -> { if ("带托通孔".equals(hole.ncName)) { float gpD = MapUtils.getFloat(propMap, "GP_D", 0f); return new HoleResult( "gpD", "托司孔", NcTypeTl.getHoleDm("带托通孔", "托司孔", Integer.toString((int) gpD)) ); } return null; }); HOLE_PROCESSORS.put("B板", (propMap, hole) -> { if ("带托通孔".equals(hole.ncName)) { float gpD = MapUtils.getFloat(propMap, "GP_D", 0f); return new HoleResult( "gpD", "托司孔", NcTypeTl.getHoleDm("带托通孔", "托司孔", Integer.toString((int) gpD)) ); } else if ("牙孔".equals(hole.ncName)) { float sD = MapUtils.getFloat(propMap, "S_D", 0f); return new HoleResult( "sD", "牙孔", NcTypeTl.getHoleDm("牙孔", "公制", "M" + (int) sD) ); } else if ("精通孔".equals(hole.ncName)) { float rpD = MapUtils.getFloat(propMap, "RP_D", 0f); return new HoleResult( "rpD", "精通孔", NcTypeTl.getHoleDm("带托通孔", "回针孔", Integer.toString((int) rpD)) ); } return null; }); HOLE_PROCESSORS.put("底板", (propMap, hole) -> { if ("胚头孔".equals(hole.ncName)) { float sfD = MapUtils.getFloat(propMap, "SF_D", 0f); return new HoleResult( "sfD", "胚头孔", NcTypeTl.getHoleDm("胚头孔", "胚头孔", "M" + (int) sfD) ); } else if ("overDb".equals(MapUtils.getString(propMap, "proc"))) { return new HoleResult( "overDb", "避空孔", NcTypeTl.getHoleDm("避空孔", "底板加工避空", "34") ); } return null; }); HOLE_PROCESSORS.put("面板", (propMap, hole) -> { float gpD = MapUtils.getFloat(propMap, "GP_D", 0f); return new HoleResult( "gpD", "水口边-简化边孔", NcTypeTl.getHoleDm("带托通孔", "水口边-简化边孔", Integer.toString((int) gpD)) ); }); HOLE_PROCESSORS.put("面针板", (propMap, hole) -> { float rpD = MapUtils.getFloat(propMap, "RP_D", 0f); return new HoleResult( "rpD", "回针孔", NcTypeTl.getHoleDm("带托通孔", "回针孔", "M" + (int) rpD) ); }); } private static class HoleData { final List<String> plateNames; final Map<String, Object> propMap; final String proc; HoleData(List<String> plateNames, Map<String, Object> propMap, String proc) { this.plateNames = plateNames; this.propMap = propMap; this.proc = proc; } } private HoleData extractHoleData(JsonNode node) { String nodeJson = node.toString(); return new HoleData( JsonUtils.json2List(JsonUtils.path(nodeJson, "plate").toString(), String.class), JsonUtils.jsonString2Map(JsonUtils.path(nodeJson, "prop").toString()), JsonUtils.pathString(nodeJson, "proc") ); } private interface HoleProcessor { HoleResult process(Map<String, Object> propMap, Hole hole); } private static class HoleResult { final String attr; final String holeType; final HoleDM holeDM; HoleResult(String attr, String holeType, HoleDM holeDM) { this.attr = attr; this.holeType = holeType; this.holeDM = holeDM; } } /** * 构建要修改的板件情况 * @param plateName 板名 * @param propMap 要改成的数据 * @param hole 孔 * @return 要修改的板件情况 */ public Map<String, Object> buildParam(String plateName, Map<String, Object> propMap, Hole hole) { HoleProcessor processor = HOLE_PROCESSORS.get(plateName); if (processor == null) return Collections.emptyMap(); HoleResult result = processor.process(propMap, hole); if (result == null) return Collections.emptyMap(); Map<String, Object> map = new HashMap<>(); map.put("attr", result.attr); map.put("holeType", result.holeType); map.put("holeDM", result.holeDM); return map; } 这里的设计模式
最新发布
09-17
/** * 边顶加大孔移位 * @param orderHeader 订单头 * @param json 获取数据(含有修改后的坐标点) * @return 边顶加大孔移位后数据 */ public PlateBuilder expandMoveHole(OrderHeader orderHeader, String json){ //只有b2b并且没有上传资料的 if (!orderHeader.getSourceType().contains("B2B")|| DataUtils.isB2BUploadDraw(orderHeader, json)) { return this; } //改后的数据为空的 JsonNode holeArray = JsonUtils.readNode(json); if (!holeArray.isArray()) { return this; } //大水口 if (orderHeader.getModelStyle().matches("S..")){ for (JsonNode node : holeArray) { String nodeJson = node.toString(); List<String> plateNames = JsonUtils.json2List(JsonUtils.path(nodeJson, "plate").toString(), String.class); String propStr = JsonUtils.path(nodeJson, "prop").toString(); String proc = JsonUtils.pathString(nodeJson, "proc"); String desc = JsonUtils.pathString(nodeJson, "desc"); //判断是否含有要修改的板 if (!proc.contains("gz99_c031")||!plateNames.contains(plateInfo.plateName)) { continue; } Map<String, Object> propMap = JsonUtils.jsonString2Map(propStr); // 标准直径大小 float std = MapUtils.getFloat(propMap, "STD", 0f); // 加大后直径大小 float gpD = MapUtils.getFloat(propMap, "GP_D", 0f); float tolerance = gpD - std; if (tolerance > 0) { //大水口只做AB板 if (!plateInfo.plateName.matches("A.*|B.*")){ return this; } plateInfo.sideList.forEach(side ->{ //只从反面开始处理 if (PlateSideEnum..equals(side.sideName)){ //获取孔数据 for (AbsProcess absProcess : side.procList){ //是否为空类型 if (!(absProcess instanceof Hole)) { continue; } Hole hole = (Hole) absProcess; //是否未标准孔 if (!StringUtils.equalsIgnoreCase(hole.sourceType, "BOM")) { continue; } //只做带托通孔 if(!hole.ncName.matches("带托通孔")){ continue; } //孔坐标不为空 if (CollectionUtils.isEmpty(hole.pointList)) { continue; } String holeType = plateInfo.plateName.contains("A板") ? "托司孔" : "边钉-针板边孔"; HoleDM stdHole = NcTypeTl.getHoleDm("带托通孔", holeType, Integer.toString((int) gpD)); //找偏移坐标 Point2D.Float deviatedPoint = findDeviatedHole(hole.pointList); // === 因为摆放方式不一样是这个数据竖摆的,数据中心是横摆的 最后返回是横摆的 所以 GP_X换成GP_Y //偏移后x绝对值 Float gpx = MapUtils.getFloat(propMap, "GP_Y", 0f); //偏移后y绝对值 Float gpy = MapUtils.getFloat(propMap, "GP_X", 0f); Float gpx1 = MapUtils.getFloat(propMap, "GP_Y1", 0f); Float gpy1 = MapUtils.getFloat(propMap, "GP_X1", 0f); for (Point2D.Float point : hole.pointList) { if (!Objects.isNull(deviatedPoint) && Math.abs(point.x) == Math.abs(deviatedPoint.x) && Math.abs(point.y) == Math.abs(deviatedPoint.y)){ if (Objects.isNull(gpx1)|| gpx1 == 0f){ point.y = point.y > 0 ? gpy1 : (point.y == 0f ? 0f: -gpy1); point.x = point.x > 0 ? gpx : (point.x == 0f ? 0f: -gpx); }else { point.x = point.x > 0 ? gpx1 : (point.x == 0f ? 0f: -gpx1); point.y = point.y > 0 ? gpy : (point.y == 0f ? 0f: -gpy); } }else { point.x = point.x > 0 ? gpx : (point.x == 0f ? 0f: -gpx); point.y = point.y > 0 ? gpy : (point.y == 0f ? 0f: -gpy); } } hole.d = stdHole.getD(); hole.spec = stdHole.getSpec(); hole.h = plateInfo.plateThick - stdHole.getH2(); hole.D = stdHole.getD2(); hole.H = stdHole.getH2(); hole.holeSpec = holeType; hole.holeSize = hole.spec; } } }); } } }else if (orderHeader.getModelStyle().matches("[FG]..")){ //简化型细水口 for (JsonNode node : holeArray) { String nodeJson = node.toString(); List<String> plateNames = JsonUtils.json2List(JsonUtils.path(nodeJson, "plate").toString(), String.class); String propStr = JsonUtils.path(nodeJson, "prop").toString(); String proc = JsonUtils.pathString(nodeJson, "proc"); //判断是否含有要修改的板 if (!proc.contains("gz99_c031")||!plateNames.contains(plateInfo.plateName)) { continue; } Map<String, Object> propMap = JsonUtils.jsonString2Map(propStr); // 标准直径大小 float std = MapUtils.getFloat(propMap, "STD", 0f); // 加大后直径大小 float gpD = MapUtils.getFloat(propMap, "GP_D", 0f); float tolerance = gpD - std; if (tolerance > 0) { String tempName = DataUtils.plateNameHandle(plateInfo.plateName); //简化型细水口 包含的板类 if (!TEMPLATE_PATTERN.matcher(tempName).matches()){ return this; } plateInfo.sideList.forEach(side ->{ //只从反面开始处理 if (PlateSideEnum..equals(side.sideName)){ //获取孔数据 for (AbsProcess absProcess : side.procList){ //是否为空类型 if (!(absProcess instanceof Hole)) { continue; } Hole hole = (Hole) absProcess; //是否为标准孔 if (!StringUtils.equalsIgnoreCase(hole.sourceType, "BOM")) { continue; } //孔坐标不为空 if (CollectionUtils.isEmpty(hole.pointList)) { continue; } Map<String, Object> resultMap = buildParam(plateInfo.plateName, propMap, hole); if (MapUtils.isEmpty(resultMap)){ continue; } HoleDM stdHole = (HoleDM)MapUtils.getObject(resultMap,"holeDM"); String attr = MapUtils.getString(resultMap,"attr"); String holeType = MapUtils.getString(resultMap,"holeType"); if (attr.matches("gpD")){ //找偏移坐标 Point2D.Float deviatedPoint = findDeviatedHole(hole.pointList); // === 因为摆放方式不一样是这个数据竖摆的,数据中心是横摆的 最后返回是横摆的 所以 GP_X换成GP_Y //偏移后x绝对值 Float gpx = MapUtils.getFloat(propMap, "GP_Y", 0f); //偏移后y绝对值 Float gpy = MapUtils.getFloat(propMap, "GP_X", 0f); Float gpx1 = MapUtils.getFloat(propMap, "GP_Y1", 0f); Float gpy1 = MapUtils.getFloat(propMap, "GP_X1", 0f); for (Point2D.Float point : hole.pointList) { if (!Objects.isNull(deviatedPoint) && Math.abs(point.x) == Math.abs(deviatedPoint.x) && Math.abs(point.y) == Math.abs(deviatedPoint.y)){ if (Objects.isNull(gpx1)|| gpx1 == 0f){ point.y = point.y > 0 ? gpy1 : (point.y == 0f ? 0f: -gpy1); point.x = point.x > 0 ? gpx : (point.x == 0f ? 0f: -gpx); }else { point.x = point.x > 0 ? gpx1 : (point.x == 0f ? 0f: -gpx1); point.y = point.y > 0 ? gpy : (point.y == 0f ? 0f: -gpy); } }else { point.x = point.x > 0 ? gpx : (point.x == 0f ? 0f: -gpx); point.y = point.y > 0 ? gpy : (point.y == 0f ? 0f: -gpy); } } } else if (attr.matches("sD")) { Float gpx = MapUtils.getFloat(propMap, "S_X", 0f); //偏移后y绝对值 Float gpy = MapUtils.getFloat(propMap, "S_Y", 0f); for (Point2D.Float point : hole.pointList) { point.x = point.x > 0 ? gpx : (point.x == 0f ? 0f: -gpx); point.y = point.y > 0 ? gpy : (point.y == 0f ? 0f: -gpy); } } else if (attr.matches("sfD")){ Float gpx = MapUtils.getFloat(propMap, "S_X", 0f); //偏移后y绝对值 Float gpy = MapUtils.getFloat(propMap, "SF_Y", 0f); for (Point2D.Float point : hole.pointList) { point.x = point.x > 0 ? gpx : (point.x == 0f ? 0f: -gpx); point.y = point.y > 0 ? gpy : (point.y == 0f ? 0f: -gpy); } } else if (attr.matches("rpD")){ Float gpx = MapUtils.getFloat(propMap, "RP_X", 0f); //偏移后y绝对值 Float gpy = MapUtils.getFloat(propMap, "RP_Y", 0f); for (Point2D.Float point : hole.pointList) { point.x = point.x > 0 ? gpx : (point.x == 0f ? 0f: -gpx); point.y = point.y > 0 ? gpy : (point.y == 0f ? 0f: -gpy); } } hole.d = stdHole.getD(); hole.spec = stdHole.getSpec(); hole.h = plateInfo.plateThick - stdHole.getH2(); hole.D = stdHole.getD2(); hole.H = stdHole.getH2(); hole.holeSpec = holeType; hole.holeSize = hole.spec; } } }); } } } return this; } /** * 找出偏移孔的位置 * @param point2DList 偏移孔的位置 * @return 偏移孔的位置 */ private Point2D.Float findDeviatedHole(List<Point2D.Float> point2DList){ // 检查空列表 if (point2DList == null || point2DList.isEmpty()) { return null; } // 查找唯一的x值(保留原始符号) Optional<Float> uniqueX = point2DList.stream() .collect(Collectors.groupingBy(p-> Math.abs(p.getX()), Collectors.counting() )) .entrySet().stream() .filter(entry -> entry.getValue() == 1) .findFirst()// 返回 Optional<Map.Entry<Float, Long>> .map(entry -> entry.getKey().floatValue()); // 转换为 Optional<Float> // 查找唯一的y值(保留原始符号) Optional<Float> uniqueY = point2DList.stream() .collect(Collectors.groupingBy(p-> Math.abs(p.getY()), Collectors.counting() )) .entrySet().stream() .filter(entry -> entry.getValue() == 1) .findFirst() // 返回 Optional<Map.Entry<Float, Long>> .map(entry -> entry.getKey().floatValue()); // 转换为 Optional<Float> // 检查是否存在偏移孔 if (!uniqueX.isPresent() && !uniqueY.isPresent()) { return null; } // 创建结果点 Point2D.Float result = new Point2D.Float(); // 设置x坐标(如果有偏移则用唯一值,否则用第一个点的x值) result.x = uniqueX.orElse(point2DList.get(0).x); // 设置y坐标(如果有偏移则用唯一值,否则用第一个点的y值) result.y = uniqueY.orElse(point2DList.get(0).y); return result; } public Map<String, Object> buildParam(String plateName, Map<String, Object> propMap, Hole hole){ float gpD = MapUtils.getFloat(propMap, "GP_D", 0f); float rpD = MapUtils.getFloat(propMap, "RP_D", 0f); float sD = MapUtils.getFloat(propMap, "S_D", 0f); float sfD = MapUtils.getFloat(propMap, "SF_D", 0f); String attr = null; String holeType = null; HoleDM holeDM = new HoleDM(); switch (plateName){ case "A板": if (hole.ncName.matches("带托通孔")){ holeDM = NcTypeTl.getHoleDm("带托通孔", "托司孔", Integer.toString((int) gpD)); attr = "gpD"; holeType = "托司孔"; } break; case "B板": if (hole.ncName.matches("带托通孔")){ holeDM = NcTypeTl.getHoleDm("带托通孔", "托司孔", Integer.toString((int) gpD)); attr = "gpD"; holeType = "托司孔"; } else if (hole.ncName.matches("牙孔")) { holeDM = NcTypeTl.getHoleDm("牙孔", "牙孔", "M"+sD); attr = "sD"; holeType = "牙孔"; } else if (hole.ncName.matches("精通孔")){ //使用回针孔的数据 holeDM = NcTypeTl.getHoleDm("带托通孔", "回针孔", Integer.toString((int)rpD)); attr = "rpD"; holeType = "精通孔"; } break; case "面板": if (hole.ncName.matches("带托通孔")){ holeDM = NcTypeTl.getHoleDm("带托通孔", "水口边-简化边孔", Integer.toString((int) gpD)); attr = "gpD"; holeType = "水口边-简化边孔"; } break; case "水口推板": if (hole.ncName.matches("精通孔")){ holeDM = NcTypeTl.getHoleDm("精通孔", "直司", Integer.toString((int) gpD)); attr = "gpD"; holeType = "直司"; } break; case "底板": String proc = MapUtils.getString(propMap, "proc"); if (hole.ncName.matches("胚头孔")){ holeDM = NcTypeTl.getHoleDm("胚头孔", "胚头孔", "M"+sfD); attr = "sfD"; holeType = "胚头孔"; }else if (StringUtils.isNotBlank(proc) && proc.equals("overDb")){ // 底板识别有“底板加工避空”位置按图字样 // 底板需增加此坐标加工:加工参数:通孔 直径按:34 } break; case "面针板": if (hole.ncName.matches("带托通孔")){ holeDM = NcTypeTl.getHoleDm("带托通孔", "回针孔", Integer.toString((int)rpD)); attr = "rpD"; holeType = "回针孔"; } break; default: break; } Map<String, Object> map = new HashMap<>(); map.put("attr", attr); map.put("holeType", holeType); map.put("holeDM", holeDM); return map; }优化代码
09-16
/** * 边顶加大孔移位 * @param orderHeader 订单头 * @param json 获取数据(含有修改后的坐标点) * @return 边顶加大孔移位后数据 */ public PlateBuilder expandMoveHole(OrderHeader orderHeader, String json){ //只有b2b并且没有上传资料的 if (!orderHeader.getSourceType().contains(“B2B”)|| DataUtils.isB2BUploadDraw(orderHeader, json)) { return this; } //改后的数据为空的 JsonNode holeArray = JsonUtils.readNode(json); if (!holeArray.isArray()) { return this; } //大水口 if (orderHeader.getModelStyle().matches(“S…”)){ for (JsonNode node : holeArray) { String nodeJson = node.toString(); List plateNames = JsonUtils.json2List(JsonUtils.path(nodeJson, “plate”).toString(), String.class); String propStr = JsonUtils.path(nodeJson, “prop”).toString(); String proc = JsonUtils.pathString(nodeJson, “proc”); String desc = JsonUtils.pathString(nodeJson, “desc”); //判断是否含有要修改的板 if (!proc.contains(“gz99_c031”)||!plateNames.contains(plateInfo.plateName)) { continue; } Map<String, Object> propMap = JsonUtils.jsonString2Map(propStr); // 标准直径大小 float std = MapUtils.getFloat(propMap, “STD”, 0f); // 加大后直径大小 float gpD = MapUtils.getFloat(propMap, “GP_D”, 0f); float tolerance = gpD - std; if (tolerance > 0) { //大水口只做AB板 if (!plateInfo.plateName.matches("A.*|B.*")){ return this; } plateInfo.sideList.forEach(side ->{ //只从反面开始处理 if (PlateSideEnum..equals(side.sideName)){ //获取孔数据 for (AbsProcess absProcess : side.procList){ //是否为空类型 if (!(absProcess instanceof Hole)) { continue; } Hole hole = (Hole) absProcess; //是否未标准孔 if (!StringUtils.equalsIgnoreCase(hole.sourceType, "BOM")) { continue; } //只做带托通孔 if(!hole.ncName.matches("带托通孔")){ continue; } //孔坐标不为空 if (CollectionUtils.isEmpty(hole.pointList)) { continue; } String holeType = plateInfo.plateName.contains("A板") ? "托司孔" : "边钉-针板边孔"; HoleDM stdHole = NcTypeTl.getHoleDm("带托通孔", holeType, Integer.toString((int) gpD)); //找偏移坐标 Point2D.Float deviatedPoint = findDeviatedHole(hole.pointList); // === 因为摆放方式不一样是这个数据竖摆的,数据中心是横摆的 最后返回是横摆的 所以 GP_X换成GP_Y //偏移后x绝对值 Float gpx = MapUtils.getFloat(propMap, "GP_Y", 0f); //偏移后y绝对值 Float gpy = MapUtils.getFloat(propMap, "GP_X", 0f); Float gpx1 = MapUtils.getFloat(propMap, "GP_Y1", 0f); Float gpy1 = MapUtils.getFloat(propMap, "GP_X1", 0f); for (Point2D.Float point : hole.pointList) { if (!Objects.isNull(deviatedPoint) && Math.abs(point.x) == Math.abs(deviatedPoint.x) && Math.abs(point.y) == Math.abs(deviatedPoint.y)){ if (Objects.isNull(gpx1)|| gpx1 == 0f){ point.y = point.y > 0 ? gpy1 : (point.y == 0f ? 0f: -gpy1); point.x = point.x > 0 ? gpx : (point.x == 0f ? 0f: -gpx); }else { point.x = point.x > 0 ? gpx1 : (point.x == 0f ? 0f: -gpx1); point.y = point.y > 0 ? gpy : (point.y == 0f ? 0f: -gpy); } }else { point.x = point.x > 0 ? gpx : (point.x == 0f ? 0f: -gpx); point.y = point.y > 0 ? gpy : (point.y == 0f ? 0f: -gpy); } } hole.d = stdHole.getD(); hole.spec = stdHole.getSpec(); hole.h = plateInfo.plateThick - stdHole.getH2(); hole.D = stdHole.getD2(); hole.H = stdHole.getH2(); hole.holeSpec = holeType; hole.holeSize = hole.spec; } } }); } } }else if (orderHeader.getModelStyle().matches("[FG]..")){ //简化型细水口 for (JsonNode node : holeArray) { String nodeJson = node.toString(); List<String> plateNames = JsonUtils.json2List(JsonUtils.path(nodeJson, "plate").toString(), String.class); String propStr = JsonUtils.path(nodeJson, "prop").toString(); String proc = JsonUtils.pathString(nodeJson, "proc"); //判断是否含有要修改的板 if (!proc.contains("gz99_c031")||!plateNames.contains(plateInfo.plateName)) { continue; } Map<String, Object> propMap = JsonUtils.jsonString2Map(propStr); // 标准直径大小 float std = MapUtils.getFloat(propMap, "STD", 0f); // 加大后直径大小 float gpD = MapUtils.getFloat(propMap, "GP_D", 0f); float tolerance = gpD - std; if (tolerance > 0) { String tempName = DataUtils.plateNameHandle(plateInfo.plateName); //简化型细水口 包含的板类 if (!TEMPLATE_PATTERN.matcher(tempName).matches()){ return this; } plateInfo.sideList.forEach(side ->{ //只从反面开始处理 if (PlateSideEnum..equals(side.sideName)){ //获取孔数据 for (AbsProcess absProcess : side.procList){ //是否为空类型 if (!(absProcess instanceof Hole)) { continue; } Hole hole = (Hole) absProcess; //是否为标准孔 if (!StringUtils.equalsIgnoreCase(hole.sourceType, "BOM")) { continue; } //孔坐标不为空 if (CollectionUtils.isEmpty(hole.pointList)) { continue; } Map<String, Object> resultMap = buildParam(plateInfo.plateName, propMap, hole); if (MapUtils.isEmpty(resultMap)){ continue; } HoleDM stdHole = (HoleDM)MapUtils.getObject(resultMap,"holeDM"); String attr = MapUtils.getString(resultMap,"attr"); String holeType = MapUtils.getString(resultMap,"holeType"); if (attr.matches("gpD")){ //找偏移坐标 Point2D.Float deviatedPoint = findDeviatedHole(hole.pointList); // === 因为摆放方式不一样是这个数据竖摆的,数据中心是横摆的 最后返回是横摆的 所以 GP_X换成GP_Y //偏移后x绝对值 Float gpx = MapUtils.getFloat(propMap, "GP_Y", 0f); //偏移后y绝对值 Float gpy = MapUtils.getFloat(propMap, "GP_X", 0f); Float gpx1 = MapUtils.getFloat(propMap, "GP_Y1", 0f); Float gpy1 = MapUtils.getFloat(propMap, "GP_X1", 0f); for (Point2D.Float point : hole.pointList) { if (!Objects.isNull(deviatedPoint) && Math.abs(point.x) == Math.abs(deviatedPoint.x) && Math.abs(point.y) == Math.abs(deviatedPoint.y)){ if (Objects.isNull(gpx1)|| gpx1 == 0f){ point.y = point.y > 0 ? gpy1 : (point.y == 0f ? 0f: -gpy1); point.x = point.x > 0 ? gpx : (point.x == 0f ? 0f: -gpx); }else { point.x = point.x > 0 ? gpx1 : (point.x == 0f ? 0f: -gpx1); point.y = point.y > 0 ? gpy : (point.y == 0f ? 0f: -gpy); } }else { point.x = point.x > 0 ? gpx : (point.x == 0f ? 0f: -gpx); point.y = point.y > 0 ? gpy : (point.y == 0f ? 0f: -gpy); } } } else if (attr.matches("sD")) { Float gpx = MapUtils.getFloat(propMap, "S_X", 0f); //偏移后y绝对值 Float gpy = MapUtils.getFloat(propMap, "S_Y", 0f); for (Point2D.Float point : hole.pointList) { point.x = point.x > 0 ? gpx : (point.x == 0f ? 0f: -gpx); point.y = point.y > 0 ? gpy : (point.y == 0f ? 0f: -gpy); } } else if (attr.matches("sfD")){ Float gpx = MapUtils.getFloat(propMap, "S_X", 0f); //偏移后y绝对值 Float gpy = MapUtils.getFloat(propMap, "SF_Y", 0f); for (Point2D.Float point : hole.pointList) { point.x = point.x > 0 ? gpx : (point.x == 0f ? 0f: -gpx); point.y = point.y > 0 ? gpy : (point.y == 0f ? 0f: -gpy); } } else if (attr.matches("rpD")){ Float gpx = MapUtils.getFloat(propMap, "RP_X", 0f); //偏移后y绝对值 Float gpy = MapUtils.getFloat(propMap, "RP_Y", 0f); for (Point2D.Float point : hole.pointList) { point.x = point.x > 0 ? gpx : (point.x == 0f ? 0f: -gpx); point.y = point.y > 0 ? gpy : (point.y == 0f ? 0f: -gpy); } } hole.d = stdHole.getD(); hole.spec = stdHole.getSpec(); hole.h = plateInfo.plateThick - stdHole.getH2(); hole.D = stdHole.getD2(); hole.H = stdHole.getH2(); hole.holeSpec = holeType; hole.holeSize = hole.spec; } } }); } } } return this; } /** * 找出偏移孔的位置 * @param point2DList 偏移孔的位置 * @return 偏移孔的位置 */ private Point2D.Float findDeviatedHole(List<Point2D.Float> point2DList){ // 检查空列表 if (point2DList == null || point2DList.isEmpty()) { return null; } // 查找唯一的x值(保留原始符号) Optional<Float> uniqueX = point2DList.stream() .collect(Collectors.groupingBy(p-> Math.abs(p.getX()), Collectors.counting() )) .entrySet().stream() .filter(entry -> entry.getValue() == 1) .findFirst()// 返回 Optional<Map.Entry<Float, Long>> .map(entry -> entry.getKey().floatValue()); // 转换为 Optional<Float> // 查找唯一的y值(保留原始符号) Optional<Float> uniqueY = point2DList.stream() .collect(Collectors.groupingBy(p-> Math.abs(p.getY()), Collectors.counting() )) .entrySet().stream() .filter(entry -> entry.getValue() == 1) .findFirst() // 返回 Optional<Map.Entry<Float, Long>> .map(entry -> entry.getKey().floatValue()); // 转换为 Optional<Float> // 检查是否存在偏移孔 if (!uniqueX.isPresent() && !uniqueY.isPresent()) { return null; } // 创建结果点 Point2D.Float result = new Point2D.Float(); // 设置x坐标(如果有偏移则用唯一值,否则用第一个点的x值) result.x = uniqueX.orElse(point2DList.get(0).x); // 设置y坐标(如果有偏移则用唯一值,否则用第一个点的y值) result.y = uniqueY.orElse(point2DList.get(0).y); return result; } public Map<String, Object> buildParam(String plateName, Map<String, Object> propMap, Hole hole){ float gpD = MapUtils.getFloat(propMap, "GP_D", 0f); float rpD = MapUtils.getFloat(propMap, "RP_D", 0f); float sD = MapUtils.getFloat(propMap, "S_D", 0f); float sfD = MapUtils.getFloat(propMap, "SF_D", 0f); String attr = null; String holeType = null; HoleDM holeDM = new HoleDM(); switch (plateName){ case "A板": if (hole.ncName.matches("带托通孔")){ holeDM = NcTypeTl.getHoleDm("带托通孔", "托司孔", Integer.toString((int) gpD)); attr = "gpD"; holeType = "托司孔"; } break; case "B板": if (hole.ncName.matches("带托通孔")){ holeDM = NcTypeTl.getHoleDm("带托通孔", "托司孔", Integer.toString((int) gpD)); attr = "gpD"; holeType = "托司孔"; } else if (hole.ncName.matches("牙孔")) { holeDM = NcTypeTl.getHoleDm("牙孔", "牙孔", "M"+sD); attr = "sD"; holeType = "牙孔"; } else if (hole.ncName.matches("精通孔")){ //使用回针孔的数据 holeDM = NcTypeTl.getHoleDm("带托通孔", "回针孔", Integer.toString((int)rpD)); attr = "rpD"; holeType = "精通孔"; } break; case "面板": if (hole.ncName.matches("带托通孔")){ holeDM = NcTypeTl.getHoleDm("带托通孔", "水口边-简化边孔", Integer.toString((int) gpD)); attr = "gpD"; holeType = "水口边-简化边孔"; } break; case "水口推板": if (hole.ncName.matches("精通孔")){ holeDM = NcTypeTl.getHoleDm("精通孔", "直司", Integer.toString((int) gpD)); attr = "gpD"; holeType = "直司"; } break; case "底板": String proc = MapUtils.getString(propMap, "proc"); if (hole.ncName.matches("胚头孔")){ holeDM = NcTypeTl.getHoleDm("胚头孔", "胚头孔", "M"+sfD); attr = "sfD"; holeType = "胚头孔"; }else if (StringUtils.isNotBlank(proc) && proc.equals("overDb")){ // 底板识别有“底板加工避空”位置按图字样 // 底板需增加此坐标加工:加工参数:通孔 直径按:34 } break; case “面针板”: if (hole.ncName.matches(“带托通孔”)){ holeDM = NcTypeTl.getHoleDm(“带托通孔”, “回针孔”, Integer.toString((int)rpD)); attr = “rpD”; holeType = “回针孔”; } break; default: break; } Map<String, Object> map = new HashMap<>(); map.put(“attr”, attr); map.put(“holeType”, holeType); map.put(“holeDM”, holeDM); return map; }优化代码 在java8的情况下
09-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

asmcvc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值