package com.ruoyi.business.service.impl;

import com.ruoyi.business.domain.HwTenant;
import com.ruoyi.business.mapper.HwTenantMapper;
import com.ruoyi.business.service.IHwTenantService;
import com.ruoyi.common.core.constant.HwDictConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.datascope.annotation.DataScope;
import com.ruoyi.system.api.RemoteUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * 租户信息Service业务层处理
 *
 * @author xins
 * @date 2023-09-04
 */
@Service
public class HwTenantServiceImpl implements IHwTenantService {
    @Autowired
    private HwTenantMapper hwTenantMapper;

    @Resource
    private RemoteUserService remoteUserService;

    /**
     * 查询租户信息
     *
     * @param tenantId 租户信息主键
     * @return 租户信息
     */
    @Override
    public HwTenant selectHwTenantByTenantId(Long tenantId) {
        return hwTenantMapper.selectHwTenantByTenantId(tenantId);
    }

    /**
     * 查询租户信息列表
     *
     * @param hwTenant 租户信息
     * @return 租户信息
     */
    @Override
    @DataScope(tenantAlias = "ht")
    public List<HwTenant> selectHwTenantList(HwTenant hwTenant) {
        hwTenant.setTenantStatus(HwDictConstants.TENANT_STATUS_NORMAL);
        return hwTenantMapper.selectHwTenantList(hwTenant);
    }

    /**
     * 新增租户信息
     *
     * @param hwTenant 租户信息
     * @return 结果
     */
    @Override
    public int insertHwTenant(HwTenant hwTenant) {
        hwTenant.setCreateTime(DateUtils.getNowDate());
        return hwTenantMapper.insertHwTenant(hwTenant);
    }

    /**
     * 修改租户信息
     *
     * @param hwTenant 租户信息
     * @return 结果
     */
    @Override
    public int updateHwTenant(HwTenant hwTenant) {
        hwTenant.setUpdateTime(DateUtils.getNowDate());
        return hwTenantMapper.updateHwTenant(hwTenant);
    }

    /**
     * 批量删除租户信息
     *
     * @param tenantIds 需要删除的租户信息主键
     * @return 结果
     */
    @Override
    @Transactional
    public int deleteHwTenantByTenantIds(Long[] tenantIds) {
        for (Long tenantId : tenantIds) {
            if(tenantId.equals(HwDictConstants.ADMINISTRATOR_TENANT_ID)){
                throw new ServiceException("管理租户不能删除");
            }

            R<?> deleteResult = this.remoteUserService.deleteUsersByTenantId(tenantId);
            if (R.FAIL == deleteResult.getCode()) {
                throw new ServiceException(deleteResult.getMsg());
            }

            HwTenant tenant = hwTenantMapper.selectHwTenantByTenantId(tenantId);
            tenant.setTenantStatus(HwDictConstants.TENANT_STATUS_DELETED);
            hwTenantMapper.updateHwTenant(tenant);
        }

        return 1;
    }

    /**
     * 删除租户信息信息
     *
     * @param tenantId 租户信息主键
     * @return 结果
     */
    @Override
    public int deleteHwTenantByTenantId(Long tenantId) {
        return hwTenantMapper.deleteHwTenantByTenantId(tenantId);
    }
}
