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 b5f3b56a2..8f370d82c 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 @@ -39,8 +39,20 @@ public class StoreTodaySaleSummaryVO { public static class STSSProdSaleVO { @ApiModelProperty(value = "货号") private String prodArtNum; - - + @ApiModelProperty(value = "颜色") + private String colorName; + @ApiModelProperty(value = "颜色销售数量") + private Integer colorSaleQuantity; + @ApiModelProperty(value = "颜色销售金额") + private BigDecimal colorSaleAmount; + @ApiModelProperty(value = "颜色退货数量") + private Integer colorRefundQuantity; + @ApiModelProperty(value = "颜色退货金额") + private BigDecimal colorRefundAmount; + @ApiModelProperty(value = "颜色总的销售数量") + private Integer colorTotalQuantity; + @ApiModelProperty(value = "颜色总销售金额") + private BigDecimal colorTotalAmount; @ApiModelProperty(value = "销售金额") private BigDecimal saleAmount; @ApiModelProperty(value = "退货金额") 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 4af263ce6..5e548dc1f 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 @@ -42,8 +42,20 @@ public class StoreTodaySaleSummaryDTO { public static class STSSProdSaleDTO { @ApiModelProperty(value = "货号") private String prodArtNum; - - + @ApiModelProperty(value = "颜色") + private String colorName; + @ApiModelProperty(value = "颜色销售数量") + private Integer colorSaleQuantity; + @ApiModelProperty(value = "颜色销售金额") + private BigDecimal colorSaleAmount; + @ApiModelProperty(value = "颜色退货数量") + private Integer colorRefundQuantity; + @ApiModelProperty(value = "颜色退货金额") + private BigDecimal colorRefundAmount; + @ApiModelProperty(value = "颜色总的销售数量") + private Integer colorTotalQuantity; + @ApiModelProperty(value = "颜色总销售金额") + private BigDecimal colorTotalAmount; @ApiModelProperty(value = "销售金额") private BigDecimal saleAmount; @ApiModelProperty(value = "退货金额") 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 3fd0c9166..1f4e7fb45 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 @@ -101,7 +101,7 @@ public class StoreSaleDetailServiceImpl implements IStoreSaleDetailService { Integer refundQuantity = saleDetailList.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%"; + String refundRate = saleQuantity > 0 ? String.format("%.2f%%", Math.abs(refundQuantity) * 100.0 / saleQuantity) : "0.00%"; // 采购客户数量 Long cusQuantity = saleDetailList.stream().map(x -> ObjectUtils.defaultIfNull(x.getStoreCusId(), 0)).distinct().count(); return new StoreTodaySaleSummaryDTO().setSaleAmount(saleAmount).setRefundAmount(refundAmount).setSaleQuantity(saleQuantity) @@ -140,21 +140,19 @@ public class StoreSaleDetailServiceImpl implements IStoreSaleDetailService { return retCusSaleList; } + /** + * 商品今日统计数据 + * + * @param saleDetailList 今日销售数据 + * @return List + */ private List getProdSaleSummary(List saleDetailList) { // 货号维度 销量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); @@ -165,12 +163,26 @@ public class StoreSaleDetailServiceImpl implements IStoreSaleDetailService { 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)); + Map> colorSaleMap = artNumColorSaleGroupMap.get(prodArtNum); + colorSaleMap.forEach((colorName, colorSaleList) -> { + BigDecimal colorSaleAmount = colorSaleList.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 colorRefundAmount = colorSaleList.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 colorSaleQuantity = colorSaleList.stream().filter(x -> Objects.equals(x.getSaleType(), SaleType.GENERAL_SALE.getValue())) + .map(x -> ObjectUtils.defaultIfNull(x.getQuantity(), 0)).reduce(0, Integer::sum); + Integer colorRefundQuantity = colorSaleList.stream().filter(x -> Objects.equals(x.getSaleType(), SaleType.SALE_REFUND.getValue())) + .map(x -> ObjectUtils.defaultIfNull(x.getQuantity(), 0)).reduce(0, Integer::sum); + retProdSaleList.add(new StoreTodaySaleSummaryDTO.STSSProdSaleDTO().setProdArtNum(prodArtNum).setColorName(colorName) + .setColorSaleAmount(colorSaleAmount).setColorRefundAmount(colorRefundAmount).setColorSaleQuantity(colorSaleQuantity) + .setColorRefundQuantity(colorRefundQuantity).setColorTotalQuantity(colorSaleQuantity + colorRefundQuantity) + .setColorTotalAmount(colorSaleAmount.add(colorRefundAmount)).setSaleAmount(saleAmount).setRefundAmount(refundAmount) + .setSaleQuantity(saleQuantity).setRefundQuantity(refundQuantity).setRefundRate(refundRate)); + }); }); - - // 按照总的销售金额 由高到低 排 - retProdSaleList.sort(Comparator.comparing(StoreTodaySaleSummaryDTO.STSSProdSaleDTO::getSaleAmount).reversed()); + // 先按货号排,再按照颜色的销售金额由高到低排列 + retProdSaleList.sort(Comparator.comparing(StoreTodaySaleSummaryDTO.STSSProdSaleDTO::getProdArtNum) + .thenComparing(StoreTodaySaleSummaryDTO.STSSProdSaleDTO::getColorSaleAmount).reversed()); return retProdSaleList; }