Utils.js 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. var _self = this;
  2. var applications = this.Action.applications; //流程事件中
  3. //var applications = resources.getContext().applications(); //代理和接口中
  4. var Utils = {
  5. getKeyEqualObjFromArray : function( sourceArray, sourceKey, value ){
  6. for( var i=0; i<sourceArray.length; i++ ){
  7. if( sourceArray[i][sourceKey] === value ){
  8. return sourceArray[i];
  9. }
  10. }
  11. return null;
  12. },
  13. parseResp : function( resp ){
  14. if( !resp || resp === null ){
  15. return {
  16. "type": "error",
  17. message : "服务响应是null"
  18. }
  19. }else{
  20. var json = JSON.parse( resp.toString() );
  21. return json;
  22. }
  23. },
  24. getFailText : function( json ){
  25. //{
  26. // "type": "error",
  27. // "message": "手机号错误:15268803358, 手机号已有值重复.",
  28. // "date": "2018-08-05 02:51:35",
  29. // "spent": 5,
  30. // "size": -1,
  31. // "count": 0,
  32. // "position": 0,
  33. // "prompt": "com.x.organization.assemble.control.jaxrs.person.ExceptionMobileDuplicate"
  34. //}
  35. var text;
  36. if( json.message ){
  37. text = json.message + ( json.prompt ? "("+json.prompt + ")" : "" );
  38. }else if( json.prompt ){
  39. text = json.prompt;
  40. }else{
  41. text = "未知异常";
  42. }
  43. print(text);
  44. return text;
  45. },
  46. processError : function( e, text ){
  47. e.printStackTrace();
  48. var errorText = text + " " + e.name + ": " + e.message;
  49. print(errorText);
  50. return errorText;
  51. },
  52. arrayIndexOf : function( array, target ){
  53. for( var i=0; i<array.length; i++ ){
  54. if( array[i] == target )return i;
  55. }
  56. return -1;
  57. },
  58. arrayErase : function(array, target){
  59. for (var i = array.length; i--;){
  60. if (array[i] === target) array.splice(i, 1);
  61. }
  62. return array;
  63. },
  64. objectClone : function (obj) {
  65. if (null == obj || "object" != typeof obj) return obj;
  66. if ( typeof obj.length==='number'){ //数组
  67. var copy = [];
  68. for (var i = 0, len = obj.length; i < len; ++i) {
  69. copy[i] = Utils.objectClone(obj[i]);
  70. }
  71. return copy;
  72. }else{
  73. var copy = {};
  74. for (var attr in obj) {
  75. copy[attr] = Utils.objectClone(obj[attr]);
  76. }
  77. return copy;
  78. }
  79. },
  80. typeOf : function( item ){
  81. if (item === null) return 'null';
  82. if( !item ){
  83. return typeof item;
  84. }
  85. if (item.$family != null) return item.$family();
  86. if (item.constructor == Array) return 'array';
  87. if (item.nodeName){
  88. if (item.nodeType == 1) return 'element';
  89. if (item.nodeType == 3) return (/\S/).test(item.nodeValue) ? 'textnode' : 'whitespace';
  90. } else if (typeof item.length == 'number'){
  91. if (item.callee) return 'arguments';
  92. //if ('item' in item) return 'collection';
  93. }
  94. return typeof item;
  95. //if( obj === null )return "null";
  96. //if( "object" !== typeof obj )return typeof obj;
  97. //return typeof obj.length==='number' ? 'array' : 'object';
  98. }
  99. };
  100. var Org = {
  101. getUserFlag : function( json ){
  102. return json.flag || json.distinguishedName || json.unique || json.employee || json.mobile || json.id;
  103. },
  104. getSuperUnitByUnitByLevel : function(unit, level){
  105. var unitList = _self.org.listSupUnit(unit, true);
  106. var result;
  107. if(unitList){
  108. unitList.each( function(u){
  109. if( u.level == level ){
  110. result = u.distinguishedName
  111. }
  112. })
  113. }
  114. return result;
  115. },
  116. getSuperUnitByIdentityByLevel : function( identity, level ){
  117. var unitList = _self.org.listAllSupUnitWithIdentity( identity );
  118. var result;
  119. if(unitList){
  120. unitList.each( function(u){
  121. if( u.level == level ){
  122. result = u.distinguishedName
  123. }
  124. })
  125. }
  126. return result;
  127. },
  128. getSuperObjectUnitByIdentityByLevel : function( identity, level ){
  129. var unitList = _self.org.listAllSupUnitWithIdentity( identity );
  130. var result;
  131. if(unitList){
  132. unitList.each( function(u){
  133. if( u.level == level ){
  134. result = u;
  135. }
  136. })
  137. }
  138. return result;
  139. }
  140. };
  141. var Calendar = {
  142. getLastMonth : function( date ) {
  143. var Date = Java.type("java.util.Date");
  144. if( !date ){
  145. date = new Date();
  146. }
  147. var sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
  148. var array = sdf.format( date ).split("-");
  149. var date_lastMonth = sdf.parse( array[0] + "-" + array[1] + "-" + "01");
  150. var Calendar = Java.type("java.util.Calendar");
  151. var c = Calendar.getInstance();
  152. c.setTime(date_lastMonth);
  153. c.add(Calendar.MONTH, -1);
  154. return c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1);
  155. }
  156. };
  157. var CMSPathData = {
  158. get : function( id, pathList ){
  159. var o = applications.getQuery('x_cms_assemble_control', CMSPathData.getUri(id, pathList) );
  160. var json = Utils.parseResp( o );
  161. return json.data;
  162. }.bind(this),
  163. create : function( id, pathList, data ){
  164. var o = applications.postQuery('x_cms_assemble_control', CMSPathData.getUri(id, pathList), JSON.stringify(data) );
  165. var json = Utils.parseResp( o );
  166. return json.data;
  167. }.bind(this),
  168. update : function( id, pathList, data ){
  169. var o = applications.putQuery('x_cms_assemble_control', CMSPathData.getUri(id, pathList), JSON.stringify(data) );
  170. var json = Utils.parseResp( o );
  171. return json.data;
  172. },
  173. delete : function( id, pathList ){
  174. var o = applications.deleteQuery('x_cms_assemble_control', CMSPathData.getUri(id, pathList) );
  175. var json = Utils.parseResp( o );
  176. return json.data;
  177. },
  178. getUri : function( id, pathList ){
  179. var uri = "data/document/"+id;
  180. if( pathList && Utils.typeOf(pathList) === "array" && pathList.length > 0 ){
  181. for( var i=0 ;i< pathList.length; i++ ){
  182. uri = uri + "/" + encodeURIComponent( pathList[i] );
  183. }
  184. }
  185. return uri;
  186. }
  187. };
  188. (function(context) {
  189. 'use strict';
  190. var Timer = Java.type('java.util.Timer');
  191. var Phaser = Java.type('java.util.concurrent.Phaser');
  192. var timer = new Timer('jsEventLoop', false);
  193. var phaser = new Phaser();
  194. var timeoutStack = 0;
  195. function pushTimeout() {
  196. timeoutStack++;
  197. }
  198. function popTimeout() {
  199. timeoutStack--;
  200. if (timeoutStack > 0) {
  201. return;
  202. }
  203. timer.cancel();
  204. phaser.forceTermination();
  205. }
  206. var onTaskFinished = function() {
  207. phaser.arriveAndDeregister();
  208. };
  209. context.setTimeout = function(fn, millis /* [, args...] */) {
  210. var args = [].slice.call(arguments, 2, arguments.length);
  211. var phase = phaser.register();
  212. var canceled = false;
  213. timer.schedule(function() {
  214. if (canceled) {
  215. return;
  216. }
  217. try {
  218. fn.apply(context, args);
  219. } catch (e) {
  220. print(e);
  221. } finally {
  222. onTaskFinished();
  223. popTimeout();
  224. }
  225. }, millis);
  226. pushTimeout();
  227. return function() {
  228. onTaskFinished();
  229. canceled = true;
  230. popTimeout();
  231. };
  232. };
  233. context.clearTimeout = function(cancel) {
  234. cancel();
  235. };
  236. context.setInterval = function(fn, delay /* [, args...] */) {
  237. var args = [].slice.call(arguments, 2, arguments.length);
  238. var cancel = null;
  239. var loop = function() {
  240. cancel = context.setTimeout(loop, delay);
  241. fn.apply(context, args);
  242. };
  243. cancel = context.setTimeout(loop, delay);
  244. return function() {
  245. cancel();
  246. };
  247. };
  248. context.clearInterval = function(cancel) {
  249. cancel();
  250. };
  251. })(this);