????
Current Path : C:/inetpub/vhost/sdoc.gdtsolutions.vn/package/app/routes/sohoa/ |
Current File : C:/inetpub/vhost/sdoc.gdtsolutions.vn/package/app/routes/sohoa/taovanban.js |
var {existsSync, statSync} = require('fs'); var fsp = require('fs/promises'); var path = require('path'); var multer = require('multer'); var vanbanCtrl = require('../../controllers/tailieu/vanban').create(); var { useLayout } = require('../../controllers/middleware'); var { scanPath } = require('../../appconfig'); var {decodePath} = require('../../utils'); module.exports = function () { var router = require('express').Router(); //GET router.get('/', useLayout, function (req, res, _next) { res.render('sohoa/taovanban.eta', {title: 'Tạo văn bản'}); }); //POST //Hỗ trợ tạo văn bản router.get('/thumuc', async function (req, res, _next) { let folder = decodePath(req.query.path); let result = { root: folder ? path.normalize(folder) : '', folders: [], files: [] } try { let dir = scanPath; if (!existsSync(dir)) await fsp.mkdir(dir, {recursive: true}); if (req.query.path) dir = path.join(dir, folder); if (await fsp.access(dir).then(() => true).catch(() => false)) { let files = await fsp.readdir(dir); let sortFiles = files.filter(function (x) { try { let stat = statSync(path.join(dir, x)); return path.extname(x).toLowerCase() == '.pdf' && !stat.isDirectory(); } catch { return false; } }).map(function (y) { try { let stat = statSync(path.join(dir, y)); return { name: y, size: stat.size } } catch { return null; } }).filter(f => f); sortFiles.sort(function (a, b) { let arrA = a.name.split('.'); let arrB = b.name.split('.'); if (parseInt(arrA[0]) > parseInt(arrB[0])) return 1; else if (parseInt(arrA[0]) < parseInt(arrB[0])) return - 1; else if (parseInt(arrA[0]) == parseInt(arrB[0]) && arrA[0] > arrB[0]) return 1; else if (parseInt(arrA[0]) == parseInt(arrB[0]) && arrA[0] < arrB[0]) return -1; else if (parseInt(arrA[0]) == parseInt(arrB[0]) && arrA[0] == arrB[0]) { if (parseInt(arrA[1]) > parseInt(arrB[1])) return 1; else if (parseInt(arrA[1]) < parseInt(arrB[1])) return -1; else if (parseInt(arrA[1]) == parseInt(arrB[1])) return 0; } }); result.folders = files.filter(function (x) { try { let stat = statSync(path.join(dir, x)); return stat.isDirectory(); } catch {return false;} }); result.files = sortFiles; res.status(200).send(result); } else res.status(400).send({ 'Lỗi': 'Đường dẫn không tồn tại' }); } catch (err) { res.status(400).send(err.message) } }); router.post('/thumuc', async function (req, res, _next) { try { var folder = path.join(scanPath, req.body.dir, req.body.name); if (existsSync(folder)) res.status(400).send(`Đã tồn tại thư mục tên "${req.body.name}"`) else { await fsp.mkdir(folder, {recursive:true}); res.status(200).send('Tạo thư mục thành công') } } catch (err) { res.statusMessage = err.message; res.status(400).end() } }); router.post('/thumuc/delete', async function (req, res, _next) { try { await fsp.rm(path.join(scanPath, req.body.path), {recursive:true,force:true}); res.end(); } catch (err) { console.log(err); res.status(400).send(err) } }); router.post('/upload', async function (req, res, _next) { var rootFolder = decodePath(req.query.root); var uploadDir = path.join(scanPath, rootFolder); try { if (!existsSync()) await fsp.mkdir(uploadDir, {recursive:true}); var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, uploadDir); }, filename: function (req, file, cb) { cb(null, decodeURI(req.body.encFilename)); } }); var upload = multer({ storage: storage }).single('file'); upload(req, res, function (err) { if (err) res.status(400).send(err); else res.status(200).send(req.file.name); }); } catch (err) { res.status(400).send(err) } }); router.get('/hoso', function (req, res, _next) { var userId = req.user.UUID; var where = []; if (req.query.fond) { where.push(`FondCode = '${req.query.fond}'`); where.push('[State] = 1'); //where.push(`(EditedBy is null OR (EditedBy = '${userId}' AND JobState = 0))`); if (req.query.search) where.push(`(FileNumber LIKE '${req.query.search}%')`); var query = `SELECT UUID,FileCode,Title,FileCatalog,BoxNumber,FileNumber,StartDate,EndDate FROM [File] WHERE ${where.join(' AND ')} ORDER BY FileCatalog,BoxNumber,FileNumber offset ${((req.query.page || 1) - 1) * 10} rows fetch next 10 rows only`; vanbanCtrl.select(query) .then(function (recordset) { var result = { results: recordset.map(function (x) { x.id = x.FileCode; return x }) }; if (recordset.length == 10) result.pagination = { more: true }; res.json(result); }) .catch(function (err) { res.status(400).json(err) }) } else res.json(null); }); router.get('/scan/:path', function (req, res, _next) { var filePath = path.join(scanPath, decodePath(req.params.path)); if (!existsSync(filePath)) res.status(404).end('Văn bản tạm thời đã không còn tồn tại'); else { res.status(200).sendFile(filePath); } }); router.get('/coquan', function (req, res, _next) { if (req.query.filter && req.query.filter.filters) { let select1 = 'SELECT OrganName FROM Organization'; let select2 = 'SELECT OrganName FROM Document WHERE OrganName is not null'; let filter = req.query.filter.filters[0]; let input = { contains: `"${filter['value']}*"` } select1 += ' WHERE Contains(OrganName, @contains)'; select2 += ' AND Contains(OrganName, @contains)'; let query = `SELECT * FROM (${select1} UNION ${select2}) as temp`; vanbanCtrl.select(query, input) .then(function (recordset) { res.json(recordset).end() }) .catch(function (err) { res.status(400).send(err) }) } else { res.status(400).json(null) } }); return router; }