diff --git a/src/main/java/com/ai/da/python/PythonService.java b/src/main/java/com/ai/da/python/PythonService.java index 4ba86ce3..caad71b1 100644 --- a/src/main/java/com/ai/da/python/PythonService.java +++ b/src/main/java/com/ai/da/python/PythonService.java @@ -2912,72 +2912,71 @@ public class PythonService { private PrintToPython resolveDesignSinglePrint(List printObject, String partialDesign) { PrintToPython printToPython = new PrintToPython(); -// DesignPythonItemPrint printSingle = new DesignPythonItemPrint(); DesignPythonItemPrint printOverall = new DesignPythonItemPrint(); -// printToPython.setSingle(printSingle); printToPython.setOverall(printOverall); printToPython.setPartial(StringUtil.isNullOrEmpty(partialDesign) ? null : partialDesign); if (Objects.isNull(printObject) || printObject.isEmpty()) { return printToPython; } - // 没有印花时的参数设置 -// if (printObject.getIfSingle().equals(Boolean.FALSE) && CollectionUtil.isEmpty(printObject.getPrints())) { -// return new DesignPythonItemPrint(new ArrayList<>(), false); -// } -// DesignPythonItemPrint print = CopyUtil.copyObject(printObject, DesignPythonItemPrint.class); + // 1. 先对 printObject 按 priority 排序(升序) + List sortedPrints = printObject.stream() + .sorted(Comparator.comparingInt(DesignSinglePrint::getPriority)) + .toList(); - int size = printObject.size(); - // 占位符填充数组 - List> locationS = new ArrayList<>(Collections.nCopies(size, null)); - List> scaleS = new ArrayList<>(Collections.nCopies(size, null)); - List angleS = new ArrayList<>(Collections.nCopies(size, null)); - ArrayList pathsS = new ArrayList<>(Collections.nCopies(size, null)); + // 2. 分别收集单印和非单印的数据 + List singlePrints = sortedPrints.stream() + .filter(DesignSinglePrint::getIfSingle) + .toList(); - List> locationO = new ArrayList<>(Collections.nCopies(size, null)); - List> scaleO = new ArrayList<>(Collections.nCopies(size, null)); - List angleO = new ArrayList<>(Collections.nCopies(size, null)); - ArrayList pathsO = new ArrayList<>(Collections.nCopies(size, null)); + List overallPrints = sortedPrints.stream() + .filter(p -> !p.getIfSingle()) + .toList(); - // 设置印花的位置、大小、旋转角度 - // 优先级越大,越靠近顶层,在传输给python的数组中,越靠前 -// List prints = printObject.getPrints(); - printObject.forEach(p -> { - p.getLocation().set(0, p.getLocation().get(0)); - p.getLocation().set(1, p.getLocation().get(1)); - Integer priority = p.getPriority(); - setUriToMinioPath(p); - // todo 下标越界问题 - if (p.getIfSingle()) { - locationS.set(priority - 1, p.getLocation()); - scaleS.set(priority - 1, p.getScale()); - angleS.set(priority - 1, p.getAngle()); - pathsS.set(priority - 1, p.getMinIOPath()); - } else { - locationO.set(priority - 1, p.getLocation()); - scaleO.set(priority - 1, p.getScale()); - angleO.set(priority - 1, p.getAngle()); - pathsO.set(priority - 1, p.getMinIOPath()); + // 3. 处理单印数据 + if (!singlePrints.isEmpty()) { + List> locationS = new ArrayList<>(); + List> scaleS = new ArrayList<>(); + List angleS = new ArrayList<>(); + List pathsS = new ArrayList<>(); + + for (DesignSinglePrint p : singlePrints) { + setUriToMinioPath(p); + locationS.add(p.getLocation()); + scaleS.add(p.getScale()); + angleS.add(p.getAngle()); + pathsS.add(p.getMinIOPath()); } -// log.info("本次print打点locations###{}###fileVO{}", p.getLocation(), JSON.toJSONString(fileVO)); - }); - /*locationS.removeAll(Collections.singleton(null)); - scaleS.removeAll(Collections.singleton(null)); - angleS.removeAll(Collections.singleton(null)); - pathsS.removeAll(Collections.singleton(null)); - printSingle.setLocation(locationS); - printSingle.setPrint_scale_list(scaleS); - printSingle.setPrint_angle_list(angleS); - printSingle.setPrint_path_list(pathsS);*/ - locationO.removeAll(Collections.singleton(null)); - scaleO.removeAll(Collections.singleton(null)); - angleO.removeAll(Collections.singleton(null)); - pathsO.removeAll(Collections.singleton(null)); - printOverall.setLocation(locationO); - printOverall.setPrint_scale_list(scaleO); - printOverall.setPrint_angle_list(angleO); - printOverall.setPrint_path_list(pathsO); + // 注意:如果 printOverall 中需要设置单印数据,请在这里添加相应的 setter + // 根据您的原始代码,似乎只设置了 overall(非单印)的数据 + // 如果需要设置单印,请取消下面的注释并添加对应的字段 + // printOverall.setSingleLocation(locationS); + // printOverall.setSingleScale(scaleS); + // printOverall.setSingleAngle(angleS); + // printOverall.setSinglePath(pathsS); + } + + // 4. 处理非单印数据(整体印花) + if (!overallPrints.isEmpty()) { + List> locationO = new ArrayList<>(); + List> scaleO = new ArrayList<>(); + List angleO = new ArrayList<>(); + List pathsO = new ArrayList<>(); + + for (DesignSinglePrint p : overallPrints) { + setUriToMinioPath(p); + locationO.add(p.getLocation()); + scaleO.add(p.getScale()); + angleO.add(p.getAngle()); + pathsO.add(p.getMinIOPath()); + } + + printOverall.setLocation(locationO); + printOverall.setPrint_scale_list(scaleO); + printOverall.setPrint_angle_list(angleO); + printOverall.setPrint_path_list(pathsO); + } return printToPython; }