java.util.stream
java.util.stream
@ApiOperation(value = "查详情") @GetMapping("/getDetail") public R getDetail(PurchaseOrderQueryDto query) { // PurchaseOrderDto orderDto = purchaseOrderService.getDetail(query); // orderDto.setTotalQuantity(orderDto.getDetails().size()); List<PurchaseOrderDto> dtos = purchaseOrderService.selectList(query); if (CollectionUtils.isEmpty(dtos)) { return R.fail("该订单不存在,请检查"); } PurchaseOrderDto orderDto = dtos.get(0); List<String> purchaseOrderNos = dtos.stream().map(PurchaseOrderDto::getPurchaseOrderNo).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(purchaseOrderNos) && purchaseOrderNos.size() == 1) { List<PurchaseOrderSkuDto> skuDtos = purchaseOrderService.selectSkuList(purchaseOrderNos); // orderDto.setDetails(skuDtos); // orderDto.setTotalQuantity(skuDtos.size()); //每单按照sku 聚合 Map<String, List<PurchaseOrderSkuDto>> map = skuDtos.stream().filter(skuDto -> orderDto.getPurchaseOrderNo().equals(skuDto.getPurchaseOrderNo())) .collect(Collectors.groupingBy(PurchaseOrderSkuDto::getPurchaseSkuCode)); List<PurchaseOrderSkuDto> details = new ArrayList<>(); map.forEach((key, value) -> { PurchaseOrderSkuDto dto = new PurchaseOrderSkuDto(); BeanUtils.copyProperties(value.get(0), dto); BigDecimal quantitySum = value.stream().filter(t -> null != t.getQuantity()) .map(PurchaseOrderSkuDto::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal saleQtySum = value.stream().filter(t -> null != t.getSaleQty()) .map(PurchaseOrderSkuDto::getSaleQty).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal receiveQtySum = value.stream().filter(t -> null != t.getReceiveQty()) .map(PurchaseOrderSkuDto::getReceiveQty).reduce(BigDecimal.ZERO, BigDecimal::add); dto.setQuantity(quantitySum); dto.setSaleQty(saleQtySum); dto.setReceiveQty(receiveQtySum); details.add(dto); }); orderDto.setDetails(details); orderDto.setTotalQuantity(details.size()); } return R.ok(orderDto); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2013-07-16 游标