Commit 4be709b815b7cdba1bff7160479ee2757b8c00fb
1 parent
66cdf4ca
统计:Review修改
Showing
11 changed files
with
56 additions
and
31 deletions
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<TradeStatisticsDO | @@ -29,9 +29,8 @@ public interface PayWalletStatisticsMapper extends BaseMapperX<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 |