import moment from 'moment' import options from '@/store/options.js' import Utils from './utils.js' export default class DataUtils { /** * @description 数据源名称,用于统一查询 * @param {Object} setting 数据源设置 * @param {String} arrFields 查询字段 * @param {Array} search 搜索条件 * @param {String} orderBy 排序方式 * @param {Number} pageIndex 页码 * @param {Number} pageSize 每页数量 * @param {String} BID 上级ID * @param {String} menuType 菜单类型,普通菜单与HS * @return {Object} param */ static getQueryDataParams (setting, arrFields, search = [], orderBy = '', pageIndex = 1, pageSize = 10, BID, menuType, id) { let param = null if (setting.interType === 'system' || (setting.interType === 'custom' && setting.requestMode === 'system')) { param = this.getDefaultQueryParam(setting, arrFields, search, orderBy, pageIndex, pageSize, menuType, id) } else { param = this.getCustomQueryParam(setting, search, orderBy, pageIndex, pageSize, menuType, id) } if (BID) { param.BID = BID } // 数据管理权限 if (sessionStorage.getItem('dataM') === 'true') { param.dataM = 'Y' } return param } /** * @description 获取用户自定义存储过程传参 */ static getCustomQueryParam (setting, search, orderBy, pageIndex, pageSize, menuType, id) { let param = Utils.formatCustomMainSearch(search) if (orderBy) { param.OrderCol = orderBy } if (id) { param.ID = id } else if (setting.laypage) { param.PageIndex = pageIndex param.PageSize = pageSize } if (setting.interType === 'inner' || (setting.interType === 'custom' && setting.requestMode === 'inner')) { param.func = setting.innerFunc } else { if (menuType === 'HS') { if (setting.sysInterface === 'true' && options.cloudServiceApi) { param.rduri = options.cloudServiceApi } else if (setting.sysInterface !== 'true') { param.rduri = setting.interface } } else { if (setting.sysInterface === 'true' && window.GLOB.mainSystemApi) { param.rduri = window.GLOB.mainSystemApi } else if (setting.sysInterface !== 'true') { param.rduri = setting.interface } } if (setting.outerFunc) { param.func = setting.outerFunc } } return param } /** * @description 获取系统存储过程 sPC_Get_TableData 的参数 */ static getDefaultQueryParam (setting, arrFields, search, orderBy, pageIndex, pageSize, menuType, id) { let param = { func: 'sPC_Get_TableData', obj_name: 'data', exec_type: 'y', arr_field: arrFields, default_sql: setting.execute ? 'true' : 'false' } let userName = sessionStorage.getItem('User_Name') || '' let fullName = sessionStorage.getItem('Full_Name') || '' let city = sessionStorage.getItem('city') || '' if (sessionStorage.getItem('isEditState') === 'true') { userName = sessionStorage.getItem('CloudUserName') || '' fullName = sessionStorage.getItem('CloudFullName') || '' } let _dataresource = setting.dataresource let _customScript = '' if (setting.customScript) { _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@login_city nvarchar(50) Select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}', @login_city='${city}' ${setting.customScript} ` } let regoptions = null if (setting.queryType === 'statistics' || _customScript) { let allSearch = Utils.getAllSearchOptions(search) regoptions = allSearch.map(item => { return { reg: new RegExp('@' + item.key + '@', 'ig'), value: `'${item.value}'` } }) regoptions.push({ reg: new RegExp('@login_city@', 'ig'), value: `'${city}'` }, { reg: new RegExp('@userName@', 'ig'), value: `'${userName}'` }, { reg: new RegExp('@fullName@', 'ig'), value: `'${fullName}'` }, { reg: new RegExp('@orderBy@', 'ig'), value: orderBy }, { reg: new RegExp('@pageSize@', 'ig'), value: setting.laypage ? pageSize : '9999' }, { reg: new RegExp('@pageIndex@', 'ig'), value: pageIndex }) } let _search = '' if (setting.queryType === 'statistics' && _dataresource) { // 统计数据源,内容替换 regoptions.forEach(item => { _dataresource = _dataresource.replace(item.reg, item.value) }) } else if (_dataresource && !id) { _search = Utils.joinMainSearchkey(search) if (_search) { _search = 'where ' + _search } } else if (_dataresource && id) { _search = Utils.joinMainSearchkey(search) _search = `where ${_search ? _search + ' AND ' : ''} ${setting.primaryKey || 'ID'}='${id}'` } if (_customScript) { regoptions.forEach(item => { _customScript = _customScript.replace(item.reg, item.value) }) } let LText = '' let DateCount = '' if (_dataresource && setting.laypage && orderBy && !id) { LText = ` select top ${pageSize} ${arrFields} from (select ${arrFields} ,ROW_NUMBER() over(order by ${orderBy}) as rows from ${_dataresource} ${_search}) tmptable where rows > ${pageSize * (pageIndex - 1)} order by tmptable.rows ` DateCount = `select count(1) as total from ${_dataresource} ${_search}` } else if (_dataresource && orderBy) { LText = ` select ${arrFields} from (select ${arrFields} ,ROW_NUMBER() over(order by ${orderBy}) as rows from ${_dataresource} ${_search}) tmptable order by tmptable.rows ` } else if (_dataresource) { LText = ` select ${arrFields} from ${_dataresource} ${_search} ` } if (_customScript) { if (LText) { LText = `${LText} aaa: if @ErrorCode!='' insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,@UserID@ ` } else { _customScript = `${_customScript} aaa: if @ErrorCode!='' insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,@UserID@ ` } } // 测试系统打印查询语句 if ((options.sysType === 'local' && !window.GLOB.systemType) || window.debugger === true) { _customScript && console.info(`${setting.$name ? `/*组件-${setting.$name} 自定义脚本*/\n` : ''}${LText ? '' : '/*不执行默认sql*/\n'}${_customScript}`) LText && console.info(`${setting.$name ? `/*组件-${setting.$name} 数据源*/\n` : ''}` + LText) } param.custom_script = Utils.formatOptions(_customScript) param.LText = Utils.formatOptions(LText) param.DateCount = Utils.formatOptions(DateCount) // exec_type: 'y' 解码字段:LText、LText1、LText2、custom_script、DateCount param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') param.secretkey = Utils.encrypt('', param.timestamp) if (menuType === 'HS') { // 云端数据验证 param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp) } return param } /** * @description 获取系统存储过程 sPC_Get_TableData 合计值的参数 */ static getStatQueryDataParams (setting, statFields, search, orderBy, BID, menuType) { let param = { func: 'sPC_Get_TableData', obj_name: 'data', exec_type: 'y', arr_field: statFields.map(col => col.field).join(','), default_sql: setting.execute ? 'true' : 'false' } let _dataresource = setting.dataresource let _customScript = '' let userName = sessionStorage.getItem('User_Name') || '' let fullName = sessionStorage.getItem('Full_Name') || '' let city = sessionStorage.getItem('city') || '' if (sessionStorage.getItem('isEditState') === 'true') { userName = sessionStorage.getItem('CloudUserName') || '' fullName = sessionStorage.getItem('CloudFullName') || '' } if (setting.customScript) { _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@login_city nvarchar(50) Select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}', @login_city='${city}' ${setting.customScript} ` } let regoptions = null if (setting.queryType === 'statistics' || _customScript) { let allSearch = Utils.getAllSearchOptions(search) regoptions = allSearch.map(item => { return { reg: new RegExp('@' + item.key + '@', 'ig'), value: `'${item.value}'` } }) regoptions.push({ reg: new RegExp('@login_city@', 'ig'), value: `'${city}'` }, { reg: new RegExp('@userName@', 'ig'), value: `'${userName}'` }, { reg: new RegExp('@fullName@', 'ig'), value: `'${fullName}'` }, { reg: new RegExp('@orderBy@', 'ig'), value: orderBy }, { reg: new RegExp('@pageSize@', 'ig'), value: 999999 }, { reg: new RegExp('@pageIndex@', 'ig'), value: 1 }) } let _search = Utils.joinMainSearchkey(search) if (_search) { _search = 'where ' + _search } if (setting.queryType === 'statistics') { // 统计数据源,内容替换 regoptions.forEach(item => { _dataresource = _dataresource.replace(item.reg, item.value) }) _search = '' } if (_customScript) { regoptions.forEach(item => { _customScript = _customScript.replace(item.reg, item.value) }) } let LText = ` select ${statFields.map(col => `isnull(sum(${col.field}),0) as ${col.field}`).join(',')} from ${_dataresource} ${_search} ` if (_customScript) { LText = `${LText} aaa: if @ErrorCode!='' insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,@UserID@ ` } // 测试系统打印查询语句 if ((options.sysType === 'local' && !window.GLOB.systemType) || window.debugger === true) { _customScript && console.info(`${setting.$name ? `/*组件-${setting.$name} 自定义脚本 统计查询*/\n` : ''}${LText ? '' : '/*不执行默认sql*/\n'}${_customScript}`) LText && console.info(`${setting.$name ? `/*组件-${setting.$name} 数据源 统计查询*/\n` : ''}` + LText) } param.custom_script = Utils.formatOptions(_customScript) param.LText = Utils.formatOptions(LText) param.DateCount = '' param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') param.secretkey = Utils.encrypt('', param.timestamp) if (menuType === 'HS') { // 云端数据验证 param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp) } if (BID) { param.BID = BID } // 数据管理权限 if (sessionStorage.getItem('dataM') === 'true') { param.dataM = 'Y' } return param } /** * @description 数据源名称,用于统一查询 * @param {Object} setting 数据源设置 * @param {String} arrFields 查询字段 * @param {Array} search 搜索条件 * @param {String} orderBy 排序方式 * @param {Number} pageIndex 页码 * @param {Number} pageSize 每页数量 * @param {String} BID 上级ID * @param {String} menuType 菜单类型,普通菜单与HS * @return {Object} param */ static getPrevQueryParams (setting, search = [], BID, menuType) { let param = null if (setting.procMode !== 'inner') { param = this.getDefaultPrevQueryParam(setting, search, menuType) } else { param = Utils.formatCustomMainSearch(search) param.func = setting.prevFunc || '' } if (BID) { param.BID = BID } return param } /** * @description 获取系统存储过程 sPC_Get_TableData 的参数 */ static getDefaultPrevQueryParam (setting, search, menuType) { let param = { func: 'sPC_TableData_InUpDe', exec_type: 'y', script_type: 'Y' } let sql = '' let userName = sessionStorage.getItem('User_Name') || '' let fullName = sessionStorage.getItem('Full_Name') || '' let city = sessionStorage.getItem('city') || '' if (sessionStorage.getItem('isEditState') === 'true') { userName = sessionStorage.getItem('CloudUserName') || '' fullName = sessionStorage.getItem('CloudFullName') || '' } setting.preScripts.forEach(item => { if (item.status === 'false') return sql += `${item.sql} ` }) if (sql) { sql = `/*前置脚本*/ declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@login_city nvarchar(50) Select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}', @login_city='${city}' ${sql} aaa: if @ErrorCode!='' insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,@UserID@ ` let allSearch = Utils.getAllSearchOptions(search) let regoptions = allSearch.map(item => { return { reg: new RegExp('@' + item.key + '@', 'ig'), value: `'${item.value}'` } }) regoptions.push({ reg: new RegExp('@login_city@', 'ig'), value: `'${city}'` }, { reg: new RegExp('@userName@', 'ig'), value: `'${userName}'` }, { reg: new RegExp('@fullName@', 'ig'), value: `'${fullName}'` }) regoptions.forEach(item => { sql = sql.replace(item.reg, item.value) }) // 测试系统打印查询语句 if ((options.sysType === 'local' && !window.GLOB.systemType) || window.debugger === true) { console.info(sql.replace(/\n\s{8}/ig, '\n')) } } if (sessionStorage.getItem('dataM') === 'true') { // 数据权限 sql = sql.replace(/\$@/ig, '/*') sql = sql.replace(/@\$/ig, '*/') } else { sql = sql.replace(/@\$|\$@/ig, '') } param.LText = Utils.formatOptions(sql) param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') param.secretkey = Utils.encrypt('', param.timestamp) if (menuType === 'HS') { // 函数 sPC_TableData_InUpDe 云端验证 param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp) } param.menuname = setting.MenuName || '' return param } /** * @description 获取系统存储过程 sPC_Get_TableData 的参数 */ static getCallBackQueryParams (setting, sql, errSql) { let param = { func: 'sPC_TableData_InUpDe', exec_type: 'y', } let userName = sessionStorage.getItem('User_Name') || '' let fullName = sessionStorage.getItem('Full_Name') || '' let city = sessionStorage.getItem('city') || '' if (sessionStorage.getItem('isEditState') === 'true') { userName = sessionStorage.getItem('CloudUserName') || '' fullName = sessionStorage.getItem('CloudFullName') || '' } let _prevCustomScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@login_city nvarchar(50) Select @ErrorCode='',@retmsg='',@UserName='${userName}', @FullName='${fullName}', @login_city='${city}' ${errSql} ` let _backCustomScript = ` ` setting.cbScripts.forEach(script => { if (script.status === 'false') return if (script.position === 'front') { _prevCustomScript += ` /* 自定义脚本 */ ${script.sql} ` } else { _backCustomScript += ` /* 自定义脚本 */ ${script.sql} ` } }) _backCustomScript += ` aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg` sql = _prevCustomScript + sql sql = sql + _backCustomScript if ((window.GLOB.systemType !== 'production' && options.sysType !== 'cloud') || window.debugger === true) { console.info(sql.replace(/\n\s{8}/ig, '\n')) } param.LText = sql if (sessionStorage.getItem('dataM') === 'true') { // 数据权限 param.LText = param.LText.replace(/\$@/ig, '/*') param.LText = param.LText.replace(/@\$/ig, '*/') } else { param.LText = param.LText.replace(/@\$|\$@/ig, '') } param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') param.secretkey = Utils.encrypt('', param.timestamp) param.LText = Utils.formatOptions(param.LText) param.menuname = setting.MenuName || '' return param } /** * @description 获取回调sql */ static getCallBackSql (setting, result) { let lines = [] let pre = setting.callbackType === 'script' ? '@' : '' let getDefaultSql = (obj, tb, bid, level) => { let keys = [] let vals = [] let subObjs = [] let id = Utils.getuuid() delete obj.$$key Object.keys(obj).forEach(key => { let val = obj[key] if (val === null || val === undefined) return if (typeof(val) === 'object') { if (Array.isArray(val)) { val.forEach(item => { if (typeof(item) !== 'object' || Array.isArray(item)) return if (Object.keys(item).length > 0) { item.$$key = tb + '_' + key subObjs.push(item) } }) } else if (Object.keys(val).length > 0) { val.$$key = tb + '_' + key subObjs.push(val) } } else { keys.push(key) vals.push(`'${val}'`) } }) lines.push({ table: tb, insert: `Insert into ${pre}${tb} (${keys.join(',')},mk_level,mk_id,mk_bid)`, select: `Select ${vals.join(',')},'${level}','${id}','${bid}'` }) subObjs.forEach(item => { getDefaultSql(item, item.$$key, id, level + 1) }) } getDefaultSql(result, setting.cbTable, '', 1) let lineMap = new Map() lines.forEach(line => { if (lineMap.has(line.table)) { let _line = lineMap.get(line.table) _line.selects.push(line.select) lineMap.set(line.table, _line) } else { lineMap.set(line.table, { table: line.table, insert: line.insert, selects: [line.select] }) } }) return [...lineMap.values()] } }