Merge branch 'feature/mall_product' of https://gitee.com/CrazyWorld/ruoyi-vue-pro into feature/mall_product

# Conflicts:
#	yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/member/MemberStatisticsServiceImpl.java
This commit is contained in:
YunaiV 2023-10-13 20:41:17 +08:00
commit 0eb86ca269
11 changed files with 63 additions and 37 deletions

View File

@ -132,25 +132,34 @@ public class AreaUtils {
return convertList(areas.values(), func, area -> type.getType().equals(area.getType()));
}
// TODO @疯狂注释写下
/**
* 根据区域编号上级区域类型获取上级区域编号
*
* @param id 区域编号
* @param type 区域类型
* @return 上级区域编号
*/
public static Integer getParentIdByType(Integer id, @NonNull AreaTypeEnum type) {
// TODO @疯狂这种不要用 while true因为万一脏数据可能会死循环可以转换成 for (int i = 0; i < Byte.MAX; i++) 一般是优先层级
do {
for (int i = 0; i < Byte.MAX_VALUE; i++) {
Area area = AreaUtils.getArea(id);
if (area == null) {
return null;
}
// 匹配到
if (type.getType().equals(area.getType())) {
return area.getId();
}
// 找到根节点返回空
if (area.getParent() == null || area.getParent().getId() == null) {
return null;
}
// 继续向上查找
id = area.getParent().getId();
} while (true);
}
return null;
}
}

View File

@ -5,6 +5,8 @@ import cn.hutool.core.util.ObjUtil;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.ip.core.Area;
import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberAreaStatisticsRespVO;
import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberSummaryRespVO;
import cn.iocoder.yudao.module.statistics.service.pay.bo.RechargeSummaryRespBO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@ -36,4 +38,6 @@ public interface MemberStatisticsConvert {
});
}
MemberSummaryRespVO convert(RechargeSummaryRespBO rechargeSummary, Integer expensePrice, Integer userCount);
}

View File

@ -1,9 +1,9 @@
package cn.iocoder.yudao.module.statistics.dal.mysql.pay;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberSummaryRespVO;
import cn.iocoder.yudao.module.statistics.service.trade.bo.WalletSummaryRespBO;
import cn.iocoder.yudao.module.statistics.dal.dataobject.trade.TradeStatisticsDO;
import cn.iocoder.yudao.module.statistics.service.pay.bo.RechargeSummaryRespBO;
import cn.iocoder.yudao.module.statistics.service.trade.bo.WalletSummaryRespBO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -29,8 +29,7 @@ public interface PayWalletStatisticsMapper extends BaseMapperX<TradeStatisticsDO
@Param("endTime") LocalDateTime endTime,
@Param("bizType") Integer bizType);
// TODO @疯狂是不是搞个单独的 BO
MemberSummaryRespVO selectRechargeSummaryGroupByWalletId(@Param("beginTime") LocalDateTime beginTime,
RechargeSummaryRespBO selectRechargeSummaryGroupByWalletId(@Param("beginTime") LocalDateTime beginTime,
@Param("endTime") LocalDateTime endTime,
@Param("payStatus") Boolean payStatus);

View File

@ -6,7 +6,6 @@ import cn.iocoder.yudao.module.statistics.dal.dataobject.trade.TradeStatisticsDO
import cn.iocoder.yudao.module.statistics.service.trade.bo.TradeSummaryRespBO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.time.LocalDateTime;
import java.util.List;
@ -19,10 +18,6 @@ import java.util.List;
@Mapper
public interface TradeStatisticsMapper extends BaseMapperX<TradeStatisticsDO> {
// TODO @疯狂这个要不要也挪到 xml 保持统一
@Select("SELECT IFNULL(SUM(order_create_count), 0) AS count, IFNULL(SUM(order_pay_price), 0) AS summary " +
"FROM trade_statistics " +
"WHERE time BETWEEN #{beginTime} AND #{endTime} AND deleted = FALSE")
TradeSummaryRespBO selectOrderCreateCountSumAndOrderPayPriceSumByTimeBetween(@Param("beginTime") LocalDateTime beginTime,
@Param("endTime") LocalDateTime endTime);

View File

@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.statistics.convert.member.MemberStatisticsConvert
import cn.iocoder.yudao.module.statistics.dal.mysql.member.MemberStatisticsMapper;
import cn.iocoder.yudao.module.statistics.service.infra.ApiAccessLogStatisticsService;
import cn.iocoder.yudao.module.statistics.service.pay.PayWalletStatisticsService;
import cn.iocoder.yudao.module.statistics.service.pay.bo.RechargeSummaryRespBO;
import cn.iocoder.yudao.module.statistics.service.trade.TradeOrderStatisticsService;
import cn.iocoder.yudao.module.statistics.service.trade.TradeStatisticsService;
import org.springframework.stereotype.Service;
@ -44,18 +45,6 @@ public class MemberStatisticsServiceImpl implements MemberStatisticsService {
@Resource
private ApiAccessLogStatisticsService apiAccessLogStatisticsService;
@Override
public MemberSummaryRespVO getMemberSummary() {
MemberSummaryRespVO vo = payWalletStatisticsService.getUserRechargeSummary(null, null);
Integer expensePrice = tradeStatisticsService.getExpensePrice(null, null);
Integer userCount = memberStatisticsMapper.selectUserCount(null, null);
// 拼接数据
if (vo == null) {
vo = new MemberSummaryRespVO().setRechargeUserCount(0).setRechargePrice(0);
}
return vo.setUserCount(userCount).setExpensePrice(expensePrice);
}
@Override
public List<MemberAreaStatisticsRespVO> getMemberAreaStatisticsList() {
// 统计用户
@ -101,9 +90,18 @@ public class MemberStatisticsServiceImpl implements MemberStatisticsService {
.setComparison(new TradeStatisticsComparisonRespVO<>(vo, reference));
}
@Override
public MemberSummaryRespVO getMemberSummary() {
RechargeSummaryRespBO rechargeSummary = payWalletStatisticsService.getUserRechargeSummary(null, null);
Integer expensePrice = tradeStatisticsService.getExpensePrice(null, null);
Integer userCount = memberStatisticsMapper.selectUserCount(null, null);
return MemberStatisticsConvert.INSTANCE.convert(rechargeSummary, expensePrice, userCount);
}
private MemberAnalyseComparisonRespVO getMemberAnalyseComparisonData(LocalDateTime beginTime, LocalDateTime endTime) {
Integer rechargeUserCount = Optional.ofNullable(payWalletStatisticsService.getUserRechargeSummary(beginTime, endTime))
.map(MemberSummaryRespVO::getRechargeUserCount).orElse(0);
.map(RechargeSummaryRespBO::getRechargeUserCount).orElse(0);
return new MemberAnalyseComparisonRespVO()
.setUserCount(memberStatisticsMapper.selectUserCount(beginTime, endTime))
.setActiveUserCount(apiAccessLogStatisticsService.getActiveUserCount(beginTime, endTime))

View File

@ -1,6 +1,6 @@
package cn.iocoder.yudao.module.statistics.service.pay;
import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberSummaryRespVO;
import cn.iocoder.yudao.module.statistics.service.pay.bo.RechargeSummaryRespBO;
import cn.iocoder.yudao.module.statistics.service.trade.bo.WalletSummaryRespBO;
import java.time.LocalDateTime;
@ -28,6 +28,6 @@ public interface PayWalletStatisticsService {
* @param endTime 截止时间
* @return 钱包充值统计
*/
MemberSummaryRespVO getUserRechargeSummary(LocalDateTime beginTime, LocalDateTime endTime);
RechargeSummaryRespBO getUserRechargeSummary(LocalDateTime beginTime, LocalDateTime endTime);
}

View File

@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.statistics.service.pay;
import cn.iocoder.yudao.module.pay.enums.member.PayWalletBizTypeEnum;
import cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum;
import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberSummaryRespVO;
import cn.iocoder.yudao.module.statistics.dal.mysql.pay.PayWalletStatisticsMapper;
import cn.iocoder.yudao.module.statistics.service.pay.bo.RechargeSummaryRespBO;
import cn.iocoder.yudao.module.statistics.service.trade.bo.WalletSummaryRespBO;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
@ -39,7 +39,7 @@ public class PayWalletStatisticsServiceImpl implements PayWalletStatisticsServic
}
@Override
public MemberSummaryRespVO getUserRechargeSummary(LocalDateTime beginTime, LocalDateTime endTime) {
public RechargeSummaryRespBO getUserRechargeSummary(LocalDateTime beginTime, LocalDateTime endTime) {
return payWalletStatisticsMapper.selectRechargeSummaryGroupByWalletId(beginTime, endTime, true);
}

View File

@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.statistics.service.pay.bo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - 充值统计 Response VO")
@Data
public class RechargeSummaryRespBO {
@Schema(description = "充值会员数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "221")
private Integer rechargeUserCount;
@Schema(description = "充值金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Integer rechargePrice;
}

View File

@ -8,8 +8,6 @@
FROM member_user
WHERE deleted = FALSE
GROUP BY area_id
<!-- TODO @疯狂order by 是不是交给内存哈 -->
ORDER BY userCount DESC
</select>
<select id="selectSummaryListBySex"
@ -18,8 +16,6 @@
FROM member_user
WHERE deleted = FALSE
GROUP BY sex
<!-- TODO @疯狂order by 是不是交给内存哈 -->
ORDER BY userCount DESC
</select>
<select id="selectUserCount" resultType="java.lang.Integer">

View File

@ -30,7 +30,7 @@
</select>
<select id="selectRechargeSummaryGroupByWalletId"
resultType="cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberSummaryRespVO">
resultType="cn.iocoder.yudao.module.statistics.service.pay.bo.RechargeSummaryRespBO">
SELECT COUNT(1) AS rechargeUserCount,
SUM(pay_price) AS rechargePrice
FROM pay_wallet_recharge

View File

@ -2,6 +2,15 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.statistics.dal.mysql.trade.TradeStatisticsMapper">
<select id="selectOrderCreateCountSumAndOrderPayPriceSumByTimeBetween"
resultType="cn.iocoder.yudao.module.statistics.service.trade.bo.TradeSummaryRespBO">
SELECT IFNULL(SUM(order_create_count), 0) AS count,
IFNULL(SUM(order_pay_price), 0) AS summary
FROM trade_statistics
WHERE time BETWEEN #{beginTime} AND #{endTime}
AND deleted = FALSE
</select>
<select id="selectByTimeBetween"
resultType="cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeTrendSummaryRespVO">
SELECT