|
@@ -231,7 +231,7 @@ public class StatisticsDataDayServiceImpl implements StatisticsDataDayService {
|
|
|
Long goodsId = goods.getId();
|
|
Long goodsId = goods.getId();
|
|
|
streamingAccount.setAccountName(goods.getTitle());
|
|
streamingAccount.setAccountName(goods.getTitle());
|
|
|
streamingAccount.setGoodsId(goodsId);
|
|
streamingAccount.setGoodsId(goodsId);
|
|
|
- streamingAccountDataStatistics(goodsId, streamingAccount, streamingAccountDataSave, yesZeroDate, thisZeroDate);
|
|
|
|
|
|
|
+ streamingAccountDataStatistics(goodsId, goods.getIsSkuStatistics(), streamingAccount, streamingAccountDataSave, yesZeroDate, thisZeroDate);
|
|
|
});
|
|
});
|
|
|
if (today) {
|
|
if (today) {
|
|
|
return streamingAccountDataSave;
|
|
return streamingAccountDataSave;
|
|
@@ -295,10 +295,10 @@ public class StatisticsDataDayServiceImpl implements StatisticsDataDayService {
|
|
|
* @param yesZeroDate 昨日零时
|
|
* @param yesZeroDate 昨日零时
|
|
|
* @param thisZeroDate 今日零时
|
|
* @param thisZeroDate 今日零时
|
|
|
*/
|
|
*/
|
|
|
- private void streamingAccountDataStatistics(Long goodsId, StreamingAccountData streamingAccountData, List<StreamingAccountData> dataSave, Date yesZeroDate, Date thisZeroDate) {
|
|
|
|
|
|
|
+ private void streamingAccountDataStatistics(Long goodsId, Boolean isSkuStatistics, StreamingAccountData streamingAccountData, List<StreamingAccountData> dataSave, Date yesZeroDate, Date thisZeroDate) {
|
|
|
//规格
|
|
//规格
|
|
|
- List<GoodsDonSku> list = Optional.ofNullable(goodsDonSkuService.list(Wrappers.lambdaQuery(GoodsDonSku.class).eq(GoodsDonSku::getGoodsId, goodsId).select(GoodsDonSku::getId))).orElse(new ArrayList<>());
|
|
|
|
|
- List<Long> skuIds = list.stream().map(GoodsDonSku::getId).collect(Collectors.toList());
|
|
|
|
|
|
|
+ List<GoodsDonSku> skuList = Optional.ofNullable(goodsDonSkuService.list(Wrappers.lambdaQuery(GoodsDonSku.class).eq(GoodsDonSku::getGoodsId, goodsId).select(GoodsDonSku::getId, GoodsDonSku::getIsMirror, GoodsDonSku::getNum))).orElse(new ArrayList<>());
|
|
|
|
|
+ List<Long> skuIds = skuList.stream().map(GoodsDonSku::getId).collect(Collectors.toList());
|
|
|
if (CollUtil.isNotEmpty(skuIds)) {
|
|
if (CollUtil.isNotEmpty(skuIds)) {
|
|
|
List<OrderDon> orderDons = Optional.ofNullable(accountService.getNoAppleOneOrderDon(skuIds, yesZeroDate, thisZeroDate, Constant.noOrderStatus)).orElse(new ArrayList<>());
|
|
List<OrderDon> orderDons = Optional.ofNullable(accountService.getNoAppleOneOrderDon(skuIds, yesZeroDate, thisZeroDate, Constant.noOrderStatus)).orElse(new ArrayList<>());
|
|
|
//用户数
|
|
//用户数
|
|
@@ -320,10 +320,112 @@ public class StatisticsDataDayServiceImpl implements StatisticsDataDayService {
|
|
|
streamingAccountData.setNumOfDistributeOrder(distributeOrders.size());
|
|
streamingAccountData.setNumOfDistributeOrder(distributeOrders.size());
|
|
|
Optional<BigDecimal> distributeMoney = distributeOrders.stream().map(OrderDon::getMoney).reduce(BigDecimal::add);
|
|
Optional<BigDecimal> distributeMoney = distributeOrders.stream().map(OrderDon::getMoney).reduce(BigDecimal::add);
|
|
|
streamingAccountData.setDistributeOrderMoney(distributeMoney.isPresent() ? distributeMoney.get() : BigDecimal.ZERO);
|
|
streamingAccountData.setDistributeOrderMoney(distributeMoney.isPresent() ? distributeMoney.get() : BigDecimal.ZERO);
|
|
|
|
|
+
|
|
|
|
|
+ //开启规格详情数据统计
|
|
|
|
|
+ if (isSkuStatistics) {
|
|
|
|
|
+ //镜像规格
|
|
|
|
|
+ List<Long> mirrorSkuIds = new ArrayList<>();
|
|
|
|
|
+ //独立规格
|
|
|
|
|
+ List<Long> singleSkuIds = new ArrayList<>();
|
|
|
|
|
+ //共享规格
|
|
|
|
|
+ List<Long> moreSkuIds = new ArrayList<>();
|
|
|
|
|
+ for (GoodsDonSku sku : skuList) {
|
|
|
|
|
+ if (sku.getIsMirror()) {
|
|
|
|
|
+ mirrorSkuIds.add(sku.getId());
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (sku.getNum() != null && sku.getNum() == 1) {
|
|
|
|
|
+ singleSkuIds.add(sku.getId());
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (sku.getNum() != null && sku.getNum() > 1) {
|
|
|
|
|
+ moreSkuIds.add(sku.getId());
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //镜像订单
|
|
|
|
|
+ List<OrderDon> mirrorOrders = null;
|
|
|
|
|
+ if (CollUtil.isNotEmpty(mirrorSkuIds)) {
|
|
|
|
|
+ mirrorOrders = new ArrayList<>();
|
|
|
|
|
+ }
|
|
|
|
|
+ //独立订单
|
|
|
|
|
+ List<OrderDon> singleOrders = null;
|
|
|
|
|
+ if (CollUtil.isNotEmpty(singleSkuIds)) {
|
|
|
|
|
+ singleOrders = new ArrayList<>();
|
|
|
|
|
+ }
|
|
|
|
|
+ //共享订单
|
|
|
|
|
+ List<OrderDon> moreOrders = null;
|
|
|
|
|
+ if (CollUtil.isNotEmpty(moreSkuIds)) {
|
|
|
|
|
+ moreOrders = new ArrayList<>();
|
|
|
|
|
+ }
|
|
|
|
|
+ for (OrderDon orderDon : orderDons) {
|
|
|
|
|
+ if (CollUtil.isNotEmpty(mirrorSkuIds) && mirrorSkuIds.contains(orderDon.getSkuId())) {
|
|
|
|
|
+ mirrorOrders.add(orderDon);
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (CollUtil.isNotEmpty(singleSkuIds) && singleSkuIds.contains(orderDon.getSkuId())) {
|
|
|
|
|
+ singleOrders.add(orderDon);
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (CollUtil.isNotEmpty(moreSkuIds) && moreSkuIds.contains(orderDon.getSkuId())) {
|
|
|
|
|
+ moreOrders.add(orderDon);
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ List<GoodsDonSkuStatisticsData> subDataList = new ArrayList<>();
|
|
|
|
|
+ //共享订单
|
|
|
|
|
+ if (CollUtil.isNotEmpty(moreOrders)) {
|
|
|
|
|
+ subDataList.add(handleSubTypeOrdersData(goodsId, 0, moreOrders));
|
|
|
|
|
+ }
|
|
|
|
|
+ //独立订单
|
|
|
|
|
+ if (CollUtil.isNotEmpty(singleOrders)) {
|
|
|
|
|
+ subDataList.add(handleSubTypeOrdersData(goodsId, 1, singleOrders));
|
|
|
|
|
+ }
|
|
|
|
|
+ //镜像订单
|
|
|
|
|
+ if (CollUtil.isNotEmpty(mirrorOrders)) {
|
|
|
|
|
+ subDataList.add(handleSubTypeOrdersData(goodsId, 2, mirrorOrders));
|
|
|
|
|
+ }
|
|
|
|
|
+ //规格详情
|
|
|
|
|
+ streamingAccountData.setSubDataList(subDataList);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
dataSave.add(streamingAccountData);
|
|
dataSave.add(streamingAccountData);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private GoodsDonSkuStatisticsData handleSubTypeOrdersData(Long goodsId, Integer type, List<OrderDon> orderDons) {
|
|
|
|
|
+ GoodsDonSkuStatisticsData skuStatisticsData = new GoodsDonSkuStatisticsData();
|
|
|
|
|
+ skuStatisticsData.setGoodsId(goodsId);
|
|
|
|
|
+ skuStatisticsData.setType(type);
|
|
|
|
|
+ //用户数
|
|
|
|
|
+ skuStatisticsData.setNumOfUser(orderDons.stream().map(OrderDon::getUserId).collect(Collectors.toSet()).size());
|
|
|
|
|
+ getNumOfOrderByPayType(orderDons, skuStatisticsData);
|
|
|
|
|
+
|
|
|
|
|
+ //兑换码订单数
|
|
|
|
|
+ List<OrderDon> subExCodeOrders = Optional.ofNullable(orderDons.stream().filter(order -> order.getType() == OrderDon.Type.EX_CODE).collect(Collectors.toList())).orElse(new ArrayList<>());
|
|
|
|
|
+ skuStatisticsData.setNumOfCodeOrder(subExCodeOrders.size());
|
|
|
|
|
+ skuStatisticsData.setNumOfOrder(orderDons.size());
|
|
|
|
|
+
|
|
|
|
|
+ Optional<BigDecimal> reduce = orderDons.stream().map(OrderDon::getMoney).reduce(BigDecimal::add);
|
|
|
|
|
+ BigDecimal totalMoney = BigDecimal.valueOf(0);
|
|
|
|
|
+ if (reduce.isPresent()) {
|
|
|
|
|
+ totalMoney = reduce.get();
|
|
|
|
|
+ }
|
|
|
|
|
+ //金额
|
|
|
|
|
+ skuStatisticsData.setMoney(totalMoney);
|
|
|
|
|
+ //退款金额
|
|
|
|
|
+ Optional<BigDecimal> refundMoney = orderDons.stream().filter(od -> od.getStatus() == OrderDon.Status.refund).map(re -> Optional.ofNullable(re.getRefundMoney()).orElse(BigDecimal.ZERO)).reduce(BigDecimal::add);
|
|
|
|
|
+ if (refundMoney.isPresent()) {
|
|
|
|
|
+ skuStatisticsData.setRefundMoney(refundMoney.get());
|
|
|
|
|
+ }
|
|
|
|
|
+ //分销订单
|
|
|
|
|
+ List<OrderDon> distributeOrders = Optional.ofNullable(orderDons.stream().filter(ord -> ord.getIsDistribute()).collect(Collectors.toList())).orElse(new ArrayList<>());
|
|
|
|
|
+ skuStatisticsData.setNumOfDistributeOrder(distributeOrders.size());
|
|
|
|
|
+ Optional<BigDecimal> distributeMoney = distributeOrders.stream().map(OrderDon::getMoney).reduce(BigDecimal::add);
|
|
|
|
|
+ skuStatisticsData.setDistributeOrderMoney(distributeMoney.isPresent() ? distributeMoney.get() : BigDecimal.ZERO);
|
|
|
|
|
+ return skuStatisticsData;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 根据不同支付条件统计对应月、季、年订单
|
|
* 根据不同支付条件统计对应月、季、年订单
|
|
|
*/
|
|
*/
|