Commit 7aa1ecceeb72cee43e03e23bf42def158b7816cb

Authored by owen
1 parent 6fbb7d6d

统计:Review修改

Showing 20 changed files with 143 additions and 79 deletions
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/controller/admin/member/MemberStatisticsController.java
... ... @@ -77,8 +77,7 @@ public class MemberStatisticsController {
77 77 }
78 78  
79 79 // TODO 芋艿:已经 review
80   - // TODO @疯狂:要不 get 前缀去掉,和下面的 list 接口保持一致
81   - @GetMapping("/get-area-statistics-list")
  80 + @GetMapping("/area-statistics-list")
82 81 @Operation(summary = "按照省份,获得会员统计列表")
83 82 @PreAuthorize("@ss.hasPermission('statistics:member:query')")
84 83 public CommonResult<List<MemberAreaStatisticsRespVO>> getMemberAreaStatisticsList() {
... ... @@ -86,8 +85,7 @@ public class MemberStatisticsController {
86 85 }
87 86  
88 87 // TODO 芋艿:已经 review
89   - // TODO @疯狂:要不 get 前缀去掉,和下面的 list 接口保持一致
90   - @GetMapping("/get-sex-statistics-list")
  88 + @GetMapping("/sex-statistics-list")
91 89 @Operation(summary = "按照性别,获得会员统计列表")
92 90 @PreAuthorize("@ss.hasPermission('statistics:member:query')")
93 91 public CommonResult<List<MemberSexStatisticsRespVO>> getMemberSexStatisticsList() {
... ... @@ -95,12 +93,11 @@ public class MemberStatisticsController {
95 93 }
96 94  
97 95 // TODO 芋艿:已经 review
98   - // TODO @疯狂:要不 get 前缀去掉,和下面的 list 接口保持一致
99   - @GetMapping("/get-terminal-statistics-list")
  96 + @GetMapping("/terminal-statistics-list")
100 97 @Operation(summary = "按照终端,获得会员统计列表")
101 98 @PreAuthorize("@ss.hasPermission('statistics:member:query')")
102 99 public CommonResult<List<MemberTerminalStatisticsRespVO>> getMemberTerminalStatisticsList() {
103   - return success(memberStatisticsService.getRegisterTerminalStatisticsList());
  100 + return success(memberStatisticsService.getMemberTerminalStatisticsList());
104 101 }
105 102  
106 103 @GetMapping("/user-count-comparison")
... ...
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/controller/admin/member/vo/MemberCountRespVO.java
... ... @@ -10,8 +10,7 @@ public class MemberCountRespVO {
10 10 @Schema(description = "用户访问量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
11 11 private Integer visitUserCount;
12 12  
13   - // TODO @疯狂:要不改成 registerUserCount,注册
14   - @Schema(description = "新增用户数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
15   - private Integer createUserCount;
  13 + @Schema(description = "注册用户数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  14 + private Integer registerUserCount;
16 15  
17 16 }
... ...
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/controller/admin/pay/PayStatisticsController.java
1 1 package cn.iocoder.yudao.module.statistics.controller.admin.pay;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  4 +import cn.iocoder.yudao.module.statistics.controller.admin.pay.vo.PaySummaryRespVO;
  5 +import cn.iocoder.yudao.module.statistics.convert.pay.PayStatisticsConvert;
4 6 import cn.iocoder.yudao.module.statistics.service.pay.PayWalletStatisticsService;
5 7 import io.swagger.v3.oas.annotations.Operation;
6 8 import io.swagger.v3.oas.annotations.tags.Tag;
... ... @@ -24,11 +26,11 @@ public class PayStatisticsController {
24 26 @Resource
25 27 private PayWalletStatisticsService payWalletStatisticsService;
26 28  
27   - // TODO @疯狂:要不搞成 PaySummary?只是目前只有 rechargePrice 充值金额?
28   - @GetMapping("/wallet-recharge-price")
  29 + @GetMapping("/summary")
29 30 @Operation(summary = "获取充值金额")
30   - public CommonResult<Integer> getWalletRechargePrice() {
31   - return success(payWalletStatisticsService.getRechargePriceSummary());
  31 + public CommonResult<PaySummaryRespVO> getWalletRechargePrice() {
  32 + Integer rechargePrice = payWalletStatisticsService.getRechargePriceSummary();
  33 + return success(PayStatisticsConvert.INSTANCE.convert(rechargePrice));
32 34 }
33 35  
34 36 }
... ...
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/controller/admin/pay/vo/PaySummaryRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.statistics.controller.admin.pay.vo;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.Data;
  5 +
  6 +@Schema(description = "管理后台 - 支付统计 Response VO")
  7 +@Data
  8 +public class PaySummaryRespVO {
  9 +
  10 + @Schema(description = "充值金额,单位分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  11 + private Integer rechargePrice;
  12 +
  13 +}
... ...
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/controller/admin/trade/TradeStatisticsController.java
... ... @@ -14,6 +14,8 @@ import cn.iocoder.yudao.module.statistics.service.trade.TradeStatisticsService;
14 14 import cn.iocoder.yudao.module.statistics.service.trade.bo.TradeSummaryRespBO;
15 15 import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleStatusEnum;
16 16 import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum;
  17 +import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryTypeEnum;
  18 +import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;
17 19 import io.swagger.v3.oas.annotations.Operation;
18 20 import io.swagger.v3.oas.annotations.tags.Tag;
19 21 import lombok.extern.slf4j.Slf4j;
... ... @@ -104,11 +106,15 @@ public class TradeStatisticsController {
104 106 @PreAuthorize("@ss.hasPermission('statistics:trade:query')")
105 107 public CommonResult<TradeOrderCountRespVO> getOrderCount() {
106 108 // 订单统计
107   - TradeOrderCountRespVO vo = tradeOrderStatisticsService.getOrderCount();
  109 + Long undeliveredCount = tradeOrderStatisticsService.getCountByStatusAndDeliveryType(
  110 + TradeOrderStatusEnum.UNDELIVERED.getStatus(), DeliveryTypeEnum.EXPRESS.getType());
  111 + Long pickUpCount = tradeOrderStatisticsService.getCountByStatusAndDeliveryType(
  112 + TradeOrderStatusEnum.DELIVERED.getStatus(), DeliveryTypeEnum.PICK_UP.getType());
108 113 // 售后统计
109   - vo.setAfterSaleApply(afterSaleStatisticsService.getCountByStatus(AfterSaleStatusEnum.APPLY))
110   - .setAuditingWithdraw(brokerageStatisticsService.getWithdrawCountByStatus(BrokerageWithdrawStatusEnum.AUDITING));
111   - return success(vo);
  114 + Long afterSaleApplyCount = afterSaleStatisticsService.getCountByStatus(AfterSaleStatusEnum.APPLY);
  115 + Long auditingWithdrawCount = brokerageStatisticsService.getWithdrawCountByStatus(BrokerageWithdrawStatusEnum.AUDITING);
  116 + // 拼接返回
  117 + return success(TradeStatisticsConvert.INSTANCE.convert(undeliveredCount, pickUpCount, afterSaleApplyCount, auditingWithdrawCount));
112 118 }
113 119  
114 120 // TODO 芋艿:已经 review
... ...
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/controller/admin/trade/vo/TradeTrendSummaryExcelVO.java
... ... @@ -40,5 +40,5 @@ public class TradeTrendSummaryExcelVO {
40 40 private Integer brokerageSettlementPrice;
41 41  
42 42 @ExcelProperty(value = "商品退款金额", converter = MoneyConvert.class)
43   - private Integer orderRefundPrice;
  43 + private Integer afterSaleRefundPrice;
44 44 }
... ...
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/controller/admin/trade/vo/TradeTrendSummaryRespVO.java
... ... @@ -26,7 +26,7 @@ public class TradeTrendSummaryRespVO {
26 26 private Integer orderWalletPayPrice;
27 27  
28 28 @Schema(description = "订单退款金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
29   - private Integer orderRefundPrice;
  29 + private Integer afterSaleRefundPrice;
30 30  
31 31 @Schema(description = "支付佣金金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
32 32 private Integer brokerageSettlementPrice;
... ...
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/convert/member/MemberStatisticsConvert.java
... ... @@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberAnaly
9 9 import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberAnalyseRespVO;
10 10 import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberAreaStatisticsRespVO;
11 11 import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberSummaryRespVO;
  12 +import cn.iocoder.yudao.module.statistics.service.member.bo.MemberAreaStatisticsRespBO;
12 13 import cn.iocoder.yudao.module.statistics.service.pay.bo.RechargeSummaryRespBO;
13 14 import org.mapstruct.Mapper;
14 15 import org.mapstruct.factory.Mappers;
... ... @@ -29,10 +30,10 @@ public interface MemberStatisticsConvert {
29 30  
30 31 default List<MemberAreaStatisticsRespVO> convertList(List<Area> areaList,
31 32 Map<Integer, Integer> userCountMap,
32   - Map<Integer, MemberAreaStatisticsRespVO> orderMap) {
  33 + Map<Integer, MemberAreaStatisticsRespBO> orderMap) {
33 34 return CollectionUtils.convertList(areaList, area -> {
34   - MemberAreaStatisticsRespVO orderVo = Optional.ofNullable(orderMap.get(area.getId()))
35   - .orElseGet(MemberAreaStatisticsRespVO::new);
  35 + MemberAreaStatisticsRespBO orderVo = Optional.ofNullable(orderMap.get(area.getId()))
  36 + .orElseGet(MemberAreaStatisticsRespBO::new);
36 37 return new MemberAreaStatisticsRespVO()
37 38 .setAreaId(area.getId()).setAreaName(area.getName())
38 39 .setUserCount(MapUtil.getInt(userCountMap, area.getId(), 0))
... ...
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/convert/pay/PayStatisticsConvert.java 0 → 100644
  1 +package cn.iocoder.yudao.module.statistics.convert.pay;
  2 +
  3 +import cn.iocoder.yudao.module.statistics.controller.admin.pay.vo.PaySummaryRespVO;
  4 +import org.mapstruct.Mapper;
  5 +import org.mapstruct.factory.Mappers;
  6 +
  7 +/**
  8 + * 支付统计 Convert
  9 + *
  10 + * @author owen
  11 + */
  12 +@Mapper
  13 +public interface PayStatisticsConvert {
  14 +
  15 + PayStatisticsConvert INSTANCE = Mappers.getMapper(PayStatisticsConvert.class);
  16 +
  17 + PaySummaryRespVO convert(Integer rechargePrice);
  18 +
  19 +}
... ...
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/convert/trade/TradeStatisticsConvert.java
1 1 package cn.iocoder.yudao.module.statistics.convert.trade;
2 2  
3 3 import cn.iocoder.yudao.module.statistics.controller.admin.common.vo.DataComparisonRespVO;
  4 +import cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeOrderCountRespVO;
4 5 import cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeSummaryRespVO;
5 6 import cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeTrendSummaryExcelVO;
6 7 import cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeTrendSummaryRespVO;
... ... @@ -9,7 +10,9 @@ import cn.iocoder.yudao.module.statistics.service.trade.bo.AfterSaleSummaryRespB
9 10 import cn.iocoder.yudao.module.statistics.service.trade.bo.TradeOrderSummaryRespBO;
10 11 import cn.iocoder.yudao.module.statistics.service.trade.bo.TradeSummaryRespBO;
11 12 import cn.iocoder.yudao.module.statistics.service.trade.bo.WalletSummaryRespBO;
  13 +import org.mapstruct.IterableMapping;
12 14 import org.mapstruct.Mapper;
  15 +import org.mapstruct.Named;
13 16 import org.mapstruct.factory.Mappers;
14 17  
15 18 import java.time.LocalDateTime;
... ... @@ -50,21 +53,22 @@ public interface TradeStatisticsConvert {
50 53 AfterSaleSummaryRespBO afterSaleSummary, Integer brokerageSettlementPrice,
51 54 WalletSummaryRespBO walletSummary);
52 55  
  56 + @IterableMapping(qualifiedByName = "convert")
53 57 List<TradeTrendSummaryRespVO> convertList(List<TradeStatisticsDO> list);
54 58  
55   - // TODO @疯狂:要不要搞个默认的 convertA 方法,然后这个 convert 去调用 convertA,特殊字段再去 set?
  59 + TradeTrendSummaryRespVO convertA(TradeStatisticsDO tradeStatistics);
  60 +
  61 + @Named("convert")
56 62 default TradeTrendSummaryRespVO convert(TradeStatisticsDO tradeStatistics) {
57   - return new TradeTrendSummaryRespVO()
  63 + TradeTrendSummaryRespVO vo = convertA(tradeStatistics);
  64 + return vo
58 65 .setDate(tradeStatistics.getTime().toLocalDate())
59 66 // 营业额 = 商品支付金额 + 充值金额
60 67 .setTurnoverPrice(tradeStatistics.getOrderPayPrice() + tradeStatistics.getRechargePayPrice())
61   - .setOrderPayPrice(tradeStatistics.getOrderPayPrice())
62   - .setRechargePrice(tradeStatistics.getRechargePayPrice())
63 68 // 支出金额 = 余额支付金额 + 支付佣金金额 + 商品退款金额
64   - .setExpensePrice(tradeStatistics.getOrderWalletPayPrice() + tradeStatistics.getBrokerageSettlementPrice() + tradeStatistics.getAfterSaleRefundPrice())
65   - .setOrderWalletPayPrice(tradeStatistics.getOrderWalletPayPrice())
66   - .setBrokerageSettlementPrice(tradeStatistics.getBrokerageSettlementPrice())
67   - .setOrderRefundPrice(tradeStatistics.getAfterSaleRefundPrice());
  69 + .setExpensePrice(tradeStatistics.getOrderWalletPayPrice() + tradeStatistics.getBrokerageSettlementPrice() + tradeStatistics.getAfterSaleRefundPrice());
68 70 }
69 71  
  72 + TradeOrderCountRespVO convert(Long undelivered, Long pickUp, Long afterSaleApply, Long auditingWithdraw);
  73 +
70 74 }
... ...
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/dal/mysql/trade/TradeOrderStatisticsMapper.java
1 1 package cn.iocoder.yudao.module.statistics.dal.mysql.trade;
2 2  
3 3 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
4   -import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberAreaStatisticsRespVO;
5 4 import cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeOrderSummaryRespVO;
6 5 import cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeOrderTrendRespVO;
7 6 import cn.iocoder.yudao.module.statistics.dal.dataobject.trade.TradeStatisticsDO;
  7 +import cn.iocoder.yudao.module.statistics.service.member.bo.MemberAreaStatisticsRespBO;
8 8 import org.apache.ibatis.annotations.Mapper;
9 9 import org.apache.ibatis.annotations.Param;
10 10  
... ... @@ -20,7 +20,7 @@ import java.util.List;
20 20 public interface TradeOrderStatisticsMapper extends BaseMapperX<TradeStatisticsDO> {
21 21  
22 22 // TODO 芋艿:已经 review
23   - List<MemberAreaStatisticsRespVO> selectSummaryListByAreaId();
  23 + List<MemberAreaStatisticsRespBO> selectSummaryListByAreaId();
24 24  
25 25 // TODO 芋艿:已经 review
26 26 Integer selectCountByCreateTimeBetween(@Param("beginTime") LocalDateTime beginTime,
... ... @@ -65,10 +65,7 @@ public interface TradeOrderStatisticsMapper extends BaseMapperX&lt;TradeStatisticsD
65 65 @Param("endTime") LocalDateTime endTime);
66 66  
67 67 // TODO @芋艿:已经 review
68   - Long selectCountByStatus(@Param("status") Integer status);
69   -
70   - // TODO 芋艿:已经 review
71   - Long selectCountByStatusAndPickUpStoreIdIsNotNull(@Param("status") Integer status);
  68 + Long selectCountByStatusAndDeliveryType(@Param("status") Integer status, @Param("deliveryType") Integer deliveryType);
72 69  
73 70 // TODO 芋艿:已经 review
74 71 TradeOrderSummaryRespVO selectPaySummaryByStatusAndPayTimeBetween(@Param("status") Integer status,
... ...
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/job/trade/TradeStatisticsJob.java
... ... @@ -30,8 +30,10 @@ public class TradeStatisticsJob implements JobHandler {
30 30 @Override
31 31 @TenantJob
32 32 public String execute(String param) {
33   - // TODO @疯狂:要搞个默认的 1 哈;
34   - if (NumberUtil.isInteger(param)) {
  33 + // 默认 昨日
  34 + if (StrUtil.isBlank(param)) {
  35 + param = "1";
  36 + } else if (!NumberUtil.isInteger(param)) {
35 37 throw new RuntimeException("交易统计任务的参数只能为是正整数");
36 38 }
37 39 Integer days = Convert.toInt(param, 0);
... ...
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/member/MemberStatisticsService.java
... ... @@ -48,13 +48,12 @@ public interface MemberStatisticsService {
48 48 */
49 49 List<MemberSexStatisticsRespVO> getMemberSexStatisticsList();
50 50  
51   - // TODO @疯狂:这个要不要使用 getMemberTerminalStatisticsList;保持统一?
52 51 /**
53 52 * 按照终端,获得会员统计列表
54 53 *
55 54 * @return 会员统计列表
56 55 */
57   - List<MemberTerminalStatisticsRespVO> getRegisterTerminalStatisticsList();
  56 + List<MemberTerminalStatisticsRespVO> getMemberTerminalStatisticsList();
58 57  
59 58 // TODO 芋艿:已经 review
60 59 /**
... ...
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/member/MemberStatisticsServiceImpl.java
... ... @@ -65,10 +65,10 @@ public class MemberStatisticsServiceImpl implements MemberStatisticsService {
65 65 vo -> AreaUtils.getParentIdByType(vo.getAreaId(), AreaTypeEnum.PROVINCE),
66 66 MemberAreaStatisticsRespBO::getUserCount, Integer::sum);
67 67 // 统计订单
68   - Map<Integer, MemberAreaStatisticsRespVO> orderMap = convertMap(tradeOrderStatisticsService.getSummaryListByAreaId(),
69   - vo -> AreaUtils.getParentIdByType(vo.getAreaId(), AreaTypeEnum.PROVINCE),
70   - vo -> vo,
71   - (a, b) -> new MemberAreaStatisticsRespVO()
  68 + Map<Integer, MemberAreaStatisticsRespBO> orderMap = convertMap(tradeOrderStatisticsService.getSummaryListByAreaId(),
  69 + bo -> AreaUtils.getParentIdByType(bo.getAreaId(), AreaTypeEnum.PROVINCE),
  70 + bo -> bo,
  71 + (a, b) -> new MemberAreaStatisticsRespBO()
72 72 .setOrderCreateUserCount(a.getOrderCreateUserCount() + b.getOrderCreateUserCount())
73 73 .setOrderPayUserCount(a.getOrderPayUserCount() + b.getOrderPayUserCount())
74 74 .setOrderPayPrice(a.getOrderPayPrice() + b.getOrderPayPrice()));
... ... @@ -105,7 +105,7 @@ public class MemberStatisticsServiceImpl implements MemberStatisticsService {
105 105 }
106 106  
107 107 @Override
108   - public List<MemberTerminalStatisticsRespVO> getRegisterTerminalStatisticsList() {
  108 + public List<MemberTerminalStatisticsRespVO> getMemberTerminalStatisticsList() {
109 109 return memberStatisticsMapper.selectSummaryListByRegisterTerminal();
110 110 }
111 111  
... ... @@ -129,7 +129,7 @@ public class MemberStatisticsServiceImpl implements MemberStatisticsService {
129 129  
130 130 private MemberCountRespVO getUserCount(LocalDateTime beginTime, LocalDateTime endTime) {
131 131 return new MemberCountRespVO()
132   - .setCreateUserCount(memberStatisticsMapper.selectUserCount(beginTime, endTime))
  132 + .setRegisterUserCount(memberStatisticsMapper.selectUserCount(beginTime, endTime))
133 133 .setVisitUserCount(apiAccessLogStatisticsService.getIpCount(UserTypeEnum.MEMBER.getValue(), beginTime, endTime));
134 134 }
135 135  
... ...
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/trade/TradeOrderStatisticsService.java
1 1 package cn.iocoder.yudao.module.statistics.service.trade;
2 2  
3 3 import cn.iocoder.yudao.module.statistics.controller.admin.common.vo.DataComparisonRespVO;
4   -import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberAreaStatisticsRespVO;
5 4 import cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.*;
  5 +import cn.iocoder.yudao.module.statistics.service.member.bo.MemberAreaStatisticsRespBO;
6 6 import cn.iocoder.yudao.module.statistics.service.trade.bo.TradeOrderSummaryRespBO;
7 7  
8 8 import java.time.LocalDateTime;
... ... @@ -30,7 +30,7 @@ public interface TradeOrderStatisticsService {
30 30 *
31 31 * @return 订单统计结果
32 32 */
33   - List<MemberAreaStatisticsRespVO> getSummaryListByAreaId();
  33 + List<MemberAreaStatisticsRespBO> getSummaryListByAreaId();
34 34  
35 35 // TODO 芋艿:已经 review
36 36 /**
... ... @@ -62,13 +62,12 @@ public interface TradeOrderStatisticsService {
62 62 */
63 63 Integer getOrderPayPrice(LocalDateTime beginTime, LocalDateTime endTime);
64 64  
65   - // TODO 芋艿:已经 review
66 65 /**
67   - * 获得交易订单数量
  66 + * 根据订单状态、物流类型,获得交易订单数量
68 67 *
69 68 * @return 订单数量
70 69 */
71   - TradeOrderCountRespVO getOrderCount();
  70 + Long getCountByStatusAndDeliveryType(Integer status, Integer deliveryType);
72 71  
73 72 // TODO 芋艿:已经 review
74 73 /**
... ...
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/trade/TradeOrderStatisticsServiceImpl.java
... ... @@ -2,15 +2,15 @@ package cn.iocoder.yudao.module.statistics.service.trade;
2 2  
3 3 import cn.hutool.core.collection.CollUtil;
4 4 import cn.hutool.core.date.LocalDateTimeUtil;
5   -import cn.hutool.core.util.ObjUtil;
6 5 import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum;
7 6 import cn.iocoder.yudao.module.statistics.controller.admin.common.vo.DataComparisonRespVO;
8   -import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberAreaStatisticsRespVO;
9   -import cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.*;
  7 +import cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeOrderSummaryRespVO;
  8 +import cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeOrderTrendReqVO;
  9 +import cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeOrderTrendRespVO;
10 10 import cn.iocoder.yudao.module.statistics.dal.mysql.trade.TradeOrderStatisticsMapper;
11 11 import cn.iocoder.yudao.module.statistics.enums.TimeRangeTypeEnum;
  12 +import cn.iocoder.yudao.module.statistics.service.member.bo.MemberAreaStatisticsRespBO;
12 13 import cn.iocoder.yudao.module.statistics.service.trade.bo.TradeOrderSummaryRespBO;
13   -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;
14 14 import org.springframework.stereotype.Service;
15 15 import org.springframework.validation.annotation.Validated;
16 16  
... ... @@ -42,7 +42,7 @@ public class TradeOrderStatisticsServiceImpl implements TradeOrderStatisticsServ
42 42 }
43 43  
44 44 @Override
45   - public List<MemberAreaStatisticsRespVO> getSummaryListByAreaId() {
  45 + public List<MemberAreaStatisticsRespBO> getSummaryListByAreaId() {
46 46 return tradeOrderStatisticsMapper.selectSummaryListByAreaId();
47 47 }
48 48  
... ... @@ -62,13 +62,8 @@ public class TradeOrderStatisticsServiceImpl implements TradeOrderStatisticsServ
62 62 }
63 63  
64 64 @Override
65   - public TradeOrderCountRespVO getOrderCount() {
66   - // TODO 疯狂:这个可以根据 status + delivertyType 来过滤呀;ps:是不是搞个 service 方法,交给上层去聚合,这样 TradeOrderCountRespVO 可以更明确返回,不用搞 bo;
67   - Long undeliveredCount = tradeOrderStatisticsMapper.selectCountByStatus(TradeOrderStatusEnum.UNDELIVERED.getStatus());
68   - Long pickUpCount = tradeOrderStatisticsMapper.selectCountByStatusAndPickUpStoreIdIsNotNull(TradeOrderStatusEnum.DELIVERED.getStatus());
69   - return new TradeOrderCountRespVO()
70   - .setPickUp(ObjUtil.defaultIfNull(pickUpCount, 0L))
71   - .setUndelivered(ObjUtil.defaultIfNull(undeliveredCount, 0L));
  65 + public Long getCountByStatusAndDeliveryType(Integer status, Integer deliveryType) {
  66 + return tradeOrderStatisticsMapper.selectCountByStatusAndDeliveryType(status, deliveryType);
72 67 }
73 68  
74 69 @Override
... ...
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/trade/TradeStatisticsServiceImpl.java
... ... @@ -83,9 +83,7 @@ public class TradeStatisticsServiceImpl implements TradeStatisticsService {
83 83 @Override
84 84 public String statisticsTrade(Integer days) {
85 85 LocalDateTime today = LocalDateTime.now();
86   - // TODO @疯狂:不用并发哈,因为租户可能会丢;然后,一般串行就好,对性能没绝对的要求哈,天数也不会多;
87 86 return IntStream.rangeClosed(1, days)
88   - .parallel()
89 87 .mapToObj(day -> statisticsTrade(today.minusDays(day)))
90 88 .sorted()
91 89 .collect(Collectors.joining("\n"));
... ... @@ -131,7 +129,7 @@ public class TradeStatisticsServiceImpl implements TradeStatisticsService {
131 129 entity = TradeStatisticsConvert.INSTANCE.convert(date, orderSummary, afterSaleSummary, brokerageSettlementPrice,
132 130 walletSummary);
133 131 tradeStatisticsMapper.insert(entity);
134   - // TODO @疯狂:这里是不是也要把日期带上?类似 108 那边
  132 + // TODO @疯狂:这里是不是也要把日期带上?类似 108 那边; 110 已经带上了
135 133 return stopWatch.prettyPrint();
136 134 }
137 135  
... ...
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/trade/bo/MemberAreaStatisticsRespBO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.statistics.service.trade.bo;
  2 +
  3 +import lombok.Data;
  4 +
  5 +/**
  6 + * 会员地区统计 Response BO
  7 + *
  8 + * @author owen
  9 + */
  10 +@Data
  11 +public class MemberAreaStatisticsRespBO {
  12 +
  13 + /**
  14 + * 省份编号
  15 + */
  16 + private Integer areaId;
  17 + /**
  18 + * 省份名称
  19 + */
  20 + private String areaName;
  21 +
  22 + /**
  23 + * 会员数量
  24 + */
  25 + private Integer userCount;
  26 +
  27 + /**
  28 + * 下单的会员数量
  29 + */
  30 + private Integer orderCreateUserCount;
  31 + /**
  32 + * 支付订单的会员数量
  33 + */
  34 + private Integer orderPayUserCount;
  35 +
  36 + /**
  37 + * 订单支付金额,单位:分
  38 + */
  39 + private Integer orderPayPrice;
  40 +
  41 +}
... ...
yudao-module-mall/yudao-module-statistics-biz/src/main/resources/mapper/trade/TradeOrderStatisticsMapper.xml
... ... @@ -2,9 +2,8 @@
2 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 3 <mapper namespace="cn.iocoder.yudao.module.statistics.dal.mysql.trade.TradeOrderStatisticsMapper">
4 4  
5   - <!-- TODO @疯狂:是返回不是的 MemberAreaStatisticsRespBO 哈 -->
6 5 <select id="selectSummaryListByAreaId"
7   - resultType="cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberAreaStatisticsRespVO">
  6 + resultType="cn.iocoder.yudao.module.statistics.service.member.bo.MemberAreaStatisticsRespBO">
8 7 SELECT receiver_area_id AS areaId,
9 8 (SELECT COUNT(DISTINCT s.user_id)
10 9 FROM trade_order AS s
... ... @@ -86,18 +85,11 @@
86 85 GROUP BY date
87 86 </select>
88 87  
89   - <select id="selectCountByStatus" resultType="java.lang.Long">
  88 + <select id="selectCountByStatusAndDeliveryType" resultType="java.lang.Long">
90 89 SELECT COUNT(1)
91 90 FROM trade_order
92 91 WHERE status = #{status}
93   - AND deleted = FALSE
94   - </select>
95   -
96   - <select id="selectCountByStatusAndPickUpStoreIdIsNotNull" resultType="java.lang.Long">
97   - SELECT COUNT(1)
98   - FROM trade_order
99   - WHERE status = #{status}
100   - AND pick_up_store_id IS NOT NULL
  92 + ANd delivery_type = #{deliveryType}
101 93 AND deleted = FALSE
102 94 </select>
103 95  
... ...
yudao-module-mall/yudao-module-statistics-biz/src/main/resources/mapper/trade/TradeStatisticsMapper.xml
... ... @@ -22,7 +22,7 @@
22 22 SUM(order_wallet_pay_price + brokerage_settlement_price + after_sale_refund_price) AS expensePrice,
23 23 SUM(order_wallet_pay_price) AS orderWalletPayPrice,
24 24 SUM(brokerage_settlement_price) AS brokerageSettlementPrice,
25   - SUM(after_sale_refund_price) AS orderRefundPrice
  25 + SUM(after_sale_refund_price) AS afterSaleRefundPrice
26 26 FROM trade_statistics
27 27 WHERE time BETWEEN #{beginTime} AND #{endTime}
28 28 AND deleted = FALSE
... ...