diff --git a/src/main/java/com/example/demo/controller/StatisticsController.java b/src/main/java/com/example/demo/controller/StatisticsController.java index 2483c6a..709b4aa 100644 --- a/src/main/java/com/example/demo/controller/StatisticsController.java +++ b/src/main/java/com/example/demo/controller/StatisticsController.java @@ -103,7 +103,7 @@ public class StatisticsController { @PostMapping("/getMediuConsumeCoin2") public Result getMediuConsumeCoin2(@RequestBody SumCoin sumCoin){ System.out.println(sumCoin.getSearchStartTime()+" -------------searchStartTime----"); - return Result.success(statisticsMapper.getMediuConsumeCoin2(sumCoin)); + return Result.success(statisticsMapper. getMediuConsumeCoin2(sumCoin)); } @PostMapping("/getCoinTime") public Result getCoinTime(@RequestBody SumCoin sumcoin){ diff --git a/src/main/java/com/example/demo/domain/entity/Audit.java b/src/main/java/com/example/demo/domain/entity/Audit.java index 02ca3b4..89d166d 100644 --- a/src/main/java/com/example/demo/domain/entity/Audit.java +++ b/src/main/java/com/example/demo/domain/entity/Audit.java @@ -30,6 +30,21 @@ public class Audit { private BigDecimal freeGold; private BigDecimal paidGold; +private BigDecimal rechargeGold; + private Integer activityId; + private String activityName; + private String area; + private Integer flag; + private String name; + private String payWay; + private String remark; + private String userName; + private String orderCode; + private String rechargeWay; + private String rechargeVoucher; + private String rechargeTime; + private String username; + } diff --git a/src/main/java/com/example/demo/domain/entity/DetailY.java b/src/main/java/com/example/demo/domain/entity/DetailY.java index 490c2a5..ca7344f 100644 --- a/src/main/java/com/example/demo/domain/entity/DetailY.java +++ b/src/main/java/com/example/demo/domain/entity/DetailY.java @@ -64,4 +64,7 @@ public class DetailY implements Serializable { private BigDecimal free12; private BigDecimal allGold; + private String ActivityName; + private Integer flag; + private String reson; } diff --git a/src/main/java/com/example/demo/domain/vo/RechargeVo.java b/src/main/java/com/example/demo/domain/vo/RechargeVo.java index 3a4b2f8..8e361fa 100644 --- a/src/main/java/com/example/demo/domain/vo/RechargeVo.java +++ b/src/main/java/com/example/demo/domain/vo/RechargeVo.java @@ -41,5 +41,6 @@ public class RechargeVo { private String token; private Integer detailId; + private String orderCode; } \ No newline at end of file diff --git a/src/main/java/com/example/demo/mapper/DetailMapper.java b/src/main/java/com/example/demo/mapper/DetailMapper.java index a057f2a..9718021 100644 --- a/src/main/java/com/example/demo/mapper/DetailMapper.java +++ b/src/main/java/com/example/demo/mapper/DetailMapper.java @@ -38,7 +38,7 @@ public interface DetailMapper { "", "(status is null or status='1')", "and detail.jwcode=#{jwcode}", - "and update_type=#{updateType}", + "and update_type=#{updateType}", "AND detail.create_time BETWEEN #{startDate} AND #{endDate}", "", "" diff --git a/src/main/java/com/example/demo/mapper/StatisticsMapper.java b/src/main/java/com/example/demo/mapper/StatisticsMapper.java index 3737e2f..7ed2967 100644 --- a/src/main/java/com/example/demo/mapper/StatisticsMapper.java +++ b/src/main/java/com/example/demo/mapper/StatisticsMapper.java @@ -198,15 +198,18 @@ public interface StatisticsMapper { @Select({ - "SELECT DATE_FORMAT(create_time, '%Y-%m') AS month," + - " SUM(recharge_coin) AS rechargeSumCoin," + - " SUM(free_coin) AS freeSumCoin," + - " SUM(task_coin) AS taskSumCoin" + - " FROM detail" + - " WHERE create_time >= #{searchStartTime}" + - " AND create_time <= #{searchEndTime}" + - " AND update_type = '0'" + - "GROUP BY month ORDER BY month ASC" + "" }) List getMediuPayCoin(@Param("searchStartTime") Date StartTime, @Param("searchEndTime") Date searchEndTime); @@ -229,7 +232,7 @@ public interface StatisticsMapper { "WHERE update_type = '1'", "", " AND create_time BETWEEN #{searchStartTime} AND #{searchEndTime}", - "", + "",//之前没有加动态SQL,如果前端传递空数据库会查不到 "GROUP BY month", "ORDER BY month ASC", "" @@ -239,44 +242,44 @@ public interface StatisticsMapper { // 本月 ---0 @Select({"select DATE_FORMAT(create_time,'%Y-%m-%d') as day,sum(recharge_coin) AS rechargeSumCoin,sum(free_coin) as freeSumCoin ,sum(task_coin) as taskSumCoin " + - "from detail where recharge_coin>0 and datediff(create_time,#{searchStartTime})>=0 " + - "and datediff(create_time,#{searchEndTime})<=0 and update_type = '0' group by DATE_FORMAT(create_time,'%m-%d')" + "from detail where datediff(create_time,#{searchStartTime})>=0 " + + "and datediff(create_time,#{searchEndTime})<=0 and update_type = 0 group by DATE_FORMAT(create_time,'%m-%d')" }) List getMediuPayCoinyue(@Param("searchStartTime") Date searchStartTime, @Param("searchEndTime") Date searchEndTime); @Select({"select DATE_FORMAT(create_time,'%Y-%m-%d') as day,sum(recharge_coin) AS rechargeSumCoin,sum(free_coin) as freeSumCoin ,sum(task_coin) as taskSumCoin " + - "from detail where recharge_coin>0 and datediff(create_time,#{searchStartTime})>=0 " + - "and datediff(create_time,#{searchEndTime})<=0 and update_type = '1' group by DATE_FORMAT(create_time,'%m-%d')" + "from detail where datediff(create_time,#{searchStartTime})>=0 " + + "and datediff(create_time,#{searchEndTime})<=0 and update_type = 1 group by DATE_FORMAT(create_time,'%m-%d')" }) List getMediuCounsumeCoinyue(@Param("searchStartTime") Date searchStartTime, @Param("searchEndTime") Date searchEndTime); - @Select({ - "SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS day,", - " NOW() AS currentTimestamp,", - " SUM(recharge_coin) AS rechargeSumCoin,", - " SUM(free_coin) AS freeSumCoin,", - " SUM(task_coin) AS taskSumCoin", - "FROM `detail`", - "WHERE DATE(create_time) = CURDATE() AND update_type = '0'" + @Select({"select DATE_FORMAT(create_time,'%Y-%m-%d') as day,sum(recharge_coin) AS rechargeSumCoin,sum(free_coin) as freeSumCoin ,sum(task_coin) as taskSumCoin " + + "from detail where create_time=#{searchEndTime} and update_type = 0 group by DATE_FORMAT(create_time,'%m-%d')" }) - List getMediuPayCoinday(); + List getMediuPayCoinday(@Param("searchEndTime") Date searchEndTime, @Param("updateType") Integer updateType); + + @Select({"select DATE_FORMAT(create_time,'%Y-%m-%d') as day,sum(recharge_coin) AS rechargeSumCoin,sum(free_coin) as freeSumCoin ,sum(task_coin) as taskSumCoin " + + "from detail where create_time=#{searchStartTime} and update_type = 1 group by DATE_FORMAT(create_time,'%m-%d')" + }) + List getMediuConsumeCoinday1(@Param("searchStartTime") Date searchStartTime, @Param("searchEndTime") Date searchEndTime); @Select({ "SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS day,", - " NOW() AS currentTimestamp,", - " SUM(recharge_coin) AS rechargeSumCoin,", - " SUM(free_coin) AS freeSumCoin,", - " SUM(task_coin) AS taskSumCoin", - "FROM `detail`", - "WHERE DATE(create_time) = CURDATE() AND update_type = '1'" + "IFNULL(SUM(recharge_coin), 0) AS rechargeSumCoin,", + "IFNULL(SUM(free_coin), 0) AS freeSumCoin,", + "IFNULL(SUM(task_coin), 0) AS taskSumCoin", + "FROM detail", + "WHERE DATE(create_time) = #{searchEndTime}", + "AND update_type = #{updateType}", + "GROUP BY DATE_FORMAT(create_time, '%Y-%m-%d')" }) + List getMediuConsumeCoinday(@Param("searchEndTime") Date searchEndTime, @Param("updateType") Integer updateType); - List getMediuConsumeCoinday(); //给定时间段--10 @Select({"select DATE_FORMAT(create_time,'%Y-%m-%d') as day,sum(recharge_coin) AS rechargeSumCoin,sum(free_coin) as freeSumCoin ,sum(task_coin) as taskSumCoin " + diff --git a/src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java index 18e2fda..5658d30 100644 --- a/src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java @@ -5,14 +5,17 @@ package com.example.demo.serviceImpl; import com.example.demo.domain.entity.Audit; import com.example.demo.domain.entity.Detail; +import com.example.demo.domain.entity.DetailY; import com.example.demo.domain.entity.User; import com.example.demo.domain.vo.ConsumeDetail; import com.example.demo.mapper.AuditMapper; +import com.example.demo.mapper.DetailYMapper; import com.example.demo.mapper.RechargeMapper; import com.example.demo.mapper.UserMapper; import com.example.demo.sevice.AuditService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import lombok.Data; import lombok.RequiredArgsConstructor; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; @@ -23,7 +26,9 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.time.LocalDate; import java.time.Month; +import java.util.Date; import java.util.List; + @Transactional @Service @RequiredArgsConstructor @@ -32,9 +37,11 @@ public class AuditServiceImpl implements AuditService { private final UserMapper userMapper; private final AuditMapper auditMapper; + private final DetailYMapper detailYMapper; @CacheEvict(value = {"audit", "recharge"}, allEntries = true) @Override + public int add(Audit audit) { return auditMapper.insert(audit); } @@ -47,6 +54,7 @@ public class AuditServiceImpl implements AuditService { @CacheEvict(value = {"audit", "recharge","refund"}, allEntries = true) @Override + @Transactional public int goldedit(Audit audit) throws Exception { int result = auditMapper.update(audit); if (result != 1) { @@ -89,34 +97,53 @@ public class AuditServiceImpl implements AuditService { throw new Exception("Failed to insert recharge data"); } -// int rechargeId = audit.getRechargeId(); -// String jwCode= audit.getJwcode(); -// String JwCode = audit.getJwcode(); -// int activityId = audit.getActivityId(); -// BigDecimal paidGold =audit.getPaidGold(); -// BigDecimal freeGold =audit.getFreeGold(); -// BigDecimal rechargeGold =audit.getRechargeGold(); -// String rechargeWay =audit.getRechargeWay(); -// String remark =audit.getRemark(); -// int adminId =audit.getAdminId(); -// Detail detail = new Detail(); -// detail.setJwcode(JwCode); -// detail.setActivityId(activityId); -// detail.setRechargeCoin(rechargeGold); -// detail.setFreeCoin(freeGold); -// detail.setRechargeWay(rechargeWay); -// detail.setRemark(remark); -// detail.setUpdateType("充值"); -// detail.setAdminId(adminId); -// -// -// System.out.println(uuid+"/*/*/*-/-*/-/*-/-*/-/*-/*-/-*"); -// detail.setOrderCode(uuid); -// System.out.println(detail); -// result = detailMapper.add(detail); -// if (result != 1) { -// throw new Exception("Failed to insert another entity"); -// } + int rechargeId = audit.getRechargeId(); + String jwCode= audit.getJwcode(); + String JwCode = audit.getJwcode(); + int activityId = audit.getActivityId(); + BigDecimal paidGold =audit.getPaidGold(); + BigDecimal freeGold =audit.getFreeGold(); + BigDecimal rechargeGold =audit.getRechargeGold(); + String remark =audit.getRemark(); + String uuid = audit.getOrderCode(); + int adminId =audit.getAdminId(); + String activityName = audit.getActivityName(); + String area = audit.getArea(); + String username = audit.getUserName(); + Integer status1=audit.getStatus(); + String reson = audit.getReson(); + String name = audit.getName(); + Integer flag = audit.getFlag(); + Date createTime = audit.getCreateTime(); + + DetailY detailY = new DetailY(); + detailY.setJwcode(JwCode); + detailY.setActivityId(activityId); + detailY.setRechargeCoin(paidGold); + detailY.setFreeCoin(freeGold); + detailY.setRemark(remark); + detailY.setUpdateType(0); + detailY.setAdminId(adminId); + detailY.setActivityName(activityName); + detailY.setArea(area); + detailY.setName(name); + detailY.setUserName(username); + detailY.setOrderCode(uuid); + detailY.setStatus(status1); + detailY.setReson(reson); + detailY.setFlag(flag); + detailY.setCreateTime(createTime); + + + + + System.out.println(uuid+"/*/*/*-/-*/-/*-/-*/-/*-/*-/-*"); + detailY.setOrderCode(uuid); + System.out.println(detailY); + result = detailYMapper.add(detailY); + if (result != 1) { + throw new Exception("Failed to insert another entity"); + } } return auditMapper.update(audit); } diff --git a/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java index 661d70f..b498356 100644 --- a/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java @@ -1,9 +1,8 @@ package com.example.demo.serviceImpl; -import java.util.Calendar; -import java.util.Date; -import java.util.List; +import java.text.SimpleDateFormat; +import java.util.*; import java.util.concurrent.TimeUnit; import com.example.demo.Util.CheckIfNullUtil; import com.example.demo.domain.vo.Meium; @@ -32,20 +31,21 @@ import java.util.List; @CacheConfig(cacheNames = "statistics") public class StatisticsServiceImpl implements StatisticsService { private final StatisticsMapper statisticsMapper; - @Cacheable(key="#root.method.name") + + @Cacheable(key = "#root.method.name") @Override public Statistics getStatistics() { Statistics statistics = new Statistics(); // 全年累计数据 - Statistics yearStats = CheckIfNullUtil.defaultIfNull( statisticsMapper.getTotalYearCoin(), new Statistics()); + Statistics yearStats = CheckIfNullUtil.defaultIfNull(statisticsMapper.getTotalYearCoin(), new Statistics()); statistics.setRechargeSumCoin(yearStats.getRechargeSumCoin()); statistics.setFreeSumCoin(yearStats.getFreeSumCoin()); statistics.setTaskSumCoin(yearStats.getTaskSumCoin()); statistics.setTotalSumCoin(yearStats.getTotalSumCoin()); // 昨日新增数据 - Statistics yesterdayStats = CheckIfNullUtil.defaultIfNull( statisticsMapper.getYesterdayNewCoin(), new Statistics()); + Statistics yesterdayStats = CheckIfNullUtil.defaultIfNull(statisticsMapper.getYesterdayNewCoin(), new Statistics()); statistics.setRechargeYesterdaySumCoin(yesterdayStats.getRechargeYesterdaySumCoin()); statistics.setFreeYesterdaySumCoin(yesterdayStats.getFreeYesterdaySumCoin()); statistics.setTaskYesterdaySumCoin(yesterdayStats.getTaskYesterdaySumCoin()); @@ -70,7 +70,7 @@ public class StatisticsServiceImpl implements StatisticsService { //今日和昨日充值人数 int todayCount = statisticsMapper.getRechargeCountToday(); int yesterdayCount = statisticsMapper.getRechargeCountYesterday(); - int firstYesterdayCount =statisticsMapper.getFirstRechargeCountYesterday(); + int firstYesterdayCount = statisticsMapper.getFirstRechargeCountYesterday(); statistics.setRechargeCountToday(todayCount); statistics.setRechargeCountYesterday(yesterdayCount); statistics.setFirstRechargeCountYesterday(firstYesterdayCount); @@ -85,7 +85,8 @@ public class StatisticsServiceImpl implements StatisticsService { return statistics; } - @Cacheable(key="#root.method.name") + + @Cacheable(key = "#root.method.name") @Override public Statisticss stats() { Statisticss a = new Statisticss(); @@ -97,16 +98,18 @@ public class StatisticsServiceImpl implements StatisticsService { } //----------------------------------------------------------------------------------------------------// - @Cacheable(key="#root.method.name") - public SumCoin getSumCoin(){ + @Cacheable(key = "#root.method.name") + public SumCoin getSumCoin() { return statisticsMapper.getSumCoin(); } - @Cacheable(key="#root.method.name") + + @Cacheable(key = "#root.method.name") @Override public SumCoin getYearConsumeCoin() { return statisticsMapper.getYearConsumeCoin(); } - @Cacheable(key="#root.method.name") + + @Cacheable(key = "#root.method.name") @Override public SumCoin getDayConsumeCoin() { return statisticsMapper.getDayConsumeCoin(); @@ -123,46 +126,47 @@ public class StatisticsServiceImpl implements StatisticsService { } - public SumCoin getMess(Integer jwcode){ + public SumCoin getMess(Integer jwcode) { return statisticsMapper.getMess(jwcode); } - @Cacheable(key="#root.method.name") + + @Cacheable(key = "#root.method.name") @Override - public List getMediumAreaPay() { + public List getMediumAreaPay() { return statisticsMapper.getMediumAreaPay(); } - @Cacheable(key="#root.method.name") + + @Cacheable(key = "#root.method.name") @Override - public List getMediumAreaConsume() { + public List getMediumAreaConsume() { return statisticsMapper.getMediumAreaConsume(); } - @Override - public List getMee( Meium meium) { - - - if(0 == (meium.getUpdateType())){ - if("免费金币".equals(meium.getType())){ - return statisticsMapper.getBuyAndFree(meium.getSearchStartTime(),meium.getSearchEndTime()); - }else if("充值金币".equals(meium.getType())){ - return statisticsMapper.getBuyAndRecharge(meium.getSearchStartTime(),meium.getSearchEndTime()); - }else if("任务金币".equals(meium.getType())){ - return statisticsMapper.getBuyAndTask(meium.getSearchStartTime(),meium.getSearchEndTime()); - }else{ - return statisticsMapper.getBuy(meium.getSearchStartTime(),meium.getSearchEndTime()); + public List getMee(Meium meium) { + + + if (0 == (meium.getUpdateType())) { + if ("免费金币".equals(meium.getType())) { + return statisticsMapper.getBuyAndFree(meium.getSearchStartTime(), meium.getSearchEndTime()); + } else if ("充值金币".equals(meium.getType())) { + return statisticsMapper.getBuyAndRecharge(meium.getSearchStartTime(), meium.getSearchEndTime()); + } else if ("任务金币".equals(meium.getType())) { + return statisticsMapper.getBuyAndTask(meium.getSearchStartTime(), meium.getSearchEndTime()); + } else { + return statisticsMapper.getBuy(meium.getSearchStartTime(), meium.getSearchEndTime()); } - }else if(1 == (meium.getUpdateType())){ - if("免费金币".equals(meium.getType())){ - return statisticsMapper.getPayAndFree(meium.getSearchStartTime(),meium.getSearchEndTime()); - }else if("充值金币".equals(meium.getType())){ - return statisticsMapper.getPayAndRecharge(meium.getSearchStartTime(),meium.getSearchEndTime()); - }else if("任务金币".equals(meium.getType())){ - return statisticsMapper.getPayAndTask(meium.getSearchStartTime(),meium.getSearchEndTime()); - }else{ - return statisticsMapper.getPay(meium.getSearchStartTime(),meium.getSearchEndTime()); + } else if (1 == (meium.getUpdateType())) { + if ("免费金币".equals(meium.getType())) { + return statisticsMapper.getPayAndFree(meium.getSearchStartTime(), meium.getSearchEndTime()); + } else if ("充值金币".equals(meium.getType())) { + return statisticsMapper.getPayAndRecharge(meium.getSearchStartTime(), meium.getSearchEndTime()); + } else if ("任务金币".equals(meium.getType())) { + return statisticsMapper.getPayAndTask(meium.getSearchStartTime(), meium.getSearchEndTime()); + } else { + return statisticsMapper.getPay(meium.getSearchStartTime(), meium.getSearchEndTime()); } } else @@ -227,16 +231,109 @@ public class StatisticsServiceImpl implements StatisticsService { // return statisticsMapper.getMediuPayCoinyue(searchStartTime,searchEndTime); // } // } +// return null; // +// } + // +// @Cacheable(key = "#root.method.name + #sumcoin.hashCode()") +// public List getCoinTime(SumCoin sumcoin) { +// System.out.println(sumcoin + "-------sumcoin----"); // +// Date searchStartTime = sumcoin.getSearchStartTime(); +// Date searchEndTime = sumcoin.getSearchEndTime(); +// Integer updateType = sumcoin.getUpdateType(); // +// // 如果开始时间和结束时间都为空,则直接返回默认统计结果 +// if (searchStartTime == null && searchEndTime == null) { +// if (1 == updateType) { +// return statisticsMapper.getMediuConsumeCoin(null, null); +// } else if (0 == updateType) { +// return statisticsMapper.getMediuPayCoin(null, null); +// } +// return null; // 或者抛出异常,取决于业务需求 +// } // +// // 如果只有其中一个时间为null,则可能需要处理或抛出异常,这里假设不允许这种情况 +// if (searchStartTime == null || searchEndTime == null) { +// throw new IllegalArgumentException("开始时间和结束时间必须同时为空或不为空"); +// } // -// return null; +// // 使用 Calendar 清除时间和时区的影响 +// Calendar startCal = Calendar.getInstance(); +// startCal.setTime(searchStartTime); +// startCal.set(Calendar.HOUR_OF_DAY, 0); +// startCal.set(Calendar.MINUTE, 0); +// startCal.set(Calendar.SECOND, 0); +// startCal.set(Calendar.MILLISECOND, 0); +// +// Calendar endCal = Calendar.getInstance(); +// endCal.setTime(searchEndTime); +// endCal.set(Calendar.HOUR_OF_DAY, 0); +// endCal.set(Calendar.MINUTE, 0); +// endCal.set(Calendar.SECOND, 0); +// endCal.set(Calendar.MILLISECOND, 0); // +// // 计算两个时间点之间的天数差异 +// long diffInMillies = endCal.getTimeInMillis() - startCal.getTimeInMillis(); +// long daysBetween = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS); +// +// // 根据条件选择查询方法 +// List result = null; +// +// // 如果天数差大于100天 +// if (daysBetween > 100) { +// if (1 == updateType) { +// result = statisticsMapper.getMediuConsumeCoin(searchStartTime, searchEndTime); +// } else if (0 == updateType) { +// result = statisticsMapper.getMediuPayCoin(searchStartTime, searchEndTime); +// } +// } +// // 如果天数差为0,即同一天 +// else if (daysBetween == 0) { +// if (1 == updateType) { +// result = statisticsMapper.getMediuConsumeCoinday(searchEndTime, updateType); +// } else if (0 == updateType) { +// result = statisticsMapper.getMediuPayCoinday(searchEndTime, updateType); +// } +// } +// // 如果天数差小于100天,但不为0(即跨月或较短时间段) +// else { +// if (1 == updateType) { +// result = statisticsMapper.getMediuCounsumeCoinyue(searchStartTime, searchEndTime); +// } else if (0 == updateType) { +// result = statisticsMapper.getMediuPayCoinyue(searchStartTime, searchEndTime); +// } +// } +// +// // 如果查询结果为空或没有数据,返回默认的SumCoin对象 +// if (result == null || result.isEmpty()) { +// result = Collections.singletonList(createDefaultSumCoin()); +// } +// +// return result; +// } +// +// // 创建默认的 SumCoin 对象 +// private SumCoin createDefaultSumCoin() { +// SumCoin defaultSumCoin = new SumCoin(); +// +// defaultSumCoin.setRechargeSumCoin(BigDecimal.ZERO); +// defaultSumCoin.setFreeSumCoin(BigDecimal.ZERO); +// defaultSumCoin.setTaskSumCoin(BigDecimal.ZERO); +// // 获取当前日期并设置为字符串格式 +// Date currentDate = new Date(); +// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d"); // "yyyy-M-d" 格式 +// String formattedDate = sdf.format(currentDate); // 格式化日期为字符串 +// +// // 设置当前日期 +// defaultSumCoin.setDay(formattedDate); +// return defaultSumCoin; // } -@Cacheable(key="#root.method.name+ #sumcoin.hashCode()") +//} + + + @Cacheable(key = "#root.method.name + #sumcoin.hashCode()") public List getCoinTime(SumCoin sumcoin) { System.out.println(sumcoin + "-------sumcoin----"); @@ -244,12 +341,12 @@ public class StatisticsServiceImpl implements StatisticsService { Date searchEndTime = sumcoin.getSearchEndTime(); Integer updateType = sumcoin.getUpdateType(); - // 如果开始时间和结束时间都为空,则直接返回默认统计结果 + // 如果开始时间和结束时间都为空,则直接返回默认统计结果,即全查 if (searchStartTime == null && searchEndTime == null) { - if (1 == updateType) { - return statisticsMapper.getMediuConsumeCoin(searchStartTime,searchEndTime); + if (1 == updateType) { + return statisticsMapper.getMediuConsumeCoin(searchStartTime, searchEndTime);//前端没有选定时间,SQL会查询所有数据 } else if (0 == updateType) { - return statisticsMapper.getMediuPayCoin(searchStartTime,searchEndTime); + return statisticsMapper.getMediuPayCoin(null, null); } return null; // 或者抛出异常,取决于业务需求 } @@ -279,22 +376,83 @@ public class StatisticsServiceImpl implements StatisticsService { long daysBetween = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS); // 根据条件选择查询方法 + List result = new ArrayList<>(); + List queryResult = null; + + // 如果天数差大于100天 if (daysBetween > 100) { if (1 == updateType) { - return statisticsMapper.getMediuConsumeCoin(searchStartTime,searchEndTime); + return statisticsMapper.getMediuConsumeCoin(searchStartTime, searchEndTime); + } else if (0 == updateType) { + return statisticsMapper.getMediuPayCoin(searchStartTime, searchEndTime); + } + } + // 如果天数差为0,即同一天 + else if (daysBetween == 0) { + if (1 == updateType) { + queryResult = statisticsMapper.getMediuConsumeCoinday(searchEndTime, updateType); } else if (0 == updateType) { - return statisticsMapper.getMediuPayCoin(searchStartTime,searchEndTime); + queryResult = statisticsMapper.getMediuPayCoinday(searchEndTime, updateType); } - } else { + } + // 如果天数差小于100天,但不为0(即跨月或较短时间段) + else { if (1 == updateType) { - return statisticsMapper.getMediuCounsumeCoinyue(searchStartTime, searchEndTime); + queryResult = statisticsMapper.getMediuCounsumeCoinyue(searchStartTime, searchEndTime); } else if (0 == updateType) { - return statisticsMapper.getMediuPayCoinyue(searchStartTime, searchEndTime); + queryResult = statisticsMapper.getMediuPayCoinyue(searchStartTime, searchEndTime); + } + } + + // 创建一个日期范围列表 + List allDates = getDateRange(searchStartTime, searchEndTime); + + // 将查询结果按日期映射,方便查找 + Map resultMap = new HashMap<>(); + if (queryResult != null) { + for (SumCoin coin : queryResult) { + resultMap.put(coin.getDay(), coin); + } + } + + // 填充没有数据的日期,生成完整的结果 + for (Date date : allDates) { + String dateString = new SimpleDateFormat("yyyy-MM-dd").format(date); + if (!resultMap.containsKey(dateString)) { + result.add(createDefaultSumCoin(dateString)); + } else { + result.add(resultMap.get(dateString)); } } - // 如果没有匹配的updateType,返回null或抛出异常,取决于业务需求 - return null; + return result; + } + + // 获取日期范围的所有日期 + private List getDateRange(Date startDate, Date endDate) { + List dates = new ArrayList<>(); + Calendar startCal = Calendar.getInstance(); + startCal.setTime(startDate); + Calendar endCal = Calendar.getInstance(); + endCal.setTime(endDate); + + while (!startCal.after(endCal)) { + dates.add(startCal.getTime()); + startCal.add(Calendar.DAY_OF_YEAR, 1); + } + + return dates; } -} + // 创建默认的 SumCoin 对象,并设置日期 + private SumCoin createDefaultSumCoin(String date) { + SumCoin defaultSumCoin = new SumCoin(); + + defaultSumCoin.setRechargeSumCoin(BigDecimal.ZERO); + defaultSumCoin.setFreeSumCoin(BigDecimal.ZERO); + defaultSumCoin.setTaskSumCoin(BigDecimal.ZERO); + defaultSumCoin.setDay(date); + + return defaultSumCoin; + } +} \ No newline at end of file