diff --git a/src/main/java/com/example/demo/controller/coin/WorkbenchController.java b/src/main/java/com/example/demo/controller/coin/WorkbenchController.java index 09fcacf..8294009 100644 --- a/src/main/java/com/example/demo/controller/coin/WorkbenchController.java +++ b/src/main/java/com/example/demo/controller/coin/WorkbenchController.java @@ -155,6 +155,30 @@ public class WorkbenchController { return ResponseEntity.ok(result); } + //获取精确时间内的图表数据、 + @Log("获取精确时间内的图表数据") + @PostMapping("/getExactGraph") + public ResponseEntity getExactSingleGraph(@RequestBody WorkbenchCard workbench, + @AuthenticationPrincipal Admin admin, + @RequestHeader(defaultValue = "zh_CN") String lang) { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(workbench, languageCode); + } + + String account = admin.getAccount(); + List markets = workbenchService.getAdminMarket(account); + + workbench.setMarkets(markets); + WorkbenchCard result = workbenchService.getExactGraph(workbench.getStartDate(), workbench.getEndDate(), workbench.getMarkets()); + // 对结果进行多语言转换 + translateWorkbenchCard(result, lang); + return ResponseEntity.ok(result); + } + /** * 解析语言代码 */ diff --git a/src/main/java/com/example/demo/mapper/coin/WorkBenchMapper.java b/src/main/java/com/example/demo/mapper/coin/WorkBenchMapper.java index 986a8f5..477faf0 100644 --- a/src/main/java/com/example/demo/mapper/coin/WorkBenchMapper.java +++ b/src/main/java/com/example/demo/mapper/coin/WorkBenchMapper.java @@ -57,4 +57,6 @@ public interface WorkBenchMapper { List getRevenue( @Param("markets") List markets, @Param("startDate") Date startDate, @Param("endDate") Date endDate); + //获取精确的各地区数据 + List getExactByMarketAndDate(List markets, Date startDate, Date endDate); } diff --git a/src/main/java/com/example/demo/service/coin/WorkbenchService.java b/src/main/java/com/example/demo/service/coin/WorkbenchService.java index af6bf51..61f2730 100644 --- a/src/main/java/com/example/demo/service/coin/WorkbenchService.java +++ b/src/main/java/com/example/demo/service/coin/WorkbenchService.java @@ -50,4 +50,6 @@ public interface WorkbenchService { WorkbenchCard getSingleGraph(Date startDate, Date endDate, List markets); //获取总营收 List getTotalRevenue(Date startDate, Date endDate, List markets); + //获取精确时间内的工作台图表数据 + WorkbenchCard getExactGraph(Date startDate, Date endDate, List markets); } diff --git a/src/main/java/com/example/demo/serviceImpl/coin/WorkbenchServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/WorkbenchServiceImpl.java index e702506..a965853 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/WorkbenchServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/WorkbenchServiceImpl.java @@ -449,6 +449,48 @@ public class WorkbenchServiceImpl implements WorkbenchService { List list = workBenchMapper.getRevenue(markets, startDate, endDate); return list; } + // 获取精确图表数据 + @Override + public WorkbenchCard getExactGraph(Date startDate, Date endDate, List markets) { + if (markets == null || markets.isEmpty()) { + return new WorkbenchCard(new ArrayList<>(), new ArrayList<>(), markets, startDate, endDate,0,0,new Date()); + } + + // 单次批量查询 + List statsList = workBenchMapper.getExactByMarketAndDate(markets, startDate, endDate); + + // 构建 map: market -> statistics + Map statMap = statsList.stream() + .collect(Collectors.toMap(WorkbenchFullStatistics::getMarket, Function.identity())); + + // 构建最终结果 + List marketGraphs = new ArrayList<>(); + for (String market : markets) { + WorkbenchFullStatistics stats = statMap.getOrDefault(market, new WorkbenchFullStatistics()); + + Map sums = new HashMap<>(); + sums.put("recharge", stats.getTotalRecharge() != null ? stats.getTotalRecharge() : 0); + sums.put("money", stats.getTotalMoney() != null ? stats.getTotalMoney() : 0); + sums.put("rFree", sums.get("recharge") - sums.get("money")); + sums.put("cPermanent", stats.getTotalConsumePermanent() != null ? stats.getTotalConsumePermanent() : 0); + sums.put("cFree", stats.getTotalConsumeFree() != null ? stats.getTotalConsumeFree() : 0); + sums.put("cTask", stats.getTotalConsumeTask() != null ? stats.getTotalConsumeTask() : 0); + sums.put("consume", sums.get("cPermanent") + sums.get("cFree") + sums.get("cTask")); + + WorkbenchMarketGraph graph = new WorkbenchMarketGraph(); + graph.setMarket(market); + graph.setSumRechargePermanent(sums.get("money")); + graph.setSumRechargeFree(sums.get("rFree")); + graph.setSumConsumePermanent(sums.get("cPermanent")); + graph.setSumConsumeFree(sums.get("cFree")); + graph.setSumConsumeTask(sums.get("cTask")); + graph.setSumConsume(sums.get("consume")); + + marketGraphs.add(graph); + } + + return new WorkbenchCard(new ArrayList<>(), marketGraphs, markets, startDate, endDate,0,0,new Date()); + } //获取最近的更新时间 private Date findLatestUpdateTime(List statsList) { diff --git a/src/main/resources/mapper/WorkBenchMapper.xml b/src/main/resources/mapper/WorkBenchMapper.xml index b45bc45..ce5d94b 100644 --- a/src/main/resources/mapper/WorkBenchMapper.xml +++ b/src/main/resources/mapper/WorkBenchMapper.xml @@ -190,4 +190,20 @@ AND cr.status IN (0,1,3,4,6) GROUP BY m.name; + +