Browse Source

12-30 精确时间图表

milestone-20251215-优化
lijianlin 2 weeks ago
parent
commit
d780c23698
  1. 24
      src/main/java/com/example/demo/controller/coin/WorkbenchController.java
  2. 2
      src/main/java/com/example/demo/mapper/coin/WorkBenchMapper.java
  3. 2
      src/main/java/com/example/demo/service/coin/WorkbenchService.java
  4. 42
      src/main/java/com/example/demo/serviceImpl/coin/WorkbenchServiceImpl.java
  5. 16
      src/main/resources/mapper/WorkBenchMapper.xml

24
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<WorkbenchCard> 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<String> markets = workbenchService.getAdminMarket(account);
workbench.setMarkets(markets);
WorkbenchCard result = workbenchService.getExactGraph(workbench.getStartDate(), workbench.getEndDate(), workbench.getMarkets());
// 对结果进行多语言转换
translateWorkbenchCard(result, lang);
return ResponseEntity.ok(result);
}
/**
* 解析语言代码
*/

2
src/main/java/com/example/demo/mapper/coin/WorkBenchMapper.java

@ -57,4 +57,6 @@ public interface WorkBenchMapper {
List<WorkbenchRevenue> getRevenue( @Param("markets") List<String> markets,
@Param("startDate") Date startDate,
@Param("endDate") Date endDate);
//获取精确的各地区数据
List<WorkbenchFullStatistics> getExactByMarketAndDate(List<String> markets, Date startDate, Date endDate);
}

2
src/main/java/com/example/demo/service/coin/WorkbenchService.java

@ -50,4 +50,6 @@ public interface WorkbenchService {
WorkbenchCard getSingleGraph(Date startDate, Date endDate, List<String> markets);
//获取总营收
List<WorkbenchRevenue> getTotalRevenue(Date startDate, Date endDate, List<String> markets);
//获取精确时间内的工作台图表数据
WorkbenchCard getExactGraph(Date startDate, Date endDate, List<String> markets);
}

42
src/main/java/com/example/demo/serviceImpl/coin/WorkbenchServiceImpl.java

@ -449,6 +449,48 @@ public class WorkbenchServiceImpl implements WorkbenchService {
List<WorkbenchRevenue> list = workBenchMapper.getRevenue(markets, startDate, endDate);
return list;
}
// 获取精确图表数据
@Override
public WorkbenchCard getExactGraph(Date startDate, Date endDate, List<String> markets) {
if (markets == null || markets.isEmpty()) {
return new WorkbenchCard(new ArrayList<>(), new ArrayList<>(), markets, startDate, endDate,0,0,new Date());
}
// 单次批量查询
List<WorkbenchFullStatistics> statsList = workBenchMapper.getExactByMarketAndDate(markets, startDate, endDate);
// 构建 map: market -> statistics
Map<String, WorkbenchFullStatistics> statMap = statsList.stream()
.collect(Collectors.toMap(WorkbenchFullStatistics::getMarket, Function.identity()));
// 构建最终结果
List<WorkbenchMarketGraph> marketGraphs = new ArrayList<>();
for (String market : markets) {
WorkbenchFullStatistics stats = statMap.getOrDefault(market, new WorkbenchFullStatistics());
Map<String, Integer> 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<Statistics> statsList) {

16
src/main/resources/mapper/WorkBenchMapper.xml

@ -190,4 +190,20 @@
AND cr.status IN (0,1,3,4,6)
GROUP BY m.name;
</select>
<!--获取精确的各地区数据-->
<select id="getExactByMarketAndDate" resultType="com.example.demo.domain.vo.coin.WorkbenchFullStatistics">
SELECT
CASE WHEN m.name IS NULL THEN '其他' ELSE m.name END AS market,
SUM(CASE WHEN ugr.type=0 THEN ugr.sum_gold ELSE 0 END) AS totalRecharge,
SUM(CASE WHEN ugr.type=0 THEN ugr.permanent_gold ELSE 0 END) AS totalMoney,
SUM(CASE WHEN ugr.type=1 THEN ugr.permanent_gold ELSE 0 END) AS totalConsumePermanent,
SUM(CASE WHEN ugr.type=1 THEN ugr.free_june + ugr.free_december ELSE 0 END) AS totalConsumeFree,
SUM(CASE WHEN ugr.type=1 THEN ugr.task_gold ELSE 0 END) AS totalConsumeTask
FROM user_gold_record ugr
left join user u on ugr.jwcode=u.jwcode
left join market m on u.market=m.id
WHERE u.flag=1 and ugr.flag=1 and ugr.audit_status in (1,3)
AND ugr.create_time BETWEEN #{startDate} AND #{endDate}
GROUP BY u.market;
</select>
</mapper>
Loading…
Cancel
Save