From 28adb7ab6d9c09f7ca0160d884dde41b7b4a8ebd Mon Sep 17 00:00:00 2001
From: 刘帅 <rr.iii@qq.com>
Date: 星期一, 21 九月 2026 22:19:00 +0800
Subject: [PATCH] bug:地域统计bug
---
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java | 26 +++++++++++++++++---------
1 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java
index 208b8d3..86c4c81 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java
@@ -104,9 +104,7 @@
return storeId;
}
- /**
- * 运营商统计的门店范围:平台(0)统计平台门店,其他值统计对应运营商门店。
- */
+ /** 平台(0)或运营商统计均以门店的 operatorId 作为唯一归属依据。 */
private List<TStore> listStatisticsStores(Integer operatorId, boolean enabledOnly) {
LambdaQueryWrapper<TStore> wrapper = new LambdaQueryWrapper<>();
if (enabledOnly) {
@@ -116,10 +114,8 @@
}
if (operatorId == null) {
// 平台统计:所有门店总和,不按门店所属运营商过滤。
- } else if (Integer.valueOf(0).equals(operatorId)) {
- wrapper.eq(TStore::getType, 1);
} else {
- wrapper.eq(TStore::getType, 2).eq(TStore::getOperatorId, operatorId);
+ wrapper.eq(TStore::getOperatorId, operatorId);
}
return storeService.list(wrapper);
}
@@ -299,7 +295,9 @@
// 下游多处查询会在门店集合为空时忽略门店过滤。运营商没有任何门店时,
// 直接返回完整的零值结构,避免被误统计为全平台数据。
if (operatorId != null && storeId == null
- && listStatisticsStores(operatorId, false).isEmpty()) {
+ && storeService.count(new LambdaQueryWrapper<TStore>()
+ .eq(TStore::getOperatorId, operatorId)
+ .ne(TStore::getState, 3)) == 0) {
Map<String, Object> emptyIncomeData = buildIncomeStatistics(Collections.emptyList());
emptyIncomeData.put("incomeTypeNet", buildIncomeTypeNet(Collections.emptyList(), null));
Map<String, Object> emptyTicketIncome = new HashMap<>();
@@ -589,6 +587,13 @@
// 门票饼图需要日/月/季/年卡拆分;此前该数据只在 type1 内部返回,
// 现随统一营收接口返回,供平台页直接使用。
monthlyData.put("ticketIncome", getTicketIncome(time, operatorId, storeId));
+ // 平台收入类型饼图还需要课程、订场分类明细。此前页面只能读取 type1
+ // 的模板数据,筛选后 getIncomeData 缺少该字段,导致课程图显示为空。
+ if (operatorId == null && storeId == null) {
+ Map<String, Object> platformTypeData = (Map<String, Object>) type1(time);
+ monthlyData.put("courseData", platformTypeData.get("courseData"));
+ monthlyData.put("siteData", platformTypeData.get("siteData"));
+ }
return monthlyData;
}
@@ -1293,7 +1298,9 @@
@RequestMapping(value = "/userAndVipPt")
@ResponseBody
public Object userAndVipPt(Integer type) {
- HashMap<String, Object> map = appUserClient.userAndVipYys(listStatisticsAppUserIds(null));
+ // 平台用户统计按用户归属全量统计,不能以“已有消费记录”筛选,
+ // 否则会遗漏尚未在门店消费的新注册用户。
+ HashMap<String, Object> map = appUserClient.userAndVipPt(1);
return map;
}
@@ -1889,7 +1896,8 @@
@RequestMapping("/stuUserData")
@ResponseBody
public Object stuUserData() {
- HashMap<String, Object> map = appUserClient.queryUserAgeYys(listStatisticsAppUserIds(null));
+ // 平台地域/年龄统计按平台注册用户全量口径,不能仅取已有消费记录的用户。
+ HashMap<String, Object> map = appUserClient.queryUserAge1();
return map;
}
--
Gitblit v1.7.1