owl-cli 7.12.0 → 7.14.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 (37) hide show
  1. package/examples/models/owlsys/systemAdmin/app_fields.json +48 -0
  2. package/examples/models/owlsys/systemAdmin/app_plugins.json +44 -0
  3. package/examples/models/owlsys/systemAdmin/app_sections.json +64 -0
  4. package/examples/models/owlsys/systemAdmin/apps/api/src/plugins/refresh_apps.jsx +663 -0
  5. package/examples/models/owlsys/systemAdmin/apps.json +101 -0
  6. package/examples/models/owlsys/systemAdmin/backendSession.json +52 -0
  7. package/examples/models/owlsys/systemAdmin/batchImport.json +54 -0
  8. package/examples/models/owlsys/systemAdmin/batch_import/api/src/plugins/addImport.jsx +75 -0
  9. package/examples/models/owlsys/systemAdmin/batch_import/api/src/tasks/doImportTask.jsx +130 -0
  10. package/examples/models/owlsys/systemAdmin/change_log.json +70 -0
  11. package/examples/models/owlsys/systemAdmin/change_logs/api/src/services/modelService.jsx +1096 -0
  12. package/examples/models/owlsys/systemAdmin/common_views/api/src/views/product_basic_info_default.jsx +280 -0
  13. package/examples/models/owlsys/systemAdmin/common_views/api/src/views/product_basic_info_edit.jsx +380 -0
  14. package/examples/models/owlsys/systemAdmin/common_views.json +32 -0
  15. package/examples/models/owlsys/systemAdmin/download_template.json +45 -0
  16. package/examples/models/owlsys/systemAdmin/error_logs/dispatch_order_errors.json +61 -0
  17. package/examples/models/owlsys/systemAdmin/excel_templates.json +60 -0
  18. package/examples/models/owlsys/systemAdmin/frontendSession.json +44 -0
  19. package/examples/models/owlsys/systemAdmin/obj_permission.json +66 -0
  20. package/examples/models/owlsys/systemAdmin/org_setting.json +188 -0
  21. package/examples/models/owlsys/systemAdmin/param.json +29 -0
  22. package/examples/models/owlsys/systemAdmin/process_job.json +94 -0
  23. package/examples/models/owlsys/systemAdmin/process_job_checklog.json +66 -0
  24. package/examples/models/owlsys/systemAdmin/process_job_log.json +34 -0
  25. package/examples/models/owlsys/systemAdmin/roleOptions.json +36 -0
  26. package/examples/models/owlsys/systemAdmin/sensitive_keywords.json +58 -0
  27. package/examples/models/owlsys/systemAdmin/server_token.json +38 -0
  28. package/examples/models/owlsys/systemAdmin/session.json +51 -0
  29. package/examples/models/owlsys/systemAdmin/task_version.json +60 -0
  30. package/examples/models/owlsys/systemAdmin/taskinfo.json +38 -0
  31. package/examples/models/owlsys/systemAdmin/tasks/api/src/plugins/doRunTask.jsx +32 -0
  32. package/examples/models/owlsys/systemAdmin/tasks.json +43 -0
  33. package/examples/owlsysApps/owlPasswordService/build.xml +4 -3
  34. package/package.json +1 -1
  35. /package/examples/models/owlsys/{permissions → systemAdmin}/permission.json +0 -0
  36. /package/examples/models/owlsys/{permissions → systemAdmin}/roles.json +0 -0
  37. /package/examples/models/owlsys/{permissions → systemAdmin}/tablelevelpermission.json +0 -0
@@ -0,0 +1,1096 @@
1
+ //#import pigeon.js
2
+ //#import eventBus.js
3
+ //#import Util.js
4
+ //#import base64.js
5
+ //#import HttpUtil.js
6
+ //#import jobs.js
7
+ //#import DigestUtil.js
8
+ //#import kafkautil.js
9
+ //#import @services/dblayer.jsx
10
+ //#import @handlers/include/diff.jsx
11
+
12
+ function trim(s){
13
+ if(s){
14
+ return s.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
15
+ }
16
+ return ""
17
+ }
18
+
19
+ var owl_change_logsService = (function (pigeon) {
20
+ var objPrefix = 'owl_change_logs'
21
+ var listPrefix = 'owl_change_logs'
22
+
23
+ var spec = {"id":"string(12),disabled:true;id","nv":"number(10),disabled:true;新版本","ov":"number(10),disabled:true;旧版本","oid":"string(12),disable:true,searchable:true;对象id","ot":"string(12),disable:true;对象类型","ts":"date,disabled:true,searchable:true;发生时间","uid":"string(12),disabled:true;修改者","cli":"choice,values:pcadmin_pc后台/h5admin_h5后台/h5_h5前台/appadmin_app后台/jobs_自动进程;修改方式","jobId":"string(12);jobId","diff":[{"#meta":{"fieldLabel":"修改"},"type":"choice,values:changed_修改/added_添加/deleted;变动类型","fieldKey":"string(12);字段","fieldType":"choice,values:array_列表/other_其他;类型","parentKeys":"array,subtype:string;父字段","oldv":"string(12);旧数据","newv":"string(12);新数据","diff":[{"#meta":{"fieldLabel":"修改"},"type":"choice,values:added_添加/deleted_删除;修改类型","r":"object;数据行"}]}],"_t":"change_logs","#meta":{"push":false,"rem":"修改日志","projectName":"change_logs","parent":["platform"],"visitType":["platform"],"pos":100,"group":{"id":"systemadmin","name":"系统管理","icon":"setting","pos":30},"export":[{"label":"导出完整","mainTitleFormat":{"background":"#474747","color":"#cccccc"},"subTitleFormat":{"background":"#777777","color":"#ffffff"},"subRecordFormat":{"background":"#ffffff","color":"#000000"},"mainRecordFormat":{"background":"#555555","color":"#FFFFFF"},"key":"completeDoc","fields":["*"]}]}}
24
+
25
+ var formSpecs = {"meta":{"push":false,"rem":"修改日志","projectName":"change_logs","parent":["platform"],"visitType":["platform"],"pos":100,"group":{"id":"systemadmin","name":"系统管理","icon":"setting","pos":30},"export":[{"label":"导出完整","mainTitleFormat":{"background":"#474747","color":"#cccccc"},"subTitleFormat":{"background":"#777777","color":"#ffffff"},"subRecordFormat":{"background":"#ffffff","color":"#000000"},"mainRecordFormat":{"background":"#555555","color":"#FFFFFF"},"key":"completeDoc","fields":["*"]}]},"_ft":"subForm","fields":[{"fieldType":"string","fieldSize":12,"disabled":"true","fieldLabel":"id","_ft":"field","key":"id","origKey":"id"},{"fieldType":"number","fieldSize":10,"disabled":"true","fieldLabel":"新版本","_ft":"field","key":"nv","origKey":"nv"},{"fieldType":"number","fieldSize":10,"disabled":"true","fieldLabel":"旧版本","_ft":"field","key":"ov","origKey":"ov"},{"fieldType":"string","fieldSize":12,"disable":"true","searchable":"true","fieldLabel":"对象id","_ft":"field","key":"oid","origKey":"oid"},{"fieldType":"string","fieldSize":12,"disable":"true","fieldLabel":"对象类型","_ft":"field","key":"ot","origKey":"ot"},{"fieldType":"date","disabled":"true","searchable":"true","fieldLabel":"发生时间","_ft":"field","key":"ts","origKey":"ts"},{"fieldType":"string","fieldSize":12,"disabled":"true","fieldLabel":"修改者","_ft":"field","key":"uid","origKey":"uid"},{"fieldType":"choice","values":"pcadmin_pc后台/h5admin_h5后台/h5_h5前台/appadmin_app后台/jobs_自动进程","options":[["pcadmin","pc后台"],["h5admin","h5后台"],["h5","h5前台"],["appadmin","app后台"],["jobs","自动进程"]],"fieldLabel":"修改方式","_ft":"field","key":"cli","origKey":"cli"},{"fieldType":"string","fieldSize":12,"fieldLabel":"jobId","_ft":"field","key":"jobId","origKey":"jobId"},{"meta":{"fieldLabel":"修改"},"_ft":"array","fields":[{"fieldType":"choice","values":"changed_修改/added_添加/deleted","options":[["changed","修改"],["added","添加"],["deleted"]],"fieldLabel":"变动类型","_ft":"field","key":"diff.type","origKey":"type"},{"fieldType":"string","fieldSize":12,"fieldLabel":"字段","_ft":"field","key":"diff.fieldKey","origKey":"fieldKey"},{"fieldType":"choice","values":"array_列表/other_其他","options":[["array","列表"],["other","其他"]],"fieldLabel":"类型","_ft":"field","key":"diff.fieldType","origKey":"fieldType"},{"fieldType":"array","subtype":"string","fieldLabel":"父字段","_ft":"field","key":"diff.parentKeys","origKey":"parentKeys"},{"fieldType":"string","fieldSize":12,"fieldLabel":"旧数据","_ft":"field","key":"diff.oldv","origKey":"oldv"},{"fieldType":"string","fieldSize":12,"fieldLabel":"新数据","_ft":"field","key":"diff.newv","origKey":"newv"},{"meta":{"fieldLabel":"修改"},"_ft":"array","fields":[{"fieldType":"choice","values":"added_添加/deleted_删除","options":[["added","添加"],["deleted","删除"]],"fieldLabel":"修改类型","_ft":"field","key":"diff.diff.type","origKey":"type"},{"fieldType":"object","fieldLabel":"数据行","_ft":"field","key":"diff.diff.r","origKey":"r"}],"tab":"99","fieldLabel":"修改","key":"diff.diff","origKey":"diff"}],"tab":"99","fieldLabel":"修改","key":"diff","origKey":"diff"}],"tab":"99","fieldLabel":"请完善资料"}
26
+
27
+ var flattenedSpecs = {"mainFields":[{"fieldType":"string","fieldSize":12,"disabled":"true","fieldLabel":"id","_ft":"field","key":"id","origKey":"id"},{"fieldType":"number","fieldSize":10,"disabled":"true","fieldLabel":"新版本","_ft":"field","key":"nv","origKey":"nv"},{"fieldType":"number","fieldSize":10,"disabled":"true","fieldLabel":"旧版本","_ft":"field","key":"ov","origKey":"ov"},{"fieldType":"string","fieldSize":12,"disable":"true","searchable":"true","fieldLabel":"对象id","_ft":"field","key":"oid","origKey":"oid"},{"fieldType":"string","fieldSize":12,"disable":"true","fieldLabel":"对象类型","_ft":"field","key":"ot","origKey":"ot"},{"fieldType":"date","disabled":"true","searchable":"true","fieldLabel":"发生时间","_ft":"field","key":"ts","origKey":"ts"},{"fieldType":"string","fieldSize":12,"disabled":"true","fieldLabel":"修改者","_ft":"field","key":"uid","origKey":"uid"},{"fieldType":"choice","values":"pcadmin_pc后台/h5admin_h5后台/h5_h5前台/appadmin_app后台/jobs_自动进程","options":[["pcadmin","pc后台"],["h5admin","h5后台"],["h5","h5前台"],["appadmin","app后台"],["jobs","自动进程"]],"fieldLabel":"修改方式","_ft":"field","key":"cli","origKey":"cli"},{"fieldType":"string","fieldSize":12,"fieldLabel":"jobId","_ft":"field","key":"jobId","origKey":"jobId"}],"details":[{"name":"diff","fields":[{"fieldType":"choice","values":"changed_修改/added_添加/deleted","options":[["changed","修改"],["added","添加"],["deleted"]],"fieldLabel":"变动类型","_ft":"field","key":"diff.type","origKey":"type"},{"fieldType":"string","fieldSize":12,"fieldLabel":"字段","_ft":"field","key":"diff.fieldKey","origKey":"fieldKey"},{"fieldType":"choice","values":"array_列表/other_其他","options":[["array","列表"],["other","其他"]],"fieldLabel":"类型","_ft":"field","key":"diff.fieldType","origKey":"fieldType"},{"fieldType":"array","subtype":"string","fieldLabel":"父字段","_ft":"field","key":"diff.parentKeys","origKey":"parentKeys"},{"fieldType":"string","fieldSize":12,"fieldLabel":"旧数据","_ft":"field","key":"diff.oldv","origKey":"oldv"},{"fieldType":"string","fieldSize":12,"fieldLabel":"新数据","_ft":"field","key":"diff.newv","origKey":"newv"}],"field":{"meta":{"fieldLabel":"修改"},"_ft":"array","fields":[{"fieldType":"choice","values":"changed_修改/added_添加/deleted","options":[["changed","修改"],["added","添加"],["deleted"]],"fieldLabel":"变动类型","_ft":"field","key":"diff.type","origKey":"type"},{"fieldType":"string","fieldSize":12,"fieldLabel":"字段","_ft":"field","key":"diff.fieldKey","origKey":"fieldKey"},{"fieldType":"choice","values":"array_列表/other_其他","options":[["array","列表"],["other","其他"]],"fieldLabel":"类型","_ft":"field","key":"diff.fieldType","origKey":"fieldType"},{"fieldType":"array","subtype":"string","fieldLabel":"父字段","_ft":"field","key":"diff.parentKeys","origKey":"parentKeys"},{"fieldType":"string","fieldSize":12,"fieldLabel":"旧数据","_ft":"field","key":"diff.oldv","origKey":"oldv"},{"fieldType":"string","fieldSize":12,"fieldLabel":"新数据","_ft":"field","key":"diff.newv","origKey":"newv"},{"meta":{"fieldLabel":"修改"},"_ft":"array","fields":[{"fieldType":"choice","values":"added_添加/deleted_删除","options":[["added","添加"],["deleted","删除"]],"fieldLabel":"修改类型","_ft":"field","key":"diff.diff.type","origKey":"type"},{"fieldType":"object","fieldLabel":"数据行","_ft":"field","key":"diff.diff.r","origKey":"r"}],"tab":"99","fieldLabel":"修改","key":"diff.diff","origKey":"diff"}],"tab":"99","fieldLabel":"修改","key":"diff","origKey":"diff"},"ctx":{"parentField":{"meta":{"fieldLabel":"修改"},"_ft":"array","fields":[{"fieldType":"choice","values":"changed_修改/added_添加/deleted","options":[["changed","修改"],["added","添加"],["deleted"]],"fieldLabel":"变动类型","_ft":"field","key":"diff.type","origKey":"type"},{"fieldType":"string","fieldSize":12,"fieldLabel":"字段","_ft":"field","key":"diff.fieldKey","origKey":"fieldKey"},{"fieldType":"choice","values":"array_列表/other_其他","options":[["array","列表"],["other","其他"]],"fieldLabel":"类型","_ft":"field","key":"diff.fieldType","origKey":"fieldType"},{"fieldType":"array","subtype":"string","fieldLabel":"父字段","_ft":"field","key":"diff.parentKeys","origKey":"parentKeys"},{"fieldType":"string","fieldSize":12,"fieldLabel":"旧数据","_ft":"field","key":"diff.oldv","origKey":"oldv"},{"fieldType":"string","fieldSize":12,"fieldLabel":"新数据","_ft":"field","key":"diff.newv","origKey":"newv"},{"meta":{"fieldLabel":"修改"},"_ft":"array","fields":[{"fieldType":"choice","values":"added_添加/deleted_删除","options":[["added","添加"],["deleted","删除"]],"fieldLabel":"修改类型","_ft":"field","key":"diff.diff.type","origKey":"type"},{"fieldType":"object","fieldLabel":"数据行","_ft":"field","key":"diff.diff.r","origKey":"r"}],"tab":"99","fieldLabel":"修改","key":"diff.diff","origKey":"diff"}],"tab":"99","fieldLabel":"修改","key":"diff","origKey":"diff"}}},{"name":"diff.diff","fields":[{"fieldType":"choice","values":"added_添加/deleted_删除","options":[["added","添加"],["deleted","删除"]],"fieldLabel":"修改类型","_ft":"field","key":"diff.diff.type","origKey":"type"},{"fieldType":"object","fieldLabel":"数据行","_ft":"field","key":"diff.diff.r","origKey":"r"}],"field":{"meta":{"fieldLabel":"修改"},"_ft":"array","fields":[{"fieldType":"choice","values":"added_添加/deleted_删除","options":[["added","添加"],["deleted","删除"]],"fieldLabel":"修改类型","_ft":"field","key":"diff.diff.type","origKey":"type"},{"fieldType":"object","fieldLabel":"数据行","_ft":"field","key":"diff.diff.r","origKey":"r"}],"tab":"99","fieldLabel":"修改","key":"diff.diff","origKey":"diff"},"ctx":{"parentField":{"meta":{"fieldLabel":"修改"},"_ft":"array","fields":[{"fieldType":"choice","values":"added_添加/deleted_删除","options":[["added","添加"],["deleted","删除"]],"fieldLabel":"修改类型","_ft":"field","key":"diff.diff.type","origKey":"type"},{"fieldType":"object","fieldLabel":"数据行","_ft":"field","key":"diff.diff.r","origKey":"r"}],"tab":"99","fieldLabel":"修改","key":"diff.diff","origKey":"diff"}}}]}
28
+
29
+ var idFunc = null
30
+ var lockFunc = null
31
+
32
+ var f = {
33
+ /**
34
+ * 添加
35
+ */
36
+ getId: function (data) {
37
+ //默认实现是直接返回一个递增的Id
38
+ //其他实现方式包括从data中获取数据构造出一个Id
39
+ if(data.id){
40
+ return data.id;
41
+ }
42
+ //undefined
43
+ if (idFunc) {
44
+ return objPrefix + '_' + idFunc(data)
45
+ }
46
+ else {
47
+ var seq = pigeon.getId(objPrefix)
48
+ return objPrefix + '_' + seq
49
+ }
50
+ },
51
+
52
+ getLock: function (data) {
53
+ //undefined
54
+ if (lockFunc) {
55
+ return lockFunc(data)
56
+ }
57
+ else {
58
+ return data['id']
59
+ }
60
+ },
61
+
62
+ lock:function(key){
63
+ pigeon.lock(key);
64
+ },
65
+ unlock:function(key){
66
+ pigeon.unlock(key);
67
+ },
68
+
69
+ /**
70
+ * 返回一个树状结构
71
+ * 本函数读进所有的数据进内存,在内存中构造一个树状结构
72
+ * 所以对于大的数据不是很合适
73
+ * 适用范围是中小型电商系统的商品分类数,地区管理等
74
+ *
75
+ */
76
+ getTree(){},
77
+
78
+ getAllListName: function (data) {
79
+ return listPrefix + '_all'
80
+ },
81
+
82
+ getValue: function (fullkey, data) {
83
+ var path = fullkey.split('.')
84
+ var curData = data
85
+ for (var i = 0; i < path.length; i++) {
86
+ var curKey = path[i]
87
+ if (typeof(curData) == 'object' && curData != null) {
88
+ curData = curData[curKey]
89
+ }
90
+ else {
91
+ return null
92
+ }
93
+ }
94
+ return curData
95
+ },
96
+ getField:function(fullKey){
97
+ var matchedField=null;
98
+ f.tranverseFields(formSpecs,function(field,ctx){
99
+ if(field.key===fullKey){
100
+ matchedField = field;
101
+ }
102
+ });
103
+ return matchedField;
104
+ },
105
+
106
+ setValue: function (fullkey, value, data) {
107
+ var path = fullkey.split('.')
108
+ var curData = data
109
+ var objPath = [data]
110
+ for (var i = 0; i < path.length; i++) {
111
+ var curKey = path[i]
112
+ if (i == path.length - 1) {
113
+ curData[curKey] = value
114
+ return
115
+ }
116
+
117
+ var subData = curData[curKey]
118
+ if (!subData) {
119
+ curData[curKey] = value
120
+ return
121
+ }
122
+ curData = subData
123
+ }
124
+
125
+ },
126
+
127
+ getEnvValue: function (v, env) {
128
+ if (!v) {
129
+ return v
130
+ }
131
+ if (v.indexOf('$') == 0) {
132
+ var fullkey = v.substring(1)
133
+ return f.getValue(fullkey, env)
134
+ }
135
+ return v
136
+ },
137
+
138
+
139
+
140
+ getUniqueObj:function(key,value){
141
+ var pigeonKey = objPrefix+ '_' + key + '_' + DigestUtil.md5(value)
142
+ var obj = pigeon.getObject(pigeonKey);
143
+ if(obj==null){
144
+ return null;
145
+ }
146
+ var id = obj.id;
147
+ return pigeon.getObject(id);
148
+ },
149
+
150
+ isDuplicated: function (id, key, value) {
151
+ var pigeonKey = objPrefix + '_' + key + '_' + DigestUtil.md5(value)
152
+ var obj = pigeon.getObject(pigeonKey);
153
+ if (obj == null) {
154
+ return false
155
+ }
156
+ if (obj.id === id) {
157
+ return false
158
+ }
159
+ return true
160
+ },
161
+
162
+
163
+
164
+ saveUniqueValue: function (objId, key, value) {
165
+ var md5 = DigestUtil.md5(value)
166
+ var pigeonKey = objPrefix + '_' + key + '_' + md5
167
+ var obj = {
168
+ id: objId,
169
+ key: key,
170
+ value: value,
171
+ md5: md5,
172
+ }
173
+ pigeon.saveObject(pigeonKey, obj)
174
+ },
175
+
176
+ removeUniqueValue: function (id, key, value) {
177
+ var md5 = DigestUtil.md5(value)
178
+ var pigeonKey = objPrefix + '_' + key + '_' + md5
179
+ pigeon.saveObject(pigeonKey, null)
180
+ },
181
+
182
+ validate: function (data, env) {
183
+ //TODO:需要实现validate 服务器端
184
+ var fields = flattenedSpecs.mainFields
185
+ for (var i = 0; i < fields.length; i++) {
186
+ var field = fields[i]
187
+ var value = f.getValue(field.key, data)
188
+ if(value==null || typeof(value)=='undefined'){
189
+ value = field.defaultValue;
190
+ f.setValue(field.key, value, data)
191
+ }
192
+ if (typeof(value) == 'string' && value.indexOf('$') == 0) {
193
+ value = f.getEnvValue(value, env)
194
+ f.setValue(field.key, value, data)
195
+ }
196
+ if((value==null || typeof(value)=='undefined') && field.autoGen=='true'){
197
+ value =$.getUUID()
198
+ f.setValue(field.key,value,data);
199
+ }
200
+ if ((value==null || typeof(value)=='undefined') && field.required == 'true') {
201
+ return {'state': 'err', msg: field.fieldLabel + '不能为空。', code: 'required'}
202
+ }
203
+
204
+ //对于unique的字段,检查有没有重复
205
+ if (field.unique === 'true') {
206
+ if (f.isDuplicated(data.id, field.key, value)) {
207
+ $.log("duplicated,key=" + field.key + ",value=" + value + ",call removeUniqueValue(data.id, field.key, value)");
208
+ return {'state': 'err', msg: field.fieldLabel + '不能重复。' + value, code: 'duplicated'}
209
+ }
210
+ }
211
+ }
212
+
213
+ var arrFields = flattenedSpecs.details;
214
+ for(var j=0; j<arrFields.length; j++){
215
+ var arrFieldInfo = arrFields[j];
216
+ var rows = f.getValue(arrFieldInfo.name,data);
217
+ if(rows){
218
+ for(var k=0; k<rows.length; k++){
219
+ var row = rows[k];
220
+ for(var l=0; l<arrFieldInfo.fields.length; l++){
221
+ var subField = arrFieldInfo.fields[l];
222
+ var value = row[subField.origKey];
223
+ if(value==null || typeof value=='undefined'){
224
+ value = subField.defaultValue;
225
+ row[subField.origKey] = value;
226
+ }
227
+ if (typeof(value) == 'string' && value.indexOf('$') == 0) {
228
+ value = f.getEnvValue(value, env)
229
+ row[subField.origKey] = value;
230
+ }
231
+ if((value==null || typeof(value)=='undefined') && subField.autoGen=='true'){
232
+ value = $.getUUID()
233
+ row[subField.origKey] = value;
234
+ }
235
+ if ((value==null || typeof(value)=='undefined') && subField.required == 'true') {
236
+ return {'state': 'err', msg: arrFieldInfo.field.fieldLabel + '.' + subField.fieldLabel + '不能为空。出错的行数为:' + k, code: 'required'}
237
+ }
238
+ }
239
+ }
240
+ }
241
+ }
242
+ return {'state': 'ok'}
243
+ },
244
+
245
+ saveUniqueFields: function (data, env) {
246
+ var fields = flattenedSpecs.mainFields
247
+ for (var i = 0; i < fields.length; i++) {
248
+ var field = fields[i]
249
+ //对于unique的字段,检查有没有重复
250
+ if (field.unique === 'true') {
251
+ var value = f.getValue(field.key, data)
252
+ if (!value || (typeof(value) == 'string' && value.indexOf('$') == 0)) {
253
+ value = f.getEnvValue(field.defaultValue, env)
254
+ if (value) {
255
+ f.setValue(field.key, value, data)
256
+ }
257
+ }
258
+ if (!value && field.required == 'true') {
259
+ throw {'state': 'err', msg: field.fieldLabel + '不能为空。', code: 'required'}
260
+ }
261
+
262
+ if(value && typeof(value)=='string'){
263
+ if (f.isDuplicated(data.id, field.key, value)) {
264
+ throw {'state': 'err', msg: field.fieldLabel + '不能重复。', code: 'duplicated'}
265
+ }
266
+
267
+ //对于没有重复的数据,保存起来
268
+ f.saveUniqueValue(data.id, field.key, value)
269
+ }
270
+
271
+ }
272
+ }
273
+ },
274
+
275
+ removeUniqueFields: function (data, env) {
276
+ var fields = flattenedSpecs.mainFields
277
+ for (var i = 0; i < fields.length; i++) {
278
+ var field = fields[i]
279
+ //对于unique的字段,检查有没有重复
280
+ if (field.unique === 'true') {
281
+ var value = f.getValue(field.key, data)
282
+ if (!value || (typeof(value) == 'string' && value.indexOf('$') == 0)) {
283
+ value = f.getEnvValue(field.defaultValue, env)
284
+ if (value) {
285
+ f.setValue(field.key, value, data)
286
+ }
287
+ }
288
+ if(value && typeof(value)=='string'){
289
+ f.removeUniqueValue(data.id, field.key, value)
290
+ }
291
+ }
292
+ }
293
+ },
294
+
295
+ addToList: function (data) {
296
+ var key = pigeon.getRKey(data['owl_createTime'], 13)
297
+ pigeon.addToList(f.getAllListName(), key, data.id)
298
+
299
+ var t = data['owl_createTime']
300
+ var d = new Date(t)
301
+ var year = d.getFullYear()
302
+ var month = d.getMonth() + 1
303
+ var day = d.getDate()
304
+
305
+ var listName = listPrefix + '_' + year + '_' + month + '_' + day
306
+
307
+ pigeon.addToList(listName, key, data.id)
308
+ //如果这里有子系统的Id则加入子系统list
309
+ if (data['subplatformId']) {
310
+ var listName = listPrefix + '_' + data['subplatformId']
311
+ pigeon.addToList(listName, key, data.id)
312
+ }
313
+
314
+ //如果这里有店铺id,则加入店铺list
315
+ if (data['shopId']) {
316
+ var listName = listPrefix + '_' + data['shopId']
317
+ pigeon.addToList(listName, key, data.id)
318
+ }
319
+ },
320
+
321
+ tranverseFields: function (formSpec, callback, ctx) {
322
+ formSpec.fields.forEach(function (field) {
323
+ if (field['_ft'] == 'field') {
324
+ callback(field, ctx)
325
+ }
326
+ else if (field['_ft'] == 'subform') {
327
+ var context = {parentField: field}
328
+ f.tranverseFields(field, callback, context)
329
+ }
330
+ else if (field['_ft'] == 'array') {
331
+ var context = {parentField: field}
332
+ f.tranverseFields(field, callback, context)
333
+ }
334
+ })
335
+ },
336
+
337
+ normalizeValue: function (value, spec) {
338
+ if (value == null) {
339
+ return null
340
+ }
341
+ switch (spec.fieldType) {
342
+ case 'string':
343
+ return value + ''
344
+ case 'number':
345
+ if (isNaN(value)) {
346
+ return null
347
+ }
348
+ else {
349
+ value = Number(value)
350
+ return value
351
+ }
352
+ case 'date':
353
+ return Date(value)
354
+ case 'choice':
355
+ return value
356
+ default:
357
+ return value
358
+ }
359
+ },
360
+
361
+
362
+ getNormalizedDoc: function (data) {
363
+ var obj = JSON.parse(JSON.stringify(data))
364
+ f.tranverseFields(formSpecs, function (field, ctx) {
365
+ if (ctx.parentField && ctx.parentField._ft == 'array') {
366
+ var items = f.getValue(ctx.parentField.key, obj)
367
+ if (items) {
368
+ for (var i = 0; i < items.length; i++) {
369
+ var item = items[i]
370
+ var value = item[field.origKey]
371
+ value = f.normalizeValue(value, field)
372
+ item[field.origKey] = value
373
+ }
374
+ }
375
+ }
376
+ else {
377
+ var value = f.getValue(field.key, obj)
378
+ value = f.normalizeValue(value, field)
379
+ f.setValue(field.key, value, obj)
380
+ }
381
+ }, {})
382
+ return obj
383
+ },
384
+
385
+ index: function (doc) {
386
+ var data = f.getNormalizedDoc(doc);
387
+ var m = [];
388
+ m.push(data.m);
389
+ if (data['subplatformId']) {
390
+ m.push(data['subplatformId']);
391
+ }
392
+ if (data['shopId']) {
393
+ m.push(data['shopId'])
394
+ }
395
+ if(data['shop_id']){
396
+ m.push(data['shop_id'])
397
+ }
398
+ data._m = m;
399
+ var elasticSearchUrl = $.getEnv('elasticSearchUrl')
400
+
401
+ var headers = {'Content-Type': 'application/json;charset=utf-8'}
402
+ var elasticSearchUser = $.getEnv('elasticSearchUser')
403
+ var elasticSearchPass = $.getEnv('elasticSearchPass')
404
+ if (elasticSearchUser && elasticSearchPass) {
405
+ var auth = Base64.encode(elasticSearchUser + ':' + elasticSearchPass)
406
+ var basicAuth = 'Basic ' + auth
407
+ headers['Authorization'] = basicAuth
408
+ }
409
+ var searchUrl = elasticSearchUrl + '/owl_change_logs/_doc/' + data.id
410
+ var sndTxt = JSON.stringify(data)
411
+ var s = HttpUtils.postRaw(searchUrl, sndTxt, headers)
412
+ s = JSON.parse(s)
413
+ if (!s.result) {
414
+ $.log(data.id + ',index error:' + JSON.stringify(s))
415
+ }
416
+ else {
417
+ // $.log('index ok...')
418
+ }
419
+ },
420
+
421
+ updateParentPath(treeNode){
422
+ /*工具类,用于更新对应的parentPathIds和pathPathNames*/
423
+ var parentId = treeNode.parent_id;
424
+ var parentPathIds = [];
425
+ var parentPathNames = [];
426
+ //获得parentId对应的node
427
+ while(parentId && parentId!=='0'){
428
+ var parentNode = f.get(parentId);
429
+ if(parentNode){
430
+ parentPathIds.push(parentNode.id);
431
+ parentPathNames.push(parentNode.name);
432
+ parentId = parentNode.parent_id;
433
+ }
434
+ }
435
+
436
+ treeNode.parentPathIds = parentPathIds;
437
+ treeNode.parentPathNames = parentPathNames;
438
+
439
+ },
440
+ add: function (data, env) {
441
+ env = env || {}
442
+ var ret = f.validate(data, env)
443
+ if(ret.state!='ok'){
444
+ throw JSON.stringify(ret);
445
+ }
446
+
447
+ data.id = f.getId(data)
448
+ data['owl_createTime'] = new Date().getTime();
449
+ data['owl_modifyTime'] = new Date().getTime();
450
+ data['_v'] = 0
451
+ data['_t'] = spec['_t']
452
+ try {
453
+ var meta = spec['#meta'];
454
+ if(meta.isTree){
455
+ f.updateParentPath(data);
456
+ }
457
+ pigeon.lock(f.getLock(data))
458
+ EventBusService.fire(spec['_t'] + '_add_before', {data: data, env: env})
459
+ f.saveUniqueFields(data, env)
460
+ pigeon.saveObject(data.id, data)
461
+ f.addToList(data)
462
+ f.index(data)
463
+
464
+ if(meta && meta.enableJDBC){
465
+ var sqls = insertObject(data);
466
+ // $.log(sqls.join(";\n"));
467
+ }
468
+ // $.log("add,meta.push=" +meta.push + ",id=" + data.id);
469
+ if(meta && meta.push){
470
+ KafkaUtil.send('owlchange',JSON.stringify(data),data.id);
471
+ }
472
+ EventBusService.fire(spec['_t'] + '_add_after', {data: data, env: env})
473
+ return data
474
+ }
475
+ finally {
476
+ pigeon.unlock(f.getLock(data))
477
+ }
478
+
479
+ },
480
+
481
+ get: function (id,includeDeleted) {
482
+ var meta = spec['#meta'];
483
+ if(meta && meta.push) {
484
+ var cachedObj = appData.getObservableObject(id);
485
+ if (cachedObj) {
486
+ if (cachedObj.del === 'T' && !includeDeleted) {
487
+ return null;
488
+ }
489
+ return cachedObj;
490
+ }
491
+ var obj = pigeon.getObject(id)
492
+ if(obj){
493
+ appData.setObservableObject(id,obj);
494
+ }
495
+ else{
496
+ appData.removeObservableObject(id);
497
+ }
498
+
499
+ if (obj && obj.del === 'T' && !includeDeleted) {
500
+ return null;
501
+ }
502
+ return obj;
503
+ }
504
+ else{
505
+ var obj = pigeon.getObject(id)
506
+ if (obj && obj.del === 'T' && !includeDeleted) {
507
+ return null;
508
+ }
509
+ return obj;
510
+ }
511
+ },
512
+
513
+ getEx:function(id,refresh){
514
+ if(refresh){
515
+ var obj = pigeon.getObject(id);
516
+
517
+ if(obj){
518
+ appData.setObservableObject(id,obj);
519
+ }
520
+ else{
521
+ appData.removeObservableObject(id);
522
+ }
523
+ if(obj && obj.del==='T'){
524
+ return null;
525
+ }
526
+ return obj;
527
+ }
528
+ else{
529
+ return f.get(id);
530
+ }
531
+ },
532
+
533
+ saveTempData: function (key, data) {
534
+ return pigeon.saveObject(objPrefix + key, data)
535
+
536
+ },
537
+
538
+ getTempData: function (key) {
539
+ return pigeon.getObject(objPrefix + key)
540
+ },
541
+
542
+ getObjects: function (ids) {
543
+ return pigeon.getObjects(ids)
544
+ },
545
+
546
+ update: function (data, env) {
547
+ env = env || {}
548
+ var id = data.id
549
+
550
+ try {
551
+ var meta = spec['#meta'];
552
+ if(meta.isTree){
553
+ f.updateParentPath(data);
554
+ }
555
+ pigeon.lock(f.getLock(data))
556
+ var obj = f.get(data.id,true)
557
+ if (!obj) {
558
+ throw {msg: '对象不存在!id=' + data.id, code: 'notFound'}
559
+ }
560
+ if (obj._v != data._v) {
561
+ throw {code: 'concurrentupdate', msg: '对象已经修改过,本次修改被拒绝。old._v=' + obj._v + ',new._v=' + data._v}
562
+ }
563
+ var oldObj = JSON.parse(JSON.stringify(obj))
564
+ //深度合并
565
+ //obj = deepMerge(obj,data);//深度合并会引起 编辑出现bug
566
+ obj = data
567
+ obj['_v'] = obj['_v'] + 1
568
+ f.validate(obj, env)
569
+ data._v = obj._v
570
+ obj.owl_modifyTime=new Date().getTime();
571
+ EventBusService.fire(spec['_t'] + '_update_before', {old: oldObj, data: obj, env: env})
572
+ f.addToList(obj)
573
+ f.removeUniqueFields(oldObj, env)
574
+ pigeon.saveObject(id, obj)
575
+ f.saveUniqueFields(data, env)
576
+ f.index(obj)
577
+
578
+
579
+ var meta = spec['#meta'];
580
+ if(meta && meta.enableJDBC){
581
+ var sqls = updateObject(obj);
582
+ // $.log(sqls.join(";\n"));
583
+ }
584
+ if(meta){
585
+ // $.log("updating meta.push=" + meta.push + ", id=" + obj.id);
586
+ }
587
+
588
+ if(meta && meta.push){
589
+ // $.log("send owlchange," + obj.id)
590
+ KafkaUtil.send('owlchange',JSON.stringify(obj),obj.id);
591
+ }
592
+ EventBusService.fire(spec['_t'] + '_update_after', {old: oldObj, data: obj, env: env})
593
+ return data
594
+ }
595
+ finally {
596
+ pigeon.unlock(f.getLock(data))
597
+ }
598
+ },
599
+
600
+ del: function (id) {
601
+ //只做软删除
602
+ var data = f.get(id,true)
603
+ if (!data) {
604
+ throw '对象不存在!id=' + id
605
+ }
606
+ data.id = id;
607
+ var key = pigeon.getRKey(data['owl_createTime'], 13)
608
+ pigeon.deleteFromList(f.getAllListName(), key, id)
609
+ if (data['subplatformId']) {
610
+ var listName = listPrefix + '_' + data['subplatformId']
611
+ pigeon.deleteFromList(listName, key, id)
612
+ }
613
+
614
+ //如果这里有店铺id,则加入店铺list
615
+ if (data['shopId']) {
616
+ var listName = listPrefix + '_' + data['shopId']
617
+ pigeon.deleteFromList(listName, key, id)
618
+ }
619
+
620
+ var t = data['owl_createTime']
621
+ var d = new Date(t)
622
+ var year = d.getFullYear()
623
+ var month = d.getMonth() + 1
624
+ var day = d.getDate()
625
+
626
+ var listName = listPrefix + '_' + year + '_' + month + '_' + day
627
+
628
+ EventBusService.fire(spec['_t'] + '_delete_before', {data: data})
629
+ pigeon.deleteFromList(listName, key, id)
630
+
631
+ var deletedList = listPrefix + '_deleted'
632
+ pigeon.addToList(deletedList, key, id)
633
+ data.del = 'T'
634
+
635
+ f.index(data)
636
+ pigeon.saveObject(data.id, data)
637
+ f.removeUniqueFields(data, {})
638
+ var meta = spec['#meta'];
639
+
640
+ if(meta && meta.enableJDBC){
641
+ var sqls = deleteObject(data);
642
+ // $.log(sqls.join(";\n"));
643
+ }
644
+
645
+ if(meta){
646
+ // $.log("del meta.push=" + meta.push + ", id=" + data.id);
647
+ }
648
+
649
+ if(meta && meta.push){
650
+ KafkaUtil.send('owlchange',JSON.stringify(data),data.id);
651
+ }
652
+ EventBusService.fire(spec['_t'] + '_delete_after', {data: data})
653
+ },
654
+ getList: function (listName, start, limit) {
655
+ if (!listName) {
656
+ return null
657
+ }
658
+ if (!start) {
659
+ start = 0
660
+ }
661
+ if (!limit) {
662
+ limit = 10
663
+ }
664
+ return pigeon.getListObjects(listName, start, limit)
665
+ },
666
+
667
+ getExportRunningList: function () {
668
+ return listPrefix + '_exportRunning'
669
+ },
670
+
671
+ getExportFinishedList: function () {
672
+ return listPrefix + '_exportFinished'
673
+ },
674
+
675
+ addExportTask: function (query, env) {
676
+ var now = new Date().getTime()
677
+ var taskInfo = {
678
+ loginUser: f.getEnvValue('$loginUser', env),
679
+ submitTime: now,
680
+ startTime: 0,
681
+ processState: 'processing',
682
+ percent: 0,
683
+ _v: 0,
684
+ }
685
+ //这个key如果不多加一个export,会把原有的单据数据覆盖
686
+ var taskInfoId = objPrefix + '_export_' + pigeon.getId()
687
+ var taskId = JobsService.submitExportTask('owl_change_logs', 'tasks/export.jsx', {
688
+ query: query,
689
+ env: env,
690
+ taskInfoId: taskInfoId,
691
+ }, now)
692
+ taskInfo.taskId = '' + taskId
693
+ taskInfo.id = taskInfoId
694
+ var key = pigeon.getRKey(taskInfo.submitTime, 13)
695
+ pigeon.addToList(f.getExportRunningList(), key, taskInfoId)
696
+ pigeon.saveObject(taskInfoId, taskInfo)
697
+
698
+ return taskInfoId
699
+ },
700
+
701
+ addDocExportTask: function (docId, env) {
702
+ var now = new Date().getTime()
703
+ var taskInfo = {
704
+ loginUser: f.getEnvValue('$loginUser', env),
705
+ submitTime: now,
706
+ startTime: 0,
707
+ processState: 'processing',
708
+ percent: 0,
709
+ total: 1,
710
+ _v: 0,
711
+ }
712
+ //这个key如果不多加一个export,会把原有的单据数据覆盖
713
+ var taskInfoId = objPrefix + '_export_' + pigeon.getId()
714
+ var taskId = JobsService.submitExportTask('owl_change_logs', 'tasks/exportDoc.jsx', {
715
+ id: docId,
716
+ env: env,
717
+ taskInfoId: taskInfoId,
718
+ }, now)
719
+ taskInfo.taskId = '' + taskId
720
+ taskInfo.id = taskInfoId
721
+ var key = pigeon.getRKey(taskInfo.submitTime, 13)
722
+ pigeon.addToList(f.getExportRunningList(), key, taskInfoId)
723
+ pigeon.saveObject(taskInfoId, taskInfo)
724
+
725
+ return taskInfoId
726
+ },
727
+
728
+ addZipExportTask : function(env){
729
+ var now = new Date().getTime()
730
+ var taskInfo = {
731
+ loginUser: f.getEnvValue('$loginUser', env),
732
+ submitTime: now,
733
+ startTime: 0,
734
+ processState: 'processing',
735
+ percent: 0,
736
+ total: 0,
737
+ _v: 0,
738
+ }
739
+ //这个key如果不多加一个export,会把原有的单据数据覆盖
740
+ var taskInfoId = objPrefix + '_export_' + pigeon.getId()
741
+ var taskId = JobsService.submitExportTask('owl_change_logs', 'tasks/exportZip.jsx', {
742
+ env: env,
743
+ taskInfoId: taskInfoId,
744
+ }, now)
745
+ taskInfo.taskId = '' + taskId
746
+ taskInfo.id = taskInfoId
747
+ var key = pigeon.getRKey(taskInfo.submitTime, 13)
748
+ pigeon.addToList(f.getExportRunningList(), key, taskInfoId)
749
+ pigeon.saveObject(taskInfoId, taskInfo)
750
+ return taskInfoId
751
+ },
752
+
753
+ getExportTaskInfo: function (taskInfoId) {
754
+ return pigeon.getObject(taskInfoId)
755
+ },
756
+
757
+ updateExportTaskInfo: function (taskInfoId, taskInfo) {
758
+ var oInfo = f.getExportTaskInfo(taskInfoId)
759
+ if (oInfo._v == taskInfo._v) {
760
+ taskInfo._v += 1
761
+ pigeon.saveObject(taskInfoId, taskInfo)
762
+ }
763
+ },
764
+
765
+
766
+ reindexAll: function () {
767
+ var listName = f.getAllListName()
768
+ var count = pigeon.getListSize(listName)
769
+ $.log("reindexAll " + listName);
770
+ var pos = 0
771
+ while (count > 0) {
772
+ var indexCount = 2000
773
+ if (indexCount > count) {
774
+ indexCount = count
775
+ }
776
+ var objs = pigeon.getListObjects(listName, pos, indexCount)
777
+ objs.forEach(function (data) {
778
+ try {
779
+ f.index(data)
780
+ } catch (e) {
781
+ $.log('重建索引异常:' + data.id)
782
+ }
783
+ })
784
+ pos += indexCount
785
+ count -= indexCount
786
+ }
787
+ },
788
+
789
+ getAllSize:function(){
790
+ var listName = f.getAllListName();
791
+ var count = pigeon.getListSize(listName);
792
+ return count;
793
+ },
794
+
795
+ getAllObjects:function(){
796
+ var result = [];
797
+ var listName = f.getAllListName()
798
+ var count = pigeon.getListSize(listName)
799
+ var pos = 0
800
+ while (count > 0) {
801
+ var indexCount = 2000
802
+ if (indexCount > count) {
803
+ indexCount = count
804
+ }
805
+ var objs = pigeon.getListObjects(listName, pos, indexCount)
806
+ result = result.concat(objs);
807
+ pos += indexCount
808
+ count -= indexCount
809
+ }
810
+ return result;
811
+ },
812
+
813
+ getAllObjectsEx:function(from,count){
814
+ var listName = f.getAllListName()
815
+ var allsize = pigeon.getListSize(listName)
816
+ var pos = from
817
+ if(count+pos > allsize){
818
+ count = allsize - pos;
819
+ }
820
+ var objs = pigeon.getListObjects(listName, pos, count)
821
+ return objs;
822
+ },
823
+
824
+ createQuery:function(searchArgs){
825
+ var filters = [];
826
+ for(var k in searchArgs){
827
+ var v = searchArgs[k];
828
+ if(typeof v === 'object' && v.type === 'or'){
829
+ if(Array.isArray(v.args)){
830
+ var shouldClauses = [];
831
+ v.args.forEach(function(q){
832
+ var qFilters = f.createQuery(q);
833
+ if(qFilters.length > 0){
834
+ shouldClauses.push({
835
+ "bool":{
836
+ filters:qFilters
837
+ }
838
+ })
839
+ }
840
+ });
841
+
842
+ filters.push({bool:{should:shouldClauses}});
843
+ }
844
+ else if(v.args && typeof(v.args)=='object'){
845
+ var shouldClauses = [];
846
+ var qFilters = f.createQuery(v.args);
847
+ shouldClauses.push({bool:{filters:qFilters}});
848
+ filters.push({bool:{should:shouldClauses}});
849
+ }
850
+
851
+ }
852
+ else if(typeof(v)=='object' && Array.isArray(v)){
853
+ var range={}
854
+ range[k] = {
855
+ 'gte':v[0],
856
+ 'lte':v[1]
857
+ }
858
+ filters.push({range:range});
859
+ }
860
+ else if(typeof(v)=='object' && v.type==='terms'){
861
+ var terms = {};
862
+ if(v.values){
863
+ terms[k + ".keyword"] = v.values;
864
+ filters.push({terms:terms});
865
+ }
866
+ }
867
+ else{
868
+ var term = {};
869
+ if(typeof v == 'string' ){
870
+ if(v){
871
+ term[k+".keyword"] = trim('' + v)
872
+ filters.push({term:term})
873
+ }
874
+ }
875
+ else if (typeof v == 'number'){
876
+ term[k] = trim('' + v)
877
+ filters.push({term:term})
878
+ }
879
+ }
880
+ }
881
+ return filters;
882
+ },
883
+
884
+ buildQuery:function(m,searchArgs,keyword){
885
+ delete searchArgs.keyword;
886
+ var filters = [];
887
+ var must_not = [{
888
+ term:{
889
+ "del.keyword":'T'
890
+ }
891
+ }];
892
+ for(var k in searchArgs){
893
+
894
+ var v = searchArgs[k];
895
+
896
+ var isNotClause = false;
897
+ if(k.indexOf("!")===0){
898
+ isNotClause = true;
899
+ k = k.substring(1);
900
+ }
901
+ if(typeof v === 'object' && v.type === 'or'){
902
+ var shouldClauses = [];
903
+ if(Array.isArray(v.args)){
904
+ v.args.forEach(function(q){
905
+ var shouldQueries = f.createQuery(q);
906
+ if(shouldQueries.length>0){
907
+ shouldClauses.push({bool:{filter:shouldQueries}});
908
+ }
909
+
910
+ });
911
+ if(isNotClause){
912
+ must_not.push({bool:{should:shouldClauses}});
913
+ }else{
914
+ filters.push({bool:{should:shouldClauses}});
915
+ }
916
+
917
+ }
918
+ else{
919
+ if(v.args && typeof(v.args)==='object'){
920
+ var shouldQueries = f.createQuery(v);
921
+ if(isNotClause){
922
+ must_not.push({bool:{should:shouldClauses}});
923
+ }else{
924
+ filters.push({bool:{should:shouldClauses}});
925
+ }
926
+ }
927
+ }
928
+ }
929
+ else if(typeof(v)=='object' && Array.isArray(v)){
930
+ var range={}
931
+ range[k] = {
932
+ 'gte':v[0],
933
+ 'lte':v[1]
934
+ }
935
+ if(isNotClause){
936
+ must_not.push({range:range});
937
+ }else{
938
+ filters.push({range:range});
939
+ }
940
+ }
941
+ else if(typeof(v)=='object' && v.type==='terms'){
942
+ var terms = {};
943
+ if(v.values){
944
+ terms[k + ".keyword"] = v.values;
945
+ if(isNotClause){
946
+ must_not.push({terms:terms});
947
+ }else{
948
+ filters.push({terms:terms});
949
+ }
950
+ }
951
+ }
952
+ else{
953
+ var term = {};
954
+ if(typeof v == 'string' ){
955
+ if(v){
956
+ term[k+".keyword"] = trim('' + v)
957
+ if(isNotClause){
958
+ must_not.push({term:term});
959
+ }else{
960
+ filters.push({term:term});
961
+ }
962
+
963
+ }
964
+ }
965
+ else if (typeof v == 'number'){
966
+ term[k] = trim('' + v)
967
+ if(isNotClause){
968
+ must_not.push({term:term});
969
+ }else{
970
+ filters.push({term:term});
971
+ }
972
+ }
973
+ }
974
+ }
975
+ if(m !== '0'){
976
+ filters = filters.concat([
977
+ {"term": { "_m.keyword": m }}
978
+ ]);
979
+ }
980
+ else{
981
+ //如果m === '0',代表是平台
982
+ // filters = filters.concat([
983
+ // {"term":{"_t":spec["_t"]}}
984
+ // ]);
985
+ }
986
+
987
+ //getKeyword query
988
+ var keywordQuery = "";
989
+ if(keyword && trim(keyword).length>0){
990
+ keywordQuery = "\"" + trim(keyword) + "\""
991
+ }
992
+ else{
993
+ keywordQuery = "*"
994
+ }
995
+ var query = {
996
+ "query": {
997
+ "bool": {
998
+ "must": {
999
+ "query_string": {
1000
+ "query":keywordQuery
1001
+ }
1002
+ },
1003
+ "must_not": must_not,
1004
+ "filter": filters
1005
+ }
1006
+ }
1007
+ }
1008
+ return query;
1009
+ },
1010
+
1011
+ count:function(m,searchArgs,keyword,dataSource){
1012
+ var query = f.buildQuery(m,searchArgs,keyword);
1013
+ var elasticSearchUrl = $.getEnv( "elasticSearchUrl" );
1014
+
1015
+ var headers = { "Content-Type": "application/json;charset=utf-8" };
1016
+ var elasticSearchUser = $.getEnv("elasticSearchUser");
1017
+ var elasticSearchPass = $.getEnv("elasticSearchPass");
1018
+ if(elasticSearchUser && elasticSearchPass){
1019
+ var auth =Base64.encode(elasticSearchUser + ":" + elasticSearchPass);
1020
+ var basicAuth = "Basic " + auth;
1021
+ headers["Authorization"] = basicAuth;
1022
+ }
1023
+ var searchUrl = elasticSearchUrl+"/owl_change_logs/_count";
1024
+ if(dataSource){
1025
+ searchUrl = elasticSearchUrl + "/" + dataSource + "/_count";
1026
+ }
1027
+
1028
+ var sndTxt = JSON.stringify(query);
1029
+ var s = HttpUtils.postRaw( searchUrl, sndTxt, headers);
1030
+ var result = JSON.parse(s);
1031
+ if(result.count){
1032
+ return result.count;
1033
+ }
1034
+ return 0;
1035
+ },
1036
+ search: function(m, searchArgs, keyword,from, pageSize, sort, dataSource){
1037
+ var query = f.buildQuery(m,searchArgs,keyword);
1038
+ var effectiveSort = [{owl_createTime:{order:"desc"}}];
1039
+ if(sort){
1040
+ effectiveSort = sort;
1041
+ } var effectiveSort = [{owl_createTime:{order:"desc"}}];
1042
+ if(sort){
1043
+ effectiveSort = sort;
1044
+ }
1045
+ query.from = from;
1046
+ query.size = pageSize;
1047
+ query.sort = effectiveSort;
1048
+
1049
+ var elasticSearchUrl = $.getEnv( "elasticSearchUrl" );
1050
+
1051
+ var headers = { "Content-Type": "application/json;charset=utf-8" };
1052
+ var elasticSearchUser = $.getEnv("elasticSearchUser");
1053
+ var elasticSearchPass = $.getEnv("elasticSearchPass");
1054
+ if(elasticSearchUser && elasticSearchPass){
1055
+ var auth =Base64.encode(elasticSearchUser + ":" + elasticSearchPass);
1056
+ var basicAuth = "Basic " + auth;
1057
+ headers["Authorization"] = basicAuth;
1058
+ }
1059
+ var searchUrl = elasticSearchUrl+"/owl_change_logs/_search";
1060
+ if(dataSource){
1061
+ searchUrl = elasticSearchUrl + "/" + dataSource + "/_search";
1062
+ }
1063
+
1064
+ var sndTxt = JSON.stringify(query);
1065
+ var s = HttpUtils.postRaw( searchUrl, sndTxt, headers);
1066
+ var result = JSON.parse(s);
1067
+
1068
+ if(!result.hits || !result.hits.hits){
1069
+ $.log("error search:sndQuery=" + sndTxt + "------\nresponse:\n" + s );
1070
+ var ret = {
1071
+ state:'ok',
1072
+ list:[],
1073
+ total:{value:0}
1074
+ }
1075
+ out.print(JSON.stringify(ret));
1076
+ return;
1077
+ }
1078
+
1079
+ var hits = result.hits.hits;
1080
+ var total = result.hits.total;
1081
+
1082
+ var objs = hits.map(function(hit){return hit._source});
1083
+
1084
+
1085
+ var ret = {
1086
+ state:'ok',
1087
+ list:objs,
1088
+ total:total
1089
+ }
1090
+
1091
+ return ret;
1092
+
1093
+ }
1094
+ }
1095
+ return f;
1096
+ })($S);