提交 | 用户 | 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("&", "&").replace("<", "<").replace(">", ">"), 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 |
|