Browse Source

拉一下Merge branch 'milestone-20250702-金币重构一期' of http://39.101.133.168:8807/huangqizhen/gold-java into milestone-20250702-金币重构一期

lihuilin/hotfix-20250810160509-余额地区传参
lihuilin 1 month ago
parent
commit
4252618236
  1. 4
      pom.xml
  2. 29
      src/main/java/com/example/demo/Util/ExecutionTimeAspect.java
  3. 1
      src/main/java/com/example/demo/domain/vo/WorkbenchCard.java
  4. 29
      src/main/java/com/example/demo/domain/vo/WorkbenchFullStatistics.java
  5. 29
      src/main/java/com/example/demo/domain/vo/WorkbenchMarketGraph.java
  6. 3
      src/main/java/com/example/demo/mapper/WorkBenchMapper.java
  7. 3
      src/main/java/com/example/demo/service/WorkbenchService.java
  8. 84
      src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java
  9. 23
      src/main/resources/mapper/WorkBenchMapper.xml

4
pom.xml

@ -57,6 +57,10 @@
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>

29
src/main/java/com/example/demo/Util/ExecutionTimeAspect.java

@ -0,0 +1,29 @@
package com.example.demo.Util;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
/**
* @program: gold-java
* @ClassName ExecutionTimeAspect
* @description:
* @author: Ethan
* @create: 202507-03 10:50
* @Version 1.0
**/
@Aspect
@Component
public class ExecutionTimeAspect {
@Around("execution(* com.example.demo.serviceImpl.WorkbenchServiceImpl.*(..))")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
Object proceed = joinPoint.proceed();
long executionTime = System.currentTimeMillis() - start;
System.out.println("执行时间 " + joinPoint.getSignature() + ": " + executionTime + " ms");
return proceed;
}
}

1
src/main/java/com/example/demo/domain/vo/WorkbenchCard.java

@ -24,6 +24,7 @@ import java.util.List;
public class WorkbenchCard implements Serializable {
private String token; //用户token
private List<WorkbenchMarketCard> marketCards; // 地区卡片数据
private List<WorkbenchMarketGraph> marketGraphs; // 地区图表数据
private List<String> markets; // 地区列表
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date startDate; // 起始时间

29
src/main/java/com/example/demo/domain/vo/WorkbenchFullStatistics.java

@ -0,0 +1,29 @@
package com.example.demo.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @program: gold-java
* @ClassName WorkbenchFullStatistics
* @description:
* @author: Ethan
* @create: 202507-03 13:46
* @Version 1.0
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WorkbenchFullStatistics implements Serializable {
private Integer totalRecharge; //总充值
private Integer totalMoney; //总金额
private Integer totalConsumePermanent; //总消费-永久金币
private Integer totalConsumeFree; //总消费-免费金币
private Integer totalConsumeTask; //总消费-任务金币
private Integer totalRefund; //总退款
private Integer totalRechargeNum; //总充值人数
}

29
src/main/java/com/example/demo/domain/vo/WorkbenchMarketGraph.java

@ -0,0 +1,29 @@
package com.example.demo.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @program: gold-java
* @ClassName WorkbenchMarketGraph
* @description:
* @author: Ethan
* @create: 202507-03 10:16
* @Version 1.0
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WorkbenchMarketGraph implements Serializable {
private String market;//地区
//图表
private Integer SumRechargePermanent; //合计充值永久金币
private Integer SumRechargeFree; //合计充值免费金币
private Integer SumConsumePermanent; //合计消费永久金币
private Integer SumConsumeFree; //合计消费免费金币
private Integer SumConsumeTask; //合计消费任务金币
}

3
src/main/java/com/example/demo/mapper/WorkBenchMapper.java

@ -1,6 +1,7 @@
package com.example.demo.mapper;
import com.example.demo.domain.vo.WorkbenchCard;
import com.example.demo.domain.vo.WorkbenchFullStatistics;
import org.apache.ibatis.annotations.Mapper;
import java.util.Date;
@ -33,4 +34,6 @@ public interface WorkBenchMapper {
Integer sumRefund(String market,Date startDate, Date endDate);
//给定时间范围内的该地区充值人头数根据精网号去重老数据有多人共用一个精网号的问题
Integer countRechargeNum(String market, Date startDate, Date endDate);
//给定时间范围内的该地区统计数据
WorkbenchFullStatistics getFullStatisticsByMarketAndDate(String market, Date startDate, Date endDate);
}

3
src/main/java/com/example/demo/service/WorkbenchService.java

@ -6,6 +6,7 @@ import com.example.demo.domain.vo.WorkbenchMarketCard;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @program: gold-java
@ -25,7 +26,7 @@ public interface WorkbenchService {
//获取不同地区的工作台柱状图数据根据类型起止时间地区查询
WorkbenchCard getGraph(String token, Date startDate, Date endDate, List<String> markets);
//根据类型获取年初至今的统计数据
Integer calculateSum(String market, String type, Date startDate,Date endDate);
Map<String, Integer> calculateAllSum(String market, Date startDate, Date endDate);
//获取该日期该市场的日同比
Integer calculateDayOverDay(String market,Date date);
//获取该日期该市场的周环比

84
src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java

@ -2,7 +2,9 @@ package com.example.demo.serviceImpl;
import com.example.demo.domain.entity.Statistics;
import com.example.demo.domain.vo.WorkbenchCard;
import com.example.demo.domain.vo.WorkbenchFullStatistics;
import com.example.demo.domain.vo.WorkbenchMarketCard;
import com.example.demo.domain.vo.WorkbenchMarketGraph;
import com.example.demo.mapper.StatisticsMapper;
import com.example.demo.mapper.WorkBenchMapper;
import com.example.demo.service.GeneralService;
@ -16,10 +18,7 @@ import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -73,7 +72,7 @@ public class WorkbenchServiceImpl implements WorkbenchService {
// 收集并行流结果为列表
.collect(Collectors.toList());
return new WorkbenchCard(token, marketCards, markets, date, date);
return new WorkbenchCard(token, marketCards,new ArrayList<>(), markets, date, date);
/* List<WorkbenchMarketCard> marketCards = new ArrayList<>();
// 遍历每个 marketCard 并填充数据
for (String market : markets) {
@ -143,6 +142,9 @@ public class WorkbenchServiceImpl implements WorkbenchService {
WorkbenchMarketCard card = new WorkbenchMarketCard();
card.setMarket(market);
if (statistics != null) {
// 一次性获取全年统计数据从年初到今天
Map<String, Integer> yearlyStats = calculateAllSum(market, yearlyStartDate, date);
// 卡片一当前金币相关
card.setCurrentPermanent(statistics.getCurrentPermanent());//余量-永久金币
card.setCurrentFreeJune(statistics.getCurrentFreeJune()); //余量-免费六月金币
@ -154,8 +156,8 @@ public class WorkbenchServiceImpl implements WorkbenchService {
// 卡片二充值相关
card.setRecharge(statistics.getRecharge()); //充值-当日充值
card.setMoney(statistics.getMoney()); //充值-当日金额永久
card.setYearlyRecharge(calculateSum(market, "recharge",yearlyStartDate ,date));//充值-全年累计充值
card.setYearlyMoney(calculateSum(market, "money",yearlyStartDate ,date)); //充值-全年累计金额永久
card.setYearlyRecharge(yearlyStats.getOrDefault("recharge", 0)); // 充值-全年累计充值
card.setYearlyMoney(yearlyStats.getOrDefault("money", 0)); // 充值-全年累计金额永久//充值-全年累计金额永久
// 卡片三消费与退款
card.setConsumePermanent(statistics.getConsumePermanent());//消费-永久金币
card.setConsumeFreeJune(statistics.getConsumeFreeJune());//消费-免费六月金币
@ -170,13 +172,14 @@ public class WorkbenchServiceImpl implements WorkbenchService {
//当日总退款
int totalRefund = card.getRefundPermanent() + card.getRefundFreeJune() + card.getRefundFreeDecember() + card.getRefundTask();
card.setDailyReduce(totalConsume - totalRefund);//当日总消耗
card.setYearlyConsume(calculateSum(market, "consume", yearlyStartDate,date));//年累计消费
card.setYearlyRefund(calculateSum(market, "refund",yearlyStartDate ,date));//年累计退款
card.setYearlyConsume(yearlyStats.getOrDefault("consume", 0)); // 年累计消费
card.setYearlyRefund(yearlyStats.getOrDefault("refund", 0)); // 年累计退款
card.setYearlyReduce(card.getYearlyConsume() - card.getYearlyRefund());//年累计消耗
// 卡片四人头数相关
card.setRechargeNum(statistics.getRechargeNum());
card.setFirstRecharge(statistics.getFirstRecharge());
card.setYearlyRechargeNum(calculateSum(market,"rechargeNum",yearlyStartDate,date));
card.setYearlyRechargeNum(yearlyStats.getOrDefault("rechargeNum", 0));
// 周环比日同比
@ -188,52 +191,41 @@ public class WorkbenchServiceImpl implements WorkbenchService {
@Override
public WorkbenchCard getGraph(String token, Date startDate, Date endDate, List<String> markets) {
List<WorkbenchMarketCard> marketCards = new ArrayList<>();
List<WorkbenchMarketGraph> marketGraphs = new ArrayList<>();
for (String market : markets) {
WorkbenchMarketCard cards = new WorkbenchMarketCard();
cards.setMarket(market);
cards.setSumRechargePermanent(calculateSum(market, "money",startDate,endDate));
cards.setSumRechargeFree(calculateSum(market, "rFree",startDate,endDate));
cards.setSumConsumePermanent(calculateSum(market, "cPermanent",startDate,endDate));
cards.setSumConsumeFree(calculateSum(market, "cFree",startDate,endDate));
cards.setSumConsumeTask(calculateSum(market, "cTask",startDate,endDate));
marketCards.add( cards);
Map<String, Integer> sums = calculateAllSum(market, startDate, endDate);
WorkbenchMarketGraph graphs = new WorkbenchMarketGraph();
graphs.setMarket(market);
graphs.setSumRechargePermanent(sums.get("money"));
graphs.setSumRechargeFree(sums.get("rFree"));
graphs.setSumConsumePermanent(sums.get("cPermanent"));
graphs.setSumConsumeFree(sums.get("cFree"));
graphs.setSumConsumeTask(sums.get("cTask"));
marketGraphs.add(graphs);
}
return new WorkbenchCard(token, marketCards,markets,startDate,endDate);
return new WorkbenchCard(token, new ArrayList<>(),marketGraphs,markets,startDate,endDate);
}
/*
根据类型获取统计数据
*/
@Override
public Integer calculateSum(String market, String type, Date startDate,Date endDate) {
public Map<String, Integer> calculateAllSum(String market, Date startDate, Date endDate) {
WorkbenchFullStatistics stats = workBenchMapper.getFullStatisticsByMarketAndDate(market, startDate, endDate);
Map<String, Integer> result = new HashMap<>();
result.put("recharge", stats.getTotalRecharge() != null ? stats.getTotalRecharge() : 0);
result.put("money", stats.getTotalMoney() != null ? stats.getTotalMoney() : 0);
result.put("rFree", (stats.getTotalRecharge() != null ? stats.getTotalRecharge() : 0)
- (stats.getTotalMoney() != null ? stats.getTotalMoney() : 0));
result.put("cPermanent", stats.getTotalConsumePermanent() != null ? stats.getTotalConsumePermanent() : 0);
result.put("cFree", stats.getTotalConsumeFree() != null ? stats.getTotalConsumeFree() : 0);
result.put("cTask", stats.getTotalConsumeTask() != null ? stats.getTotalConsumeTask() : 0);
result.put("refund", stats.getTotalRefund() != null ? stats.getTotalRefund() : 0);
result.put("rechargeNum", stats.getTotalRechargeNum() != null ? stats.getTotalRechargeNum() : 0);
return result;
//判断类型
switch
(type) {
case "recharge": //获取累计充值
return workBenchMapper.sumRecharge(market, startDate,endDate);
case "money": //获取累计金额永久
return workBenchMapper.sumMoney(market,startDate,endDate);
case "rFree": //获取累计充值免费
return workBenchMapper.sumRecharge(market,startDate,endDate)-
workBenchMapper.sumMoney(market,startDate,endDate);
case "consume": //获取累计消费
return workBenchMapper.sumConsume(market,startDate,endDate);
case "cPermanent": //获取累计消费-永久
return workBenchMapper.sumCPermanent(market,startDate,endDate);
case "cFree": //获取累计消费- 免费
return workBenchMapper.sumCFree(market,startDate,endDate);
case "cTask": //获取累计消费- 任务
return workBenchMapper.sumCTask(market,startDate,endDate);
case "refund": //获取累计退款
return workBenchMapper.sumRefund(market,startDate,endDate);
case "rechargeNum": //获取累计充值人数
return workBenchMapper.countRechargeNum(market,startDate,endDate);
default:
return 0;
}
}
/*

23
src/main/resources/mapper/WorkBenchMapper.xml

@ -87,5 +87,26 @@
AND current_datetime BETWEEN
#{startDate} and #{endDate}
</select>
<!-- 获取指定地区在时间段内的全部统计数据 -->
<select id="getFullStatisticsByMarketAndDate" resultType="com.example.demo.domain.vo.WorkbenchFullStatistics">
SELECT
SUM(recharge) AS totalRecharge,
SUM(money) AS totalMoney,
SUM(consume_permanent) AS totalConsumePermanent,
SUM(consume_free_june + consume_free_december) AS totalConsumeFree,
SUM(consume_task) AS totalConsumeTask,
SUM(refund_permanent + refund_free_june + refund_free_december + refund_task) AS totalRefund,
COUNT(DISTINCT ugr.jwcode) AS totalRechargeNum
FROM statistics s
LEFT JOIN (
SELECT DISTINCT ugr.jwcode
FROM user_gold_record ugr
INNER JOIN user u ON ugr.jwcode = u.jwcode
WHERE u.market = #{market}
AND ugr.pay_time BETWEEN #{startDate} AND #{endDate}
AND ugr.audit_status IN (1,3)
) ugr ON 1=1
WHERE s.market = #{market}
AND s.current_datetime BETWEEN #{startDate} AND #{endDate}
</select>
</mapper>
Loading…
Cancel
Save