提交 | 用户 | age
|
a6a76f
|
1 |
/* |
F |
2 |
* 生成3类型窗体文件,生成路径已系统菜单为准,文件为formID_file.jsp为准。 |
|
3 |
* xiangluan |
|
4 |
* 2010-04-16 |
|
5 |
*/ |
|
6 |
package com.yc.service.build.type.v2; |
|
7 |
|
|
8 |
import com.yc.action.grid.GridUtils; |
c2dc59
|
9 |
import com.yc.api.bean.T9685Entity; |
X |
10 |
import com.yc.api.service.ApiServiceIfc; |
a6a76f
|
11 |
import com.yc.exception.ApplicationException; |
F |
12 |
import com.yc.factory.FactoryBean; |
|
13 |
import com.yc.service.BaseService; |
|
14 |
import com.yc.service.sqlformat.entity.SqlFormatEntity; |
|
15 |
import com.yc.service.sqlformat.utils.SqlFormatUtils; |
|
16 |
import com.yc.service.tree.TreeIfc; |
|
17 |
import org.apache.commons.lang.StringUtils; |
|
18 |
import org.springframework.beans.factory.annotation.Autowired; |
|
19 |
import org.springframework.stereotype.Service; |
|
20 |
|
|
21 |
import java.util.ArrayList; |
|
22 |
import java.util.HashMap; |
|
23 |
import java.util.List; |
|
24 |
import java.util.Map; |
|
25 |
|
|
26 |
@Service("V3") |
|
27 |
public class T_3_Impl extends BaseImpl implements T_3_Ifc { |
|
28 |
|
|
29 |
|
|
30 |
@Autowired |
|
31 |
private TreeIfc treeIfc; |
c2dc59
|
32 |
@Autowired |
X |
33 |
private ApiServiceIfc apiServiceIfc; |
a6a76f
|
34 |
|
F |
35 |
@Override |
|
36 |
public int build(BaseBean baseBean) throws Exception { |
|
37 |
// 读取gform表的信息 |
|
38 |
Map<String, Object> gformInfo = this.init(baseBean); |
|
39 |
Map<String, Object> treeSet = null; |
|
40 |
List<Map<String, Object>> treeSetList = treeIfc.getTreeSet(baseBean.formID, baseBean.type); |
|
41 |
if (treeSetList != null) { |
|
42 |
if(treeSetList.size()==0) |
|
43 |
throw new ApplicationException("请在【9824】对"+baseBean.formID+"树形相关参数进行配置"); |
|
44 |
treeSet = treeSetList.get(0); |
|
45 |
} |
|
46 |
String autoCodeColumn = treeIfc.getAutoCodeColumn(baseBean.formID); |
|
47 |
String autoCodeConfig = treeIfc.getAutoCodeConfig(baseBean.formID); |
|
48 |
if (treeSet.get("treewidth") != null && !StringUtils.isBlank(treeSet.get("treewidth").toString())) {// 判断属性边框宽度是否设置 |
|
49 |
int trwidth = 0; |
|
50 |
if (treeSet.get("treewidth").toString().indexOf("%") != -1) { |
|
51 |
trwidth = Integer.parseInt(treeSet.get("treewidth").toString().replace("%", "0")); |
|
52 |
trwidth = trwidth + 60; |
|
53 |
} else { |
|
54 |
trwidth = Integer.parseInt(treeSet.get("treewidth").toString()); |
|
55 |
} |
|
56 |
trwidth = trwidth > 0 ? trwidth : 300; |
|
57 |
gformInfo.put("treewidth", trwidth + "px"); |
|
58 |
} else { |
|
59 |
gformInfo.put("treewidth", "300px");// 没有设置的情况默认300px |
|
60 |
} |
|
61 |
//----查找树节点id,通过treefromid再查一次9824树本身的nodeid,detailNodeid是格线里的字段,在这里做一个转换 |
|
62 |
//把之前nodeid的值用树自身的nodeid代替。 |
|
63 |
BaseService baseService = (BaseService) FactoryBean.getBean("BaseService"); |
|
64 |
for (Map map : treeSetList) {//修改对应的值,nodeid是树节点字段,detailNodeid是格线字段 |
|
65 |
String nodeid = baseService.getJdbcTemplate().queryForObject(" select nodeid from _sysTreeSet where formid=? ", String.class, GridUtils.prossRowSetDataType_String(map, "treeformid")); |
|
66 |
|
|
67 |
map.put("detailNodeid", GridUtils.prossRowSetDataType_String(map, "nodeid")); |
|
68 |
map.put("nodeid", nodeid); |
|
69 |
} |
|
70 |
//---------- |
|
71 |
buildDataHead(gformInfo); |
|
72 |
buildTop(gformInfo); |
|
73 |
buildHelpPage(gformInfo); |
|
74 |
buildJsCssHead(treeSetList, baseBean); |
|
75 |
buildGrid(baseBean); |
|
76 |
buildTreeData(treeSetList, gformInfo, autoCodeColumn, autoCodeConfig); |
|
77 |
buildFoolter(baseBean); |
|
78 |
buildIndex(gformInfo); |
|
79 |
|
|
80 |
return 0; |
|
81 |
} |
|
82 |
|
|
83 |
/** |
|
84 |
* 生成js css 导入的页面 |
|
85 |
* |
|
86 |
* @throws Exception |
|
87 |
*/ |
|
88 |
public void buildJsCssHead(List<Map<String, Object>> treeSetList, BaseBean baseBean) throws Exception { |
|
89 |
String fileName = "jsCssHead.jsp"; |
|
90 |
String data = getPageCode(fileName, baseBean); |
|
91 |
// ---------------- |
|
92 |
|
|
93 |
Map<String, Map> treeList = new HashMap<>();//保存多树的设置信息 |
|
94 |
for (Map treeSet : treeSetList) { |
|
95 |
Map<String, String> tree = new HashMap<>();//保存树的设置信息 |
|
96 |
// Map treeSet=treeSetList.get(0); |
|
97 |
////data = data.replace("[?autocode]", autoCodeColumn); |
|
98 |
//data = data.replace("[?autocodeConfig]", autoCodeConfig); |
|
99 |
tree.put("displayfield", trim(treeSet.get("displayfield")).toLowerCase()); |
|
100 |
tree.put("nodeid", trim(treeSet.get("nodeid")).toLowerCase()); |
|
101 |
tree.put("separatedst", trim(treeSet.get("separatedst"))); |
|
102 |
tree.put("detailNodeid", trim(treeSet.get("detailNodeid"))); |
|
103 |
// |
|
104 |
String treeFormid = trim(treeSet.get("treeformid")); |
|
105 |
String treeFormType = baseBean.type + ""; |
|
106 |
if (!treeFormid.equals(baseBean.formID + "")) { |
|
107 |
List<Map<String, Object>> refTypes = treeIfc.getTreeSetByFormid("formtype", treeFormid); |
|
108 |
if (refTypes.size() > 0) { |
|
109 |
treeFormType = trim(refTypes.get(0).get("formtype")); |
|
110 |
} |
|
111 |
} |
|
112 |
tree.put("treeFormId", treeFormid); |
|
113 |
tree.put("treeFormType", treeFormType); |
|
114 |
treeList.put(treeFormid, tree); |
|
115 |
// |
|
116 |
// String columns = gformIfc.getColumns(Integer.parseInt(formID), true); |
|
117 |
//data = data.replace("[?columns]", "[" + columns + "]"); |
|
118 |
} |
|
119 |
data = data.replace("[?trees]", GridUtils.toJson(treeList)); |
|
120 |
//增加树过滤条件,作为参数传到后台执行 |
|
121 |
BaseService baseService = (BaseService) FactoryBean.getBean("BaseService"); |
|
122 |
Map treefilterstr = baseService.getSimpleJdbcTemplate().queryForMap(" select top 1 formid,formtype,treeformid,treeName,SortID,keyfield,parentfield,nodeid,listfield,displayfield,separatedst,treefield,autocodefield,treefilterstr,authcheck,allowdrag,defNodeTypeFilter,startnodetypefilter,treewidth from _sysTreeSet where formid=? ", baseBean.getFormID()); |
|
123 |
final SqlFormatEntity sqlFormatByEntity = SqlFormatUtils.createSQLFormatByEntity(treefilterstr, 9824); |
|
124 |
data = data.replace("[?treefilterstr]", sqlFormatByEntity==null?"null":GridUtils.toJson(sqlFormatByEntity)); |
|
125 |
buildPageCode(data, fileName, baseBean); |
|
126 |
} |
|
127 |
|
|
128 |
/** |
|
129 |
* 生成TreeData页面 |
|
130 |
* |
|
131 |
* @throws Exception |
|
132 |
*/ |
|
133 |
public void buildTreeData(List<Map<String, Object>> treeSetList, Map<String, Object> gformInfo, String autoCodeColumn, String autoCodeConfig) throws Exception { |
|
134 |
BaseBean baseBean = (BaseBean) gformInfo.get(BEAN_INFO); |
|
135 |
String formID = baseBean.formID; |
|
136 |
Map<String, Map> treeList = new HashMap<>();//保存多树的设置信息 |
|
137 |
String treeFormids = ""; |
|
138 |
for (Map treeSet : treeSetList) { |
|
139 |
|
|
140 |
if (StringUtils.isBlank((String) treeSet.get("nodeid"))) { |
|
141 |
throw new RuntimeException("3类型树功能号:" + formID + "生成有误。在树设置9824功能号中,[节点字段]字段不能为空,该字段用于配置显示节点信息,必需要配置该字段才能生成!"); |
|
142 |
} |
|
143 |
if (treeSet.get("treeformid") == null) { |
|
144 |
throw new RuntimeException("3类型树功能号:" + formID + "生成有误。在树设置9824功能号中,[树功能号]字段不能为空,该字段用于引用2类型树,必须需要配置该字段才能生成!"); |
|
145 |
} |
|
146 |
if (StringUtils.isBlank((String) treeSet.get("displayfield"))) { |
|
147 |
throw new RuntimeException("3类型树功能号:" + formID + "生成有误。在树设置9824功能号中,[显示字段列表]字段不能为空,必需要配置该字段才能生成!"); |
|
148 |
} |
|
149 |
// 树功能号 |
|
150 |
String treeFormid = treeSet.get("treeformid").toString(); |
|
151 |
// 功能号主表名 |
|
152 |
String str_tableName = null; |
|
153 |
if (!treeFormid.equals(formID)) {// 如果树功能号不等于当前功能号 |
|
154 |
List<Map<String, Object>> refTypes = treeIfc.getTreeSetByFormid("formtype", treeFormid); |
|
155 |
if (refTypes.size() == 0 || refTypes.size() > 1) { |
|
156 |
throw new RuntimeException("3类型树功能号:" + formID + "生成有误。在树设置9824功能号中所对应的功能号没有或有多个!"); |
|
157 |
} |
|
158 |
int treeFormidType = 0; |
|
159 |
if (refTypes.get(0).get("formtype") != null) { |
|
160 |
treeFormidType = (Integer) refTypes.get(0).get("formtype"); |
|
161 |
} |
|
162 |
Map<String, Object> tmp = gformIfc.getGformInfo(treeFormidType == 20 ? "dttable" : "hdtable", Integer.parseInt(treeFormid)); |
|
163 |
str_tableName = tmp.get(treeFormidType == 20 ? "dttable" : "hdtable").toString(); |
|
164 |
} else { |
|
165 |
str_tableName = gformInfo.get("hdtable").toString(); |
|
166 |
} |
|
167 |
|
|
168 |
if (StringUtils.isBlank(str_tableName)) { |
|
169 |
throw new RuntimeException("3类型树功能号:" + formID + "生成有误。在树设置9824功能号中,[树功能号]字段所对应的功能号的主表字段为空!"); |
|
170 |
} |
|
171 |
// 功能号过滤条件--树显示是用树设置的过滤条件 |
|
172 |
// String str_formdatafilters = gformInfo.get("formdatafilters")==null?"":gformInfo.get("formdatafilters").toString(); |
|
173 |
// 生成第一层节点查询sql |
|
174 |
// 主键字段名 |
|
175 |
String primayKey = ""; |
|
176 |
String firstNodeSql = treeIfc.buildFirstLayerTreeSQL(treeSet, str_tableName, primayKey);// 树的查询sql |
|
177 |
// if(!"".equals(trim(gformInfo.get("formdatafilters")))){ |
|
178 |
// firstNodeSql+=" and ("+gformInfo.get("formdatafilters")+")"; |
|
179 |
// } |
|
180 |
|
|
181 |
|
|
182 |
String sql = trim(treeIfc.buildTreeSQLNotFilter(treeSet, str_tableName, primayKey));// 树节点信息查询sql |
|
183 |
String querySql = trim(treeIfc.buildQueryTreeSQL(treeSet, str_tableName, primayKey));// 树的查询sql |
|
184 |
//格线对应的字段,用作查询格线时的参数名称 |
|
185 |
String detailNodeid = treeSet.get("detailNodeid").toString().trim(); |
|
186 |
// 显示字段 |
|
187 |
String displayfield = treeSet.get("displayfield").toString().trim(); |
|
188 |
// 分割符 |
|
189 |
String separatedst = treeSet.get("separatedst") == null ? "" : treeSet.get("separatedst").toString(); |
|
190 |
String nodeid = GridUtils.prossRowSetDataType_String(treeSet, "nodeid"); |
|
191 |
//格线取第一个节点作为第一次加载时的条件 By dananus |
b1ae83
|
192 |
String tempNode = this.getSimpleJdbcTemplate().queryForObject(" set nocount on ; declare @fieldid varchar(50);select top 1 @fieldid = fieldid from gfield where formid = ? and initvalue = ?;select @fieldid;", String.class, formID, nodeid); |
a6a76f
|
193 |
if (tempNode == null) { |
F |
194 |
throw new ApplicationException("由于在9824设置了树功能号为【" + treeFormid + "】的节点字段【" + nodeid + "】,因此必须在9802中设置【" + formID + "】功能号与树关联字段的初始值设为【" + nodeid + "】"); |
|
195 |
} |
|
196 |
//tempNode = nodeid; |
|
197 |
StringBuffer treeNodeStr = new StringBuffer(); |
|
198 |
treeNodeStr.append(" cast(" + tempNode + " as varchar) in (select top 1 cast(").append(nodeid + " as varchar) from ") |
|
199 |
.append(str_tableName) |
|
200 |
.append(" as b where (b.parentrowid ='' or b.parentrowid is null or not exists (select 1 from ") |
|
201 |
.append(str_tableName).append(" c where b.parentrowid = c.rowid ").append(") ) "); |
|
202 |
// 树过滤条件 |
|
203 |
String treefilterstr = GridUtils.prossRowSetDataType_String(treeSet, "treefilterstr"); |
|
204 |
if (!"".equals(treefilterstr)) { |
|
205 |
//firstNodeSql += " and (" + treefilterstr + ")"; |
|
206 |
querySql += " and (" + treefilterstr + ")"; |
|
207 |
treeNodeStr.append(" and (" + treefilterstr + ")"); |
|
208 |
} |
|
209 |
|
|
210 |
// 树类型排序 |
|
211 |
if (treeSet.get("treeformid") != null) { |
|
212 |
Map<String, Object> gformInfo1 = gformIfc.getGformInfo("index1", Integer.parseInt(treeSet.get("treeformid").toString())); |
|
213 |
if (gformInfo1.get("index1") != null && !gformInfo1.get("index1").toString().equals("")) { |
|
214 |
if(treeNodeStr.indexOf("order by") < 0) { |
|
215 |
treeNodeStr.append(" order by " + gformInfo1.get("index1").toString().replace(";", ",")); |
|
216 |
} |
|
217 |
if(firstNodeSql.indexOf("order by") < 0) { |
|
218 |
firstNodeSql += " order by " + gformInfo1.get("index1").toString().replace(";", ","); |
|
219 |
} |
|
220 |
|
|
221 |
} |
|
222 |
} |
|
223 |
treeNodeStr.append(")"); |
|
224 |
|
|
225 |
|
|
226 |
// ---------------- |
|
227 |
// 替换 |
|
228 |
Map<String, String> tree = new HashMap(); |
|
229 |
String treeid = trim(treeSet.get("treeformid").toString()); |
|
230 |
tree.put("table", str_tableName); |
|
231 |
tree.put("autocode", autoCodeColumn); |
|
232 |
tree.put("autocodeConfig", autoCodeConfig); |
|
233 |
tree.put("treeformid", treeid); |
|
234 |
tree.put("firstNodeSql", firstNodeSql); |
|
235 |
tree.put("sql", sql); |
|
236 |
tree.put("querySql", querySql); |
|
237 |
tree.put("displayfield", trim(displayfield).toLowerCase()); |
|
238 |
tree.put("nodeid", trim(nodeid)); |
|
239 |
tree.put("detailNodeid", trim(detailNodeid)); |
|
240 |
tree.put("separatedst", trim(separatedst)); |
|
241 |
tree.put("treeNodeStr", treeNodeStr.toString()); |
|
242 |
treeList.put(treeid, tree); |
|
243 |
treeFormids += treeid + ";"; |
|
244 |
} |
|
245 |
// 读文件 |
|
246 |
String fileName = "treeData.jsp"; |
|
247 |
String data = getPageCode(fileName, baseBean); |
|
248 |
String temp = GridUtils.toJson(treeList).replaceAll("\"", "\\\\\\\\\""); |
|
249 |
data = data.replaceAll("@_treeList_@", temp); |
|
250 |
data = data.replaceAll("@_treeFormids_@", treeFormids); |
|
251 |
buildPageCode(data, fileName, baseBean); |
|
252 |
// 处理页面第一次加载时取树的第一个节点作为格线显示的查询条件 |
|
253 |
String fileName1 = "tree.jsp"; |
|
254 |
String opt = getPageCode(fileName1, baseBean); |
|
255 |
opt = opt.replaceAll("@_treeList_@", temp); |
|
256 |
opt = opt.replaceAll("@_treeFormids_@", treeFormids); |
|
257 |
buildPageCode(opt, fileName1, baseBean); |
|
258 |
} |
|
259 |
|
|
260 |
|
|
261 |
/** |
|
262 |
* 生成主页面 |
|
263 |
* |
|
264 |
* @throws Exception |
|
265 |
*/ |
|
266 |
@Override |
|
267 |
public void buildIndex(Map<String, Object> gformInfo) throws Exception { |
|
268 |
BaseBean baseBean = (BaseBean) gformInfo.get(BEAN_INFO); |
|
269 |
String fileName = "index.jsp"; |
|
270 |
String data = getPageCode(fileName, baseBean); |
|
271 |
// |
|
272 |
|
|
273 |
// --------从gform表获取是否显示大标题字段值(isTitle)判断是否显示大标题,并替换标识符-2012-02-20-syz--------[begin]---------------------- |
|
274 |
if (true) { |
|
275 |
//String menuname_str = ""; |
b1ae83
|
276 |
String sSQL = " set nocount on ; select * from gform where formid='" + baseBean.formID + "' and isTitle='1' ";// isTitle=1表示配置了显示大标题 |
a6a76f
|
277 |
List<Map<String, Object>> arrayList = new ArrayList<Map<String, Object>>(); |
F |
278 |
arrayList = getArrayList(sSQL); |
|
279 |
if (arrayList.size() > 0) {// 如果配置了显示大标题 |
|
280 |
|
5f1f90
|
281 |
String TopAndTitle_str = "<table id=\"top_table\" width=\"100%\" bgcolor=\"#DEEDF7\">\n" + "<tr>\n" + "<td>\n" + "<div id=\"title_top\">[?title]</div>\n" + "</td></tr>\n" |
X |
282 |
// + "<tr>\n" + "<td>\n" + "<hr style=\"position: absolute;left:0px;top:28px;height: 1px;color: #bdc7c6;width: 99%;\">\n" + "</td>\n" |
|
283 |
// + "</tr>\n" |
|
284 |
+ "<tr><td>\n" + "<div id=\"tplt-top\">\n" + "\t\t\t<%@ include file=\"top.jsp\" %>\n" + "\t\t</div>\n" + "</td></tr>\n" + "</table>"; |
a6a76f
|
285 |
data = data.replace("[?TopAndTitle]", TopAndTitle_str);// 替换功能号标识符 |
F |
286 |
data = data.replace("[?NorthHeight]", "height:68px;");// 替换部分功能号index.jsp页面的top层的宽度 |
|
287 |
} else {// 如果没有配置显示大标题 |
|
288 |
|
|
289 |
String TopAndTitle_str = "<script type=\"text/javascript\">\n" + "var bh=30;\n" + "</script>\n" + "<div id=\"tplt-top\">\n" + "\t\t\t<%@ include file=\"top.jsp\" %>\n" + "</div>"; |
|
290 |
|
|
291 |
data = data.replace("[?TopAndTitle]", TopAndTitle_str);// 替换功能号标识符 |
|
292 |
data = data.replace("[?NorthHeight]", "");// 替换部分功能号index.jsp页面的top层的宽度 |
|
293 |
} |
|
294 |
} |
|
295 |
// --------从gform表获取是否显示大标题字段值(isTitle)判断是否显示大标题,并替换标识符-2012-02-20-syz-----[end]-------------------------// |
|
296 |
|
c2dc59
|
297 |
//-------------文字颜色说明---------xin 2022-5-18 16:09:54-----------// |
X |
298 |
StringBuilder colorText =new StringBuilder();//文字颜色说明 |
|
299 |
if(StringUtils.isNotBlank(baseBean.formID)) { |
|
300 |
List<T9685Entity> colorList = apiServiceIfc.get9685List(Integer.parseInt(baseBean.formID)); |
|
301 |
if (colorList != null && colorList.size() > 0) { |
|
302 |
colorText.append("文字颜色说明"); |
|
303 |
for (T9685Entity t : colorList) { |
|
304 |
colorText.append("<div><span title=\"" + t.getItemMemo() + "\" class=\"spanColor\" " + |
|
305 |
"style=\"background-color: " + t.getHexColor() + "\"></span>" + |
|
306 |
"<span style=\"color: " + t.getHexColor() + "\">" + |
|
307 |
t.getColorName() + "</span></div>"); |
|
308 |
} |
|
309 |
} |
|
310 |
} |
|
311 |
//文字颜色说明 xin 2022-5-18 15:53:13 |
|
312 |
data = data.replace("[?ColorDescription]",colorText); |
a6a76f
|
313 |
// ---------------- |
F |
314 |
data = data.replace("[?title]", gformInfo.get("formname") + ""); |
|
315 |
data = data.replace("[?treewidth]", gformInfo.get("treewidth") + ""); |
|
316 |
data = data.replaceAll("@gridJsp@", baseBean.formID + "_grid.jsp"); |
|
317 |
buildPageCode(data, fileName, baseBean); |
|
318 |
} |
|
319 |
|
|
320 |
} |