SysDictDataServiceImpl.java 6.97 KB
package com.ruoyi.system.service.impl;

import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.utils.DictUtils;
import com.ruoyi.system.mapper.SysDictDataMapper;
import com.ruoyi.system.service.ISysDictDataService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.Collection;
import java.util.List;
import java.util.Objects;

/**
 * 字典 业务层处理
 *
 * @author ruoyi
 */
@Service
public class SysDictDataServiceImpl extends ServiceImpl<SysDictDataMapper, SysDictData> implements ISysDictDataService {
    @Autowired
    private SysDictDataMapper dictDataMapper;
    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    private static final Logger LOGGER = LoggerFactory.getLogger(SysDictDataServiceImpl.class);

    /**
     * 根据条件分页查询字典数据
     *
     * @param dictData 字典数据信息
     * @return 字典数据集合信息
     */
    @Override
    public List<SysDictData> selectDictDataList(SysDictData dictData) {
        return dictDataMapper.selectDictDataList(dictData);
    }

    @Override
    public List<SysDictData> queryDictDateList(SysDictData dictData) {
        LambdaQueryWrapper<SysDictData> wrapper = new LambdaQueryWrapper<>(dictData);
        return list(wrapper);
    }

    @Override
    public List<SysDictData> queryDictDateList(SysDictData dictData, Collection<String> types) {
        LambdaQueryWrapper<SysDictData> wrapper = new LambdaQueryWrapper<>(dictData);
        if (CollectionUtils.isNotEmpty(types)) {
            wrapper.in(SysDictData::getDictType, types);
        }
        return list(wrapper);
    }

    @Override
    public SysDictData getOne(SysDictData sysDictData) {
        LambdaQueryWrapper<SysDictData> wrapper = new LambdaQueryWrapper<>(sysDictData);
        return getOne(wrapper);
    }

    @Override
    public SysDictData getResourceBaseUrl() {
        List<SysDictData> sysDictDatas = getDataOfRedis("resource_base_url");
        if (CollectionUtils.isEmpty(sysDictDatas)) {
            SysDictData source = new SysDictData();
            source.setDictType("resource_base_url");
            sysDictDatas = queryDictDateList(source);
        }


        String url1 = "";
        String flag1 = null;

        if (CollectionUtils.isNotEmpty(sysDictDatas)) {
            for (SysDictData s : sysDictDatas) {
                if (Objects.equals(s.getDiscKey(), "resource_base_url")) {
                    url1 = s.getDictValueStr();
                    continue;
                }

                if (org.apache.commons.lang3.StringUtils.equals(s.getDiscKey(), "resource_base_url_flag")) {
                    flag1 = s.getDictValueStr();
                    continue;
                }
            }
        }

        SysDictData target = new SysDictData();
        target.setDictValue(url1);
        target.setStatus(flag1);

        return target;
    }

    public List<SysDictData> getDataOfRedis(String dicType) {
        try {
            String key = StringUtils.join("sys_dict:", dicType);
            String json = redisTemplate.opsForValue().get(key);
            return JSON.parseArray(json, SysDictData.class);
        } catch (Exception e) {
            LOGGER.info("从redis中获取数据异常:[{}]", dicType, e);
        }
        return null;
    }


    @Override
    public String combationValue(String url, SysDictData dictData) {
        if (Objects.isNull(dictData) || StringUtils.isEmpty(url)) {
            return url;
        }

        if (dictData.isCombationVal()) {
            String fil = "/";

            if (org.apache.commons.lang3.StringUtils.startsWith(url, "/") || org.apache.commons.lang3.StringUtils.startsWith(url, "\\")) {
                fil = "";
            } else if (org.apache.commons.lang3.StringUtils.endsWith(dictData.getDictValueStr(), "/")) {
                fil = "";
            }
            return org.apache.commons.lang3.StringUtils.join(dictData.getDictValueStr(), fil, url);
        }
        return url;
    }

    @Override
    public String combationValue(String url) {
        SysDictData source = getResourceBaseUrl();
        return combationValue(url, source);
    }

    @Override
    public String splitURL(String url) {
        if (StringUtils.isEmpty(url)) {
            return url;
        }

        SysDictData sysDictData = getResourceBaseUrl();
        if (Objects.nonNull(sysDictData) && StringUtils.isNotEmpty(sysDictData.getDictValueStr())) {
            return StringUtils.substringAfter(url, sysDictData.getDictValueStr());
        }
        return url;
    }

    /**
     * 根据字典类型和字典键值查询字典数据信息
     *
     * @param dictType  字典类型
     * @param dictValue 字典键值
     * @return 字典标签
     */
    @Override
    public String selectDictLabel(String dictType, String dictValue) {
        return dictDataMapper.selectDictLabel(dictType, dictValue);
    }

    /**
     * 根据字典数据ID查询信息
     *
     * @param dictCode 字典数据ID
     * @return 字典数据
     */
    @Override
    public SysDictData selectDictDataById(Long dictCode) {
        return dictDataMapper.selectDictDataById(dictCode);
    }

    /**
     * 批量删除字典数据信息
     *
     * @param dictCodes 需要删除的字典数据ID
     */
    @Override
    public void deleteDictDataByIds(Long[] dictCodes) {
        for (Long dictCode : dictCodes) {
            SysDictData data = selectDictDataById(dictCode);
            dictDataMapper.deleteDictDataById(dictCode);
            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
            DictUtils.setDictCache(data.getDictType(), dictDatas);
        }
    }

    /**
     * 新增保存字典数据信息
     *
     * @param data 字典数据信息
     * @return 结果
     */
    @Override
    public int insertDictData(SysDictData data) {
        int row = dictDataMapper.insertDictData(data);
        if (row > 0) {
            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
            DictUtils.setDictCache(data.getDictType(), dictDatas);
        }
        return row;
    }

    /**
     * 修改保存字典数据信息
     *
     * @param data 字典数据信息
     * @return 结果
     */
    @Override
    public int updateDictData(SysDictData data) {
        int row = dictDataMapper.updateDictData(data);
        if (row > 0) {
            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
            DictUtils.setDictCache(data.getDictType(), dictDatas);
        }
        return row;
    }
}