diff --git a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/dal/mysql/statistics/OpsTrafficStatisticsMapper.java b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/dal/mysql/statistics/OpsTrafficStatisticsMapper.java index ca677e8..f238fbb 100644 --- a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/dal/mysql/statistics/OpsTrafficStatisticsMapper.java +++ b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/dal/mysql/statistics/OpsTrafficStatisticsMapper.java @@ -31,7 +31,6 @@ public interface OpsTrafficStatisticsMapper extends BaseMapperX { */ List selectCreatedCountGroupByDate(@Param("orderType") String orderType, @Param("startTime") LocalDateTime startTime, - @Param("endTime") LocalDateTime endTime, - @Param("tenantId") Long tenantId); + @Param("endTime") LocalDateTime endTime); /** * 按日期分组统计工单完成数 */ List selectCompletedCountGroupByDate(@Param("orderType") String orderType, @Param("startTime") LocalDateTime startTime, - @Param("endTime") LocalDateTime endTime, - @Param("tenantId") Long tenantId); + @Param("endTime") LocalDateTime endTime); /** * 按日期分组统计平均响应时长和完成时长(秒) */ List selectAvgTimeGroupByDate(@Param("orderType") String orderType, @Param("startTime") LocalDateTime startTime, - @Param("endTime") LocalDateTime endTime, - @Param("tenantId") Long tenantId); + @Param("endTime") LocalDateTime endTime); /** * 按区域分组统计工单数和完成数(非取消的工单) */ - List selectCountGroupByAreaId(@Param("orderType") String orderType, - @Param("tenantId") Long tenantId); + List selectCountGroupByAreaId(@Param("orderType") String orderType); /** * 按小时分组统计工单创建数 */ List selectCountGroupByHour(@Param("orderType") String orderType, @Param("startTime") LocalDateTime startTime, - @Param("endTime") LocalDateTime endTime, - @Param("tenantId") Long tenantId); + @Param("endTime") LocalDateTime endTime); /** * 按星期和小时分组统计工单创建数(用于热力图) @@ -138,21 +133,18 @@ public interface OpsOrderMapper extends BaseMapperX { */ List selectCountGroupByDayOfWeekAndHour(@Param("orderType") String orderType, @Param("startTime") LocalDateTime startTime, - @Param("endTime") LocalDateTime endTime, - @Param("tenantId") Long tenantId); + @Param("endTime") LocalDateTime endTime); /** * 按保洁类型分组统计平均作业时长(分钟) * JOIN ops_order_clean_ext,使用 arrived_time 和 completed_time 计算 */ - List selectAvgDurationGroupByCleaningType(@Param("orderType") String orderType, - @Param("tenantId") Long tenantId); + List selectAvgDurationGroupByCleaningType(@Param("orderType") String orderType); /** * 按功能类型分组统计工单数和完成数(非取消的工单) */ - List selectCountGroupByFunctionType(@Param("orderType") String orderType, - @Param("tenantId") Long tenantId); + List selectCountGroupByFunctionType(@Param("orderType") String orderType); // 注意:分页查询方法需要在Service层实现,这里只提供基础查询方法 // 具体分页查询请参考Service实现 diff --git a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/service/job/TrafficStatisticsCleanupJob.java b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/service/job/TrafficStatisticsCleanupJob.java index 3d5caf7..4adb4ae 100644 --- a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/service/job/TrafficStatisticsCleanupJob.java +++ b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/service/job/TrafficStatisticsCleanupJob.java @@ -1,55 +1,53 @@ -package com.viewsh.module.ops.service.job; - -import com.viewsh.framework.tenant.core.context.TenantContextHolder; -import com.viewsh.framework.tenant.core.job.TenantJob; -import com.viewsh.module.ops.dal.mysql.statistics.OpsTrafficStatisticsMapper; -import com.xxl.job.core.handler.annotation.XxlJob; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.time.LocalDateTime; - -/** - * 客流统计清理任务 - *

- * 每月 1 日凌晨 2 点执行,删除 30 天前的客流统计记录。 - * 使用 @TenantJob 遍历每个租户逐个清理,确保租户隔离。 - * - * @author AI - */ -@Slf4j -@Component -public class TrafficStatisticsCleanupJob { - - @Resource - private OpsTrafficStatisticsMapper trafficStatisticsMapper; - - /** - * 清理过期的客流统计记录 - *

- * XxlJob 配置: - * - Cron: 0 0 2 1 * ? (每月 1 日凌晨 2 点) - * - * @return 执行结果 - */ - @XxlJob("trafficStatisticsCleanupJob") - @TenantJob - public String execute() { - Long tenantId = TenantContextHolder.getRequiredTenantId(); - log.info("[TrafficStatisticsCleanupJob] 开始执行客流统计清理任务, tenantId={}", tenantId); - - try { - LocalDateTime beforeTime = LocalDateTime.now().minusDays(30); - int deletedCount = trafficStatisticsMapper.deleteByStatHourBefore(beforeTime, tenantId); - - log.info("[TrafficStatisticsCleanupJob] 客流统计清理完成:tenantId={}, 删除 {} 条记录(截止时间={})", - tenantId, deletedCount, beforeTime); - return "清理完成:删除 " + deletedCount + " 条记录"; - - } catch (Exception e) { - log.error("[TrafficStatisticsCleanupJob] 客流统计清理失败, tenantId={}", tenantId, e); - return "清理失败: " + e.getMessage(); - } - } -} +package com.viewsh.module.ops.service.job; + +import com.viewsh.framework.tenant.core.util.TenantUtils; +import com.viewsh.module.ops.dal.mysql.statistics.OpsTrafficStatisticsMapper; +import com.xxl.job.core.handler.annotation.XxlJob; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * 客流统计清理任务 + *

+ * 每月 1 日凌晨 2 点执行,删除 30 天前的客流统计记录 + * + * @author AI + */ +@Slf4j +@Component +public class TrafficStatisticsCleanupJob { + + @Resource + private OpsTrafficStatisticsMapper trafficStatisticsMapper; + + /** + * 清理过期的客流统计记录 + *

+ * XxlJob 配置: + * - Cron: 0 0 2 1 * ? (每月 1 日凌晨 2 点) + * + * @return 执行结果 + */ + @XxlJob("trafficStatisticsCleanupJob") + public String execute() { + log.info("[TrafficStatisticsCleanupJob] 开始执行客流统计清理任务"); + + try { + LocalDateTime beforeTime = LocalDateTime.now().minusDays(30); + // 使用 executeIgnore 忽略租户过滤,清理所有租户的过期数据 + int deletedCount = TenantUtils.executeIgnore( + () -> trafficStatisticsMapper.deleteByStatHourBefore(beforeTime)); + + log.info("[TrafficStatisticsCleanupJob] 客流统计清理完成:删除 {} 条记录(截止时间={})", + deletedCount, beforeTime); + return "清理完成:删除 " + deletedCount + " 条记录"; + + } catch (Exception e) { + log.error("[TrafficStatisticsCleanupJob] 客流统计清理失败", e); + return "清理失败: " + e.getMessage(); + } + } +} diff --git a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/service/statistics/OpsStatisticsServiceImpl.java b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/service/statistics/OpsStatisticsServiceImpl.java index 37ba984..31ac0bf 100644 --- a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/service/statistics/OpsStatisticsServiceImpl.java +++ b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/service/statistics/OpsStatisticsServiceImpl.java @@ -2,7 +2,6 @@ package com.viewsh.module.ops.service.statistics; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.viewsh.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.viewsh.framework.tenant.core.context.TenantContextHolder; import com.viewsh.module.ops.controller.admin.workorder.vo.statistics.*; import com.viewsh.module.ops.controller.admin.workorder.vo.statistics.DashboardStatsRespVO.*; import com.viewsh.module.ops.controller.admin.workorder.vo.statistics.DeviceTrafficRealtimeRespVO; @@ -622,9 +621,8 @@ public class OpsStatisticsServiceImpl implements OpsStatisticsService { LocalDateTime endDateTime = endDate.plusDays(1).atStartOfDay(); // 一次查询获取所有天的创建数 - Long tenantId = TenantContextHolder.getRequiredTenantId(); List createdRows = opsOrderMapper.selectCreatedCountGroupByDate( - orderType, startDateTime, endDateTime, tenantId); + orderType, startDateTime, endDateTime); Map createdMap = createdRows.stream() .collect(Collectors.toMap( row -> row.getStatDate().toString(), @@ -634,7 +632,7 @@ public class OpsStatisticsServiceImpl implements OpsStatisticsService { // 一次查询获取所有天的完成数 List completedRows = opsOrderMapper.selectCompletedCountGroupByDate( - orderType, startDateTime, endDateTime, tenantId); + orderType, startDateTime, endDateTime); Map completedMap = completedRows.stream() .collect(Collectors.toMap( row -> row.getStatDate().toString(), @@ -668,7 +666,7 @@ public class OpsStatisticsServiceImpl implements OpsStatisticsService { LocalDateTime startDateTime, LocalDateTime endDateTime) { List rows = opsOrderMapper.selectCountGroupByHour( - orderType, startDateTime, endDateTime, TenantContextHolder.getRequiredTenantId()); + orderType, startDateTime, endDateTime); // 构建小时 -> 计数映射 int[] hourBuckets = new int[24]; @@ -698,7 +696,7 @@ public class OpsStatisticsServiceImpl implements OpsStatisticsService { LocalDateTime endDateTime = endDate.plusDays(1).atStartOfDay(); List rows = opsOrderMapper.selectAvgTimeGroupByDate( - orderType, startDateTime, endDateTime, TenantContextHolder.getRequiredTenantId()); + orderType, startDateTime, endDateTime); // 构建日期 -> 响应/完成时长映射 Map responseMap = new HashMap<>(); @@ -781,7 +779,7 @@ public class OpsStatisticsServiceImpl implements OpsStatisticsService { LocalDateTime startDateTime, LocalDateTime endDateTime) { List rows = opsOrderMapper.selectCountGroupByDayOfWeekAndHour( - orderType, startDateTime, endDateTime, TenantContextHolder.getRequiredTenantId()); + orderType, startDateTime, endDateTime); // 生成近7天的日期列表(格式:MM-dd) LocalDate startDate = startDateTime.toLocalDate(); @@ -845,8 +843,7 @@ public class OpsStatisticsServiceImpl implements OpsStatisticsService { * 构建功能类型排行(将枚举值转换为中文) */ private List buildFunctionTypeRanking(String orderType) { - List rows = opsOrderMapper.selectCountGroupByFunctionType( - orderType, TenantContextHolder.getRequiredTenantId()); + List rows = opsOrderMapper.selectCountGroupByFunctionType(orderType); return rows.stream() .map(row -> { @@ -962,7 +959,7 @@ public class OpsStatisticsServiceImpl implements OpsStatisticsService { LocalDateTime todayStart, LocalDateTime todayEnd) { List rows = opsOrderMapper.selectCountGroupByHour( - orderType, todayStart, todayEnd, TenantContextHolder.getRequiredTenantId()); + orderType, todayStart, todayEnd); int[] hourBuckets = new int[24]; for (HourCountRespVO row : rows) { @@ -1082,7 +1079,7 @@ public class OpsStatisticsServiceImpl implements OpsStatisticsService { LocalDateTime endDateTime = endDate.plusDays(1).atStartOfDay(); List rows = opsOrderMapper.selectCreatedCountGroupByDate( - orderType, startDateTime, endDateTime, TenantContextHolder.getRequiredTenantId()); + orderType, startDateTime, endDateTime); Map countMap = rows.stream() .collect(Collectors.toMap( row -> row.getStatDate().toString(), diff --git a/viewsh-module-ops/viewsh-module-ops-biz/src/main/resources/mapper/statistics/OpsTrafficStatisticsMapper.xml b/viewsh-module-ops/viewsh-module-ops-biz/src/main/resources/mapper/statistics/OpsTrafficStatisticsMapper.xml index 275799a..6dd2ded 100644 --- a/viewsh-module-ops/viewsh-module-ops-biz/src/main/resources/mapper/statistics/OpsTrafficStatisticsMapper.xml +++ b/viewsh-module-ops/viewsh-module-ops-biz/src/main/resources/mapper/statistics/OpsTrafficStatisticsMapper.xml @@ -14,7 +14,6 @@ DELETE FROM ops_traffic_statistics WHERE stat_hour < #{beforeTime} - AND tenant_id = #{tenantId} AND deleted = 0 diff --git a/viewsh-module-ops/viewsh-module-ops-biz/src/main/resources/mapper/workorder/OpsOrderMapper.xml b/viewsh-module-ops/viewsh-module-ops-biz/src/main/resources/mapper/workorder/OpsOrderMapper.xml index cfef5bf..1fa3758 100644 --- a/viewsh-module-ops/viewsh-module-ops-biz/src/main/resources/mapper/workorder/OpsOrderMapper.xml +++ b/viewsh-module-ops/viewsh-module-ops-biz/src/main/resources/mapper/workorder/OpsOrderMapper.xml @@ -1,129 +1,119 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + +