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
@@ -51,7 +51,7 @@ public class StatisticsChangeUtils {
switch (StatisticsUnit.fromValue(reqVO.getUnit())) { switch (StatisticsUnit.fromValue(reqVO.getUnit())) {
case QUARTER: case QUARTER:
// 从now往前的2年 // 从now往前的2年
startTime = now.minusYears(2); startTime = now.minusYears(1);
break; break;
case MONTH: case MONTH:
// 包含now往前的12个月 // 包含now往前的12个月
@@ -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.ManageUserTotalStatisticRespVO;
import com.cf.imes.module.system.controller.admin.statistics.vo.OrgStatusGroupStatisticsReqVO; 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.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.organ.OrganService;
import com.cf.imes.module.system.service.user.AdminUserService; import com.cf.imes.module.system.service.user.AdminUserService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@@ -42,6 +43,9 @@ public class ManageStatisticsController {
@Resource @Resource
private PurchaseService purchaseService; private PurchaseService purchaseService;
@Resource
private FundsStatisticsService fundsStatisticsService;
@GetMapping("/total/org") @GetMapping("/total/org")
@Operation(summary = "组织总数") @Operation(summary = "组织总数")
public CommonResult<ManageOrgTotalStatisticRespVO> getOrgTotal() { public CommonResult<ManageOrgTotalStatisticRespVO> getOrgTotal() {
@@ -66,6 +70,18 @@ public class ManageStatisticsController {
return success(userService.getUserActTotal()); 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") @GetMapping("/org/status/group")
@Operation(summary = "新增、注销组织数量统计") @Operation(summary = "新增、注销组织数量统计")
public CommonResult<Map<String, Object>> getOrgStatusGroupStatistics(@Valid OrgStatusGroupStatisticsReqVO reqVO) { 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.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.PurchaseRecordPageReqVO;
import com.cf.imes.module.system.controller.admin.funds.purchase.vo.SalesDetailsPageReqVO; 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.purchase.PurchaseRecordDO;
import com.cf.imes.module.system.dal.dataobject.funds.statistics.FundsTradeTypeGroupStatisticsDO;
import com.cf.imes.module.system.enums.pay.InvoiceStatusEnum; import com.cf.imes.module.system.enums.pay.InvoiceStatusEnum;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@@ -123,4 +125,12 @@ public interface PurchaseRecordMapper extends BaseMapperX<PurchaseRecordDO> {
PurchaseRecordDO::getWechatSpent, PurchaseRecordDO::getGiftMoneySpent, PurchaseRecordDO::getCreator, PurchaseRecordDO::getCreateTime) 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.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; 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.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.PayOrderDO;
import com.cf.imes.module.system.dal.dataobject.pay.PayOrderRechargeDetailDO; import com.cf.imes.module.system.dal.dataobject.pay.PayOrderRechargeDetailDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List;
/** /**
* 支付订单 Mapper * 支付订单 Mapper
@@ -32,4 +35,12 @@ public interface PayOrderMapper extends BaseMapper<PayOrderDO> {
* @return * @return
*/ */
BigDecimal getRechargeTotalAmount(); 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.LoginUser;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.executor.enums.OrderDeletedEnum; 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.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.AdminUserDO;
import com.cf.imes.module.system.dal.dataobject.user.UserStatusGroupStatisticsDO;
import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; 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); 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.common.util.pinyin.PinYinUtils;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.organ.config.OrganProperties; 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.context.OrganContextHolder;
import com.cf.imes.framework.organ.core.util.OrganUtils; import com.cf.imes.framework.organ.core.util.OrganUtils;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
@@ -530,6 +531,7 @@ public class OrganServiceImpl implements OrganService {
} }
@Override @Override
@OrganIgnore
public ManageOrgTotalStatisticRespVO getOrgTotal() { public ManageOrgTotalStatisticRespVO getOrgTotal() {
ManageOrgTotalStatisticRespVO respVO = new ManageOrgTotalStatisticRespVO(); ManageOrgTotalStatisticRespVO respVO = new ManageOrgTotalStatisticRespVO();
@@ -547,12 +549,14 @@ public class OrganServiceImpl implements OrganService {
} }
@Override @Override
@OrganIgnore
public PageResult<OrganRespVO> getOrgAboutExpire(PageParam param) { public PageResult<OrganRespVO> getOrgAboutExpire(PageParam param) {
IPage<OrganizationDO> organPage = organMapper.selectOrgCountExpire(param); IPage<OrganizationDO> organPage = organMapper.selectOrgCountExpire(param);
return new PageResult<>(BeanUtils.toBean(organPage.getRecords(), OrganRespVO.class), organPage.getTotal()); return new PageResult<>(BeanUtils.toBean(organPage.getRecords(), OrganRespVO.class), organPage.getTotal());
} }
@Override @Override
@OrganIgnore
public PageResult<OrganRespVO> getOrgExpired(PageParam param) { public PageResult<OrganRespVO> getOrgExpired(PageParam param) {
IPage<OrganizationDO> organPage = organMapper.selectOrgCountExpired(param); IPage<OrganizationDO> organPage = organMapper.selectOrgCountExpired(param);
return new PageResult<>(BeanUtils.toBean(organPage.getRecords(), OrganRespVO.class), organPage.getTotal()); return new PageResult<>(BeanUtils.toBean(organPage.getRecords(), OrganRespVO.class), organPage.getTotal());
@@ -742,6 +746,7 @@ public class OrganServiceImpl implements OrganService {
} }
@Override @Override
@OrganIgnore
public Map<String, Object> getOrgStatusGroupStatistics(OrgStatusGroupStatisticsReqVO reqVO) { public Map<String, Object> getOrgStatusGroupStatistics(OrgStatusGroupStatisticsReqVO reqVO) {
Map<String, Object> resultMap = new LinkedHashMap<>(); 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.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.ManageUserActTotalStatisticRespVO;
import com.cf.imes.module.system.controller.admin.statistics.vo.ManageUserTotalStatisticRespVO; 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.UserMobileUpdateReqVO;
import com.cf.imes.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import com.cf.imes.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
import com.cf.imes.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import com.cf.imes.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
@@ -261,6 +262,7 @@ public interface AdminUserService {
/** /**
* 通过组织 ID 查询组织管理员用户列表 * 通过组织 ID 查询组织管理员用户列表
*
* @param organIds 组织id列表 * @param organIds 组织id列表
* @return 用户列表 * @return 用户列表
*/ */
@@ -291,4 +293,11 @@ public interface AdminUserService {
* @return * @return
*/ */
List<AdminUserDO> getOrganUsers(Long organId); 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.constants.permission.InternalRoleConstants;
import com.cf.imes.module.system.controller.admin.statistics.vo.ManageUserActTotalStatisticRespVO; 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.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.UserMobileUpdateReqVO;
import com.cf.imes.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import com.cf.imes.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
import com.cf.imes.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; 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.oauth2.OAuth2AccessTokenDO;
import com.cf.imes.module.system.dal.dataobject.permission.UserRoleDO; 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.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.dal.mysql.user.AdminUserMapper;
import com.cf.imes.module.system.enums.ErrorCodeConstants; import com.cf.imes.module.system.enums.ErrorCodeConstants;
import com.cf.imes.module.system.enums.logger.LoginLogTypeEnum; import com.cf.imes.module.system.enums.logger.LoginLogTypeEnum;
@@ -67,9 +69,12 @@ import java.time.LocalDateTime;
import java.time.LocalTime; import java.time.LocalTime;
import java.util.*; import java.util.*;
import java.util.regex.Pattern; 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.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.framework.common.util.collection.CollectionUtils.convertSet; 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.dal.redis.RedisKeyConstants.OAUTH2_ACCESS_TOKEN;
import static com.cf.imes.module.system.enums.ErrorCodeConstants.*; import static com.cf.imes.module.system.enums.ErrorCodeConstants.*;
@@ -755,6 +760,7 @@ public class AdminUserServiceImpl implements AdminUserService {
} }
@Override @Override
@OrganIgnore
public ManageUserTotalStatisticRespVO getUserTotal() { public ManageUserTotalStatisticRespVO getUserTotal() {
ManageUserTotalStatisticRespVO respVO = new ManageUserTotalStatisticRespVO(); ManageUserTotalStatisticRespVO respVO = new ManageUserTotalStatisticRespVO();
@@ -772,6 +778,7 @@ public class AdminUserServiceImpl implements AdminUserService {
} }
@Override @Override
@OrganIgnore
public ManageUserActTotalStatisticRespVO getUserActTotal() { public ManageUserActTotalStatisticRespVO getUserActTotal() {
ManageUserActTotalStatisticRespVO respVO = new ManageUserActTotalStatisticRespVO(); ManageUserActTotalStatisticRespVO respVO = new ManageUserActTotalStatisticRespVO();
@@ -802,4 +809,46 @@ public class AdminUserServiceImpl implements AdminUserService {
public List<AdminUserDO> getOrganUsers(Long organId) { public List<AdminUserDO> getOrganUsers(Long organId) {
return userMapper.selectList(new LambdaQueryWrapper<AdminUserDO>().eq(AdminUserDO::getOrganId, 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 select sum(price) from pay_order
where status = '${@com.cf.imes.module.system.enums.pay.PayOrderStatusEnum@SUCCESS.status}' and deleted = false where status = '${@com.cf.imes.module.system.enums.pay.PayOrderStatusEnum@SUCCESS.status}' and deleted = false
</select> </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> </mapper>
@@ -76,4 +76,30 @@
from purchase_record from purchase_record
where deleted = false; where deleted = false;
</select> </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> </mapper>
@@ -53,4 +53,56 @@
</select> </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> </mapper>