Browse Source

7-3工作台优化

huangqizheng/feature-20250704135104-bug修改
jianlin 1 day ago
parent
commit
e9188e4773
  1. 29
      src/main/java/com/example/demo/domain/vo/WorkbenchFullStatistics.java
  2. 3
      src/main/java/com/example/demo/mapper/WorkBenchMapper.java
  3. 3
      src/main/java/com/example/demo/service/WorkbenchService.java
  4. 71
      src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java
  5. 23
      src/main/resources/mapper/WorkBenchMapper.xml

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; //总充值人数
}

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

@ -1,6 +1,7 @@
package com.example.demo.mapper; package com.example.demo.mapper;
import com.example.demo.domain.vo.WorkbenchCard; import com.example.demo.domain.vo.WorkbenchCard;
import com.example.demo.domain.vo.WorkbenchFullStatistics;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.Date; import java.util.Date;
@ -33,4 +34,6 @@ public interface WorkBenchMapper {
Integer sumRefund(String market,Date startDate, Date endDate); Integer sumRefund(String market,Date startDate, Date endDate);
//给定时间范围内的该地区充值人头数根据精网号去重老数据有多人共用一个精网号的问题 //给定时间范围内的该地区充值人头数根据精网号去重老数据有多人共用一个精网号的问题
Integer countRechargeNum(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.Date;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @program: gold-java * @program: gold-java
@ -25,7 +26,7 @@ public interface WorkbenchService {
//获取不同地区的工作台柱状图数据根据类型起止时间地区查询 //获取不同地区的工作台柱状图数据根据类型起止时间地区查询
WorkbenchCard getGraph(String token, Date startDate, Date endDate, List<String> markets); 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); Integer calculateDayOverDay(String market,Date date);
//获取该日期该市场的周环比 //获取该日期该市场的周环比

71
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.entity.Statistics;
import com.example.demo.domain.vo.WorkbenchCard; 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.WorkbenchMarketCard;
import com.example.demo.domain.vo.WorkbenchMarketGraph; import com.example.demo.domain.vo.WorkbenchMarketGraph;
import com.example.demo.mapper.StatisticsMapper; import com.example.demo.mapper.StatisticsMapper;
@ -17,10 +18,7 @@ import java.time.DayOfWeek;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime; import java.time.LocalTime;
import java.time.ZoneId; 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; import java.util.stream.Collectors;
/** /**
@ -144,6 +142,9 @@ public class WorkbenchServiceImpl implements WorkbenchService {
WorkbenchMarketCard card = new WorkbenchMarketCard(); WorkbenchMarketCard card = new WorkbenchMarketCard();
card.setMarket(market); card.setMarket(market);
if (statistics != null) { if (statistics != null) {
// 一次性获取全年统计数据从年初到今天
Map<String, Integer> yearlyStats = calculateAllSum(market, yearlyStartDate, date);
// 卡片一当前金币相关 // 卡片一当前金币相关
card.setCurrentPermanent(statistics.getCurrentPermanent());//余量-永久金币 card.setCurrentPermanent(statistics.getCurrentPermanent());//余量-永久金币
card.setCurrentFreeJune(statistics.getCurrentFreeJune()); //余量-免费六月金币 card.setCurrentFreeJune(statistics.getCurrentFreeJune()); //余量-免费六月金币
@ -155,8 +156,8 @@ public class WorkbenchServiceImpl implements WorkbenchService {
// 卡片二充值相关 // 卡片二充值相关
card.setRecharge(statistics.getRecharge()); //充值-当日充值 card.setRecharge(statistics.getRecharge()); //充值-当日充值
card.setMoney(statistics.getMoney()); //充值-当日金额永久 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.setConsumePermanent(statistics.getConsumePermanent());//消费-永久金币
card.setConsumeFreeJune(statistics.getConsumeFreeJune());//消费-免费六月金币 card.setConsumeFreeJune(statistics.getConsumeFreeJune());//消费-免费六月金币
@ -171,13 +172,14 @@ public class WorkbenchServiceImpl implements WorkbenchService {
//当日总退款 //当日总退款
int totalRefund = card.getRefundPermanent() + card.getRefundFreeJune() + card.getRefundFreeDecember() + card.getRefundTask(); int totalRefund = card.getRefundPermanent() + card.getRefundFreeJune() + card.getRefundFreeDecember() + card.getRefundTask();
card.setDailyReduce(totalConsume - totalRefund);//当日总消耗 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.setYearlyReduce(card.getYearlyConsume() - card.getYearlyRefund());//年累计消耗
// 卡片四人头数相关 // 卡片四人头数相关
card.setRechargeNum(statistics.getRechargeNum()); card.setRechargeNum(statistics.getRechargeNum());
card.setFirstRecharge(statistics.getFirstRecharge()); card.setFirstRecharge(statistics.getFirstRecharge());
card.setYearlyRechargeNum(calculateSum(market,"rechargeNum",yearlyStartDate,date));
card.setYearlyRechargeNum(yearlyStats.getOrDefault("rechargeNum", 0));
// 周环比日同比 // 周环比日同比
@ -192,13 +194,15 @@ public class WorkbenchServiceImpl implements WorkbenchService {
List<WorkbenchMarketGraph> marketGraphs = new ArrayList<>(); List<WorkbenchMarketGraph> marketGraphs = new ArrayList<>();
for (String market : markets) { for (String market : markets) {
Map<String, Integer> sums = calculateAllSum(market, startDate, endDate);
WorkbenchMarketGraph graphs = new WorkbenchMarketGraph(); WorkbenchMarketGraph graphs = new WorkbenchMarketGraph();
graphs.setMarket(market); 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));
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); marketGraphs.add(graphs);
} }
return new WorkbenchCard(token, new ArrayList<>(),marketGraphs,markets,startDate,endDate); return new WorkbenchCard(token, new ArrayList<>(),marketGraphs,markets,startDate,endDate);
@ -208,33 +212,20 @@ public class WorkbenchServiceImpl implements WorkbenchService {
根据类型获取统计数据 根据类型获取统计数据
*/ */
@Override @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 AND current_datetime BETWEEN
#{startDate} and #{endDate} #{startDate} and #{endDate}
</select> </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> </mapper>
Loading…
Cancel
Save