MessageBusinessTypeBizService.java 3.56 KB
package cn.fw.hermes.service.biz;

import cn.fw.hermes.common.constant.RedisKey;
import cn.fw.hermes.common.utils.StringUtils;
import cn.fw.hermes.domain.db.MessageBusinessType;
import cn.fw.hermes.service.data.MessageBusinessTypeService;

import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

/**
 * @Author: Chenery
 * @Date: 2021/2/3 11:31
 */
@RequiredArgsConstructor
@Service
@Slf4j
public class MessageBusinessTypeBizService {
    private final StringRedisTemplate redisTemplate;
    private final MessageBusinessTypeService messageBusinessTypeService;

    /**
     * 添加消息业务类型到数据库
     *
     * @param messageBusinessType 消息业务类型对象
     * @return 添加结果
     */
    public Boolean add(MessageBusinessType messageBusinessType) {
        Boolean result = messageBusinessTypeService.insert(messageBusinessType);
        if (result) {
            this.addTypeToRedis(messageBusinessType.getType());
        }
        return result;

    }

    /**
     * 从数据库中删除消息业务类型
     *
     * @param messageBusinessTypeName 消息业务类型名称
     * @return 删除结果
     */
    public Boolean delete(String messageBusinessTypeName) {
        Boolean result = messageBusinessTypeService.delete(messageBusinessTypeName);
        if (result) {
            this.deleteTypeFromRedis(messageBusinessTypeName);
        }
        return result;
    }


    /**
     * 缓存所有消息业务类型到redis
     *
     * @return 缓存结果
     */
    public Boolean cacheAllTypeToRedis() {
        List<MessageBusinessType> typeList = messageBusinessTypeService
            .queryAllMessageType();
        Map<String, String> map = typeList.stream()
            .collect(Collectors.toMap(MessageBusinessType::getType, (r) -> "1"));
        redisTemplate.opsForHash().putAll(RedisKey.MESSAGE_BUSINESS_TYPE.getCode(), map);
        log.info("缓存消息业务类型到redis操作完成");
        return true;
    }

    /**
     * 删除单个缓存在redis中的消息业务类型值
     *
     * @param key 业务类型名称
     * @return 删除结果
     */
    public Boolean deleteTypeFromRedis(String key) {
        redisTemplate.opsForHash().delete(RedisKey.MESSAGE_BUSINESS_TYPE.getCode(), key);
        return true;
    }

    /**
     * 添加单个消息业务类型值到redis中
     *
     * @param key 业务类型名称
     * @return 添加结果
     */
    public Boolean addTypeToRedis(String key) {
        redisTemplate.opsForHash().put(RedisKey.MESSAGE_BUSINESS_TYPE.getCode(), key, "1");
        return true;
    }

    /**
     * 判断某个业务类型是否存在
     *
     * @param key 业务类型名称
     * @return 是否存在
     */
    public Boolean getTypeFromRedis(String key) {
        String messageType = (String) redisTemplate.opsForHash()
            .get(RedisKey.MESSAGE_BUSINESS_TYPE.getCode(), key);
        return !StringUtils.isEmpty(messageType);
    }

    /**
     * 通过type查询业务类型
     *
     * @param type 类型
     * @return 业务类型
     */
    public Optional<MessageBusinessType> getMessageBusinessType(String type) {
        return Optional.ofNullable(messageBusinessTypeService.getOne(
            Wrappers.<MessageBusinessType>lambdaQuery().eq(MessageBusinessType::getType, type)));
    }


}