From 2c8ca9db2471c33943c20882061a2c87bb99d7f0 Mon Sep 17 00:00:00 2001
From: cjl <276999030@qq.com>
Date: Fri, 13 Oct 2023 09:32:53 +0800
Subject: [PATCH] fix:秒级数据调整

---
 screen-manage/src/main/java/com/moral/api/service/impl/SysDictDataServiceImpl.java |  210 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 209 insertions(+), 1 deletions(-)

diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/SysDictDataServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/SysDictDataServiceImpl.java
index 4eba4ad..3e0da43 100644
--- a/screen-manage/src/main/java/com/moral/api/service/impl/SysDictDataServiceImpl.java
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/SysDictDataServiceImpl.java
@@ -1,10 +1,31 @@
 package com.moral.api.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.moral.api.entity.SysDictData;
+import com.moral.api.entity.SysDictType;
 import com.moral.api.mapper.SysDictDataMapper;
+import com.moral.api.pojo.dto.sysDictData.SysDictDataDTO;
+import com.moral.api.pojo.form.sysDictData.SysDictDataDeleteForm;
+import com.moral.api.pojo.form.sysDictData.SysDictDataInsertForm;
+import com.moral.api.pojo.form.sysDictData.SysDictDataUpdateForm;
 import com.moral.api.service.SysDictDataService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.api.service.SysDictTypeService;
+import com.moral.api.util.CacheUtils;
+import com.moral.api.util.LogUtils;
+import com.moral.constant.Constants;
+import com.moral.constant.RedisConstants;
+import com.moral.constant.ResponseCodeEnum;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ObjectUtils;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -12,9 +33,196 @@
  * </p>
  *
  * @author moral
- * @since 2021-03-09
+ * @since 2021-04-13
  */
 @Service
 public class SysDictDataServiceImpl extends ServiceImpl<SysDictDataMapper, SysDictData> implements SysDictDataService {
 
+    @Autowired
+    SysDictTypeService sysDictTypeService;
+    @Autowired
+    SysDictDataMapper sysDictDataMapper;
+    @Autowired
+    RedisTemplate redisTemplate;
+
+    @Override
+    @Transactional
+    public SysDictDataDTO deleteData(SysDictDataDeleteForm form) {
+        //������������������
+        SysDictDataDTO dto = new SysDictDataDTO();
+        //������
+        Integer id = form.getId();
+        //������������������������������������������������������
+        QueryWrapper existWrapper = new QueryWrapper();
+        existWrapper.eq("is_delete", Constants.NOT_DELETE);
+        existWrapper.eq("id", id);
+        SysDictData existData = sysDictDataMapper.selectOne(existWrapper);
+        SysDictType type = sysDictTypeService.getDictTypeById(existData.getDictTypeId());
+        //������������
+        UpdateWrapper deleteWrapper = new UpdateWrapper();
+        deleteWrapper.set("is_delete", Constants.DELETE);
+        deleteWrapper.eq("id", id);
+        sysDictDataMapper.update(null, deleteWrapper);
+        //������������
+        StringBuilder content = new StringBuilder("���������������������;");
+        content.append("������:" + type.getName() + "(" + type.getDesc() + ")" + ";");
+        content.append("key:" + existData.getDataKey() + ";");
+        content.append("value:" + existData.getDataValue() + ";");
+        LogUtils.saveOperationForManage(content.toString(), Constants.DELETE_OPERATE_TYPE);
+        //������������
+        refreshCache();
+        //������������������
+        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
+        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
+        return dto;
+    }
+
+    @Override
+    public SysDictDataDTO updateData(SysDictDataUpdateForm form) {
+        SysDictDataDTO dto = new SysDictDataDTO();
+        //������
+        SysDictData sysDictData = form.formConvertEntity();
+        //���������������������������
+        QueryWrapper<SysDictData> existWrapper = new QueryWrapper<>();
+        existWrapper.eq("is_delete", Constants.NOT_DELETE);
+        existWrapper.eq("id", sysDictData.getId());
+        SysDictData existData = sysDictDataMapper.selectOne(existWrapper);
+        SysDictType type = sysDictTypeService.getDictTypeById(existData.getDictTypeId());
+        //������key������������
+        String key = sysDictData.getDataKey();
+        if (!ObjectUtils.isEmpty(key)) {
+            QueryWrapper<SysDictData> wrapper = new QueryWrapper<>();
+            wrapper.eq("is_delete", Constants.NOT_DELETE);
+            wrapper.eq("dataKey", key);
+            wrapper.eq("dict_type_id", existData.getDictTypeId());
+            SysDictData existKeyData = sysDictDataMapper.selectOne(wrapper);
+            if (!ObjectUtils.isEmpty(existKeyData)) {
+                dto.setCode(ResponseCodeEnum.DICTDATA_KEY_EXIST.getCode());
+                dto.setMsg(ResponseCodeEnum.DICTDATA_KEY_EXIST.getMsg());
+                return dto;
+            }
+        }
+        //������������
+        sysDictDataMapper.updateById(sysDictData);
+        //������������
+        StringBuilder content = new StringBuilder("���������������������;");
+        content.append("������:" + type.getName() + "(" + type.getDesc() + ")" + ";");
+        content.append("key:" + existData.getDataKey() + ";");
+        content.append("value:" + existData.getDataValue() + "->" + sysDictData.getDataValue() + ";");
+        LogUtils.saveOperationForManage(content.toString(), Constants.UPDATE_OPERATE_TYPE);
+        //������������
+        refreshCache();
+        //������������������
+        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
+        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
+        return dto;
+    }
+
+
+    @Override
+    public SysDictDataDTO insertData(SysDictDataInsertForm form) {
+        SysDictDataDTO dto = new SysDictDataDTO();
+        //������
+        SysDictData sysDictData = form.formConvertEntity();
+        //������������������������������������
+        SysDictType type = sysDictTypeService.getDictTypeById(sysDictData.getDictTypeId());
+        if (ObjectUtils.isEmpty(type)) {
+            dto.setCode(ResponseCodeEnum.DICTTYPE_NOT_EXIST.getCode());
+            dto.setMsg(ResponseCodeEnum.DICTTYPE_NOT_EXIST.getMsg());
+            return dto;
+        }
+        //������Key������������
+        String key = sysDictData.getDataKey();
+        QueryWrapper<SysDictData> wrapper = new QueryWrapper<>();
+        wrapper.eq("is_delete", Constants.NOT_DELETE);
+        wrapper.eq("dataKey", key);
+        wrapper.eq("dict_type_id", type.getId());
+        SysDictData existKeyData = sysDictDataMapper.selectOne(wrapper);
+        if (!ObjectUtils.isEmpty(existKeyData)) {
+            dto.setCode(ResponseCodeEnum.DICTDATA_KEY_EXIST.getCode());
+            dto.setMsg(ResponseCodeEnum.DICTDATA_KEY_EXIST.getMsg());
+            return dto;
+        }
+        //������������
+        sysDictDataMapper.insert(sysDictData);
+        //������������
+        StringBuilder content = new StringBuilder("���������������������;");
+        content.append("������:" + type.getName() + "(" + type.getDesc() + ")" + ";");
+        content.append("key:" + sysDictData.getDataKey() + ";");
+        content.append("value:" + sysDictData.getDataValue() + ";");
+        LogUtils.saveOperationForManage(content.toString(), Constants.INSERT_OPERATE_TYPE);
+        //������������
+        refreshCache();
+        //������������������
+        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
+        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
+        return dto;
+    }
+
+    @Override
+    public Map<String, Object> queryDataByTypeName(String typeName) {
+        Map<String, List<SysDictData>> datas = getAllDictData();
+        //������������������
+        List<SysDictData> sysDictData = datas.get(typeName);
+        //��������������������������� Map  key���dataKey  value���dataValue
+        Map<String, Object> result = new HashMap<>();
+        for (SysDictData data : sysDictData) {
+            result.put(data.getDataKey(), data.getDataValue());
+        }
+        return result;
+    }
+
+    @Override
+    public Map<String, List<SysDictData>> getAllDictData() {
+        Map<String, List<SysDictData>> datas = new HashMap<>();
+        //������������������
+        datas = (Map<String, List<SysDictData>>) redisTemplate.opsForValue().get(RedisConstants.DICT_DATA_KEY);
+        if (ObjectUtils.isEmpty(datas)) {//���������������������
+            datas = getDictDataFromDB();
+            //������������
+            redisTemplate.opsForValue().set(RedisConstants.DICT_DATA_KEY, datas);
+        }
+        return datas;
+    }
+
+
+    @Override
+    public Map<String, SysDictData> getDictDatasByType(String type) {
+        Map<String, List<SysDictData>> allDictData = getAllDictData();
+        List<SysDictData> sysDictDatas = allDictData.get(type);
+        Map<String, SysDictData> result = new HashMap<>();
+        for (SysDictData sysDictData : sysDictDatas) {
+            result.put(sysDictData.getDataKey(), sysDictData);
+        }
+        return result;
+    }
+
+    @Override
+    public void refreshCache() {
+        redisTemplate.delete(RedisConstants.DICT_DATA_KEY);
+        Map<String, List<SysDictData>> datas = getDictDataFromDB();
+        redisTemplate.opsForValue().set(RedisConstants.DICT_DATA_KEY, datas);
+    }
+
+
+    /**
+     * @Description: ������������������������������������������������������������Map  Key��������������� value���������������
+     * @Param: []
+     * @return: java.util.Map<java.lang.String                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               java.util.List                                                                                                                                                                                                                                               <               com.moral.api.entity.sysDictData>>
+     * @Author: ���������
+     * @Date: 2021/4/14
+     */
+    private Map<String, List<SysDictData>> getDictDataFromDB() {
+        Map<String, List<SysDictData>> result = new HashMap<>();
+        List<SysDictType> types = sysDictTypeService.getAllDictType();
+        for (SysDictType type : types) {
+            QueryWrapper<SysDictData> wrapper = new QueryWrapper<>();
+            wrapper.eq("is_delete", Constants.NOT_DELETE);
+            wrapper.eq("dict_type_id", type.getId());
+            List<SysDictData> datas = sysDictDataMapper.selectList(wrapper);
+            result.put(type.getName(), datas);
+        }
+        return result;
+    }
 }
+

--
Gitblit v1.8.0