fs-danaus
2022-11-14 12560372988b49cc9465e92c32d852db2d0e8612
处理保存时脚本顺序,先主表后从表
7个文件已修改
272 ■■■■■ 已修改文件
src/com/yc/action/grid/GTGrid.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/action/grid/TreeGrid.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/action/grid/TreeGridDTO.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/service/grid/DoExecuteParameter.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/service/grid/GridServiceImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/utils/FileUtil.java 77 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/utils/Page.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/action/grid/GTGrid.java
@@ -124,13 +124,14 @@
    /**
     * 保存所有新增sql语句
     */
    List<String> insertsql = new ArrayList<String>();// 保存所有sql语句(新增)
    List<String> detailSql = new ArrayList<String>();// 保存从表所有sql语句(新增)
    /**
     * 保存所有修改sql语句
     */
    List<String> updatesql = new ArrayList<String>();// 保存所有sql语句(修改)
    List<String> headSql = new ArrayList<String>();// 保存主表所有sql语句(修改)
    /**
     * 保存所有删除sql语句
@@ -1073,8 +1074,8 @@
                } finally {
                    SpObserver.setDBtoInstance();
                }
                for (int i = 0; i < this.insertsql.size(); i++) {
                    this.insertsql.add(i, this.insertsql.get(i).replaceAll("#docceod", doc));
                for (int i = 0; i < this.detailSql.size(); i++) {
                    this.detailSql.add(i, this.detailSql.get(i).replaceAll("#docceod", doc));
                }
            }
            //------
@@ -1084,7 +1085,7 @@
            try {
                SpObserver.setDBtoInstance("_" + dbid);
                info = gridService.doExecute(new DoExecuteParameter(doc, this.winType,
                                this.formID, this.insertsql, updatesql, this.procName,
                                this.formID, this.detailSql, this.headSql, this.procName,
                                this.saveProc, this.DProc, this.DProcPram, sqlDel, null, null, this.PerProc,
                                this.PerProcPram, this.isSave, this.docPram, this.status, tableName,
                                this.FunLinkProc, this.FunLinkPram, json, this.totalProc, this.ExcelProc, this.canelProc, this.revokeProc),
@@ -1406,6 +1407,7 @@
                gt.setPrimeKey(json.getPrimeKey());
                gt.setTableType(json.getgType());
                json.setUserName(request.getSession().getAttribute(SessionKey.USER_NAME)+"");
                // 明细表的处理移到这里-----
                this.convert2InsertSQL(tableMetaData, json, table, 1, gt, dbid);
                this.convert2UpdateSQL(tableMetaData, json, table, 1, gt);
                this.convert2DeleteSQL(tableMetaData, json, table, 1, gt);
@@ -1479,7 +1481,7 @@
                    // 有些sql执行就报错。xin--2016-4-20
                    // 16:34:17
                    if (!this.zhupan496.equals("")) {
                        this.insertsql.add(0, this.zhupan496);// 针对496的主表最后添加进去
                        this.detailSql.add(0, this.zhupan496);// 针对496的主表最后添加进去
                        this.zhupan496 = "";
                    }
                    // this.insertsql496="";//清空
@@ -1522,7 +1524,6 @@
                    json.setgType(this.winType + "");
                    json.setTaobao(this.taobaoAPI);
                }
                // -----
                try {
                    String doc = "";
@@ -1540,7 +1541,7 @@
                    }
                    // ----因为有可能需要替换参数而出错,因为提交数据为空,保存后需要排除保存时执行 by 2014-5-19
                    if (this.insertsql.size() == 0 && this.updatesql.size() == 0 && this.sqlDel.size() == 0) {
                    if (this.detailSql.size() == 0 && this.updatesql.size() == 0 && this.sqlDel.size() == 0) {
                        this.DProc = "";
                        this.ExcelProc="";
                    }
@@ -1549,7 +1550,7 @@
                    try {
                        SpObserver.setDBtoInstance("_" + dbid);
                        info = gridService.doExecute(
                                new DoExecuteParameter(doc, this.winType, this.formID, this.insertsql, updatesql,
                                new DoExecuteParameter(doc, this.winType, this.formID, this.detailSql, this.headSql,
                                        this.procName, this.saveProc, this.DProc, this.DProcPram, sqlDel, null, null,
                                        this.PerProc, this.PerProcPram, this.isSave, this.docPram, this.status,
                                        tableName, this.FunLinkProc, this.FunLinkPram, json, this.totalProc,
@@ -1599,7 +1600,7 @@
                    return null;
                } finally {
                    this.insertsql.clear();
                    this.detailSql.clear();
                    this.insert.clear();
                    this.totalNum = 0;
                    this.updatesql.clear();
@@ -1839,7 +1840,7 @@
                        if (isPrimaryPan.equals("1")) {
                            this.zhupan496 = this.wherepan496;
                        } else {
                            this.insertsql.add(0, this.wherepan496);
                            this.headSql.add(0, this.wherepan496);
                        }
                        this.wherepan496 = "";
                    }
@@ -2778,10 +2779,10 @@
                        this.type496 = "";
                    } else {
                        if (isPramyPan != null && "1".equalsIgnoreCase(isPramyPan))
                            this.insertsql.add(0, "insert into " + tableName + keyList.substring(0, keyList.length() - 1) + ")"
                            this.headSql.add(0, "insert into " + tableName + keyList.substring(0, keyList.length() - 1) + ")"
                                    + value.substring(0, value.length() - 1) + ")");
                        else
                            this.insertsql.add("insert into " + tableName + keyList.substring(0, keyList.length() - 1) + ")"
                            this.headSql.add("insert into " + tableName + keyList.substring(0, keyList.length() - 1) + ")"
                                    + value.substring(0, value.length() - 1) + ")");
                    }
                } else {// 这个是主从不是一个视图情况添加到对应的表里。
@@ -2825,32 +2826,6 @@
        }
        if (list != null) {
            for (HashMap map : list) {
//                if (this.TbkeyID != null && this.TbkeyID.length() > 0) {
//                    //淘宝接口,先判断当前数据库是否已存在,存在则转换成更新操作,否则是新增
//                    String id = this.TbkeyID.split(",")[1];//主表的主键
//                    String sql = "declare @num" + cont + " integer \n select @num" + cont + "=count([" + id + "]) from " + name + " where [" + id + "]=? \n select @num" + cont + " ";
//
//                    int cont = 0;
//                    try {
//                        SpObserver.setDBtoInstance("_" + dbid);
//                        cont = gridService.getSimpleJdbcTemplate().queryForObject(sql, new Object[]{map.get(id.toLowerCase())}, Integer.class);
//                    } finally {
//                        SpObserver.setDBtoInstance();
//                    }
//                    if (cont > 0) {//表示已存在,需要转换成更新sql
//                        GTJson js = new GTJson();
//                        List<HashMap<String, String>> temp1 = new ArrayList<HashMap<String, String>>();
//                        temp1.add(map);
//                        if (fl == 2)
//                            js.setOtherUpdateds(temp1);
//                        else
//                            js.setUpdatedRecords(temp1);
//                        convert2UpdateSQL(tableMetaData, js, name, fl, g);
//                        temp1 = null;
//                        js = null;
//                        continue;
//                    }
//                }
                StringBuilder key = new StringBuilder();
                StringBuilder value = new StringBuilder();
                String rowidCreate = "";
@@ -2911,18 +2886,6 @@
                                || "".equals(map.get(k)) || ((String) map.get(k)).length() == 0)) {
                            rowidCreate = " exec getXXXX @rowid" + cont + " output; \n";
                            map.put(k, "@rowid" + cont);
//                if(json.getRefKeyMap().get(g.getFormid()+"")!=null){//有值表明rowid生成直接取上一行
//
//                }else {
//                    rowidCreate = " exec getXXXX @rowid" + cont + " output; \n";
//                    map.put(k, "@rowid" + cont);
//                }
//                //处理496多表子功能号之间有关联的情况(rowid) by danaus 2020/1/18 11:31
////                if(g.getKeyid()!=null&&!"".equals(g.getKeyid())){
////                    //T_180212|RowId;rowid
////                    String refFormid=g.getKeyid().split("|")[0].replace("T_","");//取得180212
////                    json.getRefKeyMap().put(refFormid,cont+"");
////                }
                        }
                        if ("detailrowid".equalsIgnoreCase((String) k)
                                && (map.get(k) == null || "".equals(map.get(k))
@@ -2963,9 +2926,7 @@
                        value.append(",");
                    }
                }
                this.insertsql.add(rowidCreate + detailrowidCreate + " insert into " + tableName + key.substring(0, key.length() - 1) + ")" + value.substring(0, value.length() - 1) + ")");
                rowidCreate = "";
                detailrowidCreate = "";
                this.detailSql.add(rowidCreate + detailrowidCreate + " insert into " + tableName + key.substring(0, key.length() - 1) + ")" + value.substring(0, value.length() - 1) + ")");
            }
        }
        if (add != null && add.size() > 0) {
@@ -3017,7 +2978,7 @@
                        value.append(",");
                    }
                }
                this.insertsql.add("insert into _sysAudit" + key.substring(0, key.length() - 1) + ")" + value.substring(0, value.length() - 1) + ")");
                this.detailSql.add("insert into _sysAudit" + key.substring(0, key.length() - 1) + ")" + value.substring(0, value.length() - 1) + ")");
            }
        }
       // list = null;
@@ -3086,22 +3047,25 @@
                                continue;
                            }
                        } else {
                            if ("docversion".equalsIgnoreCase((String) k)) {//版本号不更新
                                continue;
                            }
                            key.append("[").append(k);
                            key.append("]=");
                            parserType(up, key, k, tableMetaData);
                            if ("docversion".equalsIgnoreCase((String) k)) {//版本号跳过
                                continue;
                            }else {
                                parserType(up, key, k, tableMetaData);
                            }
                        }
                        key.append(",");
                        isNul = true;
                    }
                    //---增加版本号的更新
                    //key.append(" DocVersion=isnull(DocVersion,0)+1,");
                }
                if (!isNul) continue;// 跳出,不用写进去,因为不存在需要更新的字段
                String versionStr = "";
                if (!isVersion && vs != null && vs.size() > 0 && vs.containsKey("docversion")) {//存在有版本号,用来处理并发问题
                    versionStr = " and isnull(docversion,0)=isnull(" + (("null".equals(vs.get("docversion")) || org.apache.commons.lang3.StringUtils.isBlank(vs.get("docversion"))) ? "0" : vs.get("docversion")) + ",0) \n" +
                    versionStr = " and isnull(DocVersion,0)=isnull(" + (("null".equals(vs.get("docversion")) || org.apache.commons.lang3.StringUtils.isBlank(vs.get("docversion"))) ? "0" : vs.get("docversion")) + ",0) \n" +
                            " if @@rowcount=0  \n " +
                            " begin \n" +
                            "  raiserror('当前单据内容已发生变化,请刷新页面然后重试此操作',16,1) \n" +
@@ -3147,7 +3111,7 @@
                //通过版本号判断数据是否已更新,版本号不一致则显示提示信息,刷新页面再提交  by danaus 2022/3/11 11:11
                String updateSql = "update " + tableName + (key.lastIndexOf(",") == (key.length() - 1) ? key.substring(0, key.length() - 1) : key.toString()) + value.toString() + versionStr;
                //增加处理因为少了主键造成更新多条记录的情况  by danaus 2020/4/24 15:26
                this.updatesql.add(updateSql +
                this.detailSql.add(updateSql +
                        "\n if @@rowcount > 1 \n" +
                        "  begin \n" +
                        "     raiserror('由于表/视图缺少正确的主键(Primary Key),将导致多条记录被更新(update)为相同的值,解决办法:为表/视图【" + tableName + "】设置正确的主键(Primary Key)',16,1)\n" +
@@ -3342,7 +3306,7 @@
                }
                this.updatesql.add(sb.toString());
                this.detailSql.add(sb.toString());
            }
            if (update1.size() == 0) {//没数据,表示需要把之前的保存时执行过程清空,针对9646才需要这样
@@ -3548,7 +3512,7 @@
                }
                this.updatesql.add(sb.toString());
                this.detailSql.add(sb.toString());
            }
            if (update1.size() == 0) {//没数据,表示需要把之前的保存时执行过程清空,针对9646才需要这样
@@ -3723,7 +3687,6 @@
                    isPass = tableMetaDatas.containsKey(k + "");// 去除计算列
                    isPass = checkExpressionColumn(up, k, isPass);// 更新时有权限控制的字段不需要更新
                    if (isPass) {
                        key.append("[").append(k);
                        key.append("]=");
                        parserType(up, key, k, tableMetaDatas);
@@ -3743,11 +3706,13 @@
                    key.append("]='").append(local.get().get("@hrname")).append("',");
                }
                //增加版本号的更新
               // key.append("[").append("DocVersion");
                //key.append("]=").append("isnull(DocVersion,0)+1 ");
                String updateSql = " update " + tableName + key.substring(0, key.length() - 1) + value.toString();
                //通过版本号判断数据是否已更新,版本号不一致则显示提示信息,刷新页面再提交  by danaus 2022/3/11 11:11
                if (up.containsKey("docversion")) {
                    updateSql += " and isnull(docversion,0)=isnull(" + (("null".equals(up.get("docversion")) || org.apache.commons.lang3.StringUtils.isBlank(up.get("docversion"))) ? "0" : up.get("docversion")) + ",0) \n" +
                    updateSql += " and isnull(DocVersion,0)=isnull(" + (("null".equals(up.get("docversion")) || org.apache.commons.lang3.StringUtils.isBlank(up.get("docversion"))) ? "0" : up.get("docversion")) + ",0) \n" +
                            " if @@rowcount=0  \n " +
                            " begin \n" +
                            "  raiserror('当前单据内容已发生变化,请刷新页面然后重试此操作',16,1) \n" +
@@ -3756,9 +3721,9 @@
                }
                if (!this.type496.equals("update")) {
                    if (isPramyPan != null && "1".equalsIgnoreCase(isPramyPan)) {
                        this.updatesql.add(0, updateSql);
                        this.headSql.add(0, updateSql);
                    }else {
                        this.updatesql.add(updateSql);
                        this.headSql.add(updateSql);
                    }
                } else {// 496类型的update调用
                    //---增加处理value的值没有where条件,只是value=where 1=1的情况,会导致更新所有数据,如果出现这种情况,需要抛出错误
@@ -4752,9 +4717,24 @@
                String expanded = getExpanded(request.getSession().getAttribute(SessionKey.DATA_BASE_ID) + "");
                page.setExpanded(expanded);
                boolean hasParentNode=false;
                //取分页信息,组装数据输出
                //--取总页数=树的主节点数
                List<Map<String, Object>> data=page.getData();
                List<Map<String, Object>> parentData = data.stream().filter(x -> org.apache.commons.lang3.StringUtils.isBlank(x.get("parentrowid") + "")).collect(Collectors.toList());
                for (int i = 0; i < page.getData().size(); i++) {
                    Map<String, Object> map = (Map<String, Object>) page.getData().get(i);
                if(parentData!=null&&parentData.size()>0) {
                   int totalSize= parentData.size()%page.getOrgPageSize()==0?parentData.size() /page.getOrgPageSize():parentData.size() /page.getOrgPageSize()+1;
                    page.setTotalPageNum(totalSize);//重新计算总页数
                    page.setPageSize(page.getOrgPageSize());
                    int fromIndex=page.getPos()==0?0:(page.getPos()*page.getPageSize());//开始
                    int toIndex=page.getPos()==0?(page.getPageSize()-1):((page.getPos()+1)*page.getPageSize()-1);//结束
                    if(toIndex>=parentData.size()) toIndex=parentData.size()-1;
                    data=parentData.subList(fromIndex,toIndex);//取指定范围的数据
                }
                //------
                for (int i = 0; i < data.size(); i++) {
                    Map<String, Object> map = data.get(i);
                    String pid = (String) map.get("parentrowid");//上级节点ID,从这里开始组装
                    String rowid = (String) map.get("rowid");
                    if (pid == null || "".equalsIgnoreCase(pid)) {//取每颗树的父节点作为第一个节点进行组装
@@ -6150,8 +6130,10 @@
        try {
            if (-1 == page.getFlag()) page.setPageSize(MAX_RECORD);
            if (this.isShowTree(dbid) && -1 != page.getFlag()) {
                page.setOrgPageSize(page.getPageSize());
                page.setPageSize(MAX_RECORD);
                page.setFlag(-20);//表示为需要显示树形,所以需要把所有数据取出来,不分页
                page.setPageNum(1);
            }
            try {
                SpObserver.setDBtoInstance("_" + dbid);
src/com/yc/action/grid/TreeGrid.java
@@ -812,8 +812,11 @@
            StringBuilder id = new StringBuilder();
            StringBuilder value = new StringBuilder();
            if (type != 30 && type != 32) {
            if(dto.isSuppressBlankLineForDropDown==0) {
                //只有为0才需要增加空白列
                id.append("| ");
                value.append("| ");
            }
            }
            try {
                if (sql != null && sql != "" && sql.length() > 0) {//有sql参数
@@ -1174,6 +1177,7 @@
                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(";", "~")) + ";" : "");
@@ -1360,6 +1364,7 @@
                    sb.append(" showType='" + (type == 9 ? 0 : 2) + "' ");//以后增加格线支持多附件显示需要用到,区别出到时应该取哪一个附件表(_sys_Attachment9,_sys_Attachment)的数据
                }
                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类型
@@ -1400,6 +1405,7 @@
                            .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)
src/com/yc/action/grid/TreeGridDTO.java
@@ -98,4 +98,5 @@
    public int isExchangeDataWithHost=0;//单据功能号
    public String formTabName="";//多表子功能号页卡名称
    public int postDocStatus;//确认后状态值
    public  int isSuppressBlankLineForDropDown;//取消下拉列表控件空白列
}
src/com/yc/service/grid/DoExecuteParameter.java
@@ -8,8 +8,8 @@
    private String doccode;
    private int type;
    private int formid;
    private  List<String> insertsql;
    private List<String> updatesql;
    private  List<String> detailSql;
    private List<String> headSql;
    private List<String> proc1;
    private List<String> proc2;
    private String str;
@@ -104,7 +104,7 @@
    }
    public DoExecuteParameter(String doccode, int type, int formid,
            List<String> insert, List<String> updatesql, List<String> proc1,
            List<String> detailSql, List<String> headSql, List<String> proc1,
            List<String> proc2, String str, String parm, List<String> del,
            List<String> delproc1, List<String> delproc2, String oaButtonProcName, String oaButtonProcParms,
            boolean fl, String docParm, String status,String tableName,
@@ -112,8 +112,8 @@
        this.doccode = doccode;
        this.type = type;
        this.formid = formid;
        this.insertsql = insert;
        this.updatesql = updatesql;
        this.detailSql = detailSql;
        this.headSql = headSql;
        this.proc1 = proc1;
        this.proc2 = proc2;
        this.str = str;
@@ -166,20 +166,20 @@
    
    
    public List<String> getInsertsql() {
        return insertsql;
    public List<String> getDetailSql() {
        return detailSql;
    }
    public void setInsertsql(List<String> insertsql) {
        this.insertsql = insertsql;
    public void setDetailSql(List<String> detailSql) {
        this.detailSql = detailSql;
    }
    public List<String> getUpdatesql() {
        return updatesql;
    public List<String> getHeadSql() {
        return headSql;
    }
    public void setUpdatesql(List<String> updatesql) {
        this.updatesql = updatesql;
    public void setHeadSql(List<String> headSql) {
        this.headSql = headSql;
    }
    public List<String> getProc1() {
src/com/yc/service/grid/GridServiceImpl.java
@@ -502,40 +502,36 @@
            return info;
        }
        int in = parameterObject.getInsertsql().size();
        int up = parameterObject.getUpdatesql().size();
        int in = parameterObject.getDetailSql().size();
        int up = parameterObject.getHeadSql().size();
        int de = parameterObject.getDel().size();
        int to = parameterObject.getTotalProc().size();
        String[] list = new String[in + up + de];
        String[] toBeStored = parameterObject.getInsertsql().toArray(new String[in]);
        String[] toBeStored1 = parameterObject.getUpdatesql().toArray(new String[up]);
        String[] toBeStored = parameterObject.getHeadSql().toArray(new String[in]);
        String[] toBeStored1 = parameterObject.getDetailSql().toArray(new String[up]);
        String[] toBeStored_p = parameterObject.getTotalProc().toArray(new String[to]);
        String[] toBeStored2 = parameterObject.getDel().toArray(new String[de]);
        // 1-------新增数据
        if (in > 0) {
            System.arraycopy(toBeStored, 0, list, 0, in);
        // 1-------表头数据
        if (up > 0) {
            System.arraycopy(toBeStored, 0, list, 0, up);
        }
        // 2----------更新数据
        if (up > 0) {
            System.arraycopy(toBeStored1, 0, list, in, up);
        // 2----------表体数据
        if (in > 0) {
            System.arraycopy(toBeStored1, 0, list, up, in);
        }
        // 3----------删除数据
        if (de > 0) {
            System.arraycopy(toBeStored2, 0, list, in + up, de);
            System.arraycopy(toBeStored2, 0, list, up + in, de);
        }
        int[] count = null;
        // if(list.length>0)
        // this.jdbcTemplate.batchUpdate(list);//批量更新数据
        //
        // 提交数据
        for (String str : list)
        for (String str : list) {
            sql.append(str).append(" \n");
        }
        // 有删除图片的在这里执行
        if (picList.size() > 0) {
            for (PicEntity picEntity : picList) {
                String uuid = null;
                String[] splt = null;
src/com/yc/utils/FileUtil.java
@@ -1,13 +1,6 @@
package com.yc.utils;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.*;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.regex.Pattern;
@@ -244,4 +237,72 @@
        }
        return null;
    }
    /**
     *
     * @param path
     * @return String
     * @description 将文件转base64字符串
     * @date 2018年3月20日
     * @author changyl
     * File转成编码成BASE64
     */
    public static  String fileToBase64(String path) {
        String base64 = null;
        InputStream in = null;
        try {
            File file = new File(path);
            in = new FileInputStream(file);
            byte[] bytes=new byte[(int)file.length()];
            in.read(bytes);
            base64 = java.util.Base64.getEncoder().encodeToString(bytes);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return base64;
    }
    //BASE64解码成File文件
    public static void base64ToFile(String destPath,String base64, String fileName) {
        File file = null;
        //创建文件目录
        String filePath=destPath;
        File  dir=new File(filePath);
        if (!dir.exists() && !dir.isDirectory()) {
            dir.mkdirs();
        }
        BufferedOutputStream bos = null;
        java.io.FileOutputStream fos = null;
        try {
            byte[] bytes = java.util.Base64.getDecoder().decode(base64);
            file=new File(filePath+"/"+fileName);
            fos = new java.io.FileOutputStream(file);
            bos = new BufferedOutputStream(fos);
            bos.write(bytes);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
src/com/yc/utils/Page.java
@@ -61,7 +61,7 @@
    private Map tbColsMap;
    private String formName;
    private Map<String, String> attachmentType;
private  int orgPageSize;
    public String getFormName() {
        return formName;
    }
@@ -495,4 +495,12 @@
    public Map<String, String> getAttachmentType() {
        return attachmentType;
    }
    public void setOrgPageSize(int orgPageSize) {
        this.orgPageSize = orgPageSize;
    }
    public int getOrgPageSize() {
        return orgPageSize;
    }
}