king
2020-06-28 48a18736c461ad730bd264b0ac7b40b68a0e33a1
src/utils/utils.js
@@ -633,6 +633,13 @@
  static getExcelInSql (item, data, dict) {
    let btn = item.verify
    let keys = ['delete', 'drop', 'insert', 'truncate', 'update']
    let userName = sessionStorage.getItem('User_Name') || ''
    let fullName = sessionStorage.getItem('Full_Name') || ''
    if (sessionStorage.getItem('isEditState') === 'true') {
      userName = sessionStorage.getItem('CloudUserName') || ''
      fullName = sessionStorage.getItem('CloudFullName') || ''
    }
    let errors = []
    let _topline = btn.range || 0
@@ -648,14 +655,17 @@
        if (script.position === 'init') {
          _initCustomScript += `
        /* 自定义脚本 */
          ${script.sql}
          `
        } else if (script.position === 'front') {
          _prevCustomScript += `
        /* 自定义脚本 */
          ${script.sql}
          `
        } else {
          _backCustomScript += `
        /* 自定义脚本 */
          ${script.sql}
          `
        }
@@ -663,7 +673,10 @@
    }
    let _Ltext = data.map((item, lindex) => {
      let vals = btn.columns.map((col, cindex) => {
      let vals = []
      btn.columns.forEach((col, cindex) => {
        if (col.import === 'false') return
        let val = item[col.Column] !== undefined ? item[col.Column] : ''
        let _position = (_topline + lindex + 1) + dict['main.excel.line'] + ' ' + (cindex + 1) + dict['main.excel.column']  + ' '
@@ -732,9 +745,28 @@
              errors.push(_error)
            }
          }
        } else if (col.type === 'date') {
          val = val.replace(/(^\s*$)|\t*|\v*/ig, '')
          if (!val && col.required === 'true') { // 必填校验
            let _error =  _position + dict['main.excel.content.emptyerror']
            errors.push(_error)
          } else {                               // 关键字校验
            keys.forEach(key => {
              let _patten = new RegExp('(^' + key + '\\s+)|(\\s+' + key + '\\s+)', 'ig')
              if (_patten.test(val)) {
                let _error = _position + dict['main.excel.includekey'] + key
                errors.push(_error)
              }
            })
          }
        }
        
        return `'${val}' as ${col.Column}`
        if (col.type === 'date') {
          vals.push(`case when ${col.Column}='' then '1900-01-01' else dateadd(day,cast('${val}' as int)-2,'1900-01-01') end as ${col.Column}`)
        } else {
          vals.push(`'${val}' as ${col.Column}`)
        }
      })
      let _lineIndex = '0000' + (lindex + 1) + '0'
@@ -745,9 +777,14 @@
      return `Select ${vals.join(',')}`
    })
    _Ltext = _Ltext.join(' Union all ')
    let result = []
    for(let i = 0; i < _Ltext.length; i += 20) {
      result.push(_Ltext.slice(i, i + 20))
    }
    let _sql = ''
    let _sqlInsert = ''
    let _sqlBottom = ''
    if (item.intertype === 'inner' && !item.innerFunc) {
      let _uniquesql = ''
@@ -756,9 +793,8 @@
          if (unique.status === 'false') return
          let _fields = unique.field.split(',')
          let _fields_ = _fields.map(_field => {
            return `a.${_field}=b.${_field}`
          })
          let _fields_ = _fields.map(_field => `a.${_field}=b.${_field}`)
          let _afields = _fields.map(_field => `a.${_field}`)
          _fields_ = _fields_.join(' and ')
          if (unique.verifyType !== 'physical') {
@@ -766,6 +802,7 @@
          }
          _uniquesql += `
        /* 重复性验证 */
          Set @tbid=''
          Select top 1 @tbid=${_fields.join('+\' \'+')} from (select 1 as n,${unique.field} from @${item.sheet} ) a group by ${unique.field} having sum(n)>1
@@ -776,8 +813,7 @@
          end
          Set @tbid=''
          Select top 1 @tbid=${_fields.join('+\' \'+')} from  @${item.sheet} a
          Inner join ${item.sheet} b on ${_fields_}
        Select top 1 @tbid=${_afields.join('+\' \'+')} from  @${item.sheet} a Inner join ${item.sheet} b on ${_fields_}
          If @tbid!=''
          Begin
@@ -786,61 +822,68 @@
          end
          `
        })
        if (_uniquesql) {
          _uniquesql = 'Declare @tbid Nvarchar(512)' + _uniquesql
        }
      }
      let declarefields = []
      let fields = []
      btn.columns.forEach(col => {
        if (col.type === 'date') {
          declarefields.push(`${col.Column} Nvarchar(50)`)
        } else {
        declarefields.push(`${col.Column} ${col.type}`)
        }
        fields.push(col.Column)
      })
      fields = fields.join(',')
      let _insert = ''
      if (_prevCustomScript) {
        _insert += _prevCustomScript
      }
      if (btn.default !== 'false') {
        _insert += `
        _insert = `
        /* 默认sql */
        Insert into ${item.sheet} (${fields},createuserid,createuser,createstaff,bid) 
        Select ${fields},@userid@,@username,@fullname,@BID@ From @${item.sheet}
        `
      }
      if (_backCustomScript) {
        _insert += _backCustomScript
      }
      _sql = `
        /* 系统生成 */
        declare @${item.sheet} table (${declarefields.join(',')},jskey nvarchar(50) )
        Declare @UserName nvarchar(50),@FullName nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@tbid Nvarchar(512)
      _sql = `declare @${item.sheet} table (${declarefields.join(',')},jskey nvarchar(50) )
      Declare @UserName nvarchar(50),@FullName nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000)
      Select  @ErrorCode='', @retmsg=''
      select @UserName=UserName,@FullName=FullName from SUsers where UID=@UserID@
        Select  @ErrorCode='', @retmsg='', @UserName='${userName}', @FullName='${fullName}'
      ${_initCustomScript}
      Insert into  @${item.sheet} (${fields},jskey)
      ${_Ltext}
        `
      _sqlInsert = `Insert into  @${item.sheet} (${fields},jskey)`
      _sqlBottom = `
        /* 默认sql */
        delete tmp_excel_in where upid=@upid@
        delete tmp_excel_in where datediff(day,createdate,getdate())>15
      ${_uniquesql}
        ${_prevCustomScript}
      ${_insert}
        ${_backCustomScript}
      Delete @${item.sheet}
      aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg`
    } else {
      _sql = _Ltext
      let fsql = `${_sql}${_sqlInsert}${_sqlBottom}`
      fsql = fsql.replace(/\n\s{8}/ig, '\n')
      console.log(fsql)
    }
    console.log(_sql)
    return {
      sql: _sql,
      lines: result.map((list, index) => {
        return {
          Ltext: window.btoa(window.encodeURIComponent(list.join(' Union all '))),
          Sort: (index + 1) * 10
        }
      }),
      insert: _sqlInsert,
      bottom: _sqlBottom,
      errors: errors.join('; ')
    }
  }