From 842d51317798db911b98434b5c2d202dbef0cdb8 Mon Sep 17 00:00:00 2001 From: jefry Date: Thu, 3 Jun 2021 16:41:34 +0700 Subject: [PATCH] check exist before process --- model/sqliteModel.js | 3 +- model/sqliteModel.js.bak | 348 +++++++++++++++++++++++++++++++++++++++++++++++ routes/datapost.js | 150 ++++++++++---------- 3 files changed, 431 insertions(+), 70 deletions(-) create mode 100644 model/sqliteModel.js.bak diff --git a/model/sqliteModel.js b/model/sqliteModel.js index 3c51633..69443e5 100644 --- a/model/sqliteModel.js +++ b/model/sqliteModel.js @@ -143,6 +143,7 @@ async function unpackAndInsert(dbPath = null, company , cabangId){ let db; try{ //var dbPath = path.join(__dirname , `../public/sqlite/upload/uploadDB.db`); + if(!dbPath || !fs.existsSync( dbPath )) throw "Database Not Exist. Kirim Ulang Data"; db = new sqlite3.Database(dbPath, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE); var stockTakingUnitId = await getValueTableByName(db,'STOCK_TAKING_UNIT_ID'); var insertedData = await getInsertedData(db); @@ -172,7 +173,7 @@ async function unpackAndInsert(dbPath = null, company , cabangId){ return new Promise(function(resolve,reject){ db.close(function(data){ - resolve({"STATUS" : 0 ,"DATA" : e}); + resolve({"STATUS" : 0 ,"DATA" : e.message||e}); }) }) // db.close(function(data){ diff --git a/model/sqliteModel.js.bak b/model/sqliteModel.js.bak new file mode 100644 index 0000000..3c51633 --- /dev/null +++ b/model/sqliteModel.js.bak @@ -0,0 +1,348 @@ +const sqlite3 = require('sqlite3').verbose(); +var sqliteFunc = require('../util/db_sqlite.js'); +var oracleModel = require('./oracleModel.js'); +const oracledb = require('oracledb'); +const path = require('path'); +const fs = require('fs'); + +async function insertRefTable(db,dataUnitCabang){ + try{ + var runQuery = 'insert into refTable(mesin,tipe,rangka,warna,kode,tahun,state) VALUES '; + for(var i = 0 ; i < dataUnitCabang.length ; i ++){ + if(i == dataUnitCabang.length -1){ + runQuery = runQuery.concat(`('${dataUnitCabang[i]["MESIN"]}','${dataUnitCabang[i]["TIPE"]}','${dataUnitCabang[i]["RANGKA"]}','${dataUnitCabang[i]["WARNA"]}', + '${dataUnitCabang[i]["KODE"]}','${dataUnitCabang[i]["TAHUN"]}','${dataUnitCabang[i]["STATE"]}')`); + } + else { + runQuery = runQuery.concat(`('${dataUnitCabang[i]["MESIN"]}','${dataUnitCabang[i]["TIPE"]}','${dataUnitCabang[i]["RANGKA"]}','${dataUnitCabang[i]["WARNA"]}', + '${dataUnitCabang[i]["KODE"]}','${dataUnitCabang[i]["TAHUN"]}','${dataUnitCabang[i]["STATE"]}'), `); + } + + } + var insertTable = await sqliteFunc.runQuery(db,runQuery); + if(insertTable["STATUS"] == 0) throw insertTable["DATA"] + } + catch(e){ + throw e; + } + +} + + +async function insertJenisFoto(db,jenisFoto){ + try{ + var valBlobTable = ''; + for(var i = 0 ; i < jenisFoto.length ; i++){ + if(i == jenisFoto.length -1) { + valBlobTable = valBlobTable.concat(`('${jenisFoto[i]["NO_URUT"]}','${jenisFoto[i]["JENIS"]}')`); + } + else{ + valBlobTable = valBlobTable.concat(`('${jenisFoto[i]["NO_URUT"]}','${jenisFoto[i]["JENIS"]}'),`); + } + + } + var insertJenisBlobQuery = ` + Insert Into jenisBlobTable Values ${valBlobTable} + + `; + + var insertBlobQuery = await sqliteFunc.runQuery(db,insertJenisBlobQuery); + if(insertBlobQuery["STATUS"] == 0) throw insertBlobQuery["DATA"] + } + catch(e){ + throw e; + } +} + + +async function insertUnitDetPic(db,dataUnitPic){ + try{ + var valDetPic = ''; + for(var i = 0 ; i < dataUnitPic.length ; i++){ + if(i == dataUnitPic.length -1) { + valDetPic = valDetPic.concat(`('${dataUnitPic[i]["MESIN"]}','${dataUnitPic[i]["NO_URUT"]}', + null,'${dataUnitPic[i]["JENIS"]}',null,null)`); + } + else{ + valDetPic = valDetPic.concat(`('${dataUnitPic[i]["MESIN"]}','${dataUnitPic[i]["NO_URUT"]}', + null,'${dataUnitPic[i]["JENIS"]}',null,null),`); + } + + } + var insertJenisBlobQuery = ` + Insert Into blobTable(MESIN,NO_URUT,BLOB_FILE,JENIS,LATITUDE,LONGITUDE) Values ${valDetPic}; + + `; + + var insertBlobQuery = await sqliteFunc.runQuery(db,insertJenisBlobQuery); + if(insertBlobQuery["STATUS"] == 0 ) throw insertBlobQuery["DATA"] + } + catch(e){ + throw e; + } +} + +async function getValueTableByName(db,name){ + var query = ` + select VALUE from + valueTable + where name = '${name}' + LIMIT 1 + `; + + var selectInsertTable = await sqliteFunc.selectQuery(db,query); + if(selectInsertTable["STATUS"] == 0) throw Error(selectInsertTable["DATA"]); + var data = selectInsertTable["DATA"]; + var value = data[0]["VALUE"]; + return value; + +} +async function getInsertedData(db){ + try{ + var query = ` + select + MESIN, + TIMESTAMP + from refTable + where flag_insert = 'TRUE' + `; + + var selectTimestampInsert = await sqliteFunc.selectQuery(db,query); + if(selectTimestampInsert["STATUS"] == 0) throw selectTimestampInsert["DATA"]; + return selectTimestampInsert["DATA"]; + } + catch(e){ + throw e; + } +} + +async function getInsertedPic(db){ + try{ + var query = ` + select + BLOB_FILE, + jenis, + latitude, + LONGITUDE, + MESIN, + NO_URUT + from blobTable where + blob_file IS NOT NULL + `; + var selectBlobTable = await sqliteFunc.selectQuery(db,query); + if(selectBlobTable["STATUS"] == 0) throw selectBlobTable["DATA"]; + return selectBlobTable["DATA"]; + } + catch(e){ + throw e; + } + +} + +async function unpackAndInsert(dbPath = null, company , cabangId){ + let db; + try{ + //var dbPath = path.join(__dirname , `../public/sqlite/upload/uploadDB.db`); + db = new sqlite3.Database(dbPath, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE); + var stockTakingUnitId = await getValueTableByName(db,'STOCK_TAKING_UNIT_ID'); + var insertedData = await getInsertedData(db); + var insertedPic = await getInsertedPic(db); + var stockTakingData = {"company" : company , "cabangId" : cabangId, "stockTakingUnitId" : stockTakingUnitId}; + var result = await oracleModel.insertStockUnitData(stockTakingData,insertedData,insertedPic); + if(db.open){ + return new Promise(function(resolve,reject){ + db.close(function(data){ + fs.unlinkSync(dbPath); + resolve({"STATUS" : 1 ,"DATA" : result}); + }) + }) + + } + else{ + fs.unlinkSync(dbPath); + return {"STATUS" : 1 ,"DATA" : result}; + } + + } + catch(e){ + console.log(e); + + if(db.open){ + + return new Promise(function(resolve,reject){ + db.close(function(data){ + + resolve({"STATUS" : 0 ,"DATA" : e}); + }) + }) + // db.close(function(data){ + // return {"STATUS" : 0 ,"DATA" : e}; + // }) + } + else{ + return {"STATUS" : 0 ,"DATA" : e}; + } + + } +} + + // var dbPath = path.join(__dirname , `../public/sqlite/testaplod3.db`); + // unpackAndInsert(dbPath,'TBS','02'); + + + +async function CreateDataCollection(company = '' , cabangId = ''){ + var dbPath; + let db; + try { + var checkStockTaking = await oracleModel.getActiveStockTakingByCabang(company,cabangId); + var oracleData; + if(checkStockTaking == undefined){ + oracleData = await oracleModel.prepareStockCollection(company,cabangId); + } + else { + let state = checkStockTaking["STATE"]; + if(state == 'Submitted'){ + throw 'Gagal dalam mengambil data, mohon menunggu review data yang disubmit sebelumnya.'; + } + oracleData = await oracleModel.getActiveStockCollection(company,cabangId,checkStockTaking["STOCK_TAKING_UNIT_ID"]); + } + + var stockTakingUnitId = oracleData["stockTakingUnitId"]; + var dataUnitCabang = oracleData["dataUnitCabang"]; + var dataUnitPic = oracleData["dataUnitPic"]; + var jenisFoto = oracleData["jenisFoto"]; + var dirPath = path.join(__dirname , `../public/sqlite/db/${company}/${cabangId}`); + var resultDirPath = fs.mkdirSync(dirPath, { recursive: true }); + + + var d = new Date(); + var n = d.getTime(); + var dbName = `${n}.db`; + + dbPath = path.join(dirPath ,dbName); + db = new sqlite3.Database(dbPath, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE); + + // Create Table Reference + var refTableQuery = `CREATE TABLE refTable( + ID INTEGER PRIMARY KEY AUTOINCREMENT, + MESIN TEXT, + TIPE TEXT, + RANGKA TEXT, + WARNA TEXT, + KODE TEXT, + TAHUN TEXT, + STATE TEXT, + TIMESTAMP TEXT DEFAULT NULL, + FLAG_INSERT TEXT DEFAULT 'FALSE' + )`; + var createRefTable = await sqliteFunc.runQuery(db,refTableQuery); + if(createRefTable["STATUS"] == 0) throw createRefTable; + + // var insertTableQuery = `CREATE TABLE insertTable( + // ID INTEGER PRIMARY KEY AUTOINCREMENT, + // MESIN TEXT, + // TIMESTAMP TEXT + // )`; + + // var createInsertTable = await sqliteFunc.runQuery(db,insertTableQuery); + // if(createInsertTable["STATUS"] == 0) throw createInsertTable; + + var insertTableBlob = `CREATE TABLE blobTable( + BLOB_ID INTEGER PRIMARY KEY AUTOINCREMENT, + MESIN TEXT, + NO_URUT TEXT, + BLOB_FILE BLOB, + JENIS TEXT, + LATITUDE TEXT, + LONGITUDE TEXT + )`; + + + var createBlobTable = await sqliteFunc.runQuery(db,insertTableBlob); + if(createBlobTable["STATUS"] == 0) throw createInsertTable; + + + var valueTableQuery = ` + CREATE TABLE valueTable( + NAME TEXT, + VALUE TEXT + ) + `; + + var createValueTable = await sqliteFunc.runQuery(db,valueTableQuery); + if(createValueTable["STATUS"] == 0) throw createValueTable; + + var queryValueTableInsert = `insert into valueTable(name,value) VALUES ('STOCK_TAKING_UNIT_ID',${stockTakingUnitId})`; + var insertValueTableInsert = await sqliteFunc.runQuery(db,queryValueTableInsert); + if(insertValueTableInsert["STATUS"] == 0) throw insertValueTableInsert; + + + var jenisBlobQuery = ` + CREATE TABLE jenisBlobTable( + NO_URUT TEXT, + VALUE TEXT + ) + `; + var createJenisBlobTable = await sqliteFunc.runQuery(db,jenisBlobQuery); + if(createJenisBlobTable["STATUS"] == 0) throw createJenisBlobTable; + + //----------- JENIS FOTO---------------------------------------------- + await insertJenisFoto(db,jenisFoto); + + if(dataUnitCabang.length > 0){ + //----------- REF TABLE---------------------------------------------- + await insertRefTable(db,dataUnitCabang); + + //----------- UNIT DET PIC---------------------------------------------- + await insertUnitDetPic(db,dataUnitPic); + } + + + if(db.open){ + return new Promise(function(resolve,reject){ + db.close(function(data){ + resolve({"STATUS" : 1 ,"DATA" : dbPath}); + }) + }); + // db.close(function(data){ + // return {"STATUS" : 1, "DATA" : dbPath}; + // }) + } + else{ + return {"STATUS" : 1, "DATA" : dbPath}; + } + + } + catch(e){ + if(db){ + if(db.open){ + return new Promise(function(resolve,reject){ + db.close(function(data){ + fs.unlinkSync(dbPath); + resolve({"STATUS" : 0 ,"DATA" : e}); + }) + }); + // db.close(function(data){ + // fs.unlinkSync(dbPath); + // return {"STATUS" : 0 , "DATA": e}; + // }); + } + } + + else{ + if(dbPath){ + fs.unlinkSync(dbPath); + } + console.log(e); + return {"STATUS" : 0 , "DATA": e}; + } + } +} +//CreateDataCollection("TBS",'02'); + + +module.exports = { + CreateDataCollection : CreateDataCollection, + unpackAndInsert : unpackAndInsert +}; \ No newline at end of file diff --git a/routes/datapost.js b/routes/datapost.js index 8976f3d..e47677c 100644 --- a/routes/datapost.js +++ b/routes/datapost.js @@ -1,79 +1,91 @@ -var express = require('express'); +var express = require("express"); var router = express.Router(); -var fs = require('fs'); -const path = require('path'); - -var sqliteModel = require('../model/sqliteModel.js'); -var oracleModel = require('../model/oracleModel.js'); - - -router.post('/uploadSqlitedb',async function(req,res,next){ - try{ - var dbBytes = req.body.byte; - - var company = req.body.company; - var cabangId = req.body.cabangId; - var activeStockTaking = await oracleModel.getActiveStockTakingByCabang(company,cabangId); - - if(activeStockTaking == undefined) return res.json({"STATUS" : 0, "DATA" : 'Data Stock Taking dalam status tidak Open !'}); - - var dirPath = path.join(__dirname , `../public/sqlite/upload/${company}/${cabangId}`); - - fs.mkdir(dirPath, { recursive: true }, (err) => { - // console.log('2',err); - var d = new Date(); - var n = d.getTime(); - var dbName = `${n}.db` - var dbPath = path.join(dirPath , dbName); - var a = fs.writeFileSync(dbPath,Buffer.from(dbBytes)); - return res.json({"STATUS" : 1, "DATA" : 'Data send successfully' , "dbPath" : dbPath}); - }); - } - catch(e){ - return res.json({"STATUS" : 0, "DATA" : e}); - } +var fs = require("fs"); +const path = require("path"); + +var sqliteModel = require("../model/sqliteModel.js"); +var oracleModel = require("../model/oracleModel.js"); + +router.post("/uploadSqlitedb", async function (req, res, next) { + try { + var dbBytes = req.body.byte; + + var company = req.body.company; + var cabangId = req.body.cabangId; + var activeStockTaking = await oracleModel.getActiveStockTakingByCabang( + company, + cabangId + ); + + if (activeStockTaking == undefined) + return res.json({ + STATUS: 0, + DATA: "Data Stock Taking dalam status tidak Open !", + }); + + var dirPath = path.join( + __dirname, + `../public/sqlite/upload/${company}/${cabangId}` + ); + + fs.mkdir(dirPath, { recursive: true }, (err) => { + // console.log('2',err); + var d = new Date(); + var n = d.getTime(); + var dbName = `${n}.db`; + var dbPath = path.join(dirPath, dbName); + var a = fs.writeFileSync(dbPath, Buffer.from(dbBytes)); + return res.json({ + STATUS: 1, + DATA: "Data send successfully", + dbPath: dbPath, + }); + }); + } catch (e) { + return res.json({ STATUS: 0, DATA: e }); + } }); +router.post("/unpackDb", async function (req, res, next) { + console.log(req.body); + var dbPath = req.body.dbPath; + var company = req.body.company; + var cabangId = req.body.cabangId; + var data = await sqliteModel.unpackAndInsert(dbPath, company, cabangId); -router.post('/unpackDb', async function(req,res,next){ - var dbPath = req.body.dbPath; - var company = req.body.company; - var cabangId = req.body.cabangId; - var data = await sqliteModel.unpackAndInsert(dbPath,company,cabangId); - - return res.json(data); -}) - -router.post('/login',async function(req,res,next){ - var username = req.body.User; - var password = req.body.Pass; - var data = await oracleModel.getDataUser(username,password); - return res.send(data); -}) - -router.post('/getCabangByUser',async function(req,res,next){ - var company = req.body.company; - var username = req.body.User; - var data = await oracleModel.getDataCabangByUser(company,username); - return res.send(data); -}) - -router.post('/submitStock', async function(req,res,next){ - console.log(req.body); - var company = req.body.company; - var stockTakingId = req.body.stockTakingId; - var data = await oracleModel.submitStockTaking(company,stockTakingId); - return res.send(data); + return res.json(data); +}); +router.post("/login", async function (req, res, next) { + var username = req.body.User; + var password = req.body.Pass; + var data = await oracleModel.getDataUser(username, password); + return res.send(data); }); -router.post('/getStateStockUnit', async function(req,res){ - var company = req.body.company; - var stockTakingId = req.body.stockTakingId; - var stateStockTaking = await oracleModel.getStateStockTaking(company,stockTakingId); - return res.send(stateStockTaking); -}) +router.post("/getCabangByUser", async function (req, res, next) { + var company = req.body.company; + var username = req.body.User; + var data = await oracleModel.getDataCabangByUser(company, username); + return res.send(data); +}); +router.post("/submitStock", async function (req, res, next) { + console.log(req.body); + var company = req.body.company; + var stockTakingId = req.body.stockTakingId; + var data = await oracleModel.submitStockTaking(company, stockTakingId); + return res.send(data); +}); +router.post("/getStateStockUnit", async function (req, res) { + var company = req.body.company; + var stockTakingId = req.body.stockTakingId; + var stateStockTaking = await oracleModel.getStateStockTaking( + company, + stockTakingId + ); + return res.send(stateStockTaking); +}); -module.exports = router; \ No newline at end of file +module.exports = router;