package com.starry.admin.modules.system.service.impl;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.starry.admin.common.exception.CustomException;
import com.starry.admin.modules.system.mapper.SysTenantPackageMapper;
import com.starry.admin.modules.system.module.entity.SysTenantPackageEntity;
import com.starry.admin.modules.system.service.ISysTenantPackageService;
import com.starry.admin.modules.system.service.ISysTenantService;
import com.starry.admin.modules.system.vo.SimplePackage;
import com.starry.admin.modules.system.vo.SysTenantPackageVo;
import com.starry.common.utils.IdUtils;
import java.util.Arrays;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;

/**
 * 租户套餐表Service业务层处理
 *
 * @author admin
 */
@Service
public class SysTenantPackageServiceImpl extends ServiceImpl<SysTenantPackageMapper, SysTenantPackageEntity>
        implements
            ISysTenantPackageService {
    @Resource
    private SysTenantPackageMapper sysTenantPackageMapper;

    @Resource
    private ISysTenantService tenantService;

    /**
     * 查询租户套餐表
     *
     * @param packageId
     *            租户套餐表主键
     * @return 租户套餐表
     */
    @Override
    public SysTenantPackageEntity selectSysTenantPackageByPackageId(String packageId) {
        return this.baseMapper.selectById(packageId);
    }

    /**
     * 查询租户套餐表列表
     *
     * @param sysTenantPackageEntity
     *            租户套餐表
     * @return 租户套餐表
     */
    @Override
    public IPage<SysTenantPackageEntity> selectSysTenantPackageList(SysTenantPackageVo sysTenantPackageEntity) {
        return sysTenantPackageMapper.selectSysTenantPackageList(
                new Page<>(sysTenantPackageEntity.getPageNum(), sysTenantPackageEntity.getPageSize()),
                sysTenantPackageEntity);
    }

    /**
     * 新增租户套餐表
     *
     * @param entity
     *            租户套餐表
     * @return 结果
     */
    @Override
    public boolean create(SysTenantPackageEntity entity) {
        if (StrUtil.isBlankIfStr(entity.getPackageId())) {
            entity.setPackageId(IdUtils.getUuid());
        }
        return save(entity);
    }

    /**
     * 修改租户套餐表
     *
     * @param sysTenantPackageEntity
     *            租户套餐表
     * @return 结果
     */
    @Override
    public boolean update(SysTenantPackageEntity sysTenantPackageEntity) {
        return updateById(sysTenantPackageEntity);
    }

    /**
     * 批量删除租户套餐表
     *
     * @param packageIds
     *            需要删除的租户套餐表主键
     * @return 结果
     */
    @Override
    public int deleteSysTenantPackageByPackageIds(String[] packageIds) {
        // 删除前，看套餐是否被租户引用
        for (String packageId : packageIds) {
            if (!tenantService.queryByPackage(packageId).isEmpty()) {
                throw new CustomException("套餐背应用,无法删除");
            }
        }
        return sysTenantPackageMapper.deleteBatchIds(Arrays.asList(packageIds));
    }

    /**
     * 删除租户套餐表信息
     *
     * @param packageId
     *            租户套餐表主键
     * @return 结果
     */
    @Override
    public int deleteSysTenantPackageByPackageId(Long packageId) {
        return sysTenantPackageMapper.deleteById(packageId);
    }

    @Override
    public List<SimplePackage> getSimpleList() {
        return sysTenantPackageMapper.getSimpleList();
    }

}
