king
2024-10-10 633e781cefd3e984872953c64f743dc9abb33163
src/utils/utils-custom.js
@@ -3195,6 +3195,26 @@
            resetButton(item, group.subButton)
          })
        } else if (item.type === 'module' && item.subtype === 'invoice') {
          let msg = getDataSource(item.buyer, [])
          sqls.push({uuid: item.uuid + 'buyer', type: 'datasource', ...msg})
          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})
        }
      }
    })
@@ -6001,6 +6021,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(',')
    // 需要声明的变量集
    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') {