/* * 生成20类型窗体文件,生成路径已系统菜单为准 */ package com.yc.service.build.type.v2; import com.yc.service.build.top.v2.BuildTopIfc; import com.yc.service.commons.GformIfc; import com.yc.service.commons.SqlQueryIfc; import com.yc.service.panel.v2.PanelServiceIfc; import com.yc.service.tree.TreeIfc; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.File; import java.util.List; import java.util.Map; @Service("V20") public class T_20_Impl extends BaseImpl implements T_20_Ifc { @Autowired private GformIfc gformIfc; @Autowired private BuildTopIfc buildTopIfc; @Autowired private TreeIfc treeIfc; @Autowired private PanelServiceIfc pIfc; @Autowired SqlQueryIfc queryIfc; @Override public int build(BaseBean baseBean) throws Exception { //读取gform表的信息 Map gformInfo = this.init(baseBean); Map treeSet = null; List> treeSetList=treeIfc.getTreeSet(baseBean.formID, baseBean.type); if(treeSetList!=null) treeSet=treeSetList.get(0); String autoCodeColumn = treeIfc.getAutoCodeColumn(baseBean.formID); String autoCodeConfig = treeIfc.getAutoCodeConfig(baseBean.formID); String primaryKey = "rowid"; if(treeSet.get("nodeid")!=null&&!StringUtils.isBlank(treeSet.get("nodeid").toString())){ primaryKey=treeSet.get("nodeid").toString().toLowerCase().trim(); } if(treeSet.get("treewidth")!=null&&!StringUtils.isBlank(treeSet.get("treewidth").toString())){//判断属性边框宽度是否设置 int trwidth=0; if(treeSet.get("treewidth").toString().indexOf("%")!=-1){ trwidth=Integer.parseInt(treeSet.get("treewidth").toString().replace("%", "0")); trwidth=trwidth+60; }else { trwidth=Integer.parseInt(treeSet.get("treewidth").toString()); } trwidth=trwidth>0?trwidth:300; gformInfo.put("treewidth", trwidth+"px"); }else { gformInfo.put("treewidth", "300px");//没有设置的情况默认300px } buildDataHead(gformInfo); buildTop(gformInfo); buildHelpPage(gformInfo); buildJsCssHead(treeSet,gformInfo,autoCodeColumn,autoCodeConfig,primaryKey); BaseBean other=new BaseBean(); BeanUtils.copyProperties(gformInfo.get(BEAN_INFO),other); buildPanel(gformInfo); gformInfo.put(BEAN_INFO,other); buildPanel2(gformInfo); buildTreeData(treeSet,gformInfo,autoCodeColumn,autoCodeConfig,primaryKey); buildTree(baseBean); buildFoolter(baseBean); buildIndex(gformInfo); return 0; } /** * 生成panel页面 * @throws Exception */ public void buildPanel2(Map gformInfo) throws Exception { BaseBean baseBean = (BaseBean) gformInfo.get(BEAN_INFO); String fileName = "panelR.jsp"; String[] data=new String[2]; String formID=baseBean.formID; data[0]=FileUtils.readFileToString(new File(getTemPath(baseBean)+fileName),"utf-8"); data[1]=FileUtils.readFileToString(new File(getTemPath(baseBean)+"panelControl.jsp"), "utf-8"); //---------------- baseBean.shorten=true; baseBean.notPan=true; baseBean.panel11=false; baseBean.indexPan=1; Map map=pIfc.getPanelHtml(Integer.parseInt(formID), baseBean.type,data,gformInfo); String panHTMLpanelControl=map.get("panHTML").replace("panelControl"+formID+".jsp", "panelControl"+formID+"_.jsp"); if(baseBean.isCustomLayout()){//有自定义控件布局 fileName=baseBean.getUsrCode()+"_"+fileName; } buildPageCode(panHTMLpanelControl, fileName, baseBean); buildPageCode(map.get("panelControl"), "panelControl"+formID+"_.jsp",baseBean ); //pIfc.setShorten(false);pIfc.setNotPan(false);pIfc.setPanel11(false);pIfc.setIndexPan(0); } /** * 生成tree页面 * @throws Exception */ public void buildTree(BaseBean baseBean) throws Exception{ String fileName = "tree.jsp"; String data = getPageCode(fileName,baseBean); buildPageCode(data, fileName, baseBean); } /** * 生成js css 导入的页面 * @throws Exception */ public void buildJsCssHead(Map treeSet,Map gformInfo,String autoCodeColumn,String autoCodeConfig,String primaryKey) throws Exception{ String fileName = "jsCssHead.jsp"; BaseBean baseBean = (BaseBean) gformInfo.get(BEAN_INFO); String data = getPageCode(fileName,baseBean); //---------------- data = data.replace("[?autocode]",autoCodeColumn); data = data.replace("[?autocodeConfig]",autoCodeConfig); data = data.replace("[?displayfield]", trim(treeSet.get("displayfield")).toLowerCase()); data = data.replace("[?nodeid]", trim(treeSet.get("nodeid")).toLowerCase()); data = data.replace("[?separatedst]", trim(treeSet.get("separatedst"))); data = data.replace("[?primaryKey]", primaryKey); String columns = gformIfc.getColumns(Integer.parseInt(baseBean.formID),false); data = data.replace("[?columns]", "["+columns+"]"); data = data.replace("[?mastercode]", getMasterCode(baseBean.formID)); buildPageCode(data, fileName, baseBean); } /** * 生成TreeData页面 * @throws Exception */ public void buildTreeData(Map treeSet,Map gformInfo,String autoCodeColumn,String autoCodeConfig,String primaryKey) throws Exception{ BaseBean baseBean = (BaseBean) gformInfo.get(BEAN_INFO); String formID=baseBean.formID; if(StringUtils.isBlank((String)treeSet.get("nodeid"))){ throw new RuntimeException("20树类型功能号:"+formID+"生成有误,节点字段为空,该字段用于过滤,必需要配置该字段才能生成!"); } if(treeSet.get("treeformid")==null){ throw new RuntimeException("20树类型功能号:"+formID+"生成有误,树功能号字段为空,该字段用于引用20类型树,必须需要配置该字段才能生成!"); } if(StringUtils.isBlank((String)treeSet.get("displayfield"))){ throw new RuntimeException("20树类型功能号:"+formID+"生成有误,显示字段为空,该字段用于配置显示节点信息,必需要配置该字段才能生成!"); } //树功能号 String treeFormid = treeSet.get("treeformid").toString(); //功能号主表名 String str_tableName = null; if(!treeFormid.equals(formID)){//如果树功能号不等于当前功能号 List> refTypes = treeIfc.getTreeSetByFormid("formtype",treeFormid); if(refTypes.size()==0||refTypes.size()>1){ throw new RuntimeException("20树类型功能号:"+formID+"生成有误,树功能号设置所对应的功能号没有或有多个!"); } int treeFormidType = 0; if(refTypes.get(0).get("formtype")!=null){ treeFormidType=(Integer)refTypes.get(0).get("formtype"); } Map tmp = gformIfc.getGformInfo(treeFormidType==20?"dttable":"hdtable", Integer.parseInt(treeFormid)); str_tableName = tmp.get(treeFormidType==20?"dttable":"hdtable").toString(); }else{ str_tableName = gformInfo.get("dttable").toString(); } if(StringUtils.isBlank(str_tableName)){ throw new RuntimeException("20树类型功能号:"+formID+"生成有误,树功能号所对应的功能号的主表字段为空!"); } //功能号过滤条件 String str_formdatafilters = gformInfo.get("formdatafilters")==null?"":gformInfo.get("formdatafilters").toString(); //生成第一层节点查询sql //主键字段名 String firstNodeSql = treeIfc.buildFirstLayerTreeSQL(treeSet, str_tableName,primaryKey);//树的查询sql if(!"".equals(trim(gformInfo.get("formdatafilters")))){ firstNodeSql+=" and ("+gformInfo.get("formdatafilters")+")"; } String sql = trim(treeIfc.buildTreeSQLNotFilter(treeSet, str_tableName,primaryKey));//树节点信息查询sql String querySql = trim(treeIfc.buildQueryTreeSQL(treeSet, str_tableName,primaryKey));//树的查询sql //表单过滤条件 if(!"".equals(str_formdatafilters.trim())){ firstNodeSql+=" and ("+str_formdatafilters+")"; querySql += " and ("+str_formdatafilters+")"; } //树类型排序 if(treeSet.get("treeformid")!=null&&sql.indexOf("order by")<0){ Map gformInfo1 = gformIfc.getGformInfo("index2", Integer.parseInt(treeSet.get("treeformid").toString())); if(gformInfo1.get("index2")!=null && !gformInfo1.get("index2").toString().equals("")){ firstNodeSql+=" order by "+gformInfo1.get("index2").toString().replace(";", ","); sql+=" # order by "+gformInfo1.get("index2").toString().replace(";", ","); }else { if(sql.indexOf("order by")>0) {//xin 2020-9-17 11:41:02 String s=sql.substring(0, sql.indexOf("order by")); s+="# "; s+=sql.substring(sql.indexOf("order by"),sql.length()); sql=s; }else { sql+=" #"; } } } if(sql.indexOf("order by")>0){//by danaus 2020/4/16 18:13 sql=sql.replace("order by"," # order by"); } if(sql.indexOf("#")==-1){sql+=" # ";}//20类型树形支节点的查询条件需要替换#,不然查询出的结果会出现重复(多个公司名称的时候)。2015-3-25 17:26:11 //过滤字段 String nodeid = treeSet.get("nodeid").toString().trim(); //显示字段 String displayfield = treeSet.get("displayfield").toString().trim(); //分割符 String separatedst = treeSet.get("separatedst")==null?"":treeSet.get("separatedst").toString(); //读文件 String fileName = "treeData.jsp"; String data = getPageCode(fileName,baseBean); //---------------- //替换 data = data.replace("[?table]", gformInfo.get("dttable").toString()); data = data.replace("[?autocode]",autoCodeColumn); data = data.replace("[?autocodeConfig]",autoCodeConfig); data = data.replace("[?treeformid]", trim(treeSet.get("treeformid").toString())); data = data.replace("[?firstNodeSql]", trim(firstNodeSql)); data = data.replace("[?sql]", trim(sql)); data = data.replace("[?querySql]", querySql); data = data.replace("[?displayfield]", trim(displayfield).toLowerCase()); data = data.replace("[?nodeid]", trim(nodeid)); data = data.replace("[?separatedst]", trim(separatedst)); data = data.replace("[?primaryKey]",primaryKey.toLowerCase()); // buildPageCode(data, fileName,baseBean ); } public String trim(Object str){ if(str==null)return ""; return str.toString().trim().replaceAll("\\r\\n|\\n|\\r", ""); } private String getMasterCode(String formID){ String sql = " set nocount on ; select fieldid from gfield where formid="+formID+" and initvalue='mastercode' and headflag=0"; List> infos = queryIfc.queryForList(sql); StringBuilder sb=new StringBuilder(); sb.append("["); for(int i = 0;i1){ sb.deleteCharAt(sb.length()-1); } sb.append("]"); return sb.toString(); } }