content: /**
   * * Copyright &copy; 2015-2020 <a href="https://gitee.com/JeeHuangBingGui/JeeSpring">JeeSpring</a> All rights reserved..
   */
  package com.jeespring.modules.sys.web;
  
  import java.util.List;
  import java.util.Map;
  
  import javax.servlet.http.HttpServletResponse;
  
  import com.jeespring.modules.sys.service.SysConfigService;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.stereotype.Controller;
  import org.springframework.ui.Model;
  import org.springframework.web.bind.annotation.ModelAttribute;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RequestParam;
  import org.springframework.web.bind.annotation.ResponseBody;
  import org.springframework.web.servlet.mvc.support.RedirectAttributes;
  
  import com.google.common.collect.Lists;
  import com.google.common.collect.Maps;
  import com.jeespring.common.config.Global;
  import com.jeespring.common.utils.StringUtils;
  import com.jeespring.common.web.AbstractBaseController;
  import com.jeespring.modules.sys.entity.Area;
  import com.jeespring.modules.sys.service.AreaService;
  import com.jeespring.modules.sys.utils.UserUtils;
  
  /**
   * 区域Controller
   * @author 黄炳桂 516821420@qq.com
   * @version 2013-5-15
   */
  @Controller
  @RequestMapping(value = "${adminPath}/sys/area")
  public class AreaController extends AbstractBaseController {
  
  	@Autowired
  	private AreaService areaService;
  	@Autowired
  	private SysConfigService sysConfigService;
  
  	@ModelAttribute("area")
  	public Area get(@RequestParam(required=false) String id) {
  		if (StringUtils.isNotBlank(id)){
  			return areaService.get(id);
  		}else{
  			return new Area();
  		}
  	}
  
  	//RequiresPermissions("sys:area:list")
  	@RequestMapping(value = {"list", ""})
  	public String list(Area area, Model model) {
  		model.addAttribute("list", areaService.findAll());
  		return "modules/sys/areaList";
  	}
  
  	//RequiresPermissions(value={"sys:area:view","sys:area:add","sys:area:edit"},logical=Logical.OR)
  	@RequestMapping(value = "form")
  	public String form(Area area, Model model) {
  		if (area.getParent()==null||area.getParent().getId()==null){
  			area.setParent(UserUtils.getUser().getOffice().getArea());
  		}else{
  			area.setParent(areaService.get(area.getParent().getId()));
  		}
  		
  //		// 自动获取排序号
  //		if (StringUtils.isBlank(area.getId())){
  //			int size = 0;
  //			List<Area> list = areaService.findAll();
  //			for (int i=0; i<list.size(); i++){
  //				Area e = list.get(i);
  //				if (e.getParent()!=null && e.getParent().getId()!=null
  //						&& e.getParent().getId().equals(area.getParent().getId())){
  //					size++;
  //				}
  //			}
  //			area.setCode(area.getParent().getCode() + StringUtils.leftPad(String.valueOf(size > 0 ? size : 1), 4, "0"));
  //		}
  		model.addAttribute("area", area);
  		return "modules/sys/areaForm";
  	}
  	
  	//RequiresPermissions(value={"sys:area:add","sys:area:edit"},logical=Logical.OR)
  	@RequestMapping(value = "save")
  	public String save(Area area, Model model, RedirectAttributes redirectAttributes) {
  		if(sysConfigService.isDemoMode()){
  			addMessage(redirectAttributes, sysConfigService.isDemoModeDescription());
  			return "redirect:" + adminPath + "/sys/area";
  		}
  		if (!beanValidator(model, area)){
  			return form(area, model);
  		}
  		areaService.save(area);
  		addMessage(redirectAttributes, "保存区域'" + area.getName() + "'成功");
  		return "redirect:" + adminPath + "/sys/area/";
  	}
  	
  	//RequiresPermissions("sys:area:del")
  	@RequestMapping(value = "delete")
  	public String delete(Area area, RedirectAttributes redirectAttributes) {
  		if(sysConfigService.isDemoMode()){
  			addMessage(redirectAttributes, sysConfigService.isDemoModeDescription());
  			return "redirect:" + adminPath + "/sys/area";
  		}
  //		if (Area.isRoot(id)){
  //			addMessage(redirectAttributes, "删除区域失败, 不允许删除顶级区域或编号为空");
  //		}else{
  			areaService.delete(area);
  			addMessage(redirectAttributes, "删除区域成功");
  //		}
  		return "redirect:" + adminPath + "/sys/area/";
  	}
  
  	//RequiresPermissions("user")
  	@ResponseBody
  	@RequestMapping(value = "treeData")
  	public List<Map<String, Object>> treeData(@RequestParam(required=false) String extId, HttpServletResponse response) {
  		List<Map<String, Object>> mapList = Lists.newArrayList();
  		List<Area> list = areaService.findAll();
  		for (int i=0; i<list.size(); i++){
  			Area e = list.get(i);
  			if (StringUtils.isBlank(extId) || (extId!=null && !extId.equals(e.getId()) && e.getParentIds().indexOf(","+extId+",")==-1)){
  				Map<String, Object> map = Maps.newHashMap();
  				map.put("id", e.getId());
  				map.put("pId", e.getParentId());
  				map.put("name", e.getName());
  				mapList.add(map);
  			}
  		}
  		return mapList;
  	}
  }
  