From 9a16cb432ed0a597caf9ba78c9dda63ad2134207 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期三, 01 七月 2020 12:42:40 +0800
Subject: [PATCH] 2020-07-01

---
 src/utils/utils.js |  278 +++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 209 insertions(+), 69 deletions(-)

diff --git a/src/utils/utils.js b/src/utils/utils.js
index 80c6139..9b4447d 100644
--- a/src/utils/utils.js
+++ b/src/utils/utils.js
@@ -10,9 +10,9 @@
   static getuuid () {
     let uuid = []
     let timestamp = new Date().getTime()
-    let options = '0123456789abcdefghigklmnopqrstuv'
+    let _options = '0123456789abcdefghigklmnopqrstuv'
     for (let i = 0; i < 19; i++) {
-      uuid.push(options.substr(Math.floor(Math.random() * 0x20), 1))
+      uuid.push(_options.substr(Math.floor(Math.random() * 0x20), 1))
     }
     uuid = timestamp + uuid.join('')
     return uuid
@@ -180,6 +180,81 @@
     }
 
     return value
+  }
+
+  /**
+   * @description sPC_TableData_InUpDe sql鍔犲瘑
+   * @return {String}  value
+   */
+  static sPCInUpDeFormatOptions (value) {
+    if (!value) return {LText: '', LText1: '', LText2: ''}
+
+    let salt = 'minKe' // 鐩愬��
+    // 鍏抽敭瀛楄浆鎹㈣鍒�
+    let format = [
+      { key: 'select', value: ' msltk ' },
+      { key: 'from', value: ' mfrmk ' },
+      { key: 'where', value: ' mwhrk ' },
+      { key: 'order by', value: ' modbk ' },
+      { key: 'asc', value: ' modack ' },
+      { key: 'desc', value: ' moddesk ' },
+      { key: 'top', value: ' mtpk ' },
+      { key: 'like', value: ' mlkk ' },
+      { key: 'not like', value: ' mnlkk ' },
+      { key: 'between', value: ' mbtnk ' },
+      { key: 'and', value: ' madk ' },
+      { key: 'insert', value: ' mistk ' },
+      { key: 'into', value: ' mitk ' },
+      { key: 'update', value: ' muptk ' },
+      { key: 'delete', value: ' mdelk ' },
+      { key: 'begin', value: ' mbgink ' },
+      { key: 'end', value: ' medk ' },
+      { key: 'if', value: ' mefk ' },
+      { key: 'while', value: ' mwilk ' },
+      { key: 'create', value: ' mcrtk ' },
+      { key: 'alter', value: ' matek ' },
+      { key: 'len', value: ' mlnk ' },
+      { key: 'left', value: ' mlftk ' },
+      { key: 'right', value: ' mritk ' },
+      { key: 'union', value: ' munok ' },
+      { key: 'varchar', value: ' mvcrk ' },
+      { key: 'getdate', value: ' mgtdtk ' },
+      { key: 'TRY', value: ' mtryonek ' },
+      { key: 'TRAN', value: ' mtrnk ' },
+      { key: 'goto', value: ' mgtk ' },
+      { key: 'set', value: ' mstk ' },
+      { key: 'ROLLBACK', value: ' mrlbkk ' }
+    ]
+
+    value = value.replace(/\n/ig, ' \n ')
+    // 鏇挎崲鍏抽敭瀛�
+    format.forEach(item => {
+      let reg = new RegExp('(^|\\s)' + item.key + '(\\s|$)', 'ig')
+      value = value.replace(reg, item.value)
+    })
+
+    // 1銆佹浛鎹�%绗︼紙鏁版嵁搴撲腑瑙f瀽鍚巗ql鎶ラ敊锛�
+    value = value.replace(/%/ig, ' mpercent ')
+
+    let encodesql = (val) => {
+      if (!val) return ''
+
+      let _value = window.btoa(window.encodeURIComponent(val))
+
+      // 鎻掑叆瀛楃
+      let index = Math.floor(_value.length / 2)
+      _value = _value.slice(0, index) + salt + _value.slice(index)
+
+      // base64鍔犲瘑
+      return window.btoa(_value)
+    }
+
+    // 娉細LText 涓� LText1 椤哄簭棰犲��
+    return {
+      LText: encodesql(value.substring(5000, 10000)),
+      LText1: encodesql(value.substring(0, 5000)),
+      LText2: encodesql(value.substring(10000))
+    }
   }
 
   /**
@@ -633,6 +708,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,22 +730,28 @@
 
         if (script.position === 'init') {
           _initCustomScript += `
-          ${script.sql}
-          `
+        /* 鑷畾涔夎剼鏈� */
+        ${script.sql}
+        `
         } else if (script.position === 'front') {
           _prevCustomScript += `
-          ${script.sql}
-          `
+        /* 鑷畾涔夎剼鏈� */
+        ${script.sql}
+        `
         } else {
           _backCustomScript += `
-          ${script.sql}
-          `
+        /* 鑷畾涔夎剼鏈� */
+        ${script.sql}
+        `
         }
       })
     }
 
     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 +820,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 +852,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 +868,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,81 +877,107 @@
           }
 
           _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
-
-          If @tbid!=''
-          Begin
-            select @ErrorCode='${unique.errorCode}',@retmsg=@tbid+' 閲嶅'
-            goto aaa
-          end
-
-          Set @tbid=''
-          Select top 1 @tbid=${_fields.join('+\' \'+')} from  @${item.sheet} a
-          Inner join ${item.sheet} b on ${_fields_}
-
-          If @tbid!=''
-          Begin
-            select @ErrorCode='${unique.errorCode}',@retmsg=@tbid+' 涓庡凡鏈夋暟鎹噸澶�'
-            goto aaa
-          end
-          `
+        /* 閲嶅鎬ч獙璇� */
+        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
+        
+        If @tbid!=''
+        Begin
+          select @ErrorCode='${unique.errorCode}',@retmsg=@tbid+' 閲嶅'
+          goto aaa
+        end
+        
+        Set @tbid=''
+        Select top 1 @tbid=${_afields.join('+\' \'+')} from  @${item.sheet} a Inner join ${item.sheet} b on ${_fields_}
+        
+        If @tbid!=''
+        Begin
+          select @ErrorCode='${unique.errorCode}',@retmsg=@tbid+' 涓庡凡鏈夋暟鎹噸澶�'
+          goto aaa
+        end
+        `
         })
-
-        if (_uniquesql) {
-          _uniquesql = 'Declare @tbid Nvarchar(512)' + _uniquesql
-        }
       }
 
       let declarefields = []
       let fields = []
 
       btn.columns.forEach(col => {
-        declarefields.push(`${col.Column} ${col.type}`)
+        if (col.import === 'false') return
+        
+        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)
+        
+        Select  @ErrorCode='', @retmsg='', @UserName='${userName}', @FullName='${fullName}'
+        ${_initCustomScript}
+        `
+      _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`
+
+      if (window.GLOB.systemType !== 'official' && options.sysType !== 'cloud') {
+        let fsql = `
+        ${_sql}
+        ${_sqlInsert}
+        
+        /* excel鏁版嵁锛堝墠40鏉★級 */
+        ${_Ltext.slice(0, 40).join(' Union all ')}
+        ${_sqlBottom}
+        `
+        fsql = fsql.replace(/\n\s{8}/ig, '\n')
+        console.log(fsql)
       }
-
-      _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@
-      ${_initCustomScript}
-      Insert into  @${item.sheet} (${fields},jskey)
-      ${_Ltext}
-      ${_uniquesql}
-      ${_insert}
-      Delete @${item.sheet}
-
-      aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg`
-
-    } else {
-      _sql = _Ltext
+    } else { // s_sDataDictb_excelIn 浜戠瀵嗛挜楠岃瘉鍙傛暟
+      _sql = `
+        /* 绯荤粺鐢熸垚 */
+        declare @${item.sheet} table (jskey nvarchar(50))
+        Declare @UserName nvarchar(50),@FullName nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@tbid Nvarchar(512)
+        
+        Select  @ErrorCode='', @retmsg='', @UserName='${userName}', @FullName='${fullName}'
+        `
     }
-
-    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('; ')
     }
   }
@@ -1439,8 +1576,11 @@
     _sql += `
         aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg`
 
-    _sql = _sql.replace(/\n\s{8}/ig, '\n')
-    console.log(_sql)
+    if (window.GLOB.systemType !== 'official' && options.sysType !== 'cloud') {
+      _sql = _sql.replace(/\n\s{8}/ig, '\n')
+      console.log(_sql)
+    }
+
     return _sql
   }
 }
\ No newline at end of file

--
Gitblit v1.8.0