InitJsonImporter.js 8.0 KB

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