package com.panzhihua.sangeshenbian.service.impl;
|
|
import com.beust.jcommander.internal.Lists;
|
import com.panzhihua.common.exceptions.ServiceException;
|
import com.panzhihua.common.model.vos.LoginUserInfoVO;
|
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.SystemUserLevel;
|
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.util.ArrayList;
|
import java.util.Collections;
|
import java.util.List;
|
|
/**
|
* @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;
|
|
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(2);
|
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);
|
}
|
|
}
|