diff --git a/src/main/java/com/example/demo/domain/vo/ConsumeDetail.java b/src/main/java/com/example/demo/domain/vo/ConsumeDetail.java index 68c55f9..f1bccf8 100644 --- a/src/main/java/com/example/demo/domain/vo/ConsumeDetail.java +++ b/src/main/java/com/example/demo/domain/vo/ConsumeDetail.java @@ -16,6 +16,7 @@ public class ConsumeDetail { private String name; private String jwcode; private String area; + private String uarea; private Integer activityId; private String rechargeWay; private String goods; @@ -32,6 +33,8 @@ public class ConsumeDetail { private Integer status; private String updateType; private Integer detailFlag; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") private Date createTime; private Integer adminId; private String reson; diff --git a/src/main/java/com/example/demo/domain/vo/Meium.java b/src/main/java/com/example/demo/domain/vo/Meium.java index fd9a956..d295cc7 100644 --- a/src/main/java/com/example/demo/domain/vo/Meium.java +++ b/src/main/java/com/example/demo/domain/vo/Meium.java @@ -36,10 +36,12 @@ public class Meium implements Serializable { private Integer updateType; private String type; private String token; // 新增的token字段 - + private String jwcode; // 如果有更多的未知字段,可以使用@JsonAnySetter来捕获它们 private Map additionalProperties = new HashMap<>(); + private String day; + @JsonAnySetter public void setAdditionalProperty(String name, Object value) { this.additionalProperties.put(name, value); diff --git a/src/main/java/com/example/demo/mapper/ConsumeMapper.java b/src/main/java/com/example/demo/mapper/ConsumeMapper.java index 1a5b8f0..351bf58 100644 --- a/src/main/java/com/example/demo/mapper/ConsumeMapper.java +++ b/src/main/java/com/example/demo/mapper/ConsumeMapper.java @@ -41,20 +41,20 @@ public interface ConsumeMapper { //模糊分页查询,查询消费明细 @Select({ "" }) List select(ConsumeDetail consumeDetail); diff --git a/src/main/java/com/example/demo/mapper/RefundMapper.java b/src/main/java/com/example/demo/mapper/RefundMapper.java index 7e0ff19..a449deb 100644 --- a/src/main/java/com/example/demo/mapper/RefundMapper.java +++ b/src/main/java/com/example/demo/mapper/RefundMapper.java @@ -75,6 +75,7 @@ public interface RefundMapper { "LEFT JOIN user u ON d.jwcode = u.jwcode", "LEFT JOIN audit au ON d.detail_id = au.refund_id", "WHERE d.detail_flag = 1 and update_type = 2 ", + "and auditStatus=#{auditStatus}", "AND d.jwcode = #{jwcode}", "AND d.refund_type LIKE CONCAT('%', #{refundType}, '%')", "AND d.refund_goods LIKE CONCAT('%', #{refundGoods}, '%')", diff --git a/src/main/java/com/example/demo/mapper/StatisticsMapper.java b/src/main/java/com/example/demo/mapper/StatisticsMapper.java index d957b31..d488681 100644 --- a/src/main/java/com/example/demo/mapper/StatisticsMapper.java +++ b/src/main/java/com/example/demo/mapper/StatisticsMapper.java @@ -200,15 +200,15 @@ public interface StatisticsMapper { @Select({ "" }) @@ -250,7 +250,7 @@ public interface StatisticsMapper { @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_y where datediff(create_time,#{searchStartTime})>=0 " + - "and datediff(create_time,#{searchEndTime})<=0 and update_type = 1 group by DATE_FORMAT(create_time,'%m-%d')" + "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); @@ -322,34 +322,34 @@ public interface StatisticsMapper { SumCoin getMess(Integer jwcode); - @Select({"SELECT ad.area,ad.store," , + @Select({"SELECT u.area " , " SUM(d.recharge_coin) AS totalRecharge," , " SUM(d.free_coin) AS totalFree," , " SUM(d.task_coin) AS totalTask," , " (SUM(d.recharge_coin) + SUM(d.free_coin) + SUM(d.task_coin)) AS todayTotalCoin" , "FROM detail_y d" , "INNER JOIN activity a ON d.activity_id = a.activity_id" , - "INNER JOIN admin ad ON a.admin_id = ad.admin_id" , + "INNER JOIN user u ON a.user_id = u.user_id" , "where d.update_type='0'", - "GROUP BY ad.store" , - "ORDER BY ad.store ASC " + "GROUP BY u.area" , + "ORDER BY u.area ASC " }) List getMediumAreaPay(); - @Select({"SELECT ad.area,ad.store," , + @Select({"SELECT u.area " , " SUM(d.recharge_coin) AS totalRecharge," , " SUM(d.free_coin) AS totalFree," , " SUM(d.task_coin) AS totalTask," , " (SUM(d.recharge_coin) + SUM(d.free_coin) + SUM(d.task_coin)) AS todayTotalCoin" , "FROM detail_y d" , - "INNER JOIN admin ad ON ad.admin_id = d.admin_id", + "INNER JOIN user u ON u.jwcode = d.jwcode", "WHERE d.update_type = '1'", - "GROUP BY ad.store", - "ORDER BY ad.store ASC" + "GROUP BY u.area", + "ORDER BY u.area ASC" }) List getMediumAreaConsume(); @@ -528,6 +528,7 @@ public interface StatisticsMapper { "" }) List getPay(@Param("searchStartTime") Date searchStartTime, @Param("searchEndTime") Date searchEndTime); + } diff --git a/src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java index 124e351..336ff6c 100644 --- a/src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java @@ -113,8 +113,7 @@ public class ConsumeServiceImpl implements ConsumeService { return consumeMapper.select(consumeDetail); } - @Cacheable(value = "myCache", key = "#root.methodName + '_' + (#detailYVo != null ? #detailYVo.hashCode() : 'null')") - + @Cacheable(key = "#root.method.name + ':' + #pageNum + '-' + #pageSize + '-' + T(java.util.Objects).hashCode(#consumeDetail)") @Override public PageInfo searchForPage(Integer pageNum, Integer pageSize, ConsumeDetail consumeDetail) { PageHelper.startPage(pageNum, pageSize); diff --git a/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java index facb57b..87b2790 100644 --- a/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java @@ -142,39 +142,119 @@ public class StatisticsServiceImpl implements StatisticsService { return statisticsMapper.getMediumAreaConsume(); } - @Cacheable(key = "#root.method.name+ T(java.util.Objects).hashCode(#meium)") + + // @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()); +// } +// +// } 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 +// return null; +// +// +// } @Override public List getMee(Meium meium) { + List result = new ArrayList<>(); + + // 预定义所有十二个地区 + List allRegions = Arrays.asList("新加坡", "马来西亚", "香港", "泰国", "加拿大", "越南HCM", "公司", "市场部", "研发部", "深圳运营", "韩国"); + + Date searchStartTime = meium.getSearchStartTime(); + Date searchEndTime = meium.getSearchEndTime(); + Integer updateType = meium.getUpdateType(); + + // 如果开始时间和结束时间都为空,则直接返回默认统计结果,即全查 + if (searchStartTime == null && searchEndTime == null) { + if (0 == updateType) { + return statisticsMapper.getBuy(searchStartTime, searchEndTime); + } else if (1 == updateType) { + return statisticsMapper.getPay(searchStartTime, searchEndTime); + } + } + // 获取日期范围内的所有日期 - if (0 == (meium.getUpdateType())) { + // 根据 updateType 和类型选择查询方法 + List queryResult = null; + if (0 == updateType) { if ("免费金币".equals(meium.getType())) { - return statisticsMapper.getBuyAndFree(meium.getSearchStartTime(), meium.getSearchEndTime()); + queryResult = statisticsMapper.getBuyAndFree(searchStartTime, searchEndTime); } else if ("充值金币".equals(meium.getType())) { - return statisticsMapper.getBuyAndRecharge(meium.getSearchStartTime(), meium.getSearchEndTime()); + queryResult = statisticsMapper.getBuyAndRecharge(searchStartTime, searchEndTime); } else if ("任务金币".equals(meium.getType())) { - return statisticsMapper.getBuyAndTask(meium.getSearchStartTime(), meium.getSearchEndTime()); + queryResult = statisticsMapper.getBuyAndTask(searchStartTime, searchEndTime); } else { - return statisticsMapper.getBuy(meium.getSearchStartTime(), meium.getSearchEndTime()); + queryResult = statisticsMapper.getBuy(searchStartTime, searchEndTime); } - - } else if (1 == (meium.getUpdateType())) { + } else if (1 == updateType) { if ("免费金币".equals(meium.getType())) { - return statisticsMapper.getPayAndFree(meium.getSearchStartTime(), meium.getSearchEndTime()); + queryResult = statisticsMapper.getPayAndFree(searchStartTime, searchEndTime); } else if ("充值金币".equals(meium.getType())) { - return statisticsMapper.getPayAndRecharge(meium.getSearchStartTime(), meium.getSearchEndTime()); + queryResult = statisticsMapper.getPayAndRecharge(searchStartTime, searchEndTime); } else if ("任务金币".equals(meium.getType())) { - return statisticsMapper.getPayAndTask(meium.getSearchStartTime(), meium.getSearchEndTime()); + queryResult = statisticsMapper.getPayAndTask(searchStartTime, searchEndTime); } else { - return statisticsMapper.getPay(meium.getSearchStartTime(), meium.getSearchEndTime()); + queryResult = statisticsMapper.getPay(searchStartTime, searchEndTime); } + } - } else - return null; + // 将查询结果按区域映射,方便查找 + Map resultMap = new HashMap<>(); + if (queryResult != null) { + for (Meium meiumData : queryResult) { + resultMap.put(meiumData.getArea(), meiumData); + } + } + // 遍历所有地区,如果没有数据,设置为默认值 + for (String region : allRegions) { + Meium meiumData = resultMap.get(region); + if (meiumData == null) { + Meium defaultMeium = createDefaultMeium(region); + result.add(defaultMeium); // 如果没有数据,创建默认值 + } else { + result.add(meiumData); // 否则,加入已有的查询结果 + } + } + return result; } + // 创建默认的 Meium 对象,并设置地区和金币数为0 + private Meium createDefaultMeium(String region) { + Meium defaultMeium = new Meium(); + defaultMeium.setArea(region); // 设置区域 + defaultMeium.setRechargeSumCoin(BigDecimal.ZERO); // 设置充值金币为0 + defaultMeium.setFreeSumCoin(BigDecimal.ZERO); // 设置免费金币为0 + defaultMeium.setTaskSumCoin(BigDecimal.ZERO); // 设置任务金币为0 + defaultMeium.setTotalRechargeSum(BigDecimal.ZERO); // 设置总充值金币为0 + return defaultMeium; + } + + + @Override public List getMediu() { return List.of(); @@ -404,7 +484,7 @@ public class StatisticsServiceImpl implements StatisticsService { } } - // 创建一个日期范围列表 + // 创建一个日期范围列表,返回给定时间范围内的所有日期 List allDates = getDateRange(searchStartTime, searchEndTime); // 将查询结果按日期映射,方便查找 @@ -415,7 +495,7 @@ public class StatisticsServiceImpl implements StatisticsService { } } - // 填充没有数据的日期,生成完整的结果 + // 填充没有数据的日期,生成完整的结果.对于每个日期,检查是否有查询结果。如果没有数据,调用 createDefaultSumCoin 方法创建一个默认的 SumCoin 对象,确保所有日期都有数据。 for (Date date : allDates) { String dateString = new SimpleDateFormat("yyyy-MM-dd").format(date); if (!resultMap.containsKey(dateString)) {