mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-13 05:12:07 +08:00
1、新增账户资金统计、账户数量统计;2、管理端各项统计增加忽略组织标记;
This commit is contained in:
+1
-1
@@ -51,7 +51,7 @@ public class StatisticsChangeUtils {
|
||||
switch (StatisticsUnit.fromValue(reqVO.getUnit())) {
|
||||
case QUARTER:
|
||||
// 从now往前的2年
|
||||
startTime = now.minusYears(2);
|
||||
startTime = now.minusYears(1);
|
||||
break;
|
||||
case MONTH:
|
||||
// 包含now往前的12个月
|
||||
|
||||
+16
@@ -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) {
|
||||
|
||||
+56
@@ -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);
|
||||
}
|
||||
}
|
||||
+53
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
+11
@@ -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);
|
||||
}
|
||||
|
||||
+10
@@ -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);
|
||||
}
|
||||
|
||||
+21
@@ -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);
|
||||
}
|
||||
+73
@@ -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;
|
||||
}
|
||||
}
|
||||
+5
@@ -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<>();
|
||||
|
||||
+16
-7
@@ -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);
|
||||
}
|
||||
|
||||
+49
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+28
@@ -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>
|
||||
+26
@@ -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>
|
||||
+52
@@ -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>
|
||||
Reference in New Issue
Block a user