liujie
2 天以前 9833884154d78f47e195c04e73cf098e3fb17fa7
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
package com.panzhihua.sangeshenbian.service.impl;
 
import com.panzhihua.common.exceptions.ServiceException;
import com.panzhihua.common.model.vos.LoginUserInfoVO;
import com.panzhihua.common.utlis.DateUtils;
import com.panzhihua.sangeshenbian.dao.SystemUserMapper;
import com.panzhihua.sangeshenbian.model.entity.ComAct;
import com.panzhihua.sangeshenbian.model.entity.ComStreet;
import com.panzhihua.sangeshenbian.model.entity.Complaint;
import com.panzhihua.sangeshenbian.model.entity.SystemUserLevel;
import com.panzhihua.sangeshenbian.model.query.AppStaticsQuery;
import com.panzhihua.sangeshenbian.model.vo.AnalyticStatisticsFourVo;
import com.panzhihua.sangeshenbian.model.vo.AnalyticStatisticsOneVo;
import com.panzhihua.sangeshenbian.model.vo.AnalyticStatisticsThreeVo;
import com.panzhihua.sangeshenbian.model.vo.AnalyticStatisticsTwoVo;
import com.panzhihua.sangeshenbian.model.vo.RegionVO;
import com.panzhihua.sangeshenbian.service.IBcRegionService;
import com.panzhihua.sangeshenbian.service.IComActService;
import com.panzhihua.sangeshenbian.service.IComStreetService;
import com.panzhihua.sangeshenbian.service.IComplaintService;
import com.panzhihua.sangeshenbian.service.IdentityInformationService;
import com.panzhihua.sangeshenbian.warpper.IdentityInformation;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
 
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Objects;
 
/**
 * @author mitao
 * @date 2025/5/9
 */
@RequiredArgsConstructor(onConstructor_ = {@Lazy})
@Service
public class StaticsService {
    private final IdentityInformationService identityInformationService;
    private final IComplaintService complaintService;
    private final IBcRegionService bcRegionService;
    private final IComStreetService comStreetService;
    private final IComActService comActService;
    private final SystemUserMapper systemUserMapper;
    private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public List<RegionVO> queryRegionTree(LoginUserInfoVO loginUserInfo) {
        IdentityInformation currentIdentityInformation = identityInformationService.getCurrentIdentityInformation(loginUserInfo);
        if (!Integer.valueOf(2).equals(currentIdentityInformation.getIdentity())) {
            throw new ServiceException("当前账号无权限");
        }
 
        SystemUserLevel userLevel = currentIdentityInformation.getSystemUserLevel();
        Integer level = userLevel.getLevel();
 
        switch (level) {
            case 1:
                return buildCityLevelTree("510400");
            case 2:
                return buildDistrictLevelTree(userLevel.getDistrictsCode());
            case 3:
                return buildStreetLevelTree(userLevel.getStreetId());
            case 4:
                return buildCommunityLevelTree(userLevel.getCommunityId());
            default:
                throw new ServiceException("不支持的用户等级");
        }
    }
    /**
     * 构建市级区域树结构(市 -> 区/县 -> 街道 -> 社区)
     * @param cityCode 市级行政区划代码,例如 "510400"
     * @return 区域树列表,每个区包含下属街道和社区
     */
    private List<RegionVO> buildCityLevelTree(String cityCode) {
        List<RegionVO> districts = systemUserMapper.getRegion(cityCode);
        districts.forEach(district -> {
            district.setTier(2);
            List<RegionVO> streets = systemUserMapper.getStreet(district.getId());
            district.setChildren(streets);
            streets.forEach(street -> {
                street.setTier(3);
                List<RegionVO> communities = systemUserMapper.getCommunity(street.getId());
                communities.forEach(c -> c.setTier(4));
                street.setChildren(communities);
            });
        });
        return districts;
    }
    /**
     * 构建区级区域树结构(区/县 -> 街道 -> 社区)
     * @param districtCode 区级行政区划代码
     * @return 街道列表,每个街道包含其下属社区
     */
    private List<RegionVO> buildDistrictLevelTree(String districtCode) {
        List<RegionVO> streets = systemUserMapper.getStreet(districtCode);
        streets.forEach(street -> {
            street.setTier(3);
            List<RegionVO> communities = systemUserMapper.getCommunity(street.getId());
            communities.forEach(c -> c.setTier(4));
            street.setChildren(communities);
        });
        return streets;
    }
    /**
     * 构建街道级区域树结构(街道 -> 社区)
     * @param streetId 街道ID
     * @return 包含一个街道及其下属社区的列表
     */
    private List<RegionVO> buildStreetLevelTree(String streetId) {
        ComStreet street = comStreetService.getById(streetId);
        RegionVO streetVO = new RegionVO();
        streetVO.setId(String.valueOf(street.getStreetId()));
        streetVO.setName(street.getName());
        streetVO.setTier(3);
        List<RegionVO> communities = systemUserMapper.getCommunity(streetId);
        communities.forEach(c -> c.setTier(4));
        streetVO.setChildren(communities);
        return Collections.singletonList(streetVO);
    }
    /**
     * 构建社区级区域(只返回当前社区信息)
     * @param communityId 社区ID
     * @return 仅包含一个社区节点的列表
     */
    private List<RegionVO> buildCommunityLevelTree(Long communityId) {
        ComAct community = comActService.getById(communityId);
        RegionVO regionVO = new RegionVO();
        regionVO.setId(String.valueOf(community.getCommunityId()));
        regionVO.setName(community.getName());
        regionVO.setTier(4);
        return Collections.singletonList(regionVO);
    }
 
    /**
     * 统计分析-第一部分
     * @param query
     * @param loginUserInfo
     * @return
     */
    public AnalyticStatisticsOneVo queryStaticsPartOne(AppStaticsQuery query, LoginUserInfoVO loginUserInfo) {
        List<Complaint> complaints = complaintService.queryCompliantList(query,loginUserInfo);
        return  complaintService.analyticStatisticsOne(null, complaints, simpleDateFormat);
    }
 
    /**
     *获取统计分析-第二部分(诉求单量统计柱状图)
     * @param query
     * @param loginUserInfo
     * @return
     */
    public List<AnalyticStatisticsTwoVo> queryStaticsPartTwo(AppStaticsQuery query, LoginUserInfoVO loginUserInfo) {
        List<Complaint> complaints = complaintService.queryCompliantList(query,loginUserInfo);
        //时间范围
        String time = "";
        if (Objects.nonNull(query.getTimeType())) {
            Date now = new Date();
            Date start = null;
            switch (query.getTimeType()) {
                case 2:
                    start = DateUtils.addDay(now, -15);
                    break;
                case 3:
                    start = DateUtils.addDay(now, -30);
                    break;
                default:
                    start = DateUtils.addDay(now, -7);
                    break;
            }
            //格式化
            String startStr = DateUtils.format(start, DateUtils.yyyyMMdd_format);
            String endStr = DateUtils.format(now, DateUtils.yyyyMMdd_format);
            time = startStr + " - " + endStr;
        }
        return complaintService.analyticStatisticsTwo(time, complaints, simpleDateFormat);
    }
 
    /**
     *获取统计分析-第三部分(问题类型排名)
     * @param query
     * @param loginUserInfo
     * @return
     */
    public List<AnalyticStatisticsThreeVo> queryStaticsPartThree(AppStaticsQuery query, LoginUserInfoVO loginUserInfo) {
        List<Complaint> complaints = complaintService.queryCompliantList(query,loginUserInfo);
        return complaintService.analyticStatisticsThree(query.getRank(), complaints);
    }
 
    /**
     * 获取统计分析-第四部分(评价占比)
     * @param query
     * @param loginUserInfo
     * @return
     */
    public AnalyticStatisticsFourVo queryStaticsPartFour(AppStaticsQuery query, LoginUserInfoVO loginUserInfo) {
        List<Complaint> complaints = complaintService.queryCompliantList(query,loginUserInfo);
        return complaintService.analyticStatisticsFour(complaints);
    }
}