liujie
2026-06-09 c96fbe6b0aeb413a17c429133ee6d81d138144b9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package com.xiaopeng.account.service.impl;
 
import com.xiaopeng.account.mapper.XpAppUserMapper;
import com.xiaopeng.account.service.IXpAppUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaopeng.api.dto.statistics.DailyCountDTO;
import com.xiaopeng.api.dto.statistics.StatisticsQueryDTO;
import com.xiaopeng.api.dto.statistics.UserStatisticsDTO;
import com.xiaopeng.api.model.account.XpAppUser;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
 
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
 
/**
 * <p>
 * 小程序用户 服务实现类
 * </p>
 *
 * @author mitao
 * @since 2026-02-03
 */
@Service
public class XpAppUserServiceImpl extends ServiceImpl<XpAppUserMapper, XpAppUser> implements IXpAppUserService {
 
    @Override
    public UserStatisticsDTO getUserStatistics(StatisticsQueryDTO query) {
        UserStatisticsDTO dto = new UserStatisticsDTO();
 
        // 1. 查询用户总数
        dto.setTotalCount(baseMapper.selectCount(null));
 
        // 2. 查询时间范围内新增用户数
        if (query.getStartDate() != null && query.getEndDate() != null) {
            dto.setNewCount(baseMapper.countNewUsers(query.getStartDate(), query.getEndDate()));
        } else {
            dto.setNewCount(0L);
        }
 
        // 3. 查询近N天每日新增用户数(默认30天)
        Integer trendDays = query.getTrendDays() != null ? query.getTrendDays() : 30;
        LocalDate endDate = LocalDate.now();
        LocalDate startDate = endDate.minusDays(trendDays - 1);
        List<DailyCountDTO> dailyCountList = baseMapper.getDailyUserCount(startDate, endDate);
        dto.setDailyCountList(dailyCountList != null ? dailyCountList : new ArrayList<>());
 
        return dto;
    }
 
    @Override
    public List<XpAppUser> listByIds(List<Long> ids) {
        if (CollectionUtils.isEmpty(ids)) {
            return new ArrayList<>();
        }
        return super.listByIds(ids);
    }
}