fs-danaus
2023-06-06 67465e19610bcfec429546929287842e4476338d
增加对1,2,3,7,10.20等非单据类型的保存时执行处理(把每行参数拼接一起)
4个文件已修改
650 ■■■■ 已修改文件
src/com/yc/action/grid/GTGrid.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/action/tree/TreeUtils.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/action/tree/Tree_2.java 269 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/action/tree/Tree_20.java 279 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/action/grid/GTGrid.java
@@ -176,6 +176,7 @@
     * 保存时执行的存储过程的存储过程参数列表
     */
    private String DProcPram = "";// 保存时执行的存储过程参数列表
    private String DProcValues = "";// 保存时执行的存储过程参数值
    /**
     * 自定义生成单号参数列表
     */
@@ -1547,6 +1548,9 @@
                    SqlInfo info = null;
                    try {
                        SpObserver.setDBtoInstance("_" + dbid);
                        if(this.DProcValues!=""){
                            this.DProcPram="'"+this.DProcValues+"'";
                        }
                        info = gridService.doExecute(
                                new DoExecuteParameter(doc, this.winType, this.formID, this.detailSql, this.headSql,
                                        this.procName, this.saveProc, this.DProc, this.DProcPram, sqlDel, null, null,
@@ -2109,7 +2113,7 @@
                            }
                        } else {
                            //第三表不需要执行删除时过程
                            this.getProcValues(map, "");
                            this.getProcValues(map, json.getgType());
                        }
                        deletedSql=" delete " + name + " where 1=1 " + key1.toString().replaceAll("&", "&");
                        if(json.getOtherTable()!=null&&fl!=2){
@@ -2256,13 +2260,20 @@
     *
     * @param map
     */
    private void getProcValues(HashMap map, String li) {
        //this.getProcValues(map, this.tempProc, this.saveProc);
        //String s = "";
        // if(this.formID!=9646||(this.formID==9646&& "1".equals((String)map.get("treetype"))))//只有是菜单时候才执行设置大图标, 2是角色,现在角色也可以设置大图标  by2015-5-13,
        //s = getRecordValues(map, li);
        //if (s != null && !"".equalsIgnoreCase(s) && !this.checkProcSame(s, totalProc)) this.totalProc.add(s);
        this.DProcPram = getRecordValues(map, this.DProcPram);
    private void getProcValues(HashMap map, String type) {
        if(";1;2;3;7;10;20;30;".contains(";"+type+";")){
            String str= getRecordValues(map, this.DProcPram);
            str=str.replaceAll("','",",");
            if(str!="") {
                if (this.DProcValues == "") {
                    this.DProcValues += str.substring(1, str.length() - 1);//去掉'引号
                } else {
                    this.DProcValues += ";" + str.substring(1, str.length() - 1);//去掉'引号
                }
            }
        }else {
            this.DProcPram = getRecordValues(map, this.DProcPram);
        }
        this.PerProcPram = getRecordValues(map, this.PerProcPram);
        this.ExcelProc = getRecordValues(map, this.ExcelProc);
        this.canelProc = getRecordValues(map, this.canelProc);
@@ -2523,7 +2534,7 @@
    /**
     * @param map 通过传需要替换的参数列表,取得当前记录集对应的值
     */
    private String getRecordValues(HashMap map, String prams) {
    public String getRecordValues(HashMap map, String prams) {
        if (StringUtils.isBlank(prams)) {
            return "";
        }
@@ -2881,7 +2892,7 @@
                }
            } else {
                if (PanelDataList != null && PanelDataList.size() > 0)
                    this.getProcValues(PanelDataList.get(0), "");
                    this.getProcValues(PanelDataList.get(0),this.winType+"" );
            }
        }
    }
@@ -3034,7 +3045,7 @@
                            this.getProcValues(map, str);
                    }
                } else {
                        this.getProcValues(map, "");
                        this.getProcValues(map, json.getgType());
                }
            }
        }
@@ -3227,7 +3238,7 @@
                    }
                } else {
                        up.putAll(vs);
                        this.getProcValues(up, "");
                        this.getProcValues(up, json.getgType());
                }
            }
        }
@@ -3314,7 +3325,7 @@
                }
                if (up.get("formid") != null && "".equalsIgnoreCase(up.get("formid"))) {
                        up.putAll(v);
                        this.getProcValues(up, "");
                        this.getProcValues(up, json.getgType());
                    this.detailSql.add(this.getRecordValues(up,"p9651 menuid,usercode,hasiconpermission")+"\n");
                    continue;//防止只是修改大图标,提交时没有formid而出错
                }
@@ -3404,7 +3415,7 @@
                }
                this.detailSql.add(sb.toString());
                up.putAll(v);
                this.getProcValues(up, "");
                this.getProcValues(up, json.getgType());
                this.detailSql.add(this.getRecordValues(up,"p9651 menuid,usercode,hasiconpermission")+"\n");
            }
@@ -3414,17 +3425,6 @@
                this.isSave = false;
            }
        }
        /*if (update != null && update.size() > 0) {//保存时触发每一行
            for (String str : update) {
                for (HashMap map : update1)
                    this.getProcValues(map, str);
            }
        } else {
            if (update1 != null && update1.size() > 0)
                this.getProcValues(update1.get(0), "");
            else
                this.isSave = false;
        }*/
        update = null;
    }
@@ -3616,7 +3616,7 @@
                    }
                } else {
                    up.putAll(v);
                    this.getProcValues(up, "");
                    this.getProcValues(up, json.getgType());
                }
            }
@@ -3851,7 +3851,7 @@
            }
        } else {
            if (update1 != null && update1.size() > 0)
                this.getProcValues(update1.get(0), "");
                this.getProcValues(update1.get(0), this.winType+"");
        }
    }
src/com/yc/action/tree/TreeUtils.java
@@ -1,8 +1,10 @@
package com.yc.action.tree;
import com.yc.action.BaseAction;
import com.yc.action.grid.GTGrid;
import com.yc.factory.FactoryBean;
import com.yc.service.BaseService;
import com.yc.service.tree.TreeJson;
import com.yc.utils.JsonUtil;
import com.yc.utils.SessionKey;
import org.apache.commons.lang.StringUtils;
@@ -16,6 +18,9 @@
import java.sql.Types;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringJoiner;
/**
 * 树操作数据SQL 拼装类
 * @author heqing.hbs@gmail.com
@@ -189,6 +194,9 @@
                if("modifyname".equalsIgnoreCase((String) k) &&up.get("modifyname")!=null){
                    key.append("[" + k + "]");
                    key.append("='"+session.getAttribute(SessionKey.HRNAME)+"'");
                }else if("modifycode".equalsIgnoreCase((String) k) &&up.get("modifycode")!=null){
                    key.append("[" + k + "]");
                    key.append("='"+session.getAttribute(SessionKey.HRCODE)+"'");
                }else if("modifydate".equalsIgnoreCase((String) k) &&up.get("modifydate")!=null){
                    key.append("[" + k + "]");
                    key.append("=getdate()");
@@ -310,6 +318,12 @@
                    key.append(",");
                    value.append(",");
                }
                else if("modifycode".equalsIgnoreCase((String) k) &&map.get("modifycode")!=null){
                    key.append("["+k+"]");
                    value.append("'"+session.getAttribute(SessionKey.HRCODE)+"'");
                    key.append(",");
                    value.append(",");
                }
                else if("modifydate".equalsIgnoreCase((String) k) &&map.get("modifydate")!=null){
                    key.append("["+k+"]");
                    value.append("getdate()");
@@ -346,9 +360,37 @@
        }
    }
    /**
     * 拼接保存时执行过程,每行取对应的参数值,最后组成一串传过去 p120201Save 'DD001;DD002'
     * @param treeJson
     * @param dProcValuesParm
     * @return
     */
    public  String getDProcValues(TreeJson treeJson,String dProcValuesParm) {
    StringJoiner dProcValues = new StringJoiner(";");
    GTGrid grid = (GTGrid) FactoryBean.getBean("GTGrid");
    if (treeJson.getInsertedRecords() != null && treeJson.getInsertedRecords().size() > 0) {
        for (HashMap<String, String> map : treeJson.getInsertedRecords()) {
                    dProcValues.add(getResultValues(grid,map,dProcValuesParm));
        }
    }
        if (treeJson.getInsertedRecords() != null && treeJson.getUpdatedRecords().size() > 0) {
            for (HashMap<String, String> map : treeJson.getUpdatedRecords()) {
                dProcValues.add(getResultValues(grid,map,dProcValuesParm));
            }
        }
        if (treeJson.getInsertedRecords() != null && treeJson.getDeleteRecords().size() > 0) {
            for (HashMap<String, String> map : treeJson.getDeleteRecords()) {
                dProcValues.add(getResultValues(grid,map,dProcValuesParm));
            }
        }
    return  dProcValues.length()==0?"":(" '"+dProcValues.toString()+"' ");
}
private  String getResultValues(GTGrid grid,HashMap map, String parm){
    String str = grid.getRecordValues(map, parm);
    str = str.replaceAll("','", ",");
    return str.substring(1, str.length() - 1);//去掉'引号
}
    protected int getType(SqlRowSetMetaData md,String id){
        int s=3;
        for(int i=1;i<=md.getColumnCount();i++){
src/com/yc/action/tree/Tree_2.java
@@ -22,154 +22,163 @@
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 *
 * @author heqing.hbs@gmail.com
 * @updatedBy
 * @updateTime 2011-5-20 上午09:47:50
 */
@Controller
public class Tree_2  extends BaseAction{
    private SqlRowSetMetaData md1;
    @RequestMapping("/tree_2_save.do")
    public void addNode(HttpServletRequest request,HttpServletResponse response) throws IOException{
        String treeJsonStr=request.getParameter("treeJson");
        String strFormid=request.getParameter("formid");
        if(StringUtils.isBlank(strFormid)){//针对导入2类型的excel xin 2023-2-21 17:30:45
            strFormid=(String) request.getAttribute("formid");
        }
        if(StringUtils.isBlank(strFormid))return;
        int formid=-1;
        String tableName =null;
        String message="";
        try{
            formid = Integer.parseInt(strFormid);
         tableName = gformIfc.getGformInfo("hdtable",formid).get("hdtable").toString();
        if(tableName==null||"".equals(tableName))return;
        SpObserver.setDBtoInstance("_"+request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
        md=treeIfc.getMetaDataByTableName(tableName);
        md1=treeIfc.getMetaDataByTableName("_sysAudit");
        }catch (Exception e) {
            return;
        }finally{
             SpObserver.setDBtoInstance();
         }
        TreeJson treeJson=null;
        if(StringUtils.isBlank(treeJsonStr)){//针对导入2类型的excel xin 2023-2-21 17:30:45
            treeJson=(TreeJson) request.getAttribute("treeJson");
            message="已完成!";
        }else{
            treeJson=fromJson(treeJsonStr);
        }
//        TreeJson treeJson=fromJson(treeJsonStr);
        int status=0;
        List<String> sql=new ArrayList<String>();//保存所有sql语句(新增,修改)
        TreeUtils treeUtils = new TreeUtils();
        //获得自动增长列和计算列--需要对其进行排除
        List<String> autoColumn = treeIfc.getAutovalComputedColumns(tableName);
        try{
            SpObserver.setDBtoInstance("_" + request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
            treeUtils.convert2InsertSQL(treeJson.getInsertedRecords(), tableName, sql, autoColumn, md,request.getSession());
            treeUtils.convert2UpdateSQL(treeJson.getUpdatedRecords(),tableName,sql,autoColumn,md,"",request.getSession());
            treeUtils.convert2DragSQL(treeJson.getDragRecords(), tableName, sql, "(1=1)");
            treeUtils.convert2DeleteSQL(treeJson.getDeleteRecords(), tableName, sql, "(1=1)");
            treeUtils.convert2AuditSQL(treeJson.getAuditRecords(), md1, request, sql);
            if (sql.size() > 0) {
                DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request.getSession().getAttribute(SessionKey.DATA_BASE_ID) + "");
                treeIfc.doBatchExcute(sql, strFormid, dataSourceEntity.getLimitDepartmentNumber() + "", tableName);
public class Tree_2 extends BaseAction {
            }
            sql = null;
            status = 0;
        } catch (NumberFormatException e1) {
            sql.clear();
            status = 1;
            message = getErrorMsg(message, e1);
        } catch (Exception e) {
            sql = null;
            status = 2;
            message = getErrorMsg(message, e);
        } finally {
            SpObserver.setDBtoInstance();
        }
    private SqlRowSetMetaData md1;
    @RequestMapping("/tree_2_save.do")
    public void addNode(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String treeJsonStr = request.getParameter("treeJson");
        String strFormid = request.getParameter("formid");
        if (StringUtils.isBlank(strFormid)) {//针对导入2类型的excel xin 2023-2-21 17:30:45
            strFormid = (String) request.getAttribute("formid");
        }
        if (StringUtils.isBlank(strFormid)) return;
        int formid = -1;
        String tableName = null;
        String dealAfterDocSave = null;
        String message = "";
        try {
            formid = Integer.parseInt(strFormid);
            SpObserver.setDBtoInstance("_" + request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
            Map<String, Object> gformInfo = gformIfc.getGformInfo("hdtable,DealAfterDocSave", formid);
            tableName = gformInfo.get("hdtable").toString();
            dealAfterDocSave = gformInfo.get("DealAfterDocSave").toString();
            if (tableName == null || "".equals(tableName)) return;
            md = treeIfc.getMetaDataByTableName(tableName);
            md1 = treeIfc.getMetaDataByTableName("_sysAudit");
        } catch (Exception e) {
            return;
        } finally {
            SpObserver.setDBtoInstance();
        }
        TreeJson treeJson = null;
        if (StringUtils.isBlank(treeJsonStr)) {//针对导入2类型的excel xin 2023-2-21 17:30:45
            treeJson = (TreeJson) request.getAttribute("treeJson");
            message = "已完成!";
        } else {
            treeJson = fromJson(treeJsonStr);
        }
        int status = 0;
        List<String> sql = new ArrayList<String>();//保存所有sql语句(新增,修改)
        TreeUtils treeUtils = new TreeUtils();
        //获得自动增长列和计算列--需要对其进行排除
        List<String> autoColumn = treeIfc.getAutovalComputedColumns(tableName);
        try {
            SpObserver.setDBtoInstance("_" + request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
            treeUtils.convert2InsertSQL(treeJson.getInsertedRecords(), tableName, sql, autoColumn, md, request.getSession());
            treeUtils.convert2UpdateSQL(treeJson.getUpdatedRecords(), tableName, sql, autoColumn, md, "", request.getSession());
            treeUtils.convert2DragSQL(treeJson.getDragRecords(), tableName, sql, "(1=1)");
            treeUtils.convert2DeleteSQL(treeJson.getDeleteRecords(), tableName, sql, "(1=1)");
            treeUtils.convert2AuditSQL(treeJson.getAuditRecords(), md1, request, sql);
            //保存时处理
            if (org.apache.commons.lang3.StringUtils.isNotBlank(dealAfterDocSave)) {
                String[] docSave=dealAfterDocSave.split("\\s+");
                sql.add(" exec "+docSave[0]+" "+treeUtils.getDProcValues(treeJson,docSave[1] ));
            }
            if (sql.size() > 0) {
                DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request.getSession().getAttribute(SessionKey.DATA_BASE_ID) + "");
                treeIfc.doBatchExcute(sql, strFormid, dataSourceEntity.getLimitDepartmentNumber() + "", tableName);
            }
            sql = null;
            status = 0;
        } catch (NumberFormatException e1) {
            sql.clear();
            status = 1;
            message = getErrorMsg(message, e1);
        } catch (Exception e) {
            sql = null;
            status = 2;
            message = getErrorMsg(message, e);
        } finally {
            SpObserver.setDBtoInstance();
        }
//        PrintWriter out=response.getWriter();
        response.setCharacterEncoding("utf-8");
        ResponseUtils.printJson(response, "{\"status\":\""+status+"\",\"message\":\""+message.replaceAll("\"", "'")+"\"}");
    }
    private String getErrorMsg(String message, Exception e) {
        if(e.getCause()!=null){
            message= e.getCause().getMessage();
        }else {
            message=e.getMessage();//下面这样写可能会截断异常错误的内容,所以直接抛出信息好了 xin 2023-4-6 17:08:30
        response.setCharacterEncoding("utf-8");
        ResponseUtils.printJson(response, "{\"status\":\"" + status + "\",\"message\":\"" + message.replaceAll("\"", "'") + "\"}");
    }
    private String getErrorMsg(String message, Exception e) {
        if (e.getCause() != null) {
            message = e.getCause().getMessage();
        } else {
            message = e.getMessage();//下面这样写可能会截断异常错误的内容,所以直接抛出信息好了 xin 2023-4-6 17:08:30
//            String[] mes = e.getMessage().split(";");
//            if (mes.length >= 1) message = mes[mes.length - 1];
//            String[] tempMsg = message.split(":");
//            if (tempMsg.length > 1) {
//                message = tempMsg[1];
//            }
        }
        return message;
    }
    @RequestMapping("/getRowid.do")
    public void getRowId(HttpServletRequest request,HttpServletResponse response) throws IOException
    {
        try{
        SpObserver.setDBtoInstance("_"+request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
         String rowid= treeIfc.getRowID();
         response.setCharacterEncoding("utf-8");
         PrintWriter out=response.getWriter();
         out.write(rowid);
         out.flush();
         out.close();
        }finally{
             SpObserver.setDBtoInstance();
         }
    }
    public TreeJson fromJson(String json){
        Gson gson = new Gson();
        }
        return message;
    }
    @RequestMapping("/getRowid.do")
    public void getRowId(HttpServletRequest request, HttpServletResponse response) throws IOException {
        try {
            SpObserver.setDBtoInstance("_" + request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
            String rowid = treeIfc.getRowID();
            response.setCharacterEncoding("utf-8");
            PrintWriter out = response.getWriter();
            out.write(rowid);
            out.flush();
            out.close();
        } finally {
            SpObserver.setDBtoInstance();
        }
    }
    public TreeJson fromJson(String json) {
        Gson gson = new Gson();
//        return gson.fromJson(json.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;"), new com.google.gson.reflect.TypeToken<TreeJson>() {   
//        }.getType() );
        return gson.fromJson(json, new com.google.gson.reflect.TypeToken<TreeJson>() {
            }.getType() );
    }
        return gson.fromJson(json, new com.google.gson.reflect.TypeToken<TreeJson>() {
        }.getType());
    }
    @RequestMapping("/tree_2_autocode.do")
    public void getAutoCode(int formid,String fields,String configs,HttpServletRequest request,HttpServletResponse response) throws IOException{
        String autocode="";
        try{
        String [] field=null;
        if("".equals(fields))return;
        field=fields.split(";");
        String []config=configs.split(";");
        if(config.length!=3)throw new Exception();
            autocode+="[";
            for(int i=0;i<field.length;i++){
                autocode+="{'field':'"+field[i]+"','value':'"+gridServiceIfc.getAutoCode(formid, Integer.parseInt(config[1]), field[i])+"'}";
            }
            autocode+="]";
        }catch(Exception e){
            autocode="错误信息:自动编号字段生成出错!";
        }
        response.setCharacterEncoding("utf-8");
         PrintWriter out=response.getWriter();
         out.write(autocode);
         out.flush();
         out.close();
    }
    @RequestMapping("/tree_2_autocode.do")
    public void getAutoCode(int formid, String fields, String configs, HttpServletRequest request, HttpServletResponse response) throws IOException {
        String autocode = "";
        try {
            String[] field = null;
            if ("".equals(fields)) return;
            field = fields.split(";");
            String[] config = configs.split(";");
            if (config.length != 3) throw new Exception();
            autocode += "[";
            for (int i = 0; i < field.length; i++) {
                autocode += "{'field':'" + field[i] + "','value':'" + gridServiceIfc.getAutoCode(formid, Integer.parseInt(config[1]), field[i]) + "'}";
            }
            autocode += "]";
        } catch (Exception e) {
            autocode = "错误信息:自动编号字段生成出错!";
        }
        response.setCharacterEncoding("utf-8");
        PrintWriter out = response.getWriter();
        out.write(autocode);
        out.flush();
        out.close();
    }
    private SqlRowSetMetaData md;
    @Autowired
    private com.yc.service.tree.TreeIfc treeIfc;
    @Autowired
    private GridServiceIfc gridServiceIfc;
    @Autowired
    private GformIfc gformIfc;
    private SqlRowSetMetaData md;
    @Autowired
    private com.yc.service.tree.TreeIfc treeIfc;
    @Autowired
    private GridServiceIfc gridServiceIfc;
    @Autowired
    private GformIfc gformIfc;
}
src/com/yc/action/tree/Tree_20.java
@@ -19,147 +19,152 @@
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Controller
public class Tree_20 {
    @RequestMapping("/tree_20_save2.do")
    public void tree_20_save(HttpServletRequest request,HttpServletResponse response) throws IOException{
        String treeJsonStr=request.getParameter("treeJson");
        String formid=request.getParameter("formid");
        String where = request.getParameter("where");
        String tableName=null;
         try{
            SpObserver.setDBtoInstance("_"+request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
            tableName = gformIfc.getGformInfo("dttable", Integer.parseInt(formid)).get("dttable").toString();
            if(StringUtils.isBlank(tableName)||StringUtils.isBlank(where))return;
            md=treeIfc.getMetaDataByTableName(tableName);
            }finally{
                 SpObserver.setDBtoInstance();
             }
        TreeJson treeJson=fromJson(treeJsonStr);
        int status=0;
        String message="";
        List<String> sql=new ArrayList<String>();//保存所有sql语句(新增,修改)
        TreeUtils treeUtils = new TreeUtils();
        //获得自动增长列和计算列--需要对其进行排除
        List<String> autoColumn = treeIfc.getAutovalComputedColumns(tableName);
        where = null == where ? "" : where;
        try{
            treeUtils.convert2InsertSQL(treeJson.getInsertedRecords(),tableName,sql,autoColumn,md,request.getSession());
            treeUtils.convert2UpdateSQL(treeJson.getUpdatedRecords(),tableName,sql,autoColumn,md,where,request.getSession());
            treeUtils.convert2DragSQL(treeJson.getDragRecords(),tableName,sql,where);
            treeUtils.convert2DeleteSQL(treeJson.getDeleteRecords(),tableName,sql,where);
//            for(int i=0;i<sql.size();i++){
//                System.out.println(sql.get(i));
//                treeIfc.doExcute(sql.get(i));
//            }
            if(sql.size()>0){
                 try{
                     SpObserver.setDBtoInstance("_" + request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
                     treeIfc.doBatchExcute(sql, "", "", "");
                    }finally{
                         SpObserver.setDBtoInstance();
                     }
            }
            sql.clear();
            status=1;
        }catch (NumberFormatException e) {
            sql.clear();
            status=0;
            message=e.getMessage().split(":")[1].replace("\"", "");
        }catch (TransientDataAccessResourceException e) {
            sql.clear();
            status=2;
            message=e.getMessage().split(":")[1].replace("\"", "");
        }
        catch(Exception e)
        {
            sql.clear();
            status=2;
            if(e.getCause()!=null)
                message=e.getCause().getMessage();
            else {
                String[] mes = e.getMessage().split(";");
                if (mes.length >= 2) {
                    String[] ms=mes[mes.length-1].split(":");
                    if(ms.length>1){
                        message=ms[1];
                    }else{
                        message=ms[0];
                    }
    @RequestMapping("/tree_20_save2.do")
    public void tree_20_save(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String treeJsonStr = request.getParameter("treeJson");
        String formid = request.getParameter("formid");
        String where = request.getParameter("where");
        String tableName = null;
        String dealAfterDocSave = null;
        try {
            SpObserver.setDBtoInstance("_" + request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
            Map<String, Object> gformInfo = gformIfc.getGformInfo("hdtable,DealAfterDocSave", Integer.parseInt(formid));
            tableName = gformInfo.get("hdtable").toString();
            dealAfterDocSave = gformInfo.get("DealAfterDocSave").toString();
            if (StringUtils.isBlank(tableName) || StringUtils.isBlank(where)) return;
            md = treeIfc.getMetaDataByTableName(tableName);
        } finally {
            SpObserver.setDBtoInstance();
        }
        TreeJson treeJson = fromJson(treeJsonStr);
        int status = 0;
        String message = "";
        List<String> sql = new ArrayList<String>();//保存所有sql语句(新增,修改)
        TreeUtils treeUtils = new TreeUtils();
        //获得自动增长列和计算列--需要对其进行排除
        List<String> autoColumn = treeIfc.getAutovalComputedColumns(tableName);
        where = null == where ? "" : where;
        try {
            treeUtils.convert2InsertSQL(treeJson.getInsertedRecords(), tableName, sql, autoColumn, md, request.getSession());
            treeUtils.convert2UpdateSQL(treeJson.getUpdatedRecords(), tableName, sql, autoColumn, md, where, request.getSession());
            treeUtils.convert2DragSQL(treeJson.getDragRecords(), tableName, sql, where);
            treeUtils.convert2DeleteSQL(treeJson.getDeleteRecords(), tableName, sql, where);
//保存时处理
            if (org.apache.commons.lang3.StringUtils.isNotBlank(dealAfterDocSave)) {
                String[] docSave=dealAfterDocSave.split("\\s+");
                sql.add(" exec "+docSave[0]+" "+treeUtils.getDProcValues(treeJson,docSave[1] ));
            }
            if (sql.size() > 0) {
                try {
                    SpObserver.setDBtoInstance("_" + request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
                    treeIfc.doBatchExcute(sql, "", "", "");
                } finally {
                    SpObserver.setDBtoInstance();
                }
            }
            sql.clear();
            status = 1;
        } catch (NumberFormatException e) {
            sql.clear();
            status = 0;
            message = e.getMessage().split(":")[1].replace("\"", "");
        } catch (TransientDataAccessResourceException e) {
            sql.clear();
            status = 2;
            message = e.getMessage().split(":")[1].replace("\"", "");
        } catch (Exception e) {
            sql.clear();
            status = 2;
            if (e.getCause() != null)
                message = e.getCause().getMessage();
            else {
                String[] mes = e.getMessage().split(";");
                if (mes.length >= 2) {
                    String[] ms = mes[mes.length - 1].split(":");
                    if (ms.length > 1) {
                        message = ms[1];
                    } else {
                        message = ms[0];
                    }
//                    message = mes[2];
                }
            }
            e.printStackTrace();
        }
                }
            }
            e.printStackTrace();
        }
//        response.setContentType("text/html;charset=utf8");
        response.setCharacterEncoding("utf-8");
        PrintWriter out=response.getWriter();
        out.write("{\"status\":\""+status+"\",\"message\":\""+message.replace("\"", "'")+"\"}");
        out.flush();
        out.close();
    }
    @RequestMapping("/getRowid_20.do")
    public void getRowId(HttpServletRequest request,HttpServletResponse response) throws IOException
    {
        try{
        SpObserver.setDBtoInstance("_"+request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
         String rowid= treeIfc.getRowID();
         response.setCharacterEncoding("utf-8");
         PrintWriter out=response.getWriter();
         out.write(rowid);
         out.flush();
         out.close();
            }finally{
                 SpObserver.setDBtoInstance();
             }
    }
    public TreeJson fromJson(String json){
        Gson gson = new Gson();
        return gson.fromJson(json.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;"), new com.google.gson.reflect.TypeToken<TreeJson>() {
        }.getType() );
    }
        response.setCharacterEncoding("utf-8");
        PrintWriter out = response.getWriter();
        out.write("{\"status\":\"" + status + "\",\"message\":\"" + message.replace("\"", "'") + "\"}");
        out.flush();
        out.close();
    }
    @RequestMapping("/tree_20_autocode.do")
    public void getAutoCode(int formid,String fields,String configs,HttpServletRequest request,HttpServletResponse response) throws IOException{
        String autocode="";
        try{
        String [] field=null;
        if("".equals(fields))return;
        field=fields.split(";");
        String []config=configs.split(";");
        if(config.length!=3)throw new Exception();
            autocode+="[";
            try{
            SpObserver.setDBtoInstance("_"+request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
            for(int i=0;i<field.length;i++){
                autocode+="{'field':'"+field[i]+"','value':'"+gridServiceIfc.getAutoCode(formid, Integer.parseInt(config[1]), field[i])+"'}";
            }
            }finally{
                 SpObserver.setDBtoInstance();
             }
            autocode+="]";
        }catch(Exception e){
            autocode="错误信息:自动编号字段生成出错!";
        }
        response.setCharacterEncoding("utf-8");
         PrintWriter out=response.getWriter();
         out.write(autocode);
         out.flush();
         out.close();
    }
    @RequestMapping("/getRowid_20.do")
    public void getRowId(HttpServletRequest request, HttpServletResponse response) throws IOException {
        try {
            SpObserver.setDBtoInstance("_" + request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
            String rowid = treeIfc.getRowID();
            response.setCharacterEncoding("utf-8");
            PrintWriter out = response.getWriter();
            out.write(rowid);
            out.flush();
            out.close();
        } finally {
            SpObserver.setDBtoInstance();
        }
    }
    private SqlRowSetMetaData md;
    @Autowired
    private com.yc.service.tree.TreeIfc treeIfc;
    @Autowired
    private GridServiceIfc gridServiceIfc;
    @Autowired
    GformIfc gformIfc;
    public TreeJson fromJson(String json) {
        Gson gson = new Gson();
        return gson.fromJson(json.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;"), new com.google.gson.reflect.TypeToken<TreeJson>() {
        }.getType());
    }
    @RequestMapping("/tree_20_autocode.do")
    public void getAutoCode(int formid, String fields, String configs, HttpServletRequest request, HttpServletResponse response) throws IOException {
        String autocode = "";
        try {
            String[] field = null;
            if ("".equals(fields)) return;
            field = fields.split(";");
            String[] config = configs.split(";");
            if (config.length != 3) throw new Exception();
            autocode += "[";
            try {
                SpObserver.setDBtoInstance("_" + request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
                for (int i = 0; i < field.length; i++) {
                    autocode += "{'field':'" + field[i] + "','value':'" + gridServiceIfc.getAutoCode(formid, Integer.parseInt(config[1]), field[i]) + "'}";
                }
            } finally {
                SpObserver.setDBtoInstance();
            }
            autocode += "]";
        } catch (Exception e) {
            autocode = "错误信息:自动编号字段生成出错!";
        }
        response.setCharacterEncoding("utf-8");
        PrintWriter out = response.getWriter();
        out.write(autocode);
        out.flush();
        out.close();
    }
    private SqlRowSetMetaData md;
    @Autowired
    private com.yc.service.tree.TreeIfc treeIfc;
    @Autowired
    private GridServiceIfc gridServiceIfc;
    @Autowired
    GformIfc gformIfc;
}