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){
|
handleSystemUserLevelId(phone, systemUser, 2, identityInformationVO, partyMember);
|
}else {
|
Integer identity = userIdentityDTO.getIdentity();
|
identityInformationVO.setIdentity(identity);
|
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 if (identity == 2){
|
Integer levelId = userIdentityDTO.getLevelId();
|
//验证账号所属层级
|
SystemUserLevel userLevel = systemUserLevelService.getById(levelId);
|
if (Objects.isNull(userLevel)) {
|
handleSystemUserLevelId(phone, systemUser, identity, identityInformationVO,partyMember);
|
} 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, PartyMember partyMember) {
|
// 情况1:系统用户存在
|
if (Objects.nonNull(systemUser)) {
|
Optional<SystemUserLevel> levelOptional = systemUserLevelService.getByLevelByUserId(systemUser.getId());
|
if (levelOptional.isPresent()) {
|
// 系统用户有关联的用户级别
|
SystemUserLevel userLevel = levelOptional.get();
|
|
// 设置用户身份信息为系统用户身份
|
identityInformationVO.setIdentity(identity);
|
identityInformationVO.setLevelId(userLevel.getId());
|
identityInformationVO.setSuperviseFlag(userLevel.getSuperviseFlag());
|
identityInformationVO.setSystemUserLevel(userLevel);
|
|
// 存储到Redis
|
UserIdentityDTO build = UserIdentityDTO.builder()
|
.identity(identity)
|
.levelId(userLevel.getId())
|
.build();
|
redisUtils.set("identity:" + phone, build);
|
} else if (partyMember != null && partyMember.getAuditStatus() == 1) {
|
// 系统用户无关联级别,但是有党员身份且审核通过
|
identityInformationVO.setIdentity(1);
|
|
UserIdentityDTO build = UserIdentityDTO.builder()
|
.identity(1)
|
.build();
|
redisUtils.set("identity:" + phone, build);
|
} else {
|
// 系统用户无关联级别,也没有党员身份,清除身份信息
|
redisUtils.remove("identity:" + phone);
|
}
|
} else if (partyMember != null && partyMember.getAuditStatus() == 1) {
|
// 情况2:不是系统用户,但是党员身份且审核通过
|
identityInformationVO.setIdentity(1);
|
|
UserIdentityDTO build = UserIdentityDTO.builder()
|
.identity(1)
|
.build();
|
redisUtils.set("identity:" + phone, build);
|
} else {
|
// 情况3:既不是系统用户也不是审核通过的党员,清除身份信息
|
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) || Objects.isNull(identityInformation.getIdentity())){
|
throw new ServiceException("请先完成认证");
|
}
|
|
SystemUser systemUser = identityInformation.getSystemUser();
|
if (identityInformation.getIdentity() == 2 && Objects.isNull(systemUser)) {
|
throw new ServiceException("管理员信息不存在");
|
}
|
SystemUserLevel systemUserLevel = identityInformation.getSystemUserLevel();
|
if (identityInformation.getIdentity() == 2&&Objects.isNull(systemUserLevel)) {
|
throw new ServiceException("管理员所属层级不存在");
|
}
|
PartyMember partyMember = identityInformation.getPartyMember();
|
if (identityInformation.getIdentity() == 1 && Objects.isNull(partyMember)) {
|
throw new ServiceException("党员信息不存在");
|
}
|
return identityInformation;
|
}
|
}
|