master:今日统计返回数据调优;

pull/1121/head
liujiang 2025-11-17 12:52:03 +08:00
parent 638dea116f
commit 5e318cba99
3 changed files with 68 additions and 8 deletions

View File

@ -37,19 +37,42 @@ public class StoreTodaySaleSummaryVO {
@Data @Data
@ApiModel @ApiModel
public static class STSSProdSaleVO { 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 @Data
@ApiModel @ApiModel
public static class STSSCusSaleVO { public static class STSSCusSaleVO {
@ApiModelProperty(value = "客户名称")
private Integer cusQuantity; 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;
} }
} }

View File

@ -38,10 +38,22 @@ public class StoreTodaySaleSummaryDTO {
@Data @Data
@ApiModel @ApiModel
@Accessors(chain = true)
public static class STSSProdSaleDTO { 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 @Data

View File

@ -130,22 +130,47 @@ public class StoreSaleDetailServiceImpl implements IStoreSaleDetailService {
Integer cusRefundQuantity = cusSaleList.stream().filter(x -> Objects.equals(x.getSaleType(), SaleType.SALE_REFUND.getValue())) 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); .map(x -> ObjectUtils.defaultIfNull(x.getQuantity(), 0)).reduce(0, Integer::sum);
Integer cusTotalQuantity = cusSaleQuantity + cusRefundQuantity; 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) retCusSaleList.add(new StoreTodaySaleSummaryDTO.STSSCusSaleDTO().setStoreCusName(cusName).setSaleAmount(cusSaleAmount)
.setRefundAmount(cusRefundAmount).setTotalAmount(cusTotalAmount).setSaleQuantity(cusSaleQuantity) .setRefundAmount(cusRefundAmount).setTotalAmount(cusTotalAmount).setSaleQuantity(cusSaleQuantity)
.setRefundQuantity(cusRefundQuantity).setTotalQuantity(cusTotalQuantity).setRefundRate(refundRate)); .setRefundQuantity(cusRefundQuantity).setTotalQuantity(cusTotalQuantity).setRefundRate(refundRate));
}); });
// 按照总的销售金额 由高到低 排
retCusSaleList.sort(Comparator.comparing(StoreTodaySaleSummaryDTO.STSSCusSaleDTO::getTotalAmount).reversed());
return retCusSaleList; return retCusSaleList;
} }
private List<StoreTodaySaleSummaryDTO.STSSProdSaleDTO> getProdSaleSummary(List<StoreSaleDetail> saleDetailList) { private List<StoreTodaySaleSummaryDTO.STSSProdSaleDTO> getProdSaleSummary(List<StoreSaleDetail> saleDetailList) {
List<StoreTodaySaleSummaryDTO.STSSProdSaleDTO> retProdSaleList = new ArrayList<>();
// 货号维度 销量map // 货号维度 销量map
Map<String, List<StoreSaleDetail>> artNumSaleGroupMap = saleDetailList.stream().collect(Collectors.groupingBy(StoreSaleDetail::getProdArtNum)); Map<String, List<StoreSaleDetail>> artNumSaleGroupMap = saleDetailList.stream().collect(Collectors.groupingBy(StoreSaleDetail::getProdArtNum));
// 货号 颜色 维度销量map // 货号 颜色 维度销量map
Map<String, Map<String, List<StoreSaleDetail>>> artNumColorSaleGroupMap = saleDetailList.stream().collect(Collectors Map<String, Map<String, List<StoreSaleDetail>>> artNumColorSaleGroupMap = saleDetailList.stream().collect(Collectors
.groupingBy(StoreSaleDetail::getProdArtNum, Collectors.groupingBy(StoreSaleDetail::getColorName))); .groupingBy(StoreSaleDetail::getProdArtNum, Collectors.groupingBy(StoreSaleDetail::getColorName)));
// TODO 颜色的数据如何返回
// TODO 颜色的数据如何返回
// TODO 颜色的数据如何返回
List<StoreTodaySaleSummaryDTO.STSSProdSaleDTO> 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; return retProdSaleList;
} }