Przeglądaj źródła

feat:新增设备缓存手动刷新功能

lihao16 2 miesięcy temu
rodzic
commit
5b10e87559

+ 11 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/controller/SmsbDeviceController.java

@@ -134,6 +134,17 @@ public class SmsbDeviceController extends BaseController {
         return toAjax(smsbDeviceService.updateByBo(bo));
     }
 
+    /**
+     * 刷新设备redis缓存
+     */
+    @SaCheckPermission("smsb:device:edit")
+    @Log(title = "设备", businessType = BusinessType.CLEAN)
+    @RepeatSubmit()
+    @GetMapping("/refreshCache")
+    public R<Void> refreshCache() {
+        return toAjax(smsbDeviceService.refreshCache());
+    }
+
     /**
      * 删除设备
      *

+ 6 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/service/ISmsbDeviceService.java

@@ -153,4 +153,10 @@ public interface ISmsbDeviceService {
      * @return
      */
     List<SmsbDeviceMultiCardVo> getDeviceMultiCardList(Long id);
+
+    /**
+     * 刷新缓存
+     * @return
+     */
+    boolean refreshCache();
 }

+ 23 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/service/impl/SmsbDeviceServiceImpl.java

@@ -42,6 +42,7 @@ import org.dromara.common.sse.dto.SseMessageContentDto;
 import org.dromara.common.sse.dto.SseMessageContentTypeDto;
 import org.dromara.common.sse.dto.SseMessageDto;
 import org.dromara.common.sse.utils.SseMessageUtils;
+import org.dromara.common.tenant.helper.TenantHelper;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cache.annotation.CacheEvict;
@@ -78,6 +79,10 @@ public class SmsbDeviceServiceImpl implements ISmsbDeviceService {
     @Value("${server.minio.ip}")
     private String minioServerIp;
 
+    private final static String REDIS_KEY_IDENTIFIER = "global:msr:device:identifier";
+
+    private final static String REDIS_KEY_ID = "global:msr:device:id";
+
     /**
      * 查询设备
      *
@@ -494,4 +499,22 @@ public class SmsbDeviceServiceImpl implements ISmsbDeviceService {
         deviceMultiCardVoList = RedisUtils.getCacheObject(DeviceConstants.REDIS_DEVICE_MULTI_CARD_KEY + smsbDeviceVo.getIdentifier());
         return deviceMultiCardVoList;
     }
+
+    @Override
+    public boolean refreshCache() {
+        // 查询出所有设备信息
+        List<SmsbDeviceVo> deviceVoList = TenantHelper.ignore(() -> baseMapper.selectVoList());
+        if (CollectionUtils.isEmpty(deviceVoList)) {
+            return true;
+        }
+        // 删除所有设备缓存
+        RedisUtils.deleteKeys(REDIS_KEY_IDENTIFIER);
+        RedisUtils.deleteKeys(REDIS_KEY_ID);
+        // 重新缓存设备信息
+        for (SmsbDeviceVo smsbDeviceVo : deviceVoList) {
+            RedisUtils.setCacheMapValue(REDIS_KEY_IDENTIFIER,smsbDeviceVo.getIdentifier(), smsbDeviceVo);
+            RedisUtils.setCacheMapValue(REDIS_KEY_ID,smsbDeviceVo.getId().toString(), smsbDeviceVo);
+        }
+        return true;
+    }
 }

+ 7 - 0
smsb-plus-ui/src/api/smsb/device/device.ts

@@ -42,6 +42,13 @@ export const getDevice = (id: string | number): AxiosPromise<DeviceVO> => {
   });
 };
 
+export const refreshCache = () => {
+  return request({
+    url: '/smsb/device/refreshCache',
+    method: 'get'
+  });
+};
+
 /**
  * 查询设备详细
  * @param id

+ 8 - 1
smsb-plus-ui/src/views/smsb/device/index.vue

@@ -107,6 +107,7 @@
                              @click="handleInfo()">
                     详情
                   </el-button>
+                  <el-button v-hasPermi="['smsb:device:edit']" type="danger" plain icon="Refresh" @click="handleRefreshCache">刷新缓存</el-button>
                 </el-form-item>
               </el-form>
             </div>
@@ -493,7 +494,7 @@ import {
   getDeviceScreenshot,
   listDevice,
   powerSet,
-  reboot,
+  reboot, refreshCache,
   restartApp,
   scheduleSet,
   shutdown,
@@ -883,6 +884,12 @@ const handleUpdate = async (row?: DeviceVO) => {
   dialog.title = '修改';
 };
 
+const handleRefreshCache = async () => {
+  buttonLoading.value = true;
+  await refreshCache().finally(() => buttonLoading.value = false);
+  proxy?.$modal.msgSuccess('刷新缓存成功');
+}
+
 /** 提交按钮 */
 const submitForm = () => {
   deviceFormRef.value?.validate(async (valid: boolean) => {