/**
 * 版权所有 ©2020 威海莱欧科技有限公司
 * 工程名：base02
 * 文件名：ResourceService.java
 * 创建日期：2020年12月23日 下午4:05:47
 * 作者：xmf
 */
package com.lion.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.lion.dao.LoginDao;
import com.lion.dao.ResourceDao;
import com.lion.entity.Resources;
import com.lion.util.Util;

import jodd.util.StringUtil;

/**
 * 类描述
 * @author xmf
 * @since 2020年12月23日
 */
@Service
public class ResourceService {
	@Autowired 
	private LoginDao loginDao;
	@Autowired 
	private ResourceDao resourceDao;
	/**
	 * 
	 * 方法描述    获取资源菜单树
	 * @author mt.W
	 * @since 2019年3月18日
	 * @param req
	 * @param session
	 * @return
	 */
	public  Map<String, Object> getResourceTree(){
		List<Map<String,Object>> list=loginDao.getResourcesByRoleId("0");
		/*Map<String,List<Map<String,Object>>> resourceMap = new HashMap<String, List<Map<String,Object>>>(); 
		for(Map<String,Object> map:list){
			if(resourceMap.get(map.get("pid").toString())!=null){
				resourceMap.get(map.get("pid").toString()).add(map);
			}else{
				List<Map<String,Object>> children = new ArrayList<Map<String,Object>>();
				children.add(map);
				resourceMap.put(map.get("pid").toString(), children);
			}
		}
		if(resourceMap.get("0")==null){
			list = new ArrayList<Map<String,Object>>();
		}else{
			list = resourceMap.get("0");
		}
		for(Map<String,Object> map:list){
			map.put("children", resourceMap.get(map.get("id").toString()));
		}*/
		Map<String,Object> map=Util.responseMap("true",returnRecourceTreeList(list));
		return map;
	}
	
	public static List<Map<String,Object>> returnRecourceTreeList(List<Map<String,Object>> temp){
		Map<String,List<Map<String,Object>>> nodeMap = new HashMap<String, List<Map<String,Object>>>();
		Map<String,List<Map<String,Object>>> levelMap = new HashMap<String, List<Map<String,Object>>>();
		int level = Integer.valueOf(temp.get(temp.size()-1).get("level").toString());
		int height_leval = Integer.valueOf(temp.get(0).get("level").toString());
		for(Map<String,Object> map:temp){
			if(levelMap.get(map.get("level").toString())!=null){
				levelMap.get(map.get("level").toString()).add(map);
			}else{
				List<Map<String,Object>> children = new ArrayList<Map<String,Object>>();
				children.add(map);
				levelMap.put(map.get("level").toString(), children);
			}
			if(nodeMap.get(map.get("pid").toString())!=null){
				nodeMap.get(map.get("pid").toString()).add(map);
			}else{
				List<Map<String,Object>> children = new ArrayList<Map<String,Object>>();
				children.add(map);
				nodeMap.put(map.get("pid").toString(), children);
			}
		}
		while(level>height_leval){
			level--;
			if(levelMap.get(level+"")!=null){
				for(Map<String,Object> map:levelMap.get(level+"")){
					List<Map<String,Object>> children = nodeMap.get(map.get("id").toString());
					map.put("children", children);
					if(children!=null){
						map.put("childid",children.get(children.size()-1).get("id").toString());
						map.put("child",children.size());
					}else{
						map.put("childid",map.get("id").toString()+"0");
						map.put("child",0);
					}
				}
			}
		}
		List<Map<String,Object>>list = levelMap.get(level+"");
		return  list;
	}
	
	/**
	 * 
	 * 方法描述  菜单提交保存
	 * @author mt.W
	 * @since 2019年3月18日
	 * @param req
	 * @param session
	 * @param r
	 * @return
	 */
	public String saveResource(String userId,Resources r){
		int rs;
		if(StringUtil.isNotEmpty(r.getPid())){ //添加
			rs=resourceDao.addResource(r, userId);
		}else{ //修改
			rs=resourceDao.editRsource(r, userId);
		}
		if(rs>0){
			return Util.responseString("true","操作成功");
		}
		return Util.responseString("false","操作失败");
	}
	/**
	 * 
	 * 方法描述  菜单删除
	 * @author mt.W
	 * @since 2019年3月18日
	 * @param req
	 * @param session
	 * @param r
	 * @return
	 */
	public String deleteResourcr(Resources r){
		//父菜单下存在子菜单，无法进行删除
		List<Map<String,Object>> listCheckPid = loginDao.getChildResources(r.getId(), "0");
		if(listCheckPid.size()>0){
			return Util.responseString("false","当前菜单下存在菜单，无法删除");
		}
		int rs = resourceDao.deleteResource(r.getId());
		if(rs>0){
			return Util.responseString("true","操作成功");
		}
		return Util.responseString("false","操作失败");
	}
	/**
	 * 
	 * 方法描述  菜单节点迁移
	 * @author mt.W
	 * @since 2019年10月30日
	 * @param req
	 * @param id 菜单id
	 * @param pid 目标父节点id
	 * @return
	 */
	public String qianyiNode(String id,String pid){
		int count = resourceDao.updateNodePid(id, pid);
		if(count>0){
			return Util.responseString("true", "操作成功");
		}
		return Util.responseString("false", "操作失败");
	}
	/**
	 * 
	 * 方法描述  查询一级菜单
	 * @author mt.W
	 * @since 2019年10月30日
	 * @param req
	 * @return
	 */
	public Map<String,Object> getFirstMunu(){
		List<Map<String,Object>> list=loginDao.getResourcesByRoleId();
		return Util.responseMap("true", list);
	}

}
