/**
 * 版权所有 ©2019 莱欧软件有限公司
 * 工程名：SpringMvcLion
 * 文件名：LoginDao.java
 * 创建日期：2019年2月26日 下午2:33:52
 * 作者：dlm
 */
package com.lion.dao;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import com.lion.util.AuthorizeCheck;
import com.lion.util.TimeUtil;

/**
 * 类描述
 * @author dlm
 * @since 2019年2月26日
 */
@Repository
public class LoginDao {
	@Autowired
	private JdbcTemplate jdbc;
	
	/**
	 * 方法描述  根据角色id获取资源
	 * @author dlm
	 * @since 2019年2月27日
	 * @param roleId
	 * @return	
	 */
	public List<Map<String,Object>> getResourcesByRoleId(String roleId){
		StringBuffer sql = new StringBuffer("select id,name text,level,ifnull(url,'') url,icon,pid,ordnum,ifnull(bz,'') bz,openType from resources r");
		if(!roleId.equals("0")){//超级管理员
			sql.append(" inner join role_resources rr on r.id=rr.resourceid where rr.roleid="+roleId);
		}
		sql.append(" order by r.level,r.ordnum ");
		return jdbc.queryForList(sql.toString());
	}
	public List<Map<String,Object>> getResourcesByRoleId(String roleId,int level){
		StringBuffer sql = new StringBuffer("select id,name text,level,ifnull(url,'') url,icon,pid,ordnum,ifnull(bz,'') bz,openType from resources r");
		if(!roleId.equals("0")){//超级管理员
			sql.append(" inner join role_resources rr on r.id=rr.resourceid where rr.roleid="+roleId);
		}
		sql.append(" order by r.ordnum ");
		return jdbc.queryForList(sql.toString());
	}
	
	
	public List<Map<String,Object>> getResourcesByRoleId(){
		StringBuffer sql = new StringBuffer("select id,name text,level,ifnull(url,'') url,icon,pid,ordnum,ifnull(bz,'') bz,openType from resources r where r.level !='2' ");
		
		sql.append(" order by r.ordnum ");
		return jdbc.queryForList(sql.toString());
	}
	/**
	 * 
	 * 方法描述  通过菜单id以及角色id查询菜单
	 * @author mt.W
	 * @since 2020年1月10日
	 * @param roleId
	 * @param id
	 * @return
	 */
	public List<Map<String,Object>> getResourcesByResorceId(String roleId,String id){
		StringBuffer sql = new StringBuffer("select id,name text,level,ifnull(url,'') url,icon,pid,ordnum,openType from resources r ");
		if(roleId.equals("0")){//超级管理员
			sql.append(" where r.id='"+id+"'");
		}else{
			sql.append(" inner join role_resources rr on r.id=rr.resourceid where r.id='"+id+"' and rr.roleid="+roleId);
		}
		sql.append(" order by r.ordnum ");
		return jdbc.queryForList(sql.toString());
	}
	/**
	 * 方法描述  获取子级资源：资源少可以这样查询，数据量大时需要一次查出，然后从缓存中便利查找
	 * @author dlm
	 * @since 2019年2月27日
	 * @param resourceId
	 * @return	
	 */
	public List<Map<String,Object>> getChildResources(String resourceId,String roleId){
		StringBuffer sql = new StringBuffer("select id,name text,level,ifnull(url,'') url,icon,pid,ordnum,ifnull(bz,'') bz,openType from resources r");
		StringBuffer content = new StringBuffer(" where r.pid="+resourceId);
		if(!roleId.equals("0")){
			sql.append(" inner join role_resources rr on r.id=rr.resourceid ");
			content.append(" and rr.roleid="+roleId);
		}
		content.append(" order by r.ordnum");
		sql.append(content);
		return jdbc.queryForList(sql.toString());
	}
	/**
	 * 
	 * 方法描述  管理员密码修改
	 * @author mt.W
	 * @since 2019年8月7日
	 * @param password
	 * @param id
	 * @return
	 */
	public int updateManagerPassword(String password,String id){
		StringBuffer sql = new StringBuffer("update org_user set pwd =? where id =?");
		return jdbc.update(sql.toString(),new Object[]{AuthorizeCheck.encryptPassword(password),id});
	}
	public void updateLoginStatus(String userId){
		String sql="update sys_login set status='0' where userid=?";
		jdbc.update(sql,new Object[]{userId});
	}
	public void deleteLoginStatus(String userId){
		String sql="delete from sys_login where userid=? and logintime < ?";
		jdbc.update(sql,new Object[]{userId,TimeUtil.getNowTimeNYR()});
	}
	public void deleteLoginStatusByCookie(String cookie){
		String sql="delete from sys_login where cookie=? and logintime < ?";
		jdbc.update(sql,new Object[]{cookie,TimeUtil.getNowTimeNYR()});
	}
	public List<Map<String,Object>> checkLoginStatus(String Token){
		String sql="select userid,logintime from sys_login where cookie=? ";
		return jdbc.queryForList(sql,new Object[]{Token});
	}
}
