Dpack get data Node : V10
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

578 lines
21 KiB

  1. var oracleModel = require("../model/oracle.js");
  2. var sqlServer = require("../util/db_sqlserver.js");
  3. var sql = require("mssql");
  4. var util = require("../util/util.js");
  5. var log = require("../util/log.js");
  6. var cron = require("cron");
  7. var getQueryJob = cron.job("* * * * * *");
  8. var startMorning = cron.job("* * * * * *");
  9. var endMorning = cron.job("* * * * * *");
  10. var startNight = cron.job("* * * * * *");
  11. var endNight = cron.job("* * * * * *");
  12. var checkStartJob = cron.job("* * * * * *");
  13. var collectionInsertJob = cron.job("* * * * * *");
  14. var oracleInsertJob = cron.job("* * * * * *");
  15. var moment = require("moment");
  16. function scheduleData() {
  17. var configjs = util.getConfig();
  18. startMorning.stop();
  19. endMorning.stop();
  20. startNight.stop();
  21. endNight.stop();
  22. //startMorning.stop();
  23. var startMorningTime = configjs.config_time.start_morning;
  24. startMorning = cron.job(
  25. `00 ${startMorningTime.substr(3, 2)} ${startMorningTime.substr(
  26. 0,
  27. 2
  28. )} * * *`,
  29. function () {
  30. var process = util.getProcess();
  31. process.is_running = "FALSE";
  32. util.saveProcess(process);
  33. getQueryJob.stop();
  34. collectionInsertJob.stop();
  35. oracleInsertJob.stop();
  36. util.infoNotif(
  37. "Waktu Good Morning",
  38. "Job akan dimatikan untuk sementara"
  39. );
  40. },
  41. null,
  42. true
  43. );
  44. var endMorningTime = configjs.config_time.end_morning;
  45. endMorning = cron.job(
  46. `00 ${endMorningTime.substr(3, 2)} ${endMorningTime.substr(0, 2)} * * *`,
  47. function () {
  48. var process = util.getProcess();
  49. if (process.is_running != "TRUE") {
  50. process.is_running = "TRUE";
  51. process.processing.process_getQuery = "TRUE";
  52. process.processing.process_insertToCollection = "TRUE";
  53. process.processing.process_insertToOracle = "TRUE";
  54. util.saveConfig(configjs);
  55. getQueryJob.start();
  56. collectionInsertJob.start();
  57. oracleInsertJob.start();
  58. util.infoNotif("Good Morning Berakhir", "Job akan kembali dihidupkan");
  59. }
  60. },
  61. null,
  62. true
  63. );
  64. var startNightTime = configjs.config_time.start_night;
  65. startNight = cron.job(
  66. `00 ${startNightTime.substr(3, 2)} ${startNightTime.substr(0, 2)} * * *`,
  67. function () {
  68. var process = util.getProcess();
  69. process.is_running = "FALSE";
  70. util.saveProcess(process);
  71. getQueryJob.stop();
  72. collectionInsertJob.stop();
  73. oracleInsertJob.stop();
  74. util.infoNotif("Waktu Good Bye", "Job akan dimatikan untuk sementara");
  75. },
  76. null,
  77. true
  78. );
  79. var endNightTime = configjs.config_time.end_night;
  80. endMorning = cron.job(
  81. `00 ${endNightTime.substr(3, 2)} ${endNightTime.substr(0, 2)} * * *`,
  82. function () {
  83. var process = util.getProcess();
  84. if (process.is_running != "TRUE") {
  85. process.is_running = "TRUE";
  86. process.auto_start = "TRUE";
  87. process.processing.process_getQuery = "TRUE";
  88. process.processing.process_insertToCollection = "TRUE";
  89. process.processing.process_insertToOracle = "TRUE";
  90. util.saveProcess(process);
  91. getQueryJob.start();
  92. collectionInsertJob.start();
  93. oracleInsertJob.start();
  94. util.infoNotif("Good Bye Berakhir", "Job akan kembali dihidupkan");
  95. }
  96. },
  97. null,
  98. true
  99. );
  100. }
  101. module.exports.stopAllJob = async function stopAllJob() {
  102. startMorning.stop();
  103. endMorning.stop();
  104. startNight.stop();
  105. endNight.stop();
  106. getQueryJob.stop();
  107. collectionInsertJob.stop();
  108. checkStartJob.stop();
  109. oracleInsertJob.stop();
  110. return;
  111. };
  112. module.exports.checkJobIsRunning = function checkJobIsRunning() {
  113. var dataReturn = {
  114. getQuery: getQueryJob.running,
  115. collectionInsert: collectionInsertJob.running,
  116. oracleInsert: oracleInsertJob.running,
  117. };
  118. return dataReturn;
  119. };
  120. module.exports.checkStart = function checkStart() {
  121. checkStartJob.stop();
  122. var self = this;
  123. checkStartJob = cron.job("0 */5 * * * *", async function () {
  124. log.createLogStart(2, "Check Start");
  125. var process = util.getProcess();
  126. if (process.is_running == "TRUE") {
  127. if (!getQueryJob.running) {
  128. self.getQuery();
  129. log.createLogStart(2, "Running Get Query");
  130. process.processing.process_getQuery = "TRUE";
  131. }
  132. if (!collectionInsertJob.running) {
  133. self.insertToCollection();
  134. log.createLogStart(2, "Running Collection Insert");
  135. process.processing.process_insertToCollection = "TRUE";
  136. }
  137. if (!oracleInsertJob.running) {
  138. self.insertToOracle();
  139. log.createLogStart(2, "Running Insert To Oracle");
  140. process.processing.process_insertToOracle = "TRUE";
  141. }
  142. util.saveProcess(process);
  143. }
  144. });
  145. checkStartJob.start();
  146. return;
  147. };
  148. module.exports.startAllServices = async function startAllServices() {
  149. var process = util.getProcess();
  150. process.is_running = "TRUE";
  151. process.processing.process_getQuery = "TRUE";
  152. process.processing.process_insertToCollection = "TRUE";
  153. process.processing.process_insertToOracle = "TRUE";
  154. util.saveProcess(process);
  155. await this.checkStart();
  156. await this.getQuery();
  157. await this.insertToCollection();
  158. await this.insertToOracle();
  159. return;
  160. };
  161. module.exports.getQuery = async function getQuery() {
  162. var process = util.getProcess();
  163. process.processing.process_getQuery = "TRUE";
  164. util.saveProcess(process);
  165. var sqlCollection = await sqlServer.connectCollection();
  166. var requestLastDateAvailability = sqlCollection.request();
  167. var queryLastDateAvailability = `SELECT COLUMN_NAME
  168. FROM INFORMATION_SCHEMA.COLUMNS
  169. WHERE TABLE_NAME = 'UPLOAD_DATA_DB_TAB' AND COLUMN_NAME='LAST_DATE'
  170. IF @@ROWCOUNT=0
  171. ALTER TABLE dbo.UPLOAD_DATA_DB_TAB ADD LAST_DATE datetime`;
  172. var resultLastDateAvailability = await requestLastDateAvailability.query(
  173. queryLastDateAvailability
  174. );
  175. if (configjs.firstrun == "TRUE") {
  176. var date6 = moment()
  177. .startOf("day")
  178. .add(6, "hours")
  179. .format("YYYY-MM-DD HH:mm:ss.SSS");
  180. var reqUpdateLastDate6 = sqlCollection.request();
  181. var queryUpdateLastDate6 = `update dbo.UPLOAD_DATA_DB_TAB SET LAST_DATE = Cast('${date6}' as datetime)`;
  182. var resultUpdateLastDate6 = await reqUpdateLastDate6.query(
  183. queryUpdateLastDate6
  184. );
  185. configjs = util.getConfig();
  186. configjs.firstrun = "FALSE";
  187. util.saveConfig(configjs);
  188. }
  189. getQueryJob.stop();
  190. scheduleData();
  191. getQueryJob = cron.job(
  192. `15 */${parseInt(configjs.interval.getquery_interval)} * * * *`,
  193. async function () {
  194. if (util.getProcess().processing.process_getQuery == "TRUE") {
  195. process = util.getProcess();
  196. process.processing.process_getQuery = "FALSE";
  197. util.saveProcess(process);
  198. try {
  199. var oracleSelect = await oracleModel.oracleQueryUploadData();
  200. if (oracleSelect["STATUS"] == 0) {
  201. getQueryJob.stop();
  202. } else {
  203. var data = oracleSelect["DATA"];
  204. const requestDelOldDetail = sqlCollection.request();
  205. var queryDelOldDetail = `delete from dbo.UPLOAD_DATA_DB_DET_TAB`;
  206. var resultDelOldDetail = await requestDelOldDetail.query(
  207. queryDelOldDetail
  208. );
  209. await sqlCollection;
  210. for (var z = 0; z < data.length; z++) {
  211. try {
  212. const request = sqlCollection.request();
  213. request.input("COMPANY", data[z].COMPANY);
  214. request.input("ID", data[z].ID);
  215. request.input("ENABLED", data[z].ENABLED);
  216. request.input("TEST_MODE", data[z].TEST_MODE);
  217. request.input("AUTO_MODE", data[z].AUTO_MODE);
  218. var queryInsertUploadData;
  219. if (data[z].LAST_DATE != null) {
  220. var lastDate = data[z].LAST_DATE;
  221. request.input("LAST_DATE", lastDate);
  222. queryInsertUploadData = `
  223. UPDATE UPLOAD_DATA_DB_TAB SET COMPANY = @COMPANY, ENABLED = @ENABLED,
  224. TEST_MODE = @TEST_MODE, AUTO_MODE = @AUTO_MODE, LAST_DATE = @LAST_DATE WHERE ID = @ID
  225. IF @@ROWCOUNT=0
  226. INSERT INTO UPLOAD_DATA_DB_TAB(COMPANY,ID,ENABLED,TEST_MODE,AUTO_MODE,LAST_DATE) values
  227. (@COMPANY,@ID,@ENABLED,@TEST_MODE,@AUTO_MODE,@LAST_DATE);`;
  228. var resultUpdateLastDate = await oracleModel.oracleUpdateLastDate(
  229. data[z].ID
  230. );
  231. } else {
  232. queryInsertUploadData = `
  233. UPDATE UPLOAD_DATA_DB_TAB SET COMPANY = @COMPANY, ENABLED = @ENABLED,
  234. TEST_MODE = @TEST_MODE, AUTO_MODE = @AUTO_MODE WHERE ID = @ID
  235. IF @@ROWCOUNT=0
  236. INSERT INTO UPLOAD_DATA_DB_TAB(COMPANY,ID,ENABLED,TEST_MODE,AUTO_MODE) values
  237. (@COMPANY,@ID,@ENABLED,@TEST_MODE,@AUTO_MODE);`;
  238. }
  239. //Insert to Table
  240. const result = await request.query(queryInsertUploadData);
  241. var oracleSelectDetail = await oracleModel.oracleQueryUploadDataDet(
  242. data[z].ID
  243. );
  244. if (oracleSelectDetail["STATUS"] == 0) {
  245. throwNotif(
  246. "Database Oracle Error",
  247. oracleSelectDetail["DATA"]
  248. );
  249. process = util.getProcess();
  250. process.processing.process_getQuery = "TRUE";
  251. util.saveProcess(process);
  252. } else {
  253. try {
  254. var dataDetail = oracleSelectDetail["DATA"];
  255. for (var i = 0; i < dataDetail.length; i++) {
  256. const requestDet = sqlCollection.request();
  257. requestDet.input("COMPANY", dataDetail[i]["COMPANY"]);
  258. requestDet.input("ID", dataDetail[i]["ID"]);
  259. requestDet.input("NO", sql.Int, dataDetail[i]["NO"]);
  260. requestDet.input(
  261. "NO_ORDER",
  262. sql.Int,
  263. dataDetail[i]["NO_ORDER"]
  264. );
  265. requestDet.input(
  266. "SOURCE_QUERY",
  267. dataDetail[i]["SOURCE_QUERY"]
  268. );
  269. requestDet.input(
  270. "DESC_PACKAGE",
  271. dataDetail[i]["DESC_PACKAGE"]
  272. );
  273. requestDet.input("ENABLED", dataDetail[i]["ENABLED"]);
  274. requestDet.input(
  275. "DEST_PACKAGE_TYPE",
  276. dataDetail[i]["DEST_PACKAGE_TYPE"]
  277. );
  278. var queryInsertUploadDataDetail = `
  279. UPDATE UPLOAD_DATA_DB_DET_TAB SET COMPANY = @COMPANY, NO_ORDER = @NO_ORDER,
  280. SOURCE_QUERY = @SOURCE_QUERY ,DESC_PACKAGE = @DESC_PACKAGE,ENABLED = @ENABLED,
  281. DEST_PACKAGE_TYPE = @DEST_PACKAGE_TYPE WHERE ID = @ID AND NO = @NO
  282. IF @@ROWCOUNT=0
  283. INSERT INTO UPLOAD_DATA_DB_DET_TAB(COMPANY,ID,NO,NO_ORDER,SOURCE_QUERY,DESC_PACKAGE,ENABLED,DEST_PACKAGE_TYPE)
  284. values (@COMPANY,@ID,@NO,@NO_ORDER,@SOURCE_QUERY,@DESC_PACKAGE,@ENABLED,@DEST_PACKAGE_TYPE);`;
  285. const resultDetail = await requestDet.query(
  286. queryInsertUploadDataDetail
  287. );
  288. }
  289. } catch (e) {
  290. process = util.getProcess();
  291. process.processing.process_getQuery = "TRUE";
  292. util.saveProcess(process);
  293. getQueryJob.stop();
  294. }
  295. }
  296. } catch (e) {
  297. process = util.getProcess();
  298. process.processing.process_getQuery = "TRUE";
  299. util.saveProcess(process);
  300. getQueryJob.stop();
  301. }
  302. }
  303. process = util.getProcess();
  304. process.processing.process_getQuery = "TRUE";
  305. util.saveProcess(process);
  306. var now = moment().format("YYYY-MM-DD HH:mm:ss.SSS");
  307. console.log("1: " + now);
  308. }
  309. } catch (e) {
  310. getQueryJob.stop();
  311. console.log(e.message);
  312. }
  313. }
  314. },
  315. null,
  316. true,
  317. null,
  318. null,
  319. true
  320. );
  321. getQueryJob.start();
  322. return;
  323. };
  324. module.exports.insertToCollection = async function insertToCollection() {
  325. var sqlDpack = await sqlServer.connectDPACK();
  326. var sqlCollection = await sqlServer.connectCollection();
  327. var configjs = util.getConfig();
  328. var process = util.getProcess();
  329. process.processing.process_insertToCollection = "TRUE";
  330. util.saveProcess(process);
  331. var rowInserted = 0;
  332. var errorLog = 0;
  333. collectionInsertJob.stop();
  334. collectionInsertJob = cron.job(
  335. `45 */${parseInt(configjs.interval.collection_interval)} * * * *`,
  336. async function () {
  337. try {
  338. if (util.getProcess().processing.process_insertToCollection == "TRUE") {
  339. process = util.getProcess();
  340. process.processing.process_insertToCollection = "FALSE";
  341. util.saveProcess(process);
  342. await sqlDpack;
  343. await sqlCollection;
  344. var requestSelectParentCollection = sqlCollection.request();
  345. var querySelectParentCollection = `select ID,LAST_DATE from dbo.UPLOAD_DATA_DB_TAB`;
  346. var resultSelectParentCollection = await requestSelectParentCollection.query(
  347. querySelectParentCollection
  348. );
  349. var resultID = resultSelectParentCollection.recordset;
  350. for (var z = 0; z < resultID.length; z++) {
  351. var requestSelectDetailCollection = sqlCollection.request();
  352. var querySelectDetailCollection = `select source_query from dbo.UPLOAD_DATA_DB_DET_TAB where ID = '${resultID[z].ID}'`;
  353. var resultSelectDetailCollection = await requestSelectDetailCollection.query(
  354. querySelectDetailCollection
  355. );
  356. var resultSourceQuery = resultSelectDetailCollection.recordset;
  357. if (process.processing.process_getQuery != "FALSE") {
  358. var currentTime = moment().format("YYYY-MM-DD HH:mm:ss.SSS");
  359. var requestUpdateLastDate = sqlCollection.request();
  360. var queryUpdateLastDate = `update dbo.UPLOAD_DATA_DB_TAB set LAST_DATE = Cast('${currentTime}' as datetime) where ID = '${resultID[z].ID}'`;
  361. var resultUpdateLastDate = requestUpdateLastDate.query(
  362. queryUpdateLastDate
  363. );
  364. }
  365. for (var k = 0; k < resultSourceQuery.length; k++) {
  366. var sourceQuery = await util.regexQuery(
  367. resultSourceQuery[k].source_query,
  368. resultID[z].LAST_DATE
  369. );
  370. try {
  371. var requestQuery = sqlDpack.request();
  372. var result = await requestQuery.query(sourceQuery);
  373. var arrayColumn = result.recordset.columns;
  374. var columnLength = Object.keys(arrayColumn).length;
  375. var resultRow = result.recordset;
  376. for (var i = 0; i < resultRow.length; i++) {
  377. var processingRow = resultRow[i];
  378. var varInsert = "";
  379. var varBind = "";
  380. var string = 1;
  381. var int = 1;
  382. var date = 1;
  383. var count = 0;
  384. var requestInsertCollection = sqlCollection.request();
  385. for (key in arrayColumn) {
  386. count += 1;
  387. var checktype;
  388. checktype = await sqlServer.checkDataType(
  389. arrayColumn[key].type
  390. );
  391. if (count == 1) {
  392. requestInsertCollection.input(
  393. "collection_name",
  394. processingRow[key]
  395. );
  396. varInsert += `collection_name,flag_deleted`;
  397. varBind += `@collection_name,'FALSE'`;
  398. } else {
  399. if (checktype == 0) {
  400. varInsert += `s${string}`;
  401. varBind += `@s${string}`;
  402. requestInsertCollection.input(
  403. `s${string}`,
  404. sql.VarChar,
  405. processingRow[key]
  406. );
  407. string += 1;
  408. } else if (checktype == 1) {
  409. varInsert += `n${int}`;
  410. varBind += `@n${int}`;
  411. requestInsertCollection.input(
  412. `n${int}`,
  413. sql.Int,
  414. processingRow[key]
  415. );
  416. int += 1;
  417. } else {
  418. varInsert += `d${date}`;
  419. varBind += `@d${date}`;
  420. requestInsertCollection.input(
  421. `d${date}`,
  422. sql.DateTime,
  423. processingRow[key]
  424. );
  425. date += 1;
  426. }
  427. }
  428. if (count != columnLength) {
  429. varInsert += `,`;
  430. varBind += `,`;
  431. }
  432. }
  433. var queryInsertCollection = `insert into TEMP_DATA_TAB(${varInsert}) values(${varBind})`;
  434. var resultInsertCollection = await requestInsertCollection.query(
  435. queryInsertCollection
  436. );
  437. rowInserted += resultInsertCollection.rowsAffected[0];
  438. if (isNaN(resultInsertCollection.rowsAffected[0])) {
  439. errorLog = 1;
  440. }
  441. }
  442. } catch (e) {
  443. var process = util.getProcess();
  444. process.processing.process_insertToCollection = "TRUE";
  445. util.saveProcess(process);
  446. collectionInsertJob.stop();
  447. }
  448. }
  449. if (errorLog == 1) {
  450. var currentTime = moment().format("YYYY-MM-DD HH:mm:ss.SSS");
  451. var requestUpdateLastDate = sqlCollection.request();
  452. var queryUpdateLastDate = `update dbo.UPLOAD_DATA_DB_TAB set LAST_DATE = ${resultID[z].LAST_DATE} where ID = '${resultID[z].ID}'`;
  453. var resultUpdateLastDate = requestUpdateLastDate.query(
  454. queryUpdateLastDate
  455. );
  456. var process = util.getProcess();
  457. process.processing.process_insertToCollection = "TRUE";
  458. util.saveProcess(process);
  459. errorLog = 0;
  460. }
  461. }
  462. var now = moment().format("YYYY-MM-DD HH:mm:ss.SSS");
  463. var process = util.getProcess();
  464. process.processing.process_insertToCollection = "TRUE";
  465. util.saveProcess(process);
  466. console.log("2 : " + now);
  467. console.log("ROW INSERTED : " + rowInserted);
  468. rowInserted = 0;
  469. }
  470. } catch (e) {
  471. log.createLog(0, e.message);
  472. var process = util.getProcess();
  473. process.processing.process_insertToCollection = "TRUE";
  474. util.saveProcess(process);
  475. }
  476. }
  477. );
  478. collectionInsertJob.start();
  479. return;
  480. };
  481. module.exports.insertToOracle = async function insertToOracle() {
  482. var sqlCollection = await sqlServer.connectCollection();
  483. var configjs = util.getConfig();
  484. var process = util.getProcess();
  485. process.processing.process_insertToOracle = "TRUE";
  486. util.saveProcess(process);
  487. oracleInsertJob.stop();
  488. oracleInsertJob = cron.job(
  489. `30 */${parseInt(configjs.interval.oracle_interval)} * * * *`,
  490. async function () {
  491. if (util.getProcess().processing.process_insertToOracle == "TRUE") {
  492. var process = util.getProcess();
  493. process.processing.process_insertToOracle = "FALSE";
  494. util.saveProcess(process);
  495. await sqlCollection;
  496. try {
  497. var requestSelectTempCollection = sqlCollection.request();
  498. var querySelectTempCollection = `SELECT TOP 100000 COLLECTION_NAME, S1, S2, S4, S3, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15, S19, S18, S17, S16, S20, S21, S22, S23, S24, S25, S26, S27, S28, S29, S30, S31, S32, S33, S34, S35, S36,
  499. S37, S38, S39, S40, S41, S42, S43, S44, S45, S46, S47, S48, S50, S49, N1, N2, N3, N4, N5, N6, N7, N8, N9, N10, N11, N12, N13, N14, N15, N16, N17, N18, N19, N20, N21, N22, N23, N24, N25, N26,
  500. N27, N28, N29, N30, N31, N32, N33, N34, N35, N36, N37, N38, N39, N40, N41, N42, N43, N44, N45, N46, N47, N48, N49, N50, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15,
  501. D16, D17, D18, D19, D20, D21, D22, D23, D24, D25, D26, D27, D28, D29, D30,SEQ_ID
  502. FROM dbo.TEMP_DATA_TAB WHERE FLAG_DELETED = 'FALSE'`;
  503. var resultSelectTempCollection = await requestSelectTempCollection.query(
  504. querySelectTempCollection
  505. );
  506. var resultRow = resultSelectTempCollection.recordset;
  507. if (resultSelectTempCollection.recordset.length != 0) {
  508. var data = await oracleModel.oracleInsertCollection(
  509. resultSelectTempCollection.recordset
  510. );
  511. }
  512. process = util.getProcess();
  513. process.processing.process_insertToOracle = "TRUE";
  514. util.saveProcess(process);
  515. var now = moment().format("YYYY-MM-DD HH:mm:ss.SSS");
  516. } catch (e) {
  517. console.log(e.message);
  518. process = util.getProcess();
  519. process.processing.process_insertToOracle = "TRUE";
  520. util.saveProcess(process);
  521. oracleInsertJob.stop();
  522. }
  523. }
  524. }
  525. );
  526. oracleInsertJob.start();
  527. return;
  528. //}
  529. };