Browse Source

1.完成调用小程序首页接口便记录一次日活,10分钟以内重复调用算作1次
2.完成查询用户当日日活总数量接口

hxd 2 months ago
parent
commit
8f31eb6454

+ 8 - 0
portal-service-application/src/main/java/com/hfln/portal/application/controller/web/WebStatsController.java

@@ -7,9 +7,11 @@ import cn.hfln.framework.dto.ApiResult;
 import com.hfln.portal.common.dto.data.event.AlarmEventDTO;
 import com.hfln.portal.common.dto.data.event.EventListDTO;
 import com.hfln.portal.common.dto.data.event.StayTimeDTO;
+import com.hfln.portal.common.dto.data.user.UserDailyActiveResult;
 import com.hfln.portal.common.request.event.AlarmEventParams;
 import com.hfln.portal.common.request.event.EventListParams;
 import com.hfln.portal.common.request.event.StayTimeParams;
+import com.hfln.portal.common.request.user.UserDailyActiveParams;
 import com.hfln.portal.common.vo.PageRecord;
 import com.hfln.portal.domain.gateway.WebStatsGateway;
 import io.swagger.v3.oas.annotations.Operation;
@@ -52,4 +54,10 @@ public class WebStatsController {
         return ApiResult.success(webStatsGateway.alarmRetentionQuery(params));
     }
 
+    @PostMapping("/queryUserDailyActive")
+    @Operation(summary = "查询用户日活跃")
+    public ApiResult<UserDailyActiveResult> queryUserDailyActive(@Valid @RequestBody UserDailyActiveParams params) {
+        return ApiResult.success(webStatsGateway.queryUserDailyActive(params));
+    }
+
 }

+ 16 - 0
portal-service-common/src/main/java/com/hfln/portal/common/dto/data/user/UserDailyActiveResult.java

@@ -0,0 +1,16 @@
+package com.hfln.portal.common.dto.data.user;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UserDailyActiveResult {
+
+    @Schema(description = "用户访问总次数")
+    private Integer visitCount;
+
+    @Schema(description = "用户日活记录列表")
+    private List<UsersDailyActiveDTO> records;
+}

+ 20 - 0
portal-service-common/src/main/java/com/hfln/portal/common/dto/data/user/UsersDailyActiveDTO.java

@@ -0,0 +1,20 @@
+package com.hfln.portal.common.dto.data.user;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class UsersDailyActiveDTO  {
+
+    @Schema(description = "用户日活表主键")
+    private Long DailyActiveId;
+
+    @Schema(description = "用户表主键")
+    private Long userId;
+
+    @Schema(description = "访问时间")
+    private LocalDateTime visitTime;
+
+}

+ 22 - 0
portal-service-common/src/main/java/com/hfln/portal/common/request/user/UserDailyActiveParams.java

@@ -0,0 +1,22 @@
+package com.hfln.portal.common.request.user;
+
+import com.hfln.portal.common.vo.BaseVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDate;
+
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class UserDailyActiveParams extends BaseVO {
+
+    @Schema(description = "用户ID")
+    @NotNull
+    private Long userId;
+
+    @Schema(description = "查询日期 ,如果为空则默认当天")
+    private LocalDate queryDate;
+}

+ 4 - 0
portal-service-domain/src/main/java/com/hfln/portal/domain/gateway/WebStatsGateway.java

@@ -3,9 +3,11 @@ package com.hfln.portal.domain.gateway;
 import com.hfln.portal.common.dto.data.event.AlarmEventDTO;
 import com.hfln.portal.common.dto.data.event.EventListDTO;
 import com.hfln.portal.common.dto.data.event.StayTimeDTO;
+import com.hfln.portal.common.dto.data.user.UserDailyActiveResult;
 import com.hfln.portal.common.request.event.AlarmEventParams;
 import com.hfln.portal.common.request.event.EventListParams;
 import com.hfln.portal.common.request.event.StayTimeParams;
+import com.hfln.portal.common.request.user.UserDailyActiveParams;
 import com.hfln.portal.common.vo.PageRecord;
 
 public interface WebStatsGateway {
@@ -16,5 +18,7 @@ public interface WebStatsGateway {
     PageRecord<StayTimeDTO> generalRetentionQuery(StayTimeParams params);
 
     PageRecord<AlarmEventDTO> alarmRetentionQuery(AlarmEventParams params);
+
+    UserDailyActiveResult queryUserDailyActive(UserDailyActiveParams params);
 }
 

+ 60 - 4
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/gateway/impl/WebStatsGatewayImpl.java

@@ -1,31 +1,37 @@
 package com.hfln.portal.infrastructure.gateway.impl;
 
 import cn.dev33.satoken.stp.StpUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.hfln.portal.common.constant.UserConstants;
 import com.hfln.portal.common.dto.data.event.AlarmEventDTO;
 import com.hfln.portal.common.dto.data.event.EventListDTO;
 import com.hfln.portal.common.dto.data.event.StayTimeDTO;
+import com.hfln.portal.common.dto.data.user.UserDailyActiveResult;
+import com.hfln.portal.common.dto.data.user.UsersDailyActiveDTO;
 import com.hfln.portal.common.request.event.AlarmEventParams;
 import com.hfln.portal.common.request.event.EventListParams;
 import com.hfln.portal.common.request.event.StayTimeParams;
+import com.hfln.portal.common.request.user.UserDailyActiveParams;
 import com.hfln.portal.common.vo.PageRecord;
 import com.hfln.portal.domain.customer.AdminUserType;
 import com.hfln.portal.domain.customer.util.CopyUtils;
 import com.hfln.portal.domain.gateway.WebStatsGateway;
 import com.hfln.portal.infrastructure.po.AlarmEvent;
+import com.hfln.portal.infrastructure.po.DailyActiveUsers;
 import com.hfln.portal.infrastructure.po.EventList;
 import com.hfln.portal.infrastructure.po.StayTime;
-import com.hfln.portal.infrastructure.service.AlarmEventService;
-import com.hfln.portal.infrastructure.service.DevInfoService;
-import com.hfln.portal.infrastructure.service.EventService;
-import com.hfln.portal.infrastructure.service.StayTimeService;
+import com.hfln.portal.infrastructure.service.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Service
@@ -44,6 +50,9 @@ public class WebStatsGatewayImpl implements WebStatsGateway {
     @Autowired
     private AlarmEventService alarmEventService;
 
+    @Autowired
+    private DailyActiveUsersService dailyActiveUsersService;;
+
     @Override
     public PageRecord<EventListDTO> fallQuery(EventListParams params) {
         Long tenantId =  (Long) StpUtil.getSession().get(UserConstants.SA_USER_TENANT_ID);
@@ -119,5 +128,52 @@ public class WebStatsGatewayImpl implements WebStatsGateway {
         // 封装成 PageRecord 返回
         return CopyUtils.copyPage(page, dtoList);
     }
+
+    @Override
+    public UserDailyActiveResult queryUserDailyActive(UserDailyActiveParams params) {
+
+        // 1.处理查询日期,入参为空则默认当天
+        LocalDate queryDate = (params.getQueryDate() != null) ? params.getQueryDate() : LocalDate.now();
+        LocalDateTime startOfDay = queryDate.atStartOfDay();
+        LocalDateTime endOfDay = queryDate.plusDays(1).atStartOfDay().minusNanos(1);
+
+        // 2. 查询总访问次数
+        LambdaQueryWrapper<DailyActiveUsers> countWrapper = new LambdaQueryWrapper<>();
+        countWrapper.eq(DailyActiveUsers::getUserId, params.getUserId())
+                .between(DailyActiveUsers::getCreateTime, startOfDay, endOfDay);
+        long totalCount = dailyActiveUsersService.count(countWrapper);
+
+        if (totalCount == 0) {
+            UserDailyActiveResult emptyResult = new UserDailyActiveResult();
+            emptyResult.setVisitCount(0);
+            emptyResult.setRecords(Collections.emptyList());
+            return emptyResult;
+        }
+
+        // 3. 查询用户单日的日活记录(按时间倒序)
+        LambdaQueryWrapper<DailyActiveUsers> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(DailyActiveUsers::getUserId, params.getUserId())
+                .between(DailyActiveUsers::getCreateTime, startOfDay, endOfDay)
+                .orderByDesc(DailyActiveUsers::getCreateTime);
+
+        List<DailyActiveUsers> dailyActiveUsers = dailyActiveUsersService.list(queryWrapper);
+
+        // 4. 转换 DTO
+        List<UsersDailyActiveDTO> records = dailyActiveUsers.stream().map(record -> {
+            UsersDailyActiveDTO dto = new UsersDailyActiveDTO();
+            dto.setDailyActiveId(record.getDailyActiveId());
+            dto.setUserId(record.getUserId());
+            dto.setVisitTime(record.getCreateTime()); // visitTime = createTime
+            return dto;
+        }).collect(Collectors.toList());
+
+        // 5. 封装结果
+        UserDailyActiveResult result = new UserDailyActiveResult();
+        result.setVisitCount((int) totalCount);
+        result.setRecords(records);
+
+        return result;
+    }
 }
+