⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cx97.cpp

📁 电信语音系统源码
💻 CPP
字号:
//----------------------------------------------------------------------------
// 语音系统 - (C) Copyright 1997, 1997 by SCGT
//   Yy\Cx.cpp
//   源程序
//----------------------------------------------------------------------------
#include <owl\owlpch.h>

#include "Util.h"   // 工具
#include "Dbase.h"  // 数据库
#include "Oracle.h"

#include "Tele.h"
#include "Yy97.h"

#define CX_CH 3
enum
{
   cxPlayHello,
   cxGetNumber,
   cxPlayResult,
   cxWaitRing,
   cxNull,
};

// CX.DBF
enum
{
   fdCxTel = 0,      // fd: field
   fdCxCNo,
   fdCxLCTChg,
   fdCxLDTChg,
   fdCxOTChg,
   fdCxRChg,
};

static char nGroup = 0;
BOOL bCxBusy;
static TTable* tblCx;

/*
//00//"┏━━━━┯━━━━━┯━━━━━┯━━━━━┓",
//01//"┃查询用户│ 第 一 路 │ 第 二 路 │ 第 三 路 ┃",
//02//"┠────┼─────┼─────┼─────┨",
//03//"┃电话号码│12345678  │12345678  │12345678  ┃",
//04//"┃  合同号│12345678  │12345678  │12345678  ┃",
//05//"┠────┼─────┼─────┼─────┨",
//06//"┃  市话费│123456.12 │123456.12 │123456.12 ┃",
//07//"┃  长话费│123456.12 │123456.12 │123456.12 ┃",
//08//"┃    其它│123456.12 │123456.12 │123456.12 ┃",
//09//"┠────┼─────┼─────┼─────┨",
//10//"┃    合计│123456.12 │123456.12 │123456.12 ┃",
//11//"┗━━━━┷━━━━━┷━━━━━┷━━━━━┛",
*/
static char* szCx[] =
{
     //0         1         2         3         4
     //0123456789012345678901234567890123456789012345678
/*00*/"┏━━━━┯━━━━━┯━━━━━┯━━━━━┓",
/*01*/"┃查询用户│ 第 一 路 │ 第 二 路 │ 第 三 路 ┃",
/*02*/"┠────┼─────┼─────┼─────┨",
/*03*/"┃电话号码│          │          │          ┃",
/*04*/"┃  合同号│          │          │          ┃",
/*05*/"┠────┼─────┼─────┼─────┨",
/*06*/"┃  市话费│          │          │          ┃",
/*07*/"┃  长话费│          │          │          ┃",
/*08*/"┃    其它│          │          │          ┃",
/*09*/"┠────┼─────┼─────┼─────┨",
/*10*/"┃    合计│          │          │          ┃",
/*11*/"┗━━━━┷━━━━━┷━━━━━┷━━━━━┛",
      NULL,
};

static void ShowAllStatus( char* szStatus )
{
                          //  12345678901  12345678901  12345678901
   static char szBuffer[] ="1:           2:           3:           ";
   memcpy( szBuffer + nGroup * 13 + 2, szStatus, min( strlen( szStatus ), 11 ) );
   ShowCxStatus( szBuffer );
}

void inline ShowCx() { ShowCxTable( szCx ); }

static void ResponseCx( char* szNumber )
{
   ShowAllStatus( "响应查询..." );
   char *p = strchr( szNumber, '#' );
   if( p != NULL )
   {
      *p = 0;
      if(config.bPrefix0)
      {
         long lNumber = atol( szNumber );
         char szFormat[] = "%06lu";
         szFormat[ 2 ] = config.nCNoLen + '0';
         sprintf( szNumber, szFormat, lNumber );
      }
   }
   if(!tblCx->FindKey(szNumber))
   {
      PlaySentence( config.nChCx[ nGroup ], "ERRORCX.VOC", NULL );
      return;
   }

   double dLCTChg = tblCx->GetDouble("Shf"),
          dLDTChg = tblCx->GetDouble("Chf"),
          dRChg   = tblCx->GetDouble("Zj"),
          dOTChg  = dRChg - dLCTChg - dLDTChg;
   const flMoney = 9;
   char szLCTChg[ flMoney + 1 ],
        szLDTChg[ flMoney + 1 ],
        szOTChg[ flMoney + 1 ],
        szRChg[ flMoney + 1 ];

   FormatMoney( dLCTChg, szLCTChg ); // LCTChg
   szLCTChg[ flMoney ] = 0;
   FormatMoney( dLDTChg, szLDTChg ); // LDTChg
   szLDTChg[ flMoney ] = 0;
   FormatMoney( dOTChg, szOTChg ); // OTChg
   szOTChg[ flMoney ] = 0;
   FormatMoney( dRChg, szRChg ); // RChg
   szRChg[ flMoney ] = 0;

   int nOffset = ( nGroup + 1 ) * 12;
   char sHm[flTel + 1], sZh[flTel + 1];
   tblCx->GetStr("Hm", sHm);
   tblCx->GetStr("Zh", sZh);
   memset(szCx[ 3 ] + nOffset, ' ', flTel); //Clear
   memcpy(szCx[ 3 ] + nOffset, sHm, strlen(sHm)); //
   memcpy(szCx[ 4 ] + nOffset, sZh, strlen(sZh)); //
   memcpy( szCx[ 6 ] + nOffset, szLCTChg, flMoney );
   memcpy( szCx[ 7 ] + nOffset, szLDTChg, flMoney );
   memcpy( szCx[ 8 ] + nOffset, szOTChg, flMoney );
   memcpy( szCx[ 10 ] + nOffset, szRChg, flMoney );
   ShowCx();

   PlaySentence( config.nChCx[ nGroup ],
                 "LCTCHG.VOC", szLCTChg,
                 "LDTCHG.VOC", szLDTChg,
                 "OTCHG.VOC",  szOTChg,
                 "RCHG.VOC",   szRChg, NULL );
}

/*
static void ClearCx()
{
   int nOffset = ( nGroup + 1 ) * 12;
   memset( szCx[  3 ] + nOffset, ' ', 9 );
   memset( szCx[  4 ] + nOffset, ' ', 9 );
   memset( szCx[  6 ] + nOffset, ' ', 9 );
   memset( szCx[  7 ] + nOffset, ' ', 9 );
   memset( szCx[  8 ] + nOffset, ' ', 9 );
   memset( szCx[ 10 ] + nOffset, ' ', 9 );
   ShowCx();
}
*/
static WORD wStatus[ CX_CH ];
static BOOL YyCxHook( MMsg& msg )
{
   int nCh = ( int )msg.lParam;
   if( nCh == config.nChCj ) return TRUE;
   else if( nCh == config.nChCx[ 0 ] ) nGroup = 0;
   else if( nCh == config.nChCx[ 1 ] ) nGroup = 1;
   else nGroup = 2;

   extern BOOL bCxPause;  // Defined in Yy.cpp
   static BOOL bPrevCxPause[ CX_CH ] = { FALSE, FALSE, FALSE };
   switch( msg.uMsg )
   {
      case WM_NULL:

        if( bCxPause != bPrevCxPause[ nGroup ] )
          wStatus[ nGroup ] = cxWaitRing;
        bPrevCxPause[ nGroup ] = bCxPause;

        if( wStatus[ nGroup ] == cxWaitRing )
        {
           if( bCxPause ) ShowAllStatus( "暂停..." );
           else ShowAllStatus( "等待呼入..." );
           wStatus[ nGroup ] = cxNull;
           //ClearCx();
           bCxBusy = FALSE;
        }
        return FALSE;

      case WM_MESSAGE:

        switch( msg.wParam )
        {
           case tmRing:

             if( bCxPause )
             {
                HangUp( nCh );
                return FALSE;
             }

             ShowAllStatus( "您好! 请..." );
             PlayFile( nCh, "HELLOCX.VOC" );
             wStatus[ nGroup ] = cxGetNumber;
             bCxBusy = TRUE;
             return FALSE;

           case tmPlayFileOK:
           case tmPlayFileError:

             static char szNumber[ CX_CH ][ flTel + 1 ];
             ShowAllStatus( "用户拨号..." );
             GetNumber( nCh, szNumber[ nGroup ], config.nCNoLen );
             wStatus[ nGroup ] = cxGetNumber;
             return FALSE;

           case tmGetANumber:
             char str[ 9 + flTel + 1 ];
             sprintf( str, "拨号:%-8s", szNumber[ nGroup ] );
             ShowAllStatus( str );
             return FALSE;

           case tmGetNumberOK:

             ResponseCx( szNumber[ nGroup ] );
             wStatus[ nGroup ] = cxPlayResult;
             return FALSE;

           case tmPlaySentenceOK:

             HangUp( nCh );
             wStatus[ nGroup ] = cxWaitRing;
             return FALSE;

           case tmGetNumberError:
           case tmPlaySentenceError:

             HangUp( nCh );
             wStatus[ nGroup ] = cxWaitRing;
             return FALSE;

           default:

             return TRUE;
        }
   }
   return TRUE;
}

void InitCx()
{
   TTable::Connect("orac", "cx", "cx97");
   TTable::AddParam("sZh");
   tblCx = new TTable("select * from V170 where Zh = :sZh");
   for( nGroup = 0; nGroup < CX_CH; nGroup ++ )
   {
      SetTeleHook( config.nChCx[ nGroup ], YyCxHook );
      wStatus[ nGroup ] = cxWaitRing;
   }
   ShowCx();
   //nGroup = 0; ResponseCx("13#");
}

void CloseCx()
{
   for( nGroup = 0; nGroup < CX_CH; nGroup ++ )
      ResetTeleHook( config.nChCx[ nGroup ] );
   delete tblCx;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -