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

📄 datafunc.c

📁 170话费催交系统
💻 C
📖 第 1 页 / 共 5 页
字号:
/************************************************************
 *        NAME: WinPrintf()
 * DESCRIPTION: Popup error message box for cases where
 *              no child windows exist.
 ************************************************************/
void WinPrintf(char *szFormat, ...)
{
   char szBuffer[256];
   va_list pArguments;
   HWND hWnd;

   hWnd=AfxGetMainWnd()->m_hWnd;
   va_start(pArguments,szFormat);
   vsprintf(szBuffer, szFormat, pArguments);
   MessageBox(hWnd, szBuffer, "信息窗口", MB_SYSTEMMODAL | MB_OK);
}

/************************************************************************
*     名称:UINT Writedata(LPVOID pParam)
*     功能:往主缓冲区写数据的线程
************************************************************************/
UINT Writedata(LPVOID pParam)
{
	int rd_flag;
	MAIN_CJDATA	tmp_rddata;
	char ls_time[TIME_LENGTH];
	CString ls_month;

	while(1) {
		if(stopdata==STOPTRUE){
			//AfxMessageBox("Stop the data thread");
			break;
		}

		if((cjdata_flag == CJDATA_NO)||(dba_connect == DBA_FALSE)) {
			idle(0);
			delay(60);
			continue;
		}
		//清空上次的内容
		tmp_rddatachar.hth[0]='\0';
		tmp_rddatachar.num[0]='\0';
        tmp_rddatachar.cuijiao[0]='\0';
		tmp_rddatachar.qfmonth[0]='\0';
		tmp_rddatachar.cjcount=0;
		tmp_rddatachar.cjmonth[0]='\0';
		tmp_rddatachar.cjyin_flag=1;

		if(maincounts < MAINDATA_COUNTS){
			//读一条记录
			sLock.Lock();
			if((dba_connect == DBA_TRUE)&&(cjdata_flag == CJDATA_TRUE))
				rd_flag=Readrecord(&tmp_rddata);
			else
				rd_flag=-1;
			sLock.Unlock();
			
			//取得当前催缴月份并判断是否超过当月最大催缴次数
			GetTime(ls_time);
			ls_time[7]='/0';
			ls_month=&ls_time[5];
			if(ls_month.Compare( tmp_rddata.cjmonth) != 0) {
				tmp_rddata.cjcount=0;
				sprintf(tmp_rddata.cjmonth,ls_month);
			}
			else
			{
				if((tmp_rddata.cjcount >= cjarg.max_count)&&(cjarg.maxcount_flag == 1))
					rd_flag = -1;
			}
			
			//如果催缴音标志位为‘9’,不催
			if(tmp_rddata.cjyin_flag==9){
				rd_flag = -1;
			}

			if(rd_flag == 1) {
				//清空上次的内容
				maincjdata[writemain].hth[0]='\0';
				maincjdata[writemain].num[0]='\0';
				maincjdata[writemain].cuijiao[0]='\0';
				maincjdata[writemain].qfmonth[0]='\0';
				maincjdata[writemain].cjcount=0;
				maincjdata[writemain].cjmonth[0]='\0';
				maincjdata[writemain].cjyin_flag=1;
				maincjdata[writemain].append_count=0;
				//赋新值
				maincjdata[writemain]=tmp_rddata;
				//计数器加一
				maincounts++;
				//if(maincounts>MAINDATA_COUNTS-1)
				//	maincounts=MAINDATA_COUNTS-1;
				
				if(writemain>=MAINDATA_COUNTS-1)
					writemain=0;
				else
					writemain++;
			}
		}
		idle(0);
	}
	//退出时关闭数据库
	sLock.Lock()
	pCuijiaoSet.Close();
	pDatabase.Close();
	sLock.UnLock();
	return(0);
}

/************************************************************************
*     名称:int Readrecord(MAIN_CJDATA *rddata)
*     功能:读一条记录的函数
************************************************************************/
int Readrecord(MAIN_CJDATA *rddata)
{
	int qz_flag;
	int dkh_flag;
	int ht_flag;
	int mc_flag;
	CString szhth;
	CString szqianfei;
	CString szqfmonth;
	CString szflag;
	CString szcjcount;
	CString szcjmonth;
	CString sznum;
	CString szcmphth;
	CString szcjyinflag;
	char tmp_querySQL[200];
	char tmp_cjcount[10];
	char tmp_cjyinflag[10];
	CRecordsetStatus rStatus;

	if(pCuijiaoSet.IsEOF()){
		//重新检索催缴表
		try{
			if(pCuijiaoSet.Requery() == 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);
		if(szhth.IsEmpty())
			return(0);

		pCuijiaoSet.GetFieldValue( _T(qianfei) , szqianfei);
		if(szqianfei.IsEmpty())
			return(0);

		pCuijiaoSet.GetFieldValue( _T(qfmonth) , szqfmonth);

		pCuijiaoSet.GetFieldValue( _T(flag) , szflag);

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

		pCuijiaoSet.GetFieldValue( _T(cjmonth) , szcjmonth);

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

		pCuijiaoSet.MoveNext();
	}
	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);
	}
	//取得催缴记录的当前指针
	pCuijiaoSet.GetStatus(rStatus);
	lcuijiaocurrent = rStatus.m_lCurrentRecord;

	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
	   {
		   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 ) {
					dkh_flag=1;
					break;;
				}
				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);
			}
			
			dkh_flag=-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
			{
				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 ) {
						ht_flag=1;
						break;;
					}
					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);
				}
				
				ht_flag=-1;
			}
			pHetongSet.Close();
		}
	}
	
	if((dkh_flag == -1)&&(ht_flag == -1)){
		return(-2);	//-2表示没有取得号码
	}

	//szcmphth
	sprintf(tmp_querySQL,"select hth from t_data_miancui where num=\'%s\'",sznum);

	try{
	   if(pMiancuiSet.Open( CRecordset::forwardOnly, _T(tmp_querySQL))==0){
			pMiancuiSet.Close();
			mc_flag=-1;
	   }
	   else
	   {
		   mc_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(mc_flag = 1) {
		while(!pMiancuiSet.IsEOF())  
		{
			try{
				pMiancuiSet.GetFieldValue(_T(hth), szcmphth);
				//if(!szcmphth.IsEmpty()) {
					mc_flag=1;
					break;;
				//}
				pMiancuiSet.MoveNext();
			}
			catch(CDBException* e){
				pMiancuiSet.Close();
				dba_connect=DBA_FALSE;
				e->Delete();
				return(-1);
			}
			catch(CMemoryException* e){
				pMiancuiSet.Close();
				dba_connect=DBA_FALSE;
				e->Delete();
				return(-1);
			}

			mc_flag=-1;
		}
		pMiancuiSet.Close();
	}
	if(mc_flag == 1) {
		return(-3);		//-3表示取得的号码是免催号码
	}

	sprintf(rddata->hth,szhth);
	sprintf(rddata->num ,sznum);
	sprintf(rddata->cuijiao ,szqianfei);
	sprintf(rddata->qfmonth ,szqfmonth);
	sprintf(tmp_cjcount ,szcjcount);
	rddata->cjcount = atoi(tmp_cjcount);
	sprintf(rddata->cjmonth ,szcjmonth);
	sprintf(tmp_cjyinflag ,szcjyinflag);
	rddata->cjyin_flag = atoi(tmp_cjyinflag);
	
	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;

	while(1) {
		if(stopdata==STOPTRUE){
			WinPrintf("主控程序终止");
			break;
		}
		if((maincounts > 0)&&(Cmpcjarg(&cjarg)){	//如果缓冲区里有数据且到了催缴时间即开始催缴
			//取得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(30);
				}
				else if(atoi(signlight[i].chn_value)==CHDEVUNOPEN) {
					//重新打开一次
				}
				else
				{

⌨️ 快捷键说明

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