InitJsonImporter.js 7.9 KB

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