📄 cx97.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 + -