From 25743ef4cfb9da0be8d3e488c93f5429ffd02f8a Mon Sep 17 00:00:00 2001
From: 44323 <443237572@qq.com>
Date: 星期二, 21 五月 2024 14:21:25 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/DolphinEnglish

---
 ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RegionServiceImpl.java |   54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 54 insertions(+), 0 deletions(-)

diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RegionServiceImpl.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RegionServiceImpl.java
index ba857bc..1432bb9 100644
--- a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RegionServiceImpl.java
+++ b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RegionServiceImpl.java
@@ -1,14 +1,68 @@
 package com.ruoyi.goods.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.constant.RedisConstants;
 import com.ruoyi.goods.domain.Region;
 import com.ruoyi.goods.mapper.RegionMapper;
 import com.ruoyi.goods.service.IRegionService;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 @Service
 public class RegionServiceImpl extends ServiceImpl<RegionMapper, Region> implements IRegionService {
+    @Resource
+    private RedisTemplate<Object, Object> redisTemplate;
+
+    @Override
+    public List<Region> addressTree() {
+        // redis缓存
+        Map<Object, Object> regionList = redisTemplate.opsForHash().entries(RedisConstants.ADDRESS_TREE);
+        // 获取所有地区信息 省市区三级
+        List<Region> regions = getReginList(regionList);
+        // 所有地区
+        Map<String, Region> courseTypeMap = regions.stream().
+                collect(Collectors.toMap(region -> region.getId().toString()
+                        , region -> region));
+        redisTemplate.opsForHash().putAll(RedisConstants.ADDRESS_TREE, courseTypeMap);
+        redisTemplate.expire(RedisConstants.ADDRESS_TREE, 30, TimeUnit.MINUTES);
+        // 生成map集合
+        Map<Integer, Region> map = regions.stream().collect(Collectors.toMap(Region::getId, region -> region));
+        // 存放无限级树
+        List<Region> treeData = new ArrayList<>();
+        // 遍历地区集合
+        regions.forEach(e -> {
+            if (e.getParentId() == null || e.getParentId().equals(0)) {
+                treeData.add(e);
+            } else {
+                Region region = map.get(e.getParentId());
+                region.getChildren().add(e);
+            }
+        });
+        return treeData;
+    }
+
+    /**
+     * 获取redis数据进行封装
+     */
+    private List<Region> getReginList(Map<Object, Object> regionMap) {
+        List<Region> regions = new ArrayList<>();
+        if (!regionMap.isEmpty()) {
+            Collection<Object> values = regionMap.values();
+            for (Object value : values) {
+                regions.add((Region) value);
+            }
+        } else {
+            regions = this.list();
+        }
+        return regions;
+    }
 
 }

--
Gitblit v1.7.1