package com.fs.company.service.impl;

import com.fs.common.core.redis.RedisCache;
import com.fs.common.core.text.Convert;
import com.fs.common.utils.DateUtils;
import com.fs.common.utils.StringUtils;
import com.fs.company.domain.CompanyConfig;
import com.fs.company.mapper.CompanyConfigMapper;
import com.fs.company.service.ICompanyConfigService;
import com.fs.system.domain.SysConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

import static com.fs.common.utils.DictUtils.getCacheKey;

/**
 * 参数配置Service业务层处理
 *
 * @author fs
 * @date 2021-05-25
 */
@Service
public class CompanyConfigServiceImpl implements ICompanyConfigService
{
    @Autowired
    private RedisCache redisCache;
    @Autowired
    private CompanyConfigMapper companyConfigMapper;

    /**
     * 查询参数配置
     *
     * @param configId 参数配置ID
     * @return 参数配置
     */
    @Override
    public CompanyConfig selectCompanyConfigById(Integer configId)
    {
        return companyConfigMapper.selectCompanyConfigById(configId);
    }

    /**
     * 查询参数配置列表
     *
     * @param companyConfig 参数配置
     * @return 参数配置
     */
    @Override
    public List<CompanyConfig> selectCompanyConfigList(CompanyConfig companyConfig)
    {
        return companyConfigMapper.selectCompanyConfigList(companyConfig);
    }

    /**
     * 新增参数配置
     *
     * @param companyConfig 参数配置
     * @return 结果
     */
    @Override
    public int insertCompanyConfig(CompanyConfig companyConfig)
    {
        companyConfig.setCreateTime(DateUtils.getNowDate());
        return companyConfigMapper.insertCompanyConfig(companyConfig);
    }

    /**
     * 修改参数配置
     *
     * @param companyConfig 参数配置
     * @return 结果
     */
    @Override
    public int updateCompanyConfig(CompanyConfig companyConfig)
    {
        companyConfig.setUpdateTime(DateUtils.getNowDate());
        return companyConfigMapper.updateCompanyConfig(companyConfig);
    }

    /**
     * 批量删除参数配置
     *
     * @param configIds 需要删除的参数配置ID
     * @return 结果
     */
    @Override
    public int deleteCompanyConfigByIds(Integer[] configIds)
    {
        return companyConfigMapper.deleteCompanyConfigByIds(configIds);
    }

    /**
     * 删除参数配置信息
     *
     * @param configId 参数配置ID
     * @return 结果
     */
    @Override
    public int deleteCompanyConfigById(Integer configId)
    {
        return companyConfigMapper.deleteCompanyConfigById(configId);
    }

    @Override
    public CompanyConfig selectCompanyConfigByKey(Long companyId, String key) {
        return companyConfigMapper.selectCompanyConfigByKey(companyId,key);
    }

    @Override
    public String selectCompanyConfigByKey(String key) {
        return companyConfigMapper.selectConfigByKey(key);
    }

    @Override
    public String selectConfigByKey(String configKey) {
        String configValue = Convert.toStr(redisCache.getCacheObject(getCacheKey(configKey)));
        if (StringUtils.isNotEmpty(configValue))
        {
            return configValue;
        }
        SysConfig retConfig = companyConfigMapper.selectConfig(configKey);
        if (StringUtils.isNotNull(retConfig))
        {
            redisCache.setCacheObject(getCacheKey(configKey), retConfig.getConfigValue());
            return retConfig.getConfigValue();
        }
        return StringUtils.EMPTY;
    }

    @Override
    public CompanyConfig selectCompanyConfigByServerKey(String key) {
        return companyConfigMapper.selectCompanyConfigByServerKey(key);
    }
}
