瀏覽代碼

server-字典缓存

WXF 3 年之前
父節點
當前提交
c2d5b22456

+ 10 - 0
api-common/src/main/java/api/common/pojo/constants/DictConstants.java

@@ -0,0 +1,10 @@
+package api.common.pojo.constants;
+
+public class DictConstants {
+
+    //字典缓存目录key
+    public static final String BASE_KEY = "GQ-DICT:";
+    public static final String LIST_KEY = "LIST:";
+    public static final String MAP_KEY = "MAP:";
+
+}

+ 20 - 0
api-common/src/main/java/api/common/pojo/vo/system/DictVO.java

@@ -0,0 +1,20 @@
+package api.common.pojo.vo.system;
+
+import lombok.Data;
+
+@Data
+public class DictVO {
+
+    //主键
+    private String id;
+    //父id
+    private String pid;
+    //字典类型
+    private String dictType;
+    //名称
+    private String dictName;
+    //编码
+    private String dictCode;
+    //序号
+    private String dictOrder;
+}

+ 17 - 0
api-common/src/main/java/api/common/util/JsonUtil.java

@@ -1,7 +1,12 @@
 package api.common.util;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.type.TypeFactory;
+
+import java.lang.reflect.Type;
+import java.util.List;
 
 public class JsonUtil {
 
@@ -43,5 +48,17 @@ public class JsonUtil {
         return new ObjectMapper().writeValueAsString(list);
     }
 
+    public static <T> List<T> jsonToList(String json, Class<T> tClass) throws JsonProcessingException {
+        TypeFactory t = TypeFactory.defaultInstance();
+        //List<T> list = new ObjectMapper().readValue(json,t.constructReferenceType(ArrayList.class,tClass));
+        List<T> list = new ObjectMapper().readValue(json, new TypeReference<List<T>>() {
+            @Override
+            public Type getType() {
+                return super.getType();
+            }
+
+        });
+        return list;
+    }
 
 }

+ 55 - 0
simulation-resource-common/src/main/java/com/css/simulation/resource/common/controller/RedisController.java

@@ -1,6 +1,7 @@
 package com.css.simulation.resource.common.controller;
 
 import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.constants.DictConstants;
 import api.common.pojo.param.RedisParameter;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.validation.annotation.Validated;
@@ -8,6 +9,9 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.time.Duration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -50,4 +54,55 @@ public class RedisController {
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
     }
 
+    @PostMapping("/setList")
+    public ResponseBodyVO<String> setList(@RequestBody List<RedisParameter> redisParameterList) {
+        if(redisParameterList != null && redisParameterList.size() > 0){
+            for (RedisParameter parameter : redisParameterList) {
+                int minutes = parameter.getMinutes();
+                if(minutes == 0){
+                    redisTemplate.opsForValue().set(parameter.getKey(), parameter.getValue());
+                }else{
+                    redisTemplate.opsForValue().set(parameter.getKey(), parameter.getValue(), Duration.ofMinutes(minutes));
+                }
+            }
+        }
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
+    }
+
+    @PostMapping("/getList")
+    public ResponseBodyVO<Map<String,String>> getList(@RequestBody List<String> keyList) {
+        Map map = new HashMap();
+        if(keyList != null && keyList.size() > 0){
+            for (String key : keyList) {
+                String value = redisTemplate.opsForValue().get(key);
+                map.put(key,value);
+            }
+        }
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS,map);
+    }
+
+    @PostMapping("/getDictLists")
+    public ResponseBodyVO<Map<String,String>> getDictLists(@RequestBody List<String> keyList) {
+        Map map = new HashMap();
+        if(keyList != null && keyList.size() > 0){
+            for (String key : keyList) {
+                String value = redisTemplate.opsForValue().get(DictConstants.BASE_KEY + DictConstants.LIST_KEY + key.toUpperCase());
+                map.put(key,value);
+            }
+        }
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS,map);
+    }
+
+    @PostMapping("/getDictMaps")
+    public ResponseBodyVO<Map<String,String>> getDictMaps(@RequestBody List<String> keyList) {
+        Map map = new HashMap();
+        if(keyList != null && keyList.size() > 0){
+            for (String key : keyList) {
+                String value = redisTemplate.opsForValue().get(DictConstants.BASE_KEY + DictConstants.MAP_KEY + key.toUpperCase());
+                map.put(key,value);
+            }
+        }
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS,map);
+    }
+
 }

+ 3 - 4
simulation-resource-common/src/main/resources/logback-spring.xml

@@ -1,11 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration debug="true">
     <!-- 项目名称 -->
-    <property name="PROJECT_NAME" value="changjingyun"/>
-
-    <!--定义不同环境的日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
+    <springProperty scop="context" name="PROJECT_NAME" source="spring.application.name" defaultValue="" />
+    <!--定义不同环境的日志文件的存储地址 使用相对路径-->
     <springProfile name="dev">
-        <property name="LOG_HOME" value="D:\\idea-log\\simulation-cloud\\simulation-resource-common"/>
+        <property name="LOG_HOME" value="logs/${PROJECT_NAME}"/>
     </springProfile>
 
     <!--输出到控制台-->

+ 12 - 3
simulation-resource-server/src/main/java/com/css/simulation/resource/feign/RedisService.java

@@ -7,11 +7,20 @@ import com.css.simulation.resource.feign.fallback.RedisServiceFallback;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 
+import java.util.List;
+import java.util.Map;
 
 //@FeignClient(name = "test", url = "http://10.15.12.72:8001", fallback = RedisServiceFallback.class, configuration = FeignConfiguration.class)
 @FeignClient(value = "simulation-resource-common", fallback = RedisServiceFallback.class, configuration = FeignConfiguration.class)
 public interface RedisService {
 
-    @PostMapping("/simulation/resource/common/redis/set")
-    ResponseBodyVO<String> set(RedisParameter redisParameter);
-}
+    @PostMapping("/simulation/resource/common/redis/setList")
+    public ResponseBodyVO<String> setList(List<RedisParameter> redisParameter);
+
+    @PostMapping("/simulation/resource/common/redis/getDictLists")
+    public ResponseBodyVO<Map<String,String>> getDictLists(List<String> keyList);
+
+    @PostMapping("/simulation/resource/common/redis/getDictMaps")
+    public ResponseBodyVO<Map<String,String>> getDictMaps(List<String> keyList);
+
+}

+ 14 - 2
simulation-resource-server/src/main/java/com/css/simulation/resource/feign/fallback/RedisServiceFallback.java

@@ -4,13 +4,25 @@ import api.common.pojo.common.ResponseBodyVO;
 import api.common.pojo.param.RedisParameter;
 import com.css.simulation.resource.feign.RedisService;
 import org.springframework.stereotype.Service;
-import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+import java.util.Map;
 
 @Service
 public class RedisServiceFallback implements RedisService {
 
     @Override
-    public ResponseBodyVO<String> set(@RequestBody RedisParameter redisParameter) {
+    public ResponseBodyVO<String> setList(List<RedisParameter> redisParameter) {
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE);
+    }
+
+    @Override
+    public ResponseBodyVO<Map<String, String>> getDictLists(List<String> keyList) {
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE);
+    }
+
+    @Override
+    public ResponseBodyVO<Map<String, String>> getDictMaps(List<String> keyList) {
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE);
     }
 }

+ 43 - 2
simulation-resource-server/src/main/java/com/css/simulation/resource/system/ctrl/DictCtrl.java

@@ -2,6 +2,7 @@ package com.css.simulation.resource.system.ctrl;
 
 import api.common.pojo.common.ResponseBodyVO;
 import api.common.pojo.param.system.DictParam;
+import api.common.pojo.vo.system.DictVO;
 import com.css.simulation.resource.system.service.DictService;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -11,6 +12,12 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 字典数据管理
+ */
 @Controller
 @RequestMapping("/dict")
 public class DictCtrl {
@@ -18,12 +25,46 @@ public class DictCtrl {
     @Autowired
     DictService dictService;
 
-    @RequestMapping("/refreshDicts")
+    /**
+     * 通过字典类型dictTypes将字典数据刷新至缓存,当dictTypes值为all时,将刷新所有字典。
+     * @param param
+     * @return
+     * @throws JsonProcessingException
+     */
+    @RequestMapping("/refreshDictsByTypes")
     @ResponseBody
-    public ResponseBodyVO refreshDicts(@RequestBody @Validated DictParam param) throws JsonProcessingException {
+    public ResponseBodyVO refreshDictsByTypes(@RequestBody @Validated DictParam param) throws JsonProcessingException {
         ResponseBodyVO<String> response = new ResponseBodyVO<String>(ResponseBodyVO.Response.SUCCESS);
         response.setInfo(dictService.refreshDicts(param));
         return response;
     }
 
+    /**
+     * 通过字典类型dictTypes从缓存中查询字典数据lists
+     * @param param
+     * @return
+     * @throws JsonProcessingException
+     */
+    @RequestMapping("/getDictListsByTypes")
+    @ResponseBody
+    public ResponseBodyVO getDictListsByTypes(@RequestBody @Validated DictParam param) throws JsonProcessingException {
+        ResponseBodyVO<Map<String, List<DictVO>>> response = new ResponseBodyVO<Map<String,List<DictVO>>>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(dictService.getDictListsByTypes(param));
+        return response;
+    }
+
+    /**
+     * 通过字典类型dictTypes从缓存中查询字典数据maps
+     * @param param
+     * @return
+     * @throws JsonProcessingException
+     */
+    @RequestMapping("/getDictMapsByTypes")
+    @ResponseBody
+    public ResponseBodyVO getDictMapsByTypes(@RequestBody @Validated DictParam param) throws JsonProcessingException {
+        ResponseBodyVO<Map<String,Map<String,String>>> response = new ResponseBodyVO<Map<String,Map<String,String>>>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(dictService.getDictMapsByTypes(param));
+        return response;
+    }
+
 }

+ 3 - 3
simulation-resource-server/src/main/java/com/css/simulation/resource/system/mapper/DictMapper.java

@@ -1,8 +1,8 @@
 package com.css.simulation.resource.system.mapper;
 
-import api.common.pojo.po.system.DictPO;
+
+import api.common.pojo.vo.system.DictVO;
 import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -11,6 +11,6 @@ import java.util.List;
 @Repository
 public interface DictMapper {
 
-    List<DictPO> getDicts(List dictTypeList);
+    List<DictVO> getDicts(List dictTypeList);
 
 }

+ 65 - 17
simulation-resource-server/src/main/java/com/css/simulation/resource/system/service/DictService.java

@@ -1,8 +1,11 @@
 package com.css.simulation.resource.system.service;
 
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.constants.DictConstants;
 import api.common.pojo.param.RedisParameter;
 import api.common.pojo.param.system.DictParam;
 import api.common.pojo.po.system.DictPO;
+import api.common.pojo.vo.system.DictVO;
 import api.common.util.JsonUtil;
 import com.css.simulation.resource.feign.RedisService;
 import com.css.simulation.resource.system.mapper.DictMapper;
@@ -33,33 +36,78 @@ public class DictService {
             dictTypeList = new ArrayList<String>();
         }
         //数据库取值
-        List<DictPO> DictPOlist = dictMapper.getDicts(dictTypeList);
+        List<DictVO> DictVOlist = dictMapper.getDicts(dictTypeList);
         //分组转换
-        Map<String, List<DictPO>> DictPOMap = DictPOlist.stream().collect(Collectors.groupingBy(DictPO::getDictType));
-        //放入缓存
-        Set<String> keySet = DictPOMap.keySet();
+        Map<String, List<DictVO>> DictVOMap = DictVOlist.stream().collect(Collectors.groupingBy(DictVO::getDictType));
+        //解析重构
+        List<RedisParameter> dictLists = new ArrayList<>();
+        List<RedisParameter> dictMaps = new ArrayList<>();
+        Set<String> keySet = DictVOMap.keySet();
         for (String key: keySet) {
-            List<DictPO> dictPOS = DictPOMap.get(key);
+            List<DictVO> dictVOS = DictVOMap.get(key);
             //list 字典
-            String dictList = JsonUtil.listToJson(dictPOS);
-            //放入缓存 TODO
-            RedisParameter parameter = new RedisParameter();
-            parameter.setKey(key);
-            parameter.setValue(dictList);
-            parameter.setMinutes(10);
-            redisService.set(parameter);
+            String dictList = JsonUtil.listToJson(dictVOS);
+            //放入列表
+            RedisParameter listParameter = new RedisParameter();
+            listParameter.setKey(DictConstants.BASE_KEY + DictConstants.LIST_KEY + key.toUpperCase());
+            listParameter.setValue(dictList);
+            dictLists.add(listParameter);
             //map 字典
             Map<String, String> map = new HashMap();
-            for (DictPO dictPO: dictPOS) {
-                String code = dictPO.getDictCode();
-                String name = dictPO.getDictName();
+            for (DictVO dictVO: dictVOS) {
+                String code = dictVO.getDictCode();
+                String name = dictVO.getDictName();
                 map.put(code,name);
             }
             String dictMap = JsonUtil.beanToJson(map);
-            //放入缓存 TODO
-
+            //放入列表
+            RedisParameter mapParameter = new RedisParameter();
+            mapParameter.setKey(DictConstants.BASE_KEY + DictConstants.MAP_KEY + key.toUpperCase());
+            mapParameter.setValue(dictMap);
+            dictMaps.add(mapParameter);
         }
+        //放入缓存
+        redisService.setList(dictLists);//前端下拉框使用
+        redisService.setList(dictMaps);//后端字典翻译使用
         //返回刷新成功的字典名称
         return keySet.toString();
     }
+
+    public Map<String, List<DictVO>> getDictListsByTypes(DictParam param) throws JsonProcessingException {
+        //解析参数进行查询
+        String dictTypes = param.getDictTypes();
+        List<String> dictTypeList = Arrays.asList(dictTypes.split(","));
+        ResponseBodyVO<Map<String, String>> responseBodyVO = redisService.getDictLists(dictTypeList);
+        //查询结果转换至java对象
+        Map<String, String> map = responseBodyVO.getInfo();
+        Map<String, List<DictVO>> dictLists = new HashMap<>();
+        Set<String> keySet = map.keySet();
+        for (String key: keySet) {
+            String val = map.get(key);
+            //json转javaBean
+            List<DictVO> DictVOS = JsonUtil.jsonToList(val, DictVO.class);
+            dictLists.put(key,DictVOS);
+        }
+        return dictLists;
+    }
+
+    public Map<String, Map<String,String>> getDictMapsByTypes(DictParam param) throws JsonProcessingException {
+        //解析参数进行查询
+        String dictTypes = param.getDictTypes();
+        List<String> dictTypeList = Arrays.asList(dictTypes.split(","));
+        ResponseBodyVO<Map<String, String>> responseBodyVO = redisService.getDictMaps(dictTypeList);
+        //查询结果转换至map对象
+        Map<String, String> map = responseBodyVO.getInfo();
+        Map<String, Map<String,String>> dictMaps = new HashMap<>();
+        Set<String> keySet = map.keySet();
+        for (String key: keySet) {
+            String val = map.get(key);
+            //json转map
+            HashMap hashMap = JsonUtil.jsonToBean(val, HashMap.class);
+            dictMaps.put(key,hashMap);
+        }
+        return dictMaps;
+    }
+
+
 }

+ 1 - 1
simulation-resource-server/src/main/resources/mapper/system/DictMapper.xml

@@ -3,7 +3,7 @@
 <mapper namespace="com.css.simulation.resource.system.mapper.DictMapper" >
 
 
-    <select id="getDicts" parameterType="java.util.ArrayList" resultType="api.common.pojo.po.system.DictPO">
+    <select id="getDicts" parameterType="java.util.ArrayList" resultType="api.common.pojo.vo.system.DictVO">
         select
           id,
           pid,