xinyb
2024-08-30 f5cc47742dd3d2f2ffd8443ffc82a912683f7824
提交 | 用户 | age
a6a76f 1 package com.yc.action.tree;
4ef865 2
a6a76f 3 import com.google.gson.Gson;
F 4 import com.yc.action.BaseAction;
5 import com.yc.action.grid.GridUtils;
6 import com.yc.factory.FactoryBean;
7 import com.yc.multiData.SpObserver;
8 import com.yc.service.commons.SqlQueryIfc;
9 import com.yc.service.tree.TreeJson;
10 import com.yc.utils.EncodeUtil;
11 import com.yc.utils.SessionKey;
4ef865 12 import org.apache.commons.lang.StringUtils;
F 13 import org.springframework.stereotype.Controller;
14 import org.springframework.web.bind.annotation.RequestMapping;
15
16 import javax.servlet.http.HttpServletRequest;
17 import javax.servlet.http.HttpServletResponse;
18 import java.io.IOException;
19 import java.io.PrintWriter;
20 import java.util.List;
21 import java.util.Map;
a6a76f 22
F 23 /**
24  * 
25  * 3类型树显示
26  */
27 @Controller
28 public class Tree_3  extends BaseAction{
29     int depth=0;
30     @RequestMapping("/treeList.do")
31     public void addNode(HttpServletRequest request,HttpServletResponse response) throws IOException{
32
33         //rowid
34         String rowid = request.getParameter("rid");
35         //层次
36         depth = request.getParameter("depth")!=null?Integer.valueOf(request.getParameter("depth")==null?"0":request.getParameter("depth")):0;
37         //如果有值表示获得节点信息否则   获得节点集合
38         String getInfo = request.getParameter("info");
39         String query = request.getParameter("query");
40
41         //"t110202";
42         String treeformidTable = request.getParameter("treeformid");
43         //"110202";
44         String formid = request.getParameter("formid");
45         //"areaid";
707f3d 46         String nodeid = request.getParameter("nodeid");//primayKey
a6a76f 47         String separatedst = " ";
F 48         //"areaname";
49         String displayfield = request.getParameter("displayfield");
50         //过滤条件;
51         String filter = request.getParameter("filter");
52         //过滤条件;
53         String orderby = request.getParameter("orderby");
54         Map<String, Object> temp;
55         String KEY=";";
56         //处理当displayfield不包括nodeid时,需要把nodeid增加进去,以便作为查询字段
57         if(!(KEY+displayfield.toLowerCase()+KEY).contains(KEY+nodeid.toLowerCase()+KEY)){
58             displayfield+=";"+nodeid;
59         }
60         String[] showFields =displayfield.split(";");
61         StringBuilder sb = new StringBuilder();
62         String NULL="null";
63         String sql ;
64         //增加数据组权限
65          com.yc.action.grid.GTGrid grid=(com.yc.action.grid.GTGrid)FactoryBean.getBean("GTGrid");
66          String dataStr=grid.getDataGroupInfo(Integer.parseInt(formid),request.getSession().getAttribute(com.yc.utils.SessionKey.USERCODE)+"",0,request.getSession());
67          if(dataStr==null||NULL.equalsIgnoreCase(dataStr)){ dataStr="";}
68          if(filter==null||NULL.equalsIgnoreCase(filter)||"".equalsIgnoreCase(filter)) {
69              filter = "";
70          }else {
71              filter = " and (" + filter + ") ";
72          }
73          if(orderby==null||NULL.equalsIgnoreCase(orderby)||"".equalsIgnoreCase(orderby)) {
74              orderby = "";
75          }else {
76              //把app传过来的升降序在这里处理
77              String[] str=orderby.split("@P@");
78              if(str.length>1) {
79              String[] des=str[1].split(",");
80                  //为了好处理而加
81                  String tmp=str[0].replaceAll(",", "#")+"#";
82              for(int i=0;i<des.length;i++) {
83              if(i==des.length-1)
84                  tmp=tmp.replaceFirst("#","0".equals(des[i])?" asc ":" desc ");
85              else
86                  tmp=tmp.replaceFirst("#","0".equals(des[i])?" asc, ":" desc, ");
87              }
88                  orderby=" order by "+tmp;
89              }else {
90              orderby=" order by "+orderby;
91              }
92          }
93          dataStr=filter+dataStr;
94          SqlQueryIfc sqlQueryIfc = (SqlQueryIfc)FactoryBean.getBean("SqlQueryImpl");
1ff2c0 95
a6a76f 96         List<Map<String,Object>> list = null;
F 97         
98         try{
99             SpObserver.setDBtoInstance("_"+request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
100             //rowid==null表示第一级节点
707f3d 101             String q="";
F 102             if(! StringUtils.isBlank(query)) {
103                 if(query.indexOf("%2B")!=-1){
104                     //base64编码中包含+ / 等符号 所以要进行处理
105                     query = query.replace("%2B", "+");
106                 }if(query.indexOf("%2F")!=-1){
107                     query = query.replace("%2F", "/");
108                 }
109                 byte [] bs = query.getBytes("utf-8");
110                 if(EncodeUtil.isArrayByteBase64(bs)){
111                     query = EncodeUtil.base64Decode(query);
112                     query = query.replace("@~","%");
113                 }
114                 if(query.indexOf("@G@")==0){
115
116                     query = query.replace("@G@", "");
117                 }
118                 if(query.indexOf("@G@")>0){
119
120                     query = query.replace("@G@", " and ");
121                 }
122                 q=" and ("+query+")";
123             }
a6a76f 124             if (StringUtils.isBlank(rowid) ) {
F 125             sql = "select rowid,treecontrol,isnull(parentrowid,'') as parentrowid,"+displayfield.replaceAll(";", ",")+","
707f3d 126                 +" case when exists(select top 1 1 from "+treeformidTable+" a where a.parentrowid="+treeformidTable+".rowid "+dataStr+orderby+" ) then '1' else '' end as "
F 127                     + "haschild  from "+treeformidTable+"  where ("+treeformidTable+".parentrowid =''  or "+treeformidTable+".parentrowid "
128                         + "is null or not exists (select 1 from "+treeformidTable+" c where "+treeformidTable+".parentrowid = c.rowid "+dataStr+q+") ) "+dataStr+q+orderby;
129                 /*int tempIndex=0;
130                 if(query.toLowerCase().indexOf(nodeid)>0){//表示有值传过来,需要去掉(b.parentrowid =''  or b.parentrowid is null or not exists (select 1 from v110709 c where b.parentrowid = c.rowid )
131                     sql=sql
132                             .replace("("+treeformidTable+".parentrowid =''  or "+treeformidTable+".parentrowid is null or not exists (select 1 from "+treeformidTable+" c where "+treeformidTable+".parentrowid = c.rowid  "+dataStr+q+" ) )"," 1=1 ")
133                             +" and "+query;
134                 }else{
135                     tempIndex = sql.indexOf(" "+treeformidTable+" where")+(treeformidTable.length()+7);
136                     sql = sql.substring(0,tempIndex)+" "+query+" and " + sql.substring(tempIndex,sql.length());
137                     tempIndex = sql.indexOf("a.parentrowid="+treeformidTable+".rowid")+(treeformidTable.length()+20);
138                     sql = sql.substring(0,tempIndex)+" and("+query+")" + sql.substring(tempIndex,sql.length());
139                     tempIndex = sql.lastIndexOf(")");
140                     sql = sql.substring(0,tempIndex)+" and "+query+ sql.substring(tempIndex,sql.length());
141                 }*/
a6a76f 142             list =sqlQueryIfc.queryForList(com.yc.utils.FileUtil.prossSessionInfo(request,sql));
F 143         }
144         
145         else if(!StringUtils.isBlank(rowid) && StringUtils.isBlank(getInfo)){//获得下级节点
146             sql = "select rowid,treecontrol,isnull(parentrowid,'') as parentrowid,"+displayfield.replaceAll(";", ",")+","
707f3d 147                 +" case when exists(select top 1 1 from "+treeformidTable+" a where a.parentrowid="+treeformidTable+".rowid "+dataStr+orderby+" ) then '1' else '' end as "
F 148                 + " haschild  from "+treeformidTable+"  where  "+treeformidTable+".parentrowid = ? "+dataStr+q+orderby;
a6a76f 149             list =sqlQueryIfc.queryForList(com.yc.utils.FileUtil.prossSessionInfo(request,sql),rowid);
F 150         }else{//获得节点信息
151             if(rowid==null)return;
152             sql = "select * from "+treeformidTable+" where "+(StringUtils.isBlank(nodeid)?"rowid":nodeid)+"=?";
153             try{
154                  temp = sqlQueryIfc.queryForMap(sql,rowid);
155                  
156                this.printJson(response, GridUtils.toJson(temp));  
157                return;
158             }catch(Exception e){    
159                 this.printJson(response, e.getMessage());  
160                 return;
161             }
162         }
163         }catch (Exception ex){
164             this.printJson(response, ex.getMessage());
165             return;
166         }finally{
167              SpObserver.setDBtoInstance();
168          }
169         if(StringUtils.isBlank(sql))return;
170         
171         sb.append("[");
172         for(int i=0;i<list.size();i++){
173             temp = list.get(i);
174             spellInfo(sb,nodeid,separatedst,showFields,temp);
175         }
176         if(list.size()>0)
177             sb=new StringBuilder(sb.substring(0,sb.length()-1));
178         sb.append("]");
1ff2c0 179         response.setCharacterEncoding("UTF-8");
F 180         PrintWriter out=response.getWriter();
a6a76f 181         out.write(sb.toString());
F 182         out.flush();
183     }
184     public TreeJson fromJson(String json){
185         Gson gson = new Gson(); 
186 //        return gson.fromJson(json.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;"), new com.google.gson.reflect.TypeToken<TreeJson>() {   
187 //        }.getType() );
188         return gson.fromJson(json, new com.google.gson.reflect.TypeToken<TreeJson>() {   
189             }.getType() );
190     }
191
192     void spellInfo(StringBuilder sb,String primaryKey,String separatedst,String [] showFields,Map<String,Object> temp){
193         sb.append("{\"id\":\"").append(temp.get("rowid"))
194         .append("\",\"nodeid\":\"").append(primaryKey)
195         .append("\",\"collapsed\":").append(false)
196         .append(",\"depth\":").append(depth+1)
197         .append(",\"treecon\":\"").append(temp.get("treecontrol"))
198         .append("\",\"text\":\"");
199         for(int j=0;j<showFields.length;j++){
200               sb.append(temp.get(showFields[j])==null?"": String.valueOf(temp.get(showFields[j])).replaceAll("(\\r\\n|\\r|\\n|\\n\\r)", ""))
201               .append((j+1)==showFields.length?"":separatedst);
202         }
203         sb.append("\",")
204         .append("\"name\":\"");
205         for(int j=0;j<showFields.length;j++){
206               sb.append(temp.get(showFields[j])==null?"": String.valueOf(temp.get(showFields[j])).replaceAll("(\\r\\n|\\r|\\n|\\n\\r)", ""))
207               .append((j+1)==showFields.length?"":separatedst);
208         }
209         sb.append("\",");
210          if(!StringUtils.isBlank((String)temp.get("haschild"))){
211               sb.append("\"state\":\"closed\",");
212               sb.append("\"tree\":[],");
213           }
214          
215         sb.append("\"nodevalue\":\"").append(temp.get(primaryKey)).append("\"},");
216     }
217     
218 }
219