xinyb
2023-09-25 44e86566db5ae0f691c55f97d25fb1f54a65e508
提交 | 用户 | age
a6a76f 1 package com.yc.service.panel.v2;
F 2
3 import com.google.gson.JsonArray;
4 import com.yc.action.grid.GridUtils;
5 import com.yc.exception.ApplicationException;
6 import com.yc.service.build.type.v2.BaseBean;
7 import com.yc.service.build.type.v2.BaseImpl;
8 import com.yc.service.commons.GformIfc;
9 import com.yc.service.excel.ExcelIfc;
10 import com.yc.service.grid.GridServiceIfc;
11 import com.yc.service.impl.DBHelper;
12 import com.yc.service.panel.*;
13 import com.yc.service.panel.assist.AssistIfc;
14 import com.yc.service.panel.inv.EmptyConn;
15 import com.yc.utils.FileUtil;
16 import com.yc.utils.SessionKey;
875a46 17 import org.apache.commons.lang3.StringUtils;
a6a76f 18 import org.springframework.beans.factory.annotation.Autowired;
F 19 import org.springframework.dao.DataAccessException;
20 import org.springframework.stereotype.Service;
21
22 import java.io.File;
23 import java.sql.SQLException;
24 import java.util.*;
843144 25 import java.util.regex.Pattern;
a6a76f 26
F 27 /**
28  * @author pengbei
29  */
30 @Service("PanelServiceV2")
31 public class PanelServiceImpl implements PanelServiceIfc {
32     @Autowired
33     SystemSettingsDao systemSettingsBo;
34     @Autowired
35     TypeControlDao typeControlDao;
36     @Autowired
37     private GformFilterIfc filterIfc;
38     @Autowired
39     private SqlDBHelperIfc sqlDBHelperIfc;
40     @Autowired
41     private AssistIfc assistIfc;
42     @Autowired
43     private GfieldApprovedButtonIfc gButtonIfc;
44     @Autowired
45     ExcelIfc excelIfc;
46     @Autowired
47     GridServiceIfc gridServiceIfc;
48     @Autowired
49     private GformIfc gformIfc;
50
51
52
53     // class 样式
54
55
56     // end
57     @Override
58     public String getPannelTalbe(int formId, int formType) throws Exception {
59         //TODO 有可能有问题
60         PanelBean panelBean = new PanelBean();
61         return setTable(hasTiaoJian(formType, panelBean), formId, panelBean.pHelper);
62     }
63
64     /**
65      *
66      */
67     @Override
68     public Map<String, String> getPanelHtml(int formId, int formType, String[] templeteFile, Map<String, Object> gformInfo)
69             throws Exception {
70         BaseBean base = (BaseBean) gformInfo.get(BaseImpl.BEAN_INFO);
71         List<Map<String, Object>> staList = assistIfc.getStatusByFormId(formId);
72         Map<String, String> map = new HashMap<String, String>();
73         StringBuffer htmlBuffer = new StringBuffer();
74         StringBuffer infoJsBuffer = new StringBuffer();
75         PanelBean panelBean = new PanelBean();
76         PanelParmHelper pHelper = panelBean.pHelper;
77         if (formType == 1) panelBean.panel11 = false;
78         if (formType == 2) panelBean.shorten = true;
79         if(formType==77||formType==496||formType==498||formType==16){ panelBean.indexPan=base.getIndexPan();}
80         if(formType==496||formType==498||formType==16) {panelBean.isPrimaryPan=base.isPrimaryPan();}
81         if(formType==20){
82             panelBean.shorten=base.isShorten();
83             panelBean.indexPan=base.getIndexPan();
84             panelBean.panel11=base.isPanel11();
85             panelBean.notPan=base.isNotPan();
86             panelBean.setNotPan(panelBean.notPan);
87             panelBean.pHelper.primary=panelBean.indexPan;
88         }
89         setValueAll(formId, formType, pHelper, panelBean);
90         typeControlDao.setFunLoadList(null, true, panelBean);
91         typeControlDao.setFunList("", true, panelBean);
92         panelBean.setButtonList(gButtonIfc.getButton(formId)); // 查询该面板是否有按钮
93         pHelper.URI = base.getURI(); // 物理路径
94         pHelper.realPath = File.separator + "app" + File.separator + base.getDataBaseId() + File.separator
95                 + base.getVersionId() + File.separator + base.getLanguage() + File.separator + base.getFormID()
96                 + File.separator;
97         pHelper.maps = new HashMap<String, Map<String, String>>();// 保存字段Id,即数据库中的列,不让其暴露
98         pHelper.mapHids = new HashMap<String, Map<String, String>>();
99         pHelper.intvalueMap = new HashMap<String, String>();
100         pHelper.html_Col = new StringBuffer();
101         pHelper.panelAudit = new JsonArray();
102         pHelper.jsList = systemSettingsBo.getJs(formId);
103         List<Map<String, Object>> openDocs = sqlDBHelperIfc.getHashMapObj(
98c7bf 104                 "set nocount on ; select execproc,o.formtype as otype,m.formtype as mtype from _sysOpenDoc o inner join _sysMenu m on (o.formid=m.formid) where o.formid="
a6a76f 105                         + formId + " and o.formtype=" + formType + " order by seqn ;");
98c7bf 106         panelBean.openDoc = "set nocount on ; ";
a6a76f 107         for (Map<String, Object> openMap : openDocs) {
F 108             panelBean.openDoc += "exec " + DBHelper.getValue(openMap, "execproc").replaceAll(";", ",") + ";";
109         }
110         if (templeteFile.length == 3) {// 判断是否跳过子面板审核代码。
111             pHelper.panelbol = (templeteFile[2] == null ? true : false);
112         }
113         String moBan = templeteFile[0];// 模板集合:数组[0]:面板2模板(panel.jsp),在查询中窗体如9类型为查询面板模板(panelSearch.jsp);数组[1]:默认为模板(panelHead.jsp),查询窗口为固定模板(topPanType9.jsp)
114         switch (formType) {
115             case 9:// 9类型面板
116             case 15:
117             case 17:
118             case 499:
119             case 497:
120                 List<Map<String, Object>> gfList = filterIfc.getOrdByline(formId);
121                 List<Map<String, Object>> queryList = systemSettingsBo.getQuery(formId, 1);
122                 panelBean.setQueryList(queryList);
123                 int so = 0;
124                 if (gfList != null && gfList.size() > 0) {// 这里处理重新生成筛选面板
125                     so = 1;// 针对面板中"搜索"按钮的处理,有自定义筛选则不显示原来的查询按钮 by danaus 2014-6-5
126                     moBan = moBan.replaceAll("@panelHtml@",
127                             filterDollarStr(getJspPanSift(formId, gfList, infoJsBuffer, panelBean).toString()));// 表格上,无表格下设置
128                 } else {
129                     moBan = templeteFile[2];//
130                 }
131                 map.put("sous", so + "");
132                 break;
133             default:
134                 panelBean.isLandscape = (gformInfo != null && gformInfo.get("panellabellayout") != null
135                         && gformInfo.get("panellabellayout").toString().equals("2")) ? false : true;
136                 if (!panelBean.isLandscape) {
137                     pHelper.miaoShuTdWidth = 200;
138                     pHelper.kongJianTdWidth = 200;
139                     pHelper.kongHei = pHelper.rowHei * 2 - 7;
140                     pHelper.kongJianAndMiaoShu = pHelper.kongJianTdWidth;
141                 }
142                 pHelper.excelContext = "";
143                 pHelper.excelField = "";
144                 pHelper.excelLoca = "";
145                 pHelper.excelTitles = "";
146                 pHelper.panJs43 = "";
44e865 147                 if (formType != 1) {//不是1类型窗体进入生成面板
X 148                     String panelUp = filterDollarStr(getPanel(formId, infoJsBuffer, false, panelBean).toString());// 获取格线之上的面板控件值
149                     String panelDow = filterDollarStr(getPanel(formId, infoJsBuffer, true, panelBean).toString());// 获取格线之下的面板控件值
150                     panelUp = ((panelBean.notPan || formType == 16) ? "" : getPar(pHelper))
151                             + getJspPanSession(formId, pHelper.maps, pHelper) + panelUp;// 16是496设置的类型,(字段的格式设置)
152                     moBan = moBan.replaceAll("@panelHtml@", panelUp);// 表格上(多数是生成面板需要的控件)
153                     moBan = moBan.replaceAll("@panelDownHtml@", panelDow);// 表格下
154                 } else {
155                     moBan = moBan.replaceAll("@panelHtml@", "");// 表格上(多数是生成面板需要的控件)
156                     moBan = moBan.replaceAll("@panelDownHtml@", "");// 表格下
157                 }
a6a76f 158                 moBan = moBan.replaceFirst("@wherePan496@", (formType == 16) ? "wherePan496" : "wherePan");// 替换
F 159                 // moBan+=getTypeIni();
160                 // 生成取消确认代码 by danaus 2014-5-29
161                 Map<String, Object> canel = this.gformIfc.getGformInfo(
162                         "CancelBtnProcName,CancelBtnExpression,CancelBtnEditStatus,CancelBtnName,RevokeBtnProcName,RevokeBtnExpression,RevokeBtnEditStatus",
163                         formId);
164                 String cancelBtnExpression=GridUtils.prossRowSetDataType_StringByReplaceBlank(canel
165                         ,"CancelBtnExpression");
166                 moBan = moBan
167                         .replaceAll("@canceldocstatus@",
168                                 canel.get("CancelBtnEditStatus") == null ? "" : (String) canel.get("CancelBtnEditStatus"))
169                         .replaceAll("@iscanel@",
170                                 canel.get("CancelBtnProcName") == null || "".equals(canel.get("CancelBtnProcName")) ? "0"
171                                         : "1")
172                         .replaceAll("@CancelBtnName@",
173                                 canel.get("CancelBtnName") == null || "".equals(canel.get("CancelBtnName")) ? "取消确认"
174                                         : (String) canel.get("CancelBtnName"))
175                         .replaceAll("@sqlException@",cancelBtnExpression);
176                 // String procName=(String)canel.get("CancelBtnProcName");
177                 // 撤回功能
178                 String revokeBtnExpression=GridUtils.prossRowSetDataType_StringByReplaceBlank(canel
179                         ,"RevokeBtnExpression");
180                 moBan = moBan
181                         .replaceAll("@RevokeBtnEditStatus@",
182                                 canel.get("RevokeBtnEditStatus") == null ? "" : (String) canel.get("RevokeBtnEditStatus"))
183                         .replaceAll("@isrevoke@",
184                                 canel.get("RevokeBtnProcName") == null || "".equals(canel.get("RevokeBtnProcName")) ? "0"
185                                         : "1")
186                         .replaceAll("@RevokeBtnExpression@",revokeBtnExpression);
187                 // ----end
188
189                 // 把需要导出的写到excel
190                 String filename = "/panel_data";
191                 if (formType == 2) {
192                     filename = "/data";// 是为了作为格线数据来处理
193                 }
194                 if (pHelper.excelContext.length() > 0) {
195                     try {
196
197                         FileUtil.writeFile((formType == 2 ? gformInfo.get("formname") + "-" : "") + pHelper.excelContext + "-"
198                                 + pHelper.tableIs + "-" + pHelper.excelField + "-" + pHelper.excelLoca + "-"
199                                 + pHelper.excelTitles, pHelper.URI + pHelper.realPath + "/" + formType + filename);// 写到文件里面
200                         pHelper.isto = true;
201                     } catch (DataAccessException e) {
202                         throw new ApplicationException(e.getMessage());
203                     }
204                 }
205                 moBan = moBan.replace("@autoOpen@", !GridUtils.prossRowSetDataType_Boolean(gformInfo, "autoOpen") ? ",' !1=2'" : "");
44e865 206                 moBan = moBan.replace("@pansetInv@", (formType == 1 ? "" : getTypeIni(pHelper)));// 付必要初始值,调用topPanInv.txt(1类型窗体不生成这个文件)
a6a76f 207                 moBan = moBan.replace("@panelScript@", getJspPanScript(formId, "", panelBean));
F 208                 // added by johns wang,2017-10-31
209                 moBan = moBan.replace("@uploadEditStatusMap@", getUploadEditStatusMap(pHelper));
210                 break;
211         }
212
213         if (";38;238;".indexOf(";" + formType + ";") != -1) {
214             map.put("panel238", "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\" "
215                     + " pageEncoding=\"UTF-8\"%><html><head><title>238</title></head><body><iframe id=\"abc\" "
216                     + "name=\"abc\" src=\"\" height=\"100%\" width=\"100%\" style=\"display: none;\"  frameborder=\"0\"> "
217                     + "</iframe></body></html>");
218         }
219         moBan += "@addscript@";
220         moBan = outRepl(moBan, panelBean);// 替换面板里面设置的特殊替换信息。
221         moBan = moBan.replaceAll("@formId@", String.valueOf(formId)).replaceAll("@formType@", String.valueOf(formType));
222         infoJsBuffer = new StringBuffer(DBHelper.replaceBr(infoJsBuffer.toString()));
223         htmlBuffer.append(" panMain[panIndex].panInfo={");
224         htmlBuffer.append(infoJsBuffer.length() > 0 ? infoJsBuffer.delete(infoJsBuffer.length() - 1, infoJsBuffer.length()) : infoJsBuffer);
225         htmlBuffer.append("};");
226         htmlBuffer.append("\r\n panMain[panIndex].html_Col=[");
227         htmlBuffer.append(pHelper.html_Col.length() > 0 ? pHelper.html_Col.delete(pHelper.html_Col.length() - 1, pHelper.html_Col.length()) : pHelper.html_Col);
228         htmlBuffer.append("];");
229         htmlBuffer.append("\r\n panMain[panIndex].panelAuditValue=<%=jsonOldPanel%>;");
230         htmlBuffer.append("\r\n panMain[panIndex].auditFiled=" + pHelper.panelAudit + ";");// 审计字段
231         htmlBuffer.append("\r\n panMain[panIndex].panelTitle=\"\";");// 动态描述用到
232         htmlBuffer.append("\r\n panMain[panIndex].select="+GridUtils.toJson(panelBean.selectMap)+";");// 动态描述用到
233         htmlBuffer.append("\r\n if(typeof liewidth !='undefined'){liewidth=" + pHelper.liewidth + ";}");// 动态描述用到
234         pHelper.liemut = 0;
235         pHelper.liewidth = 0;
236         String sqlparam = pHelper.sqlBuffer != null ? pHelper.sqlBuffer.toString() : "";
237         htmlBuffer.append("\r\n panMain[panIndex].sqlParam=" + getJsList(DBHelper.getStrRepInfo(sqlparam, "&")));
238         if (staList.size() > 0) {// 没有设置的不要显示此变量(stas)
239             htmlBuffer.append("\r\n panMain[panIndex].stas={}");
240             for (Map<String, Object> mapSta : staList) {
241                 htmlBuffer.append("\r\n panMain[panIndex].stas['" + DBHelper.getValue(mapSta, "interValue") + "']='"
242                         + DBHelper.getValue(mapSta, "dictvalue") + "';");
243             }
244         }
245         base.setOverlapText(panelBean.overlapText);//设置面板控件出现重叠的提示信息 xin 2020-12-4 09:56:18
246         moBan = moBan.replaceAll("@panInfo@", htmlBuffer.toString());
247         map.put("panHTML", moBan);
248         map.put("panelControl", templeteFile[1].replaceAll("@MapPut@", sqlparam));
249         map.put("zhu", pHelper.tableIs);
250         return map;
251     }
252
253     private String getUploadEditStatusMap(PanelParmHelper pHelper) {
254         Map<String, Map<String, String>> mapList = getMaps(pHelper);
255         String rtn = ""; // <% Map<String,String> uploadEditStatusMap = new
256         // HashMap<String,String>() ;
257         for (String panId : mapList.keySet()) {
258             if (mapList.get(panId).get("type") != null && (mapList.get(panId).get("type").equals("9")
259                     || mapList.get(panId).get("type").equals("19") || mapList.get(panId).get("type").equals("40"))) {
260                 rtn += panId + ":'"
261                         + (mapList.get(panId).get("headflag") == null ? 0 : mapList.get(panId).get("headflag")) + ";pb#"
262                         + (mapList.get(panId).get("editstatus") == null ? "" : mapList.get(panId).get("editstatus"))
263                         + "',";
264             }
265         }
266         rtn = " panMain[panIndex].picState={" + ("".equals(rtn) ? "" : (rtn.substring(0, rtn.length() - 1))) + "};";
267         return rtn;
268     }
269
270
271     /**
272      * 把list集合写成页面js集合
273      *
274      * @param parmList
275      * @return
276      */
277     private String getJsList(List<String> parmList) {
278         StringBuffer re_ = new StringBuffer();
279         re_.append("[");
280         if (parmList.size() > 0) {
281             for (int i = 0; i < parmList.size(); i++) {
282                 re_.append("'").append(parmList.get(i)).append("',");
283             }
284             re_.deleteCharAt(re_.length() - 1);
285         }
286         re_.append("]");// 默认
287         return re_.toString();
288     }
289
290     /**
291      * 处理初始值信息
292      *
293      * @param formId   功能号
294      * @param formType 功能类型
295      * @throws Exception
296      */
297     private void setValueAll(int formId, int formType, PanelParmHelper pHelper, PanelBean panelBean) throws Exception {
298         pHelper.setMoren();
299         pHelper.sqlBuffer = new StringBuffer();
300         pHelper.pan11 = panelBean.panel11;
301         pHelper.formTypePan = formType;
302         pHelper.formIdPan = formId;
303         pHelper.initialValue.formid = formId;
304         if (panelBean.isPrimaryPan) {
305             panelBean.tabindexIs = 0;
306         }
307         pHelper.primary = 0;
308         pHelper.idNo = 0;
309         pHelper.eConn = new EmptyConn();// 清空关联
310         pHelper.jsList = systemSettingsBo.getJs(formId);
311         if (panelBean.shorten) {
312             pHelper.miaoShuTdWidth -= 20;
313             pHelper.kongJianTdWidth -= 15;
314             pHelper.kongJianAndMiaoShu = pHelper.kongJianTdWidth + pHelper.miaoShuTdWidth;
315         }
316         setTable(hasTiaoJian(formType, panelBean), pHelper);
317         systemSettingsBo.setPanelHelper(pHelper);
318         try {
319             boolean bol = (pHelper.tableIs.indexOf(".do") != -1 ? false : true);
320             if (bol) {
321                 pHelper.verificationMap = systemSettingsBo.getVerification(pHelper.tableIs);
322             }
323         } catch (SQLException e) {
324             e.printStackTrace();
325         }
326         //typeControlDao.setVerificationMap(pHelper.verificationMap);--
327         panelBean.pHelper = pHelper;
328         panelBean.initialValue = pHelper.initialValue;
329         panelBean.id = pHelper.id;
330         panelBean.setKeyBack(setKeyBack(pHelper.formTypePan));
331         panelBean.setToKeBack(setKeyBackBytoKeBack(pHelper.formTypePan));
332     }
333
334     private boolean setKeyBack(int formType) {// 要不要回车触发
335         switch (formType) {
336             case 5:
337             case 8:
338             case 9:
339             case 17:
340             case 16:
341             case 18:
342             case 19:
343             case 38:
344                 return false;
345             default:
346                 return true;
347         }
348     }
349
350     private boolean setKeyBackBytoKeBack(int formType) {
351         switch (formType) {
352             case 301:
353             case 20:
354                 return true;
355             default:
356                 return false;
357         }
358     }
359
360     public List<Map<String, Object>> getMacAll(String table) throws SQLException {
98c7bf 361         String sql = "set nocount on ; select fieldiD,initvalue from " + table;// MASTERCODE
a6a76f 362         List<Map<String, Object>> list = sqlDBHelperIfc.getHashMapObj(sql);
F 363         List<Map<String, Object>> list1 = new ArrayList<Map<String, Object>>();
364         for (int i = 0; i < list.size(); i++) {
365             if (DBHelper.getValue(list.get(i), "initvalue").toUpperCase().equals("MASTERCODE")) {
366                 list1.add(list.get(i));
367             }
368         }
369         return list1;
370     }
371
372     /**
373      * 替换一些信息
374      *
375      * @param moBan
376      * @return
377      */
378     private String outRepl(String moBan, PanelBean panelBean) {
379         PanelParmHelper pHelper = panelBean.pHelper;
380         moBan = moBan.replaceAll("@index@", String.valueOf(panelBean.indexPan));
381         moBan = moBan.replaceAll("@maxCols@", String.valueOf(pHelper.colsWidth));
382         moBan = moBan.replaceAll("@openDoc@", panelBean.openDoc);
383         moBan = moBan.replaceAll("@doc@", (panelBean.isDoc ? "false" : "true"));
384         moBan = moBan.replaceAll("@maoshuF@", (panelBean.isLandscape ? "float: left;text-align:right;" : "text-align:left;"));
385         moBan = moBan.replaceAll("@rowHei@", String.valueOf(pHelper.kongHei));
386         moBan = moBan.replaceAll("@kongJian@", String.valueOf(pHelper.kongJianAndMiaoShu + 20));
387         moBan = moBan.replaceAll("@miaoShuo@", String.valueOf(pHelper.miaoShuTdWidth));
388         moBan = moBan.replaceAll("@zhu@", pHelper.tableIs);
389         moBan = moBan.replaceAll("@minxi@", pHelper.tableIs2);
390         moBan = moBan.replaceAll("@isPrimaryPan@", (panelBean.isPrimaryPan ? "1" : "0"));
391         String linkJs = pHelper.linkJsDate + pHelper.linkJsFu;
392         if (pHelper.jsList != null && pHelper.jsList.size() > 0) {
393             String jsDin = "";
394             String jsDiao = "";
395             for (int i = 0; i < pHelper.jsList.size(); i++) {
396                 if ("1".equals(DBHelper.getValue(pHelper.jsList.get(i), "eventType"))) {
397                     jsDin += filterDollarStr(DBHelper.getValue(pHelper.jsList.get(i), "jsContent"));
398                 } else {
399                     jsDiao += filterDollarStr(DBHelper.getValue(pHelper.jsList.get(i), "jsContent"));
400                 }
401             }
402             moBan = moBan.replaceAll("@addscript@", jsDiao);
403             moBan = moBan.replaceAll("@linkscript@", jsDin + linkJs);
404         }
405         moBan = moBan.replaceAll("@pan43Type@", pHelper.panJs43);// 43控件
406         moBan = moBan.replaceAll("@linkscript@", linkJs);
407         moBan = moBan.replaceAll("@addscript@", "");
408         String stringTiPan1 = "";
409         String strTi = "";
410         String tiStr = "";
411         HashMap<String, String> map = null;
412         String sql = "select predocstatus from gform where formid=" + pHelper.formIdPan;
413         List<HashMap<String, String>> listS = sqlDBHelperIfc.getHashMap(sql);
414         if (listS != null && listS.size() > 0) {
415             map = listS.get(0);
416         }
417         tiStr = "out.print(\"        getStatu(panMain[panIndex].statueis,'" + map.get("predocstatus") + "',"
418                 + pHelper.formTypePan + ");\");";
419         switch (pHelper.formTypePan) {
420             case 9:// 9类型面板
421             case 15:
422             case 17:
423                 // stringTiPan1 = "where += \" and
424                 // (\"+getqx('<%=session.getAttribute(\"@usercode\")%>','<%=session.getAttribute(\"@department\")%>','<%=session.getAttribute(\"@rolename\")%>')+\")\";";
425                 // %号在前台要编程@~这里没有处理 暂时不用了 stringTiPan1 = "where += \" and
426                 // <%=DBHelper.getQx(session)
427                 // %>\";";//前面这个变量@department是否用,不确定,则统一进入这个方法,需要改统一该一个地方
428                 stringTiPan1 = "where += \" and (\"+getqx('<%=session.getAttribute(\"" + SessionKey.USERCODE
429                         + "\")%>','<%=session.getAttribute(\"" + SessionKey.CCCODE + "\")%>','<%=session.getAttribute(\""
430                         + SessionKey.ROLE_NAME + "\")%>')+\")\";";
431                 // stringTiPan1=stringTiPan1.replaceAll("%","@~");
432                 break;
433             case 5:// 后添除16窗体的权限
434             case 16:
435             case 498:
436             case 497:
437             case 8:
438                 strTi = "panMain[panIndex].isReadTo('\"+session.getAttribute(\"" + SessionKey.USERCODE
439                         + "\")+\"','\"+session.getAttribute(\"" + SessionKey.ROLE_NAME
440                         + "\")+\"','\"+session.getAttribute(\"" + SessionKey.DEPARTMENT
441                         + "\")+\";\"+session.getAttribute(\"" + SessionKey.CCCODE + "\")+\"');";
442                 tiStr += "\r\n       out.print(\"\\\\r\\\\n        " + strTi + "\");";
443                 break;
444             default:
445                 tiStr = "";
446                 break;
447         }
448         moBan = moBan.replaceAll("@formtypedocstatus@", tiStr);
449         moBan = moBan.replaceAll("@Add@", stringTiPan1);
450         Map<String, Map<String, String>> mapList = getMaps(pHelper);
451         moBan = moBan.replaceAll("@selectColAll@", getSqlCol(mapList, pHelper));
452         return moBan;
453     }
454
455     /**
456      * 替换文本中$符号
457      *
458      * @param str 含有$符号的字符串
459      * @return 返回替换后的字符串
460      */
461     public static String filterDollarStr(String str) {
462         String sReturn = "";
463         if (!str.trim().equals("")) {
464             if (str.indexOf('$', 0) > -1) {
465                 while (str.length() > 0) {
466                     if (str.indexOf('$', 0) > -1) {
467                         sReturn += str.subSequence(0, str.indexOf('$', 0));
468                         sReturn += "\\$";
469                         str = str.substring(str.indexOf('$', 0) + 1, str.length());
470                     } else {
471                         sReturn += str;
472                         str = "";
473                     }
474                 }
475             } else {
476                 sReturn = str;
477             }
478         }
479         return sReturn;
480     }
481
482     /**
483      * 获得面板显示
484      *
485      * @param formId       功能号
486      * @param infoJsBuffer 功能号组装的js集合信息
487      * @param downGride    获得是否表格下面板
488      * @return 返回显示代码
489      */
490     @Deprecated
491     private StringBuffer getPanel(int formId, StringBuffer infoJsBuffer, boolean downGride, PanelBean panelBean)
492             throws Exception {
98c7bf 493         //PanelParmHelper pHelper = panelBean.pHelper;
a6a76f 494         StringBuffer htmlBuffer = new StringBuffer();
F 495 //        panelBean.control38height=0;
496         if (downGride) {
497             if (panelBean.isPrimaryPan) {
498                 htmlBuffer = getPanel(formId, infoJsBuffer, 1, panelBean);// 原格线下显示
499                 List<Map<String, Object>> inFormList = systemSettingsBo.getFieldFormId(formId);
500                 int tiformid = 0;
501                 for (Map<String, Object> map : inFormList) {
502                     tiformid = DBHelper.getValueInt(map, "MasterFieldShowLocation");
503                     htmlBuffer.append(getPanel(formId, infoJsBuffer, tiformid, panelBean));
504                     htmlBuffer.append("<script>$(document).ready(function(){panFiled.replace(").append(formId)
505                             .append(",").append(tiformid).append(");});</script>");
506                 }
507             }
508         } else {
509             if (panelBean.isPrimaryPan) {
510                 htmlBuffer = getPanel(formId, infoJsBuffer, 0, panelBean);// 原格线上显示
511             } else {
512                 htmlBuffer = getPanel(formId, infoJsBuffer, 1, panelBean);// 原格线下显示
513             }
514         }
515         return htmlBuffer;
516     }
517
518     /**
519      * 获得面板显示
520      *
521      * @param formId       功能号
522      * @param infoJsBuffer 功能号组装的js集合信息
523      * @param downFormid   获得是否表格下面板
524      * @return 返回显示代码
525      */
526     private StringBuffer getPanel(int formId, StringBuffer infoJsBuffer, int downFormid, PanelBean panelBean)
527             throws Exception {
528         PanelParmHelper pHelper = panelBean.pHelper;
529         StringBuffer htmlBuffer = new StringBuffer();
530         StringBuffer hidBuffer = new StringBuffer();
531         Map<String, Integer> maxMap = new HashMap<String, Integer>();
532         Map<String, String> listRC = new TreeMap<String, String>();
533         String listmax = "";
534         // 处理
535         List<String> tabsheetNameS = systemSettingsBo.selectTabsheetname(formId, downFormid);// false为非grid下的面板
536         // if (tabsheetNameS.size() > 1) {
537         tabsheetNameS.remove("");// 面板页多于2个时,去掉为空的面板页
538         tabsheetNameS.add("null");
539         // }
540         int lineNO = systemSettingsBo.getShowMaxRow(formId, pHelper.primary, downFormid);// 总行数
541         lineNO = lineNO + ((tabsheetNameS.size() > 1) ? 1 : 0);
542         List<Map<String, Object>> listSys = systemSettingsBo.selectList(formId, pHelper.primary, downFormid);// 暂时为表格上面板,设计好后改
543         Map<String, Object> maxRC = systemSettingsBo.getFormIdtable(formId, pHelper.primary, downFormid);
544         try {
545             listmax = gridServiceIfc.getTypeLengthInfo(pHelper.tableIs);// 返回char
546             // nchar,varchar
547             // nvarchar类型的字段和长度。操作时间:2014-7-2
548             // 16:39:42
549         } catch (Exception e) {
550             listmax = null;
551             maxMap = null;
552         }
553         if (listmax != null) {// 处理返回的char nchar,varchar nvarchar类型
554             String[] max = listmax.split(",");
555             for (int m = 0; m < max.length; m++) {
556                 try {
557                     String[] maindex = max[m].split("-");// 获取字段名和字段的长度
558                     if (maindex.length < 3) {// 处理出现负数的问题 负数不需要添加到里面 2014-7-5
559                         // 10:13:34
560                         maxMap.put(maindex[0].toLowerCase(), Integer.parseInt(maindex[1]));// 组装字段和长度操作时间:2014-7-2
561                         // 16:39:29
562                     }
563                 } catch (Exception e) {
564                     throw new Exception("【"+max[m]+"】数据类型长度为空,请检查数据类型是否正确");
565                 }
566             }
567         }
568         // 在上面已经把分页,面板位置,及分页内部处理考虑好了
569         int kuaHang = 0;
570         int kuaLie = 0;
571         int danLie = 0;
572         int danHang = 0;
573         String yePanel = "";
574         String showMiaoShu = "";
575         int yinMiaoShu = 0;
576         String miaoshuHtml = "";
577         String control = "";
578         String describeSQL = "";
579         StringBuffer sb1 = new StringBuffer();// 面板需要导出的字段名+标题
580         StringBuffer sb2 = new StringBuffer();// 面板需要导出的字段名
581         StringBuffer sb3 = new StringBuffer();// 面板需要导出的字段位置(在几行几列)
582         StringBuffer sb4 = new StringBuffer();// 面板需要导出的文件名称设置
583         for (Map<String, Object> map : listSys) {// 在这里循环,组装出每一个控件
5f1f90 584             pHelper.div42="";
a6a76f 585             pHelper.initialValue.setInv(map);
F 586             map.put(TypeControl.PANEL_INFO, panelBean);
587             danLie = DBHelper.getValueInt(map, "ColNo");
588             danHang = DBHelper.getValueInt(map, "RowNo");
589             kuaHang = DBHelper.getValueInt(map, "HeightNum");
590             kuaLie = DBHelper.getValueInt(map, "LengthNum");
591             yePanel = DBHelper.getValue(map, "tabsheetname");
592             showMiaoShu = DBHelper.replaceBr(DBHelper.getValue(map, "fieldname"));
593             showMiaoShu = showMiaoShu + (showMiaoShu.equals("") ? "&nbsp;&nbsp;" : "");// 获得些必要信息,避免重复获得
594             yinMiaoShu = DBHelper.getValueInt(map, "Hidelabel");
595             pHelper.id = DBHelper.getValue(map, "FieldID").toLowerCase();// 给控件赋值ID
5f1f90 596             //如果是42控件或者3类型设置了42控制的值这为true
a6a76f 597             boolean boldiv = (DBHelper.getValueInt(map, "ControlType") == 42
F 598                     || !DBHelper.getValue(map, "SuggestFileds").equals("")) ? true : false;
599             // 增加面板的excel导出,2014-3-25,by danaus
600             if (DBHelper.getValueInt(map, "isExport") == 1) {
601                 String displayformat = DBHelper.getValue(map, "Displayformat");
602                 if (displayformat != null && !displayformat.isEmpty()) {
603                     sb1.append(DBHelper.getValue(map, "fieldid")).append("#")
604                             .append(DBHelper.getValue(map, "fieldname")).append("#")
605                             .append(displayformat.replaceAll("-", "~")).append(";");
606                 } else {
607                     sb1.append(DBHelper.getValue(map, "fieldid")).append("#")
608                             .append(DBHelper.getValue(map, "fieldname")).append(";");
609                 }
610                 if (DBHelper.getValueInt(map, "exportTitle") == 1)
611                     sb4.append(DBHelper.getValue(map, "fieldid")).append(";");
612                 sb3.append(DBHelper.getValue(map, "fieldid") + "#" + DBHelper.getValueInt(map, "RowNo") + ","
613                         + DBHelper.getValueInt(map, "ColNo") + "," + DBHelper.getValueInt(map, "LengthNum") + ","
614                         + DBHelper.getValueInt(map, "HeightNum")).append(";");
615                 sb2.append(DBHelper.getValue(map, "fieldid")).append(",");
616             }
617             if (DBHelper.getValueInt(map, "isCopyExclude") == 1) {
618                 pHelper.iscopy += DBHelper.getValue(map, "fieldid") + ";";// 处理复单字段
619             }
620             if (";34;36;".indexOf(";" + DBHelper.getValue(map, "ControlType") + ";") == -1) {
621                 getJsInfo(infoJsBuffer, map, panelBean);
622             }
623             // 处理审计字段
624             if (!DBHelper.getValue(map, "audit").equals("") && DBHelper.getValueInt(map, "audit") != 0) {
625                 JsonArray audit = new JsonArray();
626                 audit.add(DBHelper.getValue(map, "FieldID").toLowerCase());
627                 audit.add(DBHelper.getValue(map, "audit"));
628                 audit.add(DBHelper.getValue(map, "fieldname"));
629                 pHelper.panelAudit.add(audit);
630 //                pHelper.panelAudit.append(DBHelper.getValue(map, "FieldID").toLowerCase() + "&"
631 //                        + DBHelper.getValue(map, "audit") + "&" + DBHelper.getValue(map, "fieldname") + ";");// 审计字段,编号,审计字段描述。
632             }
633             //typeControlDao.setPanelParmHelper(pHelper);
634             if (DBHelper.getValueInt(map, "Visible") == 1 && danLie != 0 && danHang != 0) {// 显示
635                 if (!DBHelper.getValue(map, "showfieldvalueexpression").equals("")
636                         || !DBHelper.getValue(map, "stylecss").equals("")) {// 隐藏这个控件的_expr
637                     hidBuffer.append(typeControlDao.getHidTextexpr(map));
638                 }
639                 pHelper.maps = isAdd(pHelper.maps, map, pHelper);
640                 yePanel = (tabsheetNameS.size() == 1 || yePanel.trim().equals("")) ? "null" : yePanel;// 页名称
641                 map.put("tdLen", ((pHelper.kongJianAndMiaoShu + 1) * kuaLie - 1)
642                         - ((panelBean.isLandscape) ? ((yinMiaoShu == 1) ? 0 : pHelper.miaoShuTdWidth) + 5 : +10));// 减5做备用
643                 if (danLie > pHelper.liemut) {// 获取面板列控件的总宽度
644                     pHelper.liemut = danLie;
645                     pHelper.liewidth = ((danLie - 1) * ((pHelper.kongJianAndMiaoShu))) + (pHelper.kongJianAndMiaoShu);// 面板列控件的总宽度
646                 }
647                 if (showMiaoShu.substring(0, 1).indexOf("!") != -1) {//设置有动态字段描述,以!开头
648                         showMiaoShu = showMiaoShu.replaceAll("!", "");
649                         describeSQL = "\r\n<%String field" + DBHelper.getValue(map, "FieldID")
650                                 + "=build.msInfo(DBHelper.getValRepShiMS(\"" + showMiaoShu + "\",session,docMap, false));"
651                                 + "\r\n pantit+=\"" + pHelper.id + "&#040;\"+field" + DBHelper.getValue(map, "FieldID")
652                                 + "+\"&#039;\";%>\r\n";
653                         showMiaoShu = "<%=field" + DBHelper.getValue(map, "FieldID") + "%>";
654                 }
655                 if (yinMiaoShu == 1) {
656                     miaoshuHtml = ((!panelBean.isLandscape) ? "<div class=\"" + panelBean.miaoshu_pan + "\">&nbsp;</div>" : "");
657                 } else {
7bac0e 658                     miaoshuHtml = "<div class=\"" + panelBean.miaoshu_pan + "\" title=\""+showMiaoShu+"\">" + showMiaoShu + "</div>";// 显示描述
a6a76f 659                 }
F 660                 showMiaoShu = (DBHelper.getValue(map, "Hints").equals("")) ? showMiaoShu
661                         : DBHelper.getValue(map, "Hints");// 提示信息获得
662                 if ((maxMap != null && maxMap.get(pHelper.id) != null)
663                         || !DBHelper.getValue(map, "TipsExpression").equals("")) {// 控制控件描述的限定长度操作时间2014-7-3
664                     // 10:07:14
665                     if (DBHelper.getValueInt(map, "ControlType") != 31 && DBHelper.getValueInt(map, "ControlType") != 2
666                             && DBHelper.getValue(map, "TipsExpression").equals("")) {// 下拉不需要提示
667                         showMiaoShu = showMiaoShu + " 【最长" + maxMap.get(pHelper.id) + "个字符(每个汉字占2个字符)】";// 提示限定长度描述
668                     }
669                     if (!DBHelper.getValue(map, "TipsExpression").equals("")) {
670                         if (DBHelper.getValue(map, "TipsExpression").indexOf("!") != -1) {// 动态查询信息的时候
671                             showMiaoShu = "<%=DBHelper.getValue(docMap,\"" + pHelper.id + "_tips\",mapAll)%>";
672                         } else {// 没有动态查询时
673                             showMiaoShu = DBHelper.getValue(map, "TipsExpression");
674                         }
675                     }
676                 }
677                 // miaoshuHtml表示面板控件的名称:如:(单号)。showMiaoShu表示面板控件的提示信息:如:(单号【最长16个字符(每个汉字占2个字符)】
fc3567 678                 control = describeSQL + miaoshuHtml + "\n<div class=\"" + (yinMiaoShu==1?panelBean.control_div+"1":panelBean.control_div) + "\" >\n <span class=\"\" title=\"" + showMiaoShu + "\" >\n";
a6a76f 679                 //这里的tabs38属性是处理页面页卡的38类型控件显示边框问题-xin 2018-11-5 15:17:48
F 680                 map.put("tabs38", yePanel);
681                 if(listRC.get(yePanel + "R" + danHang + "C" + danLie)==null) {//不存在的话就保存到map里
682                     // yePanel代表小页卡名,如果值是null表示不是在小页卡。R代表行号,如:R1代表在第一行。C代表列号,如:C1代表在第一列。组合起来就是:第一行的第一列位置。
683                     listRC.put(yePanel + "R" + danHang + "C" + danLie, control + typeControlDao.getComponentForPanel(map, false, maxMap) + (boldiv ? pHelper.div42 : ""));
684                     listRC.put(yePanel + "R" + danHang + "C" + danLie+"-idd",DBHelper.getValue(map, "fieldname")+"-"+DBHelper.getValue(map, "fieldId"));
685                 }else {
686                     panelBean.overlapText+="<br>提示:"+formId+"-控件【"+DBHelper.getValue(map, "fieldname")+"-"+DBHelper.getValue(map, "fieldId")+"】"
687                             + "在设置界面[行][列]中和【"+listRC.get(yePanel + "R" + danHang + "C" + danLie+"-idd")+"】出现重叠。"
688                                     + "【"+DBHelper.getValue(map, "fieldname")+"-"+DBHelper.getValue(map, "fieldId")+"】已被忽略。";
689                 }
690                 // 38控件特殊处理
691                 kuaHang = (DBHelper.getValueInt(map, "ControlType") == 38 ? 1 : kuaHang);
692                 listRC.put(yePanel + "R" + danHang + "C" + danLie + "r", kuaHang + "");// 对应每个字段的跨行值
693                 listRC.put(yePanel + "R" + danHang + "C" + danLie + "c", kuaLie + "");// 对应每个字段的跨列值
694                 pHelper.div42 = "";
695                 describeSQL = "";
696             } else {// 隐藏字段
697                 if (DBHelper.getValueInt(map, "isLoad") == 1) {// 加载页面显示判断
698                     // 2014-7-29
699                     // 12:05:57
700                     pHelper.mapHids = isAdd(pHelper.mapHids, map, pHelper);
701                     hidBuffer.append(typeControlDao.getHidText(map));
702                     hidBuffer.append(typeControlDao.getHidTextexpr(map));//得到_expr隐藏网页代码 2018-12-25 10:00:50 xin
703                 }
704             }
705             //下面这两个是31控件或43控件设置好的sql语句,存在在对应功能号下的panelControXXXXXX.jsp
706             //之前放在面板控件显示的判断里面(上面的显示字段处理),移出来是为了解决当OA审核按钮的抄送设置不显示后,在新的OA审核界面的抄送也能加载到数据
707             //xin 2021-2-25 10:04:19
708             if (!DBHelper.getValue(map, "SqlScript").equals("")) {
709                 pHelper.sqlBuffer.append("   controls.put(\"").append(DBHelper.getValue(map, "FieldID").toLowerCase())
710                         .append("\",\"").append(DBHelper.replaceBr(DBHelper.getValue(map, "SqlScript")))
711                         .append("\");\r\n");
712             }
713             if (!DBHelper.getValue(map, "SqlWhere").equals("")) {
714                 pHelper.sqlBuffer.append("   controls.put(\"").append(DBHelper.getValue(map, "FieldID").toLowerCase())
715                         .append("Where\",\"").append(DBHelper.replaceBr(DBHelper.getValue(map, "SqlWhere")))
716                         .append("\");\r\n");
717             }
718         }
719         if (sb1.length() > 0) {
720             if (pHelper.excelContext == "") {
721                 pHelper.excelContext += sb1.substring(0, sb1.length() - 1);
722                 pHelper.excelField += sb2.substring(0, sb2.length() - 1);
723                 pHelper.excelLoca += sb3.substring(0, sb3.length() - 1);
724                 if (sb4.length() > 0)
725                     pHelper.excelTitles += sb4.substring(0, sb4.length() - 1);
726             } else {
727                 pHelper.excelContext += ";" + sb1.substring(0, sb1.length() - 1);
728                 pHelper.excelField += "," + sb2.substring(0, sb2.length() - 1);
729                 pHelper.excelLoca += ";" + sb3.substring(0, sb3.length() - 1);
730                 if (sb4.length() > 0)
731                     pHelper.excelTitles += ";" + sb4.substring(0, sb4.length() - 1);
732             }
733         }
734         // 组装成面板格式
735         // kong += (pHelper.kongHei + 1) * lineNO + ((tabsheetNameS.size() > 1)
736         // ? pHelper.rowHei : 0);
737         getjspPanTable(formId, tabsheetNameS, listRC, htmlBuffer, panelBean, maxRC, downFormid);
738         htmlBuffer.append(hidBuffer);// 追加隐藏字段信息
739         if (downFormid == 0) {// 显示在表格下面的字段不追加
740             htmlBuffer.append("<input type=\"hidden\" name=\"formIdHid\" id=\"formIdHid\" value=\"" + formId
741                     + "\" ><input type=\"hidden\" name=\"allIsChecks\" id=\"allIsChecks\" value=\"\" >");
742         }
743         return htmlBuffer;
744     }
745
746     /**
747      * 组装面板控件以table格式显示
748      *
749      * @param formId
750      * @param tabs
751      * @param listRC
752      * @param htmlBuffer
753      * @param pHelper
754      * @param maxRC
755      * @return
756      */
757     private StringBuffer getjspPanTable(int formId, List<String> tabs, Map<String, String> listRC,
758                                         StringBuffer htmlBuffer, PanelBean panelBean, Map<String, Object> maxRC, int downFormid) {
759         int Rows = DBHelper.getValueInt(maxRC, "MaxRows");// 面板上最下那一行的行数
760         int Cols = DBHelper.getValueInt(maxRC, "MaxCols");// 面板上最多的列的列数
19cf5f 761         Cols = (Cols > 4 ? Cols : 4);//默认最少列数为4列。
a6a76f 762         PanelParmHelper pHelper = panelBean.pHelper;
F 763         pHelper.colsWidth = Cols;// 获取面板跨列数
764         Map<String, Integer> Rmap = null;// 跨行集合
765         String tab = "";// 小页卡
766         String panel = "";// 存放table的面板
767         int ck = 0;// 控件跨的列
768         int rk = 0;// 控件跨的行
769         try {
fc3567 770             tab += "\r<div class=\"easyui-tabs PanelTabs\" tabPosition=\"bottom\">";//style=\"margin: 5px 0px 10px 10px;width:96%;height:auto\">";
a6a76f 771             for (int y = 0; y < tabs.size(); y++) {// 面板中的小页卡。null值表示面板不需要小页卡存在,存在null在内的其他值表示面板有页卡
F 772                 Rmap = new HashMap<String, Integer>();
773                 String table = "";// 用来组装一个table
fc3567 774                 String margin_left = "";//(tabs.get(y).equals("null") ? "margin-left: 10px;" : "margin-left: -5px;margin-bottom: 10px;margin-top: 10px;");
b7ab66 775                 table += "\r\n<table id=\"panelTable" + downFormid + "\" class=\"panel_table" + (Cols > 4 ? "ss" : "") + "\" style=\"" + margin_left
a6a76f 776                         + "width:" + (258 * Cols) + "px;\">";// p_table" + Cols + "
F 777                 for (int r = 1; r < Rows + 1; r++) {// 循环每一行
778                     table += "\r<tr>";
779                     for (int c = 1; c < Cols + 1; c++) {// 循环每一列
780                         String style = "";
781                         if (listRC.get(tabs.get(y) + "R" + r + "C" + c) != null) {// 判断r行c列是否有值
782                             rk = Integer.parseInt(listRC.get(tabs.get(y) + "R" + r + "C" + c + "r"));// 控件跨的行
783                             ck = Integer.parseInt(listRC.get(tabs.get(y) + "R" + r + "C" + c + "c"));// 控件跨的列
784                             if (rk > 1 && ck != Cols) {// 存在跨行
785                                 Rmap.put(tabs.get(y) + "R" + r + "C" + c + "r", rk);// 跨行集合(统一放到一个集合里面)
786                                 Rmap.put(tabs.get(y) + "R" + r + "C" + c + "c", ck);// 跨行集合(统一放到一个集合里面)
787                                 style += "rowspan=\"" + rk + "\" ";// 获取控件的跨行数
788                             }
789                             style += (ck > 1 ? "colspan=\"" + ck + "\" " : "");// 获取控件的跨列数
790                             style += "style=\"width:" + ((256 * ck) + ((ck - 1) * 6)) + "px;\"";
176200 791                             table += "\r\n<td class=\"panel_table_td\" " + style + "><div class=\"panelControlTDDiv\">"
X 792                                     + listRC.get(tabs.get(y) + "R" + r + "C" + c) + "</div></td>";// 组装一个td
a6a76f 793                             c = (ck > 1 ? (c + (ck - 1)) : c);// 跨列之后的位置
F 794                             r = ((rk > 1 && ck == Cols) ? (r + (rk - 1)) : r);// 跨行之后的位置
795                         } else {
796                             // 判断在跨行集合(Rmap)里面是否有跨行
797                             if (Rmap.get(tabs.get(y) + "R" + (r - 1) + "C" + c + "r") != null
798                                     && Rmap.get(tabs.get(y) + "R" + (r - 1) + "C" + c + "r") > 1) {
799                                 Rmap.put(tabs.get(y) + "R" + (r) + "C" + c + "r",
800                                         Rmap.get(tabs.get(y) + "R" + (r - 1) + "C" + c + "r") - 1);
801                                 Rmap.remove(tabs.get(y) + "R" + (r - 1) + "C" + c + "r");
802                                 Rmap.put(tabs.get(y) + "R" + (r) + "C" + (c) + "c",
803                                         Rmap.get(tabs.get(y) + "R" + (r - 1) + "C" + c + "c"));
804                                 Rmap.remove(tabs.get(y) + "R" + (r - 1) + "C" + c + "c");
805                                 c = (c + (Rmap.get(tabs.get(y) + "R" + (r) + "C" + c + "c") - 1));
806                             } else {
19cf5f 807                                 table += "\r\n<td class=\"panel_table_td\" style=\"width:256px;\">" +
X 808                                         "<div class=\"panelControlTDDiv\"></div></td>";// r行c列没值时添加一个空TD
a6a76f 809                             }
F 810                         }
811                     }
812                     table += "\r</tr>";
813                 }
814                 table += "\r</table>\n";
815
816                 if (!tabs.get(y).equals("null")) {// 有小页卡的时候进入进行组装
817                     tab += "\r<div title=\"" + tabs.get(y) + "\">" + table + "</div>";
818                 } else {
819                     panel = table;
820                 }
821             }
822             tab += "\r</div>";
823             htmlBuffer.append(tabs.size() > 1 ? tab : panel);// 赋值
824         } catch (Exception e) {
825             e.printStackTrace();
826         } finally {
827             Rmap.clear();
828         }
829         return htmlBuffer;
830     }
831
832     /**
833      * 筛选面板获得 9窗体的日期从。。。。。到。。。。。调用到。
834      *
835      * @param gfList       筛选设置集合
836      * @param infoJsBuffer 条件
837      * @return 返回面板html代码
838      * @throws Exception
839      */
840     private StringBuffer getJspPanSift(int formId, List<Map<String, Object>> gfList, StringBuffer infoJsBuffer,
841                                        PanelBean panelBean) throws Exception {
842         PanelParmHelper pHelper = panelBean.pHelper;
843         Map<String, String> panelMap = new HashMap<String, String>();
844         StringBuffer hidBuffer = new StringBuffer();
845         StringBuffer htmlBuffer = new StringBuffer();
a6789a 846         List<Integer> pailit=new ArrayList<>();
a6a76f 847         panelMap.put("null", "");// 无多页的情况处理
F 848         int kuaHang = 0;
849         int kuaLie = 0;
850         int danLie = 0;
851         int danHang = 0;
a6789a 852         int panHeight=0;
a6a76f 853         String yePanel = "";
F 854         String style = "";
855         String showMiaoShu = "";
856         int xianMiaoShu = 0;
857         String miaoshuHtml = "";
858         for (Map<String, Object> map : gfList) {
859             danLie = DBHelper.getValueInt(map, "ColNo");
860             danHang = DBHelper.getValueInt(map, "RowNo");
a6789a 861             if(!pailit.contains(danHang)){
X 862                 panHeight=panHeight+30;
863                 pailit.add(danHang);
864             }
a6a76f 865             if (";34;36;".indexOf(";" + DBHelper.getValue(map, "ControlType") + ";") == -1) {
F 866                 map.put("isLoad", "1");
867                 map.put("FT", DBHelper.getValue(map, "FT"));
868                 getJsInfo(infoJsBuffer, map, panelBean);
869             }
870             pHelper.id = DBHelper.getValue(map, "FieldID").toLowerCase();// 给控件赋值ID
871             //typeControlDao.setPanelParmHelper(pHelper);
872             if (DBHelper.getValueInt(map, "Visible") == 1 && danLie != 0 && danHang != 0) {// 显示
873                 pHelper.maps = isAdd(pHelper.maps, map, pHelper);
874                 kuaHang = DBHelper.getValueInt(map, "HeightNum");
875                 kuaLie = DBHelper.getValueInt(map, "LengthNum");
876                 yePanel = DBHelper.getValue(map, "tabsheetname");
877                 showMiaoShu = DBHelper.replaceBr(DBHelper.getValue(map, "fieldname"));
878                 xianMiaoShu = DBHelper.getValueInt(map, "Hidelabel");
879                 showMiaoShu = showMiaoShu + (showMiaoShu.equals("") ? "&nbsp;&nbsp;" : "");// 获得些必要信息,避免重复获得
880                 yePanel = "null";// 页名称
768134 881                 danLie = danLie == 1 ? 0 : danLie;
a6a76f 882                 style = "margin-top: " + ((danHang - 1) * (pHelper.kongHei) + (danHang == 1 ? 5 : 10)) + "px; margin-left: "
768134 883                         + (danLie * 120) + "px;";// 确定位置
X 884 //                        + (danLie * (pHelper.kongJianAndMiaoShu)) + "px;";// 确定位置
a6a76f 885                 map.put("tdLen", ((pHelper.kongJianAndMiaoShu + 1) * kuaLie - 1)
F 886                         - ((panelBean.isLandscape) ? ((xianMiaoShu == 1) ? 0 : pHelper.miaoShuTdWidth) + 5 : +10));// 减5做备用
887                 if (kuaLie > 1) {
768134 888                     style += "width:" + (190 * kuaLie) + "px;"; //"width:" + (pHelper.kongJianAndMiaoShu * kuaLie) + "px;"; // 加10为控件不至于换行用
a6a76f 889                 }
F 890                 if (kuaHang > 1) {
768134 891                     style += "height:" + (pHelper.kongHei * kuaHang) + "px;";// 设置高度
a6a76f 892                 }
F 893                 if (danLie > pHelper.liemut) {// 获取面板列控件的总宽度
894                     pHelper.liemut = danLie;
895                     pHelper.liewidth = ((danLie - 1) * ((pHelper.kongJianAndMiaoShu) + 1))
896                             + ((pHelper.kongJianAndMiaoShu) + 1);
897                 }
7bac0e 898                 miaoshuHtml = (xianMiaoShu == 1) ? "" : "<div class=\"" + panelBean.miaoshu_pan + "\" " +
X 899                         "title=\""+showMiaoShu+"\">" + showMiaoShu + "</div>";// 显示描述
a6a76f 900                 showMiaoShu = (DBHelper.getValue(map, "Hints").equals("")) ? showMiaoShu
F 901                         : DBHelper.getValue(map, "Hints");// 提示信息获得
902                 if (!DBHelper.getValue(map, "TipsExpression").equals("")) {
903                     if (DBHelper.getValue(map, "TipsExpression").indexOf("!") != -1) {// 动态查询信息的时候
904                         showMiaoShu = "<%=DBHelper.getValue(docMap,\"" + pHelper.id + "_tips\",mapAll)%>";
905                     } else {// 没有动态查询时
906                         showMiaoShu = DBHelper.getValue(map, "TipsExpression");
907                     }
908                 }
909                 //这里的tabs38属性是处理页面页卡的38类型控件显示边框问题-xin 2018-11-5 15:17:30
910                 map.put("tabs38", yePanel);
911                 map.put(TypeControl.PANEL_INFO, panelBean);
912                 panelMap.put(yePanel,
913                         panelMap.get(yePanel) + "\r\n<span style=\"" + style + "\" class=\"" + panelBean.posPan + "\" title=\""
914                                 + showMiaoShu + "\">" + miaoshuHtml + "<div class=\"" + panelBean.control_div + "\">"
915                                 + typeControlDao.get(map) + "</div></span>");// 组装成控件添加进当前页面,typeControlDao.get(map,false)之后统一考虑实现
916             } else {// 隐藏字段
917                 // if(mrq==0) {
918                 pHelper.mapHids = isAdd(pHelper.mapHids, map, pHelper);
919                 hidBuffer.append(typeControlDao.getHidText(map));
920                 // }
921             }
922         }
923
a6789a 924         htmlBuffer.append("<div id=\"").append("panel").append("_").append(formId).append("\" class=\"searchWindsType\" style=\"height:")
X 925                 .append(panHeight).append("px;width:auto\">");
926 //                .append((pHelper.rowHei + 4) * systemSettingsBo.getMaxRow(formId)).append("px;width:auto\">");
a6a76f 927         htmlBuffer.append(panelMap.get("null")).append("</div>");
F 928
929         htmlBuffer.append("<div id=\"tplt-grid\"><%@ include file=\"@formId@_grid.jsp\" %></div>");
930         // js 代码
931         htmlBuffer.append("\r\n <script language=\"javascript\" type=\"text/javascript\"> ");
932         htmlBuffer.append("\r\n panMain[panIndex].keyDown=function(op,e){");// 键触发
933         htmlBuffer.append("\r\n var event;\r\n if(e!='null'){ event = $.event.fix(e);}"); // 键盘按下事件
934         htmlBuffer.append("\r\n    if(op=='123' || event.keyCode==13){getOder();");
935         htmlBuffer.append("\r\n }");
936         htmlBuffer.append("\r\n}");
937         htmlBuffer.append("\r\n function getOder(){");// 拼sql
938         htmlBuffer.append("\r\n var where = \"\"; var str=\"\";");
939         // kong += (pHelper.rowHei + 1) * systemSettingsBo.getMaxRow(formId);
940         for (String fun : panelBean.getFunList()) {
941             htmlBuffer.append("\r\n str=" + fun + ";");
942             htmlBuffer.append("\r\n if(str!=\"\"){where += getKuoHao(str)+ \" and \";}");
943         }
944         htmlBuffer.append(
945                 "if(where!=\"\") {where +=\"(( isnull(readerusercodes,'') =  '' and isnull(readerorganizations,'') =  '' and isnull(readerroles , '' )  =  '' )  or ( isnull(readerusercodes,'') <>  '' and   (readerusercodes like  '@~,\"+usercodes+\",@~' )) or ( isnull(ReaderOrganizations,'') <>  '' and ( ReaderOrganizations like '@~,<%=session.getAttribute(SessionKey.CCNAME)%>,@~'  )  ) or ( isnull(ReaderRoles , '' ) <>  '' and ( ReaderRoles like '@~,<%=session.getAttribute(SessionKey.ROLE_NAME)%>,@~'  or ReaderRoles like '@~,<%=session.getAttribute(SessionKey.ROLE_NAME)%>,@~'  ) ))  and ( formid in (\"+formId+\"<%=dateformid%>)) and\";where=where.substring(0,where.length-4);where=where.replaceAll(\"%\",\"@~\"); create(encodeText(where),<%=flag%>);}");
946         htmlBuffer.append("else{create(encodeText(''),<%=flag%>);}}");
947         htmlBuffer.append("\r\n function getKuoHao(str){");// 套括号
948         htmlBuffer.append("\r\n return \"( \"+str+\" )\";");
949         htmlBuffer.append("\r\n }");
950         htmlBuffer.append("\r\n ");
951         htmlBuffer.append("<%");
952         htmlBuffer.append("HashMap<String, String> timeMap=PanelTimeBo.getTimeTag(" + formId + ").get(0);");
953         htmlBuffer.append("%>");
954         pHelper.mapAlls.putAll(pHelper.maps);
955         pHelper.mapAlls.putAll(pHelper.mapHids);
956         htmlBuffer.append("\r\n $(document).ready(function(){getOder();});</script> ");
957         return htmlBuffer;
958     }
959
346ab1 960
a6a76f 961     /**
F 962      * 给js集合添加设置
963      *
964      * @param infoJsBuffer js集合显示的面板设置
965      * @param map          一条设置集合
966      */
967     private void getJsInfo(StringBuffer infoJsBuffer, Map<String, Object> map, PanelBean panelBean)
968             throws Exception {
969         PanelParmHelper pHelper = panelBean.pHelper;
970         if (DBHelper.getValueInt(map, "isLoad") == 1) {
971             pHelper.html_Col.append("{fileid:\"").append(DBHelper.getValue(map, "FieldID").toLowerCase())
972                     .append("\"},");
973         }
974         int controltype = DBHelper.getValueInt(map, "ControlType");
975         String morenV_ = DBHelper.getValRep(DBHelper.getValue(map, "initValue"), false);
976         String ft = DBHelper.getValue(map, "ft");
977         if (controltype == 2) {
978             if (ft.equals("")) {
979                 morenV_ = getSelectValue(morenV_, ft);
980             }
981         }
dc7ad9 982         String initV=morenV_;
X 983         if(initV.indexOf("!")!=-1){//有!符号时进入 xin 2022-4-21 15:18:22
35cdb2 984             initV=initV.replaceAll("<%=","\"+").replaceAll("%>","+\"");
X 985             initV="<%=DBHelper.getInitValue(request,docMap,\\\""+ initV+"\\\")%>";
dc7ad9 986         }
a6a76f 987         String temp = DBHelper.getValue(map, "FieldID").toLowerCase();
F 988         if (DBHelper.getValueInt(map, "isLoad") == 1) {
843144 989             //验证数字格式是否规范正确 xin 2023-3-28 09:53:14
346ab1 990             String forMat=DBHelper.getValue(map,"Displayformat");
X 991             if(StringUtils.isNotBlank(forMat)){
dc5797 992                 //正则表达式(数字和日期在内)
X 993                 boolean isFormat = Pattern.matches("^,?0\\.?0*$|^(?:(?:[y]{4})?-?(?:M{1,2})?-?(?:d{1,2})?)?(?:\\s*(?:H{1,2})?:?(?:m{1,2})?:?(?:s{1,2})?)?$", forMat);
346ab1 994                 if (!isFormat) {
dc5797 995                     panelBean.overlapText += "<br>提示:功能号" + pHelper.formIdPan + ",字段:" + temp + "--" + DBHelper.getValue(map, "fieldname") +
346ab1 996                             ",设置的【数字格式】无法识别,有可能导致显示不出值。当前格式:" + forMat;
X 997                 }
998             }
a6a76f 999             infoJsBuffer.append("\"" + temp + "\"").append(":{\r\n title:\"")
F 1000                     .append(DBHelper.replaceBr(DBHelper.getValue(map, "fieldname").equals("") ? temp
1001                             : DBHelper.getValue(map, "fieldname")))// 描述
1002                     .append("\",\r\n keyinput:\"").append(DBHelper.getValue(map, "keyinput"))// 必录
1003                     .append("\",\r\n ft:\"").append(ft)// 外表表号
1004                     .append("\",\r\n ftformtype:\"").append(DBHelper.getValue(map, "FTFormType"))// 外表类型
1005                     .append("\",\r\n emptyrefdata:\"").append(DBHelper.getValue(map, "emptyrefdata"))// 外表清空关联
1006                     .append("\",\r\n fk:\"").append(DBHelper.replaceBr(DBHelper.getValue(map, "FK")))// 外表接收数据外表字段
1007                     .append("\",\r\n seekgroupid:\"").append(DBHelper.replaceBr(DBHelper.getValue(map, "SeekGroupID")))// 外表接收数据自身字段
1008                     .append("\",\r\n spremissfield:\"").append(DBHelper.getValue(map, "sPremissField"))// 外表条件自身字段
1009                     .append("\",\r\n dpremissfield:\"").append(DBHelper.getValue(map, "dPremissField"))// 外表条件外表字段
1010                     .append("\",\r\n efilter:\"").append(DBHelper.getValue(map, "eFilter"))// 外表条件自定义
1011                     .append("\",\r\n hyperlinkft:\"").append(DBHelper.getValue(map, "HyperlinkFT"))// 超链接外表号
1012                     .append("\",\r\n hyperlinkftformtype:\"").append(DBHelper.getValue(map, "HyperlinkFTFormType"))// 超链接外表类型
1013                     .append("\",\r\n hyperlinkspremissfield:\"")
1014                     .append(DBHelper.getValue(map, "HyperlinkSPremissField"))// 超链接自身字段
1015                     .append("\",\r\n hyperlinkdpremissfield:\"")
1016                     .append(DBHelper.getValue(map, "HyperlinkDPremissField"))// 超链接外表字段
1017                     .append("\",\r\n Hyperlinkmode:\"")
1018                     .append(DBHelper.getValue(map, "Hyperlinkmode"))//操作模式
1019                     .append("\",\r\n isAutoRefresh:\"")
1020                     .append(DBHelper.getValue(map, "isAutoRefresh"))//执行后自动刷新      
1021                     .append("\",\r\n hyperlinkefilter:\"").append(DBHelper.getValue(map, "HyperlinkEFilter"))// 超链接自定义
1022                     .append("\",\r\n datalink:\"").append(DBHelper.getValue(map, "DataLink"))// 感应字段
1023                     .append("\",\r\n stylecss:\"")
1024                     .append("<%=DBHelper.getValRepShi(\"" + DBHelper.getValue(map, "StyleCss")
1025                             + "\",session,null,false)%>")// css样式
1026                     .append("\",\r\n controltype:\"").append(controltype)// 控件类型
1027                     .append("\",\r\n ReadOnly:\"").append(DBHelper.getValue(map, "ReadOnly"))// 只读
dc7ad9 1028                     .append("\",\r\n initValue:\"").append(initV)// 初始值
346ab1 1029                     .append("\",\r\n format:\"").append(forMat)//数字各式
c8bf0a 1030                     .append("\",\r\n isSuppressBlankLineForDropDown:\"").append(DBHelper.getValue(map,"isSuppressBlankLineForDropDown"))//
a6a76f 1031                     .append("\"\r\n },");// 存放页面必要且经常用到的信息,减小冗余,需要信息直接从里面获得
F 1032             // 之后把java获得的值也想办法弄进去,即一加载内部就有了所需要的所有信息,值改变顺带把值传进此,所有处理即可用这个集合,之后可以处理掉多余信息传递,不处理不影响
1033             if (!morenV_.equals("")) {
1034                 pHelper.intvalueMap.put(temp, morenV_);
1035             }
1036         }
1037     }
1038
1039     /**
1040      * 更加默认值从ft表号中获得其实际值
1041      *
1042      * @param morenV_ 默认设置值
1043      * @param ft      外表号
1044      * @return 实际值
1045      */
1046     private String getSelectValue(String morenV_, String ft) {
1047         if (!ft.equals("")) {
1048             String sql = "select intervalue,dictvalue from _sysdict where dictid = " + ft;
1049             List<HashMap<String, String>> list = null;// intervalue为实际值
1050             list = sqlDBHelperIfc.getHashMap(sql);
1051             for (HashMap<String, String> mapSel : list) {
1052                 if (morenV_.trim().equals(mapSel.get("intervalue")) || morenV_.trim().equals(mapSel.get("dictvalue"))) {
1053                     morenV_ = mapSel.get("intervalue");// 实际值
1054                     break;
1055                 }
1056             }
1057         }
1058         return morenV_;
1059     }
1060
1061     /**
1062      * 判断主从表
1063      *
1064      * @param formType 窗体类型
1065      * @param pHelper  集合信息
1066      * @return 返回主表:0从表:1
1067      */
1068     private int hasTiaoJian(int formType, PanelBean panelBean) throws Exception {
1069         panelBean.isDoc = true;
1070         switch (formType) {// 0和-1为俩个特殊值 是不存在的窗体类型 需要用此信息做事情 0匹配查主表 -1匹配查从表
1071             case 0:// 为499类型改为此 (主表)
1072             case 9:// 9类型面板
1073             case 15:
1074             case 17:
1075                 break;
1076             case -1:// 为301类型对应的第二个面板
1077             case -2:// 为20类型对应的第二个面板
1078             case 7:
1079             case 38:
1080             case 18:
1081             case 181:
1082             case 182:
1083             case 238:
1084             case 77:
1085                 panelBean.pHelper.primary = (panelBean.notPan ? 0 : 1);
1086                 panelBean.isDoc = false;
1087                 break;
1088             default:
1089                 panelBean.pHelper.primary = (panelBean.notPan ? 1 : 0);
1090                 break;
1091         }
1092         return panelBean.pHelper.primary;
1093     }
1094
1095     private String setTable(int primary1, int formId, PanelParmHelper pHelper, int x) throws Exception {
1096         return tableIs(primary1, formId, pHelper);
1097     }
1098
1099     private String setTable(int primary1, int formId, PanelParmHelper pHelper) throws Exception {
1100         String tableString = "";
1101         Map<String, Object> sysMap = systemSettingsBo.getFormIdInTable(formId);
1102         pHelper.primary = primary1;
1103         if (pHelper.primary == 1) {
1104             pHelper.tableIs = DBHelper.getValue(sysMap, "DTTable").trim();
1105             tableString = DBHelper.getValue(sysMap, "DTTable").trim();
1106             pHelper.tableIs2 = DBHelper.getValue(sysMap, "HDTable").trim();
1107         } else {
1108             pHelper.tableIs = DBHelper.getValue(sysMap, "HDTable").trim();
1109             tableString = DBHelper.getValue(sysMap, "HDTable").trim();
1110             pHelper.tableIs2 = DBHelper.getValue(sysMap, "DTTable").trim();
1111         }
1112         return tableString;
1113     }
1114
1115     /**
1116      * 得到面板的表名,给出相应的信息
1117      *
1118      * @param primary1 是否从表
1119      * @param formId   功能号
1120      * @param pHelper  信息
1121      * @return 返回表名字符,表信息直接由pHelper返回
1122      */
1123     private String tableIs(int primary1, int formId, PanelParmHelper pHelper) throws Exception {
1124         String tableString = "";
1125         Map<String, Object> sysMap = systemSettingsBo.getFormIdInTable(formId);
1126         pHelper.primary = primary1;
1127         if (pHelper.primary == 1) {
1128             pHelper.tableIs = DBHelper.getValue(sysMap, "DTTable").trim();
1129             tableString = DBHelper.getValue(sysMap, "DTTable").trim();
1130             pHelper.tableIs2 = DBHelper.getValue(sysMap, "HDTable").trim();
1131         } else {
1132             pHelper.tableIs = DBHelper.getValue(sysMap, "HDTable").trim();
1133             tableString = DBHelper.getValue(sysMap, "HDTable").trim();
1134             pHelper.tableIs2 = DBHelper.getValue(sysMap, "DTTable").trim();
1135         }
1136         return tableString;
1137     }
1138
1139     private String setTable(int primary1, PanelParmHelper pHelper) throws Exception {
1140         return setTable(primary1, pHelper.formIdPan, pHelper, 1);
1141     }
1142
1143     private Map<String, Map<String, String>> isAdd(Map<String, Map<String, String>> maps, Map<String, Object> sys,
1144                                                    PanelParmHelper pHelper) {
1145         pHelper.sysTi = sys;
1146         String yeId = DBHelper.getValue(sys, "FieldID").toLowerCase();
1147         // 排除非数据库字段
1148         if (";34#;36#".indexOf(";" + DBHelper.getValue(sys, "ControlType").trim() + "#") == -1) {
1149             Map<String, String> map = new HashMap<String, String>();
1150             map.put("FieldID", yeId);// 字段名
1151             map.put("type", DBHelper.getValue(sys, "ControlType"));// 控件类型
1152             map.put("HeadFlag", DBHelper.getValue(sys, "HeadFlag"));// 是否从表
1153             map.put("format", DBHelper.getValue(sys, "Displayformat"));
1154             map.put("must", DBHelper.getValue(sys, "KeyInput"));
1155             map.put("HDTable", DBHelper.getValue(sys, "HDTable"));// 主表
1156             map.put("DTTable", DBHelper.getValue(sys, "DTTable"));// 从表
1157             map.put("editstatus", DBHelper.getValue(sys, "EditStatus"));// 必录或者编辑状态设置
1158             map.put("datetype", (pHelper.verificationMap == null || pHelper.verificationMap.get(yeId) == null) ? "-1"
1159                     : pHelper.verificationMap.get(yeId));// 在数据库中的类型
1160             map.put("downGrid", String.valueOf(DBHelper.getValueInt(sys, "MasterFieldShowLocation")));// 是否显示在grid下面
1161             // 添加处理信息自动
1162             map.put("datalink", String.valueOf(DBHelper.getValueInt(sys, "DataLink")));// 是否感应
1163             map.put("showfieldvalueexpression", DBHelper.getValue(sys, "showFieldValueExpression"));// 权限查看字段
1164             map.put("stylecss", DBHelper.getValue(sys, "stylecss"));// css样式
1165             map.put("tipsexpression", DBHelper.getValue(sys, "tipsexpression"));// css样式
1166             map.put("datalink", DBHelper.getValue(sys, "datalink"));// 感应字段才处理更新插入
1167             maps.put(yeId, map);// 解决Id暴露问题
1168         }
1169         return maps;
1170     }
1171
1172     private Map<String, Map<String, String>> getMaps(PanelParmHelper pHelper) {// 得到此表所有字段
1173         Map<String, Map<String, String>> mapList = new HashMap<String, Map<String, String>>();
1174         if (pHelper.maps != null) {
1175             mapList.putAll(pHelper.maps);
1176         }
1177         if (pHelper.mapHids != null) {
1178             mapList.putAll(pHelper.mapHids);// 后追加
1179         }
1180         return mapList;
1181     }
1182
1183     /**
1184      * @param maps 包含所查列的一些必须信息
1185      * @return 拼写的查询sql语句
1186      */
1187     private String getSqlCol(Map<String, Map<String, String>> maps, PanelParmHelper pHelper) {
1188         String retuString = " ";
1189         String field = "";
1190         String showField = "";
1191         String stylecss = "";
1192         String TipsExpression = "";
1193         boolean hasQuan = false;
1194         for (Map<String, String> map : maps.values()) {
1195             if (map.get("datalink").equals("1")) {// 是感应字段
1196                 field = map.get("FieldID");
1197                 showField = map.get("showfieldvalueexpression");
1198                 stylecss = map.get("stylecss");
1199                 TipsExpression = map.get("tipsexpression");// DBHelper.getValue(map,
1200                 // "TipsExpression");//
1201                 if (showField.equals("")) {// 权限字段无
1202                     retuString += field + ",";
1203                     // hasQuan = true;//格线加载时,已经报错了,但面板却没有这样的错误弹出 ,显然,面板是写 *
1204                     // 代替所有字段 。把 * 号改成 字段名就行了,其它的不用改了
1205                 } else {
1206                     if (field.indexOf("_expr") == -1 || !field.substring(field.lastIndexOf("_expr")).equals("_expr")) {// 有这个特殊符还必须在最后
1207                         showField = pHelper.initialValue.getValLinShi(showField, false);
8efeef 1208                         //把替换值特殊符号全去掉
X 1209                         showField=showField.replace("'&","")
1210                                 .replace("&'","")
1211                                 .replace("&","");
a6a76f 1212                         retuString += "case when (" + showField + ")=0 then null else " + field + " end as " + field
F 1213                                 + " ,case when (" + showField + ")=1 then 1 when (" + showField
1214                                 + ")=2 then 2 else 0 end as " + field + "_expr,";// 一大堆逻辑,后处理
1215                         hasQuan = true;
1216                     }
1217                 }
1218                 // StyleCss样式设置
1219                 if (!stylecss.equals("")) {
1220                     if (field.indexOf("_css") == -1 || !field.substring(field.lastIndexOf("_css")).equals("_css")) {// 有这个特殊符还必须在最后
1221                         stylecss = pHelper.initialValue.getValLinShi(stylecss, false);
1222                         retuString += stylecss + " as " + field + "_css,";// 一大堆逻辑,后处理
1223                         hasQuan = true;
1224                     }
1225                 }
1226                 // 鼠标移动到控件动态显示信息
1227                 if (!TipsExpression.equals("") && TipsExpression.indexOf("!") != -1) {
1228                     if (field.indexOf("_tips") == -1 || !field.substring(field.lastIndexOf("_tips")).equals("_tips")) {// 有这个特殊符还必须在最后
1229                         TipsExpression = pHelper.initialValue.getValLinShi(TipsExpression, false);
1230                         TipsExpression = TipsExpression.replace("!", "");
1231                         retuString += "(" + TipsExpression + ") as " + field + "_tips,";// 一大堆逻辑,后处理
1232                         hasQuan = true;
1233                     }
1234                 }
1235             }
1236         }
1237         return (!hasQuan) ? "*" : DBHelper.replaceBr(retuString.substring(0, retuString.length() - 1));
1238     }
1239
1240     private StringBuffer getJspPanScript(int formId, String frameName, PanelBean panelBean) throws Exception {
1241         StringBuffer sBuffer = new StringBuffer();
1242         PanelParmHelper pHelper = panelBean.pHelper;
1243         Map<String, Map<String, String>> mapList = getMaps(pHelper);
1244         sBuffer.append("\r\n panMain[panIndex].formtypeOne=" + pHelper.formTypePan + ";");
1245         sBuffer.append("\r\n panMain[panIndex].keyDown=function(op,e,f){\r\n         var flag = checkSession();");
1246         sBuffer.append("\r\n         if(flag){return;}");
1247         if (!panelBean.notPan) {//
1248             if (";16;0;-1;22;2;-2;1;".indexOf(";" + pHelper.formTypePan + ";") == -1) { // !=17
1249                 sBuffer.append("\r\n         var event;\r\n         if(e!=null){\r\n            if(e!='null'){ event = $.event.fix(e);}"); // 键盘按下事件
1250                 sBuffer.append("\r\n            if(op=='123' || event.keyCode==13){");
1251                 sBuffer.append("\r\n                var where =\"\";");
1252                 sBuffer.append("\r\n                var value =\"\";");
1253                 List<String> masterCodeList = pHelper.initialValue.getMASTERCODE();
1254                 if (masterCodeList == null || masterCodeList.size() == 0) {// getMASTERCODE判断是否有值
1255                     // 如果有错误返回旧版本单个2014-8-21
1256                     // 后改,只有这两个要把所有参数传出
1257                     if (";38#;238#;18#;7#;19#;77#".indexOf(";" + pHelper.formTypePan + "#") != -1) {
1258                         if (";238#;38#".indexOf(";" + pHelper.formTypePan + "#") != -1) {
1259                             Map<String, Map<String, String>> allIsChecks = new HashMap<String, Map<String, String>>();
1260                             Map<String, String> checkMap = new HashMap<String, String>();
1261                             checkMap.put("FieldID", "allIsChecks");
1262                             allIsChecks.put("allIsChecks", checkMap);
1263                             mapList.putAll(allIsChecks);
1264                         }
1265                         String colS = "";
1266                         String colsInDate = "";// 数据库当前字段
1267                         for (String panId : mapList.keySet()) {
1268                             colS += panId + ";";
1269                             colsInDate += mapList.get(panId).get("FieldID") + ";";
1270                         }
1271                         if (pHelper.formTypePan == 19) {
1272                             colS = "";
1273                             colsInDate = "";// 数据库当前字段
98c7bf 1274                             String execSql = "set nocount on ; select fieldid from gfield where headflag=" + pHelper.primary
a6a76f 1275                                     + " and formid=" + formId + "  and DataLink=1 order by statisid";
F 1276                             List<Map<String, Object>> col_descList = sqlDBHelperIfc.getHashMapObj(execSql);
1277                             for (int i = 0; i < col_descList.size(); i++) {
1278                                 colS += col_descList.get(i).get("fieldid").toString().toLowerCase() + ";";
1279                                 colsInDate += col_descList.get(i).get("fieldid").toString().toLowerCase() + ";";
1280                             }
1281                         }
1282                         sBuffer.append("\r\n                var cols=\"\";var colsInDate=\"\";");
1283                         if (!colS.equals("")) {
1284                             sBuffer.append("\r\n                cols=(\"" + colS.substring(0, colS.length() - 1) + "\").split(';');");
1285                             sBuffer.append("\r\n                colsInDate=(\"" + colsInDate.substring(0, colsInDate.length() - 1)
1286                                     + "\").split(';');");
1287                         }
1288                         if (";18#;7#;19#;77#".indexOf(";" + pHelper.formTypePan + "#") != -1) {// 第一次传值为空的做法
1289                             sBuffer.append(
1290                                     "\r\nwhere +=panMain[panIndex].keyWhere(!panMain[panIndex].no_load_first,cols,colsInDate)");
1291                         } else {
1292                             sBuffer.append("\r\nwhere +=panMain[panIndex].keyWhere(false,cols,colsInDate)");
1293                         }
1294                     } else {
1295                         if (mapList.get("doccode") != null) {
1296                             sBuffer.append("\r\n                value = document.getElementById('doccode').value;");
1297                             sBuffer.append("\r\n                where +=\"" + mapList.get("doccode").get("FieldID")
1298                                     + "='\" + value.Trim() + \"' and \";");
1299                         }
1300                     }
1301                 } else {// 有MASTERCODE就只传MASTERCODE的那个字段信息
1302                     if (pHelper.formTypePan == 10) {
1303                         sBuffer.append("\n                var col_;//查询的条件字段名\n");
1304                         for (int m = 0; m < pHelper.initialValue.getMASTERCODE().size(); m++) { // 对设置了matercode的字段进行组装
1305                             sBuffer.append("\r\n                value = document.getElementById('"
1306                                     + pHelper.initialValue.getMASTERCODE().get(m) + "').value;\n");
1307                             sBuffer.append("                col_=panMain[panIndex].getOrder('"
1308                                     + pHelper.initialValue.getMASTERCODE().get(m) + "');\r\n");
1309                             // 2015-6-1 10:44:46
1310                             sBuffer.append("\r\n                if(value != null && col_!=null){");
1311                             sBuffer.append("\r\n                    where +=col_+\"='\" + value + \"' and \";");
1312                             sBuffer.append("\r\n                }");
1313                         }
1314                     } else {
1315                         for (int m1 = 0; m1 < pHelper.initialValue.getMASTERCODE().size(); m1++) {// 循环
1316                             // 2014-8-21
1317                             sBuffer.append("\r\n                value = document.getElementById('"
1318                                     + pHelper.initialValue.getMASTERCODE().get(m1) + "').value;");
44e865 1319 //                            sBuffer.append("\r\n                if(value != \"\"){");
X 1320                             sBuffer.append("\r\n                if(value != null){");
a6a76f 1321                             sBuffer.append("\r\n                     where +=\"" + pHelper.initialValue.getMASTERCODE().get(m1)
F 1322                                     + "='\" + value + \"' and \";");
1323                             sBuffer.append("\r\n                }");
1324                         }
1325                     }
1326                 }
1327                 sBuffer.append(
1328                         "\r\n                where = where.substring(0,where.lastIndexOf(\"and\"));\r\n                where += \"<%=addUrl%>\";");
1329                 if (";4#;238#;38#".indexOf(";" + pHelper.formTypePan + "#") != -1) {
1330                     sBuffer.append("  return where;");
1331                 } else if (";301#;30#;20#".indexOf(";" + pHelper.formTypePan + "#") != -1) {
1332                     sBuffer.append("\r\n                query=(query==\"\"?where:query);");
1333                     sBuffer.append("\r\n                loadTree(\"treeData.jsp\",{query:where});");
1334                 } else if (";77#".indexOf(";" + pHelper.formTypePan + "#") != -1) {
1335                     sBuffer.append("\r\n                if(null!=this.returnWhere&&\"\"!=this.returnWhere){where+=this.returnWhere;where=where.replaceAll(\"%\",\"@~\");}");
1336                     sBuffer.append("\r\n                create@panelNo@(encodeText(where),<%=flag%>);");
1337                 } else if (";5#;16#;496#;498#".indexOf(";" + pHelper.formTypePan + "#") != -1) {
1338                     sBuffer.append("\r\n                where=where.replaceAll(\"%\",\"@~\");");
1339                     sBuffer.append("\r\n                if(<%=copy%>!=null){\r\n                   create(encodeText(\"<%=where%>\"),<%=flag%>,1);\r\n                }else{");
1340                     sBuffer.append("\r\n                   create(encodeText(where),<%=flag%>);\r\n                }");
1341                 } else if (";8#".indexOf(";" + pHelper.formTypePan + "#") != -1) {// 对3表做特别处理
1342                     // by
1343                     // danaus
1344                     // 18-1-29
1345                     sBuffer.append("\r\n                where=where.replaceAll(\"%\",\"@~\");");
1346                     sBuffer.append("\r\n                if(<%=copy%>!=null){\r\n                   create(encodeText(\"<%=where%>\"),<%=flag%>,1).then(function(d){\r\n"
1347                             + "                      create1(encodeText(\"<%=where%>\"),<%=flag%>,1).then(function(d){\r\n"
1348                             + "                         mygrid.setThreeFilter();});});\r\n                }else{");
1349                     sBuffer.append("\r\n                create(encodeText(where),<%=flag%>).then(function(d){\n"
1350                             + "create1(encodeText(where),<%=flag%>).then(function(d){\n"
1351                             + "mygrid.setThreeFilter();});});\r\n                }");
1352                 } else {
1353                     sBuffer.append("\r\n                where=where.replaceAll(\"%\",\"@~\");\n");
1354                     sBuffer.append("\r\n                if(f!=undefined&&isOpen==0) where+=f;\r\ncreate(encodeText(where),<%=flag%>);");// by
1355                     // 2015-5-6
1356                     // 增加对18类型设置为不自动加载数据的处理
1357                 }
1358                 sBuffer.append("\r\n            }\r\n         }");
1359             }
1360         }
1361
1362         mapList.remove("allIsChecks");
1363         sBuffer.append("\r\n } ");
1364         sBuffer.append("\r\n panMain[panIndex].checkUp=function (){");
1365         String colStr = "";
1366         // String cmsStr = "";
1367         // 后添加判断表格增加行用的必录检查
1368         String colToGrid = "";
1369         int i = 0;
1370         String docstastuString = "";
1371         for (String panId : mapList.keySet()) {
1372             if (mapList.get(panId).get("must").equals("1")) {
1373                 if (panId.lastIndexOf("_expr") == -1 || (panId.lastIndexOf("_expr") != -1
1374                         && mapList.get(panId.substring(0, panId.lastIndexOf("_expr"))) == null)) {
1375                     docstastuString = mapList.get(panId).get("editstatus");
1376                     colStr += ((i == 0) ? "" : ";pb#") + panId
1377                             + (docstastuString.equals("") ? "" : ";sta#" + docstastuString);
1378                     if (mapList.get(panId).get("downGrid").equals("0")) {
1379                         colToGrid += ";pb#" + panId + (docstastuString.equals("") ? "" : ";sta#" + docstastuString);
1380                     }
1381                     i++;
1382                 }
1383             }
1384         }
1385         sBuffer.append("\r\n         var cols=(\"" + colStr + "\");");
1386         sBuffer.append("\r\n         var cms=(\"\");");// " + cmsStr + "
1387         sBuffer.append("\r\n             return  panMain[panIndex].mustCheck(cols,cms,<%=docstatePan%>);   \r\n }");
1388         sBuffer.append("\r\n panMain[panIndex].checkToGrid= function (){");
1389         sBuffer.append("\r\n         var cols=(\"" + colToGrid + "\");");
1390         sBuffer.append("\r\n         var cms=(\"\");");// " + cmsToGrid + "
1391         sBuffer.append("\r\n             return  panMain[panIndex].mustCheck(cols,cms,<%=docstatePan%>);   \r\n }");
1392         sBuffer.append("\r\n panMain[panIndex].upSub=function(op){");// 设置情况关联
1393         // 程序代码
1394         pHelper.mapAlls.putAll(pHelper.maps);
1395         pHelper.mapAlls.putAll(pHelper.mapHids);
1396         // sBuffer.append(pHelper.eConn.empty(pHelper.mapAlls));
1397         if (pHelper.formTypePan == -1) {
1398             sBuffer.append("setPanel301=true;");
1399         }
1400         // 追加公式触发
875a46 1401 //        sBuffer.append("\r\n         var gongSiCo='" + pHelper.gongsiCols + "';");
X 1402 //        sBuffer.append("\r\n         var gongSi='" + pHelper.gongsiStr.replaceAll("\'", "\\\\\'") + "';");
1403         sBuffer.append("\r\n         var gongSiCo='" + StringUtils.join(pHelper.gongsiCols,";") + "';");
1404         sBuffer.append("\r\n         var gongSi='" + StringUtils.join(pHelper.gongsiStr,"@#@") + "';");
a6a76f 1405         sBuffer.append("\r\n         panMain[panIndex].upSub_gongsi(op,gongSiCo,gongSi);");
F 1406         sBuffer.append("\r\n         panMain[panIndex].set_upSub(op);\r\n }");
1407         sBuffer.append(getMapScript(mapList));
1408         sBuffer.append("\r\n panMain[panIndex].loadSet=function(docstatePan){ ");
1409         sBuffer.append("\r\n         var buttonInfo=null; ");
1410         sBuffer.append("\r\n         var reads=");
1411         sBuffer.append(panelBean.getFunLoadList());
1412 //        i = 0;
1413 //        for (String fun : typeControlDao.getFunLoadList()) {// 页面生成后的处理函数
1414 //            sBuffer.append(((i == 0) ? "" : ";fen#")).append(fun);
1415 //            i++;
1416 //        }
1417         sBuffer.append(";");
1418         switch (pHelper.formTypePan) {// 按钮显示设置
1419             case 0:
1420             case 5:
1421             case 8:
1422             case 16:
1423             case 18:
1424                 if (pHelper.panelbol) {
1425                     sBuffer.append("\r\n         <%if(1==1){\r\n               JsonArray butt=new JsonArray();\r\n               JsonArray buttonInfo=new JsonArray();\r\n              String sqlStr=\"\";");//\r\n              String writeInfo=\"\";");
1426                     sBuffer.append("\r\n              List<Map<String,Object>> buttonList=gButtonIfc.getButton(formId);");
1427                     sBuffer.append("\r\n              for (Map<String, Object> buttonMap : buttonList) {");
1428                     sBuffer.append("\r\n                    sqlStr+=DBHelper.getValue(buttonMap,\"buttonID\").toLowerCase()+\";pb#\";");
1429                     sBuffer.append("\r\n                    sqlStr+=DBHelper.getValRepShi(formId,DBHelper.getValue(buttonMap,\"showItemExpression\"),session,((listInfo!=null&&listInfo.size()>0)?listInfo.get(0):null),false)+\";pb#\";");
1430                     sBuffer.append("\r\n                    sqlStr+=session.getAttribute(SessionKey.USERCODE).toString()+\";pb#\";");
1431                     sBuffer.append("\r\n                    sqlStr+=DBHelper.getValue(buttonMap,\"editStatus\")+\";pb#\"+tableIs+\";pb#\"+(DBHelper.getValue(docMap,\"doccode\").equals(\"\")?\"null\":DBHelper.getValue(docMap,\"doccode\"))+\";fen#\";");
1432                     // sBuffer.append("+\";pb#\"+tableIs+\";pb#\"+(DBHelper.getValue(docMap,\"doccode\").equals(\"\")?\"null\":DBHelper.getValue(docMap,\"doccode\"))+\";pb#\"+DBHelper.getValueInt(buttonMap,\"editStatus\")+\";fen#\";
1433                     // }");
1434                     sBuffer.append("\r\n                    JsonArray buttString=new JsonArray();");
1435                     sBuffer.append("\r\n                    buttString.add(2);");
1436                     sBuffer.append("\r\n                    buttString.add(DBHelper.getValue(buttonMap,\"fieldid\").toLowerCase());");
1437                     sBuffer.append("\r\n                    buttString.add(DBHelper.getValue(buttonMap, \"buttonID\"));");
1438                     sBuffer.append("\r\n                    buttString.add(DBHelper.getValue(buttonMap,\"editStatus\"));");
1439                     sBuffer.append("\r\n                    butt.add(buttString);");
1440                     //sBuffer.append("\r\n                    buttString+=\";fen#2;pb#\"+DBHelper.getValue(buttonMap,\"fieldid\").toLowerCase()+\";pb#\"+DBHelper.getValue(buttonMap, \"buttonID\")+\";pb#\"+DBHelper.getValue(buttonMap,\"editStatus\");");
1441                     // sBuffer.append("\r\natMap.put(DBHelper.getValue(buttonMap,
1442                     // \"buttonID\"),DBHelper.getValue(buttonMap,\"editStatus\"));");
1443                     // sBuffer.append("\r\nnb=DBHelper.getValue(docMap,\"curchecker\").toLowerCase().indexOf(session.getAttribute(\"@usercode\").toString().toLowerCase())!=-1?true:false;
1444                     // ");
1445                     sBuffer.append("\r\n              }");
1446                     sBuffer.append("\r\n              if(!sqlStr.equals(\"\")){");
1447                     // sBuffer.append("\r\n String sqlwhere=\"\";");
1448                     // sBuffer.append("\r\n if(!tableIs.equals(\"\") &&
1449                     // tableIs.indexOf(\"///|\")==-1){");
1450                     // sBuffer.append("\r\n sqlwhere=\"from \"+tableIs+\" where
1451                     // DocCode='\"+DBHelper.getValue(docMap,\"doccode\")+\"'\";}");
1452 //                sBuffer.append("\r\n                    Map<String,Object> buMap=sqlDBHelperIfc.getBoolSql(sqlStr);");
1453 //                sBuffer.append("\r\n                    if(buMap.get(\"error\")!=null){%>");
1454 //                sBuffer.append("\r\n                         alert(\"<%=buMap.get(\"error\")%>\")");
1455 //                sBuffer.append("\r\n                   <%}");
1456 //                sBuffer.append("\r\n                    if(buMap!=null){");
1457 //                sBuffer.append("\r\n                         bdMap.putAll(buMap);\r\n                    }");
1458 //                sBuffer.append("\r\n                    if(buMap!=null&&buMap.size()>0){");
1459 //                sBuffer.append("\r\n                         for(String key:buMap.keySet()){");
1460 //                sBuffer.append("\r\n                                writeInfo+=\",{\\\"filed\\\":\\\"\"+key+\"\\\",\\\"value\\\":\\\"\"+buMap.get(key)+\"\\\"}\";");
1461 //                sBuffer.append("\r\n                         }");
1462 //                sBuffer.append("\r\n                    }");
1463 //                sBuffer.append("\r\n                    writeInfo=(writeInfo.indexOf(\",\")!=-1)?writeInfo.substring(1):writeInfo;");
1464                     sBuffer.append("\r\n                   try{");
1465                     sBuffer.append("\r\n                         bdMap=sqlDBHelperIfc.getBoolSql(sqlStr);");
1466                     sBuffer.append("\r\n                         for(String key:bdMap.keySet()){");
1467                     sBuffer.append("\r\n                              if(bdMap.get(key)!=null){");
1468                     sBuffer.append("\r\n                                JsonObject info=new JsonObject();");
1469                     sBuffer.append("\r\n                                info.addProperty(\"filed\", key);");
1470                     sBuffer.append("\r\n                                info.addProperty(\"value\",bdMap.get(key).toString());");
1471                     sBuffer.append("\r\n                                buttonInfo.add(info);");
1472                     sBuffer.append("\r\n                              }");
1473                     sBuffer.append("\r\n                         }");
1474                     sBuffer.append("\r\n                   }catch(Exception e){");
1475                     sBuffer.append("\r\n                         throw e;");
1476                     sBuffer.append("\r\n                   }");
1477                     sBuffer.append("\r\n              }");
1478                     sBuffer.append("\r\n              out.print(\"buttonInfo=\"+buttonInfo+\";\");");
1479                     sBuffer.append("\r\n              out.print(\"\\r\\n         reads = reads.concat(\"+butt+\");\");");
1480                     sBuffer.append("\r\n         }%>");
1481                 }
1482                 break;
1483             default:
1484                 break;
1485         }
1486         if (!"".equals(pHelper.iscopy)) {
1487             sBuffer.append("\r\n         panMain[panIndex].bolCopy=\"<%=copy%>\";");// 是不是复单
1488         } else {
1489             sBuffer.append("\r\n         panMain[panIndex].bolCopy=\"0\";");// 是不是复单
1490         }
1491         sBuffer.append("\r\n         panMain[panIndex].set_read_load(reads,docstatePan,<%=isNewOpen%>,'<%=session.getAttribute(\"@usercode\")%>;<%=session.getAttribute(\"@cccode\")%>;<%=session.getAttribute(\"@rolename\")%>',buttonInfo);");
1492         sBuffer.append("\r\n }");
1493         // 处理不复制字段
1494         String colString = "";
1495         if ("".equals(pHelper.iscopy)) {
1496             colString = DBHelper.replaceBr(DBHelper.getValue(assistIfc.getClernCol(formId), "rowcopyfields"));
1497         } else {
1498             colString = pHelper.iscopy;
1499         }
1500         sBuffer.append("\r\n panMain[panIndex].copy=function(){\r\n         panMain[panIndex].noCopy('" + colString + "');\r\n }");
1501         pHelper.iscopy = "";
1502         switch (pHelper.formTypePan) {
1503             case 5:
1504             case 8:
1505             case 16:
1506             case 498:
1507             case 0:// 498
1508                 // sBuffer
1509                 // .append("\r\nvar timer_h=null;function
1510                 // start_Show(){try{setTimeout(parent.topFrame.hiddenToolButton(function(){stop();}),0);stop();}catch(e_){}}function
1511                 // stop(){window.clearInterval(timer_h);}timer_h=window.setInterval(\"start_Show()\",300);");
1512                 break;
1513             default:
1514                 break;
1515         }
1516         if (pHelper.formTypePan == 16) {
1517             sBuffer.append("<% if(\"@liuChen@\".equals(\"1\")){%><jsp:include page=\"/processTrack.jsp\">");
1518             sBuffer.append("\r\n<jsp:param value=\"<%=formId%>\" name=\"formid\"/>");
1519             sBuffer.append("\r\n<jsp:param value=\"<%=doccode%>\" name=\"doccode\"/>");
1520             sBuffer.append("\r\n</jsp:include><%} %>");
1521         }
1522         // sBuffer.append("</script> ");
1523         return sBuffer;
1524     }
1525
1526     // 获得面板中 的getPanMap
1527     private StringBuffer getMapScript(Map<String, Map<String, String>> mapList) {
1528         StringBuffer sBuffer = new StringBuffer();
1529         sBuffer.append("\r\n panMain[panIndex].getPanMap=function(panIndexs){");
1530         sBuffer.append("\r\n         if(panIndexs==undefined){\r\n              return panMain[panIndex].getPanMap_All();\r\n         }else{\r\n              return panMain[panIndexs].getPanMap_All();\r\n         }");// 返回grid所需形式的字符串
1531         sBuffer.append("\r\n }");
1532         return sBuffer;
1533     }
1534
1535     private String getTypeIni(PanelParmHelper pHelper) throws Exception {
1536         String output = "";
1537         output += pHelper.FAFO.readFile(pHelper.URI + File.separator + "public" + File.separator + "template"
1538                 + File.separator + "topPanInv.txt");
1539         output = output.replaceAll("#zhu#", pHelper.tableIs);
1540         if (pHelper.seqtypefilde.indexOf("19") != -1) {
1541             String id19 = pHelper.seqtypefilde.replace("19;", "");
1542             output = output.replace("[?seq]", "DBHelper.getValue(docMap,\"" + id19 + "\",mapAll)");
1543         } else {
1544             output = output.replace("[?seq]", "\"\"");
1545         }
1546         return output;
1547     }
1548
1549     /**
1550      * panPar.txt
1551      *
1552      * @param pHelper
1553      * @return
1554      * @throws Exception
1555      */
1556     private String getPar(PanelParmHelper pHelper) throws Exception {
1557         String output = "";
1558         output += pHelper.FAFO.readFile(
1559                 pHelper.URI + File.separator + "public" + File.separator + "template" + File.separator + "panPar.txt");
1560         return output;
1561     }
1562
1563     /**
1564      * @param formId
1565      * @param maps
1566      * @param pHelper
1567      * @return
1568      */
1569     private StringBuffer getJspPanSession(int formId, Map<String, Map<String, String>> maps, PanelParmHelper pHelper) {
1570         StringBuffer sBuffer = new StringBuffer();
1571         sBuffer.append("<%\r//9802设置每一个字段的属性集合,在加载每个字段值的时候调用这个mapAll集合。\r maps = new HashMap<String, Map<String, String>>();");// 保存字段Id,即数据库中的列,不让其暴露
1572         sBuffer.append("\r\n mapHids = new HashMap<String, Map<String, String>>();\r\n map_pb = null;");
1573         sBuffer.append(" \r\n seStr=\"\";\r\n infoS=null;\r\n mapsetStr=null;");
1574         String infoString = "";
1575         if (maps != null) {
1576             for (String yeIdStr : maps.keySet()) {
1577                 infoString += getPanMapStr(maps, yeIdStr, true) + ";pb#";
1578             }
1579         }
1580         sBuffer.append("\r\n seStr=\"" + DBHelper.replaceBr(infoString) + "\";");
1581         getMapSession(sBuffer, "maps");// 循环
1582         for (String yeIdStr : pHelper.mapHids.keySet()) {
1583             infoString += getPanMapStr(pHelper.mapHids, yeIdStr, false) + ";pb#";
1584         }
1585         sBuffer.append("\r\n seStr=\"" + DBHelper.replaceBr(infoString) + "\";");
1586         getMapSession(sBuffer, "mapHids");
1587         sBuffer.append(
1588                 "\r\n mapAll = new HashMap<String, Map<String, String>>(); \r\n mapAll.putAll(maps); \r\n mapAll.putAll(mapHids);");
1589 //        if (pHelper.panelAudit.size() > 0) { // 审计功能调用到的属性
1590 //            sBuffer.append("\r\n String[] auditFiled@index@=\""+ pHelper.panelAudit.delete(pHelper.panelAudit.length() - 1, pHelper.panelAudit.length()) + "\".split(\";\");");
1591 //            sBuffer.append("\r\n String Filed@index@=\"\";");
1592 //            sBuffer.append("\r\n for(String Fileds@index@ : auditFiled@index@){");
1593 //            sBuffer.append("\r\n Filed@index@=Fileds@index@.substring(0,Fileds@index@.length()-2);\r\n%>");
1594 //            sBuffer.append("\r\n<script type=\"text/javascript\">");//\r\npanMain[panIndex].panelAuditValue['<%=Filed@index@%>']='<%=DBHelper.getValue(docMap,Filed@index@,mapAll)%>';");
1595 //            sBuffer.append("\r\npanMain[panIndex].auditFiled="+pHelper.panelAudit+"\r\n</script>");//+='<%=Fileds@index@%>#';\r\n</script>");
1596 //            sBuffer.append("\r\n<%}%>");
1597 //            pHelper.panelAudit = null;
1598 //        } else {
1599         sBuffer.append("\r\n%>");
1600 //        }
1601         return sBuffer;
1602     }
1603
1604     /**
1605      * 循环
1606      *
1607      * @param sBuffer
1608      * @param maps
1609      */
1610     private void getMapSession(StringBuffer sBuffer, String maps) {
1611         sBuffer.append("\r\n mapsetStr=seStr.split(\";pb#\");");
1612         sBuffer.append("\r\n for(i=0;i<mapsetStr.length;i++){");
1613         sBuffer.append("\r\n        if(!mapsetStr[i].equals(\"\")){");
1614         sBuffer.append("\r\n           infoS=mapsetStr[i].split(\";\");");
1615         sBuffer.append("\r\n           map_pb = new HashMap<String, String>();");
1616         sBuffer.append("\r\n           map_pb.put(\"FieldID\", infoS[0]);");
1617         sBuffer.append("\r\n           map_pb.put(\"type\",infoS[1]);");
1618         sBuffer.append("\r\n           map_pb.put(\"format\", infoS[2]);");
1619         sBuffer.append("\r\n           map_pb.put(\"downGrid\", infoS[3]);");
1620         sBuffer.append("\r\n           map_pb.put(\"datetype\", infoS[4]);");
1621         sBuffer.append("\r\n           map_pb.put(\"hidden\",infoS[5]);");
1622         sBuffer.append("\r\n           " + maps).append(".put(infoS[0], map_pb);");
1623         sBuffer.append("\r\n        }");
1624         sBuffer.append("\r\n }");
1625     }
1626
1627     private StringBuffer getPanMapStr(Map<String, Map<String, String>> maps, String yeIdStr, boolean hid) {
1628         StringBuffer sBuffer = new StringBuffer();
1629         Map<String, String> mapStr = maps.get(yeIdStr);
1630         sBuffer.append(mapStr.get("FieldID")).append(";").append(mapStr.get("type")).append(";")
1631                 .append(((mapStr.get("format") == null) ? "" : mapStr.get("format"))).append(";")
1632                 .append(mapStr.get("downGrid")).append(";").append(mapStr.get("datetype")).append(";")
1633                 .append((hid) ? "1" : "0");
1634         return sBuffer;
1635     }
1636
1637     /*
1638      * 修改后的38类型需要用到的数据采集方法
1639      */
1640     public StringBuffer newgetJspPanContent38(int formId, PanelBean panelBean) throws Exception {
1641         panelBean.bian38 = 0;
1642         StringBuffer sBuffer = new StringBuffer();
1643         sBuffer.append(
1644                 "\r\n <table class=\"main_talbe\" width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" id=\"checkPan\">");
1645         List<Map<String, Object>> selChecks = systemSettingsBo.getStatisDetail(formId);
1646         String tdSel = "";
1647         int colNo = 4;
1648         Map<String, Object> mapObject = null;
1649
1650         int tiI = 0;
1651         String theMes = null;
1652         /* String modder=null; */
1653         StringBuffer sbFieldset = new StringBuffer();
1654         String fieldCaption = null;
1655         String StatisID = null;
1656         for (int i = 0; i < selChecks.size(); i++) {
1657             mapObject = selChecks.get(i);
1658             String a = "0" + i;
1659             fieldCaption = mapObject.get("FieldCaption").toString();
1660             StatisID = mapObject.get("StatisID") + "";
1661             theMes = mapObject.get("DetailGroupName") == null ? ""
1662                     : mapObject.get("DetailGroupName").toString().toLowerCase();
1663             if (theMes.equals(mapObject.get("FieldID").toString().toLowerCase())) {
1664                 tdSel = getEndTd(tdSel, colNo, tiI, sbFieldset, sBuffer);
1665                 sbFieldset = new StringBuffer();
1666                 sbFieldset.append("<td colspan=\"" + colNo + "\"><fieldset><legend title=\"").append(fieldCaption)
1667                         .append("\">").append(fieldCaption)
1668                         .append(typeControlDao.getSelectAndCheckBoxs(a, StatisID, mapObject.get("FieldID").toString(),
1669                                 mapObject.get("FieldAlias") + "", mapObject.get("StatisType").toString(),
1670                                 mapObject.get("Sequence").toString(), mapObject.get("DisplayWidth").toString(),
1671                                 mapObject.get("displayformat") + "", mapObject.get("displayYN") + "",
1672                                 mapObject.get("isFilterZero") + "", mapObject.get("jionFlag") + "",
1673                                 mapObject.get("jionFlagGroup") + "", mapObject.get("conFlag") + "",
1674                                 mapObject.get("modfvalues") + "", mapObject.get("modfvalues2") + "", fieldCaption, panelBean))
1675                         .append("</legend>");
1676                 tiI = 0;
1677                 continue;
1678             } else {
1679
1680                 tiI++;
1681                 tdSel += "\r\n<div nowrap align=\"right\" style=\"display:none;\" title=\"" + fieldCaption
1682                         + "\"><span class=\"checkMiaoShu\" >" + fieldCaption + "</span>"
1683                         + typeControlDao.getSelectAndCheckBoxs(a, mapObject.get("StatisID") + "",
1684                         mapObject.get("FieldID").toString(), mapObject.get("FieldAlias") + "",
1685                         mapObject.get("StatisType").toString(), mapObject.get("Sequence") + "",
1686                         mapObject.get("DisplayWidth").toString(), mapObject.get("displayformat") + "",
1687                         mapObject.get("displayYN") + "", mapObject.get("isFilterZero") + "",
1688                         mapObject.get("jionFlag") + "", mapObject.get("jionFlagGroup") + "",
1689                         mapObject.get("conFlag") + "", mapObject.get("modfvalues") + "",
1690                         mapObject.get("modfvalues2") + "", fieldCaption, panelBean)
1691                         + "</div>";// 描述
1692                 /*
1693                  * modder=
1694                  * typeControlDao.getSelectAndCheckBoxs(mapObject.get("StatisID"
1695                  * )+"",mapObject.get("FieldID").toString(),
1696                  * mapObject.get("FieldAlias"
1697                  * )+"",mapObject.get("StatisType").toString
1698                  * (),mapObject.get("Sequence"
1699                  * ).toString(),mapObject.get("DisplayWidth"
1700                  * ).toString(),mapObject
1701                  * .get("displayformat")+"",mapObject.get("displayYN"
1702                  * )+"",mapObject
1703                  * .get("isFilterZero")+"",mapObject.get("jionFlag"
1704                  * )+"",mapObject
1705                  * .get("jionFlagGroup")+"",mapObject.get("conFlag"
1706                  * )+"",mapObject.get("modfvalues")+"",
1707                  * mapObject.get("modfvalues2")+"", fieldCaption);
1708                  */
1709                 /*
1710                  * if (tiI == colNo) {//
1711                  * 这样只能显示4的倍数,如果还有另起一行却多出两个单元格有信息,却没编码显示--现在来实现 tdSel = tdSel +
1712                  * "</tr>\r\n<tr>"; tiI = 0; }
1713                  */
1714
1715             }
1716         }
1717         tdSel = getEndTd(tdSel, colNo, tiI, sbFieldset, sBuffer);
1718         sbFieldset = new StringBuffer();
1719         sBuffer.append("\r\n</table>");// 这里供选择信息
1720         sBuffer.append(
1721                 "\r\n<form action=\"/public/template/grid38.jsp\" method=\"post\" name=\"fuxuanForm\" id=\"fuxuanForm\" target=\"abc\"> ");
1722         sBuffer.append("<input type=\"hidden\" name=\"formIdHid\" id=\"formIdHid\" value=\"" + formId + "\" >");
1723         sBuffer.append("<input type=\"hidden\" id=\"datalist\" name=\"datalist\" value=\"\" />");
1724         sBuffer.append(
1725                 "<input type=\"hidden\" id=\"where\" name=\"where\" value=\"\"><input type=\"hidden\" id=\"grapht\" name=\"grapht\" value=\"\">");//
1726         sBuffer.append("\r\n</form>");// 这里为提交信息
1727         sBuffer.append(
1728                 "<input type=\"hidden\" id=\"panelinitvalue\" value=\"\"> <input type=\"hidden\" id=\"selectinitvalue\" value=\"\"> ");// 这为保存进库信息
1729         sBuffer.append("\r\n<script type=\"text/javascript\"> ");
1730         sBuffer.append("get38value('');").append("getPanValue();</script>");
1731
1732         return sBuffer;
1733     }
1734
1735     /*
1736      * 新增38类型的面板显示方法 fromid筛选出是哪个功能号
1737      */
1738     /*
1739      * private StringBuffer getType38(int formId) throws Exception {
1740      *
1741      * List<Map<String, Object>> list = typei.selecttype(formId); StringBuffer
1742      * sBuffer = new StringBuffer(); String tdSel = ""; String tdSels = ""; int
1743      * colNo = 4;
1744      *
1745      * Map<String, Object> mapObject = null; int tiI = 0;
1746      *
1747      * StringBuffer sbFieldset = new StringBuffer(); String StatisName = null;
1748      * String StatisID = null; tdSel=""; String id=null; for (int i = 0; i <
1749      * list.size(); i++) {
1750      *
1751      * mapObject = list.get(i); String usercode = mapObject.get("UserCode") +
1752      * ""; if(usercode.equals("")||usercode.equals("")){ StatisName =
1753      * mapObject.get("StatisName")+""; StatisID =
1754      * mapObject.get("StatisID").toString()+""; if(StatisName.equals("null")){
1755      * StatisName=StatisID; } String id = mapObject.get("FormID") + ""; tiI++;
1756      *
1757      * tdSel += "\r\n<td nowrap align=\"right\" title=\"" + StatisName +
1758      * "\"><a class=\"easyui-linkbutton\" plain=\"true\"  onclick=\"commit38();\"><span class=\"type\">"
1759      * + StatisName +
1760      * "</span></a><a id=\"zdy\" href='javascript:void(0);' onclick=\"parent.addTab('自定义条件或标准条件','','','','/general/publicpage/indexsc.jsp?zdy="
1761      * + zdy +
1762      * "')\" class=\"easyui-linkbutton\" plain=\"true\"><input type=\"hidden\" id=\"zdy\" name=\"zdy\" value=\""
1763      * + zdy +
1764      * "\"><span class=\"type\"><img src=\"/images/QQ20170511111548.png\"></span></a>"
1765      * + "</td>"; // 描述 tdSel +=
1766      * "<div class=\"col-md-3\"><a id=\"zdy\" href='javascript:void(0);' onclick=\"parent.addTab('自定义条件或标准条件','','','','/general/publicpage/indexsc.jsp?zdy="
1767      * + zdy +
1768      * "')\" class=\"easyui-linkbutton\" plain=\"true\"><span class=\"type\"><img src=\"/images/QQ20170511111548.png\"></span></a><input id=\"StatisName\" type=\"hidden\" value=\""
1769      * + StatisID +
1770      * "\"/><a class=\"easyui-linkbutton\" plain=\"true\"  onclick=\"commit38("
1771      * +"'"+StatisID+"'"+");\"><span class=\"type\">" + StatisName +
1772      * "</span></a></div>";
1773      * parent.addTab('自定义条件或标准条件','','','','/general/publicpage/10/index.jsp')
1774      * tdSel +=
1775      * "<div class=\"col-md-3\"><a id=\"zdy\" href='javascript:void(0);' onclick=\"funcLink('800001','10','"
1776      * +formId+";"+
1777      * StatisID+"','formid;statisid','1','','','null','','','0','0','','1','')\" class=\"easyui-linkbutton\" plain=\"true\"><span class=\"type\"><img src=\"/images/QQ20170511111548.png\"></span></a><input id=\"StatisName\" type=\"hidden\" value=\""
1778      * + StatisID +
1779      * "\"/><a class=\"easyui-linkbutton\" plain=\"true\"  onclick=\"commit38("
1780      * +"'"+StatisID+"'"+");\"><span class=\"type\">" + StatisName +
1781      * "</span></a></div>";
1782      *
1783      *
1784      * if (tiI == colNo) {// 这样只能显示4的倍数,如果还有另起一行却多出两个单元格有信息,却没编码显示--现在来实现 tdSel
1785      * = tdSel + "</tr></br><tr>"; tiI = 0;
1786      *
1787      * }
1788      *
1789      *
1790      * if (tiI == colNo) {// 这样只能显示4的倍数,如果还有另起一行却多出两个单元格有信息,却没编码显示--现在来实现 tdSels
1791      * += "<div class=\"row\">" + tdSel + "</div>"; tiI = 0; tdSel = ""; } } }
1792      * int a = list.size() % 4; if (a < 4) { tdSels += "<div class=\"row\">" +
1793      * tdSel + "</div>"; } tdSel="<div class=\"row\">"+tdSel+"</div>"; tdSels =
1794      * getEndTd(tdSels, colNo, tiI, sbFieldset, sBuffer); sbFieldset = new
1795      * StringBuffer(); sBuffer.append("\r\n</table>");// 这里供选择信息 sBuffer.
1796      * append("\r\n<form action=\"/public/template/grid38.jsp\" method=\"post\" name=\"fuxuanForm\" id=\"fuxuanForm\" target=\"abc\"> "
1797      * ); sBuffer.
1798      * append("<input type=\"hidden\" name=\"formIdHid\" id=\"formIdHid\" value=\""
1799      * + formId + "\" >"); sBuffer.
1800      * append("<input type=\"hidden\" name=\"StatisNames\" id=\"StatisNames\" value=\"\" >"
1801      * ); sBuffer.
1802      * append("<input type=\"hidden\" id=\"datalist\" name=\"datalist\" value=\"\">"
1803      * ); sBuffer.
1804      * append("<input type=\"hidden\" id=\"where\" name=\"where\" value=\"\"><input type=\"hidden\" id=\"grapht\" name=\"grapht\" value=\"\">"
1805      * );// sBuffer.append("\r\n</form>");// 这里为提交信息 sBuffer.
1806      * append("<input type=\"hidden\" id=\"panelinitvalue\" value=\"\"> <input type=\"hidden\" id=\"selectinitvalue\" value=\"\"> "
1807      * );// 这为保存进库信息 sBuffer.append("\r\n<script type=\"text/javascript\"> ");
1808      * sBuffer.append("get38value('');").append("getPanValue();</script>");
1809      * return sBuffer; }
1810      */
1811
1812     private String getEndTd(String tdSel, int colNo, int tiI, StringBuffer sbFieldset, StringBuffer sBuffer) {
1813         if (tiI < 5 && tiI > 0) {
1814             tdSel += "<td colspan=\"" + (colNo - tiI) + "\">&nbsp;</td>";
1815         }
1816         if (sbFieldset.length() > 0) {
1817             if (tdSel.trim().length() > 0) {
1818                 sbFieldset.append("<table><tr>").append(tdSel).append("</tr></table>");
1819             }
1820             sbFieldset.append("</fieldset></td>");
1821             tdSel = "";
1822         }
1823         if (tdSel.toCharArray().length > 0) {// 未分组显示的情况
1824             sbFieldset.append(tdSel);
1825         }
1826         try {
1827             tdSel = getTr38(sBuffer, sbFieldset.toString());
1828         } catch (Exception e) {
1829             e.printStackTrace();
1830         }
1831         return tdSel;
1832     }
1833
1834     private String getTr38(StringBuffer sBuffer, String tdSel) throws Exception {
1835         sBuffer.append("\r\n<tr>");
1836         sBuffer.append(tdSel);
1837         sBuffer.append("\r\n</tr>");
1838         return "";
1839     }
1840
1841 }