package com.moral.api.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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 lombok.extern.slf4j.Slf4j; 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; /** *

* 系统区域表 服务实现类 *

* * @author moral * @since 2021-04-07 */ @Service @Slf4j public class SysAreaServiceImpl extends ServiceImpl implements SysAreaService { @Autowired SysAreaMapper sysAreaMapper; @Autowired RedisTemplate redisTemplate; @Override public List querySysArea() { List sysAreas = redisTemplate.opsForList().range("sysArea", 0, -1); if (ObjectUtils.isEmpty(sysAreas)) { sysAreas = querySysAreaFromDB(); } return sysAreas; } @Override public SysArea select(Integer code) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("area_code",code); SysArea sysArea = sysAreaMapper.selectOne(wrapper); return sysArea; } /** * 查询除了乡镇以外的地区 * * @return */ @Override public List queryCity() { //取出所有地区 List sysAreas = sysAreaMapper.selectList(null); //创建Map key为地区码 value为地区对象 供组装使用 Map areaMap = new HashMap<>(); for (SysArea sysArea : sysAreas) { areaMap.put(sysArea.getAreaCode(), sysArea); sysArea.setChildren(new ArrayList<>());//初始化children集合 } //遍历所有城市,判断是否有父城市,如果有则添加到父城市中。 int i=0; for (SysArea sysArea : sysAreas) { Integer parentCode = sysArea.getParentCode(); String s = sysArea.getAreaCode().toString(); if (!parentCode.equals(0)) { if (s.length()>7){ continue; } SysArea parentArea = areaMap.get(parentCode); if (ObjectUtils.isEmpty(parentArea)){ continue; } List children = parentArea.getChildren(); children.add(sysArea); // parentArea.getChildren().add(sysArea); } } //移除集合中非父顶级城市 sysAreas.removeIf(new Predicate() { @Override public boolean test(SysArea sysArea) { if (sysArea.getParentCode().equals(0)) return false; return true; } }); return sysAreas; } @Override public List selectCode(Integer code) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("parent_code",code); List sysAreas = sysAreaMapper.selectList(wrapper); return sysAreas; } private List querySysAreaFromDB() { //取出所有地区 List sysAreas = sysAreaMapper.selectList(null); //创建Map key为地区码 value为地区对象 供组装使用 Map 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); if (ObjectUtils.isEmpty(parentArea)){ continue; } List children = parentArea.getChildren(); children.add(sysArea); // parentArea.getChildren().add(sysArea); } } //移除集合中非父顶级城市 sysAreas.removeIf(new Predicate() { @Override public boolean test(SysArea sysArea) { if (sysArea.getParentCode().equals(0)) return false; return true; } }); //存入缓存 redisTemplate.opsForList().rightPushAll("sysArea",sysAreas); return sysAreas; } }