| | |
| | | import com.yc.factory.FactoryBean; |
| | | import com.yc.multiData.SpObserver; |
| | | import com.yc.service.build.type.T_22_Ifc; |
| | | import com.yc.service.customControl.ControlLayoutIfc; |
| | | import com.yc.service.grid.GridServiceIfc; |
| | | import com.yc.service.impl.DBHelper; |
| | | import com.yc.utils.EncodeUtil; |
| | |
| | | import java.io.File; |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.sql.SQLException; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.*; |
| | | import java.util.regex.Pattern; |
| | | |
| | | |
| | |
| | | */ |
| | | @Autowired |
| | | private GridServiceIfc gridService;//表格处理的业务类 |
| | | |
| | | @Autowired |
| | | ControlLayoutIfc controlLayoutIfc; |
| | | //static String domain= AttachmentConfig.get("attachment.server"); |
| | | |
| | | /** |
| | |
| | | |
| | | //只有明细表才需要执行,其他的都只是输出{} |
| | | private String setToolAddForNew(TreeGridDTO dto) { |
| | | if (dto.postStatusAddNew) return "<%=bdMap.toString()%>"; |
| | | if (dto.postStatusAddNew) return "panMain[panIndex].buttonInfoByGrid"; |
| | | switch (dto.winType) { |
| | | case 9: |
| | | case 15: |
| | |
| | | if (dto.conNum == 0) |
| | | return "{}"; |
| | | else |
| | | return "<%=bdMap.toString()%>"; |
| | | return "panMain[panIndex].buttonInfoByGrid"; |
| | | case 18: |
| | | case 38: |
| | | case 19: |
| | |
| | | dto.formname = gform.getString("formname"); |
| | | dto.gantt = gform.getBoolean("isGantt");//是否为甘特图类型的功能号 |
| | | dto.predocstatus = gform.getInt("predocstatus");//确认前状态,为了给格线在确认后不能再修改(新增,修改,删除) by 2013-02-01 |
| | | dto.postDocStatus = gform.getInt("postdocstatus");//确认后状态,为了给格线在确认后不能再修改(新增,修改,删除) by 2013-02-01 |
| | | dto.rowcopyfields = gform.getString("rowcopyfields");//行复制时排除字段 |
| | | dto.pageSize = gform.getInt("pageSize");//页记录数 |
| | | dto.autopaging = gform.getInt("autopaging");//是否分页 |
| | |
| | | return null; |
| | | } |
| | | |
| | | private void getFirstField(TreeGridDTO dto) throws DataAccessException, SQLException { |
| | | //1先读表关键功能,如果没有相关的再读表结构 |
| | | public void getFirstField(TreeGridDTO dto) throws DataAccessException, SQLException { |
| | | |
| | | String keyfields = null; |
| | | List<String> keys = null; |
| | | try { |
| | | SpObserver.setDBtoInstance("_" + dto.dbid); |
| | | keyfields = gridService.getTableKeyFields(dto.table); |
| | | String tableName=dto.table; |
| | | if(tableName.contains("|")){//18,19类型 |
| | | tableName=tableName.split("\\|")[0]; |
| | | } |
| | | keys = gridService.getPrimaryKey(tableName); |
| | | } finally { |
| | | SpObserver.setDBtoInstance(); |
| | | } |
| | | |
| | | if (keyfields == null || "".equals(keyfields)) { |
| | | //2只取主表,主从表情况 及18,19类型,三表暂时不考虑 |
| | | List<String> keys = null; |
| | | try { |
| | | SpObserver.setDBtoInstance("_" + dto.dbid); |
| | | keys = gridService.getPrimaryKey(dto.table); |
| | | } finally { |
| | | SpObserver.setDBtoInstance(); |
| | | } |
| | | if(keys!=null&&keys.size()>0) { |
| | | for (String str : keys) { |
| | | if ("".equals(dto.field)) |
| | | dto.field += str; |
| | | else |
| | | dto.field += ";" + str; |
| | | } |
| | | keys = null; |
| | | } else { |
| | | String[] arry = keyfields.split(";"); |
| | | for (int i = 0; i < arry.length; i++) { |
| | | if ("".equals(dto.field)) |
| | | dto.field += arry[i].toLowerCase(); |
| | | else |
| | | dto.field += ";" + arry[i].toLowerCase(); |
| | | |
| | | } |
| | | arry = null; |
| | | } |
| | | /*else { |
| | | throw new ApplicationException("由于表名称是函数或视图获取不到主键,请到9807设置表关键字"); |
| | | }*/ |
| | | dto.primeKey = dto.field; |
| | | } |
| | | |
| | |
| | | if (dto.winType != 9 && dto.winType != 15) {//针对只生成一个表格的情况,17类型由于第二个没有表格所以也存在这里了 |
| | | try { |
| | | SpObserver.setDBtoInstance("_" + dto.dbid); |
| | | dto.gfields = gridService.getGfiledByFormID9(dto.formID, this.setGetPrivaryTable(dto.winType));//取得所有字段信息 增加类型 |
| | | dto.gfields = gridService.getGfiledByFormID9(dto.formID,dto.winType, this.setGetPrivaryTable(dto.winType),dto.userCode);//取得所有字段信息 增加类型 |
| | | } finally { |
| | | SpObserver.setDBtoInstance(); |
| | | } |
| | | } else { |
| | | if (dto.winType == 15 && dto.conNum == 1) { |
| | | if ((dto.winType == 15||dto.winType == 9) && dto.conNum == 1) { |
| | | List<Map> list = null; |
| | | try { |
| | | SpObserver.setDBtoInstance("_" + dto.dbid); |
| | |
| | | } finally { |
| | | SpObserver.setDBtoInstance(); |
| | | } |
| | | if (list.size() == 0) { |
| | | throw new ApplicationException(";;" + dto.formID + "-三表关联未设置好--9825"); |
| | | if (list.size() == 0&&dto.winType == 15) { |
| | | throw new ApplicationException(";;" + dto.formID + "-三表关联未设置好,请在9825功能号维护好"); |
| | | } |
| | | if (list.size() >1) { |
| | | throw new ApplicationException(";;" + dto.formID + "-存在多条记录,请在9825功能号维护好"); |
| | | } |
| | | for (Map map : list) { |
| | | int temp = (Integer) map.get("DetailFormID"); |
| | | dto.masterKey = (String) map.get("MasterKeys"); |
| | | dto.detailKey = (String) map.get("DetailKeys"); |
| | | dto.masterSumFields = (String) map.get("MasterSumFields"); |
| | | dto.detailSumFields = (String) map.get("DetailSumFields"); |
| | | dto.formID3 = temp; |
| | | dto.tempGridHeight = (map.get("gridHeight") == null) ? 0 : (Integer) map.get("gridHeight"); |
| | | } |
| | |
| | | if (dto.conNum < 2) { |
| | | try { |
| | | SpObserver.setDBtoInstance("_" + dto.dbid); |
| | | dto.gfields = gridService.getGfiledByFormID9(dto.formID, dto.conNum);//取得所有字段信息 |
| | | //9,15明细转成对应的从表 |
| | | int formType=dto.winType; |
| | | if(formType==9&&dto.conNum==1) { |
| | | //处理自定义布局 |
| | | formType=5; |
| | | boolean hasControlLayout = controlLayoutIfc.hasControlLayout(dto.formID+"", dto.userCode, formType, ExprotType.Grid, false); |
| | | dto.hasControlLayout=hasControlLayout; |
| | | } |
| | | if(formType==15&&dto.conNum==1){ |
| | | //处理自定义布局 |
| | | formType=8; |
| | | boolean hasControlLayout = controlLayoutIfc.hasControlLayout(dto.formID+"", dto.userCode, formType, ExprotType.Grid, false); |
| | | dto.hasControlLayout=hasControlLayout; |
| | | } |
| | | dto.gfields = gridService.getGfiledByFormID9(dto.formID,formType, dto.conNum,dto.userCode);//取得所有字段信息 |
| | | dto.lastField = gridService.getSimpleJdbcTemplate().queryForObject(sql, new Object[]{dto.formID, 1}, String.class); |
| | | } catch (DataAccessException e) { |
| | | dto.lastField = ""; |
| | |
| | | dto.formID = dto.formID3; |
| | | try { |
| | | SpObserver.setDBtoInstance("_" + dto.dbid); |
| | | dto.gfields = gridService.getGfiledByFormID9(dto.formID, 0);//取得所有 字段信息 |
| | | dto.gfields = gridService.getGfiledByFormID9(dto.formID,1, 0,dto.userCode);//取得所有 字段信息 |
| | | dto.lastField = gridService.getSimpleJdbcTemplate().queryForObject(sql, new Object[]{dto.formID, 0}, String.class); |
| | | } finally { |
| | | SpObserver.setDBtoInstance(); |
| | | } |
| | | } |
| | | } |
| | | //try { |
| | | this.getTableName(dto.formID, dto.winType + "|" + dto.conNum, dto);// 增加类型 |
| | | if (dto.table == null) throw new ApplicationException(dto.formID + "--未设置明细表,请在9802设置后重新生成!"); |
| | | if(dto.winType==1 && ("".equals(dto.table) || dto.table == null)){ |
| | | throw new ApplicationException(dto.formID + ",类型:"+dto.winType+"--未设置主表,请在9801设置后重新生成!"); |
| | | if (dto.winType == 1 && ("".equals(dto.table) || dto.table == null)) { |
| | | throw new ApplicationException(dto.formID + ",类型:" + dto.winType + "--未设置主表,请在9801设置后重新生成!"); |
| | | } |
| | | if (dto.isTable) { |
| | | this.getFirstField(dto); |
| | | } |
| | | this.getFirstField(dto); |
| | | if (dto.conNum >= 2) |
| | | if (dto.tempGridHeight != 0) dto.gridHeight = dto.tempGridHeight; |
| | | |
| | | gridConfig(root, dto); |
| | | createCoumtHeader(dto); |
| | | //} catch (Exception e) { |
| | | // e.printStackTrace(); |
| | | //} |
| | | } |
| | | |
| | | private synchronized void fillColumnNumTree(int num, TreeGridDTO dto) {//根据最大行值填充列 |
| | |
| | | } |
| | | |
| | | /** |
| | | * 判断当前生成的表格是属于列表还是明细,因为只有是明细表的标题才需要加必填星号 |
| | | * |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | private String getDetailGridTitle(TreeGridDTO dto, boolean keyInput, String id) { |
| | | if (!keyInput) return " "; |
| | | boolean isDetail = false; |
| | | switch (dto.winType) { |
| | | case 1: |
| | | case 10: |
| | | case 3: |
| | | case 30: |
| | | case 7: |
| | | case 301: |
| | | case 302: |
| | | case 304: |
| | | isDetail = true; |
| | | break; |
| | | case 9: |
| | | if (dto.conNum == 1) isDetail = true; |
| | | break; |
| | | case 15: |
| | | if (dto.conNum > 0) isDetail = true; |
| | | break; |
| | | case 497: |
| | | if (dto.conNum == 1) isDetail = true; |
| | | break; |
| | | } |
| | | return isDetail ? (id.toLowerCase() + "HtmlPostfix=\"<span style='color:white;'> *</span>\" ") : " "; |
| | | } |
| | | |
| | | /** |
| | | * 动态根据表描述字段的如下规律 |
| | | * 表格|显示|表格|描述|表格|类型|表格|长度 |
| | | * 外表|表号|外表|类型|外表|清空关联 |
| | |
| | | if (GridUtils.prossRowSetDataType_Boolean(map, "ShowOnGrid")) {//设置为隐藏 |
| | | String dec = GridUtils.prossRowSetDataType_String(map, "gridcaption");//表格描述 |
| | | String fieldname = GridUtils.prossRowSetDataType_String(map, "fieldname");//字段描述 |
| | | String id = map.get("fieldid") + "".trim();//字段名,去掉空格 |
| | | boolean keyInput = GridUtils.prossRowSetDataType_Boolean(map, "KeyInput");//是否必填 |
| | | String id = (map.get("fieldid") + "").trim();//字段名,去掉空格 |
| | | if (id.equalsIgnoreCase("id") && (!dto.gantt)) id = "_ycid_";//避免id与格线中的id冲突而增加,页面返回时需要转换 |
| | | String temp = (dec == null || "".equalsIgnoreCase(dec)) ? fieldname : dec;//如果没定义表描述就取字段名称作为表格显示字段 |
| | | if (temp == null || temp == "" || temp.length() == 0) temp = id; |
| | |
| | | colNum = this.getColumnNum(cap[i], dto.tempStr, i, i == 0 ? cap[0] : cap[i - 1], k, dto);//取得跨列值 |
| | | if (colNum == 0) flag = true;//表示存在¥,则不需要显示 |
| | | |
| | | show = id.toLowerCase() + "=\"" + this.getFormCap(cap[i]) + "\" " + id.toLowerCase() + "Align='Center' " + (colNum > 1 ? (" " + id.toLowerCase() + "Span='" + colNum + "' ") : ""); |
| | | show = id.toLowerCase() + "=\"" + this.getFormCap(cap[i]) + "\" " + getDetailGridTitle(dto, keyInput, id) + id.toLowerCase() + "Align='Center' " + (colNum > 1 ? (" " + id.toLowerCase() + "Span='" + colNum + "' ") : ""); |
| | | hidden = id.toLowerCase() + "Visible='-1' "; |
| | | if (flag) |
| | | gridHeader.append(hidden); |
| | |
| | | private StringBuilder fillFT(int type, int ft, String sql, TreeGridDTO dto) { |
| | | StringBuilder sb = new StringBuilder(); |
| | | SqlRowSet rst = null; |
| | | String enumMenu=""; |
| | | try { |
| | | SpObserver.setDBtoInstance("_" + dto.dbid); |
| | | rst = gridService.getFTData(ft); |
| | |
| | | } |
| | | sb.append(""); |
| | | boolean flag = false; |
| | | if (type == 31 || type == 2 || type == 35 || type == 43 || type == 30 || type == 32) {//2,类型,31类型下拉列表控件时,为三种情况,一个是静态sql,一个是动态sql,需要用页面的值替换再用ajax提交返回,另一个就是表号生成 |
| | | if (type == 31 || type == 2 || type == 35 || type == 43 || type == 30 || type == 32|| type == 46) {//2,类型,31类型下拉列表控件时,为三种情况,一个是静态sql,一个是动态sql,需要用页面的值替换再用ajax提交返回,另一个就是表号生成 |
| | | StringBuilder id = new StringBuilder(); |
| | | StringBuilder value = new StringBuilder(); |
| | | if (type != 30 && type != 32) { |
| | | id.append("| "); |
| | | value.append("| "); |
| | | if(dto.isSuppressBlankLineForDropDown==0) { |
| | | //只有为0才需要增加空白列 |
| | | id.append("| "); |
| | | value.append("| "); |
| | | } |
| | | } |
| | | try { |
| | | if (sql != null && sql != "" && sql.length() > 0) {//有sql参数 |
| | |
| | | SpObserver.setDBtoInstance(); |
| | | } |
| | | if (!set.wasNull()) { |
| | | enumMenu=getEnumMenu(dto,set,null); |
| | | while (set.next()) { |
| | | id.append("|").append(this.replaceBlank(set.getString(1))); |
| | | value.append("|").append(this.replaceBlank(set.getString(2))); |
| | |
| | | } |
| | | if (!flag) { |
| | | if (!rst.wasNull()) { |
| | | enumMenu=getEnumMenu(dto,rst,"interValue"); |
| | | while (rst.next()) { |
| | | id.append("|").append(this.replaceBlank(rst.getString("interValue"))); |
| | | value.append("|").append(this.replaceBlank(rst.getString("dictvalue"))); |
| | | if(type==46){ |
| | | value.append("|").append("<div style="background:").append(rst.getString("interValue")).append("">").append(" </div>"); |
| | | }else { |
| | | value.append("|").append(this.replaceBlank(rst.getString("dictvalue"))); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | sb.append(""); |
| | | throw new ApplicationException(e.getMessage()); |
| | | } finally { |
| | | rst = null; |
| | | } |
| | | if (type == 31) |
| | | if (ft != 0)//有表号才会有新增选项 |
| | | if (type == 31) { |
| | | if (ft != 0) {//有表号才会有新增选项 |
| | | sb.append(" EnumKeys='").append(id.toString() + "|-add-").append("' Enum='").append(value.toString() + "|<<新增>>").append("' "); |
| | | else//当没表号表示不需要新增选项 |
| | | } else {//当没表号表示不需要新增选项 |
| | | sb.append(" EnumKeys='").append(id.toString()).append("' Enum='").append(value.toString()).append("' "); |
| | | else { |
| | | if (org.apache.commons.lang3.StringUtils.isNotBlank(id.toString()) && org.apache.commons.lang3.StringUtils.isNotBlank(enumMenu)) { |
| | | sb.append("EnumMenu=\"").append(enumMenu).append("\" "); |
| | | } |
| | | } |
| | | }else { |
| | | if (type != 35) { |
| | | sb.append(" EnumKeys='").append(id.toString()).append("' Enum='").append(value.toString()).append("' "); |
| | | if(type==2) {//43类型增加EnumMenu输出会有问题 |
| | | if (org.apache.commons.lang3.StringUtils.isNotBlank(id.toString()) && org.apache.commons.lang3.StringUtils.isNotBlank(enumMenu)) { |
| | | sb.append("EnumMenu=\"").append(enumMenu).append("\" "); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (type == 35) {//可编辑列表,值与键需要一样 |
| | | sb.append(" Button='Defaults' Defaults='").append(("|".equals(value.toString().trim())?"":value.toString())).append("' "); |
| | | sb.append(" Button='Defaults' Defaults='").append(("|".equals(value.toString().trim()) ? "" : value.toString())).append("' "); |
| | | } |
| | | if (type == 43 || type == 30) { |
| | | sb.append(" Range='1' "); |
| | |
| | | id = null; |
| | | value = null; |
| | | } |
| | | // else if(type==35){//可编辑列表,值与键相同 |
| | | // StringBuilder value=new StringBuilder(); |
| | | // try{ |
| | | // if(!rst.wasNull()){ |
| | | // while(rst.next()){ |
| | | // value.append("|").append(this.replaceBlank(rst.getString("dictvalue"))); |
| | | // } |
| | | // } |
| | | // }catch(Exception e){ |
| | | // sb.append(""); |
| | | // }finally{ |
| | | // rst=null; |
| | | // } |
| | | // sb.append(" Button='Defaults' Defaults='").append(value.toString()).append("' "); |
| | | // value=null; |
| | | // } |
| | | return sb; |
| | | } |
| | | |
| | | private synchronized String setJsName(TreeGridDTO dto) { |
| | | return "grid_" + dto.formID + "_" + dto.winType + ".xml"; |
| | | } |
| | | /** |
| | | * 生成下拉列表的enumMenu,主要是为了能显示-号的情况 |
| | | * @param dto |
| | | * @param rst |
| | | * @return |
| | | */ |
| | | private String getEnumMenu(TreeGridDTO dto,SqlRowSet rst,String colName){ |
| | | String menu="{Items:[";//{Value:''},{Value:'-',Text:'-'},{Value:'+',Text:'+'} |
| | | StringJoiner joiner=new StringJoiner(","); |
| | | if(dto.isSuppressBlankLineForDropDown==0){ |
| | | //有留白列 |
| | | joiner.add("{Value:'',Text:''}"); |
| | | } |
| | | while (rst.next()) { |
| | | if(colName==null) |
| | | joiner.add("{Value:'"+rst.getString(1)+"',Text:'"+rst.getString(2)+"'}"); |
| | | else |
| | | joiner.add("{Value:'"+rst.getString(colName)+"',Text:'"+rst.getString("dictvalue")+"'}"); |
| | | |
| | | } |
| | | rst.beforeFirst(); |
| | | return menu+=joiner.toString()+"]}"; |
| | | } |
| | | private synchronized String setJsName(TreeGridDTO dto) { |
| | | |
| | | return "grid_" + dto.formID +(dto.hasControlLayout?("_"+dto.userCode):"")+ "_" + dto.winType + ".xml"; |
| | | } |
| | | private synchronized String setFileName(TreeGridDTO dto) { |
| | | //由于8类型的二三表共用一个页面,且用2表的功能号作为文件名称,所以这里需要特殊处理 |
| | | int formid= dto.formID; |
| | | if(dto.winType==15&&dto.conNum!=0){ |
| | | formid=dto.minID; |
| | | } |
| | | return formid +(dto.hasControlLayout?("_"+dto.userCode):"") + "_grid.jsp"; |
| | | } |
| | | /** |
| | | * 生成页面时需要检查的关键字段名,避免生成格线有问题 |
| | | */ |
| | |
| | | int flg = this.setGetPrivaryTable(type); |
| | | // StringBuffer sb = new StringBuffer(); //舍弃这属性 xin 2021-3-23 14:42:37 |
| | | StringBuffer exps = new StringBuffer(); |
| | | String sql = " select FieldID,fieldname,GridCaption,ShowOnGrid,showFieldValueExpression from gfield where formid=? and HeadFlag=? order by statisid asc"; |
| | | String sql = " select FieldID,fieldname,GridCaption,ShowOnGrid,showFieldValueExpression,displayformat,isnull(GridControlType,0) as GridControlType from gfield where formid=? and HeadFlag=? order by statisid asc"; |
| | | List<Map<String, Object>> list = null; |
| | | try { |
| | | SpObserver.setDBtoInstance("_" + dbid); |
| | |
| | | String str = "";//保存哪些字段是隐藏的 |
| | | |
| | | //下面添加的titleLis属性用来处理层的标题 xin 2021-3-23 14:39:52 |
| | | List<Map<String,Object>> titleLis= new ArrayList<>(); |
| | | List<Map<String, Object>> titleLis = new ArrayList<>(); |
| | | for (String s : tem) { |
| | | for (Map<String, Object> map : list) { |
| | | if (s.trim().equalsIgnoreCase((String) map.get("FieldID"))) { |
| | | Map<String,Object> titleMap=new HashMap<>(); |
| | | Map<String, Object> titleMap = new HashMap<>(); |
| | | titleMap.put("field", s.toLowerCase()); |
| | | titleMap.put("title", map.get("fieldname") == null |
| | | ? (String) map.get("GridCaption") : (String) map.get("fieldname")); |
| | | // titleMap.put("width", 100); |
| | | titleMap.put("align", "center"); |
| | | titleMap.put("displayformat", (String) map.get("displayformat")); |
| | | int controlType=GridUtils.prossRowSetDataType_Int(map,"GridControlType"); |
| | | titleMap.put("controlType", controlType); |
| | | if ((Integer) (map.get("ShowOnGrid") == null ? 0 : map.get("ShowOnGrid")) == 1) { |
| | | // sb.append("<th width=\"\">").append(map.get("fieldname") == null ? (String) map.get("GridCaption") : (String) map.get("fieldname")).append("</th>"); |
| | | }else { |
| | | } else { |
| | | if (str == "") { |
| | | str += map.get("FieldID"); |
| | | }else { |
| | | } else { |
| | | str += ";" + map.get("FieldID"); |
| | | } |
| | | // sb.append("<th width=\"\" style=\"display:none;\">").append(map.get("fieldname") == null ? (String) map.get("GridCaption") : (String) map.get("fieldname")).append("</th>"); |
| | |
| | | // return "<div id=\"T_" + fromid + "_10" + rod + "div\" style=\"z-index:9999;display:none;position:absolute;height:300px;overflow:auto;\"><table data='" + json + "' id=\"T_" + fromid + "_10" + rod + "CDiv\" class=\"hovertable\"><tr>" + |
| | | // sb.toString() + "</tr></table></div>\t\n"; |
| | | return "<div id=\"T_" + fromid + "_10" + rod + "div\" style=\"z-index:9999;display:none;position:absolute;height:320px;overflow:auto;\">" + |
| | | "<table data-datas=\"" + json.replaceAll("\"","'") + "\" data-title=\""+GridUtils.toJson(titleLis).replaceAll("\"","'")+"\" " + |
| | | "<table data-datas=\"" + json.replaceAll("\"", "'") + "\" data-title=\"" + GridUtils.toJson(titleLis).replaceAll("\"", "'") + "\" " + |
| | | "id=\"T_" + fromid + "_10" + rod + "CDiv\" lay-filter=\"T_" + fromid + "_10" + rod + "CDiv\" class=\"hovertable\">" + |
| | | "</table></div>\t\n"; |
| | | } |
| | |
| | | boolean iscopy = false;//标记当前9802是否有复制时排除字段,为了兼用不存在出错的情况 |
| | | boolean isref = false;//标记当前9802是否有自动刷新和加载到页面的字段,为了兼用不存在出错的情况 |
| | | int fumIndex = 0;//标记导出时候字段位置 |
| | | int tabColIndex = 0;//标记导出字段在汇总列的位置 |
| | | Map<String, String> vMap = this.prossDisable(dto); |
| | | //dto.gfields.first(); |
| | | // do{ |
| | |
| | | // Map<String,String> map9801= SqlFormatUtils.createSQLFormat(map,9801); |
| | | // Map<String,String> map9802= SqlFormatUtils.createSQLFormat(map,9802); |
| | | // //----- |
| | | String id = GridUtils.prossRowSetDataType_String(map, "fieldid");//字段名 |
| | | String id = org.apache.commons.lang3.StringUtils.trim(GridUtils.prossRowSetDataType_String(map, "fieldid"));//字段名 |
| | | String dec = GridUtils.prossRowSetDataType_String(map, "gridcaption");//表格描述 |
| | | String fieldname = GridUtils.prossRowSetDataType_String(map, "fieldname");//字段描述 |
| | | String temp = (dec == null || "".equalsIgnoreCase(dec)) ? fieldname : dec;//如果没定义表描述就取字段名称作为表格显示字段 |
| | |
| | | boolean uppercase = GridUtils.prossRowSetDataType_Boolean(map, "uppercase");//大写 |
| | | String ValueExp = GridUtils.prossRowSetDataType_String(map, "showFieldValueExpression");//权限控制是否显示该值 |
| | | String editStatus = GridUtils.prossRowSetDataType_String(map, "editStatus");//权限控制是否显示该值 |
| | | if(org.apache.commons.lang3.StringUtils.isNotBlank(editStatus)){ |
| | | if(editStatus.contains("'")){ |
| | | throw new ApplicationException(id+"-editStatus参数值["+editStatus+"】不能存在单引号"); |
| | | } |
| | | } |
| | | boolean oneRec = GridUtils.prossRowSetDataType_Boolean(map, "return_one_record");//是否返回到单记录 |
| | | boolean onlyOne = GridUtils.prossRowSetDataType_Boolean(map, "onlyOne");//只返回单条记录 |
| | | String sqlScript = this.replaceBlank(GridUtils.prossRowSetDataType_String(map, "SqlScript"));// 控件sql |
| | |
| | | boolean cpltrow = GridUtils.prossRowSetDataType_Boolean(map, "copyfromlastrow");//插入时从上行复制 |
| | | String cs = GridUtils.prossRowSetDataType_String(map, "stylecss");//css样式 |
| | | String tips = GridUtils.prossRowSetDataType_String(map, "TipsExpression"); |
| | | int isSuppressBlankLineForDropDown = GridUtils.prossRowSetDataType_Int(map, "isSuppressBlankLineForDropDown"); |
| | | valExp.append((ValueExp != null && !"".equalsIgnoreCase(ValueExp)) ? id + "|" + this.replaceBlank(ValueExp) + ";" : ""); |
| | | cssExp.append((cs != null && !"".equalsIgnoreCase(cs)) ? id + "|" + this.replaceBlank(cs.replaceAll(";", "~")) + ";" : ""); |
| | | tipsExp.append((tips != null && !"".equalsIgnoreCase(tips)) ? id + "|" + this.replaceBlank(tips.replaceAll(";", "~")) + ";" : ""); |
| | |
| | | msgInfo.append(id + "-的格式设置不正确,不能以#号分隔,[" + displayformat + "]"); |
| | | |
| | | //上面的都是读取9802的设置信息,接下来的才是逻辑处理 |
| | | if (isExport) { |
| | | //if(expTitle==1) exportTitle.append(id.toLowerCase()).append(";");//拼接所有需要组成的id |
| | | if (displayformat != null && !displayformat.isEmpty()) |
| | | exportInfo.append(id.toLowerCase()).append("#").append(temp.replaceAll("-", "_")).append("#").append(displayformat.replaceAll("-", "~")).append(";");//-转成~是为了兼容之前的代码 |
| | | else |
| | | exportInfo.append(id.toLowerCase()).append("#").append(temp.replaceAll("-", "_")).append(";"); |
| | | if (SumField > 0) |
| | | SumFieldInfo.append(id.toLowerCase()).append("#").append(SumField).append("|").append(funclinkname).append("|").append(fumIndex).append("|").append((displayformat != null && !displayformat.isEmpty()) ? displayformat.replaceAll("-", "~") : "0").append(";"); |
| | | fumIndex++; |
| | | } |
| | | |
| | | boolean listShow = ((dto.order == 1//表示是列表的情况(很少存在需要取隐藏字段值的情况) by 2015-4-7 去掉这个限制 |
| | | // &&(type==33||type==34||type==36||type==38||type==41) |
| | |
| | | } |
| | | } |
| | | |
| | | if (dto.order == 1 && "".equalsIgnoreCase(dto.orderFiled)) {//排序字段 |
| | | if (dto.order == 1) {//排序字段 |
| | | String sybmol=""; |
| | | if(org.apache.commons.lang3.StringUtils.isNotBlank(dto.orderFiled)){ |
| | | sybmol=","; |
| | | } |
| | | if (id.equalsIgnoreCase("doccode")) { |
| | | dto.orderFiled = id + " desc"; |
| | | dto.orderFiled += sybmol+id + " desc"; |
| | | } |
| | | if (id.equalsIgnoreCase("docdate")) { |
| | | dto.orderFiled = dto.orderFiled.length() == 0 ? id + " desc" : "," + id + " desc"; |
| | | dto.orderFiled += sybmol + id + " desc"; |
| | | } |
| | | } else if (dto.order == 2 && "".equalsIgnoreCase(dto.orderFiled)) { |
| | | if (id.equalsIgnoreCase("docitem")) |
| | |
| | | } |
| | | } |
| | | |
| | | if (fua != null && !fua.equalsIgnoreCase("") && activefuns&&calcuField!=0) { |
| | | if (fua != null && !fua.equalsIgnoreCase("") && activefuns && calcuField != 0) { |
| | | formn.append(id.toLowerCase()).append("@p@").append(fua).append(":"); |
| | | } |
| | | if (value != null && !value.equalsIgnoreCase("")) {//自动编号功能 |
| | |
| | | List<Map> ct = this.getAutoCodeType(dto.formID, dto.dbid); |
| | | if (ct.size() == 0) msgInfo.append(id + "字段设置autocode,但没在9801进行相关设置!"); |
| | | Map ma = ct.get(0); |
| | | if (ma.get("precodetype") == null || ma.get("codelength") == null || ma.get("preFixcode") == null) |
| | | msgInfo.append(id + "-字段设置autocode,但没在9801对【precodetype,preFixcode,codelength】进行相关设置!"); |
| | | if ((Integer) ma.get("precodetype") == 1) { |
| | | if (ma.get("precodetype") == null || ma.get("codelength") == null ) |
| | | msgInfo.append(id + "-字段设置autocode,但没在9801对【precodetype,codelength】进行相关设置!"); |
| | | |
| | | /* List<Map<String, Object>> li = this.getCodeInfo(dto.formID, dto.dbid); |
| | | if (li.size() == 0) msgInfo.append(id + "字段设置autocode,但没在[_sysautocode]表进行相关设置!"); |
| | | Map map1 = li.get(0);*/ |
| | | value = "autocode|" +dto.formID + "," + dto.winType + ",~" ; |
| | | |
| | | /*if ((Integer) ma.get("precodetype") == 1) { |
| | | List<Map<String, Object>> li = this.getCodeInfo(dto.formID, dto.dbid); |
| | | if (li.size() == 0) msgInfo.append(id + "字段设置autocode,但没在[_sysautocode]表进行相关设置!"); |
| | | Map map1 = li.get(0); |
| | | value = "autocode|1|" + (Integer) map1.get("formid") + "," + (Integer) map1.get("Formtype") + "," + (String) map1.get("Fieldid") + "," + (Integer) map1.get("codelength") + "," + (String) map1.get("preFixcode"); |
| | | value = "autocode|1|" + (Integer) map1.get("formid") + "," + (Integer) map1.get("Formtype") + "," + (String) map1.get("Fieldid") ; |
| | | map1 = null; |
| | | } else if ((Integer) ma.get("precodetype") == 2) { |
| | | try { |
| | |
| | | } finally { |
| | | SpObserver.setDBtoInstance(); |
| | | } |
| | | } |
| | | }*/ |
| | | values.append(id.toLowerCase()).append("#").append(value).append("&p&"); |
| | | ma = null; |
| | | } else if (!value.equalsIgnoreCase("@now") && (value.indexOf("@") > -1 || value.indexOf("!") > -1)) {//替换成当前session的值 |
| | |
| | | } else |
| | | values.append(id.toLowerCase()).append("#").append(value).append("&p&"); |
| | | } |
| | | if (SumField != 0) |
| | | if (SumField != 0) { |
| | | sumfu.append(id.toLowerCase()).append("#").append(SumField).append(":").append(funclinkname.replaceAll(",", "@p@")).append(",");//自定义公式有可能存在有,号需要处理 |
| | | if ((passwordchar != null && !"".equalsIgnoreCase(passwordchar) && "1".equalsIgnoreCase(passwordchar))) |
| | | tabColIndex++; |
| | | } |
| | | if (isExport) { |
| | | if (displayformat != null && !displayformat.isEmpty()) { |
| | | exportInfo.append(id.toLowerCase()).append("#").append(temp.replaceAll("-", "_")).append("#").append(displayformat.replaceAll("-", "~")).append(";");//-转成~是为了兼容之前的代码 |
| | | }else { |
| | | exportInfo.append(id.toLowerCase()).append("#").append(temp.replaceAll("-", "_")).append(";"); |
| | | if(type==9||type==19||type==40){ |
| | | exportInfo.append(id.toLowerCase()).append("#").append(temp.replaceAll("-", "_")+"下载").append(";"); |
| | | } |
| | | } |
| | | if (SumField > 0) { |
| | | SumFieldInfo.append(id.toLowerCase()).append("#").append(SumField).append("|").append(funclinkname).append("|").append(fumIndex).append("_T_").append(tabColIndex-1).append("|").append((displayformat != null && !displayformat.isEmpty()) ? displayformat.replaceAll("-", "~") : "0").append(";"); |
| | | } |
| | | fumIndex++; |
| | | } |
| | | |
| | | if ((passwordchar != null && !"".equalsIgnoreCase(passwordchar) && "1".equalsIgnoreCase(passwordchar))) { |
| | | type = 101; |
| | | } |
| | | //控件类型 |
| | | String typeName = Control.getTypeName(type == 0 ? 1 : type, typeInfo, id, displayformat, dto.winType); |
| | | StringBuilder sb = new StringBuilder(); |
| | | if (type == 9 || type == 40) { |
| | | if (type == 9 || type == 40 || type == 19) { |
| | | if (dto.picFild != null && dto.picFild != "") { |
| | | if (!dto.picFild.contains(id + ";")) |
| | | dto.picFild += id.toLowerCase() + ";";//保存是哪一个字段是图片字段 |
| | | } else { |
| | | dto.picFild += id.toLowerCase() + ";";//保存是哪一个字段是图片字段 |
| | | dto.picFild += id.toLowerCase() + ";";//用来保存是哪一个字段是图片字段 |
| | | } |
| | | sb.append(" CanFocus='0' ");//图片不需要取得焦点,避免在进入编辑状态时上传图片,返回不显示的问题 |
| | | sb.append(" ImgType='" + type + "' ");//区分是9,还是19 |
| | | sb.append(" showType='" + (type == 9 ? 0 : 2) + "' ");//以后增加格线支持多附件显示需要用到,区别出到时应该取哪一个附件表(_sys_Attachment9,_sys_Attachment)的数据 |
| | | } |
| | | if (type == 2 || type == 35 || type == 31 || type == 43 || type == 30 || type == 32) { |
| | | sb = fillFT(type, ft, sqlScript, dto);//2类型 |
| | | sb.append(" CanEmpty='0' "); |
| | | dto.foot2 += id.toLowerCase() + ";";//解决针对2,35类型有值时候统计列会显示出来的问题 |
| | | dto.footb.append(id.toLowerCase()).append("Type='Text' ").append(id.toLowerCase()).append("Button='' ");//汇总页需要屏蔽单元格类型为Text |
| | | if (type == 2 || type == 35 || type == 31 || type == 43 || type == 30 || type == 32|| type == 46) { |
| | | dto.isSuppressBlankLineForDropDown=isSuppressBlankLineForDropDown; |
| | | if(!(type==46&&ft==0&&org.apache.commons.lang3.StringUtils.isBlank(sqlScript))){ |
| | | //46控件没有2,31的设置选项则不用在这里生成下拉列表 |
| | | sb = fillFT(type, ft, sqlScript, dto);//2类型 |
| | | sb.append(" CanEmpty='0' "); |
| | | dto.foot2 += id.toLowerCase() + ";";//解决针对2,35类型有值时候统计列会显示出来的问题 |
| | | dto.footb.append(id.toLowerCase()).append("Type='Text' ").append(id.toLowerCase()).append("Button='' ");//汇总页需要屏蔽单元格类型为Text |
| | | } |
| | | } |
| | | if (isAudit != 0) sb.append(" audit='").append(isAudit).append("'");//增加审计标记 |
| | | if (rowspan) {//合并行 |
| | | sb.append(" Spanned='1' ");//表示需要合并 |
| | | dto.rowspanStr += id + ";";//保存需要合并的字段,加载时需要用到 |
| | | } |
| | | |
| | | if (type == 3 || type == 31 || type == -3 || type == 42|| type == 46) { //3类型 |
| | | if (type == 3 || type == 31 || type == -3 || type == 42) { //3类型 |
| | | String suggest = this.replaceBlank(GridUtils.prossRowSetDataType_String(map, "SuggestFileds").replaceAll("\\bid\\b", "_ycid_").toLowerCase()); |
| | | String RelationField = this.replaceBlank(GridUtils.prossRowSetDataType_String(map, "RelationField").replaceAll("\\bid\\b", "_ycid_").toLowerCase()); |
| | | if ("".equalsIgnoreCase(suggest) && type == 42) |
| | |
| | | String form = this.replaceBlank(GridUtils.prossRowSetDataType_String(map, "FK").replaceAll("\\bid\\b", "_ycid_").toLowerCase()); |
| | | String sf = this.replaceBlank(GridUtils.prossRowSetDataType_String(map, "sPremissField").replaceAll("\\bid\\b", "_ycid_").toLowerCase()); |
| | | String df = this.replaceBlank(GridUtils.prossRowSetDataType_String(map, "dPremissField").replaceAll("\\bid\\b", "_ycid_").toLowerCase()); |
| | | if(StringUtils.isNotBlank(top)&&StringUtils.isBlank(form)){ |
| | | throw new ApplicationException("【9802】里【"+id+"】设置了【外表|接收自身字段名】,则【外表|接收外表字段名】不能为空"); |
| | | int scanCodeField = GridUtils.prossRowSetDataType_Int(map, "ScanCodeField");//APP扫码|3类型控件扫码录入功能 |
| | | if (StringUtils.isNotBlank(top) && StringUtils.isBlank(form)) { |
| | | throw new ApplicationException("【9802】里【" + id + "】设置了【外表|接收自身字段名】,则【外表|接收外表字段名】不能为空"); |
| | | } |
| | | if(StringUtils.isNotBlank(sf)&&StringUtils.isBlank(df)){ |
| | | throw new ApplicationException("【9802】里【"+id+"】设置了【外表|自身条件字段名】,则【外表|外表条件字段名】不能为空"); |
| | | if (StringUtils.isNotBlank(sf) && StringUtils.isBlank(df)) { |
| | | throw new ApplicationException("【9802】里【" + id + "】设置了【外表|自身条件字段名】,则【外表|外表条件字段名】不能为空"); |
| | | } |
| | | sb.append(" formid='").append(ft) |
| | | .append("' toParm=\"").append(top) |
| | |
| | | .append("' wtype='").append(wiType) |
| | | .append("' oneRec='").append(oneRec ? 1 : 0) |
| | | .append("' onlyOne='").append(onlyOne ? 1 : 0) |
| | | .append("' isSuppressBlankLineForDropDown='").append(isSuppressBlankLineForDropDown) |
| | | .append("' sqlWhere=\"").append(sqlWhere)// by danaus 2019/12/20 15:28 |
| | | .append("\" path='").append(path) |
| | | |
| | | .append("' scanCodeField='").append(scanCodeField) |
| | | .append(uppercase ? "' uppercase='" + uppercase : "") |
| | | .append("' eFilter=\"").append(ef == null ? "" : (ef.replaceAll("'", "\\\\'").replaceAll("\n\t", ""))).append("\""); |
| | | String sug = ""; |
| | |
| | | sug = sug.substring(0, sug.length() - 1); |
| | | sb.append(" suggest='" + sug + "'"); |
| | | //生成显示的数据名称 |
| | | |
| | | //if(!sugId.contains(ft)){ |
| | | // sugId.add(ft); |
| | | rod++;//生成100之内的随机数 |
| | | sb.append(" rand='10" + rod + "'"); |
| | | dto.sugList.append(this.getSuggestFilds(ft + "", wiType, sug, sug, top, form, oneRec, rod, dto.dbid, sf, df)); |
| | | // } |
| | | } |
| | | if (type == -3) {//表示为辅助核算 |
| | | sb.append(" curType='gl' "); |
| | |
| | | if (type == 3 || type == -3) { |
| | | sb.append(" Button='/images/ppp.gif' WidthPad='20'"); |
| | | } |
| | | if (type == 46) { |
| | | sb.append(" Button='/images/qr.png' WidthPad='20' colType=46 "); |
| | | } |
| | | |
| | | this.prossIntoSession(top, dto); |
| | | this.prossIntoSession(form, dto); |
| | | this.prossIntoSession(sf, dto); |
| | |
| | | } else if (type == 1 || type == 0 || type == 7) { |
| | | sb.append(uppercase ? " uppercase='" + uppercase + "'" : ""); |
| | | |
| | | } else if (type == 9) {//图片控件 |
| | | } else if (type == 9 || type == 19) {//图片控件 |
| | | sb.append(" Button='/images/d.jpg' WidthPad='20' "); |
| | | dto.footb.append(id.toLowerCase()).append("Type='Text' ").append(id.toLowerCase()).append("Button='' ");//汇总页需要屏蔽单元格类型为Text |
| | | } else if (type == 46) {//颜色控件 |
| | | sb.append(" colType='46' "); |
| | | dto.footb.append(id.toLowerCase()).append("Type='Text' ").append(id.toLowerCase()).append("Button='' ");//汇总页需要屏蔽单元格类型为Text |
| | | } else if (type == 47) {//进度条控件 |
| | | sb.append(" colType='47' "); |
| | | dto.footb.append(id.toLowerCase()).append("Type='Text' ").append(id.toLowerCase()).append("Button='' ");//汇总页需要屏蔽单元格类型为Text |
| | | } else if (type == 48) {//css样式选择器 |
| | | sb.append(" CanEmpty='0' Button='/images/ppp.gif' WidthPad='20' colType='48' "); |
| | | dto.footb.append(id.toLowerCase()).append("Type='Text' ").append(id.toLowerCase()).append("Button='' ");//汇总页需要屏蔽单元格类型为Text |
| | | } |
| | | if (type != 2 && type != 31) {//下拉类型的不需要显示 |
| | |
| | | } |
| | | if (ShowOnGrid && id.equalsIgnoreCase(dto.lastField.toLowerCase())) sb.append(" ent='1' ");//增加标记为最后一个字段 |
| | | if (index < dto.frozencols) {// |
| | | left.append("<C CaseSensitive='0' Name='").append(id.toLowerCase()).append("'").append(" cpltrow='").append(cpltrow ? 1 : 0).append("' CanEdit='").append(readOnly ? 0 : 1).append("' Type='").append(typeName).append("' ") |
| | | left.append("<C " + showMenuName(dec, dto.colset) + " CaseSensitive='0' Name='").append(id.toLowerCase()).append("'").append(" cpltrow='").append(cpltrow ? 1 : 0).append("' CanEdit='").append(readOnly ? 0 : 1).append("' Type='").append(typeName).append("' ") |
| | | .append((editStatus == "" || editStatus == null) ? "" : " editStatus='" + editStatus + "'") |
| | | .append(ShowOnGrid ? "" : " Visible='0' ") |
| | | .append(ShowOnGrid ? "" : " Visible='0' noItemShow='1' ")//noItemShow用于格线列显示 |
| | | .append(fileterID ? " Visible='0' " : ""); |
| | | if (!dto.isList && dto.gantt && "subtask".equalsIgnoreCase(id.toLowerCase())) |
| | | left.append(" CanGroup='2' GroupChar='/' GroupEmpty='0' "); |
| | |
| | | .append(" Visible='0' ") |
| | | .append(" />\n"); |
| | | } |
| | | if (!fileterID&&ShowOnGrid) index++; |
| | | if (!fileterID && ShowOnGrid) index++; |
| | | } else { |
| | | cols.append("<C CaseSensitive='0' Name='").append(id.toLowerCase()).append("'").append(" cpltrow='").append(cpltrow ? 1 : 0).append("' CanEdit='").append(readOnly ? 0 : 1).append("' Type='").append(typeName).append("' ") |
| | | cols.append("<C " + showMenuName(dec, dto.colset) + " CaseSensitive='0' Name='").append(id.toLowerCase()).append("'").append(" cpltrow='").append(cpltrow ? 1 : 0).append("' CanEdit='").append(readOnly ? 0 : 1).append("' Type='").append(typeName).append("' ") |
| | | .append((editStatus == "" || editStatus == null) ? "" : " editStatus='" + editStatus + "'") |
| | | .append(ShowOnGrid ? "" : " Visible='0' ") |
| | | .append(ShowOnGrid ? "" : " Visible='0' noItemShow='1' ") |
| | | |
| | | .append(fileterID ? " Visible='0' " : ""); |
| | | if (!dto.isList && dto.gantt && "subtask".equalsIgnoreCase(id.toLowerCase())) |
| | |
| | | |
| | | } |
| | | //while(dto.gfields.next()); |
| | | if ("".equalsIgnoreCase(dto.orderFiled)) dto.orderFiled = firstID + " desc"; |
| | | if ("".equalsIgnoreCase(dto.primeKey)) dto.orderFiled = firstID + " desc"; |
| | | dto.expr = valExp.length() > 0 ? valExp.substring(0, valExp.length() - 1) : ""; |
| | | dto.cspr = cssExp.length() > 0 ? cssExp.substring(0, cssExp.length() - 1) : ""; |
| | | dto.tipspr = tipsExp.length() > 0 ? tipsExp.substring(0, tipsExp.length() - 1) : ""; |
| | |
| | | } |
| | | } |
| | | |
| | | private String showMenuName(String caption, int isShowCell) { |
| | | //设置了显示列功能才执行 |
| | | return (isShowCell == 1 && org.apache.commons.lang3.StringUtils.isNotBlank(caption)) ? (" MenuName='" + caption + "' ") : " "; |
| | | } |
| | | |
| | | private void setFilter(String id, int type, StringBuilder filter, int dIndex) { |
| | | switch (type) { |
| | | |
| | |
| | | case 2: |
| | | case 31: |
| | | case 35: |
| | | case 46: |
| | | filter.append(id).append("Range=\"1\" ") |
| | | |
| | | .append(id).append("Type='Text'") |
| | | .append(id).append("Type='Text' ") |
| | | .append(id).append("ShowMenu=\"1\" "); |
| | | break; |
| | | case 3: |
| | | filter.append(id).append("Range=\"1\" ") |
| | | .append(id).append("Button='' ") |
| | | .append(id).append("Type='Text'") |
| | | .append(id).append("Type='Text' ") |
| | | .append(id).append("ShowMenu=\"1\" "); |
| | | break; |
| | | case 9: |
| | |
| | | .append(temp) |
| | | .append("'"); |
| | | index++; |
| | | if(!"".equalsIgnoreCase(dto.setInfo_dy)){ |
| | | dto.setInfo_dy +=","; |
| | | } |
| | | } |
| | | dto.setInfo_dy += sb.toString(); |
| | | if (org.apache.commons.lang3.StringUtils.isNotBlank(sb.toString())) { |
| | | if(!"".equalsIgnoreCase(dto.setInfo_dy)) { |
| | | dto.setInfo_dy += ","; |
| | | } |
| | | dto.setInfo_dy += sb.toString(); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | } else if (dto.order == 2 && dto.index2 != null && !dto.index2.isEmpty()) {//明细表 |
| | | temp = setSqlOrderBy(dto.index2, " asc"); |
| | | } else { |
| | | if (dto.field.isEmpty()) |
| | | if (!dto.orderFiled.isEmpty()) { |
| | | temp = dto.orderFiled; |
| | | else { |
| | | //处理8类型第三表的排序不是默认的docitm的情况,也就是9801定义有排序 |
| | | if(dto.winType==15&&dto.order==2&& org.apache.commons.lang3.StringUtils.isNotBlank(dto.index1)){ |
| | | temp = setSqlOrderBy(dto.index1, " asc"); |
| | | } else { |
| | | if (dto.field.isEmpty()) { |
| | | temp = dto.orderFiled; |
| | | }else { |
| | | temp = setSqlOrderBy(dto.field, dto.order == 1 ? " desc" : " asc"); |
| | | //处理8类型第三表的排序不是默认的docitm的情况,也就是9801定义有排序 |
| | | if (dto.winType == 15 && dto.order == 2 && dto.conNum == 2 && org.apache.commons.lang3.StringUtils.isNotBlank(dto.index1)) { |
| | | temp = setSqlOrderBy(dto.index1, " asc"); |
| | | } else { |
| | | temp = setSqlOrderBy(dto.field, dto.order == 1 ? " desc" : " asc"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | * @see com.yc.action.grid.TreeGridIfc#createGrid(int, int, java.lang.String, java.lang.String, java.lang.String[]) |
| | | */ |
| | | @Override |
| | | public void createGrid(int type, int formID, String root, String path, String fileName[], String tempPath, String pst, TMuiDTO dt, String dbid) throws DataAccessException, SQLException { |
| | | public void createGrid(int type, int formID, String root, String path, String fileName[], String tempPath, String pst, TMuiDTO dt, String dbid,String userCode,boolean isCustomLayout) throws DataAccessException, SQLException { |
| | | try { |
| | | StringBuilder sb = new StringBuilder();//总的js |
| | | StringBuilder jsp = new StringBuilder();//总的jsp |
| | |
| | | dto.winType = type; |
| | | dto.othType = 0; |
| | | dto.dbid = dbid; |
| | | dto.userCode=userCode; |
| | | dto.hasControlLayout=isCustomLayout; |
| | | if (dt != null) {//把多表的值传过来填充 |
| | | this.setTabPage497(dt.type, dt.height1, dt.indexs, dt.tolkey, dt.fromid, dt.index,dto); |
| | | this.setTabPage497(dt.type, dt.height1, dt.indexs, dt.tolkey, dt.fromid, dt.index, dto); |
| | | this.setXxk(dt.xxk, dto); |
| | | dto.formTabName=dt.formTabName; |
| | | dto.formTabName = dt.formTabName; |
| | | } |
| | | if (dt != null && dt.addnew) |
| | | dto.postStatusAddNew = dt.addnew; |
| | |
| | | dto.treefield = this.getTreeFields(formID, dto.dbid); |
| | | } |
| | | String str = FileUtil.readFile(tempPath + "/grid.jsp");//页面模板 |
| | | if(dto.b497){ |
| | | //多表页面不需要这个,因为页面是用静态包含,其他用动态包含<jsp:include page="......" /> |
| | | str=str.replace("<%@ include file=\"dataHead.jsp\" %>",""); |
| | | } |
| | | if (dto.muilGrid && i == 0) jsp.append(str).append("\n"); //先保存好模板,以便生成多表时候用 |
| | | dto.conNum = i; |
| | | dto.order = setOrderName(dto); |
| | | dto.orderFiled="";//还原到初始状态 |
| | | this.print(root, dto); |
| | | String strJs = FileUtil.readFile(tempPath + (((dto.gantt && dto.order == 2) || (dto.gantt && dto.winType == 18)) ? "/grid_Gantt.js" : "/grid.js"));//页面js |
| | | String[] ver = dto.verNo.split("/"); |
| | |
| | | .replaceAll("@formula", this.replaceBlank(dto.formula))//自定义公式 //增加判断是否存在死循环的可能 |
| | | .replaceAll("@rowSpan", this.replaceBlank(dto.rowspanStr))//合并行的字段 |
| | | .replaceAll("@totalCols", this.replaceBlank(dto.totalCols))//统计列 |
| | | .replaceAll("@sumFields", org.apache.commons.lang3.StringUtils.isNotBlank(dto.masterSumFields)?(this.replaceBlank(dto.masterSumFields).toLowerCase()+","+this.replaceBlank(dto.detailSumFields).toLowerCase()):"")//主表汇总字段,明细表统计列汇总字段 |
| | | .replaceAll("@rowcopyfields", dto.rowcopyfields == null ? "" : this.replaceBlank(dto.rowcopyfields)) |
| | | .replaceAll("@rowcopyformids", dto.rowcopyformids == null ? "" : this.replaceBlank(dto.rowcopyformids)) |
| | | .replaceAll("@t302", dto.winType == 302 ? true + "" : false + "")//302类型 |
| | |
| | | .replaceAll("@panelID", dto.PriIndex + "")//针对77类型取哪一个面板数据进行过滤 |
| | | .replaceAll("@ycadd", this.setToolAdd(dto) == 2 ? "Add, " : "")//清单和查询页面不需要增行和删行 |
| | | .replaceAll("@predocstatus", dto.predocstatus + "")//确认前状态值 |
| | | //.replaceAll("@PostStatusGridAddNew",dto.postStatusAddNew+"")//确认前状态值 |
| | | .replaceAll("@postdocstatus", dto.postDocStatus + "")//确认后状态值 |
| | | .replaceAll("@Columns", dto.colset == 1 ? "Columns," : "")//列过滤 |
| | | .replaceAll("@Actions", dto.actions)// |
| | | .replace("@Tree", (dto.conNum == 0 || (dto.mainCol == null || "".equalsIgnoreCase(dto.mainCol))) ? "" : " AddChild,")// |
| | |
| | | .replaceAll("@lang", ver[ver.length - 1])//语言 |
| | | .replaceAll("@foot2", this.replaceBlank(dto.foot2)) |
| | | .replaceAll("@_ycaddnew_@", this.setToolAddForNew(dto))//当前用户是否存在OA审核按钮,其中有为1的则格线需要显示增行按钮 |
| | | .replaceAll("@_isCustomLayout_@", dto.hasControlLayout?(true+""):(false+""))//当前用户是否存在OA审核按钮,其中有为1的则格线需要显示增行按钮 |
| | | //.replaceAll("@_attachment_server_@", domain==null?"":domain)//附件服务器地址 |
| | | .replaceAll("@picFild", this.replaceBlank("&picFild=" + dto.picFild)) |
| | | .replaceAll("@TBCols", "&tbCols=" + EncodeUtil.base64Encode(this.replaceBlank(dto.totalCols)))//统计列 |
| | |
| | | .replaceAll("@layout", this.setJsName(dto))//js文件名称 |
| | | .replaceAll("@hasGrid", hasGrid)//js文件名称 |
| | | .replaceAll("@isTree", (dto.mainCol == null || "".equalsIgnoreCase(dto.mainCol)) ? "" : "&isTree=1") |
| | | .replaceAll("@winType", dto.winType + "@p@" + i)//表的顺序 0表示读取主表 1表示读取从表 |
| | | .replaceAll("@winType", dto.winType + "@p@" + (dto.winType==19?1:i))//表的顺序 0表示读取主表 1表示读取从表,19类型特定为1 |
| | | .replaceAll("@id", dto.formID + "")//功能号 |
| | | .replaceAll("@DealAfterDocSave", ddsave)//保存时执行 |
| | | .replaceAll("@CancelProc", "&cancelProc=" + this.replaceBlank(EncodeUtil.base64Encode(dto.cancelProc)) + "&cancelisSave=" + dto.cancelisSave + "&isExchangeDataWithHost=" + dto.isExchangeDataWithHost)//取消确认 |
| | |
| | | |
| | | //-------------------- |
| | | String hi = this.setGridHight(dto); |
| | | dto.headerDiv = "\n<div id=\"T_" + dto.formID + "\" style=\"margin:10px;width: 98%; height: " + hi + ";" + ((dto.b497 && dto.PriFormID == 0 || dto.b499 && dto.PriFormID == 0) && dto.xxk == 0 ? "display:none" : "") + "\"></div>";//增加多表加载时不显示所有格线 |
| | | dto.headerDiv = "\n<div id=\"T_" + dto.formID + "\" style=\"margin:5px 10px 15px 10px;width: 98%; height: " + hi + ";" + ((dto.b497 && dto.PriFormID == 0 || dto.b499 && dto.PriFormID == 0) && dto.xxk == 0 ? "display:none" : "") + "\"></div>";//增加多表加载时不显示所有格线 |
| | | if ((i <= 1 && !dto.muilGrid) || (dto.muilGrid && i < 1 && num < 4)) {//不是多表,只需要生成一个gt-grid 单表,清单表(二表,三表,多表) |
| | | if ((dto.winType != 7 && dto.winType != 77) && (dto.b497 && dto.PriFormID == -1 || dto.b499 && dto.PriFormID == -1)) {//表示496,498多表的第一个表 |
| | | int value = Integer.parseInt(dto.tolkey); |
| | |
| | | .replaceAll("@suggstDiv", dto.sugList.toString())//自动补全 |
| | | .replaceAll("@gridconnum", String.valueOf(dto.conNum));//判断单表用来计算grid高度需要。。。替换grid.jsp里面的@gridconnum |
| | | FileUtil.writeFile(js, root.replaceAll("\\\\", "/") + File.separatorChar + this.setFilePath(path.replaceAll("\\\\", "/"), this.setJsName(dto), pst, dto));//生成新页面js |
| | | FileUtil.writeFile(str, root.replaceAll("\\\\", "/") + File.separatorChar + this.setFilePath(path.replaceAll("\\\\", "/"), fileName[0], pst, dto));//生成新页面 |
| | | FileUtil.writeFile(str, root.replaceAll("\\\\", "/") + File.separatorChar + this.setFilePath(path.replaceAll("\\\\", "/"), this.setFileName(dto), pst, dto));//生成新页面 |
| | | } else {//多表,整个页面生成多个表格 |
| | | if (refgrid != "") refgrid += ","; |
| | | refgrid += ("T_" + dto.formID);//为了引用其它grid,3表 |
| | |
| | | .replaceAll("@head", hd.toString())//自定义表头 |
| | | .replaceAll("@suggstDiv", dto.sugList.toString())//自动补全 |
| | | .replaceAll("@gridconnum", String.valueOf(dto.conNum));//判断多表用来计算grid高度需要。。。替换grid.jsp里面的@gridconnum |
| | | FileUtil.writeFile(strd, root.replaceAll("\\\\", "/") + this.setFilePath(path.replaceAll("\\\\", "/"), fileName[0], pst, dto));//生成新页面 |
| | | FileUtil.writeFile(strd, root.replaceAll("\\\\", "/") + this.setFilePath(path.replaceAll("\\\\", "/"), this.setFileName(dto), pst, dto));//生成新页面 |
| | | } |
| | | sb = null; |
| | | jsp = null; |