/**
 * Company Name : 中贸促信息技术有限责任公司
 * Project Name:project
 * File Name:OrgController.java
 * Package Name:org.ccpit.base.orgManage
 * Date:2015年9月21日上午8:37:32
 * Copyright (c) 2015, dingwei@ccpit.org All Rights Reserved.
 *
 */

package org.ccpit.base.orgManage;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.ccpit.base.controller.BaseController;
import org.ccpit.base.controller.Page;
import org.ccpit.base.controller.PageRequest;
import org.ccpit.base.user.User;
import org.ccpit.base.user.UserController;
import org.ccpit.base.user.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

/**
 * ClassName:OrgController <br/>
 * Function: TODO ADD FUNCTION. <br/>
 * Reason: TODO ADD REASON. <br/>
 * Date: 2015年9月21日 上午8:37:32 <br/>
 * 
 * @author dingwei
 * @version
 * @since JDK 1.6
 * @see
 */
@Controller
@RequestMapping("/admin/org")
public class OrgController extends BaseController {

	private static final Logger log = LoggerFactory.getLogger(UserController.class);
	@Autowired
	private OrgService orgService;
	@Autowired
	private UserService userService;

	/*
	 * 进入机构管理列表界面
	 */
	@RequestMapping("/goinOrgListPage")
	public Object goinOrgListPage() {
		ModelAndView mv = new ModelAndView("admin/orgManage/orgListPage");
		return mv;
	}

	/**
	 * 
	 * getAllOrgs:(默认查询出所有的机构信息). <br/>
	 * TODO(这里描述这个方法适用条件 – 可选).<br/>
	 * TODO(这里描述这个方法的执行流程 – 可选).<br/>
	 * TODO(这里描述这个方法的使用方法 – 可选).<br/>
	 * TODO(这里描述这个方法的注意事项 – 可选).<br/>
	 *
	 * @author dingwei
	 * @param request
	 * @return
	 * @since JDK 1.6
	 */
	@RequestMapping("/getAllOrgs")
	@ResponseBody
	public Object getAllOrgs(HttpServletRequest request) {
		Map<String, Object> map = new HashMap<String, Object>();
		PageRequest pageRequest = this.getPage(request);
		Page<OrgInfo> users = orgService.queryPage(pageRequest);
		map.put("total", users.getTotal());
		map.put("rows", users.getRows());
		return map;
	}

	@RequestMapping({ "/getLeftTree" })
	@ResponseBody
	public Object getLeftTree(HttpServletRequest request) {
		String isroot = request.getParameter("isroot");
		// UserBo userBo = (UserBo)
		User user = (User) request.getSession().getAttribute("user_in_session");
		List result = new ArrayList();
		List<OrgInfo> orglist = null;
		// if (("true".equals(isroot)) ||
		// ("superadmin".equals(userBo.getLoginName()))){
		// listBo = this.unitService.findUnitByHierarchy("01");
		// }
		// else {
		// }
		orglist = this.orgService.getOrgInfoList();
		List listBo1 = null;
		if (null != orglist) {
			for (OrgInfo orgInfo : orglist) {
				Map item = new HashMap();
				if (1 == orgInfo.getId()) {
					item.put("id", orgInfo.getId());
					item.put("text", orgInfo.getName());
					item.put("children", getChildren(orgInfo.getId(), orglist));
					result.add(item);
				}
			}
		}
		return result;
	}

	public List<Map<String, Object>> getChildren(long id, List<OrgInfo> orgList) {
		List items = new ArrayList();
		for (OrgInfo boinfo : orgList) {
			if (boinfo.getParentId() == id) {
				OrgInfo gg = (OrgInfo) boinfo;
				Map item = new HashMap();
				item.put("id", gg.getId());
				item.put("text", gg.getName());
				item.put("children", getChildren(gg.getId(), orgList));
				items.add(item);
			}
		}
		return items;
	}

	@RequestMapping("/addOrUpdateOrgInfo")
	public void addOrUpdateOrgInfo(HttpServletRequest request,HttpServletResponse response, OrgInfo orgInfo) {
		String result = "";
		User user = (User) request.getSession().getAttribute("user_in_session");
		String orgId = request.getParameter("orgId");
		String orgName = request.getParameter("orgName");
		String operate = request.getParameter("operate");
		boolean flag = false;
		if (null != orgName) {
			try {
				orgName = java.net.URLDecoder.decode(orgName, "UTF-8");
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
		}
		if (null != orgId) {
			if ("add".equals(operate)) {
				orgInfo.setParentId(Long.valueOf(orgId));
				orgInfo.setParentName(orgName);
				orgInfo.setCreateDate(new Date());
				orgInfo.setCreateUser(user.getUsername());
				flag = orgService.addOrg(orgInfo);
			}else if("edit".equals(operate)) {
				OrgInfo org = orgService.getOrgById(Long.valueOf(orgId));
				if(null != orgInfo.getName()){
					org.setName(orgInfo.getName());
				}if(null != orgInfo.getOrderNumber()){
					org.setOrderNumber(orgInfo.getOrderNumber());
				}if(null != orgInfo.getDescription()){
					org.setDescription(orgInfo.getDescription());
				}if(null != orgInfo.getParentName()){
					org.setParentName(orgInfo.getParentName());
				}
				flag = orgService.updateOrg(org);
			}
		} 
		if(flag){
			result = "{ \"flag\": "+ flag  +", \"info\": \"数据保存成功!\" }";
		}else {
			result = "{ \"flag\": "+ flag  +", \"info\": \"数据保存失败!\" }";
		}
		try { 
			response.setContentType("text/html");
			response.getWriter().write(result);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 
	 * orgAddUsers:(机构关联用户). <br/>
	 * TODO(这里描述这个方法适用条件 – 可选).<br/>
	 * TODO(这里描述这个方法的执行流程 – 可选).<br/>
	 * TODO(这里描述这个方法的使用方法 – 可选).<br/>
	 * TODO(这里描述这个方法的注意事项 – 可选).<br/>
	 *
	 * @author dingwei
	 * @param request
	 * @return
	 * @since JDK 1.6
	 */
	@RequestMapping({ "/orgAddUsers" })
	@ResponseBody
	public Object orgAddUsers(HttpServletRequest request){
		Map map = new HashMap();
		String orgId = request.getParameter("orgId");
		String userId = request.getParameter("userId");
		boolean flag = false;
		if(null != orgId){
			OrgInfo org = orgService.getOrgById(Long.valueOf(orgId));
			if(null != userId){
				User user = userService.getUser(Long.valueOf(userId));
				org.getUsers().add(user);
			}
			flag = orgService.updateOrg(org);
		}
		return map.put("flag", flag);
	}
	
	@RequestMapping({ "/getOrgUserByOrdId" })
	@ResponseBody
	public Object getOrgUserByOrdId(HttpServletRequest request){
		Map map = new HashMap();
		String orgId = request.getParameter("orgId");
		Set<User> setUser = new HashSet<User>();
		PageRequest pageRequest = this.getPage(request);
		Page<User> users = new Page<User>(pageRequest);
		boolean flag = false;
		if(null != orgId){
			OrgInfo org = orgService.getOrgById(Long.valueOf(orgId));
			setUser = org.getUsers();
			map.put("total", setUser.size());
			map.put("rows", setUser);
		}
		return map;
	}
	
	@RequestMapping({ "/delOrgUserByOrdId" })
	@ResponseBody
	public Object delOrgUserByOrdId(HttpServletRequest request){
		Map map = new HashMap();
		String orgId = request.getParameter("orgId");
		String userId = request.getParameter("userId");
		Set<User> setUser = new HashSet<User>();
		PageRequest pageRequest = this.getPage(request);
		Page<User> users = new Page<User>(pageRequest);
		boolean flag = false;
		if(null != orgId){
			OrgInfo org = orgService.getOrgById(Long.valueOf(orgId));
			setUser = org.getUsers();
			if(null != userId){
				User user = userService.getUser(Long.valueOf(userId));
				if(setUser.contains(user)){
					setUser.remove(user);
				}
				org.setUsers(setUser);
				orgService.updateOrg(org);
			}
			map.put("total", setUser.size());
			map.put("rows", setUser);
		}
		return map;
	}

	@RequestMapping({ "/isExistNext" })
	@ResponseBody
	public Object isExistNext(HttpServletRequest request) {
		String orgId = request.getParameter("orgId");
		Map result = new HashMap();
		List list = orgService.getChildOrgById(Long.valueOf(orgId));
		if (null != list) {
			if (list.size() > 0) {
				result.put("flag", false);
				result.put("info", "当前菜单存在子菜单,无法进行删除!");
			} else {
				result.put("flag", true);
			}
		} else {
			result.put("flag", true);
		}
		return result;
	}
	
	/**
	 * 根据id删除
	 * @param request
	 * @param response
	 * @return
	 */
	@RequestMapping("/deleteOrg")
	@ResponseBody
	public Object deleteOrg(HttpServletRequest request, HttpServletResponse response){
		Map result = new HashMap();
		String orgId = request.getParameter("ids");
		if(null != orgId){
			boolean flag = orgService.delOrgById(Long.valueOf(orgId));
			result.put("flag", true);
		}else {
			result.put("flag", false);
		}
		return result;
	}

	@RequestMapping("/queryOrgById")
	@ResponseBody
	public Object queryOrgById(HttpServletRequest request,
			HttpServletResponse response) {
		String orgId = request.getParameter("orgId");
		OrgInfo orgInfo = orgService.getOrgById(Long.valueOf(orgId));
		return orgInfo;
	}
}