saveitems.jsp
7.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
<%@ page language="java" contentType="application/json;charset=UTF-8" %>
<%@ page import="weaver.general.*"%>
<%@ page import="weaver.hrm.*,weaver.conn.*,org.json.*,java.math.*,java.text.*,weaver.matrix.*"%>
<%@ page import="java.sql.Timestamp"%>
<%@ page import="weaver.general.Util,
weaver.docs.docs.CustomFieldManager,
weaver.docs.docs.FieldParam" %>
<%@ page import="java.util.*" %>
<%@page import="weaver.hrm.common.database.dialect.DialectUtil"%>
<jsp:useBean id="RecordSetTrans" class="weaver.conn.RecordSetTrans" scope="page" />
<jsp:useBean id="RecordSet" class="weaver.conn.RecordSet" scope="page" />
<%
out.clearBuffer();
User user = HrmUserVarify.getUser (request , response) ;
char flag=Util.getSeparator();
int userid=user.getUID();
request.setCharacterEncoding("UTF-8");
//RecordSet对应的sql
String rssql="";
//RecordSetTrans对应的sql
String sql="";
//数据库类型
String dbtype=RecordSet.getDBType();
List<String> sqls=new ArrayList<String>();
StringBuffer sb=new StringBuffer("");
StringBuffer createsb=new StringBuffer("");
//主要分更新,新增部分
List<Map<String,String>> updateitems=new ArrayList<Map<String,String>>();
List<Map<String,String>> additems=new ArrayList<Map<String,String>>();
List<String> updateids=new ArrayList<String>();
int count=Integer.valueOf(request.getParameter("count"));
String[] itemids=new String[count];
String[] fieldlables=new String[count];
String[] fieldorders=new String[count];
String[] htmltypes=new String[count];
String[] iscusttypes=new String[count];
String[] namelabels=new String[count];
String[] types=new String[count];
String[] typeids=new String[count];
String[] widths=new String[count];
String matrixid=request.getParameter("matrixid");
//矩阵对应的表名
String matrixtablename=MatrixUtil.MATRIXPREFIX+matrixid;
String itemid;
String fieldlable;
String filedorder;
String htmltype;
String iscusttype;
String namelabel;
String typeid;
String type;
String width;
String fieldname;
String fieldlabel;
boolean needadd=true;
Map<String,String> item;
//获取表单数据
for(int i=0;i<count;i++){
itemids[i]=request.getParameter("itemid_"+i);
fieldlables[i]=request.getParameter("fieldlable_"+i);
fieldorders[i]=request.getParameter("filedorder_"+i);
htmltypes[i]=request.getParameter("htmltype_"+i);
iscusttypes[i]=request.getParameter("iscusttype_"+i);
namelabels[i]=request.getParameter("namelabel_"+i);
types[i]=request.getParameter("type_"+i);
typeids[i]=request.getParameter("typeid_"+i);
widths[i]=request.getParameter("width_"+i);
}
//获取新增,更新条目
for(int i=0;i<itemids.length;i++){
itemid=itemids[i];
item=new HashMap<String,String>();
item.put("itemid",itemid);
item.put("fieldlabel",fieldlables[i]);
item.put("fieldorder",fieldorders[i]);
item.put("htmltype",htmltypes[i]);
item.put("iscusttype",iscusttypes[i]);
item.put("namelabel",namelabels[i]);
item.put("typeid",typeids[i]);
item.put("type",types[i]);
//item.put("width",widths[i]);
String thiswidth = widths[i];
if(thiswidth.indexOf(".")>0){
thiswidth = thiswidth.substring(0,thiswidth.indexOf("."));
}
item.put("width",thiswidth);
//新增条目
if("".equals(itemid)){
additems.add(item);
//更新条目
}else{
updateitems.add(item);
updateids.add(itemid);
}
}
//是否是第一次创建表 1表示第一次创建 0 非第一次创建
String firstcreatetable = "0";
//判断表名是否创建
rssql="select * from MatrixFieldInfo where matrixid='"+matrixid+"'";
RecordSet.execute(rssql);
//不存在表记录,则默认新建表
if(!RecordSet.next()){
createsb.append("create table "+matrixtablename).append(" ( uuid varchar(100), dataorder float, ");
for(int i=0,len=additems.size();i<len;i++){
createsb.append(additems.get(i).get("fieldlabel")).append(" varchar(1000) ").append(",");
}
rssql = createsb.substring(0,createsb.length()-1)+" ) ";
//生成表结构
new RecordSet().execute(rssql);
//判断更新还是新建 true:update false:new
needadd=false;
//一次创建
firstcreatetable= "1";
}
//构建sql 1.删除条目,更新条目,添加条目
if(updateids.size()>0){
String tempstr="";
for(int i=0,len=updateids.size();i<len;i++){
sb.append("'"+updateids.get(i)+"'").append(",");
}
if(sb.length()>0){
tempstr=sb.substring(0,sb.length()-1);
}
if(needadd){
rssql="select fieldname from MatrixFieldInfo where id not in ("+tempstr+") and matrixid='"+matrixid+"'";
RecordSet.execute(rssql);
//删除数据列
while(RecordSet.next()){
sql="alter table "+matrixtablename+" drop column "+RecordSet.getString("fieldname");
sqls.add(sql);
}
}
sql="delete from MatrixFieldInfo where id not in ("+tempstr+") and matrixid='"+matrixid+"'";
sqls.add(sql);
}
//更新条目
if(updateitems.size()>0){
for(Map<String,String> itemdata:updateitems){
rssql="select fieldname from MatrixFieldInfo where id='"+itemdata.get("itemid")+"'";
RecordSet.execute(rssql);
if(RecordSet.next()){
fieldname=RecordSet.getString("fieldname");
fieldlabel=itemdata.get("fieldlabel");
//更改列名操作
if(!fieldname.equals(fieldlabel)){
if("oracle".equals(dbtype) || "db2".equals(dbtype)){
sql="alter table "+matrixtablename+" rename column "+fieldname+" to "+fieldlabel+"";
}else if("sqlserver".equals(dbtype)){
sql="EXEC sp_rename '"+matrixtablename+"."+fieldname+"', '"+fieldlabel+"', 'COLUMN'";
}else if(DialectUtil.isMySql(dbtype)){
sql="alter table "+matrixtablename+" change column "+fieldname+" "+fieldlabel+" varchar(1000) ";
}
sqls.add(sql);
}
}
sql="update MatrixFieldInfo set browsertypeid='"+itemdata.get("htmltype")+"',browservalue='"+itemdata.get("typeid")+"',custombrowser='"+itemdata.get("iscusttype")+"',displayname='"+itemdata.get("namelabel")+"',fieldname='"+itemdata.get("fieldlabel")+"',fieldtype='"+itemdata.get("type")+"',priority='"+itemdata.get("fieldorder")+"',colwidth='"+itemdata.get("width")+"' where id='"+itemdata.get("itemid")+"'";
sqls.add(sql);
}
}
//新增条目
if(additems.size()>0){
//获取 最大的id
int mfmaxid = 0;
RecordSet.executeSql("select max(id) as id from MatrixFieldInfo");
while(RecordSet.next()){
mfmaxid = Util.getIntValue(RecordSet.getString("id"),1);
}
for(Map<String,String> itemdata:additems){
if(needadd){
//添加列
sql="alter table "+matrixtablename+" add "+itemdata.get("fieldlabel")+" varchar(1000)";
sqls.add(sql);
}
//插入列详细信息
mfmaxid ++;
if("oracle".equals(dbtype) || DialectUtil.isMySql(dbtype) ){
sql="insert into MatrixFieldInfo(id,matrixid,browsertypeid,browservalue,custombrowser,displayname,fieldname,fieldtype,priority,colwidth) values("+mfmaxid+",'"+matrixid+"','"+itemdata.get("htmltype")+"','"+itemdata.get("typeid")+"','"+itemdata.get("iscusttype")+"','"+itemdata.get("namelabel")+"','"+itemdata.get("fieldlabel")+"','"+itemdata.get("type")+"','"+itemdata.get("fieldorder")+"','"+itemdata.get("width")+"')";
}else if("sqlserver".equals(dbtype)){
sql="insert into MatrixFieldInfo(matrixid,browsertypeid,browservalue,custombrowser,displayname,fieldname,fieldtype,priority,colwidth) values('"+matrixid+"','"+itemdata.get("htmltype")+"','"+itemdata.get("typeid")+"','"+itemdata.get("iscusttype")+"','"+itemdata.get("namelabel")+"','"+itemdata.get("fieldlabel")+"','"+itemdata.get("type")+"','"+itemdata.get("fieldorder")+"','"+itemdata.get("width")+"')";
}
sqls.add(sql);
}
}
try{
RecordSetTrans.setAutoCommit(false);
for(String sqlitem:sqls){
//System.out.println(sqlitem );
RecordSetTrans.execute(sqlitem);
}
//提交事务
RecordSetTrans.commit();
String fieldinfojson=MatrixUtil.getMatrixJsonByIdForDesignList(matrixid);
out.println("{\"success\":\"1\",\"fieldarray\":"+fieldinfojson+",\"firstcreatetable\":\""+firstcreatetable+"\"}");
//out.println("{\"success\":\"1\"}");
}catch(Exception e){
//e.printStackTrace();
out.println("{\"success\":\"0\"}");
}
%>