From e47184cc704621dd439fe24be40b94fed927b76f Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期五, 11 十月 2024 10:51:00 +0800
Subject: [PATCH] 2024-10-11

---
 src/utils/utils-custom.js |  295 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 288 insertions(+), 7 deletions(-)

diff --git a/src/utils/utils-custom.js b/src/utils/utils-custom.js
index 156e414..3a6e6de 100644
--- a/src/utils/utils-custom.js
+++ b/src/utils/utils-custom.js
@@ -3083,7 +3083,7 @@
             if (['select', 'link', 'multiselect', 'checkcard', 'radio'].includes(cell.type) && cell.resourceType === '1' && cell.dataSource) {
               let msg = getFormSql(cell, '鎼滅储')
       
-              sqls.push({uuid: cell.uuid, type: 'sForm', ...msg})
+              sqls.push({uuid: md5(item.uuid + cell.uuid), type: 'sForm', ...msg})
             }
           })
         }
@@ -3195,6 +3195,30 @@
 
             resetButton(item, group.subButton)
           })
+        } else if (item.type === 'module' && item.subtype === 'invoice') {
+          if (item.buyer.setting && item.buyer.setting.interType === 'system') {
+            let msg = getDataSource(item.buyer, [])
+            
+            sqls.push({uuid: item.uuid + 'buyer', type: 'datasource', ...msg})
+          }
+
+          if (item.detail.setting && item.detail.setting.interType === 'system') {
+            let _msg = getDataSource(item.detail, [])
+  
+            sqls.push({uuid: item.uuid + 'detail', type: 'datasource', ..._msg})
+          }
+
+          let btnmsg = getInvoicePreSql(item.billSaveBtn, item.$menuname + '-' + item.billSaveBtn.label)
+
+          sqls.push({uuid: item.uuid + item.billSaveBtn.type, type: 'button', ...btnmsg})
+
+          let _btnmsg = getInvoicePreSql(item.billOutBtn, item.$menuname + '-'  + item.billOutBtn.label)
+
+          sqls.push({uuid: item.uuid + item.billOutBtn.type, type: 'button', ..._btnmsg})
+
+          let backmsg = getInvoiceSysBackSql(item.billOutBtn, item.$menuname + '-'  + item.billOutBtn.label + '(鍥炶皟)')
+
+          sqls.push({uuid: item.uuid + 'billback', type: 'btnCallBack', ...backmsg})
         }
       }
     })
@@ -3259,6 +3283,10 @@
     } else if (cell.OpenType === 'excelOut') {
       if (cell.intertype === 'system' && cell.verify && cell.verify.dataType === 'custom') {
         let msg = getExcelOutSql(cell, item)
+
+        sqls.push({uuid: cell.uuid, type: 'excelOut', ...msg})
+      } else if (cell.intertype === 'system' && cell.verify && item.subtype === 'dualdatacard' && item.setting && item.setting.interType === 'system') {
+        let msg = getDoubleExcelOutSql(cell, item)
 
         sqls.push({uuid: cell.uuid, type: 'excelOut', ...msg})
       }
@@ -4642,8 +4670,6 @@
   }
 
   let getDataSource = (item, mainSearch = [], type) => {
-    if (!item.setting || item.setting.interType !== 'system') return
-
     let searches = item.search || []
     if (item.setting.useMSearch === 'true' && mainSearch.length > 0) {
       searches = [...searches, ...mainSearch]
@@ -4694,7 +4720,7 @@
       _search = ''
     }
 
-    if (/\s/.test(_dataresource)) {
+    if (/\s/.test(_dataresource) && !/\)\s+tb$/.test(_dataresource)) {
       _dataresource = '(' + _dataresource + ') tb'
     }
 
@@ -4798,8 +4824,14 @@
     // INSERT INTO s_paas_api_log (appkey,api_name,api_count,menuname,createuserid,createuser,createstaff,cdefine1,cdefine2) 
     // SELECT @appkey@,'sPC_Get_TableData',1,@menuname@,@UserID@,@username@,@fullname@,@SessionUid@,@LoginUID@
     let sql = ''
+    let e_sql = `select ${_columns.map(col => col.field).join(',')} from (select ${_columns.map(col => /date/ig.test(col.datatype) ? `'1949-10-01' as ${col.field}` : `'0' as ${col.field}`).join(',')}) a where ${item.setting.primaryKey || 'ID'} != '0'`
+    if (DateCount) {
+      e_sql += `
+      select 0 as total
+      `
+    }
 
-    if (item.setting.transact === 'true') {
+    if (item.setting.transact === 'true' && !/BEGIN\s+TRY\s+begin\s+TRAN/.test(_customScript)) {
       sql = `/* ${item.setting.$name} */
         BEGIN TRY 
         begin TRAN
@@ -4810,7 +4842,29 @@
 
       _tailScript = `${_tailScript}
         select @ErrorCode as ErrorCode,@retmsg as retmsg
-        ${callback}
+
+        COMMIT TRAN
+        set NOCOUNT ON
+        RETURN
+        END TRY
+        BEGIN CATCH
+          ROLLBACK TRAN
+          DECLARE @ErrorMessage NVARCHAR(4000);
+          DECLARE @ErrorSeverity INT;
+          DECLARE @ErrorState INT;
+
+          set @ErrorCode=cast(ERROR_NUMBER() as nvarchar(50))
+          set @retmsg=ERROR_MESSAGE();
+          select @ErrorMessage=ERROR_MESSAGE(), @ErrorSeverity=ERROR_SEVERITY(), @ErrorState=ERROR_STATE();
+
+          RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState);
+        END CATCH
+
+        aaa:
+        ${e_sql}
+        select @ErrorCode as ErrorCode,@retmsg as retmsg
+        GOTO_RETURN:
+          ROLLBACK TRAN
       `
     } else {
       sql = `/* ${item.setting.$name} */
@@ -4818,8 +4872,18 @@
         arr_field='${arr_field}',tabid='${tabid}',parid='${parid}',sub_name='${sub_name}',sub_field='${sub_field}'
       `
 
+      let tail = 'aaa:'
+      if (/\sgoto\s+aaa([^0-9a-z_]|$)/ig.test(_customScript) && !/BEGIN\s+TRY\s+begin\s+TRAN/.test(_customScript)) {
+        tail = `if 1=2
+        begin
+          aaa:
+          ${e_sql}
+        end`
+      }
+
       _tailScript = `${_tailScript}
-        select @ErrorCode as ErrorCode,@retmsg as retmsg
+        ${tail}
+          select @ErrorCode as ErrorCode,@retmsg as retmsg
       `
     }
 
@@ -5490,6 +5554,20 @@
     return msg
   }
 
+  let getDoubleExcelOutSql = (btn, component) => {
+    let item = fromJS(component).toJS()
+    item.search = item.$searches || []
+    item.subtype = 'datacard'
+    item.columns = [...item.columns, ...item.subColumns]
+
+    item.setting.laypage = btn.pagination
+    item.setting.$name = btn.logLabel || ''
+
+    let msg = getDataSource(item, [])
+
+    return msg
+  }
+
   let getPrintSql = (btn, component) => {
     let item = {setting: {}, columns: btn.verify.columns || [], search: [], useMSearch: 'false'}
 
@@ -5963,6 +6041,209 @@
     return {LText: sql, md5: md5(sql), reps}
   }
 
+  let getInvoicePreSql = (btn, logLabel) => {
+    let reps = []
+    let sysVars = ['loginuid', 'sessionuid', 'userid', 'appkey', 'lang', 'username', 'fullname', 'menuname']
+    let _script = ''
+    btn.scripts.forEach(item => {
+      if (item.status === 'false') return
+      _script += `
+      ${item.sql}
+      `
+    })
+
+    _script = _script.replace(/@typename@/ig, `'admin'`)
+    
+    let regs = ['ID', 'BID', 'time_id', 'datam', ...sysVars]
+
+    regs.forEach(s => {
+      if (new RegExp('@' + s + '@', 'ig').test(_script)) {
+        reps.push(s)
+      }
+    })
+
+    reps.forEach(n => {
+      _script = _script.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
+    })
+    if (/\$@/ig.test(_script)) {
+      _script = _script.replace(/\$@/ig, '@datam_begin@').replace(/@\$/ig, '@datam_end@')
+      reps.push('datam_begin', 'datam_end')
+    }
+    if (/@db@/ig.test(_script)) {
+      reps.push('db')
+    }
+
+    let syses = ['UserName', 'FullName', 'RoleID', 'mk_departmentcode', 'mk_organization', 'mk_user_type', 'mk_nation', 'mk_province', 'mk_city', 'mk_district', 'mk_address', 'bid']
+    let decSql = []
+    let secSql = []
+  
+    syses.forEach(s => {
+      if (new RegExp('@' + s + '[^0-9a-z_]', 'ig').test(_script)) {
+        if (['RoleID', 'mk_departmentcode', 'mk_organization'].includes(s)) {
+          decSql.push(`@${s} nvarchar(512)`)
+        } else if (['mk_address'].includes(s)) {
+          decSql.push(`@mk_address nvarchar(100)`)
+        } else {
+          decSql.push(`@${s} nvarchar(50)`)
+        }
+        secSql.push(`@${s}='@${s}@'`)
+        reps.push(s)
+      }
+    })
+    decSql = decSql.join(',')
+    secSql = secSql.join(',')
+
+    let sql = `/* ${logLabel} */
+      BEGIN TRY 
+      begin TRAN
+
+      Declare @ErrorCode nvarchar(50), @retmsg nvarchar(4000), @account_id nvarchar(50), @account_year_id nvarchar(50), @account_code nvarchar(50), @account_year_code nvarchar(50), @tbid nvarchar(50)${decSql ? ',' + decSql : ''}
+
+      Select @ErrorCode='S', @retmsg='', @account_id='@account_id@', @account_year_id='@account_year_id@', @account_code='@account_code@', @account_year_code='@account_year_code@'${secSql ? ',' + secSql : ''}
+
+      /* 鍙戠エ涓昏〃瀛楁 */
+      Declare @invoice_type Nvarchar(50), @from_to_name Nvarchar(50), @from_to_tax_no Nvarchar(50), @from_to_addr Nvarchar(100), @from_to_tel Nvarchar(50), @from_to_bank_name Nvarchar(50), @from_to_account_no Nvarchar(50), @from_to_mob Nvarchar(50), @from_to_email Nvarchar(50), @from_to_code Nvarchar(50), @orgname Nvarchar(50), @tax_no Nvarchar(50), @addr Nvarchar(100), @tel Nvarchar(50), @bank_name Nvarchar(50), @account_no Nvarchar(50), @remark Nvarchar(512), @payee Nvarchar(50), @reviewer Nvarchar(50), @drawer Nvarchar(50), @io Nvarchar(50), @orgcode Nvarchar(50), @total_net_amount Decimal(18,2), @total_tax Decimal(18,2), @total_amount Decimal(18,2), @business_type Nvarchar(20)
+
+      Select @invoice_type='@invoice_type@', @from_to_name='@from_to_name@', @from_to_tax_no='@from_to_tax_no@', @from_to_addr='@from_to_addr@', @from_to_tel='@from_to_tel@', @from_to_bank_name='@from_to_bank_name@', @from_to_account_no='@from_to_account_no@', @from_to_mob='@from_to_mob@', @from_to_email='@from_to_email@', @from_to_code='@from_to_code@', @orgname='@orgname@', @tax_no='@tax_no@', @addr='@addr@', @tel='@tel@', @bank_name='@bank_name@', @account_no='@account_no@', @remark='@remark@', @payee='@payee@', @reviewer='@reviewer@', @drawer='@drawer@', @io='@io@', @orgcode='@orgcode@', @total_net_amount=@total_net_amount@, @total_tax=@total_tax@, @total_amount=@total_amount@, @business_type='@business_type@'
+
+      /* 鍙戠エ鏄庣粏涓存椂琛� */
+
+      Declare @details_list table (productcode Nvarchar(50), productname Nvarchar(50), spec Nvarchar(50), unit Nvarchar(50), bill_count Decimal(18,10), unitprice Decimal(18,10), amount_line Decimal(18,2), tax_classify_code Nvarchar(50), tax_classify_name Nvarchar(50), tax_rate Decimal(18,2), tax_amount Decimal(18,2), free_tax_mark Nvarchar(50), vat_special_management Nvarchar(50), invoice_lp Nvarchar(50), tax_item Nvarchar(50), tax_method Nvarchar(50), jskey Nvarchar(50), data_type Nvarchar(50))
+
+      Insert into @details_list (productcode, productname, spec, unit, bill_count, unitprice, amount_line, tax_classify_code, tax_classify_name, tax_rate, tax_amount, free_tax_mark, vat_special_management, invoice_lp, tax_item, tax_method, jskey, data_type)
+
+      @mk_excel_data@
+
+      /* 鑷畾涔夎剼鏈� */
+      ${_script}
+      `
+
+    if (btn.type === 'billout') {
+      sql += callback
+    } else {
+      sql += `
+        select @ErrorCode as ErrorCode,@retmsg as retmsg
+        ${callback}
+        `
+    }
+
+    reps = reps.filter(n => {
+      if (sysVars.includes(n.toLowerCase())) {
+        return false
+      }
+
+      return true
+    })
+
+    sql = sql.replace(/\n\x20{6,8}/g, '\n').replace(/\n{3,}/g, '\n\n').replace(/^\s+|\s+$/g, '').replace(/\t+|\v+/g, '')
+
+    return {LText: sql, md5: md5(sql), reps}
+  }
+
+  let getInvoiceSysBackSql = (btn, logLabel) => {
+    let _prev = ''
+    let _back = ''
+    let tables = []
+    let reps = []
+
+    btn.cbScripts.forEach(script => {
+      if (script.status === 'false') return
+
+      if (/\s#[a-z0-9_]+(\s|\()/ig.test(script.sql)) {
+        tables.push(...script.sql.match(/\s#[a-z0-9_]+(\s|\()/ig))
+      }
+
+      if (script.position === 'front') {
+        _prev += `
+        /* 鑷畾涔夎剼鏈� */
+        ${script.sql}
+        `
+      } else {
+        _back += `
+        /* 鑷畾涔夎剼鏈� */
+        ${script.sql}
+        `
+      }
+    })
+
+    tables = tables.map(tb => tb.replace(/\s|\(/g, ''))
+
+    let syses = ['UserName', 'FullName', 'RoleID', 'mk_departmentcode', 'mk_organization', 'mk_user_type', 'mk_nation', 'mk_province', 'mk_city', 'mk_district', 'mk_address', 'bid']
+    let decSql = []
+    let secSql = []
+    let testSql = _prev + _back
+
+    _prev = _prev.replace(/@typename@/ig, `'admin'`)
+    _back = _back.replace(/@typename@/ig, `'admin'`)
+
+    let regs = ['ID', 'BID', 'time_id', 'datam', ...sysVars]
+
+    regs.forEach(s => {
+      if (new RegExp('@' + s + '@', 'ig').test(testSql)) {
+        reps.push(s)
+      }
+    })
+
+    reps.forEach(n => {
+      _prev = _prev.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
+      _back = _back.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
+    })
+    if (/\$@/ig.test(testSql)) {
+      _prev = _prev.replace(/\$@/ig, '@datam_begin@').replace(/@\$/ig, '@datam_end@')
+      _back = _back.replace(/\$@/ig, '@datam_begin@').replace(/@\$/ig, '@datam_end@')
+      reps.push('datam_begin', 'datam_end')
+    }
+    if (/@db@/ig.test(testSql)) {
+      reps.push('db')
+    }
+  
+    syses.forEach(s => {
+      if (new RegExp('@' + s + '[^0-9a-z_]', 'ig').test(testSql)) {
+        if (['RoleID', 'mk_departmentcode', 'mk_organization'].includes(s)) {
+          decSql.push(`@${s} nvarchar(512)`)
+        } else if (['mk_address'].includes(s)) {
+          decSql.push(`@mk_address nvarchar(100)`)
+        } else {
+          decSql.push(`@${s} nvarchar(50)`)
+        }
+        secSql.push(`@${s}='@${s}@'`)
+        reps.push(s)
+      }
+    })
+    decSql = decSql.join(',')
+    secSql = secSql.join(',')
+  
+    // 闇�瑕佸0鏄庣殑鍙橀噺闆�
+
+    let _sql = `/* ${logLabel} */
+      BEGIN TRY 
+      begin TRAN
+
+      Declare @ErrorCode nvarchar(50), @retmsg nvarchar(4000), @account_id nvarchar(50), @account_year_id nvarchar(50), @account_code nvarchar(50), @account_year_code nvarchar(50), @tbid nvarchar(50)${decSql ? ',' + decSql : ''}
+
+      Select @ErrorCode='S', @retmsg='', @account_id='@account_id@', @account_year_id='@account_year_id@', @account_code='@account_code@', @account_year_code='@account_year_code@'${secSql ? ',' + secSql : ''}
+
+      ${_prev}
+      /* 澶栭儴鎺ュ彛鍏ュ弬 */
+      @mk_outer_params@
+      ${_back}
+      select @ErrorCode as ErrorCode,@retmsg as retmsg
+      ${callback}
+      `
+
+    _sql = _sql.replace(/\n\x20{6,8}/g, '\n').replace(/\n{3,}/g, '\n\n').replace(/^\s+|\s+$/g, '').replace(/\t+|\v+/g, '')
+
+    reps = reps.filter(n => {
+      if (sysVars.includes(n.toLowerCase())) {
+        return false
+      }
+
+      return true
+    })
+
+    return { LText: _sql, md5: md5(_sql), reps, tbs: tables }
+  }
+
   let _mainSearch = []
 
   if (appType === 'mob') {

--
Gitblit v1.8.0