diff --git a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/time/StatisticsChangeUtils.java b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/time/StatisticsChangeUtils.java index 30b9067ce..f480064c8 100644 --- a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/time/StatisticsChangeUtils.java +++ b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/time/StatisticsChangeUtils.java @@ -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个月 diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/statistics/ManageStatisticsController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/statistics/ManageStatisticsController.java index 3562c34ea..9dc91d212 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/statistics/ManageStatisticsController.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/statistics/ManageStatisticsController.java @@ -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 getOrgTotal() { @@ -66,6 +70,18 @@ public class ManageStatisticsController { return success(userService.getUserActTotal()); } + @GetMapping("/user/status/group") + @Operation(summary = "新增、注销用户统计") + public CommonResult> getUserStatusGroupStatistics(@Valid OrgStatusGroupStatisticsReqVO reqVO) { + return success(userService.getUserStatusGroupStatistics(reqVO)); + } + + @GetMapping("/funds/tradeType/group") + @Operation(summary = "账户资金充值、软件购买统计") + public CommonResult> getFunsTradeTypeGroupStatistics(@Valid OrgStatusGroupStatisticsReqVO reqVO) { + return success(fundsStatisticsService.getFunsTradeTypeGroupStatistics(reqVO)); + } + @GetMapping("/org/status/group") @Operation(summary = "新增、注销组织数量统计") public CommonResult> getOrgStatusGroupStatistics(@Valid OrgStatusGroupStatisticsReqVO reqVO) { diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/statistics/FundsTradeTypeGroupStatisticsDO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/statistics/FundsTradeTypeGroupStatisticsDO.java new file mode 100644 index 000000000..13f64685d --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/statistics/FundsTradeTypeGroupStatisticsDO.java @@ -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 { + + /** + * 金额 + */ + 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); + } +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/user/UserStatusGroupStatisticsDO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/user/UserStatusGroupStatisticsDO.java new file mode 100644 index 000000000..e2f8bcc65 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/user/UserStatusGroupStatisticsDO.java @@ -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 { + /** + * 用户数量 + */ + 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); + } +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/purchase/PurchaseRecordMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/purchase/PurchaseRecordMapper.java index fff807f10..cdf3b7152 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/purchase/PurchaseRecordMapper.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/purchase/PurchaseRecordMapper.java @@ -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::getWechatSpent, PurchaseRecordDO::getGiftMoneySpent, PurchaseRecordDO::getCreator, PurchaseRecordDO::getCreateTime) ); } + + /** + * 获取软件购买统计分组 + * + * @param reqVO + * @return + */ + List getPurchaseGroupStatistics(@Param("req") OrgStatusGroupStatisticsReqVO reqVO); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/pay/PayOrderMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/pay/PayOrderMapper.java index 96977ac4b..8f904b71e 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/pay/PayOrderMapper.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/pay/PayOrderMapper.java @@ -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 { * @return */ BigDecimal getRechargeTotalAmount(); + + /** + * 获取充值统计分组 + * + * @param reqVO + * @return + */ + List getRechargeGroupStatistics(@Param("req") OrgStatusGroupStatisticsReqVO reqVO); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/user/AdminUserMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/user/AdminUserMapper.java index e2dd039ed..a2c1acc71 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/user/AdminUserMapper.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/user/AdminUserMapper.java @@ -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 { List selectUserDataSource(@Param("filed") String filed,@Param("organId") Long organId,@Param("nameList") List nameList); + /** + * 查询用户新增、注销分页统计 + * + * @param reqVO + * @param deleted false新增 + * @return + */ + List selectUserStatusGroupStatistics(@Param("req") OrgStatusGroupStatisticsReqVO reqVO, @Param("deleted") boolean deleted); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/statistics/FundsStatisticsService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/statistics/FundsStatisticsService.java new file mode 100644 index 000000000..a78202144 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/statistics/FundsStatisticsService.java @@ -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 getFunsTradeTypeGroupStatistics(OrgStatusGroupStatisticsReqVO reqVO); +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/statistics/FundsStatisticsServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/statistics/FundsStatisticsServiceImpl.java new file mode 100644 index 000000000..9e7a52c0d --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/statistics/FundsStatisticsServiceImpl.java @@ -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 getFunsTradeTypeGroupStatistics(OrgStatusGroupStatisticsReqVO reqVO) { + Map resultMap = new LinkedHashMap<>(); + + // 所有的日期集合 + List dateList = getDateList(reqVO); + + // 销售额Map + LinkedHashMap> purchaseMap = purchaseRecordMapper.getPurchaseGroupStatistics(reqVO).stream() + .sorted(Comparator.naturalOrder()) + .collect(Collectors.groupingBy(FundsTradeTypeGroupStatisticsDO::getDate, LinkedHashMap::new, Collectors.toList())); + + // 充值Map + LinkedHashMap> 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; + } +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/organ/OrganServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/organ/OrganServiceImpl.java index edfbc0c72..0fb424182 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/organ/OrganServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/organ/OrganServiceImpl.java @@ -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 getOrgAboutExpire(PageParam param) { IPage organPage = organMapper.selectOrgCountExpire(param); return new PageResult<>(BeanUtils.toBean(organPage.getRecords(), OrganRespVO.class), organPage.getTotal()); } @Override + @OrganIgnore public PageResult getOrgExpired(PageParam param) { IPage 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 getOrgStatusGroupStatistics(OrgStatusGroupStatisticsReqVO reqVO) { Map resultMap = new LinkedHashMap<>(); diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/user/AdminUserService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/user/AdminUserService.java index 93a106113..642ae94c2 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/user/AdminUserService.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/user/AdminUserService.java @@ -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 getUserListByTerms(Integer status , String name); + List 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 getOrganUsers(Long organId); + + /** + * 用户新增、注销数量统计 + * + * @return + */ + Map getUserStatusGroupStatistics(OrgStatusGroupStatisticsReqVO reqVO); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/user/AdminUserServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/user/AdminUserServiceImpl.java index a82e1f990..af551a49f 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/user/AdminUserServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/user/AdminUserServiceImpl.java @@ -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 getOrganUsers(Long organId) { return userMapper.selectList(new LambdaQueryWrapper().eq(AdminUserDO::getOrganId, organId)); } + + @Override + @OrganIgnore + public Map getUserStatusGroupStatistics(OrgStatusGroupStatisticsReqVO reqVO) { + Map resultMap = new LinkedHashMap<>(); + + // 所有的日期集合 + List dateList = getDateList(reqVO); + + // 新增数量Map + LinkedHashMap> userAddMap = userMapper.selectUserStatusGroupStatistics(reqVO, false).stream() + .sorted(Comparator.naturalOrder()) + .collect(Collectors.groupingBy(UserStatusGroupStatisticsDO::getDate, LinkedHashMap::new, Collectors.toList())); + + // 注销数量Map + LinkedHashMap> 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; + } } diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/mapper/funds/pay/PayOrderMapper.xml b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/funds/pay/PayOrderMapper.xml index f20240bb5..e57fa0435 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/mapper/funds/pay/PayOrderMapper.xml +++ b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/funds/pay/PayOrderMapper.xml @@ -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 + + + + ,CONCAT(YEAR(o.notify_time), '-', QUARTER(o.notify_time)) as date + + + ,CONCAT(YEAR(o.notify_time), '-', MONTH(o.notify_time)) as date + + + ,CONCAT(YEAR(o.notify_time), '-', MONTH(o.notify_time), '-', FLOOR((DayOfMonth(o.notify_time)-1)/7)+1) AS + date + + + ,CONCAT(YEAR(o.notify_time), '-', MONTH(o.notify_time), '-', DAY(o.notify_time)) as date + + + + \ No newline at end of file diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/mapper/funds/purchase/PurchaseMapper.xml b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/funds/purchase/PurchaseMapper.xml index 0f2fde302..0a1364f43 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/mapper/funds/purchase/PurchaseMapper.xml +++ b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/funds/purchase/PurchaseMapper.xml @@ -76,4 +76,30 @@ from purchase_record where deleted = false; + + + + ,CONCAT(YEAR(o.create_time), '-', QUARTER(o.create_time)) as date + + + ,CONCAT(YEAR(o.create_time), '-', MONTH(o.create_time)) as date + + + ,CONCAT(YEAR(o.create_time), '-', MONTH(o.create_time), '-', FLOOR((DayOfMonth(o.create_time)-1)/7)+1) AS + date + + + ,CONCAT(YEAR(o.create_time), '-', MONTH(o.create_time), '-', DAY(o.create_time)) as date + + + + \ No newline at end of file diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/mapper/process/AdminUserMapper.xml b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/process/AdminUserMapper.xml index dac5339ba..00cae70fc 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/mapper/process/AdminUserMapper.xml +++ b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/process/AdminUserMapper.xml @@ -53,4 +53,56 @@ + + + + ,CONCAT(YEAR(o.update_time), '-', QUARTER(o.update_time)) as date + + + ,CONCAT(YEAR(o.update_time), '-', MONTH(o.update_time)) as date + + + ,CONCAT(YEAR(o.update_time), '-', MONTH(o.update_time), '-', FLOOR((DayOfMonth(o.update_time)-1)/7)+1) AS date + + + ,CONCAT(YEAR(o.update_time), '-', MONTH(o.update_time), '-', DAY(o.update_time)) as date + + + + + + ,CONCAT(YEAR(o.create_time), '-', QUARTER(o.create_time)) as date + + + ,CONCAT(YEAR(o.create_time), '-', MONTH(o.create_time)) as date + + + ,CONCAT(YEAR(o.create_time), '-', MONTH(o.create_time), '-', FLOOR((DayOfMonth(o.create_time)-1)/7)+1) AS + date + + + ,CONCAT(YEAR(o.create_time), '-', MONTH(o.create_time), '-', DAY(o.create_time)) as date + + + + \ No newline at end of file