📄 datafunc.cpp
字号:
sprintf(UpdateSQL, "update t_data_cuijiao set cjcount=%d, cjmonth=\'%s\' where hth=\'%s\'",
teleinfo[channel].cjcount,teleinfo[channel].cjmonth,teleinfo[channel].hth);
if(pDatabase.BeginTrans()){
pDatabase.ExecuteSQL(_T(InsertSQL));
pDatabase.ExecuteSQL(_T(UpdateSQL));
if(pDatabase.CommitTrans()) {
TRACE("Transaction Commited");
dxinfo[channel].chdevzt=CHDEVZT_G;
}
else
{
pDatabase.Rollback();
dxinfo[channel].chdevzt=CHDEVZT_H;
}
}
else{
dxinfo[channel].chdevzt=CHDEVZT_H;
}
}
catch(CDBException* e){
dba_connect=DBA_FALSE;
//pDatabase.Rollback();
e->Delete();
//continue;
}
catch(CMemoryException* e){
dba_connect=DBA_FALSE;
//pDatabase.Rollback();
e->Delete();
//continue;
}
sLock.Unlock();
if(sr_putevt(dxinfo[channel].chdev,TDX_PLAY,sizeof(DX_IOTT),&dxinfo[channel].iott_cjvalue,0)==-1){
TRACE("putevt error");
}
}
}
return(0);
}
/************************************************************
* 名称:void Init_data()
* 功能:初始化数据库的函数
***********************************************************/
void Init_data()
{
CString szcbcount;
CString szmaxcount;
CString szmaxcountflag;
CString szmaxringtime;
CString szcjtimeflag;
CString szstartmonth;
CString szendmonth;
CString szstartday;
CString szendday;
CString szstarthour;
CString szendhour;
CString szstartminute;
CString szendminute;
char ls_tmparg[10];
char ls_i[10];
char cjtimeSQL[200];
try{
if(pDatabase.Open( _T( "XTCJ170" ), FALSE, FALSE, _T( "ODBC;UID=xt170;PWD=VCplus170" ))==FALSE){
WinPrintf("连接数据库失败");
exit(1);
}
}
catch(CDBException* pEx)
{
WinPrintf("连接数据库失败");
pEx->Delete();
exit(1);
}
catch(CMemoryException* pEx)
{
WinPrintf("连接数据库失败");
pEx->Delete();
exit(1);
}
//WinPrintf("db opened ok");
if(pDatabase.IsOpen()==FALSE) {
WinPrintf("db is not open");
exit(1);
}
if(pDatabase.CanUpdate()==FALSE) {
WinPrintf("db cann't update");
exit(1);
}
if(pDatabase.CanTransact()==FALSE) {
WinPrintf("Transact cann't do");
exit(1);
}
dba_connect=DBA_TRUE;
//打开催缴记录集
try{
if(pCuijiaoSet.Open( CRecordset::dynaset , _T(cuijiaoSQL))==0){
pCuijiaoSet.Close();
cjdata_flag=CJDATA_NO;
}
else{
cjdata_flag=CJDATA_YES;
}
}
catch(CDBException* e){
WinPrintf("连接数据库失败");
e->Delete();
exit(1);
}
catch(CMemoryException* e){
WinPrintf("连接数据库失败");
e->Delete();
exit(1);
}
//读取参数表,并对各参数赋值pCjadminSet
try{
if(pCjadminSet.Open( CRecordset::dynaset , _T(cjadminSQL))==0){
pCjadminSet.Close();
cjarg.cb_count=2;
cjarg.max_count=3;
cjarg.maxcount_flag=1;
cjarg.ringtime=40;
}
}
catch(CDBException* e){
WinPrintf("连接数据库失败");
e->Delete();
exit(1);
}
catch(CMemoryException* e){
WinPrintf("连接数据库失败");
e->Delete();
exit(1);
}
if(pCjadminSet.IsOpen()){
try{
pCjadminSet.GetFieldValue( _T(cb_count) , szcbcount);
if(szcbcount.IsEmpty())
cjarg.cb_count=2;
else{
sprintf(ls_tmparg,szcbcount);
cjarg.cb_count=atoi(ls_tmparg);
}
pCjadminSet.GetFieldValue( _T(max_count) , szmaxcount);
if(szmaxcount.IsEmpty())
cjarg.max_count=3;
else{
sprintf(ls_tmparg,szmaxcount);
cjarg.max_count=atoi(ls_tmparg);
}
pCjadminSet.GetFieldValue( _T(maxcount_flag) , szmaxcountflag);
if(szmaxcountflag.IsEmpty())
cjarg.maxcount_flag=1;
else{
sprintf(ls_tmparg,szmaxcountflag);
cjarg.maxcount_flag=atoi(ls_tmparg);
}
pCjadminSet.GetFieldValue( _T(max_ringtime) , szmaxringtime);
if(szmaxringtime.IsEmpty())
cjarg.max_ringtime=40;
else{
sprintf(ls_tmparg,szmaxringtime);
cjarg.max_ringtime=atoi(ls_tmparg);
}
}
catch(CDBException* e){
WinPrintf("连接数据库失败");
e->Delete();
exit(1);
}
catch(CMemoryException* e){
WinPrintf("连接数据库失败");
e->Delete();
exit(1);
}
}
//读取参数表,并对各参数赋值pCjtimeSet
for(i=1;i<=3;i++){
itoa(ls_i,i,10);
sprintf(cjtimeSQL, "select cjtimeflag, start_month, end_month, start_day, end_day, start_hour, end_hour, start_minute, end_minute from t_data_cjtime where serial=\'%s\'",ls_i);
try{
if(pCjtimeSet.Open( CRecordset::dynaset , _T(cjtimeSQL))==0){
pCjtimeSet.Close();
switch(i){
case 1:
cjarg.cjtime_one=1;
break;
case 2:
cjarg.cjtime_two=0;
break;
case 3:
cjarg.cjtime_three=0;
break;
}
cjarg.cjtime[i-1].start_month=1;
cjarg.cjtime[i-1].end_month=12;
cjarg.cjtime[i-1].start_day=1;
cjarg.cjtime[i-1].end_day=31;
cjarg.cjtime[i-1].start_hour=0;
cjarg.cjtime[i-1].end_hour=23;
cjarg.cjtime[i-1].start_minute=0;
cjarg.cjtime[i-1].end_minute=59;
}
}
catch(CDBException* e){
WinPrintf("连接数据库失败");
e->Delete();
exit(1);
}
catch(CMemoryException* e){
WinPrintf("连接数据库失败");
e->Delete();
exit(1);
}
if(pCjtimeSet.IsOpen()){
try{
pCjtimeSet.GetFieldValue( _T(cjtimeflag) , szcjtimeflag);
if(szcjtimeflag.IsEmpty()){
switch(i){
case 1:
cjarg.cjtime_one=1;
break;
case 2:
cjarg.cjtime_two=0;
break;
case 3:
cjarg.cjtime_three=0;
break;
}
}
else{
switch(i){
case 1:
sprintf(ls_tmparg,szcjtimeflag);
cjarg.cjtime_one=atoi(ls_tmparg);
break;
case 2:
sprintf(ls_tmparg,szcjtimeflag);
cjarg.cjtime_two=atoi(ls_tmparg);
break;
case 3:
sprintf(ls_tmparg,szcjtimeflag);
cjarg.cjtime_three=atoi(ls_tmparg);
break;
}
}
pCjtimeSet.GetFieldValue( _T(start_month) , szstartmonth);
if(szstartmonth.IsEmpty())
cjarg.cjtime[i-1].start_month=1;
else{
sprintf(ls_tmparg,szstartmonth);
cjarg.cjtime[i-1].start_month=atoi(ls_tmparg);
}
pCjtimeSet.GetFieldValue( _T(end_month) , szendmonth);
if(szendmonth.IsEmpty())
cjarg.cjtime[i-1].end_month=12;
else{
sprintf(ls_tmparg,szendmonth);
cjarg.cjtime[i-1].end_month=atoi(ls_tmparg);
}
pCjtimeSet.GetFieldValue( _T(start_day) , szstartday);
if(szstartday.IsEmpty())
cjarg.cjtime[i-1].start_day=1;
else{
sprintf(ls_tmparg,szstartday);
cjarg.cjtime[i-1].start_day=atoi(ls_tmparg);
}
pCjtimeSet.GetFieldValue( _T(end_day) , szendday);
if(szendday.IsEmpty())
cjarg.cjtime[i-1].end_day=31;
else{
sprintf(ls_tmparg,szendday);
cjarg.cjtime[i-1].end_day=atoi(ls_tmparg);
}
pCjtimeSet.GetFieldValue( _T(start_hour) , szstarthour);
if(szstarthour.IsEmpty())
cjarg.cjtime[i-1].start_hour=0;
else{
sprintf(ls_tmparg,szstarthour);
cjarg.cjtime[i-1].start_hour=atoi(ls_tmparg);
}
pCjtimeSet.GetFieldValue( _T(end_hour) , szendhour);
if(szendhour.IsEmpty())
cjarg.cjtime[i-1].end_hour=23;
else{
sprintf(ls_tmparg,szendhour);
cjarg.cjtime[i-1].end_hour=atoi(ls_tmparg);
}
pCjtimeSet.GetFieldValue( _T(start_minute) , szstartminute);
if(szstartminute.IsEmpty())
cjarg.cjtime[i-1].start_minute=0;
else{
sprintf(ls_tmparg,szstartminute);
cjarg.cjtime[i-1].start_minute=atoi(ls_tmparg);
}
pCjtimeSet.GetFieldValue( _T(end_minute) , szendminute);
if(szendminute.IsEmpty())
cjarg.cjtime[i-1].end_minute=59;
else{
sprintf(ls_tmparg,szendminute);
cjarg.cjtime[i-1].end_minute=atoi(ls_tmparg);
}
}
catch(CDBException* e){
WinPrintf("连接数据库失败");
e->Delete();
exit(1);
}
catch(CMemoryException* e){
WinPrintf("连接数据库失败");
e->Delete();
exit(1);
}
}
}
}
/******************************************************************************
* Name: get_bdname(int boardid)
* Function: To get boardname according board id
******************************************************************************/
int get_bdname(int boardid)
{
int i=0,j,k=0;
int maxch;
/** specify a channel to dial **
strcpy(dev[0].voxname,"dxxxB1C3");
strcpy(dev[0].dtiname,"dtiB1T3");
return 0;
/*******************************/
// generate board names according to board ID
maxch=(MAXDEVS>30)?30:MAXDEVS;
for (j=1;j<9;j++)
for(i=1;i<5;i++){
if(k<maxch){
sprintf(dxinfo[k].chdevname,"dxxxB%dC%d",boardid*8+j,i);
sprintf(dxinfo[k].dtdevname,"dtiB%dT%d",boardid+1,(j-1)*4+i);
//if(DEBUG)printf("Board ID(%d): %s, %s\n",boardid,dxinfo[k].chdevname,dxinfo[k].dtdevname);
k++;
} else return 0;
}
return 0;
}
/*********************************************************
* 名称:void Init_sys()
* 功能:初始化文件和语音卡的函数
********************************************************/
void Init_sys()
{
int channel;
int filenumber;
int boardid;
char ls_i[10];
stopdata=STOPFALSE; //数据库线程终止标志置为不终止
telecount.all_count=0;
telecount.success_count=0;
telecount.failure_count=0;
datajy_counts=0;
//初始化语音文件
for(filenumber=0;filenumber<MAXFILES;filenumber++){
strcpy(szfile[filenumber].filename,".\\vox\\");
strcat(szfile[filenumber].filename,szfilename[filenumber]);
}
for(filenumber=0;filenumber<MAXFILES;filenumber++){
if (( szfile[filenumber].filehandle= dx_fileopen(szfile[filenumber].filename,_O_RDONLY|_O_BINARY)) == -1) {
WinPrintf("open %s error",szfile[filenumber].filename);
exit(1);
}
}
//初始化语音卡
boardid=0;
get_bdname(boardid);
for(channel=0;channel<MMAXDEVS;channel++){
//读信号灯,判断此通道是否由催缴使用
itoa(channel+1,ls_i,10);
strcpy(signlight[channel].app_id,(char *)ReadSemaphoneFile(ls_i,appid));
if(strcmp(signlight[channel].app_id,cjappid)!=0) {
continue;
}
dxinfo[channel].chtime=0; //数据库校验计时器
dxinfo[channel].playflag=0; //播放语音标示
init_count[channel]=0; //各通道超时计数器
if ((dxinfo[channel].chdev = dx_open(dxinfo[channel].chdevname, 0)) == -1) {
WinPrintf("%s: Error opening this channel",dxinfo[channel].chdevname);
exit(1);
}
if ((dxinfo[channel].dtdev = dt_open(dxinfo[channel].dtdevname, 0)) == -1) {
WinPrintf("%s: Error opening this channel",dxinfo[channel].dtdevname);
exit(1);
}
if(nr_scunroute(dxinfo[channel].dtdev,SC_DTI,dxinfo[channel].chdev,SC_VOX,SC_FULLDUP)==-1){
WinPrintf("%s <=== UnRoute Failed ===> %s",dxinfo[channel].chdevname,dxinfo[channel].dtdevname);
WinPrintf("Reason: %s",ATDV_ERRMSGP(dxinfo[channel].chdev));
exit(1);
}
if(nr_scroute(dxinfo[channel].dtdev,SC_DTI,dxinfo[channel].chdev,SC_VOX,SC_FULLDUP)==-1){
WinPrintf("%s <=== Route Failed ===> %s",dxinfo[channel].chdevname,dxinfo[channel].dtdevname);
WinPrintf("Reason: %d,%s",ATDV_LASTERR(dxinfo[channel].chdev),ATDV_ERRMSGP(dxinfo[channel].chdev));
exit(1);
}
yin_r2_creatbsig(channel);
if(dt_setevtmsk(dxinfo[channel].dtdev,DTG_SIGEVT,DTMM_AON|DTMM_AOFF|DTMM_BON|DTMM_BOFF,DTA_SETMSK)==-1){
WinPrintf("%s: dt_setevtmsk() error",dxinfo[channel].dtdevname);
exit(1);
}
if(dt_settssig(dxinfo[channel].dtdev,DTB_ABIT|DTB_CBIT|DTB_DBIT,DTA_SETMSK)==-1){
WinPrintf("dt_settssig() error");
exit(1);
}
chan_init(channel);
}
playtone_init();
//WinPrintf("All Channels opened, dial out now.");
}
}
/*************************************************************************
* FUNCTION NAME: yin_r2_creatbsig()
* DESCRIPTION: to build backward signal detection
* INPUT: voice device handle
* RETURN:
*************************************************************************/
int yin_r2_creatbsig(int channel)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -