金币系统后端
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.

538 lines
22 KiB

5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
  1. package com.example.demo.serviceImpl;
  2. import java.text.SimpleDateFormat;
  3. import java.util.*;
  4. import java.util.concurrent.TimeUnit;
  5. import com.example.demo.Util.CheckIfNullUtil;
  6. import com.example.demo.domain.vo.Meium;
  7. import com.example.demo.domain.vo.Statistics;
  8. import com.example.demo.domain.vo.Statisticss;
  9. import com.example.demo.domain.vo.SumCoin;
  10. import com.example.demo.mapper.StatisticsMapper;
  11. import com.example.demo.sevice.StatisticsService;
  12. import lombok.RequiredArgsConstructor;
  13. import org.apache.ibatis.annotations.Param;
  14. import org.springframework.cache.annotation.CacheConfig;
  15. import org.springframework.cache.annotation.Cacheable;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import org.springframework.web.bind.annotation.RequestBody;
  19. import java.math.BigDecimal;
  20. import java.time.LocalDate;
  21. import java.time.ZoneId;
  22. import java.time.temporal.ChronoUnit;
  23. import java.util.List;
  24. @RequiredArgsConstructor
  25. @Transactional
  26. @Service
  27. @CacheConfig(cacheNames = "statistics")
  28. public class StatisticsServiceImpl implements StatisticsService {
  29. private final StatisticsMapper statisticsMapper;
  30. @Cacheable(key = "#root.method.name")
  31. @Override
  32. public Statistics getStatistics() {
  33. Statistics statistics = new Statistics();
  34. // 全年累计数据
  35. Statistics yearStats = CheckIfNullUtil.defaultIfNull(statisticsMapper.getTotalYearCoin(), new Statistics());
  36. statistics.setRechargeSumCoin(yearStats.getRechargeSumCoin());
  37. statistics.setFreeSumCoin(yearStats.getFreeSumCoin());
  38. statistics.setTaskSumCoin(yearStats.getTaskSumCoin());
  39. statistics.setTotalSumCoin(yearStats.getTotalSumCoin());
  40. // 昨日新增数据
  41. Statistics yesterdayStats = CheckIfNullUtil.defaultIfNull(statisticsMapper.getYesterdayNewCoin(), new Statistics());
  42. statistics.setRechargeYesterdaySumCoin(yesterdayStats.getRechargeYesterdaySumCoin());
  43. statistics.setFreeYesterdaySumCoin(yesterdayStats.getFreeYesterdaySumCoin());
  44. statistics.setTaskYesterdaySumCoin(yesterdayStats.getTaskYesterdaySumCoin());
  45. statistics.setTotalYesterdaySumCoin(yesterdayStats.getTotalYesterdaySumCoin());
  46. // 年累计充值人数
  47. statistics.setRechargeCount(statisticsMapper.getYearRechargeCount());
  48. // 本周和上周充值人数
  49. int thisWeekCount = statisticsMapper.getRechargeCountThisWeek();
  50. int lastWeekCount = statisticsMapper.getRechargeCountLastWeek();
  51. statistics.setRechargeCountThisWeek(thisWeekCount);
  52. statistics.setRechargeCountLastWeek(lastWeekCount);
  53. // 周同比计算
  54. BigDecimal weekOverWeekRate = BigDecimal.ZERO;//初始化为 0 表示如果没有足够的数据(如 lastWeekCount == 0),默认周同比增长率为 0。
  55. if (lastWeekCount > 0) {
  56. weekOverWeekRate = BigDecimal.valueOf((double) (thisWeekCount - lastWeekCount) / lastWeekCount * 100)//将计算结果转换为 BigDecimal 类型,保证高精度。
  57. .setScale(2, BigDecimal.ROUND_HALF_UP); // 保留两位小数
  58. }
  59. statistics.setWeekOverWeekRate(weekOverWeekRate);
  60. //今日和昨日充值人数
  61. int todayCount = statisticsMapper.getRechargeCountToday();
  62. int yesterdayCount = statisticsMapper.getRechargeCountYesterday();
  63. int firstYesterdayCount = statisticsMapper.getFirstRechargeCountYesterday();
  64. statistics.setRechargeCountToday(todayCount);
  65. statistics.setRechargeCountYesterday(yesterdayCount);
  66. statistics.setFirstRechargeCountYesterday(firstYesterdayCount);
  67. //日环比计算
  68. BigDecimal dayOverDayRate = BigDecimal.ZERO;
  69. if (yesterdayCount > 0) {
  70. dayOverDayRate = BigDecimal.valueOf((double) (todayCount - yesterdayCount) / yesterdayCount * 100).
  71. setScale(2, BigDecimal.ROUND_HALF_UP);
  72. }
  73. statistics.setDayOverDayRate(dayOverDayRate);
  74. return statistics;
  75. }
  76. @Cacheable(key = "#root.method.name")
  77. @Override
  78. public Statisticss stats() {
  79. Statisticss a = new Statisticss();
  80. a.setCoinSystemSum(statisticsMapper.getCoinSystemSum());
  81. a.setERPSum(statisticsMapper.getERPSum());
  82. a.setHomilyChartSum(statisticsMapper.getHomilyChartSum());
  83. a.setHomilyLinkSum(statisticsMapper.getHomilyLinkSum());
  84. return a;
  85. }
  86. //----------------------------------------------------------------------------------------------------//
  87. @Cacheable(key = "#root.method.name")
  88. public SumCoin getSumCoin() {
  89. return statisticsMapper.getSumCoin();
  90. }
  91. @Cacheable(key = "#root.method.name")
  92. @Override
  93. public SumCoin getYearConsumeCoin() {
  94. return statisticsMapper.getYearConsumeCoin();
  95. }
  96. @Cacheable(key = "#root.method.name")
  97. @Override
  98. public SumCoin getDayConsumeCoin() {
  99. return statisticsMapper.getDayConsumeCoin();
  100. }
  101. @Override
  102. public List<SumCoin> getMediuPayCoin() {
  103. return List.of();
  104. }
  105. @Override
  106. public List<SumCoin> getMediuConsumeCoin() {
  107. return List.of();
  108. }
  109. public SumCoin getMess(Integer jwcode) {
  110. return statisticsMapper.getMess(jwcode);
  111. }
  112. @Cacheable(key = "#root.method.name")
  113. @Override
  114. public List<SumCoin> getMediumAreaPay() {
  115. return statisticsMapper.getMediumAreaPay();
  116. }
  117. @Cacheable(key = "#root.method.name")
  118. @Override
  119. public List<SumCoin> getMediumAreaConsume() {
  120. return statisticsMapper.getMediumAreaConsume();
  121. }
  122. // @Override
  123. // public List<Meium> getMee(Meium meium) {
  124. //
  125. //
  126. // if (0 == (meium.getUpdateType())) {
  127. // if ("免费金币".equals(meium.getType())) {
  128. // return statisticsMapper.getBuyAndFree(meium.getSearchStartTime(), meium.getSearchEndTime());
  129. // } else if ("充值金币".equals(meium.getType())) {
  130. // return statisticsMapper.getBuyAndRecharge(meium.getSearchStartTime(), meium.getSearchEndTime());
  131. // } else if ("任务金币".equals(meium.getType())) {
  132. // return statisticsMapper.getBuyAndTask(meium.getSearchStartTime(), meium.getSearchEndTime());
  133. // } else {
  134. // return statisticsMapper.getBuy(meium.getSearchStartTime(), meium.getSearchEndTime());
  135. // }
  136. //
  137. // } else if (1 == (meium.getUpdateType())) {
  138. // if ("免费金币".equals(meium.getType())) {
  139. // return statisticsMapper.getPayAndFree(meium.getSearchStartTime(), meium.getSearchEndTime());
  140. // } else if ("充值金币".equals(meium.getType())) {
  141. // return statisticsMapper.getPayAndRecharge(meium.getSearchStartTime(), meium.getSearchEndTime());
  142. // } else if ("任务金币".equals(meium.getType())) {
  143. // return statisticsMapper.getPayAndTask(meium.getSearchStartTime(), meium.getSearchEndTime());
  144. // } else {
  145. // return statisticsMapper.getPay(meium.getSearchStartTime(), meium.getSearchEndTime());
  146. // }
  147. //
  148. // } else
  149. // return null;
  150. //
  151. //
  152. // }
  153. @Cacheable(key = "#root.method.name + T(java.util.Objects).hashCode(#meium)")
  154. @Override
  155. public List<Meium> getMee(Meium meium) {
  156. List<Meium> result = new ArrayList<>();
  157. // 预定义所有十二个地区
  158. List<String> allRegions = Arrays.asList("新加坡", "马来西亚", "香港", "泰国", "加拿大", "越南HCM", "公司", "市场部", "研发部", "深圳运营", "韩国");
  159. Date searchStartTime = meium.getSearchStartTime();
  160. Date searchEndTime = meium.getSearchEndTime();
  161. Integer updateType = meium.getUpdateType();
  162. // 如果开始时间和结束时间都为空,则直接返回默认统计结果,即全查
  163. if (searchStartTime == null && searchEndTime == null) {
  164. if (0 == updateType) {
  165. return statisticsMapper.getBuy(searchStartTime, searchEndTime);
  166. } else if (1 == updateType) {
  167. return statisticsMapper.getPay(searchStartTime, searchEndTime);
  168. }
  169. }
  170. // 获取日期范围内的所有日期
  171. // 根据 updateType 和类型选择查询方法
  172. List<Meium> queryResult = null;
  173. if (0 == updateType) {
  174. if ("免费金币".equals(meium.getType())) {
  175. queryResult = statisticsMapper.getBuyAndFree(searchStartTime, searchEndTime);
  176. } else if ("充值金币".equals(meium.getType())) {
  177. queryResult = statisticsMapper.getBuyAndRecharge(searchStartTime, searchEndTime);
  178. } else if ("任务金币".equals(meium.getType())) {
  179. queryResult = statisticsMapper.getBuyAndTask(searchStartTime, searchEndTime);
  180. } else {
  181. queryResult = statisticsMapper.getBuy(searchStartTime, searchEndTime);
  182. }
  183. } else if (1 == updateType) {
  184. if ("免费金币".equals(meium.getType())) {
  185. queryResult = statisticsMapper.getPayAndFree(searchStartTime, searchEndTime);
  186. } else if ("充值金币".equals(meium.getType())) {
  187. queryResult = statisticsMapper.getPayAndRecharge(searchStartTime, searchEndTime);
  188. } else if ("任务金币".equals(meium.getType())) {
  189. queryResult = statisticsMapper.getPayAndTask(searchStartTime, searchEndTime);
  190. } else {
  191. queryResult = statisticsMapper.getPay(searchStartTime, searchEndTime);
  192. }
  193. }
  194. // 将查询结果按区域映射,方便查找
  195. Map<String, Meium> resultMap = new HashMap<>();
  196. if (queryResult != null) {
  197. for (Meium meiumData : queryResult) {
  198. resultMap.put(meiumData.getArea(), meiumData);
  199. }
  200. }
  201. // 遍历所有地区,如果没有数据,设置为默认值
  202. for (String region : allRegions) {
  203. Meium meiumData = resultMap.get(region);
  204. if (meiumData == null) {
  205. Meium defaultMeium = createDefaultMeium(region);
  206. result.add(defaultMeium); // 如果没有数据,创建默认值
  207. } else {
  208. result.add(meiumData); // 否则,加入已有的查询结果
  209. }
  210. }
  211. return result;
  212. }
  213. // 创建默认的 Meium 对象,并设置地区和金币数为0
  214. private Meium createDefaultMeium(String region) {
  215. Meium defaultMeium = new Meium();
  216. defaultMeium.setArea(region); // 设置区域
  217. defaultMeium.setRechargeSumCoin(BigDecimal.ZERO); // 设置充值金币为0
  218. defaultMeium.setFreeSumCoin(BigDecimal.ZERO); // 设置免费金币为0
  219. defaultMeium.setTaskSumCoin(BigDecimal.ZERO); // 设置任务金币为0
  220. defaultMeium.setTotalRechargeSum(BigDecimal.ZERO); // 设置总充值金币为0
  221. return defaultMeium;
  222. }
  223. @Override
  224. public List<SumCoin> getMediu() {
  225. return List.of();
  226. }
  227. // public List<SumCoin> getCoinTime( SumCoin sumcoin) {
  228. //
  229. // System.out.println(sumcoin+"-------sumcoin----");
  230. // Date searchStartTime=sumcoin.getSearchStartTime();
  231. // Date searchEndTime=sumcoin.getSearchEndTime();
  232. // String updateType=sumcoin.getUpdateType();
  233. //
  234. //// //提供开始时间与结束时间
  235. ////// if(searchStartTime!=null && searchEndTime!=null){
  236. //// //计算两个时间点之间的差值
  237. //// long daysBetween = ChronoUnit.DAYS.between(searchStartTime, searchEndTime);
  238. //
  239. //// 提供开始时间与结束时间
  240. //
  241. //
  242. // // 使用 Calendar 清除时间和时区的影响
  243. // Calendar startCal = Calendar.getInstance();
  244. // startCal.setTime(searchStartTime);
  245. // startCal.set(Calendar.HOUR_OF_DAY, 0);
  246. // startCal.set(Calendar.MINUTE, 0);
  247. // startCal.set(Calendar.SECOND, 0);
  248. // startCal.set(Calendar.MILLISECOND, 0);
  249. //
  250. // Calendar endCal = Calendar.getInstance();
  251. // endCal.setTime(searchEndTime);
  252. // endCal.set(Calendar.HOUR_OF_DAY, 0);
  253. // endCal.set(Calendar.MINUTE, 0);
  254. // endCal.set(Calendar.SECOND, 0);
  255. // endCal.set(Calendar.MILLISECOND, 0);
  256. //
  257. // // 计算两个时间点之间的天数差异
  258. // long diffInMillies = endCal.getTimeInMillis() - startCal.getTimeInMillis();
  259. // long daysBetween = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS);
  260. //
  261. //
  262. // //年
  263. // if(daysBetween>100 || searchStartTime==null & searchEndTime==null){
  264. // if("消费".equals(updateType)){
  265. // return statisticsMapper.getMediuConsumeCoin();
  266. // }else if("充值".equals(updateType)){
  267. // return statisticsMapper.getMediuPayCoin();
  268. // }
  269. //
  270. // }else {
  271. // if ("消费".equals(updateType)) {
  272. // return statisticsMapper.getMediuCounsumeCoinyue(searchStartTime,searchEndTime);
  273. // } else if ("充值".equals(updateType)) {
  274. // return statisticsMapper.getMediuPayCoinyue(searchStartTime,searchEndTime);
  275. // }
  276. // }
  277. // return null;
  278. //
  279. // }
  280. //
  281. // @Cacheable(key = "#root.method.name + #sumcoin.hashCode()")
  282. // public List<SumCoin> getCoinTime(SumCoin sumcoin) {
  283. // System.out.println(sumcoin + "-------sumcoin----");
  284. //
  285. // Date searchStartTime = sumcoin.getSearchStartTime();
  286. // Date searchEndTime = sumcoin.getSearchEndTime();
  287. // Integer updateType = sumcoin.getUpdateType();
  288. //
  289. // // 如果开始时间和结束时间都为空,则直接返回默认统计结果
  290. // if (searchStartTime == null && searchEndTime == null) {
  291. // if (1 == updateType) {
  292. // return statisticsMapper.getMediuConsumeCoin(null, null);
  293. // } else if (0 == updateType) {
  294. // return statisticsMapper.getMediuPayCoin(null, null);
  295. // }
  296. // return null; // 或者抛出异常,取决于业务需求
  297. // }
  298. //
  299. // // 如果只有其中一个时间为null,则可能需要处理或抛出异常,这里假设不允许这种情况
  300. // if (searchStartTime == null || searchEndTime == null) {
  301. // throw new IllegalArgumentException("开始时间和结束时间必须同时为空或不为空");
  302. // }
  303. //
  304. // // 使用 Calendar 清除时间和时区的影响
  305. // Calendar startCal = Calendar.getInstance();
  306. // startCal.setTime(searchStartTime);
  307. // startCal.set(Calendar.HOUR_OF_DAY, 0);
  308. // startCal.set(Calendar.MINUTE, 0);
  309. // startCal.set(Calendar.SECOND, 0);
  310. // startCal.set(Calendar.MILLISECOND, 0);
  311. //
  312. // Calendar endCal = Calendar.getInstance();
  313. // endCal.setTime(searchEndTime);
  314. // endCal.set(Calendar.HOUR_OF_DAY, 0);
  315. // endCal.set(Calendar.MINUTE, 0);
  316. // endCal.set(Calendar.SECOND, 0);
  317. // endCal.set(Calendar.MILLISECOND, 0);
  318. //
  319. // // 计算两个时间点之间的天数差异
  320. // long diffInMillies = endCal.getTimeInMillis() - startCal.getTimeInMillis();
  321. // long daysBetween = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS);
  322. //
  323. // // 根据条件选择查询方法
  324. // List<SumCoin> result = null;
  325. //
  326. // // 如果天数差大于100天
  327. // if (daysBetween > 100) {
  328. // if (1 == updateType) {
  329. // result = statisticsMapper.getMediuConsumeCoin(searchStartTime, searchEndTime);
  330. // } else if (0 == updateType) {
  331. // result = statisticsMapper.getMediuPayCoin(searchStartTime, searchEndTime);
  332. // }
  333. // }
  334. // // 如果天数差为0,即同一天
  335. // else if (daysBetween == 0) {
  336. // if (1 == updateType) {
  337. // result = statisticsMapper.getMediuConsumeCoinday(searchEndTime, updateType);
  338. // } else if (0 == updateType) {
  339. // result = statisticsMapper.getMediuPayCoinday(searchEndTime, updateType);
  340. // }
  341. // }
  342. // // 如果天数差小于100天,但不为0(即跨月或较短时间段)
  343. // else {
  344. // if (1 == updateType) {
  345. // result = statisticsMapper.getMediuCounsumeCoinyue(searchStartTime, searchEndTime);
  346. // } else if (0 == updateType) {
  347. // result = statisticsMapper.getMediuPayCoinyue(searchStartTime, searchEndTime);
  348. // }
  349. // }
  350. //
  351. // // 如果查询结果为空或没有数据,返回默认的SumCoin对象
  352. // if (result == null || result.isEmpty()) {
  353. // result = Collections.singletonList(createDefaultSumCoin());
  354. // }
  355. //
  356. // return result;
  357. // }
  358. //
  359. // // 创建默认的 SumCoin 对象
  360. // private SumCoin createDefaultSumCoin() {
  361. // SumCoin defaultSumCoin = new SumCoin();
  362. //
  363. // defaultSumCoin.setRechargeSumCoin(BigDecimal.ZERO);
  364. // defaultSumCoin.setFreeSumCoin(BigDecimal.ZERO);
  365. // defaultSumCoin.setTaskSumCoin(BigDecimal.ZERO);
  366. // // 获取当前日期并设置为字符串格式
  367. // Date currentDate = new Date();
  368. // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d"); // "yyyy-M-d" 格式
  369. // String formattedDate = sdf.format(currentDate); // 格式化日期为字符串
  370. //
  371. // // 设置当前日期
  372. // defaultSumCoin.setDay(formattedDate);
  373. // return defaultSumCoin;
  374. // }
  375. //}
  376. @Cacheable(key = "#root.method.name + #sumcoin.hashCode()")
  377. public List<SumCoin> getCoinTime(SumCoin sumcoin) {
  378. System.out.println(sumcoin + "-------sumcoin----");
  379. Date searchStartTime = sumcoin.getSearchStartTime();
  380. Date searchEndTime = sumcoin.getSearchEndTime();
  381. Integer updateType = sumcoin.getUpdateType();
  382. // 如果开始时间和结束时间都为空,则直接返回默认统计结果,即全查
  383. if (searchStartTime == null && searchEndTime == null) {
  384. if (1 == updateType) {
  385. return statisticsMapper.getMediuConsumeCoin(searchStartTime, searchEndTime);//前端没有选定时间,SQL会查询所有数据
  386. } else if (0 == updateType) {
  387. return statisticsMapper.getMediuPayCoin(null, null);
  388. }
  389. return null; // 或者抛出异常,取决于业务需求
  390. }
  391. // 如果只有其中一个时间为null,则可能需要处理或抛出异常,这里假设不允许这种情况
  392. if (searchStartTime == null || searchEndTime == null) {
  393. throw new IllegalArgumentException("开始时间和结束时间必须同时为空或不为空");
  394. }
  395. // 使用 Calendar 清除时间和时区的影响
  396. Calendar startCal = Calendar.getInstance();
  397. startCal.setTime(searchStartTime);
  398. startCal.set(Calendar.HOUR_OF_DAY, 0);
  399. startCal.set(Calendar.MINUTE, 0);
  400. startCal.set(Calendar.SECOND, 0);
  401. startCal.set(Calendar.MILLISECOND, 0);
  402. Calendar endCal = Calendar.getInstance();
  403. endCal.setTime(searchEndTime);
  404. endCal.set(Calendar.HOUR_OF_DAY, 0);
  405. endCal.set(Calendar.MINUTE, 0);
  406. endCal.set(Calendar.SECOND, 0);
  407. endCal.set(Calendar.MILLISECOND, 0);
  408. // 计算两个时间点之间的天数差异
  409. long diffInMillies = endCal.getTimeInMillis() - startCal.getTimeInMillis();
  410. long daysBetween = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS);
  411. // 根据条件选择查询方法
  412. List<SumCoin> result = new ArrayList<>();
  413. List<SumCoin> queryResult = null;
  414. // 如果天数差大于100天
  415. if (daysBetween > 100) {
  416. if (1 == updateType) {
  417. return statisticsMapper.getMediuConsumeCoin(searchStartTime, searchEndTime);
  418. } else if (0 == updateType) {
  419. return statisticsMapper.getMediuPayCoin(searchStartTime, searchEndTime);
  420. }
  421. }
  422. // 如果天数差为0,即同一天
  423. else if (daysBetween == 0) {
  424. if (1 == updateType) {
  425. queryResult = statisticsMapper.getMediuConsumeCoinday(searchEndTime, updateType);
  426. } else if (0 == updateType) {
  427. queryResult = statisticsMapper.getMediuPayCoinday(searchEndTime, updateType);
  428. }
  429. }
  430. // 如果天数差小于100天,但不为0(即跨月或较短时间段)
  431. else {
  432. if (1 == updateType) {
  433. queryResult = statisticsMapper.getMediuCounsumeCoinyue(searchStartTime, searchEndTime);
  434. } else if (0 == updateType) {
  435. queryResult = statisticsMapper.getMediuPayCoinyue(searchStartTime, searchEndTime);
  436. }
  437. }
  438. // 创建一个日期范围列表,返回给定时间范围内的所有日期
  439. List<Date> allDates = getDateRange(searchStartTime, searchEndTime);
  440. // 将查询结果按日期映射,方便查找
  441. Map<String, SumCoin> resultMap = new HashMap<>();
  442. if (queryResult != null) {
  443. for (SumCoin coin : queryResult) {
  444. resultMap.put(coin.getDay(), coin);
  445. }
  446. }
  447. // 填充没有数据的日期,生成完整的结果.对于每个日期,检查是否有查询结果。如果没有数据,调用 createDefaultSumCoin 方法创建一个默认的 SumCoin 对象,确保所有日期都有数据。
  448. for (Date date : allDates) {
  449. String dateString = new SimpleDateFormat("yyyy-MM-dd").format(date);
  450. if (!resultMap.containsKey(dateString)) {
  451. result.add(createDefaultSumCoin(dateString));
  452. } else {
  453. result.add(resultMap.get(dateString));
  454. }
  455. }
  456. return result;
  457. }
  458. // 获取日期范围的所有日期
  459. private List<Date> getDateRange(Date startDate, Date endDate) {
  460. List<Date> dates = new ArrayList<>();
  461. Calendar startCal = Calendar.getInstance();
  462. startCal.setTime(startDate);
  463. Calendar endCal = Calendar.getInstance();
  464. endCal.setTime(endDate);
  465. while (!startCal.after(endCal)) {
  466. dates.add(startCal.getTime());
  467. startCal.add(Calendar.DAY_OF_YEAR, 1);
  468. }
  469. return dates;
  470. }
  471. // 创建默认的 SumCoin 对象,并设置日期
  472. private SumCoin createDefaultSumCoin(String date) {
  473. SumCoin defaultSumCoin = new SumCoin();
  474. defaultSumCoin.setRechargeSumCoin(BigDecimal.ZERO);
  475. defaultSumCoin.setFreeSumCoin(BigDecimal.ZERO);
  476. defaultSumCoin.setTaskSumCoin(BigDecimal.ZERO);
  477. defaultSumCoin.setDay(date);
  478. return defaultSumCoin;
  479. }
  480. }