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

📄 datafunc.h

📁 170话费催交系统
💻 H
📖 第 1 页 / 共 5 页
字号:
	CString sznum;
	CString szcmphth;
	CString szcjyinflag;
	char tmp_querySQL[200];
	char tmp_cjcount[10];
	char tmp_cjyinflag[10];
	CRecordsetStatus rStatus;
	char errormsg[100];
	char ls_cjmonth[10];
	long li;

	if(pCuijiaoSet.IsEOF()){
		//重新检索催缴表
		if(maincounts>0){	//如果读到了表结尾,但缓冲区仍有数据则不检索
			return(-1);
		}
		try{
			if(pCuijiaoSet.Requery() == 0){
				pCuijiaoSet.Close();
				cjdata_flag=CJDATA_NO;
				return(0);
			}
			else{
				if((li=pCuijiaoSet.GetRecordCount())==0){
					pCuijiaoSet.Close();
					cjdata_flag=CJDATA_NO;
					return(0);
				}
				else{
					cjdata_flag=CJDATA_YES;
				}
			}
		}
		catch(CDBException* e){
			pCuijiaoSet.Close();
			dba_connect=DBA_FALSE;
			e->Delete();
			return(-1);
		}
		catch(CMemoryException* e){
			pCuijiaoSet.Close();
			dba_connect=DBA_FALSE;
			e->Delete();
			return(-1);
		}
	}

	try{
		//pCuijiaoSet.GetFieldValue( _T(hth) , szhth);
		szhth=pCuijiaoSet.m_HTH;
		if(szhth.IsEmpty()){
			pCuijiaoSet.MoveNext();
			return(0);
		}

		//pCuijiaoSet.GetFieldValue( _T(qianfei) , szqianfei);
		szqianfei=pCuijiaoSet.m_QIANFEI;
		if(szqianfei.IsEmpty()){
			pCuijiaoSet.MoveNext();
			return(0);
		}

		//pCuijiaoSet.GetFieldValue( _T(qfmonth) , szqfmonth);
		szqfmonth=pCuijiaoSet.m_QFMONTH;

		//pCuijiaoSet.GetFieldValue( _T(flag) , szflag);
		szflag=pCuijiaoSet.m_FLAG;

		//pCuijiaoSet.GetFieldValue( _T(cjcount) , szcjcount);
		szcjcount=pCuijiaoSet.m_CJCOUNT;
		if(szcjcount.IsEmpty())
			szcjcount="0";

		//pCuijiaoSet.GetFieldValue( _T(cjmonth) , szcjmonth);
		szcjmonth=pCuijiaoSet.m_CJMONTH;

		//pCuijiaoSet.GetFieldValue( _T(cjyinflag) , szcjyinflag);
		szcjyinflag=pCuijiaoSet.m_CJYIN_FLAG;
		if(szcjyinflag.IsEmpty())
			szcjyinflag="1";

		pCuijiaoSet.MoveNext();
	}
	catch(CDBException* e){
		pCuijiaoSet.Close();
		dba_connect=DBA_FALSE;
		strcpy(errormsg, "数据库错误:");
		strcat(errormsg, e->m_strError);
		//AfxMessageBox(errormsg, MB_ICONEXCLAMATION );
		e->Delete();
		return(-1);
	}
	catch(CMemoryException* e){
		pCuijiaoSet.Close();
		dba_connect=DBA_FALSE;
		e->Delete();
		return(-1);
	}

	//取得催缴记录的当前指针
	pCuijiaoSet.GetStatus(rStatus);
	lcuijiaocurrent = rStatus.m_lCurrentRecord;
	::PostMessage( myhwnd, WM_COPY ,(WPARAM) 0, (LPARAM) 0);
	
	//赋值
	sprintf(rddata->cuijiao ,szqianfei);
	sprintf(rddata->qfmonth ,szqfmonth);
	sprintf(rddata->hth,szhth);
	sprintf(tmp_cjcount ,szcjcount);
	rddata->cjcount = atoi(tmp_cjcount);
	sprintf(rddata->cjmonth ,szcjmonth);
	if((strcmp(rddata->cjmonth,"11")!=0)&&(strcmp(rddata->cjmonth,"12")!=0)){
		strcpy(ls_cjmonth,"0");
		strcat(ls_cjmonth,rddata->cjmonth);
		sprintf(rddata->cjmonth,ls_cjmonth);
	}
	sprintf(tmp_cjyinflag ,szcjyinflag);	
	rddata->cjyin_flag = atoi(tmp_cjyinflag);

	if(Cjtiaojian(rddata) == -1){
		return(-1);
	}

	sprintf(tmp_querySQL,"select num from t_data_dakehu where hth=\'%s\'",szhth);
	try{
		if(pDakehuSet.Open( CRecordset::forwardOnly, _T(tmp_querySQL))==0){
			pDakehuSet.Close();
			dkh_flag=-1;
		}
		else{
			if(pDakehuSet.GetRecordCount()==0){
				pDakehuSet.Close();
				dkh_flag=-1;
			}
			else{
				dkh_flag=1;
			}
		}
	}
	catch(CDBException* e){
		dba_connect=DBA_FALSE;
		e->Delete();
		return(-1);
	}
	catch(CMemoryException* e){
		dba_connect=DBA_FALSE;
		e->Delete();
		return(-1);
	}
	if(dkh_flag == 1) {
		while(!pDakehuSet.IsEOF())
		{
			try{
				pDakehuSet.GetFieldValue(_T(num), sznum);
				if(sznum.GetLength()>=TELE_LENGTH ) {
					if(Miancj(sznum)==0){	//如果不是免催电话
						//号码赋值
						sprintf(rddata->num ,sznum);
						Outmaindata(rddata);
						::PostMessage( myhwnd, WM_COPY ,(WPARAM) 0, (LPARAM) 0);
					}
				}
				while((maincounts >= MAINDATA_COUNTS)||(pauseflag==1)||(!Cmpcjarg(&cjarg))){	//若缓冲区写满或不在催缴时间,暂停读数据
					Sleep(100);
					if((stopdata==STOPTRUE)||(dba_connect == DBA_FALSE)){
						//如果停止进程或失去连接,先关闭记录集再返回
						pDakehuSet.Close();
						return(-1);
					}
				}
				if((stopdata==STOPTRUE)||(dba_connect == DBA_FALSE)){
					//如果停止进程或失去连接,先关闭记录集再返回
					pDakehuSet.Close();
					return(-1);
				}
				pDakehuSet.MoveNext();
			}
			catch(CDBException* e){
				pDakehuSet.Close();
				dba_connect=DBA_FALSE;
				e->Delete();
				return(-1);
			}
			catch(CMemoryException* e){
				pDakehuSet.Close();
				dba_connect=DBA_FALSE;
				e->Delete();
				return(-1);
			}			
		}
		pDakehuSet.Close();
	}
	
	if(dkh_flag == -1) {
		sprintf(tmp_querySQL,"select tele from t_data_hetong where hetong=\'%s\'",szhth);
		try{
			if(pHetongSet.Open( CRecordset::forwardOnly, _T(tmp_querySQL))==0){
				pHetongSet.Close();
				ht_flag=-1;
			}
			else{
				if(pHetongSet.GetRecordCount()==0){
					pHetongSet.Close();
					ht_flag=-1;
				}
				else{
					ht_flag=1;
				}
			}
		}
		catch(CDBException* e){
			dba_connect=DBA_FALSE;
			e->Delete();
			return(-1);
		}
		catch(CMemoryException* e){
			dba_connect=DBA_FALSE;
			e->Delete();
			return(-1);
		}
		if(ht_flag == 1) {
			while(!pHetongSet.IsEOF())  
			{
				try{
					pHetongSet.GetFieldValue(_T(tele), sznum);
					if(sznum.GetLength()>=TELE_LENGTH ) {
						if(Miancj(sznum)==0){	//如果不是免催电话
						//号码赋值
							sprintf(rddata->num ,sznum);
							Outmaindata(rddata);
							::PostMessage( myhwnd, WM_COPY ,(WPARAM) 0, (LPARAM) 0);
						}
					}
					while((maincounts >= MAINDATA_COUNTS)||(pauseflag==1)||(!Cmpcjarg(&cjarg))){	//若缓冲区写满或不在催缴时间,暂停读数据
						Sleep(100);
						if((stopdata==STOPTRUE)||(dba_connect == DBA_FALSE)){
							//如果停止进程或失去连接,先关闭记录集再返回
							pHetongSet.Close();
							return(-1);
						}
					}
					if((stopdata==STOPTRUE)||(dba_connect == DBA_FALSE)){
						//如果停止进程或失去连接,先关闭记录集再返回
						pHetongSet.Close();
						return(-1);
					}
					pHetongSet.MoveNext();
				}
				catch(CDBException* e){
					pHetongSet.Close();
					dba_connect=DBA_FALSE;
					e->Delete();
					return(-1);
				}
				catch(CMemoryException* e){
					pHetongSet.Close();
					dba_connect=DBA_FALSE;
					e->Delete();
					return(-1);
				}
			}
			pHetongSet.Close();
		}
	}
	
	if((dkh_flag == -1)&&(ht_flag == -1)){
		return(-2);	//-2表示没有取得号码
	}

	return(1);
}

/***************************************************************
 *     名称:void GetTime(char* lstime)
 *     功能:取当前时间并转变成字符串
***************************************************************/
void GetTime(char* lstime)
{
     CTime  Mytime;
	 time_t timer;

     Mytime = CTime::GetCurrentTime();
	 timer = Mytime.GetTime();
	 sprintf(lstime,ctime(&timer));
     CToSql(lstime);
}

/*******************************************************************
 *     名称:void CToSql(char* lstime)
 *     功能:转变时间字符串格式
*******************************************************************/
void CToSql(char* lstime)
{
	 int count;
     CString stringC(lstime);
     CString lsSqlMonth;
	 CString lsSqlDay;
     CString lsSqlTime;
     CString lsSqlYear;
 
     lsSqlDay=stringC.Mid(8,2);
	 lsSqlTime=stringC.Mid(11,8);
     lsSqlYear=stringC.Mid(20,4);
	 lsSqlMonth=stringC.Mid(4,3);
	 for(count=0;count<12;count++)
	 {
		 if(lsSqlMonth==tbMon[count][0])
		 {
              lsSqlMonth=tbMon[count][1];
		      break;
		 }
	 }
     stringC=lsSqlYear+"/"+lsSqlMonth+"/"+lsSqlDay+" "+lsSqlTime;
	 sprintf(lstime,stringC);
}

/************************************************************************
*     名称:UINT Maincontrol(LPVOID pParam)
*     功能:催缴主线程
*		   判定是否满足催缴条件,是否进行催缴
************************************************************************/
UINT Maincontrol(LPVOID pParam)
{
	int i=0;
	//char ls_i[10];
	//int li_flag;
	//static int start_ch=MINCHAN;
	
	//读信号灯在sysinit的时候已经进行
	//for(i=0;i<MAXDEVS;i++) {
	//	itoa(i+1,ls_i,10);
	//	strcpy(signlight[i].app_id,(char *)ReadSemaphoneFile(ls_i,appid));
	//}
	
	//i=0;
	while(1) {
		//Sleep(0);
		if(stopdata==STOPTRUE){
			//AfxMessageBox("主控程序终止");
			break;
		}
		//if((maincounts > 0)&&(Cmpcjarg(&cjarg))){	//如果缓冲区里有数据且到了催缴时间即开始催缴
		if(maincounts > 0){	/*如果缓冲区里有数据就开始催缴,催缴时间的判断放到读缓冲区的线程中,
							以实现实时读取更新数据*/
			//取得DLL函数指针应在初使化时做
			//VERIFY(pReadxhd=(READXHDPROC*)::GetProcAddress(lpxhddll,"ReadSemaphoneFile"));
			//itoa(i+1,ls_i,10);
			//strcpy(signlight[i].app_id,(char *)ReadSemaphoneFile(ls_i,appid));
			if(strcmp(signlight[i].app_id,cjappid)==0) {
				//strcpy(signlight[i].chn_value,(char *)ReadSemaphoneFile(ls_i,chnvalue));
				if(atoi(signlight[i].chn_value)==CHDEVIDLE) {
					//进行拨号工作
					/*while(dxinfo[i].chdialcount<MAXDIALCOUNT){
						if(yin_seize(i) != 1)
							break;
						sleep(30);
						strcpy(signlight[i].chn_value,(char *)ReadSemaphoneFile(ls_i,chnvalue));
						if(atoi(signlight[i].chn_value)==CHDEVWORK)
							break;
						dxinfo[i].chdialcount++;
						idle(0);
					}*/
					yin_seize(i);
					Sleep(cjarg.bohao_time);	//拨了一个号码后,稍停顿,然后再拨下一个号码
				}
				/*else if(atoi(signlight[i].chn_value)==CHDEVUNOPEN) {
					//重新打开一次
				}*/
				else
				{
					//Sleep(0);
				}
			}
			if(i>=MAXDEVS-1){
				i=0;
				Sleep(100);	//如果一次循环查找空闲通道完成,稍停再进行下一次循环查找。防止出现催缴通道
								//全部占用而此时缓冲区又有数据时,系统会大量占用cpu资源。
			}
			else{
				i++;
			}
		}
		else{
			//SysPrintf("主缓冲区无数据");
			Sleep(cjarg.bohao_time);	//没有数据时,稍停顿,等待有数据再拨号
		}
	}
	return(0);
}

/************************************************************************
*     名称:BOOL Cmpcjarg(CJ_ARG* lpcjarg)
*     功能:判定是否到了催缴时间
************************************************************************/
BOOL Cmpcjarg(CJ_ARG* lpcjarg)
{
	char ls_time[TIME_LENGTH];
	char* ls_timea;
	char* ls_timeb;
	int li_year;
	int li_month;
	int li_day;
	int li_hour;
	int li_minute;
	int li_second;

	GetTime(ls_time);
	ls_timea=ls_time;
	ls_timeb=ls_timea+4;
	*ls_timeb='\0';
	ls_timeb++;
	li_year=atoi(ls_timea);
	ls_timea=ls_timeb;
	ls_timeb=ls_timea+2;
	*ls_timeb='\0';
	ls_timeb++;
	li_month=atoi(ls_timea);
	ls_timea=ls_timeb;
	ls_timeb=ls_timea+2;
	*ls_timeb='\0';
	ls_timeb++;
	li_day=atoi(ls_timea);
	ls_timea=ls_timeb;
	ls_timeb=ls_timea+2;
	*ls_timeb='\0';
	ls_timeb++;
	li_hour=atoi(ls_timea);
	ls_timea=ls_timeb;
	ls_timeb=ls_timea+2;
	*ls_timeb='\0';
	ls_timeb++;
	li_minute=atoi(ls_timea);
	ls_timea=ls_timeb;
	ls_timeb=ls_timea+2;
	*ls_timeb='\0';
	li_second=atoi(ls_timea);

	if(lpcjarg->cjtime_one == 1) {
		if((li_month>=lpcjarg->cjtime[0].start_month)&&(li_month<=lpcjarg->cjtime[0].end_month)&&

⌨️ 快捷键说明

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