owl-cli 6.149.0 → 6.151.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/.eslintrc.json +2 -2
  2. package/.vscode/launch.json +22 -22
  3. package/.vscode/settings.json +2 -2
  4. package/bin/createTables.js +94 -94
  5. package/bin/deploy.js +66 -66
  6. package/bin/dsl.js +223 -223
  7. package/bin/genEvents.js +188 -188
  8. package/bin/owl-init.js +50 -50
  9. package/bin/owl.js +305 -305
  10. package/bin/owlconfig.json +16 -16
  11. package/bin/table_mysql.js +189 -189
  12. package/bin/undeploy.js +56 -56
  13. package/defaultTemplate/api/build.xml +94 -94
  14. package/defaultTemplate/api/src/about.html +12 -12
  15. package/defaultTemplate/api/src/about.jsx +11 -11
  16. package/defaultTemplate/api/src/handlers/aggs.jsx +161 -161
  17. package/defaultTemplate/api/src/handlers/batchImport.jsx +78 -78
  18. package/defaultTemplate/api/src/handlers/delete.jsx +88 -88
  19. package/defaultTemplate/api/src/handlers/export.jsx +117 -117
  20. package/defaultTemplate/api/src/handlers/exportDoc.jsx +27 -27
  21. package/defaultTemplate/api/src/handlers/exportEx.jsx +77 -77
  22. package/defaultTemplate/api/src/handlers/exportWithTemplates.jsx +50 -50
  23. package/defaultTemplate/api/src/handlers/exportZip.jsx +26 -26
  24. package/defaultTemplate/api/src/handlers/get.jsx +50 -50
  25. package/defaultTemplate/api/src/handlers/getByIds.jsx +51 -51
  26. package/defaultTemplate/api/src/handlers/getChildren.jsx +96 -96
  27. package/defaultTemplate/api/src/handlers/getExportTaskInfo.jsx +34 -34
  28. package/defaultTemplate/api/src/handlers/getSpec.jsx +40 -40
  29. package/defaultTemplate/api/src/handlers/include/checklogin.jsx +787 -786
  30. package/defaultTemplate/api/src/handlers/include/diff.jsx +315 -315
  31. package/defaultTemplate/api/src/handlers/include/util.jsx +60 -60
  32. package/defaultTemplate/api/src/handlers/list.jsx +252 -252
  33. package/defaultTemplate/api/src/handlers/listEx.jsx +142 -136
  34. package/defaultTemplate/api/src/handlers/reIndex.jsx +63 -63
  35. package/defaultTemplate/api/src/handlers/recovery.jsx +53 -53
  36. package/defaultTemplate/api/src/handlers/save.jsx +125 -125
  37. package/defaultTemplate/api/src/handlers/upload.jsx +72 -72
  38. package/defaultTemplate/api/src/init/indexConfigs/changeMapping.json +14 -14
  39. package/defaultTemplate/api/src/init/indexConfigs/createAliase.json +10 -10
  40. package/defaultTemplate/api/src/init/indexConfigs/createIndex.json +55 -55
  41. package/defaultTemplate/api/src/init/indexConfigs/rebuildIndex.sh +27 -27
  42. package/defaultTemplate/api/src/init/indexConfigs/reindex.json +10 -10
  43. package/defaultTemplate/api/src/init/init.jsx +25 -25
  44. package/defaultTemplate/api/src/meta.json +10 -10
  45. package/defaultTemplate/api/src/services/dblayer.jsx +251 -251
  46. package/defaultTemplate/api/src/services/modelService.jsx +1239 -1239
  47. package/defaultTemplate/api/src/services/sqlstring.jsx +240 -240
  48. package/defaultTemplate/api/src/tasks/export.jsx +366 -366
  49. package/defaultTemplate/api/src/tasks/exportDoc.jsx +99 -99
  50. package/defaultTemplate/api/src/tasks/exportExTask.jsx +332 -332
  51. package/defaultTemplate/api/src/tasks/exportWithTemplateTask.jsx +128 -128
  52. package/defaultTemplate/api/src/tasks/exportZip.jsx +49 -49
  53. package/examples/buildProperties/build.properties +2 -2
  54. package/examples/gitignore/gitignore_example.txt +1 -1
  55. package/examples/models/product.json +52 -52
  56. package/examples/models/shop.json +71 -71
  57. package/examples/models/sku.json +254 -254
  58. package/examples/models/user.json +49 -49
  59. package/examples/owlconfig.json +13 -13
  60. package/package.json +33 -33
  61. package/todo.txt +4 -4
@@ -1,366 +1,366 @@
1
- //#import $@projectCode:services/modelService.jsx
2
- //#import excel.js
3
-
4
-
5
- var formSpecs = @formSpecs;
6
-
7
- function getFieldByKey(fullKey){
8
- var keys = fullKey.split(".");
9
- var curField = formSpecs;
10
- for(var i=0; i<keys.length; i++){
11
- if(curField._ft=='field'){
12
- if(curField.key == fullKey){
13
- return curField;
14
- }
15
- else{
16
- return null;
17
- }
18
- }
19
- else{
20
- var key = keys[i];
21
- var fields = curField.fields;
22
- curField == null;
23
- for(var j=0; j<fields.length; j++){
24
- var f = fields[j];
25
- if(f.origKey == key){
26
- curField = f;
27
- break;
28
- }
29
- }
30
- if(curField==null){
31
- return null;
32
- }
33
- }
34
- }
35
- return curField;
36
- }
37
-
38
-
39
- function normalizeValue(value,spec){
40
- if(value == null){
41
- return null;
42
- }
43
- switch (spec.fieldType){
44
- case 'string':
45
- return 's'+value;
46
- case 'number':
47
- return 'n' + value;
48
- case 'date':
49
- try{
50
- var d = null;
51
- if(isNaN(value)){
52
- d = new Date(value).getTime();
53
- }
54
- else{
55
- d = new Date(Number(value)).getTime();
56
- }
57
- return 'd'+ d;
58
- }
59
- catch(e){
60
- return null;
61
- }
62
- case 'choice':
63
- for(var i=0; i<spec.options.length; i++){
64
- var option = spec.options[i];
65
- if(option[0]==value){
66
- return 's'+option[1];
67
- }
68
- }
69
- return 's'+value;
70
- case 'image':
71
- var final = "";
72
- for(var i=0; i<value.length; i++){
73
- var f = value[i];
74
- final = final + f.url + "\n";
75
- }
76
- return 's' + final;
77
- default:
78
- return "s"+value;
79
- }
80
- }
81
-
82
- function tranverseFields(formSpec, callback, ctx){
83
- formSpec.fields.forEach( function(field){
84
- if (field[ '_ft' ] == 'field') {
85
- callback( field, ctx );
86
- }
87
- else if (field[ '_ft' ] == 'subform') {
88
- var context = { parentField: field }
89
- tranverseFields( field, callback, context );
90
- }
91
- else if (field[ '_ft' ] == 'array') {
92
- var context = { parentField: field }
93
- tranverseFields( field, callback, context )
94
- }
95
- } );
96
- }
97
-
98
- function getMainAndSubFields(exConfig){
99
- var mainFields = [];
100
- var subFields = [];
101
- if (exConfig.fields == "*") {
102
- tranverseFields(formSpecs,function(field,ctx){
103
- if (ctx.parentField && ctx.parentField._ft == 'array') {
104
- //nothing
105
- }
106
- else {
107
- mainFields.push( field );
108
- }
109
- },{})
110
- }
111
- else{
112
- for(var i=0; i<exConfig.fields.length; i++){
113
- var fieldKey = exConfig.fields[i];
114
- var field = getFieldByKey(fieldKey);
115
- if(field){
116
- mainFields.push(field);
117
- }
118
- }
119
- }
120
-
121
- if(exConfig && exConfig.items && exConfig.items.name){
122
- if(exConfig.items.itemFields=='*'){
123
- //找到items.name对应的field
124
- var f = getFieldByKey(exConfig.items.name);
125
- f.fields.forEach(function(spec){
126
- if(spec._ft=='field'){
127
- subFields.push(spec);
128
- }
129
- });
130
- }
131
- else{
132
- for(var i=0; i<exConfig.items.itemFields.length; i++){
133
- var itemField = exConfig.items.itemFields[i];
134
- var fieldKey = "";
135
- if(itemField.indexOf("$parent.")==0){
136
- fieldKey = itemField.substring(8);
137
- var field = getFieldByKey(fieldKey);
138
- if(field){
139
- field.isItemField = false;
140
- subFields.push(field);
141
- }
142
- else{
143
- $.log("panic!!!!-------------------------++++++++++++++" + fieldKey);
144
- }
145
-
146
- }
147
- else{
148
- fieldKey = exConfig.items.name + "." + itemField;
149
- var field = getFieldByKey(fieldKey);
150
- if(field){
151
- field.isItemField = true;
152
- subFields.push(field);
153
- }
154
- else{
155
- $.log("panic!!!!-------------------------++++++++++++++" + fieldKey);
156
- }
157
-
158
- }
159
-
160
-
161
- }
162
- }
163
- }
164
- return [mainFields,subFields];
165
- }
166
-
167
-
168
-
169
- (function(){
170
- var spec = @spec;
171
- var q = JSON.parse(query);
172
- var ctx = JSON.parse(env);
173
- var exportKey = ctx.exportKey;
174
-
175
- var elasticSearchUrl = $.getEnv( "elasticSearchUrl" );
176
-
177
- var headers = { "Content-Type": "application/json;charset=utf-8" };
178
- var elasticSearchUser = $.getEnv( "elasticSearchUser" );
179
- var elasticSearchPass = $.getEnv( "elasticSearchPass" );
180
- if (elasticSearchUser && elasticSearchPass) {
181
- var auth = Base64.encode( elasticSearchUser + ":" + elasticSearchPass );
182
- var basicAuth = "Basic " + auth;
183
- headers[ "Authorization" ] = basicAuth;
184
- }
185
- var searchUrl = elasticSearchUrl + "/is1erp/_doc/_search";
186
-
187
- var sndTxt = JSON.stringify( q );
188
- var s = HttpUtils.postRaw( searchUrl, sndTxt, headers );
189
- var result = JSON.parse( s );
190
-
191
-
192
- var elasticSearchUrl = $.getEnv( "elasticSearchUrl" );
193
-
194
- var headers = { "Content-Type": "application/json;charset=utf-8" };
195
- var elasticSearchUser = $.getEnv( "elasticSearchUser" );
196
- var elasticSearchPass = $.getEnv( "elasticSearchPass" );
197
- if (elasticSearchUser && elasticSearchPass) {
198
- var auth = Base64.encode( elasticSearchUser + ":" + elasticSearchPass );
199
- var basicAuth = "Basic " + auth;
200
- headers[ "Authorization" ] = basicAuth;
201
- }
202
- var searchUrl = elasticSearchUrl + "/@projectCode/_search";
203
-
204
- var sndTxt = JSON.stringify( q );
205
- $.log("export.jsx")
206
- $.log(sndTxt)
207
-
208
- var s = HttpUtils.postRaw( searchUrl, sndTxt, headers );
209
- $.log(s);
210
- var result = JSON.parse( s );
211
- var total = result.hits.total.value;
212
-
213
- var taskInfo = @projectCodeService.getExportTaskInfo( taskInfoId );
214
- taskInfo.total = total;
215
- taskInfo.lastTime = new Date().getTime();
216
- taskInfo.processState = "processing";
217
- taskInfo.msg = "获取导出总数成功......";
218
- taskInfo.percent = "20";
219
-
220
- @projectCodeService.updateExportTaskInfo( taskInfoId, taskInfo );
221
-
222
- q.size = total;
223
-
224
- var sndTxt = JSON.stringify( q );
225
- $.log('second times=============' + sndTxt);
226
- var s = HttpUtils.postRaw( searchUrl, sndTxt, headers );
227
- $.log('second times=============' + s);
228
- var result = JSON.parse( s );
229
-
230
- var hits = result.hits.hits;
231
- var objs = hits.map( function (hit){
232
- return hit._source
233
- } );
234
-
235
- var meta = spec[ "#meta" ];
236
-
237
- var rows = [];
238
- var row = [];
239
-
240
- var groupings = [];
241
-
242
- var mainFields = [];
243
- var subFields = [];
244
-
245
- var exConfig = null;
246
- if (meta.export) {
247
- meta.export.forEach(function(config){
248
- if(config.key == exportKey){
249
- exConfig = config;
250
- }
251
- });
252
- if (exConfig && exConfig.fields) {
253
- var fields = getMainAndSubFields(exConfig);
254
- $.log("getMainAndSubFields=" + JSON.stringify(fields));
255
- mainFields = fields[0];
256
- subFields = fields[1];
257
-
258
- if(mainFields.length>0){
259
- row.push(exConfig.mainTitleFormat);
260
- mainFields.forEach( function (f){
261
- row.push( "s"+f.fieldLabel );
262
- } );
263
- rows.push(row);
264
- }
265
- else{
266
- //写入子记录的title一次
267
- row.push(exConfig.subTitleFormat);
268
- subFields.forEach( function (spec){
269
- row.push( "s" + spec.fieldLabel ); //子记录title
270
- } );
271
- rows.push(row);
272
- }
273
-
274
- var subTitleInterval = exConfig.subTitleInterval || 9999999;
275
- objs.forEach( function (obj,objIdx){
276
- if(mainFields.length>0){
277
- var row = [];
278
- row.push(exConfig.mainRecordFormat);
279
- mainFields.forEach( function (f){
280
- if(!f.key){
281
- row.push('null');
282
- }
283
- else{
284
-
285
- var value = @projectCodeService.getValue( f.key, obj );
286
- $.log("getValue:" + f.key+":" +value);
287
- value = normalizeValue(value,f);
288
- row.push( value );
289
- }
290
-
291
- } );
292
- rows.push( row );
293
- }
294
- //写入子item的title
295
- if (subFields.length>0) {
296
- var row = [];
297
- var grouping = [];
298
- if(mainFields.length>0 && (objIdx % subTitleInterval)==0){
299
- //当有主记录的时候才写入子记录的Title
300
- row.push(exConfig.subTitleFormat);
301
- subFields.forEach( function (spec){
302
- row.push( "s" +spec.fieldLabel ); //子记录title
303
- } );
304
- rows.push( row );
305
- grouping[ 0 ] = rows.length - 1;
306
- }
307
- var items = obj[exConfig.items.name];
308
- items && items.forEach && items.forEach( function (item){
309
- var row = [];
310
- row.push(exConfig.subRecordFormat);
311
- subFields.forEach( function (spec){
312
- if(spec.isItemField){
313
- var value = item[ spec.origKey ];
314
- value = normalizeValue(value,spec);
315
- row.push( value );
316
- }
317
- else{
318
- if(spec.key){
319
- var value = @projectCodeService.getValue( spec.key, obj );
320
- value = normalizeValue(value,spec);
321
- row.push(value);
322
- }
323
- else{
324
- row.push("")
325
- }
326
-
327
- }
328
- } );
329
- rows.push( row );
330
- } );
331
- if(mainFields.length>0){
332
- grouping[ 1 ] = rows.length - 1;
333
- groupings.push( grouping );
334
- }
335
- }
336
- } );
337
- }
338
-
339
- var taskInfo = @projectCodeService.getExportTaskInfo( taskInfoId );
340
- taskInfo.processState = "success";
341
- taskInfo.percent = 70;
342
- taskInfo.lastTime = new Date().getTime();
343
- taskInfo.msg = "获取数据记录完成";
344
- $.log("rows======" + JSON.stringify(rows));
345
- var fileId = Excel.createExcel( rows, groupings, "export" );
346
- var taskInfo = @projectCodeService.getExportTaskInfo( taskInfoId );
347
- taskInfo.processState = "success";
348
- taskInfo.percent = 100;
349
- taskInfo.fileId = fileId;
350
- taskInfo.lastTime = new Date().getTime();
351
- taskInfo.msg = "生成Excel文件成功";
352
- @projectCodeService.updateExportTaskInfo(taskInfoId, taskInfo );
353
- }
354
- }
355
- )();
356
-
357
-
358
-
359
-
360
-
361
-
362
-
363
-
364
-
365
-
366
-
1
+ //#import $@projectCode:services/modelService.jsx
2
+ //#import excel.js
3
+
4
+
5
+ var formSpecs = @formSpecs;
6
+
7
+ function getFieldByKey(fullKey){
8
+ var keys = fullKey.split(".");
9
+ var curField = formSpecs;
10
+ for(var i=0; i<keys.length; i++){
11
+ if(curField._ft=='field'){
12
+ if(curField.key == fullKey){
13
+ return curField;
14
+ }
15
+ else{
16
+ return null;
17
+ }
18
+ }
19
+ else{
20
+ var key = keys[i];
21
+ var fields = curField.fields;
22
+ curField == null;
23
+ for(var j=0; j<fields.length; j++){
24
+ var f = fields[j];
25
+ if(f.origKey == key){
26
+ curField = f;
27
+ break;
28
+ }
29
+ }
30
+ if(curField==null){
31
+ return null;
32
+ }
33
+ }
34
+ }
35
+ return curField;
36
+ }
37
+
38
+
39
+ function normalizeValue(value,spec){
40
+ if(value == null){
41
+ return null;
42
+ }
43
+ switch (spec.fieldType){
44
+ case 'string':
45
+ return 's'+value;
46
+ case 'number':
47
+ return 'n' + value;
48
+ case 'date':
49
+ try{
50
+ var d = null;
51
+ if(isNaN(value)){
52
+ d = new Date(value).getTime();
53
+ }
54
+ else{
55
+ d = new Date(Number(value)).getTime();
56
+ }
57
+ return 'd'+ d;
58
+ }
59
+ catch(e){
60
+ return null;
61
+ }
62
+ case 'choice':
63
+ for(var i=0; i<spec.options.length; i++){
64
+ var option = spec.options[i];
65
+ if(option[0]==value){
66
+ return 's'+option[1];
67
+ }
68
+ }
69
+ return 's'+value;
70
+ case 'image':
71
+ var final = "";
72
+ for(var i=0; i<value.length; i++){
73
+ var f = value[i];
74
+ final = final + f.url + "\n";
75
+ }
76
+ return 's' + final;
77
+ default:
78
+ return "s"+value;
79
+ }
80
+ }
81
+
82
+ function tranverseFields(formSpec, callback, ctx){
83
+ formSpec.fields.forEach( function(field){
84
+ if (field[ '_ft' ] == 'field') {
85
+ callback( field, ctx );
86
+ }
87
+ else if (field[ '_ft' ] == 'subform') {
88
+ var context = { parentField: field }
89
+ tranverseFields( field, callback, context );
90
+ }
91
+ else if (field[ '_ft' ] == 'array') {
92
+ var context = { parentField: field }
93
+ tranverseFields( field, callback, context )
94
+ }
95
+ } );
96
+ }
97
+
98
+ function getMainAndSubFields(exConfig){
99
+ var mainFields = [];
100
+ var subFields = [];
101
+ if (exConfig.fields == "*") {
102
+ tranverseFields(formSpecs,function(field,ctx){
103
+ if (ctx.parentField && ctx.parentField._ft == 'array') {
104
+ //nothing
105
+ }
106
+ else {
107
+ mainFields.push( field );
108
+ }
109
+ },{})
110
+ }
111
+ else{
112
+ for(var i=0; i<exConfig.fields.length; i++){
113
+ var fieldKey = exConfig.fields[i];
114
+ var field = getFieldByKey(fieldKey);
115
+ if(field){
116
+ mainFields.push(field);
117
+ }
118
+ }
119
+ }
120
+
121
+ if(exConfig && exConfig.items && exConfig.items.name){
122
+ if(exConfig.items.itemFields=='*'){
123
+ //找到items.name对应的field
124
+ var f = getFieldByKey(exConfig.items.name);
125
+ f.fields.forEach(function(spec){
126
+ if(spec._ft=='field'){
127
+ subFields.push(spec);
128
+ }
129
+ });
130
+ }
131
+ else{
132
+ for(var i=0; i<exConfig.items.itemFields.length; i++){
133
+ var itemField = exConfig.items.itemFields[i];
134
+ var fieldKey = "";
135
+ if(itemField.indexOf("$parent.")==0){
136
+ fieldKey = itemField.substring(8);
137
+ var field = getFieldByKey(fieldKey);
138
+ if(field){
139
+ field.isItemField = false;
140
+ subFields.push(field);
141
+ }
142
+ else{
143
+ $.log("panic!!!!-------------------------++++++++++++++" + fieldKey);
144
+ }
145
+
146
+ }
147
+ else{
148
+ fieldKey = exConfig.items.name + "." + itemField;
149
+ var field = getFieldByKey(fieldKey);
150
+ if(field){
151
+ field.isItemField = true;
152
+ subFields.push(field);
153
+ }
154
+ else{
155
+ $.log("panic!!!!-------------------------++++++++++++++" + fieldKey);
156
+ }
157
+
158
+ }
159
+
160
+
161
+ }
162
+ }
163
+ }
164
+ return [mainFields,subFields];
165
+ }
166
+
167
+
168
+
169
+ (function(){
170
+ var spec = @spec;
171
+ var q = JSON.parse(query);
172
+ var ctx = JSON.parse(env);
173
+ var exportKey = ctx.exportKey;
174
+
175
+ var elasticSearchUrl = $.getEnv( "elasticSearchUrl" );
176
+
177
+ var headers = { "Content-Type": "application/json;charset=utf-8" };
178
+ var elasticSearchUser = $.getEnv( "elasticSearchUser" );
179
+ var elasticSearchPass = $.getEnv( "elasticSearchPass" );
180
+ if (elasticSearchUser && elasticSearchPass) {
181
+ var auth = Base64.encode( elasticSearchUser + ":" + elasticSearchPass );
182
+ var basicAuth = "Basic " + auth;
183
+ headers[ "Authorization" ] = basicAuth;
184
+ }
185
+ var searchUrl = elasticSearchUrl + "/is1erp/_doc/_search";
186
+
187
+ var sndTxt = JSON.stringify( q );
188
+ var s = HttpUtils.postRaw( searchUrl, sndTxt, headers );
189
+ var result = JSON.parse( s );
190
+
191
+
192
+ var elasticSearchUrl = $.getEnv( "elasticSearchUrl" );
193
+
194
+ var headers = { "Content-Type": "application/json;charset=utf-8" };
195
+ var elasticSearchUser = $.getEnv( "elasticSearchUser" );
196
+ var elasticSearchPass = $.getEnv( "elasticSearchPass" );
197
+ if (elasticSearchUser && elasticSearchPass) {
198
+ var auth = Base64.encode( elasticSearchUser + ":" + elasticSearchPass );
199
+ var basicAuth = "Basic " + auth;
200
+ headers[ "Authorization" ] = basicAuth;
201
+ }
202
+ var searchUrl = elasticSearchUrl + "/@projectCode/_search";
203
+
204
+ var sndTxt = JSON.stringify( q );
205
+ $.log("export.jsx")
206
+ $.log(sndTxt)
207
+
208
+ var s = HttpUtils.postRaw( searchUrl, sndTxt, headers );
209
+ $.log(s);
210
+ var result = JSON.parse( s );
211
+ var total = result.hits.total.value;
212
+
213
+ var taskInfo = @projectCodeService.getExportTaskInfo( taskInfoId );
214
+ taskInfo.total = total;
215
+ taskInfo.lastTime = new Date().getTime();
216
+ taskInfo.processState = "processing";
217
+ taskInfo.msg = "获取导出总数成功......";
218
+ taskInfo.percent = "20";
219
+
220
+ @projectCodeService.updateExportTaskInfo( taskInfoId, taskInfo );
221
+
222
+ q.size = total;
223
+
224
+ var sndTxt = JSON.stringify( q );
225
+ $.log('second times=============' + sndTxt);
226
+ var s = HttpUtils.postRaw( searchUrl, sndTxt, headers );
227
+ $.log('second times=============' + s);
228
+ var result = JSON.parse( s );
229
+
230
+ var hits = result.hits.hits;
231
+ var objs = hits.map( function (hit){
232
+ return hit._source
233
+ } );
234
+
235
+ var meta = spec[ "#meta" ];
236
+
237
+ var rows = [];
238
+ var row = [];
239
+
240
+ var groupings = [];
241
+
242
+ var mainFields = [];
243
+ var subFields = [];
244
+
245
+ var exConfig = null;
246
+ if (meta.export) {
247
+ meta.export.forEach(function(config){
248
+ if(config.key == exportKey){
249
+ exConfig = config;
250
+ }
251
+ });
252
+ if (exConfig && exConfig.fields) {
253
+ var fields = getMainAndSubFields(exConfig);
254
+ $.log("getMainAndSubFields=" + JSON.stringify(fields));
255
+ mainFields = fields[0];
256
+ subFields = fields[1];
257
+
258
+ if(mainFields.length>0){
259
+ row.push(exConfig.mainTitleFormat);
260
+ mainFields.forEach( function (f){
261
+ row.push( "s"+f.fieldLabel );
262
+ } );
263
+ rows.push(row);
264
+ }
265
+ else{
266
+ //写入子记录的title一次
267
+ row.push(exConfig.subTitleFormat);
268
+ subFields.forEach( function (spec){
269
+ row.push( "s" + spec.fieldLabel ); //子记录title
270
+ } );
271
+ rows.push(row);
272
+ }
273
+
274
+ var subTitleInterval = exConfig.subTitleInterval || 9999999;
275
+ objs.forEach( function (obj,objIdx){
276
+ if(mainFields.length>0){
277
+ var row = [];
278
+ row.push(exConfig.mainRecordFormat);
279
+ mainFields.forEach( function (f){
280
+ if(!f.key){
281
+ row.push('null');
282
+ }
283
+ else{
284
+
285
+ var value = @projectCodeService.getValue( f.key, obj );
286
+ $.log("getValue:" + f.key+":" +value);
287
+ value = normalizeValue(value,f);
288
+ row.push( value );
289
+ }
290
+
291
+ } );
292
+ rows.push( row );
293
+ }
294
+ //写入子item的title
295
+ if (subFields.length>0) {
296
+ var row = [];
297
+ var grouping = [];
298
+ if(mainFields.length>0 && (objIdx % subTitleInterval)==0){
299
+ //当有主记录的时候才写入子记录的Title
300
+ row.push(exConfig.subTitleFormat);
301
+ subFields.forEach( function (spec){
302
+ row.push( "s" +spec.fieldLabel ); //子记录title
303
+ } );
304
+ rows.push( row );
305
+ grouping[ 0 ] = rows.length - 1;
306
+ }
307
+ var items = obj[exConfig.items.name];
308
+ items && items.forEach && items.forEach( function (item){
309
+ var row = [];
310
+ row.push(exConfig.subRecordFormat);
311
+ subFields.forEach( function (spec){
312
+ if(spec.isItemField){
313
+ var value = item[ spec.origKey ];
314
+ value = normalizeValue(value,spec);
315
+ row.push( value );
316
+ }
317
+ else{
318
+ if(spec.key){
319
+ var value = @projectCodeService.getValue( spec.key, obj );
320
+ value = normalizeValue(value,spec);
321
+ row.push(value);
322
+ }
323
+ else{
324
+ row.push("")
325
+ }
326
+
327
+ }
328
+ } );
329
+ rows.push( row );
330
+ } );
331
+ if(mainFields.length>0){
332
+ grouping[ 1 ] = rows.length - 1;
333
+ groupings.push( grouping );
334
+ }
335
+ }
336
+ } );
337
+ }
338
+
339
+ var taskInfo = @projectCodeService.getExportTaskInfo( taskInfoId );
340
+ taskInfo.processState = "success";
341
+ taskInfo.percent = 70;
342
+ taskInfo.lastTime = new Date().getTime();
343
+ taskInfo.msg = "获取数据记录完成";
344
+ $.log("rows======" + JSON.stringify(rows));
345
+ var fileId = Excel.createExcel( rows, groupings, "export" );
346
+ var taskInfo = @projectCodeService.getExportTaskInfo( taskInfoId );
347
+ taskInfo.processState = "success";
348
+ taskInfo.percent = 100;
349
+ taskInfo.fileId = fileId;
350
+ taskInfo.lastTime = new Date().getTime();
351
+ taskInfo.msg = "生成Excel文件成功";
352
+ @projectCodeService.updateExportTaskInfo(taskInfoId, taskInfo );
353
+ }
354
+ }
355
+ )();
356
+
357
+
358
+
359
+
360
+
361
+
362
+
363
+
364
+
365
+
366
+