mitao
2025-05-06 be9179e444b22bf7d4b69c64745decd91696d67b
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
199
200
201
202
203
204
205
package com.panzhihua.sangeshenbian.service.impl;
 
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.panzhihua.common.exceptions.ServiceException;
import com.panzhihua.common.model.vos.LoginUserInfoVO;
import com.panzhihua.common.redis.RedisUtils;
import com.panzhihua.sangeshenbian.model.dto.UserIdentityDTO;
import com.panzhihua.sangeshenbian.model.entity.PartyMember;
import com.panzhihua.sangeshenbian.model.entity.SystemUser;
import com.panzhihua.sangeshenbian.model.entity.SystemUserLevel;
import com.panzhihua.sangeshenbian.service.IPartyMemberService;
import com.panzhihua.sangeshenbian.service.ISystemUserLevelService;
import com.panzhihua.sangeshenbian.service.ISystemUserService;
import com.panzhihua.sangeshenbian.service.IdentityInformationService;
import com.panzhihua.sangeshenbian.warpper.IdentityInformation;
import com.panzhihua.sangeshenbian.warpper.PermissionsVO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
 
@RequiredArgsConstructor
@Service
public class IdentityInformationServiceImpl implements IdentityInformationService {
    private final ISystemUserService systemUserService;
    private final IPartyMemberService partyMemberService;
    private final RedisUtils redisUtils;
    private final ISystemUserLevelService systemUserLevelService;
 
    @Override
    public IdentityInformation getIdentityInformation(LoginUserInfoVO loginUserInfo) {
        String phone = loginUserInfo.getPhone();
        // 获取党员信息
        PartyMember partyMember = partyMemberService.getOne(new LambdaQueryWrapper<PartyMember>()
                .eq(PartyMember::getPhone, phone)
                .eq(PartyMember::getDelFlag, 0));
 
        // 获取管理员信息
        SystemUser systemUser = systemUserService.lambdaQuery()
                .eq(SystemUser::getPhone, phone)
                .last("LIMIT 1")
                .ne(SystemUser::getStatus, 3)
                .one();
        // 获取身份
        UserIdentityDTO userIdentityDTO = (UserIdentityDTO) redisUtils.get("identity:" + phone);
        // 权限列表
        List<PermissionsVO> permissions = new ArrayList<>();
 
        IdentityInformation identityInformationVO = new IdentityInformation();
        identityInformationVO.setPartyMember(partyMember);
        identityInformationVO.setSystemUser(systemUser);
 
        // 获取提示内容是否确认
        Integer isConfirm = (Integer) redisUtils.get("confirmContent:" + phone);
        identityInformationVO.setIsConfirmContent(isConfirm != null && isConfirm == 1);
 
        // 获取当前身份
        if (userIdentityDTO == null){
            if (systemUser != null){
                handleSystemUserLevelId(phone, systemUser, 2, identityInformationVO);
            }else if (partyMember != null && partyMember.getAuditStatus() == 1){
                identityInformationVO.setIdentity(1);
                UserIdentityDTO build = UserIdentityDTO.builder().identity(1).build();
                redisUtils.set("identity:" + phone, build);
            }else {
                identityInformationVO.setIdentity(null);
            }
        }else {
            Integer identity = userIdentityDTO.getIdentity();
            if (identity == 1 && (partyMember == null || partyMember.getAuditStatus() != 1)){
                identityInformationVO.setIdentity(null);
                redisUtils.remove("identity:" + phone);
            }else if (identity == 2 && systemUser == null){
                identityInformationVO.setIdentity(null);
                redisUtils.remove("identity:" + phone);
            }else {
                Integer levelId = userIdentityDTO.getLevelId();
                //验证账号所属层级
                SystemUserLevel userLevel = systemUserLevelService.getById(levelId);
                if (Objects.isNull(userLevel)) {
                    handleSystemUserLevelId(phone, systemUser, identity, identityInformationVO);
                } else {
                    identityInformationVO.setLevelId(levelId);
                    identityInformationVO.setSuperviseFlag(userLevel.getSuperviseFlag());
                    identityInformationVO.setIdentity(identity);
                    identityInformationVO.setSystemUserLevel(userLevel);
                }
            }
        }
 
 
 
        // 获取是否冻结
        if (identityInformationVO.getIdentity() != null) {
            if (identityInformationVO.getIdentity() == 1) {
                identityInformationVO.setIsFrozen(partyMember != null && partyMember.getFreezeStatus() == 1);
            } else if (identityInformationVO.getIdentity() == 2) {
                identityInformationVO.setIsFrozen(systemUser != null && systemUser.getStatus() == 2);
            }
        } else {
            identityInformationVO.setIsFrozen(false);
        }
 
        // 是否认证党员
        identityInformationVO.setIsPartymember(partyMember != null && partyMember.getAuditStatus().equals(1));
        // 是否确认党员信息
        identityInformationVO.setIsConfirm(partyMember != null && partyMember.getIsConfirm() == 1);
        // 党员审核状态
        identityInformationVO.setAuditStatus(partyMember == null ? null : partyMember.getAuditStatus());
 
        // 封装管理员信息
        if (systemUser != null) {
            List<SystemUserLevel> userLevels = systemUserLevelService.getListBySystemUserId(systemUser.getId());
            for (SystemUserLevel userLevel : userLevels) {
                Integer accountLevel = userLevel.getLevel();
                String districts = userLevel.getDistricts();
                String street = userLevel.getStreet();
                String community = userLevel.getCommunity();
                PermissionsVO adminPermissions = new PermissionsVO();
                adminPermissions.setIdentity(2);
                adminPermissions.setIsFrozen(systemUser.getStatus() == 2);
                if (accountLevel == 1) {
                    adminPermissions.setName(String.format("%s%s", "攀枝花市", "管理员"));
                } else if (accountLevel == 2) {
                    adminPermissions.setName(String.format("%s%s", districts, "管理员"));
                } else if (accountLevel == 3) {
                    adminPermissions.setName(String.format("%s%s%s", districts, street, "管理员"));
                } else if (accountLevel == 4) {
                    adminPermissions.setName(String.format("%s%s%s%s", districts, street, community, "管理员"));
                } else {
                    adminPermissions.setName("未知");
                }
                permissions.add(adminPermissions);
            }
        }
 
        // 封装党员信息
        if (partyMember != null && partyMember.getAuditStatus().equals(1)) {
            PermissionsVO partyMemberPermissions = new PermissionsVO();
            partyMemberPermissions.setIdentity(1);
            partyMemberPermissions.setName(String.format("%s%s", partyMember.getCommunity(), "党员"));
            partyMemberPermissions.setIsFrozen(partyMember.getFreezeStatus() == 1);
            permissions.add(partyMemberPermissions);
        }
        identityInformationVO.setPermissions(permissions);
        return identityInformationVO;
    }
 
    /**
     * 处理管理员所属层级
     * @param phone
     * @param systemUser
     * @param identity
     * @param identityInformationVO
     */
    private void handleSystemUserLevelId(String phone, SystemUser systemUser, Integer identity, IdentityInformation identityInformationVO) {
        SystemUserLevel userLevel;
        //当前所属层级不存在,默认为第一个添加的层级
        Optional<SystemUserLevel> levelOptional = systemUserLevelService.getByLevelByUserId(systemUser.getId());
        if (levelOptional.isPresent()) {
            userLevel = levelOptional.get();
            UserIdentityDTO build = UserIdentityDTO.builder().identity(identity).levelId(userLevel.getId()).build();
            redisUtils.set("identity:" + phone, build);
            identityInformationVO.setIdentity(identity);
            identityInformationVO.setLevelId(userLevel.getId());
            identityInformationVO.setSuperviseFlag(userLevel.getSuperviseFlag());
            identityInformationVO.setSystemUserLevel(userLevel);
        } else {
            //当前账号没有管理员账号所属层级,清空账号当前层级信息
            redisUtils.remove("identity:" + phone);
        }
    }
 
 
    @Override
    public IdentityInformation getCurrentIdentityInformation(LoginUserInfoVO loginUserInfo) {
        IdentityInformation identityInformation = getIdentityInformation(loginUserInfo);
        Boolean isFrozen = identityInformation.getIsFrozen();
        if (isFrozen) {
            throw new ServiceException("您的账号已被冻结,请联系管理员");
        }
        List<PermissionsVO> permissions = identityInformation.getPermissions();
        if (CollectionUtil.isEmpty(permissions)){
            throw new ServiceException("请先完成认证");
        }
 
        SystemUser systemUser = identityInformation.getSystemUser();
        if (systemUser == null && identityInformation.getIdentity() == 2) {
            throw new ServiceException("管理员信息不存在");
        }
        SystemUserLevel systemUserLevel = identityInformation.getSystemUserLevel();
        if (systemUserLevel == null && identityInformation.getIdentity() == 2) {
            throw new ServiceException("管理员所属层级不存在");
        }
        PartyMember partyMember = identityInformation.getPartyMember();
        if (partyMember == null && identityInformation.getIdentity() == 1) {
            throw new ServiceException("党员信息不存在");
        }
        return identityInformation;
    }
}