xinyb
2022-07-20 12b6192bb2a7d0e1aacd6af3adcbb8357652a78d
Merge remote-tracking branch 'origin/dev' into dev
13个文件已修改
1793 ■■■■ 已修改文件
src/com/yc/action/grid/AppJson.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/action/grid/GTGrid.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/action/grid/GridUtils.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/action/login/LoginAction.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/app/v2/controller/APPController.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/entity/UserAccountEntity.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/service/grid/GridServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/service/impl/DBHelper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/service/user/UserAccountServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/userCenter/entity/JurisdictionEntiy.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/userCenter/service/UserCenterImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/utils/GTJson.java 1651 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/utils/SessionKey.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/action/grid/AppJson.java
@@ -9,4 +9,6 @@
  private String detailRowid="";
  private int onlinePay;
  private int onlineRefund;
  private String memo;
  private String linkDocInfo;
}
src/com/yc/action/grid/GTGrid.java
@@ -2544,8 +2544,9 @@
                if (i == 4 || i == 2) key.append(obj);
                else key.append("''");
            } else {
                if ((((String) k).equalsIgnoreCase("enterdate") && ((String) map.get("enterdate")).equalsIgnoreCase("getdate()")) || (((String) k).equalsIgnoreCase("modifydate") && ((String) map.get("modifydate")).equalsIgnoreCase("getdate()"))) {// 为了把getdate()作为
                    // 一个function而增加
                if ((((String) k).equalsIgnoreCase("enterdate") && ((String) map.get("enterdate")).equalsIgnoreCase("getdate()")) || (((String) k).equalsIgnoreCase("modifydate") && ((String) map.get("modifydate")).equalsIgnoreCase("getdate()"))||
                        (((String) k).equalsIgnoreCase("periodid") && ((String) map.get("periodid")).startsWith("dbo.getPeriodid"))
                ) {// 为了把getdate(),getPeriodid作为 一个function而增加,不加单引号
                    key.append(map.get(k));
                } else if (((String) k).equalsIgnoreCase("treecontrol")) {//是为了不需要加上单引号
                    if (map.get(k) != null && map.get(k).toString().length() > 0){
@@ -2664,31 +2665,6 @@
                                        String isPramyPan, String dbid) {
        if (PanelDataList != null) {
            for (HashMap map : PanelDataList) {
                // 先判断当前数据库是否已存在,存在则转换成更新操作,否则是新增
//                if (this.TbkeyID != null && this.TbkeyID.length() > 0) {
//                    String id = this.TbkeyID.split(",")[0];// 主表的主键
//                    String sql = "declare @num" + cont + " integer \n select @num" + cont + "=count([" + id + "]) from "
//                            + tableName + " 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
//                        List<HashMap<String, String>> temp1 = new ArrayList<HashMap<String, String>>();
//                        temp1.add(map);
//                        this.isTaobao = true;
//                        convertPanelSQL(temp1, tableName, isPramyPan, dbid);
//                        this.isTaobao = false;
//                        temp1 = null;
//                        continue;
//                    }
//                    if (map.get("companyid") == null || ((String) map.get("companyid")).length() == 0)
//                        map.put("companyid", local.get().get("@companyid"));
//                }
                StringBuilder keyList = new StringBuilder();
                StringBuilder value = new StringBuilder();
                keyList.append("(");
@@ -2734,17 +2710,18 @@
                        if ("periodid".equalsIgnoreCase((String) key)) {
                            if (map.get("companyid") == null || ((String) map.get("companyid")).length() == 0)
                                map.put("companyid", local.get().get("@companyid"));
                            try {
                                int fromid = Integer.parseInt((String) map.get("formid"));
                                SpObserver.setDBtoInstance("_" + dbid);
                                map.put(key, gridService.getPeriodID(fromid, (String) map.get("companyid"),
                                        (String) map.get("docdate")));
                            } catch (Exception e) {
                                throw new ApplicationException(
                                        "生成凭证出错!formid=[" + map.get("formid") + "],原因:" + getErrorMsg(e));
                            } finally {
                                SpObserver.setDBtoInstance();
                            }
                            map.put(key,"dbo.getPeriodid("+map.get("formid")+","+GridUtils.prossSqlParm((String) map.get("companyid"))+","+GridUtils.prossSqlParm((String) map.get("docdate"))+")");
//                            try {
//                                int fromid = Integer.parseInt((String) map.get("formid"));
//                                SpObserver.setDBtoInstance("_" + dbid);
//                                map.put(key, gridService.getPeriodID(fromid, (String) map.get("companyid"),
//                                        (String) map.get("docdate")));
//                            } catch (Exception e) {
//                                throw new ApplicationException(
//                                        "生成凭证出错!formid=[" + map.get("formid") + "],原因:" + getErrorMsg(e));
//                            } finally {
//                                SpObserver.setDBtoInstance();
//                            }
                        }
                        keyList.append("[").append(key);
                        parserType(map, value, key, tableMetaDatas);
@@ -3691,13 +3668,14 @@
                         */
                        if ("periodid".equalsIgnoreCase((String) k)) {
                            try {
                                SpObserver.setDBtoInstance("_" + dbid);
                                up.put((String) k, gridService.getPeriodID(Integer.parseInt(up.get("formid")),
                                        up.get("companyid"), up.get("docdate")));
                            } finally {
                                SpObserver.setDBtoInstance();
                            }
                            up.put((String) k,"dbo.getPeriodid("+up.get("formid")+","+GridUtils.prossSqlParm( up.get("companyid"))+","+GridUtils.prossSqlParm( up.get("docdate"))+")");
//                            try {
//                                SpObserver.setDBtoInstance("_" + dbid);
//                                up.put((String) k, gridService.getPeriodID(Integer.parseInt(up.get("formid")),
//                                        up.get("companyid"), up.get("docdate")));
//                            } finally {
//                                SpObserver.setDBtoInstance();
//                            }
                        }
                    } else {// 淘宝接口where条件
src/com/yc/action/grid/GridUtils.java
@@ -181,6 +181,7 @@
        env.put(SessionKey.ISMODIFYPRICEWHENSALESORDER,  session.getAttribute(SessionKey.ISMODIFYPRICEWHENSALESORDER)+"");
        env.put(SessionKey.ISMODIFYPRICEWHENPURCHASEORDER,  session.getAttribute(SessionKey.ISMODIFYPRICEWHENPURCHASEORDER)+"");
        env.put(SessionKey.SWITCHTOPAGEWHENLOGONAPP,  session.getAttribute(SessionKey.SWITCHTOPAGEWHENLOGONAPP)+"");
        env.put(SessionKey.SELECTNEXTDOCUMENTWHENAPPROVED,  session.getAttribute(SessionKey.SELECTNEXTDOCUMENTWHENAPPROVED)+"");
        env.put(SessionKey.USERTYPE,  session.getAttribute(SessionKey.USERTYPE)+"");
        env.put(SessionKey.DEPARTMENT,  session.getAttribute(SessionKey.DEPARTMENT)+"");
        return env;
src/com/yc/action/login/LoginAction.java
@@ -519,6 +519,7 @@
                map.put("isModifyPriceWhenSalesOrder", session.getAttribute(SessionKey.ISMODIFYPRICEWHENSALESORDER));
                map.put("isModifyPriceWhenPurchaseOrder", session.getAttribute(SessionKey.ISMODIFYPRICEWHENPURCHASEORDER));
                map.put("switchToPageWhenLogonApp", session.getAttribute(SessionKey.SWITCHTOPAGEWHENLOGONAPP));
                map.put("selectNextDocumentWhenApproved", session.getAttribute(SessionKey.SELECTNEXTDOCUMENTWHENAPPROVED));
                map.put("perssion", session.getAttribute(SessionKey.PERSSION));
                this.printJson(response, GridUtils.toJson(map));
@@ -878,6 +879,7 @@
        map.put(SessionKey.ISMODIFYPRICEWHENSALESORDER, session.getAttribute(SessionKey.ISMODIFYPRICEWHENSALESORDER));
        map.put(SessionKey.ISMODIFYPRICEWHENPURCHASEORDER, session.getAttribute(SessionKey.ISMODIFYPRICEWHENPURCHASEORDER));
        map.put(SessionKey.SWITCHTOPAGEWHENLOGONAPP, session.getAttribute(SessionKey.SWITCHTOPAGEWHENLOGONAPP));
        map.put(SessionKey.SELECTNEXTDOCUMENTWHENAPPROVED, session.getAttribute(SessionKey.SELECTNEXTDOCUMENTWHENAPPROVED));
        map.put("day", DateUtil.getDay(0));
        map.put("month", DateUtil.getMonth(0));
        map.put("year", DateUtil.getYear(0));
@@ -1047,6 +1049,7 @@
        session.setAttribute(SessionKey.ISMODIFYPRICEWHENSALESORDER, userAccount.getIsModifyPriceWhenSalesOrder());
        session.setAttribute(SessionKey.ISMODIFYPRICEWHENPURCHASEORDER, userAccount.getIsModifyPriceWhenPurchaseOrder());
        session.setAttribute(SessionKey.SWITCHTOPAGEWHENLOGONAPP, userAccount.getSwitchToPageWhenLogonApp());
        session.setAttribute(SessionKey.SELECTNEXTDOCUMENTWHENAPPROVED, userAccount.getSelectNextDocumentWhenApproved());
        session.setAttribute(SessionKey.USERTYPE, userAccount.getUserType());
        session.setAttribute(SessionKey.PAGE_PATH,
src/com/yc/app/v2/controller/APPController.java
@@ -199,6 +199,43 @@
        }
    }
    /**
     * 更新单据审核跳转参数设置
     * SelectNextDocumentWhenApproved  : 0 表示不启用,1.表示按单据到达时间跳转 , 2.按功能类型及到达时间跳转
     *
     */
    @RequestMapping(value = "/updateApprovedParameter.do", method = RequestMethod.GET)
    @CrossOrigin
    public Object updateApprovedParameter(Integer index,
                                     HttpServletRequest request) {
        if(index==null){
            throw new ApplicationException("参数不能为空");
        }
        CallBackMessage callBackMessage=new CallBackMessage();
        try {
            SpObserver.setDBtoInstance("_" + request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
            String userCode= (String) request.getSession().getAttribute(SessionKey.USERCODE);
            BaseService baseService = (BaseService) FactoryBean.getBean("BaseService");
            baseService.getSimpleJdbcTemplate().update("set nocount  on \n" +
                    " declare @SelectNextDocumentWhenApproved int=?,@userCode varchar(50)=?" +
                    " update _sysUserConfig set SelectNextDocumentWhenApproved=@SelectNextDocumentWhenApproved where UserCode=@userCode\n" +
                    " if @@rowcount=0 begin \n" +
                    "  insert into _sysUserConfig(SelectNextDocumentWhenApproved,UserCode) values (@SelectNextDocumentWhenApproved,@userCode) \n" +
                    " end \n",index,userCode);
            callBackMessage.sendSuccessMessage(ResponseMessage.SUCCESS);
            return callBackMessage.toJSONObject();
        } catch (EmptyResultDataAccessException ex){
            callBackMessage.sendSuccessMessage(ResponseMessage.SUCCESS);
            return callBackMessage.toJSONObject();
        }catch (Exception e) {
            e.printStackTrace();
            callBackMessage.sendErrorMessage(e.getCause()!=null?e.getCause().getMessage() :e.getMessage());
            return callBackMessage.toJSONObject();
        } finally {
            SpObserver.setDBtoInstance();
        }
    }
    /**
     * 取最近浏览记录
     */
    @RequestMapping(value = "/getHistoryList.do", method = RequestMethod.POST)
src/com/yc/entity/UserAccountEntity.java
@@ -79,6 +79,15 @@
    private int isModifyPriceWhenSalesOrder;//APP销售订单允许改价格
    private int isModifyPriceWhenPurchaseOrder;//APP采购订单允许改价格
    private  String switchToPageWhenLogonApp;
    private  Integer selectNextDocumentWhenApproved;
    public Integer getSelectNextDocumentWhenApproved() {
        return selectNextDocumentWhenApproved;
    }
    public void setSelectNextDocumentWhenApproved(Integer selectNextDocumentWhenApproved) {
        this.selectNextDocumentWhenApproved = selectNextDocumentWhenApproved;
    }
    public String getSwitchToPageWhenLogonApp() {
        return switchToPageWhenLogonApp;
src/com/yc/service/grid/GridServiceImpl.java
@@ -621,6 +621,10 @@
            }
            // -------------
        }
        if(request.getAttribute("isTran")!=null&&grid.isDoccode()){
            //表示是确认操作
            sql.append(" \nupdate " + parameterObject.getTableName() + " set postCode='" +request.getSession().getAttribute(SessionKey.USERCODE)+"',postname='" + request.getSession().getAttribute(SessionKey.USERNAME) + "' where doccode=@newDoccode" + cont);
        }
        info.setSql(sql.toString());
        return info;
    }
src/com/yc/service/impl/DBHelper.java
@@ -27,7 +27,6 @@
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -1062,6 +1061,8 @@
                getAddYin(getSessionStr(SessionKey.ISMODIFYPRICEWHENPURCHASEORDER, panString, sesBoo, session), add));
        parm.put(SessionKey.SWITCHTOPAGEWHENLOGONAPP,
                getAddYin(getSessionStr(SessionKey.SWITCHTOPAGEWHENLOGONAPP, panString, sesBoo, session), add));
        parm.put(SessionKey.SELECTNEXTDOCUMENTWHENAPPROVED,
                getAddYin(getSessionStr(SessionKey.SELECTNEXTDOCUMENTWHENAPPROVED, panString, sesBoo, session), add));
        parm.put(SessionKey.USERTYPE,
                getAddYin(getSessionStr(SessionKey.USERTYPE, panString, sesBoo, session), add));
        parm.put(SessionKey.DEFAULT_STCODE,
src/com/yc/service/user/UserAccountServiceImpl.java
@@ -302,7 +302,7 @@
            + " DefaultAcctCode,LogonType,IsEnableLoadCollection,WxDeptID,Tel, \n"
            + " Gender,EMail, \n"
            + " LangId,Currency,WxCcCode,ProfileIds, \n"
            + " AccessIds,OpenId,IsStopSystem , activeApp,DefaultBrand,cccodepermission,isModifyPriceWhenScanQrCode,UserCodePermission,isModifyPriceWhenSalesOrder,isModifyPriceWhenPurchaseOrder,switchToPageWhenLogonApp,\n"
            + " AccessIds,OpenId,IsStopSystem , activeApp,DefaultBrand,cccodepermission,isModifyPriceWhenScanQrCode,UserCodePermission,isModifyPriceWhenSalesOrder,isModifyPriceWhenPurchaseOrder,switchToPageWhenLogonApp,selectNextDocumentWhenApproved,\n"
            + " case when ISNULL(inActive,0) = 1 then '当前用户【'+ISNULL(UserName,'') + '】已停用,请与管理员联系!' "
                +"    else case when isnull(CalPwdExpired,0) > 0 then '您的密码已过期【' "
                +"    + CAST(ISNULL(CalPwdExpired,0) as varchar)+'】天' "
@@ -546,6 +546,7 @@
        userAccountEntity.setIsModifyPriceWhenSalesOrder(map.get("isModifyPriceWhenSalesOrder") == null?0:(Integer)map.get("isModifyPriceWhenSalesOrder"));
        userAccountEntity.setIsModifyPriceWhenPurchaseOrder(map.get("isModifyPriceWhenPurchaseOrder") == null?0:(Integer)map.get("isModifyPriceWhenPurchaseOrder"));
        userAccountEntity.setSwitchToPageWhenLogonApp(map.get("switchToPageWhenLogonApp")==null?"HomePage":GridUtils.prossRowSetDataType_String(map,"switchToPageWhenLogonApp"));
        userAccountEntity.setSelectNextDocumentWhenApproved(map.get("selectNextDocumentWhenApproved")==null?0:GridUtils.prossRowSetDataType_Int(map,"selectNextDocumentWhenApproved"));
        userAccountEntity.setLogonType(map.get("LogonType") == null?0:(Integer)map.get("LogonType"));
        userAccountEntity.setEnableLoadCollection(map.get("IsEnableLoadCollection") != null&&map.get("IsEnableLoadCollection").equals(1)?true:false);
        userAccountEntity.setWxDeptID(map.get("WxDeptID") == null?0:(Integer)map.get("WxDeptID"));
src/com/yc/userCenter/entity/JurisdictionEntiy.java
@@ -17,7 +17,15 @@
    private int isModifyPriceWhenSalesOrder=0;//APP销售订单允许改价格
    private int isModifyPriceWhenPurchaseOrder=0;//APP采购订单允许改价格
    private String switchToPageWhenLogonApp;
    private  Integer selectNextDocumentWhenApproved;
    public Integer getSelectNextDocumentWhenApproved() {
        return selectNextDocumentWhenApproved;
    }
    public void setSelectNextDocumentWhenApproved(Integer selectNextDocumentWhenApproved) {
        this.selectNextDocumentWhenApproved = selectNextDocumentWhenApproved;
    }
    public String getSwitchToPageWhenLogonApp() {
        return switchToPageWhenLogonApp;
    }
src/com/yc/userCenter/service/UserCenterImpl.java
@@ -3,7 +3,6 @@
import com.yc.service.BaseService;
import com.yc.userCenter.entity.JurisdictionEntiy;
import com.yc.userCenter.entity.UserEntity;
import org.apache.xmlbeans.impl.xb.xsdschema.Public;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.support.rowset.SqlRowSet;
import org.springframework.stereotype.Service;
@@ -61,7 +60,7 @@
                    + "a.WeiXinCorpUserId,a.WeiXinCorpUserName,a.oauth2openidforweixin,a.oauth2openidforqq,"
                    + "a.openid,d.nickname as qqname,d.AvatarUnid as qqunid,c.nickname as wxname,c.AvatarUnid as wxunid,"
                    + "a.accessids,a.profileids,a.defaultacctcode,a.defaultbrand,a.defaultstcode,a.isstopsystem,a.cccodepermission,a.ismodifypricewhenscanqrcode,"
                    + "a.isreceivemaintenancefeenotification,a.ismodifypricewhensalesorder,a.ismodifypricewhenpurchaseorder,a.switchToPageWhenLogonApp "
                    + "a.isreceivemaintenancefeenotification,a.ismodifypricewhensalesorder,a.ismodifypricewhenpurchaseorder,a.switchToPageWhenLogonApp,a.selectNextDocumentWhenApproved "
                    + "from _sys_LoginUser a left join t110601 b on a.cccode = b.ccCode "
                    + "left join t9666 d on a.oauth2openidforqq = d.OpenId " 
                    + "left join t9665 c on a.oauth2openidforweixin = c.OpenId "
src/com/yc/utils/GTJson.java
@@ -6,843 +6,944 @@
/**
 * Gt-grid返回的json对象
 *
 * @author 邓文峰
 * 2010-2-23
 * **/
public class GTJson implements Serializable{
private String action;
private PageInfo pageInfo;
private String panelAction;//面板动作
private String panelTable;//面板的表名
private String doccode;//面板的单号
private String masterCode;//10类型参数转换
private List<HashMap<String,String>> deletedRecords=new ArrayList<HashMap<String,String>>();
private List<HashMap<String,String>> insertedRecords=new ArrayList<HashMap<String,String>>();
private List<HashMap<String,String>> updatedRecords=new ArrayList<HashMap<String,String>>();
private List<HashMap<String,String>> panelRecords=new ArrayList<HashMap<String,String>>();
private List<HashMap<String,String>> vssRecords=new ArrayList<HashMap<String,String>>();//更新时用全匹配更新
private List<HashMap<String,String>> oARecords=new ArrayList<HashMap<String,String>>();//保存OA审核时把格线数据传回后台
private List<HashMap<String,String>> tranRecords=new ArrayList<HashMap<String,String>>();//确定时提交的数据
private List<HashMap<String,String>> emptyRecords=new ArrayList<HashMap<String,String>>();//空数据
private List<HashMap<String,String>> auditRecords=new ArrayList<HashMap<String,String>>();
 **/
public class GTJson implements Serializable {
    private String action;
    private PageInfo pageInfo;
    private String panelAction;//面板动作
    private String panelTable;//面板的表名
    private String doccode;//面板的单号
    private String masterCode;//10类型参数转换
    private List<HashMap<String, String>> deletedRecords = new ArrayList<HashMap<String, String>>();
    private List<HashMap<String, String>> insertedRecords = new ArrayList<HashMap<String, String>>();
    private List<HashMap<String, String>> updatedRecords = new ArrayList<HashMap<String, String>>();
    private List<HashMap<String, String>> panelRecords = new ArrayList<HashMap<String, String>>();
    private List<HashMap<String, String>> vssRecords = new ArrayList<HashMap<String, String>>();//更新时用全匹配更新
    private List<HashMap<String, String>> oARecords = new ArrayList<HashMap<String, String>>();//保存OA审核时把格线数据传回后台
    private List<HashMap<String, String>> tranRecords = new ArrayList<HashMap<String, String>>();//确定时提交的数据
    private List<HashMap<String, String>> emptyRecords = new ArrayList<HashMap<String, String>>();//空数据
    private List<HashMap<String, String>> auditRecords = new ArrayList<HashMap<String, String>>();
//---------3表结构
private List<HashMap<String,String>> otherDeleteds=new ArrayList<HashMap<String,String>>();
private List<HashMap<String,String>> otherInserteds=new ArrayList<HashMap<String,String>>();
private List<HashMap<String,String>> otherUpdateds=new ArrayList<HashMap<String,String>>();
private List<HashMap<String,String>> otherVss=new ArrayList<HashMap<String,String>>();
private List<HashMap<String,String>> otherOA=new ArrayList<HashMap<String,String>>();
private String otherTable;//三表的表类型
private int otherFormid=0;//三表的功能号
private String otherKey;//关联表关键字
private List<HashMap<String,String>> otherTranRecords=new ArrayList<HashMap<String,String>>();//确定时提交的数据
private List<HashMap<String,String>> muilTranRecords=new ArrayList<HashMap<String,String>>();//多表确定时提交的数据
private String[] fieldsName;//字段显示列表,把它提交到数据库,避免用*号查询,性能较好
private String fields;//字段显示列表,作为淘宝接口的字段列表
//---------多表结构
private List<Panel> panels;//面板数据集合
private List<Grid> grids;//表格数据集合
private String gType;//表示当前页面是哪一个窗体类型,因为499类型是由多个功能号组成,所以需要通过这个来区分
private String formid;//499类型的主功能号
private String fl;//499类型返回参数
private String oa="";//审核,通过,驳回
private boolean cp;//复单标记
private String expr="";//权限控制
private String cudoc="";//自定义单号功能
private String otherColns="";//过滤列
private String colns="";//过滤列
private String token ="";//令牌
private String disableDuplicateSubmitUUID ="";//防止重复提交的唯一标记
private int aFlag=0;
private int isGantt=0;//是否为甘特图
private String[] rowids;//15类型 复单处理前台rowid更新不了的问题,传到这里再作进一步处理
private String btnId = "";
    private int clickTran = 0;//直接点击确认触发
    private int dcFlag = 0;//flag标记数据范围检查已通过
    private String primeKey = "";//主键,用作更新,删除时候做where条件,匹配
    private String otherPrimeKey = "";//15,77类型的第三表主键
    private Map<String, String> refKeyMap = new HashMap<>();//保存多表中子功能号有关联
    private int is497 = 0;//app保存多表中的子功能时是传16,1类型,需要返回rowid,后端需要知道是多表才能返回rowid
    private String userName;
    private int onlinePay = -1;//在线支付
    private int onlineRefund = -1;//在线退款
    private String tableName;
    //---------3表结构
    private List<HashMap<String, String>> otherDeleteds = new ArrayList<HashMap<String, String>>();
    private List<HashMap<String, String>> otherInserteds = new ArrayList<HashMap<String, String>>();
    private List<HashMap<String, String>> otherUpdateds = new ArrayList<HashMap<String, String>>();
    private List<HashMap<String, String>> otherVss = new ArrayList<HashMap<String, String>>();
    private List<HashMap<String, String>> otherOA = new ArrayList<HashMap<String, String>>();
    private String otherTable;//三表的表类型
    private int otherFormid = 0;//三表的功能号
    private String otherKey;//关联表关键字
    private List<HashMap<String, String>> otherTranRecords = new ArrayList<HashMap<String, String>>();//确定时提交的数据
    private List<HashMap<String, String>> muilTranRecords = new ArrayList<HashMap<String, String>>();//多表确定时提交的数据
    private String[] fieldsName;//字段显示列表,把它提交到数据库,避免用*号查询,性能较好
    private String fields;//字段显示列表,作为淘宝接口的字段列表
    //---------多表结构
    private List<Panel> panels;//面板数据集合
    private List<Grid> grids;//表格数据集合
    private String gType;//表示当前页面是哪一个窗体类型,因为499类型是由多个功能号组成,所以需要通过这个来区分
    private String formid;//499类型的主功能号
    private String fl;//499类型返回参数
    private String oa = "";//审核,通过,驳回
    private boolean cp;//复单标记
    private String expr = "";//权限控制
    private String cudoc = "";//自定义单号功能
    private String otherColns = "";//过滤列
    private String colns = "";//过滤列
    private String token = "";//令牌
    private String disableDuplicateSubmitUUID = "";//防止重复提交的唯一标记
    private int aFlag = 0;
    private int isGantt = 0;//是否为甘特图
    private String[] rowids;//15类型 复单处理前台rowid更新不了的问题,传到这里再作进一步处理
    private String btnId = "";
    private int clickTran = 0;//直接点击确认触发
    private int dcFlag = 0;//flag标记数据范围检查已通过
    private String primeKey = "";//主键,用作更新,删除时候做where条件,匹配
    private String otherPrimeKey = "";//15,77类型的第三表主键
    private Map<String, String> refKeyMap = new HashMap<>();//保存多表中子功能号有关联
    private int is497 = 0;//app保存多表中的子功能时是传16,1类型,需要返回rowid,后端需要知道是多表才能返回rowid
    private String userName;
    private int onlinePay = -1;//在线支付
    private int onlineRefund = -1;//在线退款
    private String tableName;
    private String excludeSelectNextDocument="";//需要跳过下一单单据列表
    public String getExcludeSelectNextDocument() {
        return excludeSelectNextDocument;
    }
    public void setExcludeSelectNextDocument(String excludeSelectNextDocument) {
        this.excludeSelectNextDocument = excludeSelectNextDocument;
    }
    public String getTableName() {
        return tableName;
    }
        return tableName;
    }
    public void setTableName(String tableName) {
        this.tableName = tableName;
    }
    public void setTableName(String tableName) {
        this.tableName = tableName;
    }
    public int getOnlinePay() {
        return onlinePay;
    }
    public int getOnlinePay() {
        return onlinePay;
    }
    public void setOnlinePay(int onlinePay) {
        this.onlinePay = onlinePay;
    }
    public void setOnlinePay(int onlinePay) {
        this.onlinePay = onlinePay;
    }
    public int getOnlineRefund() {
        return onlineRefund;
    }
    public int getOnlineRefund() {
        return onlineRefund;
    }
    public void setOnlineRefund(int onlineRefund) {
        this.onlineRefund = onlineRefund;
    }
    public String getUserName() {
        return userName;
    }
    public void setOnlineRefund(int onlineRefund) {
        this.onlineRefund = onlineRefund;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getUserName() {
        return userName;
    }
    public int getIs497() {
        return is497;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public void setIs497(int is497) {
        this.is497 = is497;
    }
    public int getIs497() {
        return is497;
    }
    public Map<String, String> getRefKeyMap() {
        return refKeyMap;
    }
    public void setIs497(int is497) {
        this.is497 = is497;
    }
    public void setRefKeyMap(Map<String, String> refKeyMap) {
        this.refKeyMap = refKeyMap;
    }
    public Map<String, String> getRefKeyMap() {
        return refKeyMap;
    }
    public String getOtherPrimeKey() {
    return otherPrimeKey;
}
public void setOtherPrimeKey(String otherPrimeKey) {
    this.otherPrimeKey = otherPrimeKey;
}
public String getPrimeKey() {
    return primeKey;
}
public void setPrimeKey(String primeKey) {
    this.primeKey = primeKey;
}
public int getDcFlag() {
    return dcFlag;
}
public void setDcFlag(int dcFlag) {
    this.dcFlag = dcFlag;
}
public int getClickTran() {
    return clickTran;
}
public void setClickTran(int clickTran) {
    this.clickTran = clickTran;
}
public String getBtnId() {
    return btnId;
}
public void setBtnId(String btnId) {
    this.btnId = btnId;
}
public int getIsGantt() {
    return isGantt;
}
public void setIsGantt(int isGantt) {
    this.isGantt = isGantt;
}
//------treegrid增加需要处理的内容
private HashMap<String,String> IO;
private List<HashMap<String,String>> Changes;//数据保存处理
private List<HashMap<String,String>> otherChanges;//数据保存处理
//---把treegrid的格式转化为以前gtgrid的格式,兼容以前的代码
private String funlink="";//功能链接
private List<Map<String,Map<String,String>>> taobao=new ArrayList<Map<String,Map<String,String>>>();//taobao接口集合,以接口名称为key,应用级参数集合为值
private int tbtotal=0;//淘宝接口返回数据总数量
public int getTbtotal() {
    return tbtotal;
}
public void setTbtotal(int tbtotal) {
    this.tbtotal = tbtotal;
}
Map<String, String>  env;
    public void setRefKeyMap(Map<String, String> refKeyMap) {
        this.refKeyMap = refKeyMap;
    }
private String keyID;//接口主从表ID,用来处理当重复下载,需要根据这个ID来判断当前ERP是否已存在,以决定是用update,还是新增
private static String picMatch="^\\|/smallpic.*?"+JsonUtil.IMGRANG.replaceAll("\\|", "\\\\|")+"+?"; //去掉格式图片,因为这个不是真正的图片不需要保存到数据库
private static String picMatch_uuid="^\\|/getImage.*?"+JsonUtil.IMGRANG.replaceAll("\\|", "\\\\|")+"+?"; //去掉格式图片,因为这个不是真正的图片不需要保存到数据库
public List<HashMap<String, String>> getAuditRecords() {
    return auditRecords;
}
public void setAuditRecords(List<HashMap<String, String>> auditRecords) {
    this.auditRecords = auditRecords;
}
public String[] getRowids() {
    return rowids;
}
public void setRowids(String[] rowids) {
    this.rowids = rowids;
}
public String getKeyID() {
    return keyID;
}
public void setKeyID(String keyID) {
    this.keyID = keyID;
}
public Map<String, String> getEnv() {
    return env;
}
public void setEnv(Map<String, String> env) {
    this.env = env;
}
public List<Map<String, Map<String, String>>> getTaobao() {
    return taobao;
}
public void setTaobao(List<Map<String, Map<String, String>>> taobao) {
    this.taobao = taobao;
}
public String getFields() {
    return fields;
}
public void setFields(String fields) {
    this.fields = fields;
}
public String getFunlink() {
    return funlink;
}
public void setFunlink(String funlink) {
    this.funlink = funlink;
}
    public String getOtherPrimeKey() {
        return otherPrimeKey;
    }
    public void setOtherPrimeKey(String otherPrimeKey) {
        this.otherPrimeKey = otherPrimeKey;
    }
    public String getPrimeKey() {
        return primeKey;
    }
    public void setPrimeKey(String primeKey) {
        this.primeKey = primeKey;
    }
    public int getDcFlag() {
        return dcFlag;
    }
    public void setDcFlag(int dcFlag) {
        this.dcFlag = dcFlag;
    }
    public int getClickTran() {
        return clickTran;
    }
    public void setClickTran(int clickTran) {
        this.clickTran = clickTran;
    }
    public String getBtnId() {
        return btnId;
    }
    public void setBtnId(String btnId) {
        this.btnId = btnId;
    }
    public int getIsGantt() {
        return isGantt;
    }
    public void setIsGantt(int isGantt) {
        this.isGantt = isGantt;
    }
    //------treegrid增加需要处理的内容
    private HashMap<String, String> IO;
    private List<HashMap<String, String>> Changes;//数据保存处理
    private List<HashMap<String, String>> otherChanges;//数据保存处理
    //---把treegrid的格式转化为以前gtgrid的格式,兼容以前的代码
    private String funlink = "";//功能链接
    private List<Map<String, Map<String, String>>> taobao = new ArrayList<Map<String, Map<String, String>>>();//taobao接口集合,以接口名称为key,应用级参数集合为值
    private int tbtotal = 0;//淘宝接口返回数据总数量
    public int getTbtotal() {
        return tbtotal;
    }
    public void setTbtotal(int tbtotal) {
        this.tbtotal = tbtotal;
    }
    Map<String, String> env;
    private String keyID;//接口主从表ID,用来处理当重复下载,需要根据这个ID来判断当前ERP是否已存在,以决定是用update,还是新增
    private static String picMatch = "^\\|/smallpic.*?" + JsonUtil.IMGRANG.replaceAll("\\|", "\\\\|") + "+?"; //去掉格式图片,因为这个不是真正的图片不需要保存到数据库
    private static String picMatch_uuid = "^\\|/getImage.*?" + JsonUtil.IMGRANG.replaceAll("\\|", "\\\\|") + "+?"; //去掉格式图片,因为这个不是真正的图片不需要保存到数据库
    public List<HashMap<String, String>> getAuditRecords() {
        return auditRecords;
    }
    public void setAuditRecords(List<HashMap<String, String>> auditRecords) {
        this.auditRecords = auditRecords;
    }
    public String[] getRowids() {
        return rowids;
    }
    public void setRowids(String[] rowids) {
        this.rowids = rowids;
    }
    public String getKeyID() {
        return keyID;
    }
    public void setKeyID(String keyID) {
        this.keyID = keyID;
    }
    public Map<String, String> getEnv() {
        return env;
    }
    public void setEnv(Map<String, String> env) {
        this.env = env;
    }
    public List<Map<String, Map<String, String>>> getTaobao() {
        return taobao;
    }
    public void setTaobao(List<Map<String, Map<String, String>>> taobao) {
        this.taobao = taobao;
    }
    public String getFields() {
        return fields;
    }
    public void setFields(String fields) {
        this.fields = fields;
    }
    public String getFunlink() {
        return funlink;
    }
    public void setFunlink(String funlink) {
        this.funlink = funlink;
    }
public String getMasterCode() {
    return masterCode;
}
public void setMasterCode(String masterCode) {
    this.masterCode = masterCode;
}
    public String getMasterCode() {
        return masterCode;
    }
    public List<HashMap<String, String>> getOtherOA() {
        return otherOA;
    }
    public void setMasterCode(String masterCode) {
        this.masterCode = masterCode;
    }
    public void setOtherOA(List<HashMap<String, String>> otherOA) {
        this.otherOA = otherOA;
    }
    public String getDisableDuplicateSubmitUUID() {
        return disableDuplicateSubmitUUID;
    }
    public List<HashMap<String, String>> getOtherOA() {
        return otherOA;
    }
    public void setDisableDuplicateSubmitUUID(String disableDuplicateSubmitUUID) {
        this.disableDuplicateSubmitUUID = disableDuplicateSubmitUUID;
    }
    /**
 * 装配只有格线窗体类型数据作为集合传过去
 * @param action-表示当前操作是保存还是确定(save,tran)
 * @param panelAction-指明面板数据当前是新增还是修改(add,update)--必填
 * @param panelTable-指明面板当前所属的功能号和类型(格式:"formid;type")--必填
 * @param doccode-单号(修改操作需要指定)
 * @param masterCode-关键主字段,作为查询替换的字段
 * @param insertedRecords--表示格线新增数据
    public void setOtherOA(List<HashMap<String, String>> otherOA) {
        this.otherOA = otherOA;
    }
 * @param updatedRecords--表示格线修改数据
 * @param panelRecords--表示面板数据(新增或修改)
 *
 *
 * **/
public void create0(String action, String panelAction,String doccode,
    List<HashMap<String, String>> insertedRecords,
    List<HashMap<String, String>> updatedRecords,
    String gType,
    String formid
    ) {
    this.action = action;
    this.panelAction = panelAction;
    this.panelTable = formid+";"+gType.split("\\|")[0];
    this.doccode = doccode;
    this.insertedRecords = insertedRecords;
    this.updatedRecords = updatedRecords;
    this.gType = gType;
    this.formid = formid;
}
/**
 * 装配只有面板窗体类型数据作为集合传过去
 * @param action-表示当前操作是保存还是确定(save,tran)
 * @param panelAction-指明面板数据当前是新增还是修改(add,update)--必填
 * @param panelTable-指明面板当前所属的功能号和类型(格式:"formid;type")--必填
 * @param doccode-单号(修改操作需要指定)
 * @param masterCode-关键主字段,作为查询替换的字段
 * @param insertedRecords--表示格线新增数据
 * @param updatedRecords--表示格线修改数据
 * @param panelRecords--表示面板数据(新增或修改)
 *
 *
 * **/
public void create1(String action, String panelAction,String doccode,
    List<HashMap<String, String>> panelRecords,
    String gType,
    String formid
    ) {
    this.action = action;
    this.panelAction = panelAction;
    this.panelTable = formid+";"+gType.split("\\|")[0];
    this.doccode = doccode;
    this.panelRecords = panelRecords;
    this.gType = gType;
    this.formid = formid;
}
/**
 * 装配双表(面板和格线)窗体类型数据作为集合传过去
 * @param action-表示当前操作是保存还是确定(save,tran)
 * @param panelAction-指明面板数据当前是新增还是修改(add,update)--必填
 * @param panelTable-指明面板当前所属的功能号和类型(格式:"formid;type")--必填
 * @param doccode-单号(修改操作需要指定)
 * @param masterCode-关键主字段,作为查询替换的字段
 * @param insertedRecords--表示格线新增数据
 * @param updatedRecords--表示格线修改数据
 * @param panelRecords--表示面板数据(新增或修改)
 *
 *
 * **/
public void create2(String action, String panelAction,String doccode,
    List<HashMap<String, String>> insertedRecords,
    List<HashMap<String, String>> updatedRecords,
    List<HashMap<String, String>> panelRecords,
    String gType,
    String formid
    ) {
    this.action = action;
    this.panelAction = panelAction;
    this.panelTable = formid+";"+gType.split("\\|")[0];
    this.panelRecords = panelRecords;
    this.insertedRecords = insertedRecords;
    this.doccode = doccode;
    this.updatedRecords = updatedRecords;
    this.gType = gType;
    this.formid = formid;
}
    public String getDisableDuplicateSubmitUUID() {
        return disableDuplicateSubmitUUID;
    }
/**
 * 淘宝调用
 * @param action
 * @param panelAction
 * @param doccode
 * @param insertedRecords
 * @param updatedRecords
 * @param panelRecords
 * @param gType
 * @param formid
 * @param conts
 */
public void create2taobao(String action, String panelAction,String doccode,
        List<HashMap<String, String>> insertedRecords,
        List<HashMap<String, String>> updatedRecords,
        List<HashMap<String, String>> panelRecords,
        String gType,
        String formid,
        String conts,
        int total
        ) {
    public void setDisableDuplicateSubmitUUID(String disableDuplicateSubmitUUID) {
        this.disableDuplicateSubmitUUID = disableDuplicateSubmitUUID;
    }
    /**
     * 装配只有格线窗体类型数据作为集合传过去
     *
     * @param action-表示当前操作是保存还是确定(save,tran)
     * @param panelAction-指明面板数据当前是新增还是修改(add,update)--必填
     * @param panelTable-指明面板当前所属的功能号和类型(格式:"formid;type")--必填
     * @param doccode-单号(修改操作需要指定)
     * @param masterCode-关键主字段,作为查询替换的字段
     * @param insertedRecords--表示格线新增数据
     * @param updatedRecords--表示格线修改数据
     * @param panelRecords--表示面板数据(新增或修改)
     **/
    public void create0(String action, String panelAction, String doccode,
                        List<HashMap<String, String>> insertedRecords,
                        List<HashMap<String, String>> updatedRecords,
                        String gType,
                        String formid
    ) {
        this.action = action;
        this.panelAction = panelAction;
        this.panelTable = formid + ";" + gType.split("\\|")[0];
        this.doccode = doccode;
        this.insertedRecords = insertedRecords;
        this.updatedRecords = updatedRecords;
        this.gType = gType;
        this.formid = formid;
    }
    /**
     * 装配只有面板窗体类型数据作为集合传过去
     *
     * @param action-表示当前操作是保存还是确定(save,tran)
     * @param panelAction-指明面板数据当前是新增还是修改(add,update)--必填
     * @param panelTable-指明面板当前所属的功能号和类型(格式:"formid;type")--必填
     * @param doccode-单号(修改操作需要指定)
     * @param masterCode-关键主字段,作为查询替换的字段
     * @param insertedRecords--表示格线新增数据
     * @param updatedRecords--表示格线修改数据
     * @param panelRecords--表示面板数据(新增或修改)
     **/
    public void create1(String action, String panelAction, String doccode,
                        List<HashMap<String, String>> panelRecords,
                        String gType,
                        String formid
    ) {
        this.action = action;
        this.panelAction = panelAction;
        this.panelTable = formid + ";" + gType.split("\\|")[0];
        this.doccode = doccode;
        this.panelRecords = panelRecords;
        this.gType = gType;
        this.formid = formid;
    }
    /**
     * 装配双表(面板和格线)窗体类型数据作为集合传过去
     *
     * @param action-表示当前操作是保存还是确定(save,tran)
     * @param panelAction-指明面板数据当前是新增还是修改(add,update)--必填
     * @param panelTable-指明面板当前所属的功能号和类型(格式:"formid;type")--必填
     * @param doccode-单号(修改操作需要指定)
     * @param masterCode-关键主字段,作为查询替换的字段
     * @param insertedRecords--表示格线新增数据
     * @param updatedRecords--表示格线修改数据
     * @param panelRecords--表示面板数据(新增或修改)
     **/
    public void create2(String action, String panelAction, String doccode,
                        List<HashMap<String, String>> insertedRecords,
                        List<HashMap<String, String>> updatedRecords,
                        List<HashMap<String, String>> panelRecords,
                        String gType,
                        String formid
    ) {
        this.action = action;
        this.panelAction = panelAction;
        this.panelTable = formid + ";" + gType.split("\\|")[0];
        this.panelRecords = panelRecords;
        this.insertedRecords = insertedRecords;
        this.doccode = doccode;
        this.updatedRecords = updatedRecords;
        this.gType = gType;
        this.formid = formid;
    }
    /**
     * 淘宝调用
     *
     * @param action
     * @param panelAction
     * @param doccode
     * @param insertedRecords
     * @param updatedRecords
     * @param panelRecords
     * @param gType
     * @param formid
     * @param conts
     */
    public void create2taobao(String action, String panelAction, String doccode,
                              List<HashMap<String, String>> insertedRecords,
                              List<HashMap<String, String>> updatedRecords,
                              List<HashMap<String, String>> panelRecords,
                              String gType,
                              String formid,
                              String conts,
                              int total
    ) {
//        this.action = action;
//        this.panelAction = panelAction;
//        this.panelTable = formid+";"+gType.split("\\|")[0];
        this.panelRecords = panelRecords;
        this.insertedRecords = insertedRecords;
        this.panelRecords = panelRecords;
        this.insertedRecords = insertedRecords;
//        this.doccode = doccode;
        this.updatedRecords = updatedRecords;
        this.colns=conts;
        this.tbtotal=total;
        this.updatedRecords = updatedRecords;
        this.colns = conts;
        this.tbtotal = total;
//        this.gType = gType;
//        this.formid = formid;
    }
    }
/**
 * 装配3表类型数据作为集合传过去
 * @param action-表示当前操作是保存还是确定(save,tran)
 * @param panelAction-指明面板数据当前是新增还是修改(add,update)--必填
 * @param panelTable-指明面板当前所属的功能号和类型(格式:"formid;type")--必填
 * @param doccode-单号(修改操作需要指定)
 * @param masterCode-关键主字段,作为查询替换的字段
 * @param insertedRecords--表示格线新增数据
 * @param updatedRecords--表示格线修改数据
 * @param panelRecords--表示面板数据(新增或修改)
 *
 *
 * **/
public void create3(
    //--常规基础数据
    String action, String panelAction, String doccode,
    List<HashMap<String, String>> insertedRecords,
    List<HashMap<String, String>> updatedRecords,
    List<HashMap<String, String>> panelRecords,
    //如果当前是3表结构  则需要把下面的的传进来,否则为null
    List<HashMap<String, String>> otherInserteds,
    List<HashMap<String, String>> otherUpdateds,
    String otherTable, int otherFormid, String otherKey,
    String otherColns,
    //--3表 end
    String gType,
    String formid
    ) {
    this.action = action;
    this.panelAction = panelAction;
    this.panelTable = formid+";"+gType.split("\\|")[0];
    this.doccode = doccode;
    this.insertedRecords = insertedRecords;
    this.updatedRecords = updatedRecords;
    this.panelRecords = panelRecords;
    this.otherInserteds = otherInserteds;
    this.otherUpdateds = otherUpdateds;
    this.otherTable = otherTable;
    this.otherFormid = otherFormid;
    this.otherKey = otherKey;
    this.gType = gType;
    this.formid = formid;
}
/**
 * 装配多表窗体类型数据作为集合传过去
 * @param action-表示当前操作是保存还是确定(save,tran)
 * @param panelAction-指明面板数据当前是新增还是修改(add,update)--必填
 * @param panelTable-指明面板当前所属的功能号和类型(格式:"formid;type")--必填
 * @param doccode-单号(修改操作需要指定)
 * @param masterCode-关键主字段,作为查询替换的字段
 * @param insertedRecords--表示格线新增数据
 * @param updatedRecords--表示格线修改数据
 * @param panelRecords--表示面板数据(新增或修改)
 *
 *
 * **/
public void create4(
    //--常规基础数据
    String action, String panelAction, String panelTable, String doccode,
    List<Panel> panels,
    List<Grid> grids,
    String gType,
    String formid
    ) {
    this.action = action;
    this.panelAction = panelAction;
    this.panelTable = panelTable;
    this.doccode = doccode;
    this.panels = panels;
    this.grids = grids;
    this.gType = gType;
    this.formid = formid;
}
public void process(){
       String delrowid="";//保存二表是新增且又删除的rowid,以便给第三表做关联删除用
    if(Changes!=null&&Changes.size()>0){
        int index=0;
        for(HashMap<String,String> map:Changes){
            if(isGantt==0) map.remove("id");
            if(
                ("1".equalsIgnoreCase(map.get("Deleted"))||"true".equalsIgnoreCase(map.get("Deleted")))
                &&(!"1".equalsIgnoreCase(map.get("Added"))&&!"true".equalsIgnoreCase(map.get("Added")))//当存在新增行又马上删除的情况,在这里需要做个判断
                ){
                if(map.containsKey("G")) map.remove("G");//去掉甘特图的信息
                deletedRecords.add(map);
                continue;
            }
            if("1".equalsIgnoreCase(map.get("Added"))&&"1".equalsIgnoreCase(map.get("Deleted"))){
                //新增且又马上删除的情况
                if("15".equalsIgnoreCase(this.getgType())){
                delrowid+=","+map.get("rowid");
                }
            }
            if(
                ("1".equalsIgnoreCase(map.get("Added"))||"true".equalsIgnoreCase(map.get("Added")))
                &&(!"1".equalsIgnoreCase(map.get("Deleted"))&&!"true".equalsIgnoreCase(map.get("Deleted")))
                ){
                if(this.getCp()&&"15".equalsIgnoreCase(this.getgType())){//15类型且是复单情况处理rowid
                    if(rowids!=null) {
                        map.put("rowid", rowids[index]);
                    }
                }
                insertedRecords.add(map);
                index++;
                continue;
            }
            if("1".equalsIgnoreCase(map.get("Changed"))||"true".equalsIgnoreCase(map.get("Changed"))){
                getChanged(map,updatedRecords,vssRecords);
                continue;
            }
            if("1".equalsIgnoreCase(map.get("OAChanged"))||"true".equalsIgnoreCase(map.get("OAChanged"))){
                oARecords.add(map);
                continue;
            }
            if("1".equalsIgnoreCase(map.get("_YCAUDIT_"))||"true".equalsIgnoreCase(map.get("_YCAUDIT_"))){//处理审计数据
                auditRecords.add(map);
                continue;
            }
        }
    }
    if(otherChanges!=null&&otherChanges.size()>0){//三表结构
        for(HashMap<String,String> map:otherChanges){
            map.remove("id");
            if(
                //"1".equalsIgnoreCase(map.get("Deleted"))||"true".equalsIgnoreCase(map.get("Deleted"))
                ("1".equalsIgnoreCase(map.get("Deleted"))||"true".equalsIgnoreCase(map.get("Deleted")))
                &&(!"1".equalsIgnoreCase(map.get("Added"))&&!"true".equalsIgnoreCase(map.get("Added")))
                ){
                otherDeleteds.add(map);
                continue;
            }
            if(
                //"1".equalsIgnoreCase(map.get("Added"))||"true".equalsIgnoreCase(map.get("Added"))
                ("1".equalsIgnoreCase(map.get("Added"))||"true".equalsIgnoreCase(map.get("Added")))
                &&(!"1".equalsIgnoreCase(map.get("Deleted"))&&!"true".equalsIgnoreCase(map.get("Deleted")))
                ){
                  if(delrowid.contains(","+map.get("rowid"))){
                          if(this.cp) continue;//复单时且当前行关联的第二表是删除,且这一行也就不需要增加写到后台
                      otherDeleteds.add(map);
                  }else
                      otherInserteds.add(map);
                continue;
            }
            if("1".equalsIgnoreCase(map.get("Changed"))||"true".equalsIgnoreCase(map.get("Changed"))){
                getChanged(map,otherUpdateds,otherVss);
                continue;
            }
            if("1".equalsIgnoreCase(map.get("OAChanged"))||"true".equalsIgnoreCase(map.get("OAChanged"))){
                otherOA.add(map);
                continue;
            }
            if("1".equalsIgnoreCase(map.get("_YCAUDIT_"))||"true".equalsIgnoreCase(map.get("_YCAUDIT_"))){//处理审计数据
                auditRecords.add(map);
                continue;
            }
        }
    }
}
public void getChanged(HashMap<String, String> map,List<HashMap<String,String>> upp,List<HashMap<String,String>> vss) {
    HashMap<String,String> up=new HashMap<String,String>();
    HashMap<String,String> vs=new HashMap<String,String>();
    map.remove("Changed");
    Iterator<Map.Entry<String,String>> iter = map.entrySet().iterator();
    String flg="";
    int ind=0;
    boolean img=false;
    while (iter.hasNext()) {
        Map.Entry<String,String> entry =iter.next();
        img=false;
        String key = entry.getKey();
        String value = entry.getValue();
        if(key.lastIndexOf("Orig")<0&&!map.containsKey(key+"Orig")){
        img=this.checkImg(value);
        if(img) continue;
        }else{
            flg=key;
    /**
     * 装配3表类型数据作为集合传过去
     *
     * @param action-表示当前操作是保存还是确定(save,tran)
     * @param panelAction-指明面板数据当前是新增还是修改(add,update)--必填
     * @param panelTable-指明面板当前所属的功能号和类型(格式:"formid;type")--必填
     * @param doccode-单号(修改操作需要指定)
     * @param masterCode-关键主字段,作为查询替换的字段
     * @param insertedRecords--表示格线新增数据
     * @param updatedRecords--表示格线修改数据
     * @param panelRecords--表示面板数据(新增或修改)
     **/
    public void create3(
            //--常规基础数据
            String action, String panelAction, String doccode,
            List<HashMap<String, String>> insertedRecords,
            List<HashMap<String, String>> updatedRecords,
            List<HashMap<String, String>> panelRecords,
            //如果当前是3表结构  则需要把下面的的传进来,否则为null
            List<HashMap<String, String>> otherInserteds,
            List<HashMap<String, String>> otherUpdateds,
            String otherTable, int otherFormid, String otherKey,
            String otherColns,
            //--3表 end
            String gType,
            String formid
    ) {
        this.action = action;
        this.panelAction = panelAction;
        this.panelTable = formid + ";" + gType.split("\\|")[0];
        this.doccode = doccode;
        this.insertedRecords = insertedRecords;
        this.updatedRecords = updatedRecords;
        this.panelRecords = panelRecords;
        this.otherInserteds = otherInserteds;
        this.otherUpdateds = otherUpdateds;
        this.otherTable = otherTable;
        this.otherFormid = otherFormid;
        this.otherKey = otherKey;
        this.gType = gType;
        this.formid = formid;
    }
    /**
     * 装配多表窗体类型数据作为集合传过去
     *
     * @param action-表示当前操作是保存还是确定(save,tran)
     * @param panelAction-指明面板数据当前是新增还是修改(add,update)--必填
     * @param panelTable-指明面板当前所属的功能号和类型(格式:"formid;type")--必填
     * @param doccode-单号(修改操作需要指定)
     * @param masterCode-关键主字段,作为查询替换的字段
     * @param insertedRecords--表示格线新增数据
     * @param updatedRecords--表示格线修改数据
     * @param panelRecords--表示面板数据(新增或修改)
     **/
    public void create4(
            //--常规基础数据
            String action, String panelAction, String panelTable, String doccode,
            List<Panel> panels,
            List<Grid> grids,
            String gType,
            String formid
    ) {
        this.action = action;
        this.panelAction = panelAction;
        this.panelTable = panelTable;
        this.doccode = doccode;
        this.panels = panels;
        this.grids = grids;
        this.gType = gType;
        this.formid = formid;
    }
    public void process() {
        String delrowid = "";//保存二表是新增且又删除的rowid,以便给第三表做关联删除用
        if (Changes != null && Changes.size() > 0) {
            int index = 0;
            for (HashMap<String, String> map : Changes) {
                if (isGantt == 0) map.remove("id");
                if (
                        ("1".equalsIgnoreCase(map.get("Deleted")) || "true".equalsIgnoreCase(map.get("Deleted")))
                                && (!"1".equalsIgnoreCase(map.get("Added")) && !"true".equalsIgnoreCase(map.get("Added")))//当存在新增行又马上删除的情况,在这里需要做个判断
                ) {
                    if (map.containsKey("G")) map.remove("G");//去掉甘特图的信息
                    deletedRecords.add(map);
                    continue;
                }
                if ("1".equalsIgnoreCase(map.get("Added")) && "1".equalsIgnoreCase(map.get("Deleted"))) {
                    //新增且又马上删除的情况
                    if ("15".equalsIgnoreCase(this.getgType())) {
                        delrowid += "," + map.get("rowid");
                    }
                }
                if (
                        ("1".equalsIgnoreCase(map.get("Added")) || "true".equalsIgnoreCase(map.get("Added")))
                                && (!"1".equalsIgnoreCase(map.get("Deleted")) && !"true".equalsIgnoreCase(map.get("Deleted")))
                ) {
                    if (this.getCp() && "15".equalsIgnoreCase(this.getgType())) {//15类型且是复单情况处理rowid
                        if (rowids != null) {
                            map.put("rowid", rowids[index]);
                        }
                    }
                    insertedRecords.add(map);
                    index++;
                    continue;
                }
                if ("1".equalsIgnoreCase(map.get("Changed")) || "true".equalsIgnoreCase(map.get("Changed"))) {
                    getChanged(map, updatedRecords, vssRecords);
                    continue;
                }
                if ("1".equalsIgnoreCase(map.get("OAChanged")) || "true".equalsIgnoreCase(map.get("OAChanged"))) {
                    oARecords.add(map);
                    continue;
                }
                if ("1".equalsIgnoreCase(map.get("_YCAUDIT_")) || "true".equalsIgnoreCase(map.get("_YCAUDIT_"))) {//处理审计数据
                    auditRecords.add(map);
                    continue;
                }
            }
        }
        if(value!=null&&value!="") value=value.replaceAll("&amp;", "&").replaceAll("&lt;", "<").replaceAll("&gt;", ">");
        if(key.equalsIgnoreCase("_ConstWidth")) continue;
        if(key.equalsIgnoreCase("id")){
            if(value!=null&&value!="")
            if(value.startsWith("AR")) continue;
        if (otherChanges != null && otherChanges.size() > 0) {//三表结构
            for (HashMap<String, String> map : otherChanges) {
                map.remove("id");
                if (
                    //"1".equalsIgnoreCase(map.get("Deleted"))||"true".equalsIgnoreCase(map.get("Deleted"))
                        ("1".equalsIgnoreCase(map.get("Deleted")) || "true".equalsIgnoreCase(map.get("Deleted")))
                                && (!"1".equalsIgnoreCase(map.get("Added")) && !"true".equalsIgnoreCase(map.get("Added")))
                ) {
                    otherDeleteds.add(map);
                    continue;
                }
                if (
                    //"1".equalsIgnoreCase(map.get("Added"))||"true".equalsIgnoreCase(map.get("Added"))
                        ("1".equalsIgnoreCase(map.get("Added")) || "true".equalsIgnoreCase(map.get("Added")))
                                && (!"1".equalsIgnoreCase(map.get("Deleted")) && !"true".equalsIgnoreCase(map.get("Deleted")))
                ) {
                    if (delrowid.contains("," + map.get("rowid"))) {
                        if (this.cp) continue;//复单时且当前行关联的第二表是删除,且这一行也就不需要增加写到后台
                        otherDeleteds.add(map);
                    } else
                        otherInserteds.add(map);
                    continue;
                }
                if ("1".equalsIgnoreCase(map.get("Changed")) || "true".equalsIgnoreCase(map.get("Changed"))) {
                    getChanged(map, otherUpdateds, otherVss);
                    continue;
                }
                if ("1".equalsIgnoreCase(map.get("OAChanged")) || "true".equalsIgnoreCase(map.get("OAChanged"))) {
                    otherOA.add(map);
                    continue;
                }
                if ("1".equalsIgnoreCase(map.get("_YCAUDIT_")) || "true".equalsIgnoreCase(map.get("_YCAUDIT_"))) {//处理审计数据
                    auditRecords.add(map);
                    continue;
                }
            }
        }
        if(key.lastIndexOf("Orig")>-1){//表示需要放在匹配里面
        ind+=1;
    }
    public void getChanged(HashMap<String, String> map, List<HashMap<String, String>> upp, List<HashMap<String, String>> vss) {
        HashMap<String, String> up = new HashMap<String, String>();
        HashMap<String, String> vs = new HashMap<String, String>();
        map.remove("Changed");
        Iterator<Map.Entry<String, String>> iter = map.entrySet().iterator();
        String flg = "";
        int ind = 0;
        boolean img = false;
        while (iter.hasNext()) {
            Map.Entry<String, String> entry = iter.next();
            img = false;
            String key = entry.getKey();
            String value = entry.getValue();
            if (key.lastIndexOf("Orig") < 0 && !map.containsKey(key + "Orig")) {
                img = this.checkImg(value);
                if (img) continue;
            } else {
                flg = key;
            }
            if (value != null && value != "")
                value = value.replaceAll("&amp;", "&").replaceAll("&lt;", "<").replaceAll("&gt;", ">");
            if (key.equalsIgnoreCase("_ConstWidth")) continue;
            if (key.equalsIgnoreCase("id")) {
                if (value != null && value != "")
                    if (value.startsWith("AR")) continue;
            }
            if (key.lastIndexOf("Orig") > -1) {//表示需要放在匹配里面
                ind += 1;
//        if(value!=null&&!"".equalsIgnoreCase(value)){
//        img=this.checkImg(map.get(key.substring(0,key.length()-4)));//取得当是Orig时候,原值是不是就是图片的值,需要处理这种情况
//        if(img) continue;
//        }
        if(value!=null&&!value.matches(picMatch_uuid)){//当前是上传,但不是图片,保留的只是显示值,而不是实际值需要去掉
                    vs.put(key.substring(0,key.length()-4), value);
        }else{
            flg=key.substring(0,key.length()-4);//保存在当前行中需要移除的值
        }
            String temp=map.get(key.substring(0,key.length()-4));//取新值
            if(temp!=null&&temp!="") temp=temp.replaceAll("&amp;", "&").replaceAll("&lt;", "<").replaceAll("&gt;", ">");//去掉更新时候存在&的转义
            if(!img)
            up.put(key.substring(0,key.length()-4),temp );
        }else{
        if(flg.equalsIgnoreCase(key)){
                continue;
        }else
            if(!vs.containsKey(key)) vs.put(key, value);
                if (value != null && !value.matches(picMatch_uuid)) {//当前是上传,但不是图片,保留的只是显示值,而不是实际值需要去掉
                    vs.put(key.substring(0, key.length() - 4), value);
                } else {
                    flg = key.substring(0, key.length() - 4);//保存在当前行中需要移除的值
                }
                String temp = map.get(key.substring(0, key.length() - 4));//取新值
                if (temp != null && temp != "")
                    temp = temp.replaceAll("&amp;", "&").replaceAll("&lt;", "<").replaceAll("&gt;", ">");//去掉更新时候存在&的转义
                if (!img)
                    up.put(key.substring(0, key.length() - 4), temp);
            } else {
                if (flg.equalsIgnoreCase(key)) {
                    continue;
                } else if (!vs.containsKey(key)) vs.put(key, value);
            }
        }
        if ((!img && ind > 0)) {//(!img&&ind>0)是没有图片的情况,
            upp.add(up);
            vss.add(vs);
        }
    }
    if((!img&&ind>0)){//(!img&&ind>0)是没有图片的情况,
    upp.add(up);
    vss.add(vs);
    private boolean checkImg(String value) {
        if (value == null) return false;
        if (value.matches(picMatch_uuid)) //JsonUtil.IMGRANG
            return true;
        return false;
    }
}
    public int getaFlag() {
        return aFlag;
    }
private boolean checkImg(String value) {
    if(value==null) return false;
    if(value.matches(picMatch_uuid)) //JsonUtil.IMGRANG
    return true;
    return false;
}
public int getaFlag() {
    return aFlag;
}
    public void setaFlag(int aFlag) {
        this.aFlag = aFlag;
    }
public void setaFlag(int aFlag) {
    this.aFlag = aFlag;
}
    public List<HashMap<String, String>> getOtherChanges() {
        return otherChanges;
    }
public List<HashMap<String, String>> getOtherChanges() {
    return otherChanges;
}
    public void setOtherChanges(List<HashMap<String, String>> otherChanges) {
        this.otherChanges = otherChanges;
    }
public void setOtherChanges(List<HashMap<String, String>> otherChanges) {
    this.otherChanges = otherChanges;
}
    public HashMap<String, String> getIO() {
        return IO;
    }
public HashMap<String, String> getIO() {
    return IO;
}
    public void setIO(HashMap<String, String> iO) {
        IO = iO;
    }
public void setIO(HashMap<String, String> iO) {
    IO = iO;
}
    public List<HashMap<String, String>> getChanges() {
        return Changes;
    }
public List<HashMap<String, String>> getChanges() {
    return Changes;
}
    public void setChanges(List<HashMap<String, String>> changes) {
        Changes = changes;
    }
    public String getToken() {
        return token;
    }
public void setChanges(List<HashMap<String, String>> changes) {
    Changes = changes;
}
    public void setToken(String token) {
        this.token = token;
    }
    public String getOtherColns() {
        return otherColns;
    }
    public void setOtherColns(String otherColns) {
        this.otherColns = otherColns;
    }
public String getToken() {
    return token;
}
public void setToken(String token) {
    this.token = token;
}
public String getOtherColns() {
    return otherColns;
}
public void setOtherColns(String otherColns) {
    this.otherColns = otherColns;
}
public String getColns() {
    return colns;
}
public void setColns(String colns) {
    this.colns = colns;
}
public String getCudoc() {
    return cudoc;
}
public void setCudoc(String cudoc) {
    this.cudoc = cudoc;
}
public String getExpr() {
    return expr;
}
public void setExpr(String expr) {
    this.expr = expr;
}
public boolean getCp() {
    return cp;
}
public void setCp(boolean cp) {
    this.cp = cp;
}
public String getOa() {
    return oa;
}
public void setOa(String oa) {
    this.oa = oa;
}
public String getFl() {
    return fl;
}
public void setFl(String fl) {
    this.fl = fl;
}
public List<HashMap<String, String>> getEmptyRecords() {
    return emptyRecords;
}
public void setEmptyRecords(List<HashMap<String, String>> emptyRecords) {
    this.emptyRecords = emptyRecords;
}
public String getFormid() {
    return formid;
}
public void setFormid(String formid) {
    this.formid = formid;
}
public List<HashMap<String, String>> getMuilTranRecords() {
    return muilTranRecords;
}
public void setMuilTranRecords(List<HashMap<String, String>> muilTranRecords) {
    this.muilTranRecords = muilTranRecords;
}
public String getgType() {
    return gType;
}
public void setgType(String gType) {
    this.gType = gType;
}
public List<Panel> getPanels() {
    return panels;
}
public void setPanels(List<Panel> panels) {
    this.panels = panels;
}
public List<Grid> getGrids() {
    return grids;
}
public void setGrids(List<Grid> grids) {
    this.grids = grids;
}
public String getOtherKey() {
    return otherKey;
}
public void setOtherKey(String otherKey) {
    this.otherKey = otherKey;
}
public int getOtherFormid() {
    return otherFormid;
}
public void setOtherFormid(int otherFormid) {
    this.otherFormid = otherFormid;
}
public List<HashMap<String, String>> getOtherDeleteds() {
    return otherDeleteds;
}
public void setOtherDeleteds(List<HashMap<String, String>> otherDeleteds) {
    this.otherDeleteds = otherDeleteds;
}
public List<HashMap<String, String>> getOtherInserteds() {
    return otherInserteds;
}
public void setOtherInserteds(List<HashMap<String, String>> otherInserteds) {
    this.otherInserteds = otherInserteds;
}
public List<HashMap<String, String>> getOtherUpdateds() {
    return otherUpdateds;
}
public void setOtherUpdateds(List<HashMap<String, String>> otherUpdateds) {
    this.otherUpdateds = otherUpdateds;
}
public List<HashMap<String, String>> getOtherVss() {
    return otherVss;
}
public void setOtherVss(List<HashMap<String, String>> otherVss) {
    this.otherVss = otherVss;
}
    public String getColns() {
        return colns;
    }
public String getOtherTable() {
    return otherTable;
}
public void setOtherTable(String otherTable) {
    this.otherTable = otherTable;
}
public List<HashMap<String, String>> getOtherTranRecords() {
    return otherTranRecords;
}
public void setOtherTranRecords(List<HashMap<String, String>> otherTranRecords) {
    this.otherTranRecords = otherTranRecords;
}
public String getDoccode() {
    return doccode;
}
public void setDoccode(String doccode) {
    this.doccode = doccode;
}
public String getPanelAction() {
    return panelAction;
}
public void setPanelAction(String panelAction) {
    this.panelAction = panelAction;
}
public String getPanelTable() {
    return panelTable;
}
public void setPanelTable(String panelTable) {
    this.panelTable = panelTable;
}
public List<HashMap<String, String>> getTranRecords() {
    return tranRecords;
}
public void setTranRecords(List<HashMap<String, String>> tranRecords) {
    this.tranRecords = tranRecords;
}
public List<HashMap<String, String>> getDeletedRecords() {
    return deletedRecords;
}
public void setDeletedRecords(List<HashMap<String, String>> deletedRecords) {
    this.deletedRecords = deletedRecords;
}
public List<HashMap<String, String>> getInsertedRecords() {
    return insertedRecords;
}
public void setInsertedRecords(List<HashMap<String, String>> insertedRecords) {
    this.insertedRecords = insertedRecords;
}
public List<HashMap<String, String>> getUpdatedRecords() {
    return updatedRecords;
}
public void setUpdatedRecords(List<HashMap<String, String>> updatedRecords) {
    this.updatedRecords = updatedRecords;
}
public List<HashMap<String, String>> getVssRecords() {
    return vssRecords;
}
public void setVssRecords(List<HashMap<String, String>> vssRecords) {
    this.vssRecords = vssRecords;
}
public String[] getFieldsName() {
    return fieldsName;
}
public void setFieldsName(String[] fieldsName) {
    this.fieldsName = fieldsName;
}
    public void setColns(String colns) {
        this.colns = colns;
    }
public String getAction() {
    return action;
}
public void setAction(String action) {
    this.action = action;
}
public PageInfo getPageInfo() {
    return pageInfo;
}
public void setPageInfo(PageInfo pageInfo) {
    this.pageInfo = pageInfo;
}
public List<HashMap<String, String>> getPanelRecords() {
    return panelRecords;
}
public void setPanelRecords(List<HashMap<String, String>> panelRecords) {
    this.panelRecords = panelRecords;
}
    public String getCudoc() {
        return cudoc;
    }
    public List<HashMap<String, String>> getoARecords() {
        return oARecords;
    }
    public void setCudoc(String cudoc) {
        this.cudoc = cudoc;
    }
    public void setoARecords(List<HashMap<String, String>> oARecords) {
        this.oARecords = oARecords;
    }
    public String getExpr() {
        return expr;
    }
    public void setExpr(String expr) {
        this.expr = expr;
    }
    public boolean getCp() {
        return cp;
    }
    public void setCp(boolean cp) {
        this.cp = cp;
    }
    public String getOa() {
        return oa;
    }
    public void setOa(String oa) {
        this.oa = oa;
    }
    public String getFl() {
        return fl;
    }
    public void setFl(String fl) {
        this.fl = fl;
    }
    public List<HashMap<String, String>> getEmptyRecords() {
        return emptyRecords;
    }
    public void setEmptyRecords(List<HashMap<String, String>> emptyRecords) {
        this.emptyRecords = emptyRecords;
    }
    public String getFormid() {
        return formid;
    }
    public void setFormid(String formid) {
        this.formid = formid;
    }
    public List<HashMap<String, String>> getMuilTranRecords() {
        return muilTranRecords;
    }
    public void setMuilTranRecords(List<HashMap<String, String>> muilTranRecords) {
        this.muilTranRecords = muilTranRecords;
    }
    public String getgType() {
        return gType;
    }
    public void setgType(String gType) {
        this.gType = gType;
    }
    public List<Panel> getPanels() {
        return panels;
    }
    public void setPanels(List<Panel> panels) {
        this.panels = panels;
    }
    public List<Grid> getGrids() {
        return grids;
    }
    public void setGrids(List<Grid> grids) {
        this.grids = grids;
    }
    public String getOtherKey() {
        return otherKey;
    }
    public void setOtherKey(String otherKey) {
        this.otherKey = otherKey;
    }
    public int getOtherFormid() {
        return otherFormid;
    }
    public void setOtherFormid(int otherFormid) {
        this.otherFormid = otherFormid;
    }
    public List<HashMap<String, String>> getOtherDeleteds() {
        return otherDeleteds;
    }
    public void setOtherDeleteds(List<HashMap<String, String>> otherDeleteds) {
        this.otherDeleteds = otherDeleteds;
    }
    public List<HashMap<String, String>> getOtherInserteds() {
        return otherInserteds;
    }
    public void setOtherInserteds(List<HashMap<String, String>> otherInserteds) {
        this.otherInserteds = otherInserteds;
    }
    public List<HashMap<String, String>> getOtherUpdateds() {
        return otherUpdateds;
    }
    public void setOtherUpdateds(List<HashMap<String, String>> otherUpdateds) {
        this.otherUpdateds = otherUpdateds;
    }
    public List<HashMap<String, String>> getOtherVss() {
        return otherVss;
    }
    public void setOtherVss(List<HashMap<String, String>> otherVss) {
        this.otherVss = otherVss;
    }
    public String getOtherTable() {
        return otherTable;
    }
    public void setOtherTable(String otherTable) {
        this.otherTable = otherTable;
    }
    public List<HashMap<String, String>> getOtherTranRecords() {
        return otherTranRecords;
    }
    public void setOtherTranRecords(List<HashMap<String, String>> otherTranRecords) {
        this.otherTranRecords = otherTranRecords;
    }
    public String getDoccode() {
        return doccode;
    }
    public void setDoccode(String doccode) {
        this.doccode = doccode;
    }
    public String getPanelAction() {
        return panelAction;
    }
    public void setPanelAction(String panelAction) {
        this.panelAction = panelAction;
    }
    public String getPanelTable() {
        return panelTable;
    }
    public void setPanelTable(String panelTable) {
        this.panelTable = panelTable;
    }
    public List<HashMap<String, String>> getTranRecords() {
        return tranRecords;
    }
    public void setTranRecords(List<HashMap<String, String>> tranRecords) {
        this.tranRecords = tranRecords;
    }
    public List<HashMap<String, String>> getDeletedRecords() {
        return deletedRecords;
    }
    public void setDeletedRecords(List<HashMap<String, String>> deletedRecords) {
        this.deletedRecords = deletedRecords;
    }
    public List<HashMap<String, String>> getInsertedRecords() {
        return insertedRecords;
    }
    public void setInsertedRecords(List<HashMap<String, String>> insertedRecords) {
        this.insertedRecords = insertedRecords;
    }
    public List<HashMap<String, String>> getUpdatedRecords() {
        return updatedRecords;
    }
    public void setUpdatedRecords(List<HashMap<String, String>> updatedRecords) {
        this.updatedRecords = updatedRecords;
    }
    public List<HashMap<String, String>> getVssRecords() {
        return vssRecords;
    }
    public void setVssRecords(List<HashMap<String, String>> vssRecords) {
        this.vssRecords = vssRecords;
    }
    public String[] getFieldsName() {
        return fieldsName;
    }
    public void setFieldsName(String[] fieldsName) {
        this.fieldsName = fieldsName;
    }
    public String getAction() {
        return action;
    }
    public void setAction(String action) {
        this.action = action;
    }
    public PageInfo getPageInfo() {
        return pageInfo;
    }
    public void setPageInfo(PageInfo pageInfo) {
        this.pageInfo = pageInfo;
    }
    public List<HashMap<String, String>> getPanelRecords() {
        return panelRecords;
    }
    public void setPanelRecords(List<HashMap<String, String>> panelRecords) {
        this.panelRecords = panelRecords;
    }
    public List<HashMap<String, String>> getoARecords() {
        return oARecords;
    }
    public void setoARecords(List<HashMap<String, String>> oARecords) {
        this.oARecords = oARecords;
    }
}
src/com/yc/utils/SessionKey.java
@@ -152,6 +152,7 @@
    public final static String ISMODIFYPRICEWHENSALESORDER = "isModifyPriceWhenSalesOrder" ;  //APP销售订单允许改价格
    public final static String ISMODIFYPRICEWHENPURCHASEORDER = "isModifyPriceWhenPurchaseOrder" ;  //APP采购订单允许改价格
    public final static String SWITCHTOPAGEWHENLOGONAPP = "switchToPageWhenLogonApp" ;  //默认页面
    public final static String SELECTNEXTDOCUMENTWHENAPPROVED = "selectNextDocumentWhenApproved" ;  //审核单据参数设置
    public final static String USERTYPE = "@usertype" ;  //用户类型
    
    public final static String LOGIN_TIME = "@logintime" ;  //用户登录的时间 xin 2020-8-31 11:33:07