king
2024-08-28 c10fc10d5fd307a7b334bcde6af5c1175aaa0410
src/utils/utils-datamanage.js
@@ -1,22 +1,24 @@
import md5 from 'md5'
import moment from 'moment'
import { notification, Modal } from 'antd'
import MKEmitter from '@/utils/events.js'
import Utils from './utils.js'
export default class DataUtils {
  /**
   * @description 数据源名称,用于统一查询
   * @param {Object}   setting      数据源设置
   * @param {Array}    search       搜索条件
   * @param {String}   orderBy      排序方式
   * @param {Number}   pageIndex    页码
   * @param {Number}   pageSize     每页数量
   * @param {String}   BID          上级ID
   * @description 数据源统一查询
   */
  static getQueryDataParams (setting, search = [], orderBy = '', pageIndex = 1, pageSize = 10, BID, id, year) {
    let param = null
    if (setting.interType === 'system') {
      param = this.getDefaultQueryParam(setting, search, orderBy, pageIndex, pageSize, id, BID, year)
      if (window.backend && window.GLOB.CacheData.has('sql_' + setting.uuid) && !window.GLOB.mkHS) {
        param = this.getDefaultQueryParam(setting, search, orderBy, pageIndex, pageSize, id, BID, year)
        this.getBackendQueryParam(setting, search, orderBy, pageIndex, pageSize, id, BID, year)
      } else {
        param = this.getDefaultQueryParam(setting, search, orderBy, pageIndex, pageSize, id, BID, year)
      }
    } else {
      param = this.getCustomQueryParam(setting, search, orderBy, pageIndex, pageSize, id, year)
    }
@@ -51,6 +53,10 @@
      param.mk_year = year
    }
    if (setting.hasExtend) {
      param.mk_time = setting.extendTime
    }
    if (setting.interType === 'inner') {
      param.func = setting.innerFunc
@@ -68,6 +74,12 @@
          param.$token = setting.exProInterface || ''
        } else {
          param.$token = setting.exInterface || ''
        }
      } else if (setting.sysInterface === 'custom') {
        if (window.GLOB.systemType === 'production') {
          param.rduri = setting.proInterface
        } else {
          param.rduri = setting.interface
        }
      } else {
        if (window.GLOB.systemType === 'production' && setting.proInterface) {
@@ -96,7 +108,7 @@
    let param = {
      func: 'sPC_Get_TableData',
      obj_name: 'data',
      exec_type: 'y',
      exec_type: window.GLOB.execType || 'y',
      arr_field: setting.arr_field,
      default_sql: setting.execute ? 'true' : 'false'
    }
@@ -135,20 +147,24 @@
      { reg: /@orderBy@/ig, value: orderBy },
      { reg: /@pageSize@/ig, value: setting.laypage ? pageSize : '9999' },
      { reg: /@pageIndex@/ig, value: pageIndex},
      { reg: /@select\$|\$select@/ig, value: ''},
      { reg: /\$sum@/ig, value: '/*'},
      { reg: /@sum\$/ig, value: '*/'},
      // { reg: /@select\$|\$select@/ig, value: ''},
      // { reg: /\$sum@/ig, value: '/*'},
      // { reg: /@sum\$/ig, value: '*/'},
      { reg: /@ID@/ig, value: `'${id || ''}'`},
      { reg: /@BID@/ig, value: `'${BID || ''}'`},
      { reg: /@LoginUID@/ig, value: `'${sessionStorage.getItem('LoginUID') || ''}'`},
      { reg: /@SessionUid@/ig, value: `'${localStorage.getItem('SessionUid') || ''}'`},
      { reg: /@UserID@/ig, value: `'${sessionStorage.getItem('UserID') || ''}'`},
      { reg: /@Appkey@/ig, value: `'${window.GLOB.appkey || ''}'`},
      { reg: /@lang@/ig, value: `'${sessionStorage.getItem('lang')}'`},
      { reg: /@typename@/ig, value: `'admin'`},
    )
    if (setting.hasExtend) {
      regoptions.push({ reg: /@mk_time@/ig, value: `'${setting.extendTime}'` })
    }
    if (setting.$re_year) {
      regoptions.push({ reg: /@mk_year@/ig, value: year })
      regoptions.push({ reg: /@mk_year@/ig, value: `'${year}'` })
    }
    regoptions.forEach(item => {
@@ -269,18 +285,18 @@
    // 测试系统打印查询语句
    if (window.GLOB.debugger === true) {
      _customScript && console.info(`${setting.$name ? `/*${setting.$name} 自定义脚本*/\n` : ''}${LText ? '' : '/*不执行默认sql*/\n'}${_customScript}`)
      LText && console.info(`${setting.$name ? `/*${setting.$name} 数据源*/\n` : ''}` + LText.replace(/\n\s{8}/ig, '\n'))
      DateCount && console.info(`${setting.$name ? `/*${setting.$name} 总数查询*/\n` : ''}` + DateCount.replace(/\n\s{8}/ig, '\n'))
      _customScript && window.mkInfo(`${setting.$name ? `/*${setting.$name} 自定义脚本*/\n` : ''}${LText ? '' : '/*不执行默认sql*/\n'}${_customScript}`)
      LText && window.mkInfo(`${setting.$name ? `/*${setting.$name} 数据源*/\n` : ''}` + LText.replace(/\n\s{8}/ig, '\n'))
      DateCount && window.mkInfo(`${setting.$name ? `/*${setting.$name} 总数查询*/\n` : ''}` + DateCount.replace(/\n\s{8}/ig, '\n'))
    }
    if (setting.$name) {
      param.menuname = setting.$name
    }
    param.custom_script = Utils.formatOptions(_customScript)
    param.LText = Utils.formatOptions(LText)
    param.DateCount = Utils.formatOptions(DateCount)
    param.custom_script = Utils.formatOptions(_customScript, param.exec_type)
    param.LText = Utils.formatOptions(LText, param.exec_type)
    param.DateCount = Utils.formatOptions(DateCount, param.exec_type)
    if (setting.sub_field) {
      param.sub_name = setting.subdata
@@ -289,9 +305,9 @@
      param.sub_field = setting.sub_field
    }
    // exec_type: 'y' 解码字段:LText、LText1、LText2、custom_script、DateCount
    // exec_type 解码字段:LText、LText1、LText2、custom_script、DateCount
    param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
    param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss.SSS')
    param.secretkey = Utils.encrypt('', param.timestamp)
    param.username = userName
@@ -308,6 +324,241 @@
      if (setting.tableName === 's_custom_script' && window.GLOB.mainSystemApi) {
        param.rduri = window.GLOB.mainSystemApi
      }
    } else if (window.GLOB.forcedUpdate) {
      param.s_version_up = 'true'
    }
    if (setting.database === 'sso' && window.GLOB.mainSystemApi) {
      param.rduri = window.GLOB.mainSystemApi
    }
    return param
  }
  /**
   * @description 获取系统存储过程的参数
   */
  static getBackendQueryParam (setting, search, orderBy, pageIndex, pageSize, id, BID, year) {
    let item = window.GLOB.CacheData.get('sql_' + setting.uuid)
    let param = {}
    let searchKeys = null
    if (setting.dataresource) {
      searchKeys = []
      if (search.length) {
        searchKeys = Utils.getSearchkeys(search)
      }
      if (id) {
        if (/^excel:/.test(id)) {
          id = id.replace(/^excel:/, '')
          searchKeys.push({
            key: setting.primaryKey || 'ID',
            match: 'in',
            type: 'text_in',
            value: id
          })
        } else {
          searchKeys.push({
            key: setting.primaryKey || 'ID',
            match: '=',
            type: 'text',
            value: id
          })
        }
      }
    }
    let values = {
      userid: sessionStorage.getItem('UserID') || '',
      time_id: Utils.getguid(),
      username: sessionStorage.getItem('User_Name') || '',
      fullname: sessionStorage.getItem('Full_Name') || '',
      roleid: sessionStorage.getItem('role_id') || '',
      mk_departmentcode: sessionStorage.getItem('departmentcode') || '',
      mk_organization: sessionStorage.getItem('organization') || '',
      mk_user_type: sessionStorage.getItem('mk_user_type') || '',
      mk_nation: sessionStorage.getItem('nation') || '',
      mk_province: sessionStorage.getItem('province') || '',
      mk_city: sessionStorage.getItem('city') || '',
      mk_district: sessionStorage.getItem('district') || '',
      mk_address: sessionStorage.getItem('address') || '',
      orderby: orderBy,
      pagesize: setting.laypage ? pageSize : '9999',
      pageindex: pageIndex,
      id: id || '',
      bid: BID || '',
      loginuid: sessionStorage.getItem('LoginUID') || '',
      sessionuid: localStorage.getItem('SessionUid') || '',
      appkey: window.GLOB.appkey || '',
      lang: sessionStorage.getItem('lang'),
      typename: 'admin',
      datam: sessionStorage.getItem('dataM') === 'true' ? 'Y' : '',
      datam_begin: sessionStorage.getItem('dataM') === 'true' ? 'Y' : '',
      datam_end: sessionStorage.getItem('dataM') === 'true' ? 'Y' : '',
      // datam_begin: sessionStorage.getItem('dataM') === 'true' ? '/*' : '',
      // datam_end: sessionStorage.getItem('dataM') === 'true' ? '*/' : '',
      mk_obj_name: 'data'
    }
    if (setting.hasExtend) {
      values.mk_time = setting.extendTime
    }
    if (setting.$re_year) {
      values.mk_year = year
    }
    if (window.GLOB.externalDatabase !== null) {
      values.db = window.GLOB.externalDatabase
    }
    if (item.works_flow_code) {
      values.works_flow_code = item.works_flow_code
    }
    item.urlkeys.forEach(key => {
      values[key] = item.urlparam[key]
    })
    let allSearch = Utils.getAllSearchOptions(search)
    allSearch.forEach(cell => {
      values[cell.key.toLowerCase()] = cell.value
    })
    let list = []
    if (searchKeys) {
      list.push({
        key: 'mk_search',
        value: searchKeys
      })
    }
    let sql = item.sql
    item.reps.forEach(n => {
      let key = n.toLowerCase()
      if (values.hasOwnProperty(key)) {
        list.push({
          key: n,
          value: values[key]
        })
      }
    })
    // let list = [
    //   {
    //     key: "mk_search",
    //     value: [
    //       { key: "nvarchar1,nvarchar3", match: "like", type: "text_or", value: "www" },
    //       { key: "int2", match: ">=", type: "number", value: "0" },
    //       { key: "int2", match: "<=", type: "number", value: "50" }
    //     ]
    //   },
    //   { key: "mk_obj_name", value: "data" },
    //   { key: "pageSize", value: 10 },
    //   { key: "orderBy", value: "ID desc" },
    //   { key: "pageIndex", value: 1 },
    //   {
    //     key: 'mk_excel_data',
    //     value: [[`'1'`, `'2'`, `'3'`, `'4'`, `'5'`], [`'6'`, `'7'`, `'8'`, `'9'`, `'10'`]]
    //   },
    //   {
    //     key: 'mk_outer_params',
    //     value: [
    //       {
    //         tb: '#tb1',
    //         keys: ['[nvarchar1]', '[nvarchar2]', '[nvarchar3]', '[mk_level]','[mk_id]','[mk_bid]'],
    //         values: [[`'1'`, `'2'`, `'3'`, `'4'`, `'5'`, `'6'`], [`'7'`, `'8'`, `'9'`, `'10'`, `'11'`, `'12'`]]
    //       },
    //       {
    //         tb: '@tb2',
    //         keys: ['[field1]', '[field2]', '[field3]', '[mk_level]','[mk_id]','[mk_bid]'],
    //         values: [[`'1'`, `'2'`, `'3'`, `'4'`, `'5'`, `'6'`], [`'7'`, `'8'`, `'9'`, `'10'`, `'11'`, `'12'`]]
    //       }
    //     ]
    //   },
    // ]
    list.forEach(cell => {
      if (cell.key === 'mk_outer_params') {
        let mk_outer_params = []
        cell.value.forEach(n => {
          mk_outer_params.push(` Insert into ${n.tb} (${n.keys.join(',')}) `)
          let vals = []
          n.values.forEach(m => {
            vals.push(` Select ${m.join(',')} `)
          })
          mk_outer_params.push(vals.join(' Union all '))
        })
        mk_outer_params = mk_outer_params.join('')
        sql = sql.replace(/@mk_outer_params@/ig, mk_outer_params)
      } else if (cell.key === 'mk_excel_data') {
        let mk_excel_data = []
        cell.value.forEach(n => {
          mk_excel_data.push(`Select ${n.join(',')}`)
        })
        mk_excel_data = mk_excel_data.join(' Union all ')
        sql = sql.replace(/@mk_excel_data@/ig, mk_excel_data)
      } else if (cell.key === 'datam_begin' || cell.key === 'mk_check_begin') {
        if (cell.value === 'Y') {
          sql = sql.replace(new RegExp('@' + cell.key + '@', 'ig'), '/*')
        } else {
          sql = sql.replace(new RegExp('@' + cell.key + '@', 'ig'), '')
        }
      } else if (cell.key === 'datam_end' || cell.key === 'mk_check_end') {
        if (cell.value === 'Y') {
          sql = sql.replace(new RegExp('@' + cell.key + '@', 'ig'), '*/')
        } else {
          sql = sql.replace(new RegExp('@' + cell.key + '@', 'ig'), '')
        }
      } else if (cell.key === 'mk_search') {
        let mk_search = []
        cell.value.forEach(n => {
          let str = n.match === 'like' || n.match === 'not like' ? '%' : ''
          if (n.type === 'text_or') {
            let vals = n.key.split(',').map(key => {
              return `${key} ${n.match} '${str}${n.value}${str}'`
            })
            mk_search.push(`(${vals.join(' OR ')})`)
          } else if (n.type === 'text_multi') {
            mk_search.push(`'${n.value}' ${n.match} '%'+${n.key}+'%'`)
          } else if (n.type === 'number') {
            mk_search.push(`${n.key} ${n.match} ${n.value}`)
          } else if (n.type === 'text_in') {
            mk_search.push(`${n.key} in (select ID from dbo.SplitComma('${n.value}'))`)
          } else {
            mk_search.push(`${n.key} ${n.match} '${str}${n.value}${str}'`)
          }
        })
        if (mk_search.length === 0) {
          mk_search = ''
        } else {
          mk_search = 'where ' + mk_search.join(' AND ')
        }
        sql = sql.replace(/@mk_search@/ig, mk_search)
      } else {
        sql = sql.replace(new RegExp('@' + cell.key + '@', 'ig'), cell.value)
      }
    })
    param.list = [
      {
        id: item.v_id,
        regExps: list,
        menuname: setting.$name || '',
        s_debug_type: window.GLOB.probation ? 'Y' : '',
        // md5_id: window.GLOB.probation ? md5(JSON.stringify(list)) : '',
      }
    ]
    if (setting.database === 'sso' && window.GLOB.mainSystemApi) {
      param.rduri = window.GLOB.mainSystemApi
    }
    return param
@@ -320,7 +571,7 @@
    let param = {
      func: 'sPC_Get_TableData',
      obj_name: 'data',
      exec_type: 'y',
      exec_type: window.GLOB.execType || 'y',
      arr_field: statFields.map(col => col.field).join(','),
      default_sql: setting.execute ? 'true' : 'false'
    }
@@ -358,15 +609,16 @@
      { reg: /@orderBy@/ig, value: orderBy },
      { reg: /@pageSize@/ig, value: 999999 },
      { reg: /@pageIndex@/ig, value: 1},
      { reg: /\$select@/ig, value: '/*'},
      { reg: /@select\$/ig, value: '*/'},
      { reg: /@sum\$|\$sum@/ig, value: ''},
      // { reg: /\$select@/ig, value: '/*'},
      // { reg: /@select\$/ig, value: '*/'},
      // { reg: /@sum\$|\$sum@/ig, value: ''},
      { reg: /@ID@/ig, value: `''`},
      { reg: /@BID@/ig, value: `'${BID || ''}'`},
      { reg: /@LoginUID@/ig, value: `'${sessionStorage.getItem('LoginUID') || ''}'`},
      { reg: /@SessionUid@/ig, value: `'${localStorage.getItem('SessionUid') || ''}'`},
      { reg: /@UserID@/ig, value: `'${sessionStorage.getItem('UserID') || ''}'`},
      { reg: /@Appkey@/ig, value: `'${window.GLOB.appkey || ''}'`},
      { reg: /@lang@/ig, value: `'${sessionStorage.getItem('lang')}'`},
      { reg: /@typename@/ig, value: `'admin'`},
    )
@@ -401,16 +653,16 @@
    // 测试系统打印查询语句
    if (window.GLOB.debugger === true) {
      _customScript &&  console.info(`${setting.$name ? `/*${setting.$name} 自定义脚本 统计查询*/\n` : ''}${LText ? '' : '/*不执行默认sql*/\n'}${_customScript}`)
      LText &&  console.info(`${setting.$name ? `/*${setting.$name} 数据源 统计查询*/\n` : ''}` + LText.replace(/\n\s{8}/ig, '\n'))
      _customScript && window.mkInfo(`${setting.$name ? `/*${setting.$name} 自定义脚本 统计查询*/\n` : ''}${LText ? '' : '/*不执行默认sql*/\n'}${_customScript}`)
      LText && window.mkInfo(`${setting.$name ? `/*${setting.$name} 数据源 统计查询*/\n` : ''}` + LText.replace(/\n\s{8}/ig, '\n'))
    }
    if (setting.$name) {
      param.menuname = setting.$name
    }
    
    param.custom_script = Utils.formatOptions(_customScript)
    param.LText = Utils.formatOptions(LText)
    param.custom_script = Utils.formatOptions(_customScript, param.exec_type)
    param.LText = Utils.formatOptions(LText, param.exec_type)
    param.DateCount = ''
    param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
@@ -433,6 +685,46 @@
    }
    return param
  }
  /**
   * @description 数据获取成功
   */
  static querySuccess (result) {
    if (!result.message) return
    if (result.ErrCode === 'Y') {
      Modal.success({
        title: result.message
      })
    } else if (result.ErrCode === 'S') {
      notification.success({
        top: 92,
        message: result.message,
        duration: 2
      })
    }
  }
  /**
   * @description 数据获取失败
   */
  static queryFail (result) {
    if (!result.message && result.ErrCode !== 'version_up') return
    if (result.ErrCode === 'N') {
      Modal.error({
        title: result.message,
      })
    } else if (result.ErrCode === 'version_up') {
      MKEmitter.emit('reloadTabs')
    } else if (result.ErrCode !== '-2') {
      notification.error({
        top: 92,
        message: result.message,
        duration: 10
      })
    }
  }
}
@@ -512,7 +804,6 @@
/**
 * @description 生成sPC_Get_structured_data请求参数
 * 1、把大接口sPC_Get_structured_data的ltext拆成三份,第一段:@LText1,第二段@LText,第三段@LText2
 */
export function getStructuredParams (params, config, BID) {
  let LText_field = []
@@ -527,6 +818,7 @@
    { reg: /@SessionUid@/ig, value: `'${localStorage.getItem('SessionUid') || ''}'`},
    { reg: /@UserID@/ig, value: `'${sessionStorage.getItem('UserID') || ''}'`},
    { reg: /@Appkey@/ig, value: `'${window.GLOB.appkey || ''}'`},
    { reg: /@lang@/ig, value: `'${sessionStorage.getItem('lang')}'`},
    { reg: /@typename@/ig, value: `'admin'`},
  ]
@@ -548,8 +840,8 @@
    // 测试系统打印查询语句
    if (window.GLOB.debugger === true) {
      _script && console.info(`${item.$name ? `/*${item.$name} 自定义脚本(同步查询)*/\n` : ''}${_sql ? '' : '/*不执行默认sql*/\n'}${_script}`)
      _sql && console.info(`${item.$name ? `/*${item.$name} 数据源(同步查询)*/\n` : ''}` + _sql)
      _script && window.mkInfo(`${item.$name ? `/*${item.$name} 自定义脚本(同步查询)*/\n` : ''}${_sql ? '' : '/*不执行默认sql*/\n'}${_script}`)
      _sql && window.mkInfo(`${item.$name ? `/*${item.$name} 数据源(同步查询)*/\n` : ''}` + _sql)
    }
    item.columns.forEach(cell => {
@@ -560,23 +852,16 @@
  let param = {
    func: 'sPC_Get_structured_data',
    LText: _LText.join(' union all '),
    LText_field: LText_field.join(' union all '),
    BID: BID,
    username: sessionStorage.getItem('User_Name') || '',
    fullName: sessionStorage.getItem('Full_Name') || ''
  }
  if (config.MenuName) {
    param.menuname = config.MenuName
  }
  param.menuname = config.MenuName || config.$menuname || ''
  let { LText, LText1, LText2 } = Utils.sPCInUpDeFormatOptions(param.LText)
  param.LText1 = LText1
  param.LText = LText
  param.LText2 = LText2
  param.LText_field = Utils.formatOptions(param.LText_field)
  param.exec_type = window.GLOB.execType || 'y'
  param.LText = Utils.formatOptions(_LText.join(' union all '), param.exec_type)
  param.custom_script = Utils.formatOptions(LText_field.join(' union all '), param.exec_type)
  if (config.cacheUseful === 'true') {
    param.time_type = config.timeUnit
@@ -588,7 +873,7 @@
  }
  param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
  param.secretkey = Utils.encrypt(param.LText, param.timestamp)
  param.secretkey = Utils.encrypt('', param.timestamp)
  return param
}