package io.sdb.service.impl;

import com.jfinal.plugin.activerecord.Db;
import io.sdb.common.annotation.JFinalTx;
import io.sdb.dao.SysRoleMenuDao;
import io.sdb.model.SysRoleMenu;
import io.sdb.service.SysRoleMenuService;
import org.springframework.stereotype.Service;

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


/**
 * 角色与菜单对应关系
 * 
 * @author chenshun
 * @email [email protected]
 * @date 2016年9月18日 上午9:44:35
 */
@Service("sysRoleMenuService")
public class SysRoleMenuServiceImpl extends BaseServiceImpl<SysRoleMenuDao, SysRoleMenu> implements SysRoleMenuService {

	@Override
	@JFinalTx
	public void saveOrUpdate(Long roleId, List<Long> menuIdList) {
		//先删除角色与菜单关系
		deleteBatch(new Long[]{roleId});

		if(menuIdList.size() == 0){
			return ;
		}

		//保存角色与菜单关系
		List<SysRoleMenu> list = new ArrayList<>(menuIdList.size());
		for(Long menuId : menuIdList){
			SysRoleMenu sysRoleMenu = new SysRoleMenu();
			sysRoleMenu.setMenuId(menuId);
			sysRoleMenu.setRoleId(roleId);

			list.add(sysRoleMenu);
		}

		Db.batchSave(list, list.size());
	}

	@Override
	public List<Long> queryMenuIdList(Long roleId) {
		SysRoleMenu sysRoleMenu = new SysRoleMenu();
		sysRoleMenu.setRoleId(roleId);
		List<SysRoleMenu> sysRoleMenuList = this.dao.findByModel(sysRoleMenu);
		List<Long> menuIdList = sysRoleMenuList.stream().map(item -> {
			return item.getMenuId();
		}).collect(Collectors.toList());
		return menuIdList;
	}

	@Override
	public boolean deleteBatch(Long[] roleIds){
		return this.dao.deleteBatch(new String[]{"role_id"}, roleIds);
	}

}