From 18f9838338810d04ad80db7215fa7987047bd4ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E8=89=AF=28004796=29?= Date: Mon, 5 Feb 2024 17:34:43 +0800 Subject: [PATCH] 123333 --- .../controller/cai/admin/HomeController.java | 12 ++ .../controller/system/SysIndexController.java | 9 +- .../ruoyi/cai/domain/DayIncomeStatistics.java | 16 ++- .../cai/dto/admin/vo/home/HomeAmountLine.java | 64 +++++++++++ .../dto/admin/vo/home/HomeStaticIndexVo.java | 13 ++- .../ruoyi/cai/manager/AdminHomeManager.java | 105 ++++++++++++++++++ .../cai/mapper/DayIncomeStatisticsMapper.java | 5 + .../java/com/ruoyi/cai/util/CaiDateUtil.java | 8 ++ .../mapper/cai/DayIncomeStatisticsMapper.xml | 11 ++ 9 files changed, 226 insertions(+), 17 deletions(-) create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/home/HomeAmountLine.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/admin/HomeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/admin/HomeController.java index 7c6e6002..e0784f06 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/admin/HomeController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/admin/HomeController.java @@ -1,9 +1,11 @@ package com.ruoyi.web.controller.cai.admin; +import com.ruoyi.cai.dto.admin.vo.home.HomeAmountLine; import com.ruoyi.cai.dto.admin.vo.home.HomeStaticIndexVo; import com.ruoyi.cai.dto.admin.vo.rank.RankNodeAdminVo; import com.ruoyi.cai.enums.rank.RankTimeTypeEnum; import com.ruoyi.cai.manager.AdminHomeManager; +import com.ruoyi.common.constant.DateConstant; import com.ruoyi.common.core.domain.R; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; @@ -12,6 +14,8 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.List; @Validated @@ -34,4 +38,12 @@ public class HomeController { List rank = adminHomeManager.rank(rankType, RankTimeTypeEnum.getByCode(rankTime)); return R.ok(rank); } + + @GetMapping("/static/amountLine") + public R staticAmountLine(String beginDate, String endDate){ + LocalDate begin = LocalDate.parse(beginDate, DateTimeFormatter.ofPattern(DateConstant.PATTERN_DATE)); + LocalDate end = LocalDate.parse(endDate, DateTimeFormatter.ofPattern(DateConstant.PATTERN_DATE)); + HomeAmountLine amountLine = adminHomeManager.amountLine(begin, end); + return R.ok(amountLine); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java index 69825740..f47bf0d4 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java @@ -1,8 +1,6 @@ package com.ruoyi.web.controller.system; import cn.dev33.satoken.annotation.SaIgnore; -import com.ruoyi.common.config.RuoYiConfig; -import com.ruoyi.common.utils.StringUtils; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @@ -16,17 +14,12 @@ import org.springframework.web.bind.annotation.RestController; @RestController public class SysIndexController { - /** - * 系统基础配置 - */ - private final RuoYiConfig ruoyiConfig; - /** * 访问首页,提示语 */ @SaIgnore @GetMapping("/") public String index() { - return StringUtils.format("欢迎使用{}后台管理框架,当前版本:v{},请通过前端地址访问。", ruoyiConfig.getName(), ruoyiConfig.getVersion()); + return "ok"; } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/DayIncomeStatistics.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/DayIncomeStatistics.java index 1e67b182..79e4944e 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/DayIncomeStatistics.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/DayIncomeStatistics.java @@ -1,6 +1,7 @@ package com.ruoyi.cai.domain; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; @@ -36,26 +37,29 @@ public class DayIncomeStatistics implements Serializable { @DateTimeFormat(pattern = DateConstant.PATTERN_DATE) @JsonFormat(pattern = DateConstant.PATTERN_DATE) private LocalDate date; + + @TableField(exist = false) + private String dateStr; /** * 充值金额 */ private BigDecimal expInMoney; + /** + * 充值订单 + */ + private Integer orderCount; /** * 提现金额 */ private BigDecimal outMoney; - /** - * vip金额 - */ - private BigDecimal vipInMoney; /** * 提现数量 */ private Integer cashCount; /** - * 充值订单 + * vip金额 */ - private Integer orderCount; + private BigDecimal vipInMoney; /** * vip订单 */ diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/home/HomeAmountLine.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/home/HomeAmountLine.java new file mode 100644 index 00000000..ff628628 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/home/HomeAmountLine.java @@ -0,0 +1,64 @@ +package com.ruoyi.cai.dto.admin.vo.home; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class HomeAmountLine { + private List x = new ArrayList<>(); + @Schema(description = "充值金额") + private List expInMoneyData = new ArrayList<>(); + @Schema(description = "充值订单数") + private List orderCountData = new ArrayList<>(); + + @Schema(description = "提现金额") + private List outMoneyData = new ArrayList<>(); + + @Schema(description = "提现数量") + private List cashCountData = new ArrayList<>(); + + @Schema(description = "手工减少余额数") + private List modifyCoinSubData = new ArrayList<>(); + + @Schema(description = "手工新增余额数") + private List modifyCoinAddData = new ArrayList<>(); + + @Schema(description = "手工减少收益数") + private List modifyIncomeSubData = new ArrayList<>(); + + @Schema(description = "手工新增余额数") + private List modifyIncomeAddData = new ArrayList<>(); + + + public void addX(String date){ + x.add(date); + } + + public void addExpInMoneyData(Number expInMoney){ + expInMoneyData.add(expInMoney); + } + public void addOrderCountData(Number orderCount){ + orderCountData.add(orderCount); + } + public void addOutMoneyData(Number outMoney){ + outMoneyData.add(outMoney); + } + public void addCashCountData(Number cashCount){ + cashCountData.add(cashCount); + } + public void addModifyCoinSubData(Number modifyCoinSub){ + modifyCoinSubData.add(modifyCoinSub); + } + public void addModifyCoinAddData(Number modifyCoinAdd){ + modifyCoinAddData.add(modifyCoinAdd); + } + public void addModifyIncomeSubData(Number modifyIncomeSub){ + modifyIncomeSubData.add(modifyIncomeSub); + } + public void addModifyIncomeAddData(Number modifyIncomeAdd){ + modifyIncomeAddData.add(modifyIncomeAdd); + } +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/home/HomeStaticIndexVo.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/home/HomeStaticIndexVo.java index 925dc58b..31a43dcd 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/home/HomeStaticIndexVo.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/home/HomeStaticIndexVo.java @@ -1,21 +1,28 @@ package com.ruoyi.cai.dto.admin.vo.home; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.math.BigDecimal; @Data public class HomeStaticIndexVo { + @Schema(description = "今日登陆人数") private Long todayLoginNum; + @Schema(description = "登陆与昨日相比") private BigDecimal todayLoginDiffLast; - + @Schema(description = "主播人数") private Long anchorNum; - + @Schema(description = "今日充值金额") private BigDecimal todayRechargeAmountNum; + @Schema(description = "今日充值订单数") private Long todayRechargeNum; + @Schema(description = "今日充值与昨日相比") private BigDecimal todayRechargeAmountDiffLast; - + @Schema(description = "今日提现金额") private BigDecimal todayWithdrawAmount; + @Schema(description = "今日提现订单数") private Long todayWithdrawNum; + @Schema(description = "今日充值与昨日相比") private BigDecimal todayWithdrawAmountDiffLast; } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/AdminHomeManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/AdminHomeManager.java index 02f3b565..613aa15f 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/AdminHomeManager.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/AdminHomeManager.java @@ -1,27 +1,37 @@ package com.ruoyi.cai.manager; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.cai.cache.RechargeTotalCache; import com.ruoyi.cai.cache.WithdrawTotalCache; import com.ruoyi.cai.cache.bean.RechargeTotalCacheBean; import com.ruoyi.cai.cache.bean.WithdrawTotalCacheBean; +import com.ruoyi.cai.domain.DayIncomeStatistics; import com.ruoyi.cai.domain.User; +import com.ruoyi.cai.dto.admin.vo.home.HomeAmountLine; import com.ruoyi.cai.dto.admin.vo.home.HomeStaticIndexVo; import com.ruoyi.cai.dto.admin.vo.rank.RankNodeAdminVo; import com.ruoyi.cai.enums.rank.RankTimeTypeEnum; +import com.ruoyi.cai.mapper.DayIncomeStatisticsMapper; import com.ruoyi.cai.rank.RankAdminManager; import com.ruoyi.cai.rank.RankManager; import com.ruoyi.cai.rank.RankNode; import com.ruoyi.cai.rank.bean.RankAdminNode; import com.ruoyi.cai.service.AnchorService; import com.ruoyi.cai.service.UserService; +import com.ruoyi.cai.util.CaiDateUtil; import com.ruoyi.cai.util.CaiNumUtil; +import com.ruoyi.common.exception.ServiceException; import com.ruoyi.framework.OnlineUserTodayCache; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import javax.annotation.Resource; +import java.math.BigDecimal; import java.time.LocalDate; +import java.time.Period; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -143,4 +153,99 @@ public class AdminHomeManager { vo.setTodayWithdrawAmountDiffLast(CaiNumUtil.diffRate(todayWithdraw.getAmount(),lastTodayWithdraw.getAmount())); return vo; } + + @Resource + private DayIncomeStatisticsMapper dayIncomeStatisticsMapper; + + public HomeAmountLine amountLine(LocalDate begin, LocalDate end) { + if(begin == null || end == null){ + return new HomeAmountLine(); + } + if(begin.isAfter(end)){ + return new HomeAmountLine(); + } + Period period = Period.between(begin, end); + if(period.getYears() > 2){ + throw new ServiceException("一次性只能查询2年内的数据"); + } + HomeAmountLine amountLine = new HomeAmountLine(); + if(period.getMonths() == 0){ // 按天统计 + List statisticsList = dayIncomeStatisticsMapper.selectList(Wrappers.lambdaQuery(DayIncomeStatistics.class) + .between(DayIncomeStatistics::getDate, begin, end)); + Map statisticsMap = statisticsList.stream().collect(Collectors.toMap(DayIncomeStatistics::getDate, Function.identity())); + while (begin.isBefore(end)){ + DayIncomeStatistics statistics = statisticsMap.get(begin); + String beginStr = CaiDateUtil.formatDate(begin); + BigDecimal expInMoney = BigDecimal.ZERO; + Integer orderCount = 0; + BigDecimal outMoney = BigDecimal.ZERO; + Integer cashCount = 0; + Long modifyCoinAdd = 0L; + Long modifyCoinSub = 0L; + Long modifyIncomeAdd = 0L; + Long modifyIncomeSub = 0L; + if(statistics != null){ + expInMoney = statistics.getExpInMoney(); + orderCount = statistics.getOrderCount(); + outMoney = statistics.getOutMoney(); + cashCount = statistics.getCashCount(); + modifyCoinAdd = statistics.getModifyCoinAdd(); + modifyCoinSub = statistics.getModifyCoinSub(); + modifyIncomeAdd = statistics.getModifyIncomeAdd(); + modifyIncomeSub = statistics.getModifyIncomeSub(); + } + amountLine.addX(beginStr); + amountLine.addExpInMoneyData(expInMoney); + amountLine.addOrderCountData(orderCount); + amountLine.addOutMoneyData(outMoney); + amountLine.addCashCountData(cashCount); + amountLine.addModifyCoinAddData(modifyCoinAdd); + amountLine.addModifyCoinSubData(modifyCoinSub); + amountLine.addModifyIncomeAddData(modifyIncomeAdd); + amountLine.addModifyIncomeSubData(modifyIncomeSub); + begin = begin.plusDays(1); + } + } + else { // 按月统计 + List statisticsList = dayIncomeStatisticsMapper.statisticsByMonth(begin,end); + Map statisticsMap = statisticsList.stream().collect(Collectors.toMap(DayIncomeStatistics::getDateStr, Function.identity())); + String endMonth = end.format(DateTimeFormatter.ofPattern("yyyy-MM")); + while (true) { + String beginMonth = begin.format(DateTimeFormatter.ofPattern("yyyy-MM")); + DayIncomeStatistics statistics = statisticsMap.get(beginMonth); + BigDecimal expInMoney = BigDecimal.ZERO; + Integer orderCount = 0; + BigDecimal outMoney = BigDecimal.ZERO; + Integer cashCount = 0; + Long modifyCoinAdd = 0L; + Long modifyCoinSub = 0L; + Long modifyIncomeAdd = 0L; + Long modifyIncomeSub = 0L; + if(statistics != null){ + expInMoney = statistics.getExpInMoney(); + orderCount = statistics.getOrderCount(); + outMoney = statistics.getOutMoney(); + cashCount = statistics.getCashCount(); + modifyCoinAdd = statistics.getModifyCoinAdd(); + modifyCoinSub = statistics.getModifyCoinSub(); + modifyIncomeAdd = statistics.getModifyIncomeAdd(); + modifyIncomeSub = statistics.getModifyIncomeSub(); + } + amountLine.addX(beginMonth); + amountLine.addExpInMoneyData(expInMoney); + amountLine.addOrderCountData(orderCount); + amountLine.addOutMoneyData(outMoney); + amountLine.addCashCountData(cashCount); + amountLine.addModifyCoinAddData(modifyCoinAdd); + amountLine.addModifyCoinSubData(modifyCoinSub); + amountLine.addModifyIncomeAddData(modifyIncomeAdd); + amountLine.addModifyIncomeSubData(modifyIncomeSub); + if(beginMonth.equals(endMonth)){ + break; + } + begin = begin.plusMonths(1); + } + } + return amountLine; + } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/DayIncomeStatisticsMapper.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/DayIncomeStatisticsMapper.java index 85da8e96..33bb4c4e 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/DayIncomeStatisticsMapper.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/DayIncomeStatisticsMapper.java @@ -2,6 +2,10 @@ package com.ruoyi.cai.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.cai.domain.DayIncomeStatistics; +import org.apache.ibatis.annotations.Param; + +import java.time.LocalDate; +import java.util.List; /** * 每日账单统计Mapper接口 @@ -11,4 +15,5 @@ import com.ruoyi.cai.domain.DayIncomeStatistics; */ public interface DayIncomeStatisticsMapper extends BaseMapper { + List statisticsByMonth(@Param("begin") LocalDate begin, @Param("end") LocalDate end); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/util/CaiDateUtil.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/util/CaiDateUtil.java index 63f4f226..d80555d0 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/util/CaiDateUtil.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/util/CaiDateUtil.java @@ -19,6 +19,10 @@ public class CaiDateUtil { return ChronoUnit.SECONDS.between(after, before); } + public static long diffDays(LocalDateTime before, LocalDateTime after){ + return ChronoUnit.DAYS.between(after, before); + } + public static String betweenShowString(LocalDateTime minTime,LocalDateTime maxTime){ Duration duration = Duration.between(minTime, maxTime); long seconds = duration.getSeconds(); @@ -102,4 +106,8 @@ public class CaiDateUtil { public static String getCurrentTimeStr() { return localDateTimeToString(LocalDateTime.now()); } + + public static String formatDate(LocalDate begin) { + return begin.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + } } diff --git a/ruoyi-cai/src/main/resources/mapper/cai/DayIncomeStatisticsMapper.xml b/ruoyi-cai/src/main/resources/mapper/cai/DayIncomeStatisticsMapper.xml index 973b2939..4060a524 100644 --- a/ruoyi-cai/src/main/resources/mapper/cai/DayIncomeStatisticsMapper.xml +++ b/ruoyi-cai/src/main/resources/mapper/cai/DayIncomeStatisticsMapper.xml @@ -20,6 +20,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" +