/**
 * 版权所有 ©2019 莱欧有限公司
 * 工程名：SpringMvcLion
 * 文件名：UserDao.java
 * 创建日期：2019年3月5日 下午3:05:14
 * 作者：mt.W
 */
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.entity.User;
import com.lion.util.AuthorizeCheck;
import com.lion.util.TimeUtil;

import jodd.util.StringUtil;

/**
 * 类描述 用户
 * @author mt.W
 * @since 2019年3月5日
 */
@Repository
public class UserDao {
	@Autowired
	private JdbcTemplate jdbc;
	/**
	 * 
	 * 方法描述  后台管理系统登录校验，只有拥有登录权限且删除标记不为删除的人员可登录
	 * @author mt.W
	 * @since 2019年11月14日
	 * @param username 手机号
	 * @param password 密码
	 * @return
	 */
	public List<Map<String,Object>> checkUserLogin(String username){
		StringBuffer sb = new StringBuffer();
		sb.append("select u.*,r.name rname from org_user u inner join role r on u.roleid = r.id  where u.userAccount = ? and deleteflag = ?  ");
		return jdbc.queryForList(sb.toString(),new Object[]{username,"1"});
	}
	public List<Map<String,Object>> getUserInfoById(String userid){
		StringBuffer sb = new StringBuffer();
		sb.append("select r.name rolename,u.userAccount from org_user u left join role r on r.id = u.roleid where u.id = ?");
		return jdbc.queryForList(sb.toString(),new Object[]{userid});
	}
	/**
	 * 方法描述	通过orgid查询用户 条件查询用户
	 * @author cpf
	 * @since 2019年7月19日
	 * @param start
	 * @param row
	 * @param phname
	 * @param orgid
	 * @return	   
	 */
	public List<Map<String,Object>> getUser(int start,int row,String phname,String orgid){
		StringBuffer sb = new StringBuffer();
		sb.append("SELECT u.*,o.level,r.name rolename,o.name as oname,concat(ifnull(p.name,''),o.name) areaname ");
		sb.append(" from  org_user u LEFT JOIN orgdept o on u.orgid=o.id");
		sb.append(" left join orgdept p on p.id = o.pid");
		sb.append(" left join role r  on r.id = u.roleid ");
		sb.append(" where u.deleteflag=? and roleid !=?   ");
		if(StringUtil.isNotEmpty(orgid)){
			sb.append(" and o.id like '"+orgid+"%' ");
		}
		if(StringUtil.isNotEmpty(phname)){
			sb.append("and (u.name like '%"+phname+"%' or u.phone like '%"+phname+"%')");
		}
		sb.append("order by u.orgid limit ?,?");
		return jdbc.queryForList(sb.toString(),new Object[]{1,0,start,row});
	}
	/**
	 * 方法描述	通过orgid查询用户总数
	 * @author cpf
	 * @since 2019年7月19日
	 * @param phname
	 * @param orgid
	 * @return	
	 */
	public int getUserCount(String  phname,String  orgid){
		StringBuffer sb = new StringBuffer();
		sb.append(" SELECT count(u.id)  from  org_user u left join orgdept o on o.id = u.orgid  where   u.deleteflag=? and roleid != ?");
		if(StringUtil.isNotEmpty(orgid)){
			sb.append(" and o.id like '"+orgid+"%' ");
		}
		if(StringUtil.isNotEmpty(phname)){
			sb.append("  and (u.name like '%"+phname+"%' or u.phone like '%"+phname+"%')");
		}
		return jdbc.queryForObject(sb.toString(), new Object[]{1,0},Integer.class);
	}
	/**
	 * 
	 * 方法描述   添加人员
	 * @author mt.W
	 * @since 2019年9月28日
	 * @param u
	 * @param userid
	 * @return
	 */
	public int addUser(User u ,String userid){
		String sql=" insert into org_user(name,userAccount,sex,roleid,orgid,adduserid,addtime,phone,pwd,dlqx) values(?,?,?,?,?,?,?,?,?,?) ";
		return jdbc.update(sql,new Object[]{u.getName(),u.getUserAccount(),u.getSex(),u.getRoleid(),u.getOrgid(),userid,TimeUtil.getNowTime(),u.getPhone(),AuthorizeCheck.encryptPassword(u.getPwd()),"1"});
	}
	/**
	 * 
	 * 方法描述  修改人员
	 * @author mt.W
	 * @since 2019年9月28日
	 * @param u
	 * @return
	 */
	public int editUserById(User u){
		String sql = " update org_user set name=?,sex=?,roleid=?,phone=?,userAccount=? where id = ?";
		return jdbc.update(sql,new Object[]{u.getName(),u.getSex(),u.getRoleid(),u.getPhone(),u.getUserAccount(),u.getId()});
	}
	/**
	 * 
	 * 方法描述   更改人员部门id(人员 迁移操作)
	 * @author mt.W
	 * @since 2019年10月30日
	 * @param id 人员ID
	 * @param orgid 部门人员id
	 * @return
	 */
	public int updateUserOrgid(String id,String orgid){
		String sql = "update org_user set orgid = ? where id = ? ";
		return jdbc.update(sql,new Object[]{orgid,id});
	}
	/**
	 * 方法描述		删除人员
	 * @author wcj
	 * @since 2019年11月7日
	 * @param id
	 * @return	
	 */
	public int deleteUser(String id){
		String sql = "update org_user set deleteflag=? where id=?";
		return jdbc.update(sql,new Object[]{0,id});
	}
	/**
	 * 方法描述		查询所有角色
	 * @author wcj
	 * @since 2019年11月7日
	 * @return	
	 */
	public List<Map<String,Object>>	getrole(){
		String sql = "select id,name from role where id != ? ";
		return jdbc.queryForList(sql,new Object[]{0});
	}
	/**
	 * 
	 * 方法描述  修改用户密码
	 * @author mt.W
	 * @since 2020年2月20日
	 * @param id
	 * @param pwd
	 * @return
	 */
	public int updateUserPwd(String id,String pwd){
		String sql = "update org_user set pwd = ? where id = ? ";
		return jdbc.update(sql,new Object[]{AuthorizeCheck.encryptPassword(pwd),id});
	}
	/**根据userid查询登录的用户信息
	 * @param userID
	 * @return
	 */
	public List<Map<String,Object>> getLoginUserToken(String userID){
		return jdbc.queryForList("select cookie from sys_login where userid=?",new Object[]{userID});
	}
	
	/**
	 * 方法描述		校验登录账号和手机号是否有重复
	 * @author wcj
	 * @since 2020年12月23日
	 * @param u
	 * @return	
	 */
	public int getIfAccount(User u){
		String sql = "select count(id) from org_user where userAccount=? and deleteflag='1'";
		if(StringUtil.isNotEmpty(u.getId())){
			sql += "and id !='"+u.getId()+"' ";
		}
		return jdbc.queryForObject(sql, new Object[]{u.getUserAccount()},Integer.class);
	}
	
	public int getIfPhone(User u){
		String sql = "select count(id) from org_user where phone=? and deleteflag='1'";
		if(StringUtil.isNotEmpty(u.getId())){
			sql += "and id !='"+u.getId()+"' ";
		}
		return jdbc.queryForObject(sql, new Object[]{u.getPhone()},Integer.class);
	}
	/**
	 * 
	 * 方法描述  根据手机号查询人员
	 * @author mt.W
	 * @since 2021年11月11日
	 * @param phone
	 * @return
	 */
	public int getUserByPhone(String phone){
		String sql = "select count(id) from org_user where phone = ? and deleteflag='1' ";
		return jdbc.queryForObject(sql,new Object[]{phone}, Integer.class);
	}
	/**
	 * 
	 * 方法描述  根据手机号查询人员信息
	 * @author mt.W
	 * @since 2021年11月12日
	 * @param phone
	 * @return
	 */
	public List<Map<String,Object>> getUserInfoByPhone(String phone){
		String sql = "select u.*,r.name rname from org_user u inner join role r on u.roleid = r.id  where u.phone = ? and deleteflag = 1 ";
		return jdbc.queryForList(sql,new Object[]{phone});
	}
}
