This commit is contained in:
张良(004796)
2024-02-05 17:34:43 +08:00
parent 99e0772540
commit 18f9838338
9 changed files with 226 additions and 17 deletions

View File

@@ -1,9 +1,11 @@
package com.ruoyi.web.controller.cai.admin; 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.home.HomeStaticIndexVo;
import com.ruoyi.cai.dto.admin.vo.rank.RankNodeAdminVo; import com.ruoyi.cai.dto.admin.vo.rank.RankNodeAdminVo;
import com.ruoyi.cai.enums.rank.RankTimeTypeEnum; import com.ruoyi.cai.enums.rank.RankTimeTypeEnum;
import com.ruoyi.cai.manager.AdminHomeManager; import com.ruoyi.cai.manager.AdminHomeManager;
import com.ruoyi.common.constant.DateConstant;
import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.R;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired; 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.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List; import java.util.List;
@Validated @Validated
@@ -34,4 +38,12 @@ public class HomeController {
List<RankNodeAdminVo> rank = adminHomeManager.rank(rankType, RankTimeTypeEnum.getByCode(rankTime)); List<RankNodeAdminVo> rank = adminHomeManager.rank(rankType, RankTimeTypeEnum.getByCode(rankTime));
return R.ok(rank); return R.ok(rank);
} }
@GetMapping("/static/amountLine")
public R<HomeAmountLine> 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);
}
} }

View File

@@ -1,8 +1,6 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import cn.dev33.satoken.annotation.SaIgnore; import cn.dev33.satoken.annotation.SaIgnore;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.utils.StringUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@@ -16,17 +14,12 @@ import org.springframework.web.bind.annotation.RestController;
@RestController @RestController
public class SysIndexController { public class SysIndexController {
/**
* 系统基础配置
*/
private final RuoYiConfig ruoyiConfig;
/** /**
* 访问首页,提示语 * 访问首页,提示语
*/ */
@SaIgnore @SaIgnore
@GetMapping("/") @GetMapping("/")
public String index() { public String index() {
return StringUtils.format("欢迎使用{}后台管理框架当前版本v{},请通过前端地址访问。", ruoyiConfig.getName(), ruoyiConfig.getVersion()); return "ok";
} }
} }

View File

@@ -1,6 +1,7 @@
package com.ruoyi.cai.domain; package com.ruoyi.cai.domain;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
@@ -36,26 +37,29 @@ public class DayIncomeStatistics implements Serializable {
@DateTimeFormat(pattern = DateConstant.PATTERN_DATE) @DateTimeFormat(pattern = DateConstant.PATTERN_DATE)
@JsonFormat(pattern = DateConstant.PATTERN_DATE) @JsonFormat(pattern = DateConstant.PATTERN_DATE)
private LocalDate date; private LocalDate date;
@TableField(exist = false)
private String dateStr;
/** /**
* 充值金额 * 充值金额
*/ */
private BigDecimal expInMoney; private BigDecimal expInMoney;
/**
* 充值订单
*/
private Integer orderCount;
/** /**
* 提现金额 * 提现金额
*/ */
private BigDecimal outMoney; private BigDecimal outMoney;
/**
* vip金额
*/
private BigDecimal vipInMoney;
/** /**
* 提现数量 * 提现数量
*/ */
private Integer cashCount; private Integer cashCount;
/** /**
* 充值订单 * vip金额
*/ */
private Integer orderCount; private BigDecimal vipInMoney;
/** /**
* vip订单 * vip订单
*/ */

View File

@@ -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<String> x = new ArrayList<>();
@Schema(description = "充值金额")
private List<Number> expInMoneyData = new ArrayList<>();
@Schema(description = "充值订单数")
private List<Number> orderCountData = new ArrayList<>();
@Schema(description = "提现金额")
private List<Number> outMoneyData = new ArrayList<>();
@Schema(description = "提现数量")
private List<Number> cashCountData = new ArrayList<>();
@Schema(description = "手工减少余额数")
private List<Number> modifyCoinSubData = new ArrayList<>();
@Schema(description = "手工新增余额数")
private List<Number> modifyCoinAddData = new ArrayList<>();
@Schema(description = "手工减少收益数")
private List<Number> modifyIncomeSubData = new ArrayList<>();
@Schema(description = "手工新增余额数")
private List<Number> 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);
}
}

View File

@@ -1,21 +1,28 @@
package com.ruoyi.cai.dto.admin.vo.home; package com.ruoyi.cai.dto.admin.vo.home;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal; import java.math.BigDecimal;
@Data @Data
public class HomeStaticIndexVo { public class HomeStaticIndexVo {
@Schema(description = "今日登陆人数")
private Long todayLoginNum; private Long todayLoginNum;
@Schema(description = "登陆与昨日相比")
private BigDecimal todayLoginDiffLast; private BigDecimal todayLoginDiffLast;
@Schema(description = "主播人数")
private Long anchorNum; private Long anchorNum;
@Schema(description = "今日充值金额")
private BigDecimal todayRechargeAmountNum; private BigDecimal todayRechargeAmountNum;
@Schema(description = "今日充值订单数")
private Long todayRechargeNum; private Long todayRechargeNum;
@Schema(description = "今日充值与昨日相比")
private BigDecimal todayRechargeAmountDiffLast; private BigDecimal todayRechargeAmountDiffLast;
@Schema(description = "今日提现金额")
private BigDecimal todayWithdrawAmount; private BigDecimal todayWithdrawAmount;
@Schema(description = "今日提现订单数")
private Long todayWithdrawNum; private Long todayWithdrawNum;
@Schema(description = "今日充值与昨日相比")
private BigDecimal todayWithdrawAmountDiffLast; private BigDecimal todayWithdrawAmountDiffLast;
} }

View File

@@ -1,27 +1,37 @@
package com.ruoyi.cai.manager; package com.ruoyi.cai.manager;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.cai.cache.RechargeTotalCache; import com.ruoyi.cai.cache.RechargeTotalCache;
import com.ruoyi.cai.cache.WithdrawTotalCache; import com.ruoyi.cai.cache.WithdrawTotalCache;
import com.ruoyi.cai.cache.bean.RechargeTotalCacheBean; import com.ruoyi.cai.cache.bean.RechargeTotalCacheBean;
import com.ruoyi.cai.cache.bean.WithdrawTotalCacheBean; import com.ruoyi.cai.cache.bean.WithdrawTotalCacheBean;
import com.ruoyi.cai.domain.DayIncomeStatistics;
import com.ruoyi.cai.domain.User; 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.home.HomeStaticIndexVo;
import com.ruoyi.cai.dto.admin.vo.rank.RankNodeAdminVo; import com.ruoyi.cai.dto.admin.vo.rank.RankNodeAdminVo;
import com.ruoyi.cai.enums.rank.RankTimeTypeEnum; import com.ruoyi.cai.enums.rank.RankTimeTypeEnum;
import com.ruoyi.cai.mapper.DayIncomeStatisticsMapper;
import com.ruoyi.cai.rank.RankAdminManager; import com.ruoyi.cai.rank.RankAdminManager;
import com.ruoyi.cai.rank.RankManager; import com.ruoyi.cai.rank.RankManager;
import com.ruoyi.cai.rank.RankNode; import com.ruoyi.cai.rank.RankNode;
import com.ruoyi.cai.rank.bean.RankAdminNode; import com.ruoyi.cai.rank.bean.RankAdminNode;
import com.ruoyi.cai.service.AnchorService; import com.ruoyi.cai.service.AnchorService;
import com.ruoyi.cai.service.UserService; import com.ruoyi.cai.service.UserService;
import com.ruoyi.cai.util.CaiDateUtil;
import com.ruoyi.cai.util.CaiNumUtil; import com.ruoyi.cai.util.CaiNumUtil;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.framework.OnlineUserTodayCache; import com.ruoyi.framework.OnlineUserTodayCache;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -143,4 +153,99 @@ public class AdminHomeManager {
vo.setTodayWithdrawAmountDiffLast(CaiNumUtil.diffRate(todayWithdraw.getAmount(),lastTodayWithdraw.getAmount())); vo.setTodayWithdrawAmountDiffLast(CaiNumUtil.diffRate(todayWithdraw.getAmount(),lastTodayWithdraw.getAmount()));
return vo; 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<DayIncomeStatistics> statisticsList = dayIncomeStatisticsMapper.selectList(Wrappers.lambdaQuery(DayIncomeStatistics.class)
.between(DayIncomeStatistics::getDate, begin, end));
Map<LocalDate, DayIncomeStatistics> 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<DayIncomeStatistics> statisticsList = dayIncomeStatisticsMapper.statisticsByMonth(begin,end);
Map<String, DayIncomeStatistics> 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;
}
} }

View File

@@ -2,6 +2,10 @@ package com.ruoyi.cai.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.cai.domain.DayIncomeStatistics; import com.ruoyi.cai.domain.DayIncomeStatistics;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDate;
import java.util.List;
/** /**
* 每日账单统计Mapper接口 * 每日账单统计Mapper接口
@@ -11,4 +15,5 @@ import com.ruoyi.cai.domain.DayIncomeStatistics;
*/ */
public interface DayIncomeStatisticsMapper extends BaseMapper<DayIncomeStatistics> { public interface DayIncomeStatisticsMapper extends BaseMapper<DayIncomeStatistics> {
List<DayIncomeStatistics> statisticsByMonth(@Param("begin") LocalDate begin, @Param("end") LocalDate end);
} }

View File

@@ -19,6 +19,10 @@ public class CaiDateUtil {
return ChronoUnit.SECONDS.between(after, before); 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){ public static String betweenShowString(LocalDateTime minTime,LocalDateTime maxTime){
Duration duration = Duration.between(minTime, maxTime); Duration duration = Duration.between(minTime, maxTime);
long seconds = duration.getSeconds(); long seconds = duration.getSeconds();
@@ -102,4 +106,8 @@ public class CaiDateUtil {
public static String getCurrentTimeStr() { public static String getCurrentTimeStr() {
return localDateTimeToString(LocalDateTime.now()); return localDateTimeToString(LocalDateTime.now());
} }
public static String formatDate(LocalDate begin) {
return begin.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
} }

View File

@@ -20,6 +20,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="createTime" column="create_time"/> <result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/> <result property="updateTime" column="update_time"/>
</resultMap> </resultMap>
<select id="statisticsByMonth" resultType="com.ruoyi.cai.domain.DayIncomeStatistics">
select
DATE_FORMAT(t.date,'%Y-%m') as date_str,
SUM(t.exp_in_money) as exp_in_money,SUM(t.order_count) as order_count,
SUM(t.out_money) as out_money,SUM(t.cash_count) as cash_count,
SUM(t.modify_coin_add) as modify_coin_add,SUM(t.modify_coin_sub) as modify_coin_sub,
SUM(t.modify_income_add) as modify_income_add,SUM(t.modify_income_sub) as modify_income_sub
from cai_day_income_statistics t
where t.date between #{begin} and #{end}
group by DATE_FORMAT(t.date,'%Y-%m')
</select>
</mapper> </mapper>