package com.moral.api.service.impl; 
 | 
  
 | 
import com.alibaba.fastjson.JSON; 
 | 
import com.alibaba.fastjson.JSONObject; 
 | 
import com.moral.api.entity.SysArea; 
 | 
import com.moral.api.mapper.SysAreaMapper; 
 | 
import com.moral.api.service.SysAreaService; 
 | 
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.data.redis.core.RedisTemplate; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.util.ObjectUtils; 
 | 
  
 | 
import java.util.ArrayList; 
 | 
import java.util.HashMap; 
 | 
import java.util.List; 
 | 
import java.util.Map; 
 | 
import java.util.function.Predicate; 
 | 
  
 | 
/** 
 | 
 * <p> 
 | 
 * 系统区域表 服务实现类 
 | 
 * </p> 
 | 
 * 
 | 
 * @author moral 
 | 
 * @since 2021-04-07 
 | 
 */ 
 | 
@Service 
 | 
public class SysAreaServiceImpl extends ServiceImpl<SysAreaMapper, SysArea> implements SysAreaService { 
 | 
  
 | 
    @Autowired 
 | 
    SysAreaMapper sysAreaMapper; 
 | 
  
 | 
    @Autowired 
 | 
    RedisTemplate redisTemplate; 
 | 
  
 | 
    @Override 
 | 
    public List<SysArea> querySysArea() { 
 | 
        List<SysArea> sysAreas = redisTemplate.opsForList().range("sysArea", 0, -1); 
 | 
        if (ObjectUtils.isEmpty(sysAreas)) { 
 | 
            sysAreas = querySysAreaFromDB(); 
 | 
        } 
 | 
        return sysAreas; 
 | 
    } 
 | 
  
 | 
  
 | 
    private List<SysArea> querySysAreaFromDB() { 
 | 
        //取出所有地区 
 | 
        List<SysArea> sysAreas = sysAreaMapper.selectList(null); 
 | 
        //创建Map key为地区码 value为地区对象 供组装使用 
 | 
        Map<Integer, SysArea> areaMap = new HashMap<>(); 
 | 
        for (SysArea sysArea : sysAreas) { 
 | 
            areaMap.put(sysArea.getAreaCode(), sysArea); 
 | 
            sysArea.setChildren(new ArrayList<>());//初始化children集合 
 | 
        } 
 | 
        //遍历所有城市,判断是否有父城市,如果有则添加到父城市中。 
 | 
        for (SysArea sysArea : sysAreas) { 
 | 
            Integer parentCode = sysArea.getParentCode(); 
 | 
            if (!parentCode.equals(0)) { 
 | 
                SysArea parentArea = areaMap.get(parentCode); 
 | 
                parentArea.getChildren().add(sysArea); 
 | 
            } 
 | 
        } 
 | 
        //移除集合中非父顶级城市 
 | 
        sysAreas.removeIf(new Predicate<SysArea>() { 
 | 
            @Override 
 | 
            public boolean test(SysArea sysArea) { 
 | 
                if (sysArea.getParentCode().equals(0)) 
 | 
                    return false; 
 | 
                return true; 
 | 
            } 
 | 
        }); 
 | 
        //存入缓存 
 | 
        redisTemplate.opsForList().rightPushAll("sysArea",sysAreas); 
 | 
  
 | 
        return sysAreas; 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |