金币系统后端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

169 lines
6.9 KiB

  1. package com.example.demo.serviceImpl;
  2. import com.example.demo.Util.CheckIfNullUtil;
  3. import com.example.demo.domain.vo.Meium;
  4. import com.example.demo.domain.vo.Statistics;
  5. import com.example.demo.domain.vo.Statisticss;
  6. import com.example.demo.domain.vo.SumCoin;
  7. import com.example.demo.mapper.StatisticsMapper;
  8. import com.example.demo.sevice.StatisticsService;
  9. import lombok.RequiredArgsConstructor;
  10. import org.apache.ibatis.annotations.Param;
  11. import org.springframework.cache.annotation.CacheConfig;
  12. import org.springframework.cache.annotation.Cacheable;
  13. import org.springframework.stereotype.Service;
  14. import org.springframework.transaction.annotation.Transactional;
  15. import java.math.BigDecimal;
  16. import java.util.List;
  17. @RequiredArgsConstructor
  18. @Transactional
  19. @Service
  20. @CacheConfig(cacheNames = "statistics")
  21. public class StatisticsServiceImpl implements StatisticsService {
  22. private final StatisticsMapper statisticsMapper;
  23. @Cacheable(key="#root.method.name")
  24. @Override
  25. public Statistics getStatistics() {
  26. Statistics statistics = new Statistics();
  27. // 全年累计数据
  28. Statistics yearStats = CheckIfNullUtil.defaultIfNull( statisticsMapper.getTotalYearCoin(), new Statistics());
  29. statistics.setRechargeSumCoin(yearStats.getRechargeSumCoin());
  30. statistics.setFreeSumCoin(yearStats.getFreeSumCoin());
  31. statistics.setTaskSumCoin(yearStats.getTaskSumCoin());
  32. statistics.setTotalSumCoin(yearStats.getTotalSumCoin());
  33. // 昨日新增数据
  34. Statistics yesterdayStats = CheckIfNullUtil.defaultIfNull( statisticsMapper.getYesterdayNewCoin(), new Statistics());
  35. statistics.setRechargeYesterdaySumCoin(yesterdayStats.getRechargeYesterdaySumCoin());
  36. statistics.setFreeYesterdaySumCoin(yesterdayStats.getFreeYesterdaySumCoin());
  37. statistics.setTaskYesterdaySumCoin(yesterdayStats.getTaskYesterdaySumCoin());
  38. statistics.setTotalYesterdaySumCoin(yesterdayStats.getTotalYesterdaySumCoin());
  39. // 年累计充值人数
  40. statistics.setRechargeCount(statisticsMapper.getYearRechargeCount());
  41. // 本周和上周充值人数
  42. int thisWeekCount = statisticsMapper.getRechargeCountThisWeek();
  43. int lastWeekCount = statisticsMapper.getRechargeCountLastWeek();
  44. statistics.setRechargeCountThisWeek(thisWeekCount);
  45. statistics.setRechargeCountLastWeek(lastWeekCount);
  46. // 周同比计算
  47. BigDecimal weekOverWeekRate = BigDecimal.ZERO;//初始化为 0 表示如果没有足够的数据(如 lastWeekCount == 0),默认周同比增长率为 0。
  48. if (lastWeekCount > 0) {
  49. weekOverWeekRate = BigDecimal.valueOf((double) (thisWeekCount - lastWeekCount) / lastWeekCount * 100)//将计算结果转换为 BigDecimal 类型,保证高精度。
  50. .setScale(2, BigDecimal.ROUND_HALF_UP); // 保留两位小数
  51. }
  52. statistics.setWeekOverWeekRate(weekOverWeekRate);
  53. //今日和昨日充值人数
  54. int todayCount = statisticsMapper.getRechargeCountToday();
  55. int yesterdayCount = statisticsMapper.getRechargeCountYesterday();
  56. int firstYesterdayCount =statisticsMapper.getFirstRechargeCountYesterday();
  57. statistics.setRechargeCountToday(todayCount);
  58. statistics.setRechargeCountYesterday(yesterdayCount);
  59. statistics.setFirstRechargeCountYesterday(firstYesterdayCount);
  60. //日环比计算
  61. BigDecimal dayOverDayRate = BigDecimal.ZERO;
  62. if (yesterdayCount > 0) {
  63. dayOverDayRate = BigDecimal.valueOf((double) (todayCount - yesterdayCount) / yesterdayCount * 100).
  64. setScale(2, BigDecimal.ROUND_HALF_UP);
  65. }
  66. statistics.setDayOverDayRate(dayOverDayRate);
  67. return statistics;
  68. }
  69. @Cacheable(key="#root.method.name")
  70. @Override
  71. public Statisticss stats() {
  72. Statisticss a = new Statisticss();
  73. a.setCoinSystemSum(statisticsMapper.getCoinSystemSum());
  74. a.setERPSum(statisticsMapper.getERPSum());
  75. a.setHomilyChartSum(statisticsMapper.getHomilyChartSum());
  76. a.setHomilyLinkSum(statisticsMapper.getHomilyLinkSum());
  77. return a;
  78. }
  79. //----------------------------------------------------------------------------------------------------//
  80. @Cacheable(key="#root.method.name")
  81. public SumCoin getSumCoin(){
  82. return statisticsMapper.getSumCoin();
  83. }
  84. @Cacheable(key="#root.method.name")
  85. @Override
  86. public SumCoin getYearConsumeCoin() {
  87. return statisticsMapper.getYearConsumeCoin();
  88. }
  89. @Cacheable(key="#root.method.name")
  90. @Override
  91. public SumCoin getDayConsumeCoin() {
  92. return statisticsMapper.getDayConsumeCoin();
  93. }
  94. @Cacheable(key="#root.method.name")
  95. @Override
  96. public List<SumCoin> getMediuPayCoin() {
  97. return statisticsMapper.getMediuPayCoin();
  98. }
  99. @Cacheable(key="#root.method.name")
  100. @Override
  101. public List<SumCoin> getMediuConsumeCoin() {
  102. return statisticsMapper.getMediuConsumeCoin();
  103. }
  104. public SumCoin getMess(Integer jwcode){
  105. return statisticsMapper.getMess(jwcode);
  106. }
  107. @Cacheable(key="#root.method.name")
  108. @Override
  109. public List<SumCoin> getMediumAreaPay() {
  110. return statisticsMapper.getMediumAreaPay();
  111. }
  112. @Cacheable(key="#root.method.name")
  113. @Override
  114. public List<SumCoin> getMediumAreaConsume() {
  115. return statisticsMapper.getMediumAreaConsume();
  116. }
  117. @Override
  118. public List<Meium> getMee( Meium meium) {
  119. if("充值".equals(meium.getUpdateType())){
  120. if("免费金币".equals(meium.getType())){
  121. return statisticsMapper.getBuyAndFree(meium.getSearchStartTime(),meium.getSearchEndTime());
  122. }else if("充值金币".equals(meium.getType())){
  123. return statisticsMapper.getBuyAndRecharge(meium.getSearchStartTime(),meium.getSearchEndTime());
  124. }else if("任务金币".equals(meium.getType())){
  125. return statisticsMapper.getBuyAndTask(meium.getSearchStartTime(),meium.getSearchEndTime());
  126. }else{
  127. return statisticsMapper.getBuy(meium.getSearchStartTime(),meium.getSearchEndTime());
  128. }
  129. }else if("消费".equals(meium.getUpdateType())){
  130. if("免费金币".equals(meium.getType())){
  131. return statisticsMapper.getPayAndFree(meium.getSearchStartTime(),meium.getSearchEndTime());
  132. }else if("充值金币".equals(meium.getType())){
  133. return statisticsMapper.getPayAndRecharge(meium.getSearchStartTime(),meium.getSearchEndTime());
  134. }else if("任务金币".equals(meium.getType())){
  135. return statisticsMapper.getPayAndTask(meium.getSearchStartTime(),meium.getSearchEndTime());
  136. }else{
  137. return statisticsMapper.getPay(meium.getSearchStartTime(),meium.getSearchEndTime());
  138. }
  139. } else{ return null;}
  140. }
  141. @Override
  142. public List<SumCoin> getMediu() {
  143. return statisticsMapper.getMediu();
  144. }
  145. }