| | |
| | | /** |
| | | * 保存所有新增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语句 |
| | |
| | | } 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)); |
| | | } |
| | | } |
| | | //------ |
| | |
| | | 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), |
| | |
| | | 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); |
| | |
| | | // 有些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="";//清空 |
| | |
| | | json.setgType(this.winType + ""); |
| | | json.setTaobao(this.taobaoAPI); |
| | | } |
| | | // ----- |
| | | |
| | | try { |
| | | String doc = ""; |
| | |
| | | } |
| | | |
| | | // ----因为有可能需要替换参数而出错,因为提交数据为空,保存后需要排除保存时执行 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=""; |
| | | } |
| | |
| | | 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, |
| | |
| | | return null; |
| | | |
| | | } finally { |
| | | this.insertsql.clear(); |
| | | this.detailSql.clear(); |
| | | this.insert.clear(); |
| | | this.totalNum = 0; |
| | | this.updatesql.clear(); |
| | |
| | | if (isPrimaryPan.equals("1")) { |
| | | this.zhupan496 = this.wherepan496; |
| | | } else { |
| | | this.insertsql.add(0, this.wherepan496); |
| | | this.headSql.add(0, this.wherepan496); |
| | | } |
| | | this.wherepan496 = ""; |
| | | } |
| | |
| | | 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 {// 这个是主从不是一个视图情况添加到对应的表里。 |
| | |
| | | } |
| | | 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 = ""; |
| | |
| | | || "".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)) |
| | |
| | | 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) { |
| | |
| | | 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; |
| | |
| | | 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" + |
| | |
| | | //通过版本号判断数据是否已更新,版本号不一致则显示提示信息,刷新页面再提交 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" + |
| | |
| | | |
| | | |
| | | } |
| | | this.updatesql.add(sb.toString()); |
| | | this.detailSql.add(sb.toString()); |
| | | } |
| | | |
| | | if (update1.size() == 0) {//没数据,表示需要把之前的保存时执行过程清空,针对9646才需要这样 |
| | |
| | | |
| | | |
| | | } |
| | | this.updatesql.add(sb.toString()); |
| | | this.detailSql.add(sb.toString()); |
| | | } |
| | | |
| | | if (update1.size() == 0) {//没数据,表示需要把之前的保存时执行过程清空,针对9646才需要这样 |
| | |
| | | isPass = tableMetaDatas.containsKey(k + "");// 去除计算列 |
| | | isPass = checkExpressionColumn(up, k, isPass);// 更新时有权限控制的字段不需要更新 |
| | | if (isPass) { |
| | | |
| | | key.append("[").append(k); |
| | | key.append("]="); |
| | | parserType(up, key, k, tableMetaDatas); |
| | |
| | | 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" + |
| | |
| | | } |
| | | 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的情况,会导致更新所有数据,如果出现这种情况,需要抛出错误 |
| | |
| | | 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)) {//取每颗树的父节点作为第一个节点进行组装 |
| | |
| | | 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); |