Browse Source

作者:张哲
时间:2023/07/26
类型:优化
描述:加入缓存

zizg 1 year ago
parent
commit
9bab6f7a82

+ 102 - 0
src/main/java/com/redxun/knowledge/config/RedisCacheConfig.java

@@ -0,0 +1,102 @@
+package com.redxun.knowledge.config;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.cache.CacheManager;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.cache.interceptor.KeyGenerator;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.cache.RedisCacheConfiguration;
+import org.springframework.data.redis.cache.RedisCacheManager;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.RedisSerializationContext;
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+import java.time.Duration;
+
+@Configuration
+@EnableCaching
+public class RedisCacheConfig {
+
+    /**
+     * 自定义key规则
+     *
+     * @return
+     */
+    @Bean
+    public KeyGenerator keyGenerator() {
+        return (target, method, params) -> {
+            StringBuilder sb = new StringBuilder();
+            sb.append(target.getClass().getName());
+            sb.append(method.getName());
+            for (Object obj : params) {
+                sb.append(obj.toString());
+            }
+            return sb.toString();
+        };
+    }
+
+    /**
+     * 设置RedisTemplate规则
+     *
+     * @param redisConnectionFactory
+     * @return
+     */
+    @Bean
+    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
+        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
+        redisTemplate.setConnectionFactory(redisConnectionFactory);
+        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
+
+        //解决查询缓存转换异常的问题
+        ObjectMapper om = new ObjectMapper();
+        // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
+        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
+        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+        jackson2JsonRedisSerializer.setObjectMapper(om);
+        //序列号key value
+        redisTemplate.setKeySerializer(new StringRedisSerializer());
+        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
+        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
+        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
+
+        redisTemplate.afterPropertiesSet();
+        return redisTemplate;
+    }
+
+    /**
+     * 设置CacheManager缓存规则
+     *
+     * @param factory
+     * @return
+     */
+    @Bean
+    public CacheManager cacheManager(RedisConnectionFactory factory) {
+        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
+        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
+
+        //解决查询缓存转换异常的问题
+        ObjectMapper om = new ObjectMapper();
+        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+        jackson2JsonRedisSerializer.setObjectMapper(om);
+
+        // 配置序列化(解决乱码的问题),过期时间600秒
+        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
+                .entryTtl(Duration.ofSeconds(86400))
+                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
+                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
+                .disableCachingNullValues();
+
+        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
+                .cacheDefaults(config)
+                .build();
+        return cacheManager;
+    }
+}

+ 5 - 0
src/main/java/com/redxun/knowledge/controller/KnowledgeController.java

@@ -83,14 +83,17 @@ public class KnowledgeController extends BaseController<Knowledge> {
         }
         if (knowledgeDto.getIsDraft() != null && knowledgeDto.getIsDraft() == 0) {
             jsonResult.setMessage("提交成功!");
+            jsonResult.setShow(false);
         }
         String pkId = null;
         try {
             pkId = knowledgeService.create(knowledgeDto,null);
             jsonResult.setData(pkId);
+            jsonResult.setShow(false);
         } catch (Exception e) {
             jsonResult.setMessage(e.getMessage());
             jsonResult.setSuccess(false);
+            jsonResult.setShow(false);
         }
         return jsonResult;
     }
@@ -103,6 +106,7 @@ public class KnowledgeController extends BaseController<Knowledge> {
         try {
             update = knowledgeService.update(entity);
         } catch (Exception e) {
+            jsonResult.setShow(false);
             jsonResult.setMessage(e.getMessage());
             jsonResult.setSuccess(false);
             return jsonResult;
@@ -111,6 +115,7 @@ public class KnowledgeController extends BaseController<Knowledge> {
             return JsonResult.Success("知识正在审核中,无法修改");
         } else {
             jsonResult.setMessage("提交成功!");
+            jsonResult.setShow(false);
             return jsonResult;
         }
     }

+ 0 - 2
src/main/java/com/redxun/knowledge/entity/dto/KnowledgeDto.java

@@ -51,6 +51,4 @@ public class KnowledgeDto {
     private Integer isDraft;
 
     private OrganizationDto organizationIds;
-
-    private String customNodes;
 }

+ 4 - 3
src/main/java/com/redxun/knowledge/service/KnowledgeCategoryServiceImpl.java

@@ -164,7 +164,7 @@ public class KnowledgeCategoryServiceImpl extends SuperServiceImpl<KnowledgeCate
      * @return
      */
     @Override
-    @CacheEvict(value = "knowledgeCategory", allEntries=true)
+    @CacheEvict(value = {"knowledgeCategory","knowledgeCategoryPc"}, allEntries=true)
     public int insert(KnowledgeCategory entity) {
         if (BeanUtil.isEmpty(entity.getPkId())) {
             entity.setPkId(IdGenerator.getIdStr());
@@ -193,7 +193,7 @@ public class KnowledgeCategoryServiceImpl extends SuperServiceImpl<KnowledgeCate
      * @return
      */
     @Override
-    @CacheEvict(value = "knowledgeCategory", allEntries=true)
+    @CacheEvict(value = {"knowledgeCategory","knowledgeCategoryPc"}, allEntries=true)
     public int update(KnowledgeCategory entity) {
         KnowledgeCategory knowledgeCategory = this.get(entity.getPkId());
         if (knowledgeCategory.getIsSys() == 1) {
@@ -248,7 +248,7 @@ public class KnowledgeCategoryServiceImpl extends SuperServiceImpl<KnowledgeCate
      * @param knowledgeCategoryId
      */
     @Transactional(rollbackFor = Exception.class)
-    @CacheEvict(value = "knowledgeCategory", allEntries=true)
+    @CacheEvict(value = {"knowledgeCategory","knowledgeCategoryPc"}, allEntries=true)
     public Integer deleteKnowledgeCategory(String knowledgeCategoryId) {
 
         // 查询该分类下是否还有知识
@@ -378,6 +378,7 @@ public class KnowledgeCategoryServiceImpl extends SuperServiceImpl<KnowledgeCate
      * @param
      * @return
      */
+    @Cacheable(value = "knowledgeCategoryPc")
     public List<KnowledgeCategoryAdminVo> getAllKnowledgeCategory() {
         List<KnowledgeCategoryAdminVo> knowledgeCategoryList = knowledgeCategoryMapper.getAllKnowledgeCategory();
         // 查询顶级记录的所有子集合(顶级记录id为0)

+ 1 - 25
src/main/java/com/redxun/knowledge/service/KnowledgeServiceImpl.java

@@ -181,26 +181,6 @@ public class KnowledgeServiceImpl extends SuperServiceImpl<KnowledgeMapper, Know
             if (ObjectUtils.isNotEmpty(approvalVoList)) {
                 KnowledgeApprovalNodeVo node;
                 for (int index = 0; index < approvalVoList.size(); index++) {
-                    //自定义节点存在,加入到默认节点的下一个节点
-                    if (index == 1 && StringUtils.isNotEmpty(knowledgeDto.getCustomNodes())){
-                        KnowledgeApprove knowledgeApprove = new KnowledgeApprove();
-                        knowledgeApprove.setPkId(IdGenerator.getIdStr());
-                        knowledgeApprove.setName("自定义节点");
-                        knowledgeApprove.setKnowledgerId(knowledge.getPkId());
-                        knowledgeApprove.setApproverId(knowledgeDto.getCustomNodes());
-                        String approverName = Arrays.asList(knowledgeApprove.getApproverId().split(",")).parallelStream().map(e -> userService.queryByUsername(e).getFullName()).
-                                collect(Collectors.joining(","));
-                        knowledgeApprove.setApproverName(approverName);
-                        knowledgeApprove.setApprovalBatch(1);
-                        knowledgeApprove.setUpdateBy(users.getUserId());
-                        knowledgeApprove.setSort(2);
-                        knowledgeApprove.setIsFinal(0);
-                        knowledgeApprove.setCreateBy(userService.queryLoginUser());
-                        knowledgeApprove.setCreateTime(new Date());
-                        knowledgeApproveMapper.insert(knowledgeApprove);
-                        index--;
-                        continue;
-                    }
                     node = approvalVoList.get(index);
                     if (node != null) {
                         KnowledgeApprove knowledgeApprove = new KnowledgeApprove();
@@ -211,11 +191,7 @@ public class KnowledgeServiceImpl extends SuperServiceImpl<KnowledgeMapper, Know
                         knowledgeApprove.setApproverName(node.getApproverName());
                         knowledgeApprove.setApprovalBatch(1);
                         knowledgeApprove.setUpdateBy(users.getUserId());
-                        if (index > 0 && StringUtils.isNotEmpty(knowledgeDto.getCustomNodes())){
-                            knowledgeApprove.setSort(index + 2);
-                        } else {
-                            knowledgeApprove.setSort(index + 1);
-                        }
+                        knowledgeApprove.setSort(index + 1);
                         knowledgeApprove.setIsFinal(node.getIsFinal());
                         knowledgeApprove.setCreateBy(userService.queryLoginUser());
                         knowledgeApprove.setCreateTime(new Date());

+ 6 - 1
src/main/resources/bootstrap.yml

@@ -17,7 +17,12 @@ spring:
       #additional-paths: src/main/java
       #classpath目录下的WEB-INF文件夹内容修改不重启
       exclude: WEB-INF/**
-
+  cache:
+    type: redis
+    redis:
+      use-key-prefix: true
+      key-prefix: knowledge
+      time-to-live: 86400
 
 management:
   endpoints: