package com.gkhy.assess.system.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.gkhy.assess.common.exception.ApiException;
import com.gkhy.assess.system.domain.SysRegion;
import com.gkhy.assess.system.domain.SysUser;
import com.gkhy.assess.system.mapper.SysRegionMapper;
import com.gkhy.assess.system.service.SysRegionService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
*
* 系统地区表 服务实现类
*
*
* @author kzy
* @since 2023-11-24 13:45:45
*/
@Service
public class SysRegionServiceImpl extends ServiceImpl implements SysRegionService {
@Override
public List regionTree(SysRegion region) {
LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery();
if(StrUtil.isNotBlank(region.getName())){
lambdaQueryWrapper.like(SysRegion::getName,region.getName());
}
lambdaQueryWrapper.orderBy(true, true,SysRegion::getSort);
List regions= list(lambdaQueryWrapper);
//筛选出所有一级标签
return regions.stream()
.filter(tagEntity -> tagEntity.getParentId()==0L)
.peek(tagEntity -> tagEntity.setChildren(this.listRegionChildren(tagEntity,regions)))
.sorted(Comparator.comparing(SysRegion::getSort))
.collect(Collectors.toList());
}
public List listRegionChildren(SysRegion region,List regions){
//递归查找子类
return regions.stream()
.filter(regionEntity -> Objects.equals(regionEntity.getParentId(), region.getId()))
.peek(regionEntity -> regionEntity.setChildren(this.listRegionChildren(regionEntity,regions)))
//.sorted(Comparator.comparing(SysRegion::getSort))
.collect(Collectors.toList());
}
@Override
public int addRegion(SysRegion region) {
if(!checkRegionUnique(new SysRegion().setName(region.getName()))){
throw new ApiException("已存在相同地区名称");
}
boolean b=save(region);
if(!b){
throw new ApiException("新增地区失败");
}
return 0;
}
public boolean checkRegionUnique(SysRegion region){
Long userId = region.getId()==null? -1L : region.getId();
SysRegion info = baseMapper.checkRegionUnique(region.getName(),region.getParentId()==null?0L:region.getParentId());
if (info!=null && info.getId().longValue() != userId.longValue())
{
return false;
}
return true;
}
@Override
public int editRegion(SysRegion region) {
if(!checkRegionUnique(new SysRegion().setName(region.getName()))){
throw new ApiException("已存在相同地区名称");
}
boolean b=updateById(region);
if(!b){
throw new ApiException("修改地区失败");
}
return 0;
}
@Override
public int deleteRegionById(Long reginId) {
Long count=count(Wrappers.lambdaQuery()
.eq(true,SysRegion::getParentId,reginId));
if(count>0){
throw new ApiException("下级存在区县数据");
}
boolean b=removeById(reginId);
if(!b){
throw new ApiException("删除地区失败");
}
return 0;
}
@Override
public List getChildRegionById(Long regionId) {
return list(Wrappers.lambdaQuery()
.eq(true,SysRegion::getParentId,regionId));
}
}