InitJsonImporter.js 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. //默认值设置
  2. defaultinput = {
  3. classname: "/cncc/action/test",
  4. clsoption: "with ttl=10 day, version=true, nickname='test'",
  5. data: null,
  6. datafilename: "",
  7. datafiledir: "/opt/cncc/ITIL/change_main",
  8. jsfilename: "/script/cncc/ITIL/测试.js",
  9. fieldmap: {id: "jid"},
  10. fields: {idUnique: "string,key"},
  11. mustfield: "id,idUnique",
  12. };
  13. inputmapping = {
  14. "change": {
  15. classname: "/cncc/action/change_main",
  16. datafiledir: "/opt/cncc/ITIL/change_main",
  17. jsfilename: "/script/cncc/ITIL/变更单.js",
  18. clsoption: "with ttl=10 day, version=true, nickname='change_main'",
  19. },
  20. "event": {
  21. classname: "/cncc/action/event",
  22. datafiledir: "/opt/cncc/ITIL/event",
  23. jsfilename: "/script/cncc/ITIL/事件单.js",
  24. clsoption: "with ttl=10 day, version=true, nickname='event'",
  25. },
  26. "problem": {
  27. classname: "/cncc/action/problem",
  28. datafiledir: "/opt/cncc/ITIL/problem",
  29. jsfilename: "/script/cncc/ITIL/问题单.js",
  30. clsoption: "with ttl=10 day, version=true, nickname='problem'",
  31. },
  32. "report": {
  33. classname: "/cncc/action/report",
  34. datafiledir: "/opt/cncc/ITIL/report",
  35. jsfilename: "/script/cncc/ITIL/报备.js",
  36. clsoption: "with ttl=10 day, version=true, nickname='report'",
  37. },
  38. "device_power_on_off": {
  39. classname: "/cncc/action/device_power_on_off",
  40. datafiledir: "/opt/cncc/ITIL/device_power_on_off",
  41. jsfilename: "/script/cncc/ITIL/设备上下电.js",
  42. clsoption: "with ttl=10 day, version=true, nickname='device_power_on_off'",
  43. },
  44. "data_collect": {
  45. classname: "/cncc/action/data_collect",
  46. datafiledir: "/opt/cncc/ITIL/data_collect",
  47. jsfilename: "/script/cncc/ITIL/数据获取.js",
  48. clsoption: "with ttl=10 day, version=true, nickname='data_collect'",
  49. },
  50. "drill": {
  51. classname: "/cncc/action/drill",
  52. datafiledir: "/opt/cncc/ITIL/drill",
  53. jsfilename: "/script/cncc/ITIL/应急演练.js",
  54. clsoption: "with ttl=10 day, version=true, nickname='drill'",
  55. },
  56. "implement": {
  57. classname: "/cncc/action/implement",
  58. datafiledir: "/opt/cncc/ITIL/implement",
  59. jsfilename: "/script/cncc/ITIL/项目实施或巡检.js",
  60. clsoption: "with ttl=10 day, version=true, nickname='implement'",
  61. }
  62. };
  63. // 输入输出参数格式化
  64. input = INPUT;
  65. output = {};
  66. try {
  67. input = decodeURIComponent(input);
  68. } catch(e) {}
  69. try {
  70. input = base64.decode(input);
  71. } catch(e) {}
  72. try {
  73. input = JSON.parse(input);
  74. input = JSON.parse(input);
  75. } catch(e) {}
  76. // 通用函数
  77. function isempty(o) {
  78. if (o) {
  79. for (var k in o){
  80. return false;
  81. }
  82. }
  83. return true;
  84. }
  85. // 主执行阶段
  86. function main() {
  87. output.info = {};
  88. output.info.p0 = {name: "确认参数"};
  89. p = inputmapping[input.name];
  90. if (p) {
  91. for (var k in p) {
  92. defaultinput[k] = p[k];
  93. }
  94. }
  95. server = input.server;
  96. if (!server) {
  97. server = defaultinput.server;
  98. }
  99. author = input.author;
  100. if (!author) {
  101. author = defaultinput.author;
  102. }
  103. classname = input.classname;
  104. if (!classname) {
  105. classname = defaultinput.classname;
  106. }
  107. if (classname[0] != "/") {
  108. throw ("classname必须以 / 开头");
  109. }
  110. if (classname.substring(0,8) == "/matrix/") {
  111. throw ("classname不能以 /matrix/ 开头");
  112. }
  113. data = input.data;
  114. if (isempty(data)) {
  115. data = defaultinput.data;
  116. if (isempty(data)) {
  117. datafilename = input.datafilename;
  118. if (!datafilename) {
  119. datafilename = defaultinput.datafilename;
  120. }
  121. if (datafilename) {
  122. try {
  123. data = dfs.read(datafilename);
  124. data = JSON.parse(data);
  125. } catch(e) {}
  126. }
  127. }
  128. if (isempty(data)) {
  129. datafiledir = input.datafiledir;
  130. if (!datafiledir) {
  131. if (classname == defaultinput.classname) {
  132. datafiledir = defaultinput.datafiledir;
  133. } else {
  134. datafiledir = "/opt" + classname;
  135. }
  136. }
  137. // 读取所有文件,综合数据
  138. data = {};
  139. files = dfs.readdir(datafiledir);
  140. for (i = 0; i < files.length; i++) {
  141. try {
  142. adat = dfs.read(files[i].fullname);
  143. adat = JSON.parse(adat);
  144. if (typeof(adat) != "object") {
  145. throw("只接收JSON对象数据");
  146. }
  147. for (var k in adat) {
  148. if (!data[k]) {
  149. data[k] = adat[k];
  150. } else if (adat[k]) {
  151. if (typeof(adat[k]) == "object") {
  152. if (JSON.stringify(adat[k]).length > JSON.stringify(data[k]).length) {
  153. data[k] = adat[k];
  154. }
  155. } else if (typeof(adat[k]) == "string") {
  156. if (typeof(data[k]) != "string") {
  157. data[k] = adat[k];
  158. } else if (adat[k].length > data[k].length) {
  159. data[k] = adat[k];
  160. }
  161. } else if (typeof(adat[k]) == "number") {
  162. if (typeof(data[k]) == "number") {
  163. if ((""+adat[k]).indexOf(".")>=0) {
  164. data[k] = adat[k];
  165. }
  166. }
  167. } else if (typeof(adat[k]) == "boolean") {
  168. if (typeof(data[k]) != "boolean") {
  169. data[k] = ""+adat[k];
  170. }
  171. }
  172. }
  173. }
  174. } catch(e) {}
  175. }
  176. }
  177. }
  178. jsfilename = input.jsfilename;
  179. if (!jsfilename) {
  180. jsfilename = defaultinput.jsfilename;
  181. }
  182. clsoption = input.clsoption;
  183. if (!clsoption) {
  184. clsoption = defaultinput.clsoption;
  185. }
  186. fieldmap = input.fieldmap;
  187. if (!fieldmap) {
  188. fieldmap = defaultinput.fieldmap;
  189. }
  190. mustfield = input.mustfield;
  191. if (!mustfield) {
  192. mustfield = defaultinput.mustfield;
  193. }
  194. fields = input.fields;
  195. if (!fields) {
  196. fields = defaultinput.fields;
  197. }
  198. reqinput = {
  199. classname: classname,
  200. jsfilename: jsfilename,
  201. clsoption: clsoption,
  202. fieldmap: fieldmap,
  203. fields: fields,
  204. mustfield: mustfield,
  205. data: data,
  206. };
  207. output.info.p1 = {name:"生成类"};
  208. output.info.p1.result = alterClass(reqinput)
  209. if (output.info.p1.result.error) {
  210. return;
  211. }
  212. output.info.p2 = {name:"生成脚本"};
  213. output.info.p2.result = generateJsonImporterJS(reqinput)
  214. if (output.info.p2.result.error) {
  215. return;
  216. }
  217. output.info.p3 = {name:"激活脚本"};
  218. output.info.p3.result = activeServerJS(jsfilename)
  219. if (output.info.p3.result.error) {
  220. return;
  221. }
  222. output.info.p4 = {name:"验证测试"};
  223. output.info.p4.result = runServerJS(jsfilename, data)
  224. if (output.info.p4.result.error) {
  225. return;
  226. }
  227. output.info.p5 = {name:"完成"};
  228. }
  229. try {
  230. main();
  231. } catch(e) {
  232. if (typeof(e) == "object") {
  233. output.error = e;
  234. } else if (typeof(e) == "string") {
  235. output.error = "错误:" + e;
  236. } else {
  237. output.error = JSON.stringify(e);
  238. }
  239. }
  240. // 返回输出信息
  241. OUTPUT = output;