????
Current Path : C:/inetpub/vhost/sdoc.gdtsolutions.vn/package/app/controllers/ |
Current File : C:/inetpub/vhost/sdoc.gdtsolutions.vn/package/app/controllers/danhmuc.old.js |
const Database = require('../models/Database'); var moment = require('moment'); const pattern = /[^\p{L}\p{Nd}]+/gu;// /[\/\-\s]+/g class DanhMucController extends Database { constructor(params) { super(params); } static create(params) { return new DanhMucController(params); } async getFonds() { var fonds = await this.select('SELECT UUID,FondCode,FondNumber,FondName,FondHistory,PaperDigital,CopyNumber,[Description],State, (SELECT Count(UUID) FROM [File] WHERE [File].FondCode = Fond.FondCode AND [File].[State] = 1 AND [File].EditedBy is not NULL) countFile FROM Fond ORDER BY FondNumber'); return fonds; } getFileGroups() { return this.select('SELECT Id,GroupName FROM FileGroup') } getDocTypes() { return this.select('SELECT DocType.Id,DocType.TypeName,DocType.TypeGroup,DocTypeGroup.Name as GroupName FROM DocType INNER JOIN DocTypeGroup ON DocType.TypeGroup = DocTypeGroup.Id') } getOrgans() { return this.select('SELECT UUID,OrganId,OrganName FROM Organization') } getLanguages() { return this.select('SELECT LangCode,LangName FROM Language') } getConfidenceLevels() { return this.select('SELECT Id,Name FROM ConfidenceLevel') } getDocModes() { return this.select('SELECT Id,ModeName FROM Mode') } getLookupTools() { return this.select('SELECT Id,ToolName FROM LookupTool') } async getReqPrices() { let prices = await this.select('SELECT Code,Name,Price,Unit FROM ReqType'); let data = {}; for (let i = 0; i < prices.length; i++) { let { Code, ...value } = prices[i]; data[Code] = value; } return data; } //Danh mục hồ sơ văn bản async getDocuments(search) { let result = { draw: parseInt(search.draw) || 0, recordsTotal: 0, recordsFiltered: 0 }; let condition = []; let reqInput = {}; let order = '(SELECT NULL)'; let content = search['content'] ? search['content'].split(pattern).filter(x => x) : []; if (content.length > 1) reqInput['search'] = `NEAR((${search['content'].split(pattern).filter(x => x).join(',').trim()}), 5,FALSE)`; else if (content.length == 1) reqInput['search'] = `"${content.toString()}*"` //Tìm kiếm nâng cao if (moment.utc(search['startDate'], 'DD/MM/YYYY').isValid()) { condition.push('IssuedDate >= @startDate'); reqInput['startDate'] = moment.utc(search['startDate'], 'DD/MM/YYYY').toDate(); } if (moment.utc(search['endDate'], 'DD/MM/YYYY').isValid()) { condition.push('IssuedDate <= @endDate'); reqInput['endDate'] = moment.utc(search['endDate'], 'DD/MM/YYYY').toDate(); } if (search['type']) { condition.push('(DocType = @type)'); reqInput['type'] = search['type'] } if (search['notation']) { condition.push('CONTAINS(SearchDoc.CodeNotation, @notation)'); reqInput['notation'] = search['notation'].split(pattern).join('+').trim() } if (search['organ']) { condition.push('CONTAINS(OrganName, @organ)'); reqInput['organ'] = search['organ'].split(pattern).join('+').trim() } if (search['subject']) { condition.push('CONTAINS(Subject, @subject)'); reqInput['subject'] = search['subject'].split(pattern).join('+').trim() } if (reqInput['search']) order = 'rankSearch.[RANK] desc'; //Tạo chuỗi truy vấn let query = `SELECT ROW_NUMBER() OVER(ORDER BY ${order}) as RowNum,SearchDoc.UUID,FondName,FileCatalog,BoxNumber,FileNumber,DocType.TypeName,CodeNotation,IssuedDate,OrganName,[Subject],PageAmount,SearchDoc.[Description],Autograph,COUNT(SearchDoc.UUID) OVER() as countDocs FROM SearchDoc LEFT JOIN DocType ON SearchDoc.DocType = DocType.Id`; if (reqInput['search']) query += ' INNER JOIN CONTAINSTABLE(SearchDoc, *, @search) AS rankSearch ON rankSearch.[KEY] = SearchDoc.UUID'; if (condition.length) query += ' WHERE ' + condition.join(' AND '); query += ' ORDER BY RowNum'; reqInput['length'] = parseInt(search['length']) || 0; reqInput['start'] = parseInt(search['start']) || 0; if (reqInput['length']) query += ' OFFSET @start rows FETCH NEXT @length rows ONLY'; let recordset = await this.select(query, reqInput); if (recordset.length) result.recordsFiltered = result.recordsTotal = recordset[0].countDocs; result.data = recordset; return result; } async getFiles(search) { let result = { draw: parseInt(search.draw) || 0, recordsTotal: 0, recordsFiltered: 0 }; let condition = []; let reqInput = {}; let order = 'FondNumber,FileCatalog,BoxNumber,FileNumber'; let content = search['content'] ? search['content'].split(pattern).filter(x => x) : []; if (content.length > 1) reqInput['search'] = `NEAR((${search['content'].split(pattern).filter(x => x).join(',').trim()}), 5, FALSE)`; else if (content.length == 1) reqInput['search'] = `"${content.toString()}*"`; //Tìm kiếm nâng cao if (search['fond']) { condition.push('(SearchFile.FondCode = @fond)'); reqInput['fond'] = search['fond'] } if (search['group']) { condition.push('(SearchFile.GroupId = @group)'); reqInput['group'] = search['group'] } if (reqInput['search']) order = 'rankedFile.[RANK] desc'; //Tạo chuỗi truy vấn let query = `SELECT ROW_NUMBER() OVER(ORDER BY ${order}) RowNum,SearchFile.*,COUNT(SearchFile.UUID) OVER() as countFile FROM SearchFile`; if (reqInput['search']) query += ' INNER JOIN CONTAINSTABLE([File], *, @search) rankedFile ON rankedFile.[KEY] = SearchFile.UUID'; if (condition.length) query += ' WHERE ' + condition.join(' AND '); query += ' ORDER BY RowNum'; reqInput['length'] = parseInt(search['length']) || 0; reqInput['start'] = parseInt(search['start']) || 0; if (reqInput['length']) query += ' OFFSET @start rows FETCH NEXT @length rows ONLY'; let recordset = await this.select(query, reqInput); if (recordset.length) result.recordsFiltered = result.recordsTotal = recordset[0].countFile; result.data = recordset; return result; } async getFondDetail(reqQuery) { var data = { items: [], itemCount: 0 } if (!reqQuery.fondCode) return data; var input = { fond: reqQuery.fondCode, skip: parseInt(reqQuery.skip) || 0 } var query = 'WITH AllFile AS (SELECT UUID,FileCatalog,BoxNumber,FileNumber,Title,FileNotation,Maintenance,StartDate,EndDate,[Description],SheetNumber,PageNumber,(SELECT COUNT(Document.UUID) FROM Document WHERE Document.FileId = [File].UUID) as countDoc,EditedBy,ApprovedBy FROM [File] WHERE FondCode = @fond AND EditedBy is not NULL) SELECT *, COUNT(UUID) OVER() as countFile FROM AllFile ORDER BY FileCatalog,BoxNumber,FileNumber'; if (reqQuery.take) { input.take = parseInt(reqQuery.take); query += ' OFFSET @skip rows FETCH NEXT @take rows ONLY'; } var files = await this.select(query, input); data.items = files; if (files.length) data.itemCount = files[0].countFile; return data; } } module.exports = DanhMucController;