Browse Source

仓库管理后端添加缓存

xdd 1 month ago
parent
commit
511c7ebe6e

+ 4 - 1
fs-service-system/pom.xml

@@ -158,6 +158,9 @@
             <version>2.5.1</version>
         </dependency>
 
-
+        <dependency>
+            <groupId>com.github.ben-manes.caffeine</groupId>
+            <artifactId>caffeine</artifactId>
+        </dependency>
     </dependencies>
 </project>

+ 1 - 0
fs-service-system/src/main/java/com/fs/store/domain/FsWarehouses.java

@@ -48,6 +48,7 @@ public class FsWarehouses extends BaseEntity
     /** 是否启用(1:启用,0:停用) */
     @Excel(name = "是否启用", readConverterExp = "1=:启用,0:停用")
     private Integer isActive;
+    private String isActiveText;
 
     /** 创建时间 */
     @JsonFormat(pattern = "yyyy-MM-dd")

+ 19 - 3
fs-service-system/src/main/java/com/fs/store/service/impl/FsWarehousesServiceImpl.java

@@ -5,8 +5,11 @@ import java.util.List;
 import com.fs.store.domain.FsWarehouses;
 import com.fs.store.mapper.FsWarehousesMapper;
 import com.fs.store.service.IFsWarehousesService;
+import com.fs.system.cache.ISysDictDataCacheService;
+import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
 
 /**
  * 仓库Service业务层处理
@@ -14,11 +17,12 @@ import org.springframework.stereotype.Service;
  * @author fs
  * @date 2025-03-07
  */
+@RequiredArgsConstructor
 @Service
 public class FsWarehousesServiceImpl implements IFsWarehousesService
 {
-    @Autowired
-    private FsWarehousesMapper fsWarehousesMapper;
+    private final FsWarehousesMapper fsWarehousesMapper;
+    private final ISysDictDataCacheService sysDictDataCacheService;
 
     /**
      * 查询仓库
@@ -41,7 +45,19 @@ public class FsWarehousesServiceImpl implements IFsWarehousesService
     @Override
     public List<FsWarehouses> selectFsWarehousesList(FsWarehouses fsWarehouses)
     {
-        return fsWarehousesMapper.selectFsWarehousesList(fsWarehouses);
+        List<FsWarehouses> warehouses = fsWarehousesMapper.selectFsWarehousesList(fsWarehouses);
+        for (FsWarehouses warehouse : warehouses) {
+            Integer isActive = warehouse.getIsActive();
+
+            if(ObjectUtils.isEmpty(isActive)){
+                isActive = 0;
+            }
+            String isActiveText = sysDictDataCacheService
+                    .selectDictLabel("enable_options", String.valueOf(isActive));
+            warehouse.setIsActiveText(isActiveText);
+        }
+
+        return warehouses;
     }
 
     /**

+ 11 - 0
fs-service-system/src/main/java/com/fs/system/cache/ISysDictDataCacheService.java

@@ -0,0 +1,11 @@
+package com.fs.system.cache;
+
+public interface ISysDictDataCacheService {
+    /**
+     * 根据字典类型和字典值查询字典标签
+     * @param dictType 字典类型
+     * @param dictValue 字典值
+     * @return 字典标签
+     */
+    String selectDictLabel(String dictType, String dictValue);
+}

+ 85 - 0
fs-service-system/src/main/java/com/fs/system/cache/impl/SysDictDataCacheServiceImpl.java

@@ -0,0 +1,85 @@
+package com.fs.system.cache.impl;
+
+import com.fs.system.cache.ISysDictDataCacheService;
+import com.fs.system.service.ISysDictDataService;
+import com.github.benmanes.caffeine.cache.Cache;
+import com.github.benmanes.caffeine.cache.Caffeine;
+import org.apache.http.util.Asserts;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 系统字典数据缓存服务实现类
+ *
+ * @author xdd
+ * @version 1.0
+ * @since 2024-03-07
+ */
+@Service
+public class SysDictDataCacheServiceImpl implements ISysDictDataCacheService {
+    /**
+     * 使用Caffeine本地缓存
+     * maximumSize: 最大缓存条数
+     * expireAfterWrite: 写入后多久过期(分钟)
+     */
+    private static final Cache<CompositeKey, String> CACHE = Caffeine.newBuilder()
+            .maximumSize(1000)
+            .expireAfterWrite(10, TimeUnit.MINUTES)
+            .build();
+
+    /**
+     * 注入ISysDictDataService,用于缓存未命中时查询数据
+     */
+    @Autowired
+    private ISysDictDataService sysDictDataService;
+
+    /**
+     * 根据字典类型和字典值查询字典标签
+     *
+     * @param dictType  字典类型
+     * @param dictValue 字典值
+     * @return 字典标签
+     */
+    @Override
+    public String selectDictLabel(String dictType, String dictValue) {
+        Asserts.notBlank(dictType,"字典类型不能为空!");
+        Asserts.notBlank(dictValue,"字典默认值不能为空!");
+
+        return CACHE.get(new CompositeKey(dictType, dictValue),
+                e-> sysDictDataService.selectDictLabel(dictType,dictValue));
+    }
+    /**
+     * 组合键,用于缓存的键
+     */
+    static class CompositeKey{
+        /**
+         * 字典类型
+         */
+        private final String dictType;
+        /**
+         * 字典值
+         */
+        private final String dictValue;
+
+        public CompositeKey(String dictType, String dictValue) {
+            this.dictType = dictType;
+            this.dictValue = dictValue;
+        }
+
+        @Override
+        public boolean equals(Object o) {
+            if (this == o) return true;
+            if (o == null || getClass() != o.getClass()) return false;
+            CompositeKey that = (CompositeKey) o;
+            return Objects.equals(dictType, that.dictType) && Objects.equals(dictValue, that.dictValue);
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(dictType, dictValue);
+        }
+    }
+}