BudgetPeriodBrowserTreeAjax.jsp 5.17 KB
<%@page import="weaver.fna.general.FnaCommon"%>
<%@page import="weaver.conn.RecordSet"%>
<%@page import="weaver.systeminfo.SystemEnv"%>
<%@page import="weaver.general.BaseBean"%>
<%@page import="org.apache.commons.lang.StringEscapeUtils"%>
<%@page import="org.json.JSONObject"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ page import="weaver.general.Util" %>
<%@ page import="java.util.*,java.sql.Timestamp" %>
<%@ page import="weaver.general.GCONST" %>
<%@page import="weaver.hrm.HrmUserVarify"%>
<%@page import="weaver.hrm.User"%>
<jsp:useBean id="rs" class="weaver.conn.RecordSet" scope="page" />
<jsp:useBean id="rs1" class="weaver.conn.RecordSet" scope="page" />
<jsp:useBean id="rs2" class="weaver.conn.RecordSet" scope="page" />
<%

StringBuffer result = new StringBuffer();

User user = HrmUserVarify.getUser (request , response) ;
if(user != null){
    int userId = user.getUID();
    
    String qryType = Util.null2String(request.getParameter("qryType"));
    String sqlwhere = Util.null2String(request.getParameter("sqlwhere"));
    String tableName = Util.null2String(request.getParameter("tableName"));
    String periodId = Util.null2String(request.getParameter("periodId"));
    
    String number = tableName.split("_")[1];
    
    if("1".equals(qryType)){//模糊查询
        String qryName = Util.null2String(request.getParameter("qryName"));
    
    
        //上级不能为其下级,递归查询所有下级
        StringBuffer sql = new StringBuffer();
        if("oracle".equalsIgnoreCase(rs.getDBType())){
            sql.append(" select id,periodName,supId from FnaPeriodSetting_"+number+" \n");
            sql.append(" start with id in ('"+periodId+"') \n");
            sql.append(" connect by prior id = supsubject ");
        }else if("mysql".equalsIgnoreCase(rs.getDBType())){
            sql.append(" select DISTINCT t.id,t.periodName,t.supId from (\n");
            sql.append("    select @id idlist, @lv:=@lv+1 lv,\n");
            sql.append("    (select @id:=group_concat(id separator ',') from FnaPeriodSetting_"+number+" where find_in_set(supId,@id)) sub \n");
            sql.append("    from FnaPeriodSetting_"+number+" ,(select @id:='"+periodId+"' ,@lv:=0) vars \n");
            sql.append("    where @id is not null) tl, FnaPeriodSetting_"+number+" t \n");
            sql.append(" where find_in_set(t.id,tl.idlist) \n");
            sql.append(" order by lv asc");
        }else{
            sql.append("WITH allsub(id,periodName,supId) \n");
            sql.append(" as ( \n");
            sql.append(" SELECT id,periodName,supId FROM FnaPeriodSetting_"+number+" where id in ('"+periodId+"') \n");
            sql.append(" UNION ALL SELECT a.id,a.periodName,a.supId FROM FnaPeriodSetting_"+number+" a,allsub b where a.supId = b.id \n");
            sql.append(" ) select * from allsub \n");
        }
        
        rs.executeQuery(sql.toString());
        List<String> budgetBearerList = new ArrayList<String>();
        while(rs.next()){
            String _id = Util.null2String(rs.getString("id"));
            if(!budgetBearerList.contains(_id)){
                budgetBearerList.add(_id);
            }
        }
    
        result.append("{\"dataArray\":[");
        int idx = 0;
            
        String sql1 = " select id, periodName from " + tableName + " where 1=1 and (periodName like ? or codeName like ? ) ";
        rs1.executeQuery(sql1, "%"+ qryName +"%", "%"+ qryName +"%");
        while(rs1.next()){
            String id = rs1.getString("id");
            String name = rs1.getString("periodName");
            
            if(budgetBearerList.contains(id)){
                continue;
            }
            
            if(idx>0){
                result.append(",");
            }
            
            result.append("{"+
                "\"id\":"+JSONObject.quote(id)+","+
                "\"name\":"+JSONObject.quote(name)+""+
                "}");
            idx++;
        }
        result.append("]}");
        
    }else if("2".equals(qryType)){//显示科目树
        String supIdFull = Util.null2String(request.getParameter("id"));
        
        result.append("[");
        int idx = 0;
        
        String sql1 = " select id, periodName from " + tableName + " where 1=1 and supId = ? and id != ? ";
        rs1.executeQuery(sql1, supIdFull,periodId);
        while(rs1.next()){
            String id = rs1.getString("id");
            String name = rs1.getString("periodName");
            
            if(idx>0){
                result.append(",");
            }
            
            String isParent = "true";
            String sql2 = "select count(*) cnt from "+ tableName +" a where a.supId = ? ";
            rs2.executeQuery(sql2, id);
            if(rs2.next() && rs2.getInt("cnt") > 0){
                isParent = "true";
            }else{
                isParent = "false";
            }
            
            result.append("{"+
                "\"id\":"+JSONObject.quote(id)+","+
                "\"name\":"+JSONObject.quote(name)+","+
                "\"isParent\":"+isParent+","+
                "\"canSelect\":"+1+""+
                "}");
            idx++;
        }
        result.append("]");
        
    }

}
%><%=result.toString() %>