EmailConfigServiceImpl.java 4.43 KB
package com.ruoyi.email.service.impl;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

import cn.hutool.core.collection.CollectionUtil;
import org.apache.tomcat.util.buf.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.email.mapper.EmailConfigMapper;
import com.ruoyi.email.domain.EmailConfig;
import com.ruoyi.email.service.IEmailConfigService;

/**
 * 邮箱配置Service业务层处理
 *
 * @author guzijian
 * @date 2023-08-24
 */
@Service
public class EmailConfigServiceImpl implements IEmailConfigService {

    private static final Logger log = LoggerFactory.getLogger(EmailConfigServiceImpl.class);
    @Autowired
    private EmailConfigMapper emailConfigMapper;

    /**
     * 查询邮箱配置
     *
     * @param id 邮箱配置主键
     * @return 邮箱配置
     */
    @Override
    public EmailConfig selectEmailConfigById(Long id) {
        return emailConfigMapper.selectEmailConfigById(id);
    }

    /**
     * 查询邮箱配置列表
     *
     * @param emailConfig 邮箱配置
     * @return 邮箱配置
     */
    @Override
    public List<EmailConfig> selectEmailConfigList(EmailConfig emailConfig) {
        return emailConfigMapper.selectEmailConfigList(emailConfig);
    }

    /**
     * 新增邮箱配置
     *
     * @param emailConfig 邮箱配置
     * @return 结果
     */
    @Override
    public int insertEmailConfig(EmailConfig emailConfig) {
        if (!emailConfig.getType().equals(2)) {
            throw new RuntimeException("新增邮件只能设置为未启用!");
        }
        return emailConfigMapper.insertEmailConfig(emailConfig);
    }

    /**
     * 修改邮箱配置
     *
     * @param emailConfig 邮箱配置
     * @return 结果
     */
    @Override
    public int updateEmailConfig(EmailConfig emailConfig) {
        // 类型为收件人
        try {
            if (emailConfig.getType().equals(0)) {
                List<String> ids = handlerEmail(emailConfig);
                updateEmailConfigByEmails(ids, emailConfig);
            } else {
                EmailConfig config = emailConfigMapper.selectEmailConfigById(emailConfig.getId());
                if (config.getType().equals(0)) {
                    List<String> ids = handlerEmail(config);
                    resetEmailConfigByEmails(ids, emailConfig);
                } else {
                    emailConfig.setType(config.getType());
                    emailConfigMapper.updateEmailConfig(emailConfig);
                }
            }
            return 1;
        } catch (Exception e) {
            log.error(e.getMessage());
            return 0;
        }
    }

    private void resetEmailConfigByEmails(List<String> ids, EmailConfig config) {
        emailConfigMapper.resetEmailConfigByEmails(ids, config);
    }

    private void updateEmailConfigByEmails(List<String> ids, EmailConfig emailConfig) {
        emailConfigMapper.updateEmailConfigByEmails(ids, emailConfig);
    }

    private List<String> handlerEmail(EmailConfig emailConfig) {
        if (emailConfig.getParentId() != null) {
            List<String> ids = Arrays.stream(emailConfig.getParentId().split(",")).distinct().collect(Collectors.toList());
            emailConfig.setParentId(StringUtils.join(ids));
            return ids;
        }
        return null;
    }

    /**
     * 批量删除邮箱配置
     *
     * @param ids 需要删除的邮箱配置主键
     * @return 结果
     */
    @Override
    public int deleteEmailConfigByIds(Long[] ids) {
        throw new RuntimeException("禁止批量删除!!!!");
    }

    /**
     * 删除邮箱配置信息
     *
     * @param id 邮箱配置主键
     * @return 结果
     */
    @Override
    public int deleteEmailConfigById(Long id) {
        EmailConfig emailConfig = selectEmailConfigById(id);
        if (!emailConfig.getType().equals(2)) {
            throw new RuntimeException("除了未启用不允许被删除");
        }
        return emailConfigMapper.deleteEmailConfigById(id);
    }

    @Override
    public List<EmailConfig> selectRecipientsEmailConfigList() {
        return emailConfigMapper.selectRecipientsEmailConfigList();
    }

    @Override
    public List<EmailConfig> selectEmailConfigListByIds(List<Long> ids) {
        return emailConfigMapper.selectEmailConfigListByIds(ids);
    }
}