ValidConfigNewServiceImpl.java 5.85 KB
package cn.fw.dalaran.service.data.impl;

import cn.fw.dalaran.dao.ValidConfigNewDao;
import cn.fw.dalaran.domain.db.config.ValidConfigNew;
import cn.fw.dalaran.domain.enums.BizTypeEnum;
import cn.fw.dalaran.domain.enums.ValidLiveEnum;
import cn.fw.dalaran.domain.enums.ValidVideoEnum;
import cn.fw.dalaran.domain.vo.ValidConfigNewVo;
import cn.fw.dalaran.service.data.ValidConfigNewService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

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


/**
 * @author wmy3969
 * @version 1.0
 * @date 2022-02-15 12:37:25
 * @Description
 */
@Service("validConfigNewService")
@RequiredArgsConstructor
public class ValidConfigNewServiceImpl extends ServiceImpl<ValidConfigNewDao, ValidConfigNew> implements ValidConfigNewService {

    private final ApplicationEventPublisher publisher;

    /**
     * 更新配置
     *
     * @param details 新的配置列表参数
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean updateConfig(List<ValidConfigNewVo.singleVo> details) {
        details.forEach(item -> this.updateById(ValidConfigNewVo.toDB(item)));
        publisher.publishEvent("validConfigAlertEvent#" + details.get(0).getConfigGroupId());
        return true;
    }

    /**
     * 查询集团直播/短视频配置
     *
     * @param configGroupId 所属配置组id
     * @param type          类型id
     * @return
     */
    @Override
    public ValidConfigNewVo queryList(Long configGroupId, Integer type) {
        List<ValidConfigNew> list;
        list = this.lambdaQuery()
                .eq(ValidConfigNew::getConfigGroupId, configGroupId)
                .eq(ValidConfigNew::getType, type)
                .list();// 获取数据库中的配置列表
        if (Objects.equals(BizTypeEnum.VIDEO.getValue(), type)) {
            final int videoConfigLength = ValidVideoEnum.values().length;// 获取枚举中规定的视频指标项目
            if (list.size() != videoConfigLength) {
                list = this.initVideoConfigList(configGroupId);
            }
        } else if (Objects.equals(BizTypeEnum.LIVE.getValue(), type)) {
            final int liveConfigLength = ValidLiveEnum.values().length;// 获取枚举中规定的直播指标项目
            if (list.size() != liveConfigLength) {
                list = this.initLiveConfigList(configGroupId);
            }
        } else if (Objects.equals(3, type)) {
            if (list.size() != 1) {
                list.add(ValidConfigNew.createConfig(-1, configGroupId, type, -1));
                this.saveBatch(list);
            }
        }
        return ValidConfigNew.toVO(list);
    }

    /**
     * 根据枚举初始化视频最低标准配置
     *
     * @param configGroupId 所属配置组id
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public List<ValidConfigNew> initVideoConfigList(Long configGroupId) {
        final List<ValidConfigNew> list = this.lambdaQuery()
                .eq(ValidConfigNew::getConfigGroupId, configGroupId)
                .eq(ValidConfigNew::getType, BizTypeEnum.VIDEO.getValue())
                .list();// 获取原来配置
        this.removeByIds(list.stream()
                .map(ValidConfigNew::getId)
                .collect(Collectors.toList()));// 删除原来配置
        final List<ValidConfigNew> collect = Arrays.stream(ValidVideoEnum.values())
                .map(item -> {
                    Integer minValue = 0;
                    List<ValidConfigNew> collect1 = list.stream()
                            .filter(item1 -> Objects.equals(item.getValue(), item1.getIndexType()))
                            .collect(Collectors.toList());
                    if (collect1.size() > 0) {
                        minValue = collect1.get(0).getMinValue();
                    }
                    return ValidConfigNew.createConfig(item.getValue(), configGroupId, BizTypeEnum.VIDEO.getValue(), minValue);
                })
                .collect(Collectors.toList());
        this.saveBatch(collect);
        return collect;
    }

    /**
     * 根据枚举初始化视频最低标准配置
     *
     * @param configGroupId 所属配置组id
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public List<ValidConfigNew> initLiveConfigList(Long configGroupId) {
        final List<ValidConfigNew> list = this.lambdaQuery()
                .eq(ValidConfigNew::getConfigGroupId, configGroupId)
                .eq(ValidConfigNew::getType, BizTypeEnum.LIVE.getValue())
                .list();// 获取原来配置
        this.removeByIds(list.stream()
                .map(ValidConfigNew::getId)
                .collect(Collectors.toList()));// 删除原来配置
        final List<ValidConfigNew> collect = Arrays.stream(ValidLiveEnum.values())
                .map(item -> {
                    Integer minValue = 0;
                    if (Objects.equals(item.getValue(), -1))// 付费推广判定倍率(默认为1倍)
                        minValue = 1;
                    List<ValidConfigNew> collect1 = list.stream()
                            .filter(item1 -> Objects.equals(item.getValue(), item1.getIndexType()))
                            .collect(Collectors.toList());
                    if (collect1.size() > 0) {
                        minValue = collect1.get(0).getMinValue();
                    }
                    return ValidConfigNew.createConfig(item.getValue(), configGroupId, BizTypeEnum.LIVE.getValue(), minValue);
                })
                .collect(Collectors.toList());
        this.saveBatch(collect);
        return collect;
    }
}