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

📄 cx.cpp

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

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

#include "Tele.h"
#include "Yy.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;
BOOL bCxBusy;

/*
//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;
      dbfCx->Seek( szNumber, FDCX_CNO );
   }
   else
   {
      if( dbfUser->Seek( szNumber, FDUSER_TEL ) )
      {
         strcpy( szNumber, dbfUser->GetStr( FDUSER_CNO ) );
         dbfCx->Seek( szNumber, FDCX_CNO );
      }
      else dbfCx->GoEof();
   }

   if( dbfCx->IsEof() )
   */
   char *p = strchr( szNumber, '#' );
   if( p != NULL )
   {
      *p = 0;
      long lNumber = atol( szNumber );
      char szFormat[] = "%06lu";
      szFormat[ 2 ] = config.nCNoLen + '0';
      sprintf( szNumber, szFormat, lNumber );
   }
   if( !dbfCx->Seek( szNumber, FDCX_CNO ) )
   {
      PlaySentence( config.nChCx[ nGroup ], "ERRORCX.VOC", NULL );
      return;
   }

   double dLCTChg = dbfCx->GetDouble( FDSJ_SHF ),
          dLDTChg = dbfCx->GetDouble( FDSJ_CHF ),
          dRChg   = dbfCx->GetDouble( FDSJ_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;
   dbfCx->GetStr( FDCX_TEL, szCx[ 3 ] + nOffset ); //
   dbfCx->GetStr( FDCX_CNO, szCx[ 4 ] + nOffset ); //
   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.nTelLen );
             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()
{
   for( nGroup = 0; nGroup < CX_CH; nGroup ++ )
   {
      SetTeleHook( config.nChCx[ nGroup ], YyCxHook );
      wStatus[ nGroup ] = cxWaitRing;
   }
   ShowCx();
}

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

⌨️ 快捷键说明

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