diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPartShippingGroupService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPartShippingGroupService.java index c3bd9f4..09b9b3b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPartShippingGroupService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPartShippingGroupService.java @@ -177,44 +177,26 @@ public class MesPartShippingGroupService implements IMesPartShippingGroupService Map> detailByPidMap = shippingOrderManagementDetailList .stream().collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getPid)); log.info("doMesMesShippingOrderManagementPrint-查询发运单明细信息-detailByPidMap-" + detailByPidMap.size()); - /** - * 查询零件发运组明细信息 - */ - Set partShippingGroupIdSet = pullingOrderInfos.stream() - .map(MesShippingOrderManagement::getPartShippingGroupId).collect(Collectors.toSet()); - liJIaPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); - DdlPreparedPack.getInPackList(new ArrayList<>(partShippingGroupIdSet), "pid", liJIaPackBean); - List partShippingGroupDetailList = - mesPartShippingGroupDetailRepository.findByHqlWhere(liJIaPackBean); - log.info("doMesMesShippingOrderManagementPrint-查询零件发运组明细信息-" + partShippingGroupDetailList.size()); - Map> listMap = partShippingGroupDetailList.stream().collect( - Collectors.groupingBy(MesPartShippingGroupDetail::getPid)); - log.info("doMesMesShippingOrderManagementPrint-查询零件发运组明细信息-listMap-" + listMap.size()); //遍历处理每个发运单主表 for (MesShippingOrderManagement pullingOrderInfo : pullingOrderInfos) { //一张实体发运单包含三部分信息(顶部的通用数据、中部的第一份表格数据,底部的第二份表格数据) //取出当前发运单的明细信息 List details = detailByPidMap.get(pullingOrderInfo.getId()); if (!CollectionUtils.isEmpty(details)) { - //取出当前发运单主表对应的发运组明细信息 - List shippingGroupDetailList = listMap.get(pullingOrderInfo.getPartShippingGroupId()); - if (!CollectionUtils.isEmpty(shippingGroupDetailList)) { - //将发运组明细按照 seq_no 分组 - //seq_no 的个数 / 2 代表会生成实体发运单的份数(一个 seq_no 就是一个表格,一份实体表单上可以放两个表格) - Map> seqNoMap = - shippingGroupDetailList.stream().collect(Collectors.groupingBy(MesPartShippingGroupDetail::getSeqNo)); - List seqNoList = new ArrayList<>(seqNoMap.keySet()); - log.info("doMesMesShippingOrderManagementPrint-查询零件发运组明细信息-seqNoList-" + seqNoList.size()); - //将seq_no两两分组 - List> physicalOrderList = IntStream.range(0, seqNoList.size()) - .filter(i -> i % 2 == 0) - .mapToObj(i -> seqNoList.subList(i, Math.min(i + 2, seqNoList.size()))) - .collect(Collectors.toList()); - for (List list : physicalOrderList) { - //生成一张实体发运单 - log.info("doMesMesShippingOrderManagementPrint-生成一张实体发运单-list-" + list); - mainDataList.add(createPhysicalOrder(pullingOrderInfo, list, seqNoMap, details)); - } + //将发运单明细按照 assyCode 分组 + //assyCode 的个数 / 2 代表会生成实体发运单的份数(一个 assyCode 就是一个表格,一份实体表单上可以放两个表格) + Map> detailByAssyCodeMap = + details.stream().collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getAssyCode)); + List assyCodeList = new ArrayList<>(detailByAssyCodeMap.keySet()); + //将 assyCode 两两分组 + List> physicalOrderList = IntStream.range(0, assyCodeList.size()) + .filter(i -> i % 2 == 0) + .mapToObj(i -> assyCodeList.subList(i, Math.min(i + 2, assyCodeList.size()))) + .collect(Collectors.toList()); + for (List list : physicalOrderList) { + //生成一张实体发运单 + log.info("doMesMesShippingOrderManagementPrint-生成一张实体发运单-list-" + list); + mainDataList.add(createPhysicalOrder(pullingOrderInfo, list, detailByAssyCodeMap, details)); } } pullingOrderInfo.setPrintCount(StringUtil.isEmpty(pullingOrderInfo.getPrintCount())? 1 : pullingOrderInfo.getPrintCount()+1); @@ -267,8 +249,8 @@ public class MesPartShippingGroupService implements IMesPartShippingGroupService } private MesShippingOrderManagementModelForLiJia createPhysicalOrder(MesShippingOrderManagement pullingOrderInfo, - List seqNoList, - Map> seqNoMap, + List assyCodeList, + Map> detailByAssyCodeMap, List details) { MesShippingOrderManagementModelForLiJia model = new MesShippingOrderManagementModelForLiJia(); //顶部的通用数据赋值 @@ -278,31 +260,25 @@ public class MesPartShippingGroupService implements IMesPartShippingGroupService model.setDocumentNumber("YFVCQ-MS06-02-01"); log.info("doMesMesShippingOrderManagementPrint-顶部的通用数据赋值" + model); //中部表结构赋值 - model.setDetailModelsOne(createDetailList(seqNoList.get(0), seqNoMap, details, pullingOrderInfo.getRackNo())); + model.setDetailModelsOne(createDetailList(assyCodeList.get(0), detailByAssyCodeMap, details, pullingOrderInfo.getRackNo())); log.info("doMesMesShippingOrderManagementPrint-中部表结构赋值" + model); //底部表结构赋值 - model.setDetailModelsTwo(createDetailList(seqNoList.get(1), seqNoMap, details, pullingOrderInfo.getRackNo())); + model.setDetailModelsTwo(createDetailList(assyCodeList.get(1), detailByAssyCodeMap, details, pullingOrderInfo.getRackNo())); log.info("doMesMesShippingOrderManagementPrint-底部表结构赋值" + model); return model; } private List createDetailList( - Integer seqNo, Map> seqNoMap, + String assyCode, Map> detailByAssyCodeMap, List details, String rackNo) { List dataList = new ArrayList<>(); - //取出发运组明细数据 - List partShippingGroupDetailList = seqNoMap.get(seqNo); - Set custPartNoSet = partShippingGroupDetailList.stream() - .map(MesPartShippingGroupDetail::getCustPartNo).collect(Collectors.toSet()); - log.info("doMesMesShippingOrderManagementPrint-createDetailList-partShippingGroupDetailList" + partShippingGroupDetailList.size()); //取出符合条件的发运单明细数据 - List nowDetailList = details.stream().filter(t -> - custPartNoSet.contains(t.getCustPartNo())).collect(Collectors.toList()); + List nowDetailList = detailByAssyCodeMap.get(assyCode); log.info("doMesMesShippingOrderManagementPrint-createDetailList-nowDetailList" + nowDetailList.size()); if (!CollectionUtils.isEmpty(nowDetailList)) { - //并按照 cust_info_seq 升序排列 + //并按照 logic_seq 升序排列 List collect = nowDetailList.stream().sorted( - Comparator.comparing(MesShippingOrderManagementDetail::getCustInfoSeq)).collect(Collectors.toList()); + Comparator.comparing(MesShippingOrderManagementDetail::getLogicSeq)).collect(Collectors.toList()); Integer number = 1; for (MesShippingOrderManagementDetail mesShippingOrderManagementDetail : collect) { MesShippingOrderManagementDetailModelForLiJia detailModel = new MesShippingOrderManagementDetailModelForLiJia();