diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeSaleDetail/StoreTodaySaleSummaryVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeSaleDetail/StoreTodaySaleSummaryVO.java index 59e41020d..b5f3b56a2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeSaleDetail/StoreTodaySaleSummaryVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeSaleDetail/StoreTodaySaleSummaryVO.java @@ -37,19 +37,42 @@ public class StoreTodaySaleSummaryVO { @Data @ApiModel public static class STSSProdSaleVO { + @ApiModelProperty(value = "货号") + private String prodArtNum; - private Integer cusQuantity; + @ApiModelProperty(value = "销售金额") + private BigDecimal saleAmount; + @ApiModelProperty(value = "退货金额") + private BigDecimal refundAmount; + @ApiModelProperty(value = "销售数量") + private Integer saleQuantity; + @ApiModelProperty(value = "退货数量") + private Integer refundQuantity; + @ApiModelProperty(value = "退货率") + private String refundRate; } @Data @ApiModel public static class STSSCusSaleVO { - - private Integer cusQuantity; - + @ApiModelProperty(value = "客户名称") + private String storeCusName; + @ApiModelProperty(value = "销售金额") + private BigDecimal saleAmount; + @ApiModelProperty(value = "退货金额") + private BigDecimal refundAmount; + @ApiModelProperty(value = "销售数量") + private Integer saleQuantity; + @ApiModelProperty(value = "退货数量") + private Integer refundQuantity; + @ApiModelProperty(value = "合计销售金额") + private BigDecimal totalAmount; + @ApiModelProperty(value = "合计销售数量") + private Integer totalQuantity; + @ApiModelProperty(value = "退货率") + private String refundRate; } - } diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeSaleDetail/StoreTodaySaleSummaryDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeSaleDetail/StoreTodaySaleSummaryDTO.java index ca6d9fdf9..4af263ce6 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/storeSaleDetail/StoreTodaySaleSummaryDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeSaleDetail/StoreTodaySaleSummaryDTO.java @@ -38,10 +38,22 @@ public class StoreTodaySaleSummaryDTO { @Data @ApiModel + @Accessors(chain = true) public static class STSSProdSaleDTO { + @ApiModelProperty(value = "货号") + private String prodArtNum; - private Integer cusQuantity; + @ApiModelProperty(value = "销售金额") + private BigDecimal saleAmount; + @ApiModelProperty(value = "退货金额") + private BigDecimal refundAmount; + @ApiModelProperty(value = "销售数量") + private Integer saleQuantity; + @ApiModelProperty(value = "退货数量") + private Integer refundQuantity; + @ApiModelProperty(value = "退货率") + private String refundRate; } @Data diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreSaleDetailServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreSaleDetailServiceImpl.java index 4ee444f8f..3fd0c9166 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreSaleDetailServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreSaleDetailServiceImpl.java @@ -130,22 +130,47 @@ public class StoreSaleDetailServiceImpl implements IStoreSaleDetailService { Integer cusRefundQuantity = cusSaleList.stream().filter(x -> Objects.equals(x.getSaleType(), SaleType.SALE_REFUND.getValue())) .map(x -> ObjectUtils.defaultIfNull(x.getQuantity(), 0)).reduce(0, Integer::sum); Integer cusTotalQuantity = cusSaleQuantity + cusRefundQuantity; - String refundRate = cusSaleQuantity > 0 ? String.format("%.2f", Math.abs(cusRefundQuantity) * 100.0 / cusSaleQuantity) : "0.00%"; + String refundRate = cusSaleQuantity > 0 ? String.format("%.2f%%", Math.abs(cusRefundQuantity) * 100.0 / cusSaleQuantity) : "0.00%"; retCusSaleList.add(new StoreTodaySaleSummaryDTO.STSSCusSaleDTO().setStoreCusName(cusName).setSaleAmount(cusSaleAmount) .setRefundAmount(cusRefundAmount).setTotalAmount(cusTotalAmount).setSaleQuantity(cusSaleQuantity) .setRefundQuantity(cusRefundQuantity).setTotalQuantity(cusTotalQuantity).setRefundRate(refundRate)); }); + // 按照总的销售金额 由高到低 排 + retCusSaleList.sort(Comparator.comparing(StoreTodaySaleSummaryDTO.STSSCusSaleDTO::getTotalAmount).reversed()); return retCusSaleList; } private List getProdSaleSummary(List saleDetailList) { - List retProdSaleList = new ArrayList<>(); // 货号维度 销量map Map> artNumSaleGroupMap = saleDetailList.stream().collect(Collectors.groupingBy(StoreSaleDetail::getProdArtNum)); // 货号 颜色 维度,销量map Map>> artNumColorSaleGroupMap = saleDetailList.stream().collect(Collectors .groupingBy(StoreSaleDetail::getProdArtNum, Collectors.groupingBy(StoreSaleDetail::getColorName))); + // TODO 颜色的数据如何返回 + // TODO 颜色的数据如何返回 + // TODO 颜色的数据如何返回 + + + + List retProdSaleList = new ArrayList<>(); + + artNumSaleGroupMap.forEach((prodArtNum, prodArtNumSaleList) -> { + BigDecimal saleAmount = prodArtNumSaleList.stream().filter(x -> Objects.equals(x.getSaleType(), SaleType.GENERAL_SALE.getValue())) + .map(x -> ObjectUtils.defaultIfNull(x.getAmount(), BigDecimal.ZERO)).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal refundAmount = prodArtNumSaleList.stream().filter(x -> Objects.equals(x.getSaleType(), SaleType.SALE_REFUND.getValue())) + .map(x -> ObjectUtils.defaultIfNull(x.getAmount(), BigDecimal.ZERO)).reduce(BigDecimal.ZERO, BigDecimal::add); + Integer saleQuantity = prodArtNumSaleList.stream().filter(x -> Objects.equals(x.getSaleType(), SaleType.GENERAL_SALE.getValue())) + .map(x -> ObjectUtils.defaultIfNull(x.getQuantity(), 0)).reduce(0, Integer::sum); + Integer refundQuantity = prodArtNumSaleList.stream().filter(x -> Objects.equals(x.getSaleType(), SaleType.SALE_REFUND.getValue())) + .map(x -> ObjectUtils.defaultIfNull(x.getQuantity(), 0)).reduce(0, Integer::sum); + String refundRate = saleQuantity > 0 ? String.format("%.2f%%", Math.abs(refundQuantity) * 100.0 / saleQuantity) : "0.00%"; + retProdSaleList.add(new StoreTodaySaleSummaryDTO.STSSProdSaleDTO().setProdArtNum(prodArtNum).setSaleAmount(saleAmount) + .setRefundAmount(refundAmount).setSaleQuantity(saleQuantity).setRefundQuantity(refundQuantity).setRefundRate(refundRate)); + }); + + // 按照总的销售金额 由高到低 排 + retProdSaleList.sort(Comparator.comparing(StoreTodaySaleSummaryDTO.STSSProdSaleDTO::getSaleAmount).reversed()); return retProdSaleList; }