1、新增账户资金统计、账户数量统计;2、管理端各项统计增加忽略组织标记;

This commit is contained in:
gaoqr
2025-09-30 16:44:29 +08:00
parent 23bc07160d
commit c292cde4f8
15 changed files with 427 additions and 8 deletions
@@ -10,6 +10,7 @@ import com.cf.imes.module.system.controller.admin.statistics.vo.ManageUserActTot
import com.cf.imes.module.system.controller.admin.statistics.vo.ManageUserTotalStatisticRespVO;
import com.cf.imes.module.system.controller.admin.statistics.vo.OrgStatusGroupStatisticsReqVO;
import com.cf.imes.module.system.service.funds.purchase.PurchaseService;
import com.cf.imes.module.system.service.funds.statistics.FundsStatisticsService;
import com.cf.imes.module.system.service.organ.OrganService;
import com.cf.imes.module.system.service.user.AdminUserService;
import io.swagger.v3.oas.annotations.Operation;
@@ -42,6 +43,9 @@ public class ManageStatisticsController {
@Resource
private PurchaseService purchaseService;
@Resource
private FundsStatisticsService fundsStatisticsService;
@GetMapping("/total/org")
@Operation(summary = "组织总数")
public CommonResult<ManageOrgTotalStatisticRespVO> getOrgTotal() {
@@ -66,6 +70,18 @@ public class ManageStatisticsController {
return success(userService.getUserActTotal());
}
@GetMapping("/user/status/group")
@Operation(summary = "新增、注销用户统计")
public CommonResult<Map<String, Object>> getUserStatusGroupStatistics(@Valid OrgStatusGroupStatisticsReqVO reqVO) {
return success(userService.getUserStatusGroupStatistics(reqVO));
}
@GetMapping("/funds/tradeType/group")
@Operation(summary = "账户资金充值、软件购买统计")
public CommonResult<Map<String, Object>> getFunsTradeTypeGroupStatistics(@Valid OrgStatusGroupStatisticsReqVO reqVO) {
return success(fundsStatisticsService.getFunsTradeTypeGroupStatistics(reqVO));
}
@GetMapping("/org/status/group")
@Operation(summary = "新增、注销组织数量统计")
public CommonResult<Map<String, Object>> getOrgStatusGroupStatistics(@Valid OrgStatusGroupStatisticsReqVO reqVO) {
@@ -0,0 +1,56 @@
package com.cf.imes.module.system.dal.dataobject.funds.statistics;
import lombok.Data;
import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal;
/**
* @author Gqr
* @since 2025/9/30 16:10
*/
@Data
public class FundsTradeTypeGroupStatisticsDO implements Comparable<FundsTradeTypeGroupStatisticsDO> {
/**
* 金额
*/
private BigDecimal amount;
/**
* 交易时间格式
*/
private String date;
@Override
public int compareTo(@NotNull FundsTradeTypeGroupStatisticsDO o) {
// 解析 date 字符串为年、月、周
String[] partsThis = date.split("-");
String[] partsOther = o.date.split("-");
// 比较年份
int yearComparison = Integer.compare(Integer.parseInt(partsThis[0]), Integer.parseInt(partsOther[0]));
if (yearComparison != 0) {
return yearComparison;
}
// 比较月份
if (partsThis.length > 1 && partsOther.length > 1) {
int monthComparison = Integer.compare(Integer.parseInt(partsThis[1]), Integer.parseInt(partsOther[1]));
if (monthComparison != 0) {
return monthComparison;
}
}
// 比较周数
if (partsThis.length > 2 && partsOther.length > 2) {
int weekComparison = Integer.compare(Integer.parseInt(partsThis[2]), Integer.parseInt(partsOther[2]));
if (weekComparison != 0) {
return weekComparison;
}
}
// 如果所有部分都相同,则按状态排序
return this.amount.compareTo(o.amount);
}
}
@@ -0,0 +1,53 @@
package com.cf.imes.module.system.dal.dataobject.user;
import lombok.Data;
import org.jetbrains.annotations.NotNull;
/**
* @author Gqr
* @since 2025/9/30 15:32
*/
@Data
public class UserStatusGroupStatisticsDO implements Comparable<UserStatusGroupStatisticsDO> {
/**
* 用户数量
*/
private Integer userCount;
/**
* 更新时间格式
*/
private String date;
@Override
public int compareTo(@NotNull UserStatusGroupStatisticsDO o) {
// 解析 date 字符串为年、月、周
String[] partsThis = date.split("-");
String[] partsOther = o.date.split("-");
// 比较年份
int yearComparison = Integer.compare(Integer.parseInt(partsThis[0]), Integer.parseInt(partsOther[0]));
if (yearComparison != 0) {
return yearComparison;
}
// 比较月份
if (partsThis.length > 1 && partsOther.length > 1) {
int monthComparison = Integer.compare(Integer.parseInt(partsThis[1]), Integer.parseInt(partsOther[1]));
if (monthComparison != 0) {
return monthComparison;
}
}
// 比较周数
if (partsThis.length > 2 && partsOther.length > 2) {
int weekComparison = Integer.compare(Integer.parseInt(partsThis[2]), Integer.parseInt(partsOther[2]));
if (weekComparison != 0) {
return weekComparison;
}
}
// 如果所有部分都相同,则按状态排序
return this.userCount.compareTo(o.userCount);
}
}
@@ -10,7 +10,9 @@ import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceAmount
import com.cf.imes.module.system.controller.admin.funds.organamount.vo.TotalSalesAmountRespVO;
import com.cf.imes.module.system.controller.admin.funds.purchase.vo.PurchaseRecordPageReqVO;
import com.cf.imes.module.system.controller.admin.funds.purchase.vo.SalesDetailsPageReqVO;
import com.cf.imes.module.system.controller.admin.statistics.vo.OrgStatusGroupStatisticsReqVO;
import com.cf.imes.module.system.dal.dataobject.funds.purchase.PurchaseRecordDO;
import com.cf.imes.module.system.dal.dataobject.funds.statistics.FundsTradeTypeGroupStatisticsDO;
import com.cf.imes.module.system.enums.pay.InvoiceStatusEnum;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -123,4 +125,12 @@ public interface PurchaseRecordMapper extends BaseMapperX<PurchaseRecordDO> {
PurchaseRecordDO::getWechatSpent, PurchaseRecordDO::getGiftMoneySpent, PurchaseRecordDO::getCreator, PurchaseRecordDO::getCreateTime)
);
}
/**
* 获取软件购买统计分组
*
* @param reqVO
* @return
*/
List<FundsTradeTypeGroupStatisticsDO> getPurchaseGroupStatistics(@Param("req") OrgStatusGroupStatisticsReqVO reqVO);
}
@@ -3,12 +3,15 @@ package com.cf.imes.module.system.dal.mysql.pay;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.cf.imes.module.system.controller.admin.funds.recharge.vo.RechargeDetailsPageReqVO;
import com.cf.imes.module.system.controller.admin.statistics.vo.OrgStatusGroupStatisticsReqVO;
import com.cf.imes.module.system.dal.dataobject.funds.statistics.FundsTradeTypeGroupStatisticsDO;
import com.cf.imes.module.system.dal.dataobject.pay.PayOrderDO;
import com.cf.imes.module.system.dal.dataobject.pay.PayOrderRechargeDetailDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
/**
* 支付订单 Mapper
@@ -32,4 +35,12 @@ public interface PayOrderMapper extends BaseMapper<PayOrderDO> {
* @return
*/
BigDecimal getRechargeTotalAmount();
/**
* 获取充值统计分组
*
* @param reqVO
* @return
*/
List<FundsTradeTypeGroupStatisticsDO> getRechargeGroupStatistics(@Param("req") OrgStatusGroupStatisticsReqVO reqVO);
}
@@ -11,8 +11,10 @@ import com.cf.imes.framework.organ.core.aop.OrganIgnore;
import com.cf.imes.framework.security.core.LoginUser;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.executor.enums.OrderDeletedEnum;
import com.cf.imes.module.system.controller.admin.statistics.vo.OrgStatusGroupStatisticsReqVO;
import com.cf.imes.module.system.controller.admin.user.vo.user.UserPageReqVO;
import com.cf.imes.module.system.dal.dataobject.user.AdminUserDO;
import com.cf.imes.module.system.dal.dataobject.user.UserStatusGroupStatisticsDO;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -208,4 +210,12 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
List<AdminUserDO> selectUserDataSource(@Param("filed") String filed,@Param("organId") Long organId,@Param("nameList") List<String> nameList);
/**
* 查询用户新增、注销分页统计
*
* @param reqVO
* @param deleted false新增
* @return
*/
List<UserStatusGroupStatisticsDO> selectUserStatusGroupStatistics(@Param("req") OrgStatusGroupStatisticsReqVO reqVO, @Param("deleted") boolean deleted);
}
@@ -0,0 +1,21 @@
package com.cf.imes.module.system.service.funds.statistics;
import com.cf.imes.module.system.controller.admin.statistics.vo.OrgStatusGroupStatisticsReqVO;
import java.util.Map;
/**
* 资金管理统计 Service
*
* @author Gqr
* @since 2025/9/30 16:06
*/
public interface FundsStatisticsService {
/**
* 获取账户资金充值、软件购买分组统计
*
* @param reqVO
* @return
*/
Map<String, Object> getFunsTradeTypeGroupStatistics(OrgStatusGroupStatisticsReqVO reqVO);
}
@@ -0,0 +1,73 @@
package com.cf.imes.module.system.service.funds.statistics;
import com.cf.imes.module.system.controller.admin.statistics.vo.OrgStatusGroupStatisticsReqVO;
import com.cf.imes.module.system.dal.dataobject.funds.statistics.FundsTradeTypeGroupStatisticsDO;
import com.cf.imes.module.system.dal.mysql.funds.purchase.PurchaseRecordMapper;
import com.cf.imes.module.system.dal.mysql.pay.PayOrderMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import static com.cf.imes.framework.common.util.time.StatisticsChangeUtils.generateDateRangeAxis;
import static com.cf.imes.framework.common.util.time.StatisticsChangeUtils.getDateList;
/**
* @author Gqr
* @since 2025/9/30 16:07
*/
@Service
public class FundsStatisticsServiceImpl implements FundsStatisticsService {
@Resource
private PurchaseRecordMapper purchaseRecordMapper;
@Resource
private PayOrderMapper payOrderMapper;
@Override
public Map<String, Object> getFunsTradeTypeGroupStatistics(OrgStatusGroupStatisticsReqVO reqVO) {
Map<String, Object> resultMap = new LinkedHashMap<>();
// 所有的日期集合
List<String> dateList = getDateList(reqVO);
// 销售额Map
LinkedHashMap<String, List<FundsTradeTypeGroupStatisticsDO>> purchaseMap = purchaseRecordMapper.getPurchaseGroupStatistics(reqVO).stream()
.sorted(Comparator.naturalOrder())
.collect(Collectors.groupingBy(FundsTradeTypeGroupStatisticsDO::getDate, LinkedHashMap::new, Collectors.toList()));
// 充值Map
LinkedHashMap<String, List<FundsTradeTypeGroupStatisticsDO>> rechargeMap = payOrderMapper.getRechargeGroupStatistics(reqVO).stream()
.sorted(Comparator.naturalOrder())
.collect(Collectors.groupingBy(FundsTradeTypeGroupStatisticsDO::getDate, LinkedHashMap::new, Collectors.toList()));
// 遍历时间跨度列表,匹配数量存入数组,没有补0存入数组
for (String dateStr : dateList) {
BigDecimal[] countArr = new BigDecimal[2];
// 充值金额
BigDecimal rechargeAmount = Optional.ofNullable(rechargeMap.get(dateStr))
.map(list -> list.stream().findFirst().orElse(new FundsTradeTypeGroupStatisticsDO()))
.map(FundsTradeTypeGroupStatisticsDO::getAmount)
.orElse(BigDecimal.valueOf(0));
countArr[0] = rechargeAmount;
// 软件购买金额
BigDecimal purchaseAmount = Optional.ofNullable(purchaseMap.get(dateStr))
.map(list -> list.stream().findFirst().orElse(new FundsTradeTypeGroupStatisticsDO()))
.map(FundsTradeTypeGroupStatisticsDO::getAmount)
.orElse(BigDecimal.valueOf(0));
countArr[1] = purchaseAmount;
resultMap.put(generateDateRangeAxis(dateStr, reqVO.getUnit()), countArr);
}
return resultMap;
}
}
@@ -17,6 +17,7 @@ import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.common.util.pinyin.PinYinUtils;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.organ.config.OrganProperties;
import com.cf.imes.framework.organ.core.aop.OrganIgnore;
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
import com.cf.imes.framework.organ.core.util.OrganUtils;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
@@ -530,6 +531,7 @@ public class OrganServiceImpl implements OrganService {
}
@Override
@OrganIgnore
public ManageOrgTotalStatisticRespVO getOrgTotal() {
ManageOrgTotalStatisticRespVO respVO = new ManageOrgTotalStatisticRespVO();
@@ -547,12 +549,14 @@ public class OrganServiceImpl implements OrganService {
}
@Override
@OrganIgnore
public PageResult<OrganRespVO> getOrgAboutExpire(PageParam param) {
IPage<OrganizationDO> organPage = organMapper.selectOrgCountExpire(param);
return new PageResult<>(BeanUtils.toBean(organPage.getRecords(), OrganRespVO.class), organPage.getTotal());
}
@Override
@OrganIgnore
public PageResult<OrganRespVO> getOrgExpired(PageParam param) {
IPage<OrganizationDO> organPage = organMapper.selectOrgCountExpired(param);
return new PageResult<>(BeanUtils.toBean(organPage.getRecords(), OrganRespVO.class), organPage.getTotal());
@@ -742,6 +746,7 @@ public class OrganServiceImpl implements OrganService {
}
@Override
@OrganIgnore
public Map<String, Object> getOrgStatusGroupStatistics(OrgStatusGroupStatisticsReqVO reqVO) {
Map<String, Object> resultMap = new LinkedHashMap<>();
@@ -6,6 +6,7 @@ import com.cf.imes.framework.common.util.collection.CollectionUtils;
import com.cf.imes.module.system.api.user.dto.OrganAdminUserRespDTO;
import com.cf.imes.module.system.controller.admin.statistics.vo.ManageUserActTotalStatisticRespVO;
import com.cf.imes.module.system.controller.admin.statistics.vo.ManageUserTotalStatisticRespVO;
import com.cf.imes.module.system.controller.admin.statistics.vo.OrgStatusGroupStatisticsReqVO;
import com.cf.imes.module.system.controller.admin.user.vo.profile.UserMobileUpdateReqVO;
import com.cf.imes.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
import com.cf.imes.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
@@ -48,7 +49,7 @@ public interface AdminUserService {
/**
* 更新用户的最后登陆信息
*
* @param id 用户编号
* @param id 用户编号
* @param loginIp 登陆 IP
*/
void updateUserLogin(Long id, String loginIp);
@@ -56,7 +57,7 @@ public interface AdminUserService {
/**
* 修改用户个人信息
*
* @param id 用户编号
* @param id 用户编号
* @param reqVO 用户个人信息
*/
void updateUserProfile(Long id, @Valid UserProfileUpdateReqVO reqVO);
@@ -64,7 +65,7 @@ public interface AdminUserService {
/**
* 修改用户个人密码
*
* @param id 用户编号
* @param id 用户编号
* @param reqVO 更新用户个人密码
*/
void updateUserPassword(Long id, @Valid UserProfileUpdatePasswordReqVO reqVO);
@@ -244,7 +245,7 @@ public interface AdminUserService {
/**
* 判断密码是否匹配
*
* @param rawPassword 未加密的密码
* @param rawPassword 未加密的密码
* @param encodedPassword 加密后的密码
* @return 是否匹配
*/
@@ -254,13 +255,14 @@ public interface AdminUserService {
* 获得指定状态和名称的用户们
*
* @param status 状态
* @param name 用户名称
* @param name 用户名称
* @return 用户们
*/
List<AdminUserDO> getUserListByTerms(Integer status , String name);
List<AdminUserDO> getUserListByTerms(Integer status, String name);
/**
* 通过组织 ID 查询组织管理员用户列表
*
* @param organIds 组织id列表
* @return 用户列表
*/
@@ -279,7 +281,7 @@ public interface AdminUserService {
/**
* 修改密保手机
*
* @param id 用户编号
* @param id 用户编号
* @param reqVO 用户个人信息
*/
void updateUserSecurityPhone(Long id, @Valid UserMobileUpdateReqVO reqVO);
@@ -291,4 +293,11 @@ public interface AdminUserService {
* @return
*/
List<AdminUserDO> getOrganUsers(Long organId);
/**
* 用户新增、注销数量统计
*
* @return
*/
Map<String, Object> getUserStatusGroupStatistics(OrgStatusGroupStatisticsReqVO reqVO);
}
@@ -30,6 +30,7 @@ import com.cf.imes.module.system.api.user.dto.OrganAdminUserRespDTO;
import com.cf.imes.module.system.constants.permission.InternalRoleConstants;
import com.cf.imes.module.system.controller.admin.statistics.vo.ManageUserActTotalStatisticRespVO;
import com.cf.imes.module.system.controller.admin.statistics.vo.ManageUserTotalStatisticRespVO;
import com.cf.imes.module.system.controller.admin.statistics.vo.OrgStatusGroupStatisticsReqVO;
import com.cf.imes.module.system.controller.admin.user.vo.profile.UserMobileUpdateReqVO;
import com.cf.imes.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
import com.cf.imes.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
@@ -38,6 +39,7 @@ import com.cf.imes.module.system.dal.dataobject.dept.DeptDO;
import com.cf.imes.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO;
import com.cf.imes.module.system.dal.dataobject.permission.UserRoleDO;
import com.cf.imes.module.system.dal.dataobject.user.AdminUserDO;
import com.cf.imes.module.system.dal.dataobject.user.UserStatusGroupStatisticsDO;
import com.cf.imes.module.system.dal.mysql.user.AdminUserMapper;
import com.cf.imes.module.system.enums.ErrorCodeConstants;
import com.cf.imes.module.system.enums.logger.LoginLogTypeEnum;
@@ -67,9 +69,12 @@ import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.*;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.framework.common.util.collection.CollectionUtils.convertSet;
import static com.cf.imes.framework.common.util.time.StatisticsChangeUtils.generateDateRangeAxis;
import static com.cf.imes.framework.common.util.time.StatisticsChangeUtils.getDateList;
import static com.cf.imes.module.system.dal.redis.RedisKeyConstants.OAUTH2_ACCESS_TOKEN;
import static com.cf.imes.module.system.enums.ErrorCodeConstants.*;
@@ -755,6 +760,7 @@ public class AdminUserServiceImpl implements AdminUserService {
}
@Override
@OrganIgnore
public ManageUserTotalStatisticRespVO getUserTotal() {
ManageUserTotalStatisticRespVO respVO = new ManageUserTotalStatisticRespVO();
@@ -772,6 +778,7 @@ public class AdminUserServiceImpl implements AdminUserService {
}
@Override
@OrganIgnore
public ManageUserActTotalStatisticRespVO getUserActTotal() {
ManageUserActTotalStatisticRespVO respVO = new ManageUserActTotalStatisticRespVO();
@@ -802,4 +809,46 @@ public class AdminUserServiceImpl implements AdminUserService {
public List<AdminUserDO> getOrganUsers(Long organId) {
return userMapper.selectList(new LambdaQueryWrapper<AdminUserDO>().eq(AdminUserDO::getOrganId, organId));
}
@Override
@OrganIgnore
public Map<String, Object> getUserStatusGroupStatistics(OrgStatusGroupStatisticsReqVO reqVO) {
Map<String, Object> resultMap = new LinkedHashMap<>();
// 所有的日期集合
List<String> dateList = getDateList(reqVO);
// 新增数量Map
LinkedHashMap<String, List<UserStatusGroupStatisticsDO>> userAddMap = userMapper.selectUserStatusGroupStatistics(reqVO, false).stream()
.sorted(Comparator.naturalOrder())
.collect(Collectors.groupingBy(UserStatusGroupStatisticsDO::getDate, LinkedHashMap::new, Collectors.toList()));
// 注销数量Map
LinkedHashMap<String, List<UserStatusGroupStatisticsDO>> userDeleteMap = userMapper.selectUserStatusGroupStatistics(reqVO, true).stream()
.sorted(Comparator.naturalOrder())
.collect(Collectors.groupingBy(UserStatusGroupStatisticsDO::getDate, LinkedHashMap::new, Collectors.toList()));
// 遍历时间跨度列表,匹配数量存入数组,没有补0存入数组
for (String dateStr : dateList) {
int[] countArr = new int[2];
// 新增数量
Integer addCount = Optional.ofNullable(userAddMap.get(dateStr))
.map(list -> list.stream().findFirst().orElse(new UserStatusGroupStatisticsDO()))
.map(UserStatusGroupStatisticsDO::getUserCount)
.orElse(0);
countArr[0] = addCount;
// 注销数量
Integer deleteCount = Optional.ofNullable(userDeleteMap.get(dateStr))
.map(list -> list.stream().findFirst().orElse(new UserStatusGroupStatisticsDO()))
.map(UserStatusGroupStatisticsDO::getUserCount)
.orElse(0);
countArr[1] = deleteCount;
resultMap.put(generateDateRangeAxis(dateStr, reqVO.getUnit()), countArr);
}
return resultMap;
}
}
@@ -26,4 +26,32 @@
select sum(price) from pay_order
where status = '${@com.cf.imes.module.system.enums.pay.PayOrderStatusEnum@SUCCESS.status}' and deleted = false
</select>
<sql id="dateCreate">
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.OrderStatisticsUnit@QUARTER.getValue()">
,CONCAT(YEAR(o.notify_time), '-', QUARTER(o.notify_time)) as date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.OrderStatisticsUnit@MONTH.getValue()">
,CONCAT(YEAR(o.notify_time), '-', MONTH(o.notify_time)) as date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.OrderStatisticsUnit@WEEK.getValue()">
,CONCAT(YEAR(o.notify_time), '-', MONTH(o.notify_time), '-', FLOOR((DayOfMonth(o.notify_time)-1)/7)+1) AS
date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.OrderStatisticsUnit@DAY.getValue()">
,CONCAT(YEAR(o.notify_time), '-', MONTH(o.notify_time), '-', DAY(o.notify_time)) as date
</if>
</sql>
<select id="getRechargeGroupStatistics"
resultType="com.cf.imes.module.system.dal.dataobject.funds.statistics.FundsTradeTypeGroupStatisticsDO">
select sum(o.price) as amount
<include refid="dateCreate"/>
from pay_order o
where o.deleted = false
and o.status = '${@com.cf.imes.module.system.enums.pay.PayOrderStatusEnum@SUCCESS.status}'
and o.trade_type = '${@com.cf.imes.module.system.enums.pay.TradeTypeEnum@RECHARGE.code}'
and o.notify_time between #{req.createTime[0]} and #{req.createTime[1]}
group by date;
</select>
</mapper>
@@ -76,4 +76,30 @@
from purchase_record
where deleted = false;
</select>
<sql id="dateCreate">
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.OrderStatisticsUnit@QUARTER.getValue()">
,CONCAT(YEAR(o.create_time), '-', QUARTER(o.create_time)) as date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.OrderStatisticsUnit@MONTH.getValue()">
,CONCAT(YEAR(o.create_time), '-', MONTH(o.create_time)) as date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.OrderStatisticsUnit@WEEK.getValue()">
,CONCAT(YEAR(o.create_time), '-', MONTH(o.create_time), '-', FLOOR((DayOfMonth(o.create_time)-1)/7)+1) AS
date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.OrderStatisticsUnit@DAY.getValue()">
,CONCAT(YEAR(o.create_time), '-', MONTH(o.create_time), '-', DAY(o.create_time)) as date
</if>
</sql>
<select id="getPurchaseGroupStatistics"
resultType="com.cf.imes.module.system.dal.dataobject.funds.statistics.FundsTradeTypeGroupStatisticsDO">
select sum(o.total_amount - o.gift_money_spent) as amount
<include refid="dateCreate"/>
from purchase_record o
where o.deleted = false and o.initial != true
and o.create_time between #{req.createTime[0]} and #{req.createTime[1]}
group by date;
</select>
</mapper>
@@ -53,4 +53,56 @@
</select>
<sql id="dateUpdate">
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.OrderStatisticsUnit@QUARTER.getValue()">
,CONCAT(YEAR(o.update_time), '-', QUARTER(o.update_time)) as date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.OrderStatisticsUnit@MONTH.getValue()">
,CONCAT(YEAR(o.update_time), '-', MONTH(o.update_time)) as date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.OrderStatisticsUnit@WEEK.getValue()">
,CONCAT(YEAR(o.update_time), '-', MONTH(o.update_time), '-', FLOOR((DayOfMonth(o.update_time)-1)/7)+1) AS date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.OrderStatisticsUnit@DAY.getValue()">
,CONCAT(YEAR(o.update_time), '-', MONTH(o.update_time), '-', DAY(o.update_time)) as date
</if>
</sql>
<sql id="dateCreate">
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.OrderStatisticsUnit@QUARTER.getValue()">
,CONCAT(YEAR(o.create_time), '-', QUARTER(o.create_time)) as date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.OrderStatisticsUnit@MONTH.getValue()">
,CONCAT(YEAR(o.create_time), '-', MONTH(o.create_time)) as date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.OrderStatisticsUnit@WEEK.getValue()">
,CONCAT(YEAR(o.create_time), '-', MONTH(o.create_time), '-', FLOOR((DayOfMonth(o.create_time)-1)/7)+1) AS
date
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.framework.common.enums.OrderStatisticsUnit@DAY.getValue()">
,CONCAT(YEAR(o.create_time), '-', MONTH(o.create_time), '-', DAY(o.create_time)) as date
</if>
</sql>
<select id="selectUserStatusGroupStatistics"
resultType="com.cf.imes.module.system.dal.dataobject.user.UserStatusGroupStatisticsDO">
select count(o.id) as userCount
<if test="deleted">
<include refid="dateUpdate"/>
</if>
<if test="!deleted">
<include refid="dateCreate"/>
</if>
from system_users o
where
<if test="deleted">
o.update_time between #{req.createTime[0]} and #{req.createTime[1]}
</if>
<if test="!deleted">
o.create_time between #{req.createTime[0]} and #{req.createTime[1]}
</if>
and o.deleted = #{deleted}
group by date;
</select>
</mapper>