/**
 * Copyright (c) 2018 人人开源 All rights reserved.
 * 
 * https://www.renren.io
 * 
 * 版权所有,侵权必究!
 */
package com.zt.modules.sys.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zt.common.constant.Constant;
import com.zt.common.db.query.QueryFilter;
import com.zt.common.exception.ErrorCode;
import com.zt.common.exception.RenException;
import com.zt.common.service.BaseService;
import com.zt.core.context.UserContext;
import com.zt.core.sys.model.SysDept;
import com.zt.core.sys.model.SysUser;
import com.zt.modules.sys.dao.SysRoleDao;
import com.zt.modules.sys.dto.UserDto;
import com.zt.modules.sys.model.SysMenu;
import com.zt.modules.sys.model.SysRole;
import com.zt.modules.sys.model.SysRoleMenu;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.zt.modules.sys.service.SysMenuService;
import java.util.List;
import java.util.stream.Collectors;
/**
 * 角色
 *
 * @author hehz
 */
@Service
public class SysRoleService extends BaseService {
    @Autowired
    private SysRoleMenuService sysRoleMenuService;
    @Autowired
    private SysRoleUserService sysRoleUserService;
    @Autowired
    private SysRoleDataScopeService sysRoleDataScopeService;
    @Autowired
    private SysDeptService sysDeptService;
    @Autowired
    private SysMenuService sysMenuService;
    public List page(QueryFilter queryFilter) {
        // 只查自己所属租户下的
        QueryWrapper queryWrapper = queryFilter.getWrapper();
        queryWrapper.eq("tenant_id", UserContext.getUser().getTenantId());
        queryWrapper.eq("type", Constant.RoleType.NORMAL);
        return super.query(queryFilter);
    }
    public List list(Long companyId) {
        QueryFilter queryFilter = new QueryFilter();
        QueryWrapper queryWrapper = queryFilter.getWrapper();
        queryWrapper.eq("company_id", companyId);
        queryWrapper.eq("type", Constant.RoleType.NORMAL);
        return super.query(queryFilter);
    }
    /**
     * 查询sysRole,条件是companyId下的role和其父级部门里面的全部roles
     * @param companyId
     * @return
     */
    public List listWithParents(final Long companyId) {
        QueryFilter queryFilter = new QueryFilter();
        QueryWrapper queryWrapper = queryFilter.getWrapper();
        queryWrapper.eq(Constant.TableColumn.IS_DELETE, Constant.Bool.NO);
        queryWrapper.ne("type","1");
        List allList=baseDao.selectList(queryWrapper);
/*
        SysDept company=sysDeptService.get(companyId);
        List sysRoles=allList.stream().filter(sysRole -> {
            if(sysRole.getCompanyId().equals(companyId)){
                return true;
            }else{
                if(company.getPids()!=null){
                    String[] pids=company.getPids().split(",");
                    for(String pid:pids){
                        if(sysRole.getCompanyId().equals(new Long(pid))){
                            return true;
                        }
                    }
                }
            }
            return false;
        }).collect(Collectors.toList());
*/
        return allList;
    }
    public  List getRoleUsers(Long roleID){
        return  sysRoleUserService.getRoleUsers(roleID);
    }
    @Transactional(rollbackFor = Exception.class)
    public void insert(SysRole entity) {
        if (entity.getType() == 0) {
            entity.setType(Constant.RoleType.NORMAL);
        }
        if (entity.getCompanyId() == null || entity.getCompanyId() == 0) {
            throw new RenException(ErrorCode.PARAMS_GET_ERROR);
        }
        // 保存角色
        super.insert(entity);
/*        List allList = sysMenuService.getAllList();
        for(SysMenu sysMenu:allList){
            SysRoleMenu sysRoleMenu = new SysRoleMenu();
            sysRoleMenu.setMenuId(sysMenu.getId());
            sysRoleMenu.setRoleId(entity.getId());
            sysRoleMenu.setDelete(true);
            sysRoleMenuService.insert(sysRoleMenu);
        }*/
    }
    @Transactional(rollbackFor = Exception.class)
    public void update(SysRole entity) {
        // 更新角色
        super.update(entity);
        // 更新角色数据权限关系
        // sysRoleDataScopeService.saveOrUpdate(entity.getId(),
        // entity.getDeptIdList());
    }
    @Transactional(rollbackFor = Exception.class)
    public void delete(Long[] ids) {
        // 删除角色
        this.deleteLogic(ids);
        // 删除角色用户关系
        sysRoleUserService.deleteByRoleIds(ids);
        // 删除角色菜单关系
        sysRoleMenuService.deleteByRoleIds(ids);
        // 删除角色数据权限关系
        sysRoleDataScopeService.deleteByRoleIds(ids);
    }
    public List getByIds(List roleIds) {
        return baseDao.selectList(new QueryWrapper().lambda().in(SysRole::getId, roleIds));
    }
    public List getAllList() {
        List roleList = baseDao.selectList(new QueryWrapper().eq(Constant.TableColumn.IS_DELETE,
                Constant.Bool.NO).orderByAsc(Constant.TableColumn.SORT));
        return roleList;
    }
}