xinyb
2024-04-22 bc82b6b46b695c41a42ff569c33d30800a6aec98
调整自定义布局界面和代码
13个文件已修改
360 ■■■■■ 已修改文件
WebRoot/public/template/0/20/index.jsp 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebRoot/public/template/0/20/panel.jsp 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebRoot/public/template/0/panelR.jsp 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/action/build/v2/FormsBuilded.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/action/customControl/ControlLayoutAction.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/service/build/type/v2/BaseImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/service/build/type/v2/T_20_Impl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/service/build/type/v2/T_496_Impl.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/service/build/type/v2/T_BasedList_Impl.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/service/impl/DBHelper.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/service/panel/SystemSettingsDao.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/service/panel/SystemSettingsImpl.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/service/panel/v2/PanelServiceImpl.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebRoot/public/template/0/20/index.jsp
@@ -1,3 +1,4 @@
<%@ page import="com.yc.service.impl.DBHelper" %>
<%try {%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page trimDirectiveWhitespaces="true" %>
@@ -23,7 +24,11 @@
        </div>
    </div>
    <div region="center" class="easyui-north" border="false" style="width:100%;overflow: hidden;padding-top: 3px">
        <%@ include file="panel.jsp" %>
<%--        <%@ include file="panel.jsp" %>--%>
    <%
        String customURL= DBHelper.getCustomURL(request,formId,formType,"panel.jsp");
    %>
    <jsp:include page="<%=customURL%>" flush="true"></jsp:include><%//改成兼容用户自定义控件布局的变量 xin 2024-1-12 16:14:05%>
    </div>
</div>
<div region="west" border="true" split="true" style="width:[?treewidth];border-left:0px;border-bottom:0px;">
@@ -31,7 +36,11 @@
</div>
<div region="center" id="tplt-panels" class="easyui-panel" border="true" style="border-right:0px;border-bottom:0px;">
    <div id="tplt-panel" style="margin-top: 5px;">
        <%@ include file="panelR.jsp" %>
<%--        <%@ include file="panelR.jsp" %>--%>
    <%
        customURL= DBHelper.getCustomURL(request,formId,formType,"panelR.jsp");
    %>
    <jsp:include page="<%=customURL%>" flush="true"></jsp:include><%//改成兼容用户自定义控件布局的变量 xin 2024-1-12 16:14:05%>
    </div>
        <%//文字颜色说明显示位置 xin 2022-5-16 14:45:39%>
        [?ColorDescription]
WebRoot/public/template/0/20/panel.jsp
@@ -19,7 +19,8 @@
<%@page import="com.yc.utils.SessionKey"%>
<%@page import="com.google.gson.JsonArray"%>
<%@page import="com.google.gson.JsonObject"%>
<%@page import="com.yc.sdk.shopping.util.SettingKey"%>
<%@page import="com.yc.sdk.shopping.util.SettingKey"%>
<%@ include file="dataHead.jsp" %>
<%
  SqlDBHelperIfc  sqlDBHelperIfc=(SqlDBHelperIfc)FactoryBean.getBean("SqlDBHelper");
  GfieldApprovedButtonIfc gButtonIfc=(GfieldApprovedButtonIfc)FactoryBean.getBean("GfieldApprovedButton");
@@ -58,17 +59,6 @@
              listInfo=PanelManageBo.getFromEnd(sql,tableIs,(wherePan==null?wherePan:wherePan.replaceAll("_ycid_","id")),@formType@,request);      
        }catch(Exception e){
           throw e;
           //            sql="select top 1 @selectColAll@ from "+tableIs2+" where "+wherePan;
           //               try{
           //                    if(sql.contains("&doccode&")){//by danaus 2011-1-25
            //                if(doccode!=null)
            //                     sql=sql.replaceAll("&doccode&",doccode.replaceAll("'",""));
             //               }
                //                listInfo=sqlDBHelperIfc.getHashMapObj(sql.replaceAll("_ycid_","id"));
                //              }catch(Exception ex){
                //              listInfo=new ArrayList<Map<String, Object>>();
                //                //数据库乱设置时不显示页面,直接清空信息,或者不是乱设置,却不能用来查询,也清空信息
                //                  }
        }finally{
           SpObserver.setDBtoInstance();
        }
WebRoot/public/template/0/panelR.jsp
@@ -1,5 +1,92 @@
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    pageEncoding="UTF-8"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="com.yc.service.impl.EnvHelper"%>
<%@page import="com.yc.service.impl.DBHelper"%>
<%@page import="com.yc.service.build.BuildFuncIfc"%>
<%@page import="org.springframework.jdbc.support.rowset.SqlRowSet"%>
<%@page import="com.yc.factory.FactoryBean"%>
<%@page import="com.yc.service.panel.TypeControlDao"%>
<%@page import="com.yc.service.panel.time.PanelTimeDao"%>
<%@page import="com.yc.service.panel.PanelManageDao"%>
<%@page import="com.yc.service.panel.GfieldApprovedButtonIfc"%>
<%@page import="com.yc.service.panel.SqlDBHelperIfc"%>
<%@page import="com.yc.service.upload.AttachmentIfc"%>
<%@page import="com.yc.entity.attachment.AttachmentEntity"%>
<%@page import="com.yc.utils.DefaultSet" %>
<%@page import="net.sf.json.JSONObject"%>
<%@page import="com.yc.multiData.SpObserver"%>
<%@page import="com.yc.utils.SessionKey"%>
<%@page import="com.google.gson.JsonArray"%>
<%@page import="com.google.gson.JsonObject"%>
<%@page import="com.yc.sdk.shopping.util.SettingKey"%>
<%@ include file="dataHead.jsp" %>
<%
    SqlDBHelperIfc  sqlDBHelperIfc=(SqlDBHelperIfc)FactoryBean.getBean("SqlDBHelper");
    GfieldApprovedButtonIfc gButtonIfc=(GfieldApprovedButtonIfc)FactoryBean.getBean("GfieldApprovedButton");
    PanelTimeDao PanelTimeBo=(PanelTimeDao)FactoryBean.getBean("PanelTime");
    PanelManageDao PanelManageBo=(PanelManageDao)FactoryBean.getBean("PanelManage");
    TypeControlDao TypeControlBo=(TypeControlDao)FactoryBean.getBean("TypeControl");
    //pengbei
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    String sql = "";
    String path = request.getContextPath();
    String basePath = SettingKey.getHostUrl(request) + path + "/";
    Date now=new Date();
    SimpleDateFormat formatDate=new SimpleDateFormat("yyyy-MM-dd");
    String date=String.valueOf(now.getDate());
    int isNewOpen=1;
    int docstatePan=0;
    String tableIs="@zhu@";
    String tableIs2="@minxi@";
    Map<String,Object> docMap=new HashMap<String,Object>();
    List<Map<String, Object>> listInfo=new ArrayList<Map<String, Object>>();
    String addUrl="";//添加传给grid的条件,需要分离
    if((wherePan!=null&&!wherePan.equals(""))||grid!=null){
        if(wherePan.indexOf("@G@")!=-1){
            int inds=wherePan.indexOf("@G@");
            String temp1=wherePan;
            wherePan=temp1.substring(0,inds);
            addUrl = " and "+temp1.substring(inds+3);
        }
        try{
            sql="select top 1 @selectColAll@ from ";//只能查一条
            if(doccode!=null && sql.contains("&doccode&")){//by danaus 2011-1-25
                sql=sql.replaceAll("&doccode&",doccode.replaceAll("'",""));
            }
            SpObserver.setDBtoInstance("_"+request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
            listInfo=PanelManageBo.getFromEnd(sql,tableIs,(wherePan==null?wherePan:wherePan.replaceAll("_ycid_","id")),@formType@,request);
        }catch(Exception e){
            throw e;
        }finally{
            SpObserver.setDBtoInstance();
        }
        if(listInfo.size()>0){
            docMap=listInfo.get(0);
        }
        if((doccode==null||"".equals(doccode))&&listInfo.size()>0){
            doccode=DBHelper.getValue(docMap,"doccode");
        }
    }
    if((isNew!=null&&isNew.equals("0"))||listInfo.size()>0){
        isNewOpen=0;//不为新开单
        docstatePan=DBHelper.getValueInt(docMap,"docstatus");
    }
    JSONObject jsonOldPanel = JSONObject.fromObject(docMap);
    SqlRowSet SRS =null;
    String outStr="";
    BuildFuncIfc build=(BuildFuncIfc)FactoryBean.getBean("Build");
    try{
        String openDoc="@openDoc@";
        SpObserver.setDBtoInstance("_"+request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
        sqlDBHelperIfc.execSql(DBHelper.getProcessAll(openDoc,session,docMap,true));
    }catch(Exception e){
        throw e;
    }finally{
        SpObserver.setDBtoInstance();
    }
%>
@linkscript@
<style type="text/css">
.posPanR {
src/com/yc/action/build/v2/FormsBuilded.java
@@ -708,7 +708,7 @@
                        panelDataIfc.setDocVersionProcess(dto.getFormid());
                    }
                    if(formVO.formID.equals(dto.getFormid())){//当前页面功能号和遍历出来的功能号一样就检查是否有自定义控件布局 xin 2024-1-15 09:10:46
                        baseBean.setCustomLayout(controlLayoutIfc.hasControlLayout(dto.getFormid(),formVO.getUserCode(), dto.getType(), ExprotType.Panel,false));//true表示有 false表示没有
                        baseBean.setCustomLayout(controlLayoutIfc.hasControlLayout(dto.getFormid(),formVO.getUserCode(), this.type, ExprotType.Panel,false));//true表示有 false表示没有
                    }
                    //System.out.println(dto.getFormid()+"--开始生成功能号页面.....");
                    returnError = base.build(baseBean);
src/com/yc/action/customControl/ControlLayoutAction.java
@@ -174,7 +174,8 @@
                            userCode + "_grid.jsp",
                            formId + "_" + userCode + "_panel.jsp",
                            formId + "_" + userCode  +"_panelControl"+formId+".jsp",
                            formId + "_" + userCode + "_grid.jsp"
                            formId + "_" + userCode + "_grid.jsp",
                            "grid_"+formId + "_" + userCode + "_"+formTypes+".xml"
                    };
                    for (String fileName : fileNames) {
                        file = new File(url +fileName);
src/com/yc/service/build/type/v2/BaseImpl.java
@@ -151,14 +151,10 @@
        // ----------------
        Map<String, String> map = pIfc.getPanelHtml(Integer.parseInt(baseBean.formID), baseBean.type, data, gformInfo);
        String panelControl="panelControl" + baseBean.formID + ".jsp";
        buildPageCode(map.get("panHTML"), fileName, baseBean);
        if(baseBean.customLayout){
        if(baseBean.isCustomLayout()){//有自定义控件布局
            fileName=baseBean.getUsrCode()+"_"+fileName;
//            panelControl=baseBean.getUsrCode()+"_"+panelControl;
            if (StringUtils.isNotBlank(map.get("customPanHTML"))) {//客户自定义控件布局文件 xin 2024-1-12 17:27:12
                buildPageCode(map.get("customPanHTML"), fileName, baseBean);
            }
        }
        buildPageCode(map.get("panHTML"), fileName, baseBean);
        buildPageCode(map.get("panelControl"), panelControl, baseBean);
        if(map!=null&&map.get("zhu")!=null){
            baseBean.zhu=map.get("zhu");
@@ -267,15 +263,14 @@
     */
    public void buildGrid(BaseBean baseBean) throws Exception {
        boolean hasControlLayout = controlLayoutIfc.hasControlLayout(baseBean.formID, baseBean.usrCode, baseBean.type, ExprotType.Grid, false);
        baseBean.setCustomLayout(false);
        String fileName = baseBean.formID + "_grid.jsp";
        //把默认的格线生成出来 xin 2024-4-16 10:53:39
        treeGrid.createGrid(baseBean.type, Integer.parseInt(baseBean.formID), baseBean.URI, "app/" + baseBean.gPath + "/", new String[]{fileName}, getTemPath(baseBean), "/" + baseBean.formID + "/" + baseBean.type + "/", null, baseBean.dataBaseId, baseBean.usrCode, baseBean.isCustomLayout());
        if (hasControlLayout) {//有自定义的布局再生成出来
        String fileName=baseBean.formID +"_grid.jsp";
        if(hasControlLayout){
            baseBean.setCustomLayout(true);
            fileName = baseBean.formID + "_" + baseBean.getUsrCode() + "_grid.jsp";
            treeGrid.createGrid(baseBean.type, Integer.parseInt(baseBean.formID), baseBean.URI, "app/" + baseBean.gPath + "/", new String[]{fileName}, getTemPath(baseBean), "/" + baseBean.formID + "/" + baseBean.type + "/", null, baseBean.dataBaseId, baseBean.usrCode, baseBean.isCustomLayout());
            fileName=baseBean.formID +"_"+baseBean.getUsrCode()+ "_grid.jsp";
        }else {
            baseBean.setCustomLayout(false);
        }
        treeGrid.createGrid(baseBean.type, Integer.parseInt(baseBean.formID), baseBean.URI, "app/" + baseBean.gPath + "/", new String[]{fileName}, getTemPath(baseBean), "/" + baseBean.formID + "/" + baseBean.type + "/", null, baseBean.dataBaseId,baseBean.usrCode,baseBean.isCustomLayout());
    }
    /**
src/com/yc/service/build/type/v2/T_20_Impl.java
@@ -12,7 +12,6 @@
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import java.io.File;
@@ -96,6 +95,9 @@
        baseBean.indexPan=1;
        Map<String, String> 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);
src/com/yc/service/build/type/v2/T_496_Impl.java
@@ -314,10 +314,6 @@
                        // ----------------
                        baseBean.isPrimaryPan = isMainPanel;// 控制496主面板和子面板
                        baseBean.indexPan = panelIndex;
//                        if (Integer.parseInt(formID) != DBHelper.getValueInt(map, "formid")) {//如果是子功能号检查是否自定义控件布局
//                            //获取当前的功能号是否自定义控件布局 true表示有 false表示没有 xin 2024-1-19 09:13:14
//                            ((BaseBean) gformInfo.get(BEAN_INFO)).setCustomLayout(controlLayoutIfc.hasControlLayout(DBHelper.getValue(map, "formid"), baseBean.getUsrCode()));
//                        }
                        // 生成面板内容
                        Map<String, String> mapIf = pIfc.getPanelHtml(DBHelper.getValueInt(map, "formid"),
                                DBHelper.getValueInt(map, "formtype"), data1, gformInfo);
@@ -343,20 +339,11 @@
                                        getFormInfo(DBHelper.getValueInt(map, "formid") + ""), this);
                                // ---end
                            }
                            //主面板不是页卡形式,可以去掉,by danaus 2020/12/9 17:08
//                            else {
//                               // html = "<div style=\"font-family:黑体; margin-left:10px;\">" + labelName + "</div>";
//                            }
                            html += "<jsp:include page=\"<%=customURL%>\" flush=\"true\"/>";//panel.jsp...jsp动态加载值
                            inPan = html;//在index.jsp进入主功能号 panel.jsp
                            //替换变量内容(如:@FT@)
                            String panel=replaceCustom(mapIf.get("panHTML"),map,Integer.parseInt(formID),labelName,bol,isPanelTabs);
                            endCreate.put("panel.jsp",panel);
                            //自定义控件布局
                            if(StringUtils.isNotBlank(mapIf.get("customPanHTML"))) {
                               String panelCustom = replaceCustom(mapIf.get("customPanHTML"), map, Integer.parseInt(formID), labelName, bol, isPanelTabs);
                                endCreate.put("panelCustom.jsp",panelCustom);
                            }
                            buildPageCode(mapIf.get("panelControl"), "panelControl" + formID + ".jsp", baseBean);//生成panelControl+formId.jsp
                        } else {// 16类型窗体的子功能号面板
                            // --------生成子功能号功能链接
@@ -368,15 +355,10 @@
                            //替换变量内容(如:@FT@)
                            String panel = replaceCustom(mapIf.get("panHTML"), map, Integer.parseInt(formID), labelName, bol, "");
                            panel = panel.replace("@grid@", grid);
                            buildPageCode(panel, jspName, baseBean);//生成默认jsp文件
                            //自定义控件布局(子功能)
                            if (StringUtils.isNotBlank(mapIf.get("customPanHTML"))) {
                                String panelCustom = replaceCustom(mapIf.get("customPanHTML"), map, Integer.parseInt(formID), labelName, bol, "");
                                panelCustom = panelCustom.replace("@grid@", grid);
                                //有自定义控件布局就需要添加自定义控件的用户名在里面 xin 2024-1-23 08:59:27
                                customJspName = DBHelper.getValueInt(map, "formid") + "_" + baseBean.getUsrCode() + "_panel.jsp";
                                buildPageCode(panelCustom, customJspName, baseBean);//生成自定义控件布局的jsp文件
                            if(baseBean.isCustomLayout()){////有自定义控件布局
                                jspName = DBHelper.getValueInt(map, "formid") + "_" + baseBean.getUsrCode() + "_panel.jsp";
                            }
                            buildPageCode(panel, jspName, baseBean);//生成默认jsp文件
                            buildPageCode(mapIf.get("panelControl"), "panelControl" + DBHelper.getValueInt(map, "formid") + ".jsp", baseBean);
                            // 是页卡进入处理 --xin 2019-10-14 16:27:08
                            if (tabID > 0 && !isMainPanel) {
@@ -423,17 +405,13 @@
                String customhtmlTab = htmlTab;
                //存在自定义布局需要生成对应用户的panel.jsp
                String panelName = "panel.jsp";
                if(baseBean.isCustomLayout()){//有自定义控件布局
                    panelName = baseBean.getUsrCode() + "_panel.jsp";
                    htmlTab = htmlTab.replaceAll("@customJspName@", baseBean.getUsrCode());//面板和格线自定义控件用户
                }
                htmlTab = htmlTab.replaceAll("@customJspName@", "");//面板和格线自定义控件用户
                buildPageCode(endCreate.get("panel.jsp").replace("@include@", htmlTab).replace("@grid@", grid),
                        panelName, baseBean);
                if (baseBean.customLayout) {
                    panelName = baseBean.getUsrCode() + "_panel.jsp";
                    if (endCreate.get("panelCustom.jsp") != null) {//自定义控件布局 xin 2024-1-23 08:48:50
                        customhtmlTab = customhtmlTab.replaceAll("@customJspName@", baseBean.getUsrCode());//面板和格线自定义控件用户
                        buildPageCode(endCreate.get("panelCustom.jsp").replace("@include@", customhtmlTab).replace("@grid@", grid),
                                panelName, baseBean);
                    }
                }
            } else {
                html = htmlTab;
            }
src/com/yc/service/build/type/v2/T_BasedList_Impl.java
@@ -4,7 +4,6 @@
package com.yc.service.build.type.v2;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import java.io.File;
@@ -46,14 +45,10 @@
        Map<String, String> map = pIfc.getPanelHtml(Integer.parseInt(baseBean.formID), baseBean.type, data, gformInfo);
        String panelName="panel.jsp";
        String panelControl="panelControl" + baseBean.formID + ".jsp";
        buildPageCode(map.get("panHTML"), panelName, baseBean);
        if(baseBean.customLayout){
        if(baseBean.isCustomLayout()){//有自定义控件布局
            fileName=baseBean.getUsrCode()+"_"+panelName;
//            panelControl=baseBean.getUsrCode()+"_"+panelControl;
            if (StringUtils.isNotBlank(map.get("customPanHTML"))) {//客户自定义控件布局文件 xin 2024-1-12 17:27:12
                buildPageCode(map.get("customPanHTML"), fileName, baseBean);
            }
        }
        buildPageCode(map.get("panHTML"), panelName, baseBean);
        buildPageCode(map.get("panelControl"), panelControl, baseBean);
        baseBean.sous = map.get("sous");
    }
src/com/yc/service/impl/DBHelper.java
@@ -1351,23 +1351,24 @@
     * @param sqlWhere
     * @return
     */
    public static String getSqlWhere(String dysql,int state, String sqlWhere) {
        return getSelectSql((state!=1?true:false),dysql,sqlWhere);
    public static String getSqlWhere(String dysql, int state, String sqlWhere) {
        return getSelectSql((state != 1 ? true : false), dysql, sqlWhere);
    }
    //旧方法,下面的新方法。之后生成的页面都不在调用这个旧方法(如果在这个方法修改参数会导致jsp页面没重新生成的代码执行出现错误,所有在下面重新构造一个新方法)
    public static String getSqlWhere(String dysql,boolean ReadOnly, String editStatus,String docstatus, String sqlWhere) {
    public static String getSqlWhere(String dysql, boolean ReadOnly, String editStatus, String docstatus, String sqlWhere) {
        try {
            boolean isIncludeSqlWhere=false;//为false表示不增加where
            String[] status=editStatus.split(";");
                isIncludeSqlWhere = (!ReadOnly && ("".equals(status)||Arrays.asList(status).contains(docstatus)||"".equals(docstatus))? true : isIncludeSqlWhere);//只读作为总开关,是否设置了指定状态可编辑,是否新单
            boolean isIncludeSqlWhere = false;//为false表示不增加where
            String[] status = editStatus.split(";");
            isIncludeSqlWhere = (!ReadOnly && ("".equals(status) || Arrays.asList(status).contains(docstatus) || "".equals(docstatus)) ? true : isIncludeSqlWhere);//只读作为总开关,是否设置了指定状态可编辑,是否新单
            // 有需要组装的sql
            return getSelectSql(isIncludeSqlWhere,dysql,sqlWhere);
            return getSelectSql(isIncludeSqlWhere, dysql, sqlWhere);
        } catch (Exception e) {
            return dysql;
        }
    }
    public static String getSqlWhere(String dysql,boolean ReadOnly,String showFieldValueExpression, String editStatus,String docstatus, String sqlWhere) {
    public static String getSqlWhere(String dysql, boolean ReadOnly, String showFieldValueExpression, String editStatus, String docstatus, String sqlWhere) {
        try {
            boolean isIncludeSqlWhere = false;//为false表示不增加where
            boolean FieldValueExpression = false;//权限表达式值:0隐藏;1显示;2可编辑
@@ -1380,9 +1381,10 @@
            return dysql;
        }
    }
    private static String getSelectSql(boolean isIncludeSqlWhere,String dysql,String sqlWhere) {
        try {
              // 有需要组装的sql
    private static String getSelectSql(boolean isIncludeSqlWhere, String dysql, String sqlWhere) {
        try {
            // 有需要组装的sql
            if (isIncludeSqlWhere && sqlWhere != null) {
                //(?i)不区分大小写 by danaus 2023-07-19 17:39
                Pattern p = Pattern.compile("(?i)where.*");
@@ -1430,20 +1432,21 @@
                }
            }
            return dysql;
        } catch (Exception e) {
            return dysql;
        }
        } catch (Exception e) {
            return dysql;
        }
    }
    // end--结束
    /**
     * 把list集合的map内某个相同key值组装出来 xin 2021-12-29 09:41:19
     * @param list 数据信息集合
     *
     * @param list  数据信息集合
     * @param field 字段名(小写),返回的新数据信息集合lit内map的key统一小写,空值时候返回原本list,如果集合里的map都没有field的值也返回原本list
     * @return 组装好的新数据信息集合
     */
    public static List<Map<String,Object>> getStreamFilter(List<Map<String,Object>> list,String field){
    public static List<Map<String, Object>> getStreamFilter(List<Map<String, Object>> list, String field) {
        try {
            List<Map<String, Object>> out = new ArrayList<>();
            if (list == null || list.size() == 0) {
@@ -1477,12 +1480,13 @@
    /**
     * 处理初始值 xin 2022-4-21 15:48:54
     *
     * @param request
     * @param map
     * @param initValue
     * @return
     */
    public static String getInitValue(HttpServletRequest request,Map<String, Object> map,String initValue){
    public static String getInitValue(HttpServletRequest request, Map<String, Object> map, String initValue) {
        try {
            Map<String, String> parm = new HashMap<>();
            if (DBHelper.getValueInt(map, "doc_size") == 0) {// 只有有集合信息,才可以去替换,否则执行下面代码也没有值去替换
@@ -1511,37 +1515,48 @@
            return initValue;
        }
    }
    public static String getCustomURLByGrid(HttpServletRequest request,Integer formId,Integer formType, String jsp){
    public static String getCustomURLByGrid(HttpServletRequest request, Integer formId, Integer formType, String jsp) {
        String initial = jsp;
        try {
            String userCode = (String) request.getSession().getAttribute(SessionKey.USERCODE);
            // 判断有没自定义布局 by danaus 2024-03-29 16:55
            ControlLayoutIfc controlLayoutIfc = (ControlLayoutIfc) FactoryBean.getBean("controlLayoutImpl");
            boolean hasControlLayout = controlLayoutIfc.hasControlLayout(formId + "", formType,userCode);
            boolean hasControlLayout = controlLayoutIfc.hasControlLayout(formId + "", formType, userCode);
            if (hasControlLayout) {
                return formId+"_"+userCode+"_"+jsp;
                return formId + "_" + userCode + "_" + jsp;
            } else {
                return formId+"_"+jsp;
                return formId + "_" + jsp;
            }
        } catch (Exception e) {
            return formId+"_"+jsp;
            return formId + "_" + jsp;
        }
    }
    public static String getCustomURL(HttpServletRequest request,Integer formId,Integer formType, String jsp){
    public static String getCustomURL(HttpServletRequest request, Integer formId, Integer formType, String jsp) {
        try {
            String userCode = (String) request.getSession().getAttribute(SessionKey.USERCODE);
            if (StringUtils.isBlank(userCode)) {
                return jsp;
            }
            // 判断有没自定义布局 by danaus 2024-03-29 16:55
            ControlLayoutIfc controlLayoutIfc = (ControlLayoutIfc) FactoryBean.getBean("controlLayoutImpl");
            boolean hasControlLayout = controlLayoutIfc.hasControlLayout(formId + "", userCode, formType, ExprotType.Panel, false);
            if (hasControlLayout) {
                return userCode + "_" + jsp;
            } else {
                return jsp;
            boolean hasControlLayout = false;
            if (jsp.indexOf("panel") != -1) {//面板
                hasControlLayout = controlLayoutIfc.hasControlLayout(formId + "", userCode, formType, ExprotType.Panel, false);
                if (hasControlLayout) {
                    return userCode + "_" + jsp;
                } else {
                    return jsp;
                }
            }
            if (jsp.indexOf("grid") != -1) {//格线
                hasControlLayout = controlLayoutIfc.hasControlLayout(formId + "", userCode, formType, ExprotType.Grid, false);
                if (hasControlLayout) {
                    return formId + "_" + userCode + "_" + jsp;
                } else {
                    return formId + "_" + jsp;
                }
            }
            return jsp;
        } catch (Exception e) {
            return jsp;
        }
src/com/yc/service/panel/SystemSettingsDao.java
@@ -136,7 +136,16 @@
     */
    public List<Map<String, Object>> selectList(int formId, int primary, int downFromId);
    public List<Map<String, Object>> getCustomLayout(int formId, int primary, int downFromId,String userCode);
    /**
     *
     * @param formType 窗体类型
     * @param formId 功能号
     * @param primary 0 主表数据 1从表数据
     * @param downFromId 表格之前 0 或表格之后 1
     * @param userCode 用户
     * @return
     */
    public List<Map<String, Object>> getCustomLayout(int formType,int formId, int primary, int downFromId,String userCode);
    
    public Map<String, Object> getFormIdtable(int formId,int inFormid, int downFromId);
src/com/yc/service/panel/SystemSettingsImpl.java
@@ -275,18 +275,19 @@
    /**
     * 自定义控件布局
     * @param formId
     * @param primary
     * @param downFromId
     * @param userCode
     * @param formType 窗体类型
     * @param formId 功能号
     * @param primary 0 主表数据 1从表数据
     * @param downFromId 表格之前 0 或表格之后 1
     * @param userCode 用户
     * @return
     */
    @Override
    public List<Map<String, Object>> getCustomLayout(int formId, int primary, int downFromId, String userCode) {
    public List<Map<String, Object>> getCustomLayout(int formType,int formId, int primary, int downFromId, String userCode) {
        try {
            String sql="select usercode,formid,headflag,fieldid,statisid,fieldname,datatype,datatypelength,showongrid,gridcaption," +
                    "visible,hidelabel,rowno,colno,lengthnum,heightnum,masterfieldshowlocation from gFieldCustomLayout " +
                    "where UserCode='"+userCode+"' and FormId="+formId;
                    "where UserCode='"+userCode+"' and FormId="+formId +" and formType="+formType;
            if (primary == 0 || primary == 1) {
                sql += " and HeadFlag=" + primary;
            }
src/com/yc/service/panel/v2/PanelServiceImpl.java
@@ -1,7 +1,6 @@
package com.yc.service.panel.v2;
import com.google.gson.JsonArray;
import com.yc.action.grid.ExprotType;
import com.yc.action.grid.GridUtils;
import com.yc.exception.ApplicationException;
import com.yc.service.build.type.v2.BaseBean;
@@ -149,10 +148,13 @@
            pHelper.excelTitles = "";
            pHelper.panJs43 = "";
            if (formType != 1) {//不是1类型窗体进入生成面板
                panelUp = filterDollarStr(getPanel(formId, infoJsBuffer, false, panelBean).toString());// 获取格线之上的面板控件值
                panelDow = filterDollarStr(getPanel(formId, infoJsBuffer, true, panelBean).toString());// 获取格线之下的面板控件值
                panelUp = ((panelBean.notPan || formType == 16) ? "" : getPar(pHelper))
                panelBean.setCustomLayout(base.isCustomLayout());//定义是否有控件布局
                panelUp = filterDollarStr(getPanel(formType,formId, infoJsBuffer, false, panelBean).toString());// 获取格线之上的面板控件值
                panelDow = filterDollarStr(getPanel(formType,formId, infoJsBuffer, true, panelBean).toString());// 获取格线之下的面板控件值
                panelUp = (((panelBean.notPan || formType == 16) && formType != 20) ? "" : getPar(pHelper))
                        + getJspPanSession(formId, pHelper.maps, pHelper) + panelUp;// 16是496设置的类型,(字段的格式设置)
                moBan = moBan.replaceAll("@panelHtml@", panelUp);// 表格上(多数是生成面板需要的控件)
                moBan = moBan.replaceAll("@panelDownHtml@", panelDow);// 表格下
            }
            moBan = moBan.replaceFirst("@wherePan496@", (formType == 16) ? "wherePan496" : "wherePan");// 替换
            // moBan+=getTypeIni();
@@ -241,35 +243,16 @@
        }
        moBan = moBan.replaceAll("@panInfo@", htmlBuffer.toString());
        String customGrid="";
        if (!Arrays.asList(typeArr).contains(formType)) {
            if (base.isCustomLayout()) {//有用户自定义控件布局 xin 2024-1-13 14:46:56
                String customMoBan = moBan;
                infoJsBuffer.setLength(0);//清空
                panelBean.setCustomLayout(base.isCustomLayout());//定义有控件布局
                //这里加载出用户自定义控件布局内容
                String panelUpOnly = "";
                String panelDowOnly = "";
                panelUpOnly = filterDollarStr(getPanel(formId, infoJsBuffer, false, panelBean).toString());// 获取格线之上的面板控件值
                panelDowOnly = filterDollarStr(getPanel(formId, infoJsBuffer, true, panelBean).toString());// 获取格线之下的面板控件值
                panelUpOnly = ((panelBean.notPan || formType == 16) ? "" : getPar(pHelper))
                        + getJspPanSession(formId, pHelper.maps, pHelper) + panelUpOnly;// 16是496设置的类型,(字段的格式设置)
                customMoBan = customMoBan.replaceAll("@panelHtml@", panelUpOnly);// 表格上(多数是生成面板需要的控件)
                customMoBan = customMoBan.replaceAll("@panelDownHtml@", panelDowOnly);// 表格下
                customMoBan = outRepl(customMoBan, panelBean);// 替换面板里面设置的特殊替换信息。
                map.put("customPanHTML", customMoBan);//自定义
            }
            moBan = moBan.replaceAll("@panelHtml@", panelUp);// 表格上(多数是生成面板需要的控件)
            moBan = moBan.replaceAll("@panelDownHtml@", panelDow);// 表格下
        }
        //需要进一步判断表格有没做自定义布局 by danaus 2024-04-01 15:28
        boolean hasControlLayout = controlLayoutIfc.hasControlLayout(formId+"", base.getUsrCode(), formType, ExprotType.Grid, false);
        if (hasControlLayout) {
            customGrid="_"+base.getUsrCode();
            base.setCustomLayout(hasControlLayout);
        }
//        boolean hasControlLayout = controlLayoutIfc.hasControlLayout(formId+"", base.getUsrCode(), formType, ExprotType.Grid, false);
//        if (hasControlLayout) {
//            customGrid="_"+base.getUsrCode();
//            base.setCustomLayout(hasControlLayout);
//        }
        //原始设置的控件布局(9802设置)
        if (base.isCustomLayout()) {//有用户自定义控件布局 xin 2024-1-13 14:46:56
            customGrid = "_" + base.getUsrCode();
        }
        moBan = moBan.replaceAll("@customGrid@", customGrid);// 处理表格名称
        moBan += "@addscript@";
        moBan = outRepl(moBan, panelBean);// 替换面板里面设置的特殊替换信息。
@@ -518,28 +501,28 @@
     * @return 返回显示代码
     */
    @Deprecated
    private StringBuffer getPanel(int formId, StringBuffer infoJsBuffer, boolean downGride, PanelBean panelBean)
    private StringBuffer getPanel(int formType,int formId, StringBuffer infoJsBuffer, boolean downGride, PanelBean panelBean)
            throws Exception {
        //PanelParmHelper pHelper = panelBean.pHelper;
        StringBuffer htmlBuffer = new StringBuffer();
//        panelBean.control38height=0;
        if (downGride) {
            if (panelBean.isPrimaryPan) {
                htmlBuffer = getPanel(formId, infoJsBuffer, 1, panelBean);// 原格线下显示
                htmlBuffer = getPanel(formType,formId, infoJsBuffer, 1, panelBean);// 原格线下显示
                List<Map<String, Object>> inFormList = systemSettingsBo.getFieldFormId(formId);
                int tiformid = 0;
                for (Map<String, Object> map : inFormList) {
                    tiformid = DBHelper.getValueInt(map, "MasterFieldShowLocation");
                    htmlBuffer.append(getPanel(formId, infoJsBuffer, tiformid, panelBean));
                    htmlBuffer.append(getPanel(formType,formId, infoJsBuffer, tiformid, panelBean));
                    htmlBuffer.append("<script>$(document).ready(function(){panFiled.replace(").append(formId)
                            .append(",").append(tiformid).append(");});</script>");
                }
            }
        } else {
            if (panelBean.isPrimaryPan) {
                htmlBuffer = getPanel(formId, infoJsBuffer, 0, panelBean);// 原格线上显示
                htmlBuffer = getPanel(formType,formId, infoJsBuffer, 0, panelBean);// 原格线上显示
            } else {
                htmlBuffer = getPanel(formId, infoJsBuffer, 1, panelBean);// 原格线下显示
                htmlBuffer = getPanel(formType,formId, infoJsBuffer, 1, panelBean);// 原格线下显示
            }
        }
        return htmlBuffer;
@@ -553,7 +536,7 @@
     * @param downFormid   获得是否表格下面板
     * @return 返回显示代码
     */
    private StringBuffer getPanel(int formId, StringBuffer infoJsBuffer, int downFormid, PanelBean panelBean)
    private StringBuffer getPanel(int formType,int formId, StringBuffer infoJsBuffer, int downFormid, PanelBean panelBean)
            throws Exception {
        PanelParmHelper pHelper = panelBean.pHelper;
        StringBuffer htmlBuffer = new StringBuffer();
@@ -569,10 +552,10 @@
        // }
        int lineNO = systemSettingsBo.getShowMaxRow(formId, pHelper.primary, downFormid);// 总行数
        lineNO = lineNO + ((tabsheetNameS.size() > 1) ? 1 : 0);
        List<Map<String, Object>> listSys = listSys = systemSettingsBo.selectList(formId, pHelper.primary, downFormid);// 暂时为表格上面板,设计好后改
        List<Map<String, Object>> listSys = systemSettingsBo.selectList(formId, pHelper.primary, downFormid);// 暂时为表格上面板,设计好后改
        List<Map<String, Object>> listLayout = null;//自定义布局
        if(panelBean.isCustomLayout()){//有自定义控件布局
            listLayout = systemSettingsBo.getCustomLayout(formId, pHelper.primary, downFormid,panelBean.getUserCode());//用户自定义控件布局
            listLayout = systemSettingsBo.getCustomLayout(formType,formId, pHelper.primary, downFormid,panelBean.getUserCode());//用户自定义控件布局
        }
        Map<String, Object> maxRC = systemSettingsBo.getFormIdtable(formId, pHelper.primary, downFormid);
        try {
@@ -980,7 +963,12 @@
//                .append((pHelper.rowHei + 4) * systemSettingsBo.getMaxRow(formId)).append("px;width:auto\">");
        htmlBuffer.append(panelMap.get("null")).append("</div>");
      //对生成的文件名称增加对自定义布局的处理 by danaus 2024-04-03 10:37
        htmlBuffer.append("<div id=\"tplt-grid\"><jsp:include page=\"@formId@@customGrid@_grid.jsp\" /></div>");
//        htmlBuffer.append("<div id=\"tplt-grid\"><jsp:include page=\"@formId@@customGrid@_grid.jsp\" /></div>");
        htmlBuffer.append("<div id=\"tplt-grid\">\n" +
                "<% try{String gridJsp=DBHelper.getCustomURL(request,formId,formType,\"grid.jsp\");%>\n" +
                "<jsp:include page=\"<%=gridJsp%>\" />\n" +
                "<% }catch(Exception e){throw e;}%>\n" +
                "</div>");
        // js 代码
        htmlBuffer.append("\r\n <script language=\"javascript\" type=\"text/javascript\"> ");
        htmlBuffer.append("\r\n panMain[panIndex].keyDown=function(op,e){");// 键触发