Merge branch 'feature/mall_product' of https://gitee.com/CrazyWorld/ruoyi-vue-pro into feature/mall_product
# Conflicts: # yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/api/order/TradeOrderApi.java # yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/api/order/TradeOrderApiImpl.javaplp
commit
704087ce86
@ -0,0 +1,19 @@
|
|||||||
|
package cn.iocoder.yudao.module.statistics.controller.admin.member.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 会员分析对照数据 Response VO")
|
||||||
|
@Data
|
||||||
|
public class MemberAnalyseComparisonRespVO {
|
||||||
|
|
||||||
|
@Schema(description = "会员数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||||
|
private Integer userCount;
|
||||||
|
|
||||||
|
@Schema(description = "活跃用户数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||||
|
private Integer activeUserCount;
|
||||||
|
|
||||||
|
@Schema(description = "充值会员数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "221")
|
||||||
|
private Integer rechargeUserCount;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
package cn.iocoder.yudao.module.statistics.controller.admin.member.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 会员分析 Request VO")
|
||||||
|
@Data
|
||||||
|
public class MemberAnalyseReqVO {
|
||||||
|
|
||||||
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||||
|
@Schema(description = "时间范围")
|
||||||
|
private LocalDateTime[] times;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
package cn.iocoder.yudao.module.statistics.controller.admin.member.vo;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeStatisticsComparisonRespVO;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 会员分析 Response VO")
|
||||||
|
@Data
|
||||||
|
public class MemberAnalyseRespVO {
|
||||||
|
|
||||||
|
@Schema(description = "访客数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||||
|
private Integer visitorCount;
|
||||||
|
|
||||||
|
@Schema(description = "下单用户数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||||
|
private Integer orderUserCount;
|
||||||
|
|
||||||
|
@Schema(description = "成交用户数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||||
|
private Integer payUserCount;
|
||||||
|
|
||||||
|
@Schema(description = "客单价", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||||
|
private Integer atv;
|
||||||
|
|
||||||
|
@Schema(description = "对照数据", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private TradeStatisticsComparisonRespVO<MemberAnalyseComparisonRespVO> comparison;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,39 @@
|
|||||||
|
package cn.iocoder.yudao.module.statistics.convert.member;
|
||||||
|
|
||||||
|
import cn.hutool.core.map.MapUtil;
|
||||||
|
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 org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 会员统计 Convert
|
||||||
|
*
|
||||||
|
* @author owen
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface MemberStatisticsConvert {
|
||||||
|
|
||||||
|
MemberStatisticsConvert INSTANCE = Mappers.getMapper(MemberStatisticsConvert.class);
|
||||||
|
|
||||||
|
default List<MemberAreaStatisticsRespVO> convertList(List<Area> areaList,
|
||||||
|
Map<Integer, Integer> userCountMap,
|
||||||
|
Map<Integer, MemberAreaStatisticsRespVO> orderMap) {
|
||||||
|
return CollectionUtils.convertList(areaList, area -> {
|
||||||
|
MemberAreaStatisticsRespVO orderVo = Optional.ofNullable(orderMap.get(area.getId())).orElseGet(MemberAreaStatisticsRespVO::new);
|
||||||
|
return new MemberAreaStatisticsRespVO()
|
||||||
|
.setAreaId(area.getId()).setAreaName(area.getName())
|
||||||
|
.setUserCount(MapUtil.getInt(userCountMap, area.getId(), 0))
|
||||||
|
.setOrderCreateCount(ObjUtil.defaultIfNull(orderVo.getOrderCreateCount(), 0))
|
||||||
|
.setOrderPayCount(ObjUtil.defaultIfNull(orderVo.getOrderPayCount(), 0))
|
||||||
|
.setOrderPayPrice(ObjUtil.defaultIfNull(orderVo.getOrderPayPrice(), 0));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
package cn.iocoder.yudao.module.statistics.dal.mysql.infra;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API 访问日志统计 Mapper
|
||||||
|
*
|
||||||
|
* @author owen
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface ApiAccessLogStatisticsMapper extends BaseMapperX<Object> {
|
||||||
|
|
||||||
|
Integer selectCountByIp(@Param("beginTime") LocalDateTime beginTime, @Param("endTime") LocalDateTime endTime);
|
||||||
|
|
||||||
|
Integer selectCountByUserId(@Param("beginTime") LocalDateTime beginTime, @Param("endTime") LocalDateTime endTime);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
package cn.iocoder.yudao.module.statistics.dal.mysql.member;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberAreaStatisticsRespVO;
|
||||||
|
import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberSexStatisticsRespVO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 会员统计 Mapper
|
||||||
|
*
|
||||||
|
* @author owen
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface MemberStatisticsMapper extends BaseMapperX<Object> {
|
||||||
|
|
||||||
|
List<MemberAreaStatisticsRespVO> selectSummaryListByAreaId();
|
||||||
|
|
||||||
|
List<MemberSexStatisticsRespVO> selectSummaryListBySex();
|
||||||
|
|
||||||
|
Integer selectUserCount(@Param("beginTime") LocalDateTime beginTime, @Param("endTime") LocalDateTime endTime);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
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 org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 交易统计 Mapper
|
||||||
|
*
|
||||||
|
* @author owen
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface PayWalletStatisticsMapper extends BaseMapperX<TradeStatisticsDO> {
|
||||||
|
|
||||||
|
WalletSummaryRespBO selectRechargeSummaryByPayTimeBetween(@Param("beginTime") LocalDateTime beginTime,
|
||||||
|
@Param("endTime") LocalDateTime endTime,
|
||||||
|
@Param("payStatus") Boolean payStatus);
|
||||||
|
|
||||||
|
WalletSummaryRespBO selectRechargeSummaryByRefundTimeBetween(@Param("beginTime") LocalDateTime beginTime,
|
||||||
|
@Param("endTime") LocalDateTime endTime,
|
||||||
|
@Param("refundStatus") Integer refundStatus);
|
||||||
|
|
||||||
|
Integer selectPriceSummaryByBizTypeAndCreateTimeBetween(@Param("beginTime") LocalDateTime beginTime,
|
||||||
|
@Param("endTime") LocalDateTime endTime,
|
||||||
|
@Param("bizType") Integer bizType);
|
||||||
|
|
||||||
|
MemberSummaryRespVO selectRechargeSummaryGroupByWalletId(@Param("beginTime") LocalDateTime beginTime,
|
||||||
|
@Param("endTime") LocalDateTime endTime,
|
||||||
|
@Param("payStatus") Boolean payStatus);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
package cn.iocoder.yudao.module.statistics.dal.mysql.trade;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import cn.iocoder.yudao.module.statistics.dal.dataobject.trade.TradeStatisticsDO;
|
||||||
|
import cn.iocoder.yudao.module.statistics.service.trade.bo.AfterSaleSummaryRespBO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 交易统计 Mapper
|
||||||
|
*
|
||||||
|
* @author owen
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface AfterSaleStatisticsMapper extends BaseMapperX<TradeStatisticsDO> {
|
||||||
|
|
||||||
|
AfterSaleSummaryRespBO selectSummaryByRefundTimeBetween(@Param("beginTime") LocalDateTime beginTime,
|
||||||
|
@Param("endTime") LocalDateTime endTime);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
package cn.iocoder.yudao.module.statistics.dal.mysql.trade;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import cn.iocoder.yudao.module.statistics.dal.dataobject.trade.TradeStatisticsDO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 交易统计 Mapper
|
||||||
|
*
|
||||||
|
* @author owen
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface BrokerageStatisticsMapper extends BaseMapperX<TradeStatisticsDO> {
|
||||||
|
|
||||||
|
Integer selectSummaryPriceByStatusAndUnfreezeTimeBetween(@Param("bizType") Integer bizType,
|
||||||
|
@Param("status") Integer status,
|
||||||
|
@Param("beginTime") LocalDateTime beginTime,
|
||||||
|
@Param("endTime") LocalDateTime endTime);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
package cn.iocoder.yudao.module.statistics.dal.mysql.trade;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberAreaStatisticsRespVO;
|
||||||
|
import cn.iocoder.yudao.module.statistics.dal.dataobject.trade.TradeStatisticsDO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 交易统计 Mapper
|
||||||
|
*
|
||||||
|
* @author owen
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface TradeOrderStatisticsMapper extends BaseMapperX<TradeStatisticsDO> {
|
||||||
|
|
||||||
|
List<MemberAreaStatisticsRespVO> selectSummaryListByAreaId();
|
||||||
|
|
||||||
|
Integer selectCountByCreateTimeBetween(@Param("beginTime") LocalDateTime beginTime,
|
||||||
|
@Param("endTime") LocalDateTime endTime);
|
||||||
|
|
||||||
|
Integer selectCountByPayTimeBetween(@Param("beginTime") LocalDateTime beginTime,
|
||||||
|
@Param("endTime") LocalDateTime endTime);
|
||||||
|
|
||||||
|
Integer selectSummaryPriceByPayTimeBetween(@Param("beginTime") LocalDateTime beginTime,
|
||||||
|
@Param("endTime") LocalDateTime endTime);
|
||||||
|
|
||||||
|
Integer selectUserCountByCreateTimeBetween(@Param("beginTime") LocalDateTime beginTime,
|
||||||
|
@Param("endTime") LocalDateTime endTime);
|
||||||
|
|
||||||
|
Integer selectUserCountByPayTimeBetween(@Param("beginTime") LocalDateTime beginTime,
|
||||||
|
@Param("endTime") LocalDateTime endTime);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
package cn.iocoder.yudao.module.statistics.service.infra;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API 访问日志统计 Service 接口
|
||||||
|
*
|
||||||
|
* @author owen
|
||||||
|
*/
|
||||||
|
public interface ApiAccessLogStatisticsService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取活跃用户数量
|
||||||
|
*
|
||||||
|
* @param beginTime 起始时间
|
||||||
|
* @param endTime 截止时间
|
||||||
|
* @return 活跃用户数量
|
||||||
|
*/
|
||||||
|
Integer getActiveUserCount(LocalDateTime beginTime, LocalDateTime endTime);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取访问用户数量
|
||||||
|
*
|
||||||
|
* @param beginTime 起始时间
|
||||||
|
* @param endTime 截止时间
|
||||||
|
* @return 访问用户数量
|
||||||
|
*/
|
||||||
|
Integer getVisitorUserCount(LocalDateTime beginTime, LocalDateTime endTime);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
package cn.iocoder.yudao.module.statistics.service.infra;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.statistics.dal.mysql.infra.ApiAccessLogStatisticsMapper;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API 访问日志统计 Service 实现类
|
||||||
|
*
|
||||||
|
* @author owen
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Validated
|
||||||
|
public class ApiAccessLogStatisticsServiceImpl implements ApiAccessLogStatisticsService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ApiAccessLogStatisticsMapper apiAccessLogStatisticsMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer getActiveUserCount(LocalDateTime beginTime, LocalDateTime endTime) {
|
||||||
|
return apiAccessLogStatisticsMapper.selectCountByUserId(beginTime, endTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer getVisitorUserCount(LocalDateTime beginTime, LocalDateTime endTime) {
|
||||||
|
return apiAccessLogStatisticsMapper.selectCountByIp(beginTime, endTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,114 @@
|
|||||||
|
package cn.iocoder.yudao.module.statistics.service.member;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.NumberUtil;
|
||||||
|
import cn.iocoder.yudao.framework.ip.core.enums.AreaTypeEnum;
|
||||||
|
import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils;
|
||||||
|
import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.*;
|
||||||
|
import cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeStatisticsComparisonRespVO;
|
||||||
|
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.trade.TradeOrderStatisticsService;
|
||||||
|
import cn.iocoder.yudao.module.statistics.service.trade.TradeStatisticsService;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.time.Duration;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 会员统计 Service 实现类
|
||||||
|
*
|
||||||
|
* @author owen
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Validated
|
||||||
|
public class MemberStatisticsServiceImpl implements MemberStatisticsService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private MemberStatisticsMapper memberStatisticsMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private PayWalletStatisticsService payWalletStatisticsService;
|
||||||
|
@Resource
|
||||||
|
private TradeStatisticsService tradeStatisticsService;
|
||||||
|
@Resource
|
||||||
|
private TradeOrderStatisticsService tradeOrderStatisticsService;
|
||||||
|
@Resource
|
||||||
|
private ApiAccessLogStatisticsService apiAccessLogStatisticsService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<MemberAreaStatisticsRespVO> getMemberAreaStatisticsList() {
|
||||||
|
// 统计用户
|
||||||
|
Map<Integer, Integer> userCountMap = convertMap(memberStatisticsMapper.selectSummaryListByAreaId(),
|
||||||
|
vo -> AreaUtils.getParentIdByType(vo.getAreaId(), AreaTypeEnum.PROVINCE),
|
||||||
|
MemberAreaStatisticsRespVO::getUserCount, Integer::sum);
|
||||||
|
// 统计订单
|
||||||
|
Map<Integer, MemberAreaStatisticsRespVO> orderMap = convertMap(tradeOrderStatisticsService.getSummaryListByAreaId(),
|
||||||
|
vo -> AreaUtils.getParentIdByType(vo.getAreaId(), AreaTypeEnum.PROVINCE),
|
||||||
|
vo -> vo,
|
||||||
|
(a, b) -> new MemberAreaStatisticsRespVO()
|
||||||
|
.setOrderCreateCount(a.getOrderCreateCount() + b.getOrderCreateCount())
|
||||||
|
.setOrderPayCount(a.getOrderPayCount() + b.getOrderPayCount())
|
||||||
|
.setOrderPayPrice(a.getOrderPayPrice() + b.getOrderPayPrice()));
|
||||||
|
// 拼接数据
|
||||||
|
return MemberStatisticsConvert.INSTANCE.convertList(AreaUtils.getByType(AreaTypeEnum.PROVINCE, area -> area), userCountMap, orderMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<MemberSexStatisticsRespVO> getMemberSexStatisticsList() {
|
||||||
|
return memberStatisticsMapper.selectSummaryListBySex();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MemberAnalyseRespVO getMemberAnalyse(LocalDateTime beginTime, LocalDateTime endTime) {
|
||||||
|
// 对照数据
|
||||||
|
MemberAnalyseComparisonRespVO vo = getMemberAnalyseComparisonData(beginTime, endTime);
|
||||||
|
LocalDateTime referenceBeginTime = beginTime.minus(Duration.between(beginTime, endTime));
|
||||||
|
MemberAnalyseComparisonRespVO reference = getMemberAnalyseComparisonData(referenceBeginTime, beginTime);
|
||||||
|
|
||||||
|
Integer payUserCount = tradeOrderStatisticsService.getPayUserCount(beginTime, endTime);
|
||||||
|
// 计算客单价
|
||||||
|
int atv = 0;
|
||||||
|
if (payUserCount != null && payUserCount > 0) {
|
||||||
|
Integer payPrice = tradeOrderStatisticsService.getOrderPayPrice(beginTime, endTime);
|
||||||
|
atv = NumberUtil.div(payPrice, payUserCount).intValue();
|
||||||
|
}
|
||||||
|
return new MemberAnalyseRespVO()
|
||||||
|
.setVisitorCount(apiAccessLogStatisticsService.getVisitorUserCount(beginTime, endTime))
|
||||||
|
.setOrderUserCount(tradeOrderStatisticsService.getOrderUserCount(beginTime, endTime))
|
||||||
|
.setPayUserCount(payUserCount)
|
||||||
|
.setAtv(atv)
|
||||||
|
.setComparison(new TradeStatisticsComparisonRespVO<>(vo, reference));
|
||||||
|
}
|
||||||
|
|
||||||
|
@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);
|
||||||
|
}
|
||||||
|
|
||||||
|
private MemberAnalyseComparisonRespVO getMemberAnalyseComparisonData(LocalDateTime beginTime, LocalDateTime endTime) {
|
||||||
|
Integer rechargeUserCount = Optional.ofNullable(payWalletStatisticsService.getUserRechargeSummary(beginTime, endTime))
|
||||||
|
.map(MemberSummaryRespVO::getRechargeUserCount).orElse(0);
|
||||||
|
return new MemberAnalyseComparisonRespVO()
|
||||||
|
.setUserCount(memberStatisticsMapper.selectUserCount(beginTime, endTime))
|
||||||
|
.setActiveUserCount(apiAccessLogStatisticsService.getActiveUserCount(beginTime, endTime))
|
||||||
|
.setRechargeUserCount(rechargeUserCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,33 @@
|
|||||||
|
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.trade.bo.WalletSummaryRespBO;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 钱包统计 Service 接口
|
||||||
|
*
|
||||||
|
* @author owen
|
||||||
|
*/
|
||||||
|
public interface PayWalletStatisticsService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取钱包统计
|
||||||
|
*
|
||||||
|
* @param beginTime 起始时间
|
||||||
|
* @param endTime 截止时间
|
||||||
|
* @return 钱包统计
|
||||||
|
*/
|
||||||
|
WalletSummaryRespBO getWalletSummary(LocalDateTime beginTime, LocalDateTime endTime);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取钱包充值统计
|
||||||
|
*
|
||||||
|
* @param beginTime 起始时间
|
||||||
|
* @param endTime 截止时间
|
||||||
|
* @return 钱包充值统计
|
||||||
|
*/
|
||||||
|
MemberSummaryRespVO getUserRechargeSummary(LocalDateTime beginTime, LocalDateTime endTime);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
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.trade.bo.WalletSummaryRespBO;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 钱包统计 Service 实现类
|
||||||
|
*
|
||||||
|
* @author owen
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Validated
|
||||||
|
public class PayWalletStatisticsServiceImpl implements PayWalletStatisticsService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private PayWalletStatisticsMapper payWalletStatisticsMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WalletSummaryRespBO getWalletSummary(LocalDateTime beginTime, LocalDateTime endTime) {
|
||||||
|
WalletSummaryRespBO paySummary = payWalletStatisticsMapper.selectRechargeSummaryByPayTimeBetween(
|
||||||
|
beginTime, endTime, true);
|
||||||
|
WalletSummaryRespBO refundSummary = payWalletStatisticsMapper.selectRechargeSummaryByRefundTimeBetween(
|
||||||
|
beginTime, endTime, PayRefundStatusEnum.SUCCESS.getStatus());
|
||||||
|
Integer walletPayPrice = payWalletStatisticsMapper.selectPriceSummaryByBizTypeAndCreateTimeBetween(
|
||||||
|
beginTime, endTime, PayWalletBizTypeEnum.PAYMENT.getType());
|
||||||
|
|
||||||
|
paySummary.setOrderWalletPayPrice(walletPayPrice);
|
||||||
|
paySummary.setRechargeRefundCount(refundSummary.getRechargeRefundCount());
|
||||||
|
paySummary.setRechargeRefundPrice(refundSummary.getRechargeRefundPrice());
|
||||||
|
|
||||||
|
return paySummary;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MemberSummaryRespVO getUserRechargeSummary(LocalDateTime beginTime, LocalDateTime endTime) {
|
||||||
|
return payWalletStatisticsMapper.selectRechargeSummaryGroupByWalletId(beginTime, endTime, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
package cn.iocoder.yudao.module.statistics.service.trade;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.statistics.service.trade.bo.AfterSaleSummaryRespBO;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 售后统计 Service 接口
|
||||||
|
*
|
||||||
|
* @author owen
|
||||||
|
*/
|
||||||
|
public interface AfterSaleStatisticsService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取售后单统计
|
||||||
|
*
|
||||||
|
* @param beginTime 起始时间
|
||||||
|
* @param endTime 截止时间
|
||||||
|
* @return 售后统计结果
|
||||||
|
*/
|
||||||
|
AfterSaleSummaryRespBO getAfterSaleSummary(LocalDateTime beginTime, LocalDateTime endTime);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
package cn.iocoder.yudao.module.statistics.service.trade;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.statistics.dal.mysql.trade.AfterSaleStatisticsMapper;
|
||||||
|
import cn.iocoder.yudao.module.statistics.service.trade.bo.AfterSaleSummaryRespBO;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 售后统计 Service 实现类
|
||||||
|
*
|
||||||
|
* @author owen
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Validated
|
||||||
|
public class AfterSaleStatisticsServiceImpl implements AfterSaleStatisticsService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private AfterSaleStatisticsMapper afterSaleStatisticsMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AfterSaleSummaryRespBO getAfterSaleSummary(LocalDateTime beginTime, LocalDateTime endTime) {
|
||||||
|
return afterSaleStatisticsMapper.selectSummaryByRefundTimeBetween(beginTime, endTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
package cn.iocoder.yudao.module.statistics.service.trade;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分销统计 Service 接口
|
||||||
|
*
|
||||||
|
* @author owen
|
||||||
|
*/
|
||||||
|
public interface BrokerageStatisticsService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取已结算的佣金金额
|
||||||
|
*
|
||||||
|
* @param beginTime 起始时间
|
||||||
|
* @param endTime 截止时间
|
||||||
|
* @return 已结算的佣金金额
|
||||||
|
*/
|
||||||
|
Integer getBrokerageSettlementPriceSummary(LocalDateTime beginTime, LocalDateTime endTime);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
package cn.iocoder.yudao.module.statistics.service.trade;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.statistics.dal.mysql.trade.BrokerageStatisticsMapper;
|
||||||
|
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum;
|
||||||
|
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分销统计 Service 实现类
|
||||||
|
*
|
||||||
|
* @author owen
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Validated
|
||||||
|
public class BrokerageStatisticsServiceImpl implements BrokerageStatisticsService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private BrokerageStatisticsMapper brokerageStatisticsMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer getBrokerageSettlementPriceSummary(LocalDateTime beginTime, LocalDateTime endTime) {
|
||||||
|
return brokerageStatisticsMapper.selectSummaryPriceByStatusAndUnfreezeTimeBetween(
|
||||||
|
BrokerageRecordBizTypeEnum.ORDER.getType(), BrokerageRecordStatusEnum.SETTLEMENT.getStatus(),
|
||||||
|
beginTime, endTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
package cn.iocoder.yudao.module.statistics.service.trade;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberAreaStatisticsRespVO;
|
||||||
|
import cn.iocoder.yudao.module.statistics.service.trade.bo.TradeOrderSummaryRespBO;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 交易订单统计 Service 接口
|
||||||
|
*
|
||||||
|
* @author owen
|
||||||
|
*/
|
||||||
|
public interface TradeOrderStatisticsService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取订单统计
|
||||||
|
*
|
||||||
|
* @param beginTime 起始时间
|
||||||
|
* @param endTime 截止时间
|
||||||
|
* @return 订单统计结果
|
||||||
|
*/
|
||||||
|
TradeOrderSummaryRespBO getOrderSummary(LocalDateTime beginTime, LocalDateTime endTime);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取地区订单统计
|
||||||
|
*
|
||||||
|
* @return 订单统计结果
|
||||||
|
*/
|
||||||
|
List<MemberAreaStatisticsRespVO> getSummaryListByAreaId();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取下单用户数量
|
||||||
|
*
|
||||||
|
* @param beginTime 起始时间
|
||||||
|
* @param endTime 截止时间
|
||||||
|
* @return 支付下单数量
|
||||||
|
*/
|
||||||
|
Integer getOrderUserCount(LocalDateTime beginTime, LocalDateTime endTime);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取支付用户数量
|
||||||
|
*
|
||||||
|
* @param beginTime 起始时间
|
||||||
|
* @param endTime 截止时间
|
||||||
|
* @return 支付用户数量
|
||||||
|
*/
|
||||||
|
Integer getPayUserCount(LocalDateTime beginTime, LocalDateTime endTime);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取支付金额
|
||||||
|
*
|
||||||
|
* @param beginTime 起始时间
|
||||||
|
* @param endTime 截止时间
|
||||||
|
* @return 支付用户金额
|
||||||
|
*/
|
||||||
|
Integer getOrderPayPrice(LocalDateTime beginTime, LocalDateTime endTime);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
package cn.iocoder.yudao.module.statistics.service.trade;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberAreaStatisticsRespVO;
|
||||||
|
import cn.iocoder.yudao.module.statistics.dal.mysql.trade.TradeOrderStatisticsMapper;
|
||||||
|
import cn.iocoder.yudao.module.statistics.service.trade.bo.TradeOrderSummaryRespBO;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 交易订单统计 Service 实现类
|
||||||
|
*
|
||||||
|
* @author owen
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Validated
|
||||||
|
public class TradeOrderStatisticsServiceImpl implements TradeOrderStatisticsService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private TradeOrderStatisticsMapper tradeOrderStatisticsMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TradeOrderSummaryRespBO getOrderSummary(LocalDateTime beginTime, LocalDateTime endTime) {
|
||||||
|
return new TradeOrderSummaryRespBO()
|
||||||
|
.setOrderCreateCount(tradeOrderStatisticsMapper.selectCountByCreateTimeBetween(beginTime, endTime))
|
||||||
|
.setOrderPayCount(tradeOrderStatisticsMapper.selectCountByPayTimeBetween(beginTime, endTime))
|
||||||
|
.setOrderPayPrice(tradeOrderStatisticsMapper.selectSummaryPriceByPayTimeBetween(beginTime, endTime));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<MemberAreaStatisticsRespVO> getSummaryListByAreaId() {
|
||||||
|
return tradeOrderStatisticsMapper.selectSummaryListByAreaId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer getOrderUserCount(LocalDateTime beginTime, LocalDateTime endTime) {
|
||||||
|
return tradeOrderStatisticsMapper.selectUserCountByCreateTimeBetween(beginTime, endTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer getPayUserCount(LocalDateTime beginTime, LocalDateTime endTime) {
|
||||||
|
return tradeOrderStatisticsMapper.selectUserCountByPayTimeBetween(beginTime, endTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer getOrderPayPrice(LocalDateTime beginTime, LocalDateTime endTime) {
|
||||||
|
return tradeOrderStatisticsMapper.selectSummaryPriceByPayTimeBetween(beginTime, endTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,19 +1,19 @@
|
|||||||
package cn.iocoder.yudao.module.trade.api.order.dto;
|
package cn.iocoder.yudao.module.statistics.service.trade.bo;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 订单统计 Response DTO
|
* 订单统计 Response BO
|
||||||
*
|
*
|
||||||
* @author owen
|
* @author owen
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class TradeOrderSummaryRespDTO {
|
public class TradeOrderSummaryRespBO {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建订单数
|
* 创建订单数
|
||||||
*/
|
*/
|
||||||
private Long orderCreateCount;
|
private Integer orderCreateCount;
|
||||||
/**
|
/**
|
||||||
* 支付订单商品数
|
* 支付订单商品数
|
||||||
*/
|
*/
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!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.infra.ApiAccessLogStatisticsMapper">
|
||||||
|
<select id="selectCountByIp" resultType="java.lang.Integer">
|
||||||
|
SELECT COUNT(1)
|
||||||
|
FROM infra_api_access_log
|
||||||
|
WHERE deleted = FALSE
|
||||||
|
AND create_time BETWEEN #{beginTime} AND #{endTime}
|
||||||
|
GROUP BY user_ip
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectCountByUserId" resultType="java.lang.Integer">
|
||||||
|
SELECT COUNT(1)
|
||||||
|
FROM infra_api_access_log
|
||||||
|
WHERE user_id != 0
|
||||||
|
AND deleted = FALSE
|
||||||
|
AND create_time BETWEEN #{beginTime} AND #{endTime}
|
||||||
|
GROUP BY user_id
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
@ -0,0 +1,34 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!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.member.MemberStatisticsMapper">
|
||||||
|
|
||||||
|
<select id="selectSummaryListByAreaId"
|
||||||
|
resultType="cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberAreaStatisticsRespVO">
|
||||||
|
SELECT area_id, COUNT(1) AS userCount
|
||||||
|
FROM member_user
|
||||||
|
WHERE deleted = FALSE
|
||||||
|
GROUP BY area_id
|
||||||
|
ORDER BY userCount DESC
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectSummaryListBySex"
|
||||||
|
resultType="cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberSexStatisticsRespVO">
|
||||||
|
SELECT sex, COUNT(1) AS userCount
|
||||||
|
FROM member_user
|
||||||
|
WHERE deleted = FALSE
|
||||||
|
GROUP BY sex
|
||||||
|
ORDER BY userCount DESC
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectUserCount" resultType="java.lang.Integer">
|
||||||
|
SELECT COUNT(1)
|
||||||
|
FROM member_user
|
||||||
|
WHERE deleted = FALSE
|
||||||
|
<if test="beginTime != null">
|
||||||
|
AND create_time >= #{beginTime}
|
||||||
|
</if>
|
||||||
|
<if test="endTime != null">
|
||||||
|
AND create_time <= #{endTime}
|
||||||
|
</if>
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!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.pay.PayWalletStatisticsMapper">
|
||||||
|
<select id="selectRechargeSummaryByPayTimeBetween"
|
||||||
|
resultType="cn.iocoder.yudao.module.statistics.service.trade.bo.WalletSummaryRespBO">
|
||||||
|
SELECT COUNT(1) AS rechargePayCount,
|
||||||
|
SUM(pay_price) AS rechargePayPrice
|
||||||
|
FROM pay_wallet_recharge
|
||||||
|
WHERE pay_status = #{payStatus}
|
||||||
|
AND deleted = FALSE
|
||||||
|
AND pay_time BETWEEN #{beginTime} AND #{endTime}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectRechargeSummaryByRefundTimeBetween"
|
||||||
|
resultType="cn.iocoder.yudao.module.statistics.service.trade.bo.WalletSummaryRespBO">
|
||||||
|
SELECT COUNT(1) AS rechargeRefundCount,
|
||||||
|
SUM(pay_price) AS rechargeRefundPrice
|
||||||
|
FROM pay_wallet_recharge
|
||||||
|
WHERE refund_status = #{refundStatus}
|
||||||
|
AND deleted = FALSE
|
||||||
|
AND refund_time BETWEEN #{beginTime} AND #{endTime}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectPriceSummaryByBizTypeAndCreateTimeBetween" resultType="java.lang.Integer">
|
||||||
|
SELECT SUM(price)
|
||||||
|
FROM pay_wallet_transaction
|
||||||
|
WHERE biz_type = #{bizType}
|
||||||
|
AND deleted = FALSE
|
||||||
|
AND create_time BETWEEN #{beginTime} AND #{endTime}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectRechargeSummaryGroupByWalletId"
|
||||||
|
resultType="cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberSummaryRespVO">
|
||||||
|
SELECT COUNT(1) AS rechargeUserCount,
|
||||||
|
SUM(pay_price) AS rechargePrice
|
||||||
|
FROM pay_wallet_recharge
|
||||||
|
WHERE pay_status = #{payStatus}
|
||||||
|
AND deleted = FALSE
|
||||||
|
<if test="beginTime != null">
|
||||||
|
AND pay_time >= #{beginTime}
|
||||||
|
</if>
|
||||||
|
<if test="endTime != null">
|
||||||
|
AND pay_time <= #{endTime}
|
||||||
|
</if>
|
||||||
|
GROUP BY wallet_id
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!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.AfterSaleStatisticsMapper">
|
||||||
|
<select id="selectSummaryByRefundTimeBetween"
|
||||||
|
resultType="cn.iocoder.yudao.module.statistics.service.trade.bo.AfterSaleSummaryRespBO">
|
||||||
|
SELECT COUNT(1) AS afterSaleCount,
|
||||||
|
SUM(refund_price) AS afterSaleRefundPrice
|
||||||
|
FROM trade_after_sale
|
||||||
|
WHERE deleted = FALSE
|
||||||
|
AND refund_time BETWEEN #{beginTime} AND #{endTime}
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!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.BrokerageStatisticsMapper">
|
||||||
|
<select id="selectSummaryPriceByStatusAndUnfreezeTimeBetween" resultType="java.lang.Integer">
|
||||||
|
SELECT SUM(price)
|
||||||
|
FROM trade_brokerage_record
|
||||||
|
WHERE biz_type = #{bizType}
|
||||||
|
AND status = #{status}
|
||||||
|
AND deleted = FALSE
|
||||||
|
AND unfreeze_time BETWEEN #{beginTime} AND #{endTime}
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
@ -0,0 +1,64 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!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.TradeOrderStatisticsMapper">
|
||||||
|
<select id="selectSummaryListByAreaId"
|
||||||
|
resultType="cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberAreaStatisticsRespVO">
|
||||||
|
SELECT receiver_area_id AS areaId,
|
||||||
|
(SELECT COUNT(1)
|
||||||
|
FROM trade_order AS s
|
||||||
|
WHERE s.receiver_area_id = m.receiver_area_id) AS orderCreateCount,
|
||||||
|
(SELECT COUNT(1)
|
||||||
|
FROM trade_order AS s
|
||||||
|
WHERE s.receiver_area_id = m.receiver_area_id
|
||||||
|
AND s.pay_status = TRUE
|
||||||
|
AND s.deleted = FALSE) AS orderPayCount,
|
||||||
|
(SELECT SUM(s.pay_price)
|
||||||
|
FROM trade_order AS s
|
||||||
|
WHERE s.receiver_area_id = m.receiver_area_id
|
||||||
|
AND s.pay_status = TRUE
|
||||||
|
AND s.deleted = FALSE) AS orderPayPrice
|
||||||
|
FROM trade_order m
|
||||||
|
WHERE deleted = FALSE
|
||||||
|
GROUP BY receiver_area_id
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectUserCountByCreateTimeBetween" resultType="java.lang.Integer">
|
||||||
|
SELECT COUNT(1)
|
||||||
|
FROM trade_order
|
||||||
|
WHERE deleted = FALSE
|
||||||
|
AND create_time BETWEEN #{beginTime} AND #{endTime}
|
||||||
|
GROUP BY user_id
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectUserCountByPayTimeBetween" resultType="java.lang.Integer">
|
||||||
|
SELECT COUNT(1)
|
||||||
|
FROM trade_order
|
||||||
|
WHERE deleted = FALSE
|
||||||
|
AND pay_status = TRUE
|
||||||
|
AND pay_time BETWEEN #{beginTime} AND #{endTime}
|
||||||
|
GROUP BY user_id
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectCountByCreateTimeBetween" resultType="java.lang.Integer">
|
||||||
|
SELECT COUNT(1)
|
||||||
|
FROM trade_order
|
||||||
|
WHERE deleted = FALSE
|
||||||
|
AND create_time BETWEEN #{beginTime} AND #{endTime}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectCountByPayTimeBetween" resultType="java.lang.Integer">
|
||||||
|
SELECT COUNT(1)
|
||||||
|
FROM trade_order
|
||||||
|
WHERE pay_status = TRUE
|
||||||
|
AND deleted = FALSE
|
||||||
|
AND create_time BETWEEN #{beginTime} AND #{endTime}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectSummaryPriceByPayTimeBetween" resultType="java.lang.Integer">
|
||||||
|
SELECT SUM(pay_price)
|
||||||
|
FROM trade_order AS s
|
||||||
|
WHERE s.pay_status = TRUE
|
||||||
|
AND deleted = FALSE
|
||||||
|
AND create_time BETWEEN #{beginTime} AND #{endTime}
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
Loading…
Reference in New Issue