关于组织机构细腻化分割---递归

       其实对于程序来讲,你的想法很重要,思维方式决定了你的程序写法。尤其是对于组织机构来讲,他是用于一定的规律性,所以当冗杂的大量数据堆砌在一起时,这时寻找数据中出现的规律,从而在程序的循环体关键性位置,给予其致命一击,可能就将你的程序写入正确。

      先看数据表

   

      我们的目的是:保留树形的组织机构输出,同时要以type=3和type=4的数据进行分割,如何实现?

      Controller:

      

	/**其实这里还可以在简化,通过传入的funtype,当用户不等于此类型是,利用for循环的continue**/
	@RequestMapping (params ="AppDepartTree")
	public void AppDepartTree(HttpServletRequest request,HttpServletResponse response){
		JsonUtil.responseUTF8(response);
	  	JSONObject returnJsonObj=new JSONObject();
		try {
			String updateTime=request.getParameter("updateDepartTime");  //时间戳
			String departid=request.getParameter("userGroupId");//所属机构编号
			String type=request.getParameter("type");  //从登录API中获取
			String funtype=request.getParameter("funtype");  //模块类型
			if(StringUtil.Null2Blank(updateTime).length()>0){
				//如果登录中的时间和此时的时间比对是一致的,表示组织机构没有被更改过,否则就重新请求组织机构
				String tempTime=String.valueOf(GetDate.DateTimeConvetTimetmp(infService.getUpdateDepartTime()));//组织机构更新时间,转换为时间戳
				if(StringUtil.Null2Blank(tempTime).length()>0 && tempTime.equalsIgnoreCase(updateTime)){
					returnJsonObj.put("data","[]");
					returnJsonObj.put("success", false);
				}else{
					List<Departxinxi> departxixxList=new ArrayList<Departxinxi>();
					List<Departxinxi> departList=systemService.RecursionDepartById(departxixxList, departid, type, null,funtype);
					if(departList.size()>0){
						returnJsonObj.put("data",departList);
						returnJsonObj.put("success", true);
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("获取组织机构树异常");
			returnJsonObj.put("data","[]");
			returnJsonObj.put("success", false);
		}
		responseOutWrite(response, returnJsonObj);
	}
      调用的service,很关键,在于切入点,并且切入点的逻辑关系是什么样。必须理清楚

	public List<Departxinxi> RecursionDepartById(List<Departxinxi> departxixxList,String departId,String type,String newdepartId,String funtype){
		List<Departxinxi> departListTemp=new ArrayList<Departxinxi>();
		CriteriaQuery cq=new CriteriaQuery(TSDepart.class);
		if(StringUtil.Null2Blank(departId).length()>0){
			cq.eq("id", departId); //这句话是通过给HQL设置Id查询数据,得到主节点
		}
		if(StringUtil.Null2Blank(type).length()>0){
			cq.eq("type", type);
		}
		if(StringUtil.Null2Blank(newdepartId).length()>0){
			cq.eq("TSPDepart.id", newdepartId); //这句话是通过给HQL设置Id查询数据,得到主节点
		}
		cq.add();
		List<TSDepart> departList=this.commonDao.getListByCriteriaQuery(cq, false);
		for(int i=0;i<departList.size();i++){
			TSDepart depart=departList.get(i);
			Departxinxi departxinxi=new Departxinxi();
			departxinxi.setID(depart.getId());
			newdepartId=depart.getId();
			if(depart.getTSPDepart()==null || depart.getId().equalsIgnoreCase(departId)){
				departxinxi.setParentdepartid("");
			}else{
				departxinxi.setParentdepartid(depart.getTSPDepart().getId());
			}
			departxinxi.setDepartname(depart.getDepartname());
			departxinxi.setDepartorderid(StringUtil.Null2Blank(depart.getDepartorderid()));
			departxinxi.setDescription(depart.getDescription());
			departxinxi.setLat(depart.getLat());
			departxinxi.setLft(String.valueOf(depart.getLft()));
			departxinxi.setLng(String.valueOf(depart.getLng()));
			departxinxi.setRgt(String.valueOf(depart.getRgt()));
			departxinxi.setType(String.valueOf(depart.getType()));
			departListTemp.add(departxinxi);
			String sql="select * from t_s_depart where (rgt-lft)=1 and parentdepartid='"+newdepartId+"'";
			List<Object[]> list=findListbySql(sql);
			if(StringUtil.isNotEmpty(newdepartId)){
				// rgt与lft之间相差1
				//哥哥我无解了
				if(list.size()>0){
					type=funtype;
				}
				RecursionDepartById(departxixxList,null,type,newdepartId,funtype);
			}
		}
		departxixxList.addAll(departListTemp);
		return departxixxList;
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值