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

348 lines
12 KiB

  1. const sqlite3 = require('sqlite3').verbose();
  2. var sqliteFunc = require('../util/db_sqlite.js');
  3. var oracleModel = require('./oracleModel.js');
  4. const oracledb = require('oracledb');
  5. const path = require('path');
  6. const fs = require('fs');
  7. async function insertRefTable(db,dataUnitCabang){
  8. try{
  9. var runQuery = 'insert into refTable(mesin,tipe,rangka,warna,kode,tahun,state) VALUES ';
  10. for(var i = 0 ; i < dataUnitCabang.length ; i ++){
  11. if(i == dataUnitCabang.length -1){
  12. runQuery = runQuery.concat(`('${dataUnitCabang[i]["MESIN"]}','${dataUnitCabang[i]["TIPE"]}','${dataUnitCabang[i]["RANGKA"]}','${dataUnitCabang[i]["WARNA"]}',
  13. '${dataUnitCabang[i]["KODE"]}','${dataUnitCabang[i]["TAHUN"]}','${dataUnitCabang[i]["STATE"]}')`);
  14. }
  15. else {
  16. runQuery = runQuery.concat(`('${dataUnitCabang[i]["MESIN"]}','${dataUnitCabang[i]["TIPE"]}','${dataUnitCabang[i]["RANGKA"]}','${dataUnitCabang[i]["WARNA"]}',
  17. '${dataUnitCabang[i]["KODE"]}','${dataUnitCabang[i]["TAHUN"]}','${dataUnitCabang[i]["STATE"]}'), `);
  18. }
  19. }
  20. var insertTable = await sqliteFunc.runQuery(db,runQuery);
  21. if(insertTable["STATUS"] == 0) throw insertTable["DATA"]
  22. }
  23. catch(e){
  24. throw e;
  25. }
  26. }
  27. async function insertJenisFoto(db,jenisFoto){
  28. try{
  29. var valBlobTable = '';
  30. for(var i = 0 ; i < jenisFoto.length ; i++){
  31. if(i == jenisFoto.length -1) {
  32. valBlobTable = valBlobTable.concat(`('${jenisFoto[i]["NO_URUT"]}','${jenisFoto[i]["JENIS"]}')`);
  33. }
  34. else{
  35. valBlobTable = valBlobTable.concat(`('${jenisFoto[i]["NO_URUT"]}','${jenisFoto[i]["JENIS"]}'),`);
  36. }
  37. }
  38. var insertJenisBlobQuery = `
  39. Insert Into jenisBlobTable Values ${valBlobTable}
  40. `;
  41. var insertBlobQuery = await sqliteFunc.runQuery(db,insertJenisBlobQuery);
  42. if(insertBlobQuery["STATUS"] == 0) throw insertBlobQuery["DATA"]
  43. }
  44. catch(e){
  45. throw e;
  46. }
  47. }
  48. async function insertUnitDetPic(db,dataUnitPic){
  49. try{
  50. var valDetPic = '';
  51. for(var i = 0 ; i < dataUnitPic.length ; i++){
  52. if(i == dataUnitPic.length -1) {
  53. valDetPic = valDetPic.concat(`('${dataUnitPic[i]["MESIN"]}','${dataUnitPic[i]["NO_URUT"]}',
  54. null,'${dataUnitPic[i]["JENIS"]}',null,null)`);
  55. }
  56. else{
  57. valDetPic = valDetPic.concat(`('${dataUnitPic[i]["MESIN"]}','${dataUnitPic[i]["NO_URUT"]}',
  58. null,'${dataUnitPic[i]["JENIS"]}',null,null),`);
  59. }
  60. }
  61. var insertJenisBlobQuery = `
  62. Insert Into blobTable(MESIN,NO_URUT,BLOB_FILE,JENIS,LATITUDE,LONGITUDE) Values ${valDetPic};
  63. `;
  64. var insertBlobQuery = await sqliteFunc.runQuery(db,insertJenisBlobQuery);
  65. if(insertBlobQuery["STATUS"] == 0 ) throw insertBlobQuery["DATA"]
  66. }
  67. catch(e){
  68. throw e;
  69. }
  70. }
  71. async function getValueTableByName(db,name){
  72. var query = `
  73. select VALUE from
  74. valueTable
  75. where name = '${name}'
  76. LIMIT 1
  77. `;
  78. var selectInsertTable = await sqliteFunc.selectQuery(db,query);
  79. if(selectInsertTable["STATUS"] == 0) throw Error(selectInsertTable["DATA"]);
  80. var data = selectInsertTable["DATA"];
  81. var value = data[0]["VALUE"];
  82. return value;
  83. }
  84. async function getInsertedData(db){
  85. try{
  86. var query = `
  87. select
  88. MESIN,
  89. TIMESTAMP
  90. from refTable
  91. where flag_insert = 'TRUE'
  92. `;
  93. var selectTimestampInsert = await sqliteFunc.selectQuery(db,query);
  94. if(selectTimestampInsert["STATUS"] == 0) throw selectTimestampInsert["DATA"];
  95. return selectTimestampInsert["DATA"];
  96. }
  97. catch(e){
  98. throw e;
  99. }
  100. }
  101. async function getInsertedPic(db){
  102. try{
  103. var query = `
  104. select
  105. BLOB_FILE,
  106. jenis,
  107. latitude,
  108. LONGITUDE,
  109. MESIN,
  110. NO_URUT
  111. from blobTable where
  112. blob_file IS NOT NULL
  113. `;
  114. var selectBlobTable = await sqliteFunc.selectQuery(db,query);
  115. if(selectBlobTable["STATUS"] == 0) throw selectBlobTable["DATA"];
  116. return selectBlobTable["DATA"];
  117. }
  118. catch(e){
  119. throw e;
  120. }
  121. }
  122. async function unpackAndInsert(dbPath = null, company , cabangId){
  123. let db;
  124. try{
  125. //var dbPath = path.join(__dirname , `../public/sqlite/upload/uploadDB.db`);
  126. db = new sqlite3.Database(dbPath, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE);
  127. var stockTakingUnitId = await getValueTableByName(db,'STOCK_TAKING_UNIT_ID');
  128. var insertedData = await getInsertedData(db);
  129. var insertedPic = await getInsertedPic(db);
  130. var stockTakingData = {"company" : company , "cabangId" : cabangId, "stockTakingUnitId" : stockTakingUnitId};
  131. var result = await oracleModel.insertStockUnitData(stockTakingData,insertedData,insertedPic);
  132. if(db.open){
  133. return new Promise(function(resolve,reject){
  134. db.close(function(data){
  135. fs.unlinkSync(dbPath);
  136. resolve({"STATUS" : 1 ,"DATA" : result});
  137. })
  138. })
  139. }
  140. else{
  141. fs.unlinkSync(dbPath);
  142. return {"STATUS" : 1 ,"DATA" : result};
  143. }
  144. }
  145. catch(e){
  146. console.log(e);
  147. if(db.open){
  148. return new Promise(function(resolve,reject){
  149. db.close(function(data){
  150. resolve({"STATUS" : 0 ,"DATA" : e});
  151. })
  152. })
  153. // db.close(function(data){
  154. // return {"STATUS" : 0 ,"DATA" : e};
  155. // })
  156. }
  157. else{
  158. return {"STATUS" : 0 ,"DATA" : e};
  159. }
  160. }
  161. }
  162. // var dbPath = path.join(__dirname , `../public/sqlite/testaplod3.db`);
  163. // unpackAndInsert(dbPath,'TBS','02');
  164. async function CreateDataCollection(company = '' , cabangId = ''){
  165. var dbPath;
  166. let db;
  167. try {
  168. var checkStockTaking = await oracleModel.getActiveStockTakingByCabang(company,cabangId);
  169. var oracleData;
  170. if(checkStockTaking == undefined){
  171. oracleData = await oracleModel.prepareStockCollection(company,cabangId);
  172. }
  173. else {
  174. let state = checkStockTaking["STATE"];
  175. if(state == 'Submitted'){
  176. throw 'Gagal dalam mengambil data, mohon menunggu review data yang disubmit sebelumnya.';
  177. }
  178. oracleData = await oracleModel.getActiveStockCollection(company,cabangId,checkStockTaking["STOCK_TAKING_UNIT_ID"]);
  179. }
  180. var stockTakingUnitId = oracleData["stockTakingUnitId"];
  181. var dataUnitCabang = oracleData["dataUnitCabang"];
  182. var dataUnitPic = oracleData["dataUnitPic"];
  183. var jenisFoto = oracleData["jenisFoto"];
  184. var dirPath = path.join(__dirname , `../public/sqlite/db/${company}/${cabangId}`);
  185. var resultDirPath = fs.mkdirSync(dirPath, { recursive: true });
  186. var d = new Date();
  187. var n = d.getTime();
  188. var dbName = `${n}.db`;
  189. dbPath = path.join(dirPath ,dbName);
  190. db = new sqlite3.Database(dbPath, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE);
  191. // Create Table Reference
  192. var refTableQuery = `CREATE TABLE refTable(
  193. ID INTEGER PRIMARY KEY AUTOINCREMENT,
  194. MESIN TEXT,
  195. TIPE TEXT,
  196. RANGKA TEXT,
  197. WARNA TEXT,
  198. KODE TEXT,
  199. TAHUN TEXT,
  200. STATE TEXT,
  201. TIMESTAMP TEXT DEFAULT NULL,
  202. FLAG_INSERT TEXT DEFAULT 'FALSE'
  203. )`;
  204. var createRefTable = await sqliteFunc.runQuery(db,refTableQuery);
  205. if(createRefTable["STATUS"] == 0) throw createRefTable;
  206. // var insertTableQuery = `CREATE TABLE insertTable(
  207. // ID INTEGER PRIMARY KEY AUTOINCREMENT,
  208. // MESIN TEXT,
  209. // TIMESTAMP TEXT
  210. // )`;
  211. // var createInsertTable = await sqliteFunc.runQuery(db,insertTableQuery);
  212. // if(createInsertTable["STATUS"] == 0) throw createInsertTable;
  213. var insertTableBlob = `CREATE TABLE blobTable(
  214. BLOB_ID INTEGER PRIMARY KEY AUTOINCREMENT,
  215. MESIN TEXT,
  216. NO_URUT TEXT,
  217. BLOB_FILE BLOB,
  218. JENIS TEXT,
  219. LATITUDE TEXT,
  220. LONGITUDE TEXT
  221. )`;
  222. var createBlobTable = await sqliteFunc.runQuery(db,insertTableBlob);
  223. if(createBlobTable["STATUS"] == 0) throw createInsertTable;
  224. var valueTableQuery = `
  225. CREATE TABLE valueTable(
  226. NAME TEXT,
  227. VALUE TEXT
  228. )
  229. `;
  230. var createValueTable = await sqliteFunc.runQuery(db,valueTableQuery);
  231. if(createValueTable["STATUS"] == 0) throw createValueTable;
  232. var queryValueTableInsert = `insert into valueTable(name,value) VALUES ('STOCK_TAKING_UNIT_ID',${stockTakingUnitId})`;
  233. var insertValueTableInsert = await sqliteFunc.runQuery(db,queryValueTableInsert);
  234. if(insertValueTableInsert["STATUS"] == 0) throw insertValueTableInsert;
  235. var jenisBlobQuery = `
  236. CREATE TABLE jenisBlobTable(
  237. NO_URUT TEXT,
  238. VALUE TEXT
  239. )
  240. `;
  241. var createJenisBlobTable = await sqliteFunc.runQuery(db,jenisBlobQuery);
  242. if(createJenisBlobTable["STATUS"] == 0) throw createJenisBlobTable;
  243. //----------- JENIS FOTO----------------------------------------------
  244. await insertJenisFoto(db,jenisFoto);
  245. if(dataUnitCabang.length > 0){
  246. //----------- REF TABLE----------------------------------------------
  247. await insertRefTable(db,dataUnitCabang);
  248. //----------- UNIT DET PIC----------------------------------------------
  249. await insertUnitDetPic(db,dataUnitPic);
  250. }
  251. if(db.open){
  252. return new Promise(function(resolve,reject){
  253. db.close(function(data){
  254. resolve({"STATUS" : 1 ,"DATA" : dbPath});
  255. })
  256. });
  257. // db.close(function(data){
  258. // return {"STATUS" : 1, "DATA" : dbPath};
  259. // })
  260. }
  261. else{
  262. return {"STATUS" : 1, "DATA" : dbPath};
  263. }
  264. }
  265. catch(e){
  266. if(db){
  267. if(db.open){
  268. return new Promise(function(resolve,reject){
  269. db.close(function(data){
  270. fs.unlinkSync(dbPath);
  271. resolve({"STATUS" : 0 ,"DATA" : e});
  272. })
  273. });
  274. // db.close(function(data){
  275. // fs.unlinkSync(dbPath);
  276. // return {"STATUS" : 0 , "DATA": e};
  277. // });
  278. }
  279. }
  280. else{
  281. if(dbPath){
  282. fs.unlinkSync(dbPath);
  283. }
  284. console.log(e);
  285. return {"STATUS" : 0 , "DATA": e};
  286. }
  287. }
  288. }
  289. //CreateDataCollection("TBS",'02');
  290. module.exports = {
  291. CreateDataCollection : CreateDataCollection,
  292. unpackAndInsert : unpackAndInsert
  293. };