package com.panzhihua.sangeshenbian.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.beust.jcommander.internal.Lists; import com.panzhihua.common.model.vos.sangeshenbian.SystemUserVo; import com.panzhihua.common.utlis.StringUtils; import com.panzhihua.sangeshenbian.dao.SystemUserLevelMapper; 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.PartyMember; import com.panzhihua.sangeshenbian.model.entity.SystemUser; import com.panzhihua.sangeshenbian.model.entity.SystemUserLevel; import com.panzhihua.sangeshenbian.model.vo.RegionVO; import com.panzhihua.sangeshenbian.service.IComActService; import com.panzhihua.sangeshenbian.service.IComStreetService; import com.panzhihua.sangeshenbian.service.ISystemUserService; import com.panzhihua.sangeshenbian.warpper.SystemUserList; import com.panzhihua.sangeshenbian.warpper.SystemUserListVo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Optional; /** * @author zhibing.pu * @Date 2025/2/18 22:30 */ @Slf4j @Service @RequiredArgsConstructor(onConstructor_ = {@Lazy}) public class SystemUserServiceImpl extends ServiceImpl implements ISystemUserService { private final IComActService comActService; private final SystemUserLevelMapper systemUserLevelMapper; private final IComStreetService comStreetService; /** * 获取列表数据 * @param query * @return */ @Override public IPage list(SystemUser user, SystemUserList query) { Page page = new Page<>(); page.setCurrent(query.getPageNum()); page.setSize(query.getPageSize()); IPage list = this.baseMapper.list(page, user, query); list.getRecords().forEach(item -> { List systemUserLevels = systemUserLevelMapper.selectList(new LambdaQueryWrapper().eq(SystemUserLevel::getStatus,1).eq(SystemUserLevel::getSystemUserId, item.getId())); systemUserLevels.sort(Comparator.comparing(SystemUserLevel::getLevel)); item.setList(systemUserLevels); }); return list; } /** * 根据手机号码查询小程序用户在三个身边的上级角色用户 * @param phone * @return */ @Override public Optional getSystemUserAdminByPhone(String phone) { if (StringUtils.isBlank(phone)) { return Optional.empty(); } return this.lambdaQuery() .eq(SystemUser::getPhone, phone).ne(SystemUser::getStatus, 3) .eq(SystemUser::getIsAdmin, 1).last("LIMIT 1").oneOpt(); } @Override public Optional getSystemUserByPhone(String phone) { if (StringUtils.isBlank(phone)) { return Optional.empty(); } return this.lambdaQuery() .eq(SystemUser::getPhone, phone).ne(SystemUser::getStatus, 3).last("LIMIT 1").oneOpt(); } /** * 获取行政区划数据 * * @param pcode * @return */ @Override public List getRegion(String pcode) { return this.baseMapper.getRegion(pcode); } /** * 获取街道数据 * * @param areaCode * @return */ @Override public List getStreet(String areaCode) { return this.baseMapper.getStreet(areaCode); } /** * 获取社区数据 * * @param streetId * @return */ @Override public List getCommunity(String streetId) { return this.baseMapper.getCommunity(streetId); } /** * 获取区县-街道-社区树 * @return */ @Override public List getRegionTree(SystemUserVo loginUserInfo) { log.info("getRegionTree入参:{}",JSONObject.toJSONString(loginUserInfo)); SystemUser systemUser = getById(loginUserInfo.getId()); Integer accountLevel = systemUser.getAccountLevel(); List regionTree = new ArrayList<>(); switch (accountLevel) { case 1: regionTree = baseMapper.getRegion("510400"); baseMapper.getStreet("510400"); regionTree.forEach(district -> { List streets = baseMapper.getStreet(district.getId()); district.setChildren(streets); streets.forEach(street -> { List communities = baseMapper.getCommunity(street.getId()); street.setChildren(communities); }); }); break; case 2: regionTree = baseMapper.getStreet(systemUser.getDistrictsCode()); regionTree.forEach(regionVO->{ List communities = baseMapper.getCommunity(regionVO.getId()); regionVO.setChildren(communities); }); break; case 3: ComStreet street = comStreetService.getById(systemUser.getStreetId()); RegionVO streetVO = new RegionVO(); streetVO.setId(street.getStreetId()); streetVO.setName(street.getName()); List communities = baseMapper.getCommunity(systemUser.getStreetId()); streetVO.setChildren(communities); regionTree = Lists.newArrayList(streetVO); break; case 4: ComAct byId = comActService.getById(systemUser.getCommunityId()); RegionVO regionVO = new RegionVO(); regionVO.setId(byId.getCommunityId().toString()); regionVO.setName(byId.getName()); regionTree = Lists.newArrayList(regionVO); break; } return regionTree; } }