| | |
| | | BigDecimal totalQty = BigDecimal.ZERO; |
| | | BigDecimal totalArea = BigDecimal.ZERO; |
| | | |
| | | Map<Long, Map<String, List<SalesLedgerProduct>>> groupedData = new LinkedHashMap<>(); |
| | | Map<String, List<SalesLedgerProduct>> groupedData = new LinkedHashMap<>(); |
| | | Map<String, Set<String>> groupOrderNos = new LinkedHashMap<>(); |
| | | for (SalesLedgerProduct p : allProducts) { |
| | | Long ledgerId = p.getSalesLedgerId(); |
| | | String productCategory = StringUtils.defaultString(p.getProductCategory(), ""); |
| | | String specificationModel = StringUtils.defaultString(p.getSpecificationModel(), ""); |
| | | String groupKey = productCategory + "||" + specificationModel; |
| | | groupedData.computeIfAbsent(ledgerId, k -> new LinkedHashMap<>()) |
| | | .computeIfAbsent(groupKey, k -> new ArrayList<>()) |
| | | .add(p); |
| | | groupedData.computeIfAbsent(groupKey, k -> new ArrayList<>()).add(p); |
| | | |
| | | SalesLedger ledger = ledgerMap.get(p.getSalesLedgerId()); |
| | | String orderNo = ledger != null ? StringUtils.defaultString(ledger.getSalesContractNo(), "") : ""; |
| | | if (StringUtils.isNotEmpty(orderNo)) { |
| | | groupOrderNos.computeIfAbsent(groupKey, k -> new LinkedHashSet<>()).add(orderNo); |
| | | } |
| | | } |
| | | |
| | | for (Map.Entry<Long, Map<String, List<SalesLedgerProduct>>> ledgerEntry : groupedData.entrySet()) { |
| | | SalesLedger ledger = ledgerMap.get(ledgerEntry.getKey()); |
| | | String orderNo = ledger != null ? ledger.getSalesContractNo() : ""; |
| | | |
| | | for (Map.Entry<String, List<SalesLedgerProduct>> productEntry : ledgerEntry.getValue().entrySet()) { |
| | | for (Map.Entry<String, List<SalesLedgerProduct>> productEntry : groupedData.entrySet()) { |
| | | String key = productEntry.getKey(); |
| | | String[] parts = key.split("\\|\\|", -1); |
| | | String productName = parts.length > 0 ? parts[0] : ""; |
| | | String specificationModel = parts.length > 1 ? parts[1] : ""; |
| | | List<SalesLedgerProduct> products = productEntry.getValue(); |
| | | |
| | | SalesInvoicesDto.InvoiceOrderGroupDto group = new SalesInvoicesDto.InvoiceOrderGroupDto(); |
| | | group.setSalesContractNo(orderNo); |
| | | Set<String> orderNos = groupOrderNos.getOrDefault(key, Collections.emptySet()); |
| | | group.setSalesContractNo(String.join(",", orderNos)); |
| | | group.setProductName(productName); |
| | | List<SalesInvoicesDto.InvoiceItemDto> itemDtos = new ArrayList<>(); |
| | | |
| | | Map<String, SalesInvoicesDto.InvoiceItemDto> mergedItems = new LinkedHashMap<>(); |
| | | BigDecimal groupQty = BigDecimal.ZERO; |
| | | BigDecimal groupArea = BigDecimal.ZERO; |
| | | |
| | | for (SalesLedgerProduct p : products) { |
| | | SalesInvoicesDto.InvoiceItemDto item = new SalesInvoicesDto.InvoiceItemDto(); |
| | | item.setFloorCode(p.getFloorCode()); |
| | | item.setWidthHeight((p.getWidth() != null ? p.getWidth().stripTrailingZeros().toPlainString() : "0") + |
| | | " * " + (p.getHeight() != null ? p.getHeight().stripTrailingZeros().toPlainString() : "0")); |
| | | item.setSpecificationModel(p.getSpecificationModel()); |
| | | item.setQuantity(p.getQuantity()); |
| | | String widthHeight = (p.getWidth() != null ? p.getWidth().stripTrailingZeros().toPlainString() : "0") + |
| | | " * " + (p.getHeight() != null ? p.getHeight().stripTrailingZeros().toPlainString() : "0"); |
| | | String floorCode = StringUtils.defaultString(p.getFloorCode(), ""); |
| | | String remark = StringUtils.defaultString(p.getRemark(), ""); |
| | | String processReq = StringUtils.defaultString(p.getProcessRequirement(), ""); |
| | | String itemKey = floorCode + "||" + widthHeight + "||" + remark + "||" + processReq; |
| | | |
| | | BigDecimal qty = p.getQuantity() != null ? p.getQuantity() : BigDecimal.ZERO; |
| | | |
| | | // 面积 |
| | | BigDecimal area = p.getSettleTotalArea() != null ? p.getSettleTotalArea() : p.getActualTotalArea(); |
| | | if (area == null && p.getWidth() != null && p.getHeight() != null && p.getQuantity() != null) { |
| | | area = p.getWidth().multiply(p.getHeight()).multiply(p.getQuantity()).divide(new BigDecimal(1000000), 2, RoundingMode.HALF_UP); |
| | | } |
| | | item.setArea(area); |
| | | item.setRemark(p.getRemark()); |
| | | item.setProcessRequirement(p.getProcessRequirement()); |
| | | area = area != null ? area : BigDecimal.ZERO; |
| | | |
| | | itemDtos.add(item); |
| | | groupQty = groupQty.add(p.getQuantity() != null ? p.getQuantity() : BigDecimal.ZERO); |
| | | groupArea = groupArea.add(area != null ? area : BigDecimal.ZERO); |
| | | SalesInvoicesDto.InvoiceItemDto item = mergedItems.get(itemKey); |
| | | if (item == null) { |
| | | item = new SalesInvoicesDto.InvoiceItemDto(); |
| | | item.setFloorCode(floorCode); |
| | | item.setWidthHeight(widthHeight); |
| | | item.setSpecificationModel(p.getSpecificationModel()); |
| | | item.setQuantity(qty); |
| | | item.setArea(area); |
| | | item.setRemark(remark); |
| | | item.setProcessRequirement(processReq); |
| | | mergedItems.put(itemKey, item); |
| | | } else { |
| | | item.setQuantity((item.getQuantity() != null ? item.getQuantity() : BigDecimal.ZERO).add(qty)); |
| | | item.setArea((item.getArea() != null ? item.getArea() : BigDecimal.ZERO).add(area)); |
| | | } |
| | | |
| | | group.setItems(itemDtos); |
| | | groupQty = groupQty.add(qty); |
| | | groupArea = groupArea.add(area); |
| | | } |
| | | |
| | | group.setItems(new ArrayList<>(mergedItems.values())); |
| | | group.setGroupTotalQuantity(groupQty); |
| | | group.setGroupTotalArea(groupArea.setScale(2, RoundingMode.HALF_UP)); |
| | | groups.add(group); |
| | | |
| | | totalQty = totalQty.add(groupQty); |
| | | totalArea = totalArea.add(groupArea); |
| | | } |
| | | } |
| | | dto.setGroups(groups); |
| | | dto.setTotalQuantity(totalQty); |
| | |
| | | SalesLabelDto dto = new SalesLabelDto(); |
| | | dto.setCustomerName(salesLedger.getCustomerName()); |
| | | dto.setSalesContractNo(salesLedger.getSalesContractNo()); |
| | | dto.setProductName(p.getProductCategory()); |
| | | dto.setProductName(p.getSpecificationModel()); |
| | | |
| | | // 宽*高=数量 |
| | | String specification = (p.getWidth() != null ? p.getWidth().stripTrailingZeros().toPlainString() : "0") + "*" + |