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

📄 datafunc.cpp

📁 170话费催交系统
💻 CPP
📖 第 1 页 / 共 5 页
字号:
				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 + -