xinyb
2022-05-18 c2dc593c9b8948718381f3a2996b6f94a59ad80a
提交 | 用户 | 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 }