master:今日统计返回数据调优;
parent
638dea116f
commit
5e318cba99
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue