ycl-common/src/main/java/com/ycl/entity/platform/region/SccgRegion.java
New file @@ -0,0 +1,49 @@ package com.ycl.entity.platform.region; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; import org.apache.catalina.LifecycleState; import java.io.Serializable; import java.util.List; /** * <p> * 遂昌行政区域 * </p> * * @author lyq * @since 2022-09-16 */ @Data @EqualsAndHashCode(callSuper = false) @TableName("ums_sccg_region") public class SccgRegion implements Serializable { private static final long serialVersionUID = 1L; /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 地域名 */ @TableField("region_name") private String regionName; /** * 默认0 */ @TableField("parent_id") private Long parentId; @TableField(exist = false) private List<SccgRegion> children; } ycl-common/src/main/java/com/ycl/mapper/platform/region/SccgRegionMapper.java
New file @@ -0,0 +1,16 @@ package com.ycl.mapper.platform.region; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ycl.entity.platform.region.SccgRegion; /** * <p> * 遂昌行政区域 Mapper 接口 * </p> * * @author lyq * @since 2022-09-16 */ public interface SccgRegionMapper extends BaseMapper<SccgRegion> { } ycl-common/src/main/java/com/ycl/service/platform/depart/impl/UmsDepartServiceImpl.java
@@ -180,13 +180,6 @@ return griddingEntities; } /** * 递归查找所有网格的子网格 * * @param root 当前网格 * @param all 所有网格 * @return */ public List<UmsDepart> getChildrens(UmsDepart root, List<UmsDepart> all) { List<UmsDepart> collect = all.stream().filter(griddingEntity -> { return griddingEntity.getParentId().equals(root.getId()); ycl-common/src/main/java/com/ycl/service/platform/dict/impl/DatabaseDictionaryServiceImpl.java
@@ -40,11 +40,11 @@ @Override public List<DatabaseDictionary> getAll() { String key = RedisKey.DICT_LIST_ALL; String result = (String) redisService.get(key); String key = RedisKey.DICT; String result = (String) redisService.get(key.concat("all")); if (StringUtils.isBlank(result)) { List<DatabaseDictionary> dictList = databaseDictionaryMapper.selectList(null); redisService.set(key, JSON.toJSONString(dictList), LiveTimeMillisecond.s86400.time); redisService.set(key.concat("all"), JSON.toJSONString(dictList), LiveTimeMillisecond.s86400.time); return dictList; } List<DatabaseDictionary> list = JSONArray.parseArray(result, DatabaseDictionary.class); ycl-common/src/main/java/com/ycl/service/platform/region/ISccgRegionService.java
New file @@ -0,0 +1,22 @@ package com.ycl.service.platform.region; import com.baomidou.mybatisplus.extension.service.IService; import com.ycl.entity.platform.region.SccgRegion; import java.util.List; /** * <p> * 遂昌行政区域 服务类 * </p> * * @author lyq * @since 2022-09-16 */ public interface ISccgRegionService extends IService<SccgRegion> { /** * 树结构 * @return */ List<SccgRegion> getTree(); } ycl-common/src/main/java/com/ycl/service/platform/region/impl/SccgRegionServiceImpl.java
New file @@ -0,0 +1,87 @@ package com.ycl.service.platform.region.impl; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.entity.platform.depart.UmsDepart; import com.ycl.entity.platform.region.SccgRegion; import com.ycl.mapper.platform.region.SccgRegionMapper; import com.ycl.service.platform.region.ISccgRegionService; import com.ycl.service.redis.RedisService; import com.ycl.utils.common.LiveTimeMillisecond; import com.ycl.utils.redis.RedisKey; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; import java.util.stream.Collectors; /** * <p> * 遂昌行政区域 服务实现类 * </p> * * @author lyq * @since 2022-09-16 */ @Service public class SccgRegionServiceImpl extends ServiceImpl<SccgRegionMapper, SccgRegion> implements ISccgRegionService { @Resource private SccgRegionMapper sccgRegionMapper; @Resource private RedisService redisService; @Override public List<SccgRegion> getTree() { String result = (String) redisService.get(RedisKey.SCCG_REGION); if (StringUtils.isBlank(result)) { // 1.查出所有网格 List<SccgRegion> list = this.list(); // 2.组装成父子的树型结构 // 2.1、找到所有的一级网格:使用jdk8的stream流进行过滤 List<SccgRegion> collect = list.stream().filter(griddingEntity -> { //分类父id为0就表示该网格为 一级网格 return griddingEntity.getParentId() == 0; }).map(item -> { // 找到子网格 set进children属性中 item.setChildren(getChildrens(item, list)); return item; }).collect(Collectors.toList()); List<SccgRegion> treeData = getTreeData(collect); redisService.set(RedisKey.SCCG_REGION, JSON.toJSONString(treeData), LiveTimeMillisecond.s5184000.time); return treeData; } return JSON.parseArray(result, SccgRegion.class); } public List<SccgRegion> getChildrens(SccgRegion root, List<SccgRegion> all) { List<SccgRegion> collect = all.stream().filter(e -> { return e.getParentId().equals(root.getId()); }).map(item -> { item.setChildren(getChildrens(item, all)); return item; }).collect(Collectors.toList()); return collect; } /** * 利用递归将最后一级空集合变为null,前端联级选择器最后才不会出现 暂无数据的bug * * @return */ public List<SccgRegion> getTreeData(List<SccgRegion> e) { for (int i = 0; i < e.size(); i++) { //如果Children的size小于1就说明为空,设置为null if (e.get(i).getChildren().size() < 1) { e.get(i).setChildren(null); } else { //子网格有数据就递归 getTreeData(e.get(i).getChildren()); } } return e; } } ycl-common/src/main/java/com/ycl/utils/redis/RedisKey.java
@@ -15,5 +15,10 @@ /** * 字典key */ public static final String DICT_LIST_ALL = "dict-list-all"; public static final String DICT = "dict:"; /** * 遂昌行政区域 */ public static final String SCCG_REGION = "sccg-region"; } ycl-common/src/main/resources/mapper/platform/region/SccgRegionMapper.xml
New file @@ -0,0 +1,17 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ycl.mapper.platform.region.SccgRegionMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.ycl.entity.platform.region.SccgRegion"> <id column="id" property="id"/> <result column="region_name" property="regionName"/> <result column="parent_id" property="parentId"/> </resultMap> <!-- 通用查询结果列 --> <sql id="Base_Column_List"> id, region_name, parent_id </sql> </mapper> ycl-platform/src/main/java/com/ycl/controller/region/SccgRegionController.java
New file @@ -0,0 +1,39 @@ package com.ycl.controller.region; import com.ycl.api.CommonResult; import com.ycl.controller.BaseController; import com.ycl.entity.platform.region.SccgRegion; import com.ycl.service.platform.region.ISccgRegionService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.List; /** * <p> * 遂昌行政区域 前端控制器 * </p> * * @author lyq * @since 2022-09-16 */ @RestController @RequestMapping("/sccg-region") @Api(tags = "行政区域") public class SccgRegionController extends BaseController { @Resource private ISccgRegionService iSccgRegionService; @ApiOperation("树结构") @GetMapping("/getTree") public CommonResult<List<SccgRegion>> getTree() { List<SccgRegion> treeList = iSccgRegionService.getTree(); return CommonResult.success(treeList); } } ycl-platform/src/main/resources/application.yml
@@ -84,3 +84,4 @@ - /**/admin/info - /**/admin/logout - /dict/** - /sccg-region/**