From dce5a34e89123f487cd22b9a4e5254ffc8a5df75 Mon Sep 17 00:00:00 2001
From: 刘帅 <rr.iii@qq.com>
Date: 星期四, 17 九月 2026 20:31:34 +0800
Subject: [PATCH] feat&bug:运营商数据统计修改
---
cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java | 79 ++++++++++++++++++++++++++++++++++++++-
1 files changed, 76 insertions(+), 3 deletions(-)
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java b/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java
index 266c167..8dafa9e 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java
@@ -1128,11 +1128,75 @@
return map;
}
+ /** 门店活动统计:仅统计指定门店的赛事及其报名记录。 */
+ @ResponseBody
+ @PostMapping("/base/competition/actStore")
+ public HashMap<String, Object> actStore(@RequestBody CompetionVO vo) {
+ HashMap<String, Object> map = new HashMap<>();
+ if (vo.getStoreIds() == null || vo.getStoreIds().isEmpty()) {
+ vo.setStoreIds(Collections.singletonList(-1));
+ }
+ ArrayList<Integer> years = new ArrayList<>();
+ ArrayList<Integer> yearsUser = new ArrayList<>();
+ int year = DateUtil.year(new Date());
+ for (int statisticYear = year - 9; statisticYear <= year; statisticYear++) {
+ String dateText = String.valueOf(statisticYear);
+ List<Integer> competitionIds = listStoreCompetitionIds(vo, dateText);
+ years.add(competitionIds.size());
+ yearsUser.add(countStoreUserCompetitions(dateText, competitionIds));
+ }
+ map.put("yearData", years);
+ map.put("yearsUser", yearsUser);
+
+ ArrayList<Integer> months = new ArrayList<>();
+ ArrayList<Integer> monthsUser = new ArrayList<>();
+ for (int month = 1; month <= 12; month++) {
+ String dateText = String.format("%d-%02d", year, month);
+ List<Integer> competitionIds = listStoreCompetitionIds(vo, dateText);
+ months.add(competitionIds.size());
+ monthsUser.add(countStoreUserCompetitions(dateText, competitionIds));
+ }
+ map.put("monthData", months);
+ map.put("monthsUser", monthsUser);
+ return map;
+ }
+
private List<Integer> listCompetitionIds(CompetionVO vo, String dateText) {
return cttService.list(buildCompetitionCountWrapper(vo, dateText))
.stream()
.map(Competition::getId)
.collect(Collectors.toList());
+ }
+
+ private List<Integer> listStoreCompetitionIds(CompetionVO vo, String dateText) {
+ Set<String> storeIds = vo.getStoreIds().stream()
+ .filter(Objects::nonNull)
+ .map(String::valueOf)
+ .collect(Collectors.toSet());
+ return cttService.list(new LambdaQueryWrapper<Competition>()
+ .like(Competition::getInsertTime, dateText))
+ .stream()
+ .filter(competition -> containsStoreId(competition.getStoreId(), storeIds))
+ .map(Competition::getId)
+ .collect(Collectors.toList());
+ }
+
+ private boolean containsStoreId(String competitionStoreIds, Set<String> storeIds) {
+ if (competitionStoreIds == null || competitionStoreIds.trim().isEmpty()) {
+ return false;
+ }
+ return Arrays.stream(competitionStoreIds.split(","))
+ .map(String::trim)
+ .anyMatch(storeIds::contains);
+ }
+
+ private int countStoreUserCompetitions(String dateText, List<Integer> competitionIds) {
+ if (competitionIds.isEmpty()) {
+ return 0;
+ }
+ return ucttService.count(new LambdaQueryWrapper<UserCompetition>()
+ .in(UserCompetition::getCompetitionId, competitionIds)
+ .like(UserCompetition::getInsertTime, dateText));
}
private int countUserCompetitions(CompetionVO vo, String dateText, List<Integer> competitionIds) {
@@ -1147,8 +1211,11 @@
private LambdaQueryWrapper<Competition> buildCompetitionCountWrapper(CompetionVO vo, String dateText) {
LambdaQueryWrapper<Competition> wrapper = new LambdaQueryWrapper<Competition>()
- .like(Competition::getInsertTime, dateText)
- .eq(Competition::getOperatorId, vo.getOperatorId());
+ .like(Competition::getInsertTime, dateText);
+ // 平台统计由平台门店范围决定,历史平台赛事的 operatorId 可能为空或为 0。
+ if (vo.getOperatorId() != null && !Integer.valueOf(0).equals(vo.getOperatorId())) {
+ wrapper.eq(Competition::getOperatorId, vo.getOperatorId());
+ }
appendStoreIdFilter(wrapper, vo.getStoreIds());
return wrapper;
}
@@ -1177,7 +1244,13 @@
@ResponseBody
@PostMapping("/base/competition/queryAppUserId")
public List<Integer> queryAppUserId(@RequestBody List<Integer> storeIds){
- List<Competition> list = competitionService.list(new QueryWrapper<Competition>().in("storeId", storeIds).eq("auditStatus", 2).eq("state", 1));
+ if (storeIds == null || storeIds.isEmpty()) {
+ return new ArrayList<>();
+ }
+ LambdaQueryWrapper<Competition> wrapper = new LambdaQueryWrapper<Competition>()
+ .eq(Competition::getAuditStatus, 2).eq(Competition::getState, 1);
+ appendStoreIdFilter(wrapper, storeIds);
+ List<Competition> list = competitionService.list(wrapper);
List<Integer> collect = list.stream().map(Competition::getId).collect(Collectors.toList());
if(collect.size() == 0){
return new ArrayList<>();
--
Gitblit v1.7.1