Commit 4be709b815b7cdba1bff7160479ee2757b8c00fb

Authored by owen
1 parent 66cdf4ca

统计:Review修改

yudao-framework/yudao-spring-boot-starter-biz-ip/src/main/java/cn/iocoder/yudao/framework/ip/core/utils/AreaUtils.java
@@ -132,25 +132,34 @@ public class AreaUtils { @@ -132,25 +132,34 @@ public class AreaUtils {
132 return convertList(areas.values(), func, area -> type.getType().equals(area.getType())); 132 return convertList(areas.values(), func, area -> type.getType().equals(area.getType()));
133 } 133 }
134 134
135 - // TODO @疯狂:注释写下; 135 + /**
  136 + * 根据区域编号、上级区域类型,获取上级区域编号
  137 + *
  138 + * @param id 区域编号
  139 + * @param type 区域类型
  140 + * @return 上级区域编号
  141 + */
136 public static Integer getParentIdByType(Integer id, @NonNull AreaTypeEnum type) { 142 public static Integer getParentIdByType(Integer id, @NonNull AreaTypeEnum type) {
137 - // TODO @疯狂:这种不要用 while true;因为万一脏数据,可能会死循环;可以转换成 for (int i = 0; i < Byte.MAX; i++) 一般是优先层级;  
138 - do { 143 + for (int i = 0; i < Byte.MAX_VALUE; i++) {
139 Area area = AreaUtils.getArea(id); 144 Area area = AreaUtils.getArea(id);
140 if (area == null) { 145 if (area == null) {
141 return null; 146 return null;
142 } 147 }
143 148
  149 + // 匹配到
144 if (type.getType().equals(area.getType())) { 150 if (type.getType().equals(area.getType())) {
145 return area.getId(); 151 return area.getId();
146 } 152 }
147 153
  154 + // 找到根节点,返回空
148 if (area.getParent() == null || area.getParent().getId() == null) { 155 if (area.getParent() == null || area.getParent().getId() == null) {
149 return null; 156 return null;
150 } 157 }
151 158
  159 + // 继续向上查找
152 id = area.getParent().getId(); 160 id = area.getParent().getId();
153 - } while (true); 161 + }
  162 + return null;
154 } 163 }
155 164
156 } 165 }
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/convert/member/MemberStatisticsConvert.java
@@ -5,6 +5,8 @@ import cn.hutool.core.util.ObjUtil; @@ -5,6 +5,8 @@ import cn.hutool.core.util.ObjUtil;
5 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 5 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
6 import cn.iocoder.yudao.framework.ip.core.Area; 6 import cn.iocoder.yudao.framework.ip.core.Area;
7 import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberAreaStatisticsRespVO; 7 import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberAreaStatisticsRespVO;
  8 +import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberSummaryRespVO;
  9 +import cn.iocoder.yudao.module.statistics.service.pay.bo.RechargeSummaryRespBO;
8 import org.mapstruct.Mapper; 10 import org.mapstruct.Mapper;
9 import org.mapstruct.factory.Mappers; 11 import org.mapstruct.factory.Mappers;
10 12
@@ -36,4 +38,6 @@ public interface MemberStatisticsConvert { @@ -36,4 +38,6 @@ public interface MemberStatisticsConvert {
36 }); 38 });
37 } 39 }
38 40
  41 + MemberSummaryRespVO convert(RechargeSummaryRespBO rechargeSummary, Integer expensePrice, Integer userCount);
  42 +
39 } 43 }
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/dal/mysql/pay/PayWalletStatisticsMapper.java
1 package cn.iocoder.yudao.module.statistics.dal.mysql.pay; 1 package cn.iocoder.yudao.module.statistics.dal.mysql.pay;
2 2
3 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 3 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
4 -import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberSummaryRespVO;  
5 -import cn.iocoder.yudao.module.statistics.service.trade.bo.WalletSummaryRespBO;  
6 import cn.iocoder.yudao.module.statistics.dal.dataobject.trade.TradeStatisticsDO; 4 import cn.iocoder.yudao.module.statistics.dal.dataobject.trade.TradeStatisticsDO;
  5 +import cn.iocoder.yudao.module.statistics.service.pay.bo.RechargeSummaryRespBO;
  6 +import cn.iocoder.yudao.module.statistics.service.trade.bo.WalletSummaryRespBO;
7 import org.apache.ibatis.annotations.Mapper; 7 import org.apache.ibatis.annotations.Mapper;
8 import org.apache.ibatis.annotations.Param; 8 import org.apache.ibatis.annotations.Param;
9 9
@@ -29,9 +29,8 @@ public interface PayWalletStatisticsMapper extends BaseMapperX&lt;TradeStatisticsDO @@ -29,9 +29,8 @@ public interface PayWalletStatisticsMapper extends BaseMapperX&lt;TradeStatisticsDO
29 @Param("endTime") LocalDateTime endTime, 29 @Param("endTime") LocalDateTime endTime,
30 @Param("bizType") Integer bizType); 30 @Param("bizType") Integer bizType);
31 31
32 - // TODO @疯狂:是不是搞个单独的 BO 呀;  
33 - MemberSummaryRespVO selectRechargeSummaryGroupByWalletId(@Param("beginTime") LocalDateTime beginTime,  
34 - @Param("endTime") LocalDateTime endTime,  
35 - @Param("payStatus") Boolean payStatus); 32 + RechargeSummaryRespBO selectRechargeSummaryGroupByWalletId(@Param("beginTime") LocalDateTime beginTime,
  33 + @Param("endTime") LocalDateTime endTime,
  34 + @Param("payStatus") Boolean payStatus);
36 35
37 } 36 }
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/dal/mysql/trade/TradeStatisticsMapper.java
@@ -6,7 +6,6 @@ import cn.iocoder.yudao.module.statistics.dal.dataobject.trade.TradeStatisticsDO @@ -6,7 +6,6 @@ import cn.iocoder.yudao.module.statistics.dal.dataobject.trade.TradeStatisticsDO
6 import cn.iocoder.yudao.module.statistics.service.trade.bo.TradeSummaryRespBO; 6 import cn.iocoder.yudao.module.statistics.service.trade.bo.TradeSummaryRespBO;
7 import org.apache.ibatis.annotations.Mapper; 7 import org.apache.ibatis.annotations.Mapper;
8 import org.apache.ibatis.annotations.Param; 8 import org.apache.ibatis.annotations.Param;
9 -import org.apache.ibatis.annotations.Select;  
10 9
11 import java.time.LocalDateTime; 10 import java.time.LocalDateTime;
12 import java.util.List; 11 import java.util.List;
@@ -19,10 +18,6 @@ import java.util.List; @@ -19,10 +18,6 @@ import java.util.List;
19 @Mapper 18 @Mapper
20 public interface TradeStatisticsMapper extends BaseMapperX<TradeStatisticsDO> { 19 public interface TradeStatisticsMapper extends BaseMapperX<TradeStatisticsDO> {
21 20
22 - // TODO @疯狂:这个要不要也挪到 xml 里,保持统一?  
23 - @Select("SELECT IFNULL(SUM(order_create_count), 0) AS count, IFNULL(SUM(order_pay_price), 0) AS summary " +  
24 - "FROM trade_statistics " +  
25 - "WHERE time BETWEEN #{beginTime} AND #{endTime} AND deleted = FALSE")  
26 TradeSummaryRespBO selectOrderCreateCountSumAndOrderPayPriceSumByTimeBetween(@Param("beginTime") LocalDateTime beginTime, 21 TradeSummaryRespBO selectOrderCreateCountSumAndOrderPayPriceSumByTimeBetween(@Param("beginTime") LocalDateTime beginTime,
27 @Param("endTime") LocalDateTime endTime); 22 @Param("endTime") LocalDateTime endTime);
28 23
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/member/MemberStatisticsServiceImpl.java
@@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.statistics.convert.member.MemberStatisticsConvert @@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.statistics.convert.member.MemberStatisticsConvert
9 import cn.iocoder.yudao.module.statistics.dal.mysql.member.MemberStatisticsMapper; 9 import cn.iocoder.yudao.module.statistics.dal.mysql.member.MemberStatisticsMapper;
10 import cn.iocoder.yudao.module.statistics.service.infra.ApiAccessLogStatisticsService; 10 import cn.iocoder.yudao.module.statistics.service.infra.ApiAccessLogStatisticsService;
11 import cn.iocoder.yudao.module.statistics.service.pay.PayWalletStatisticsService; 11 import cn.iocoder.yudao.module.statistics.service.pay.PayWalletStatisticsService;
  12 +import cn.iocoder.yudao.module.statistics.service.pay.bo.RechargeSummaryRespBO;
12 import cn.iocoder.yudao.module.statistics.service.trade.TradeOrderStatisticsService; 13 import cn.iocoder.yudao.module.statistics.service.trade.TradeOrderStatisticsService;
13 import cn.iocoder.yudao.module.statistics.service.trade.TradeStatisticsService; 14 import cn.iocoder.yudao.module.statistics.service.trade.TradeStatisticsService;
14 import org.springframework.stereotype.Service; 15 import org.springframework.stereotype.Service;
@@ -91,20 +92,16 @@ public class MemberStatisticsServiceImpl implements MemberStatisticsService { @@ -91,20 +92,16 @@ public class MemberStatisticsServiceImpl implements MemberStatisticsService {
91 92
92 @Override 93 @Override
93 public MemberSummaryRespVO getMemberSummary() { 94 public MemberSummaryRespVO getMemberSummary() {
94 - MemberSummaryRespVO vo = payWalletStatisticsService.getUserRechargeSummary(null, null); 95 + RechargeSummaryRespBO rechargeSummary = payWalletStatisticsService.getUserRechargeSummary(null, null);
95 Integer expensePrice = tradeStatisticsService.getExpensePrice(null, null); 96 Integer expensePrice = tradeStatisticsService.getExpensePrice(null, null);
96 Integer userCount = memberStatisticsMapper.selectUserCount(null, null); 97 Integer userCount = memberStatisticsMapper.selectUserCount(null, null);
97 98
98 - if (vo == null) {  
99 - vo = new MemberSummaryRespVO().setRechargeUserCount(0).setRechargePrice(0);  
100 - }  
101 -  
102 - return vo.setUserCount(userCount).setExpensePrice(expensePrice); 99 + return MemberStatisticsConvert.INSTANCE.convert(rechargeSummary, expensePrice, userCount);
103 } 100 }
104 101
105 private MemberAnalyseComparisonRespVO getMemberAnalyseComparisonData(LocalDateTime beginTime, LocalDateTime endTime) { 102 private MemberAnalyseComparisonRespVO getMemberAnalyseComparisonData(LocalDateTime beginTime, LocalDateTime endTime) {
106 Integer rechargeUserCount = Optional.ofNullable(payWalletStatisticsService.getUserRechargeSummary(beginTime, endTime)) 103 Integer rechargeUserCount = Optional.ofNullable(payWalletStatisticsService.getUserRechargeSummary(beginTime, endTime))
107 - .map(MemberSummaryRespVO::getRechargeUserCount).orElse(0); 104 + .map(RechargeSummaryRespBO::getRechargeUserCount).orElse(0);
108 return new MemberAnalyseComparisonRespVO() 105 return new MemberAnalyseComparisonRespVO()
109 .setUserCount(memberStatisticsMapper.selectUserCount(beginTime, endTime)) 106 .setUserCount(memberStatisticsMapper.selectUserCount(beginTime, endTime))
110 .setActiveUserCount(apiAccessLogStatisticsService.getActiveUserCount(beginTime, endTime)) 107 .setActiveUserCount(apiAccessLogStatisticsService.getActiveUserCount(beginTime, endTime))
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/pay/PayWalletStatisticsService.java
1 package cn.iocoder.yudao.module.statistics.service.pay; 1 package cn.iocoder.yudao.module.statistics.service.pay;
2 2
3 -import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberSummaryRespVO; 3 +import cn.iocoder.yudao.module.statistics.service.pay.bo.RechargeSummaryRespBO;
4 import cn.iocoder.yudao.module.statistics.service.trade.bo.WalletSummaryRespBO; 4 import cn.iocoder.yudao.module.statistics.service.trade.bo.WalletSummaryRespBO;
5 5
6 import java.time.LocalDateTime; 6 import java.time.LocalDateTime;
@@ -28,6 +28,6 @@ public interface PayWalletStatisticsService { @@ -28,6 +28,6 @@ public interface PayWalletStatisticsService {
28 * @param endTime 截止时间 28 * @param endTime 截止时间
29 * @return 钱包充值统计 29 * @return 钱包充值统计
30 */ 30 */
31 - MemberSummaryRespVO getUserRechargeSummary(LocalDateTime beginTime, LocalDateTime endTime); 31 + RechargeSummaryRespBO getUserRechargeSummary(LocalDateTime beginTime, LocalDateTime endTime);
32 32
33 } 33 }
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/pay/PayWalletStatisticsServiceImpl.java
@@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.statistics.service.pay; @@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.statistics.service.pay;
2 2
3 import cn.iocoder.yudao.module.pay.enums.member.PayWalletBizTypeEnum; 3 import cn.iocoder.yudao.module.pay.enums.member.PayWalletBizTypeEnum;
4 import cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum; 4 import cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum;
5 -import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberSummaryRespVO;  
6 import cn.iocoder.yudao.module.statistics.dal.mysql.pay.PayWalletStatisticsMapper; 5 import cn.iocoder.yudao.module.statistics.dal.mysql.pay.PayWalletStatisticsMapper;
  6 +import cn.iocoder.yudao.module.statistics.service.pay.bo.RechargeSummaryRespBO;
7 import cn.iocoder.yudao.module.statistics.service.trade.bo.WalletSummaryRespBO; 7 import cn.iocoder.yudao.module.statistics.service.trade.bo.WalletSummaryRespBO;
8 import org.springframework.stereotype.Service; 8 import org.springframework.stereotype.Service;
9 import org.springframework.validation.annotation.Validated; 9 import org.springframework.validation.annotation.Validated;
@@ -39,7 +39,7 @@ public class PayWalletStatisticsServiceImpl implements PayWalletStatisticsServic @@ -39,7 +39,7 @@ public class PayWalletStatisticsServiceImpl implements PayWalletStatisticsServic
39 } 39 }
40 40
41 @Override 41 @Override
42 - public MemberSummaryRespVO getUserRechargeSummary(LocalDateTime beginTime, LocalDateTime endTime) { 42 + public RechargeSummaryRespBO getUserRechargeSummary(LocalDateTime beginTime, LocalDateTime endTime) {
43 return payWalletStatisticsMapper.selectRechargeSummaryGroupByWalletId(beginTime, endTime, true); 43 return payWalletStatisticsMapper.selectRechargeSummaryGroupByWalletId(beginTime, endTime, true);
44 } 44 }
45 45
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/pay/bo/RechargeSummaryRespBO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.statistics.service.pay.bo;
  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 RechargeSummaryRespBO {
  9 +
  10 + @Schema(description = "充值会员数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "221")
  11 + private Integer rechargeUserCount;
  12 +
  13 + @Schema(description = "充值金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  14 + private Integer rechargePrice;
  15 +
  16 +}
yudao-module-mall/yudao-module-statistics-biz/src/main/resources/mapper/member/MemberStatisticsMapper.xml
@@ -8,8 +8,6 @@ @@ -8,8 +8,6 @@
8 FROM member_user 8 FROM member_user
9 WHERE deleted = FALSE 9 WHERE deleted = FALSE
10 GROUP BY area_id 10 GROUP BY area_id
11 - <!-- TODO @疯狂:order by 是不是交给内存哈 -->  
12 - ORDER BY userCount DESC  
13 </select> 11 </select>
14 12
15 <select id="selectSummaryListBySex" 13 <select id="selectSummaryListBySex"
@@ -18,8 +16,6 @@ @@ -18,8 +16,6 @@
18 FROM member_user 16 FROM member_user
19 WHERE deleted = FALSE 17 WHERE deleted = FALSE
20 GROUP BY sex 18 GROUP BY sex
21 - <!-- TODO @疯狂:order by 是不是交给内存哈 -->  
22 - ORDER BY userCount DESC  
23 </select> 19 </select>
24 20
25 <select id="selectUserCount" resultType="java.lang.Integer"> 21 <select id="selectUserCount" resultType="java.lang.Integer">
yudao-module-mall/yudao-module-statistics-biz/src/main/resources/mapper/pay/PayWalletStatisticsMapper.xml
@@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
30 </select> 30 </select>
31 31
32 <select id="selectRechargeSummaryGroupByWalletId" 32 <select id="selectRechargeSummaryGroupByWalletId"
33 - resultType="cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberSummaryRespVO"> 33 + resultType="cn.iocoder.yudao.module.statistics.service.pay.bo.RechargeSummaryRespBO">
34 SELECT COUNT(1) AS rechargeUserCount, 34 SELECT COUNT(1) AS rechargeUserCount,
35 SUM(pay_price) AS rechargePrice 35 SUM(pay_price) AS rechargePrice
36 FROM pay_wallet_recharge 36 FROM pay_wallet_recharge
yudao-module-mall/yudao-module-statistics-biz/src/main/resources/mapper/trade/TradeStatisticsMapper.xml
@@ -2,6 +2,15 @@ @@ -2,6 +2,15 @@
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 <mapper namespace="cn.iocoder.yudao.module.statistics.dal.mysql.trade.TradeStatisticsMapper"> 3 <mapper namespace="cn.iocoder.yudao.module.statistics.dal.mysql.trade.TradeStatisticsMapper">
4 4
  5 + <select id="selectOrderCreateCountSumAndOrderPayPriceSumByTimeBetween"
  6 + resultType="cn.iocoder.yudao.module.statistics.service.trade.bo.TradeSummaryRespBO">
  7 + SELECT IFNULL(SUM(order_create_count), 0) AS count,
  8 + IFNULL(SUM(order_pay_price), 0) AS summary
  9 + FROM trade_statistics
  10 + WHERE time BETWEEN #{beginTime} AND #{endTime}
  11 + AND deleted = FALSE
  12 + </select>
  13 +
5 <select id="selectByTimeBetween" 14 <select id="selectByTimeBetween"
6 resultType="cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeTrendSummaryRespVO"> 15 resultType="cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeTrendSummaryRespVO">
7 SELECT 16 SELECT