diff --git a/src/main/java/com/example/demo/domain/vo/WorkbenchFullStatistics.java b/src/main/java/com/example/demo/domain/vo/WorkbenchFullStatistics.java new file mode 100644 index 0000000..0eefc96 --- /dev/null +++ b/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: 2025−07-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; //总充值人数 +} diff --git a/src/main/java/com/example/demo/mapper/WorkBenchMapper.java b/src/main/java/com/example/demo/mapper/WorkBenchMapper.java index 6dd220a..95bc78a 100644 --- a/src/main/java/com/example/demo/mapper/WorkBenchMapper.java +++ b/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); } diff --git a/src/main/java/com/example/demo/service/WorkbenchService.java b/src/main/java/com/example/demo/service/WorkbenchService.java index 0207e5c..70b26f0 100644 --- a/src/main/java/com/example/demo/service/WorkbenchService.java +++ b/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 markets); //根据类型获取年初至今的统计数据 - Integer calculateSum(String market, String type, Date startDate,Date endDate); + Map calculateAllSum(String market, Date startDate, Date endDate); //获取该日期该市场的日同比 Integer calculateDayOverDay(String market,Date date); //获取该日期该市场的周环比 diff --git a/src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java index e0d846d..dc0270b 100644 --- a/src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java @@ -2,6 +2,7 @@ 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; @@ -17,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; /** @@ -144,6 +142,9 @@ public class WorkbenchServiceImpl implements WorkbenchService { WorkbenchMarketCard card = new WorkbenchMarketCard(); card.setMarket(market); if (statistics != null) { + // 一次性获取全年统计数据(从年初到今天) + Map yearlyStats = calculateAllSum(market, yearlyStartDate, date); + // 卡片一:当前金币相关 card.setCurrentPermanent(statistics.getCurrentPermanent());//余量-永久金币 card.setCurrentFreeJune(statistics.getCurrentFreeJune()); //余量-免费六月金币 @@ -155,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());//消费-免费六月金币 @@ -171,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)); // 周环比、日同比 @@ -192,14 +194,16 @@ public class WorkbenchServiceImpl implements WorkbenchService { List marketGraphs = new ArrayList<>(); for (String market : markets) { + Map sums = calculateAllSum(market, startDate, endDate); + WorkbenchMarketGraph graphs = new WorkbenchMarketGraph(); graphs.setMarket(market); - graphs.setSumRechargePermanent(calculateSum(market, "money",startDate,endDate)); - graphs.setSumRechargeFree(calculateSum(market, "rFree",startDate,endDate)); - graphs.setSumConsumePermanent(calculateSum(market, "cPermanent",startDate,endDate)); - graphs.setSumConsumeFree(calculateSum(market, "cFree",startDate,endDate)); - graphs.setSumConsumeTask(calculateSum(market, "cTask",startDate,endDate)); - marketGraphs.add( graphs); + 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, new ArrayList<>(),marketGraphs,markets,startDate,endDate); } @@ -208,33 +212,20 @@ public class WorkbenchServiceImpl implements WorkbenchService { 根据类型获取统计数据 */ @Override - public Integer calculateSum(String market, String type, Date startDate,Date endDate) { + public Map calculateAllSum(String market, Date startDate, Date endDate) { + WorkbenchFullStatistics stats = workBenchMapper.getFullStatisticsByMarketAndDate(market, startDate, endDate); + Map 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; - } } /* diff --git a/src/main/resources/mapper/WorkBenchMapper.xml b/src/main/resources/mapper/WorkBenchMapper.xml index a0df89c..b40242f 100644 --- a/src/main/resources/mapper/WorkBenchMapper.xml +++ b/src/main/resources/mapper/WorkBenchMapper.xml @@ -87,5 +87,26 @@ AND current_datetime BETWEEN #{startDate} and #{endDate} - + +