/**
 * 版权所有 ©2019 莱欧有限公司
 * 工程名：SpringMvcLion
 * 文件名：OrganizationTreeDao.java
 * 创建日期：2019年3月1日 下午3:46:55
 * 作者：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 jodd.util.StringUtil;






/**
 * 类描述  组织树dao
 * @author mt.W
 * @since 2019年3月1日
 */
@Repository
public class OrganizationTreeDao {
	@Autowired
	private JdbcTemplate jdbc;
	/**
	 * 
	 * 方法描述	通过级别查询节点信息
	 * @author mt.W
	 * @since 2020年2月25日
	 * @param level 节点等级
	 * @return
	 */
    public List<Map<String, Object>> getParentNode(int level){
    	String sql="select id,name text ,level,pid,otherId from orgdept o where o.level=? order by o.id";
		return jdbc.queryForList(sql,new Object[]{level});
    }
    /**
     * 
     * 方法描述 	通过父节点查询节点信息
     * @author mt.W
     * @since 2019年3月4日
     * @param id 父节点
     * @return
     */
    public List<Map<String,Object>> getChildNode(String id){
		String sql="select id,name text,level,pid,otherId from orgdept o where o.pid = ?" ;
		return jdbc.queryForList(sql,new Object[]{id});
	}  
    /**
     * 
     * 方法描述  修改节点信息
     * @author mt.W
     * @since 2020年2月25日
     * @param name 节点名称
     * @param id 节点新id
     * @param oid 节点原id
     * @return
     */
    public int editNode(String name ,String id,String oid,String otherId ){
    	String sql ="update orgdept set name = ?,id=?,otherId=?  where id = ? ";
    	return jdbc.update(sql,new Object[]{name,id,otherId,oid});
    }
    /**
     * 
     * 方法描述  新增节点
     * @author mt.W
     * @since 2020年2月25日
     * @param pid 父节点id
     * @param name 节点名称
     * @param level 节点等级
     * @param id 节点id
     * @return
     */
    public int addNode(String pid,String name,String level,String id,String otherId){
    	String sql ="insert into orgdept(pid,name,level,id,otherId) values(?,?,?,?,?) ";
    	return jdbc.update(sql,new Object[]{pid,name,level,id,otherId});
    }
    /**
     *  
     * 方法描述   校验节点名称
     * @author mt.W
     * @since 2020年2月25日
     * @param name
     * @param pid
     * @param id
     * @return
     */
    public List<Map<String, Object>> getNodeName(String name,String pid,String id){
		//String sql = "select * from orgdept where name = ? and pid = ?";
		StringBuffer sql = new StringBuffer("select * from orgdept where name = ? and pid = ?");
		if(StringUtil.isNotEmpty(id)){
			//sql += " and id != ?";
			sql.append(" and id != ?");
		}
		return jdbc.queryForList(sql.toString(),new Object[]{name,pid,id});
	}
    /**
     * 
     * 方法描述  删除节点
     * @author mt.W
     * @since 2019年3月4日
     * @param id
     * @return
     */
    public int deleteNode(String id){
    	String sql ="delete from orgdept where id =? " ;
    	return jdbc.update(sql,new Object[]{id});
    }
    /**
     * 
     * 方法描述  查询组织下是否有用户
     * @author mt.W
     * @since 2019年3月7日
     * @param id
     * @return
     */
    public List<Map<String,Object>> getOrgUser(String id){
    	String sql = "select u.name from orgdept o inner join org_user u on o.id = u.orgid where u.deleteflag='1' and o.id = ?";
    	return jdbc.queryForList(sql,new Object[]{id});
    }
    /**
     * 
     * 方法描述  通过父id集查询子节点集
     * @author mt.W
     * @since 2020年2月25日
     * @param id
     * @return
     */
    public List<Map<String,Object>> getOrgIds(String id){
    	String sql = "select id from orgdept where pid in (?)";
    	return jdbc.queryForList(sql,new Object[]{id});
    }
    
    /**
	 * 
	 * 方法描述  查询id是否存在
	 * @author xmf
	 * @since 2019年11月28日
	 * @param id orgdept表中的id
	 * @return
	 */
	public List<Map<String, Object>> getID(String id){
		String sql = "select * from orgdept where id = ?";
		return jdbc.queryForList(sql,new Object[]{id});
	}
	
	public List<Map<String, Object>> getNodeChild(String id){
		String sql = "select id,name text,level,pid,otherId from orgdept where id = ? ";
		return jdbc.queryForList(sql,new Object[]{id});
	}
	
	public List<Map<String,Object>> getAllOrgdeptNode(){
		String sql = "select id,name text,level,pid,otherId from orgdept order by level,id";
		return jdbc.queryForList(sql);
	}
	public List<Map<String,Object>> getOrgdeptNodeByOrgid(String id){
		String sql = "select id,name text,level,pid,otherId from orgdept where id like '"+id+"%' order by level,id";
		return jdbc.queryForList(sql);
	}
	/**
	 * 
	 * 方法描述   根据部门名称查询部门id
	 * @author mt.W
	 * @since 2021年11月5日
	 * @param orgname
	 * @return
	 */
	public List<Map<String,Object>> getOrgdeptByName(String orgname){
		String sql = "select id from orgdept where name = ? ";
		return jdbc.queryForList(sql,new Object[]{orgname.replaceAll(" ", "")});
	}
	public List<Map<String,Object>> getOrgdeptInfoByOtherid(String otherid){
		String sql = "select * from orgdept where otherId = ? ";
		return jdbc.queryForList(sql,new Object[]{otherid});
	}
}
