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

📄 datafunc.h

📁 170话费催交系统
💻 H
📖 第 1 页 / 共 5 页
字号:
#if !defined(__HDATAFUNC_H__)
#define __HDATAFUNC_H__

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <fcntl.h>
#include <stdarg.h>
#include <afxmt.h>
#include <time.h>
#include <string.h>
//语音卡head
#include <srllib.h>
#include <dxxxlib.h>
#include <dtilib.h>
#include <sctools.h>

//自定义head
#include "hdefine.h"
#include "htypedef.h"
#include "Mydatabase.h"
#include "Myrecordset.h"
#include "zdcjall.h"
#include "hfcjyykvar.h"
#include "myvc.h"

//void WinPrintf(char *szFormat, ...);		//显示一个信息窗口
UINT Writedata(LPVOID pParam);				//往主缓冲区写数据的线程
int Readrecord(MAIN_CJDATA *rddata);		//读一条记录的函数
void GetTime(char* lstime);					//取当前时间并转变成字符串
void CToSql(char* lstime);					//转变时间字符串格式
UINT Maincontrol(LPVOID pParam);			//催缴主线程
BOOL Cmpcjarg(CJ_ARG* lpcjarg);				//判定是否到了催缴时间
int yin_seize(int i);						//拨号
int chan_init(int i);						//重置端口
UINT Cjwork(LPVOID pParam);					//催缴工作线程函数
int Process(int channel,unsigned long evt_handle);	//催缴工作线程中调用到的处理函数
int end_prog();					//关闭语音卡和语音文件
int yin_mfc(int channel);		//MultiFrequencyControl Procedure
int yin_r2_playfsig(int channel, int forwardsig);	//to play a forward signal
int playtone_init(void);		//to initialize tonegen and r2_tpt
int yin_bwboff(int channel);	//Backword hangup during MFC
int yin_getbksig(int channel,unsigned long evt_handle);	//Get backward signal
int  yin_fwaon(int channel);	//Forward hangup after end of play
int yin_playf(int channel);		//Set up IOTT and TPT's and Play-Back
int clr_output(int channel);	//清除某通道屏显的函数
void time_process(void);		//超时处理函数
int Readdata(int channel);		//从缓冲区读一条数据
int Writeappdata(int channel);	//往辅缓冲区写数据
int Index_sz(int channel);		//索引语音数组
int Index_time(char *sz_time, DX_IOTT *iott_time,int filenum,int channum);	//索引时间字串
int Index_value(char *sz_value,DX_IOTT *iott_value,int filenum,int channum);	//索引金额字串
UINT DataConnect(LPVOID pParam);	//校验数据库连接并自动处理的线程函数
UINT RecordData(LPVOID pParam);		//写数据库日志记录
void Init_data();			//初始化数据库的函数
int get_bdname(int boardid);	//To get boardname according board id
void Init_sys();		//初始化文件和语音卡的函数
int yin_r2_creatbsig(int channel);	//to build backward signal detection
int Cjtiaojian(MAIN_CJDATA*	lp_rddata);	//判断是否满足催缴条件
BOOL Handlehtharg(char* ls_htharg,char* gp_htharg);	//分解合同号参数
int Miancj(CString sztele);		//是否免催的判断
BOOL Outmaindata(MAIN_CJDATA *rddata);		//主缓冲区赋值
int Reset_chdev(int channel);	//重置通道的函数
int chan_seton(int i);	//通道挂机

/************************************************************
 *        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);
}*/

/************************************************************************
*     名称:BOOL Handlehtharg(char* ls_htharg,char* gp_htharg)
*     功能:分解合同号参数
************************************************************************/
BOOL Handlehtharg(char* lp_htharg,char* gp_htharg)
{
	char* lp_starththarg;
	char* lp_tmp;
	char* ls_chara;
	char* lp_hthargtmp;
	char hth_arg[100][10];
	char htharg[100][10];
	char ls_tmphtharg[10];
	int i,j,k;
	int li_a,li_b;
	int m,count;
	int li_flag;

	//去掉字符串前后的空格
	lp_starththarg=lp_htharg;
	while(*lp_starththarg == ' '){
		lp_starththarg++;
	}
	lp_tmp=lp_starththarg;
	while(*lp_tmp!='\0'){
		lp_tmp++;
	}
	lp_tmp--;
	while(*lp_tmp==' '){
		*lp_tmp='\0';
		lp_tmp--;
		if(lp_tmp<=lp_starththarg)
			return FALSE;
	}
	lp_tmp++;
	
	//判断是否为"*"
	hthcounts=1;
	lp_hthargtmp=gp_htharg;
	if(strcmp(lp_starththarg,"*")==0){
		strcpy(lp_hthargtmp,lp_starththarg);
		return TRUE;
	}

	//第一次分解,把用空格分开的字符串赋值到一个临时字符数组中
	i=0;
	j=0;
	while(*lp_starththarg != '\0'){
		if(((*lp_starththarg > '9')||(*lp_starththarg < '0'))
			&&(*lp_starththarg != ' ')&&(*lp_starththarg != '-')){
			return FALSE;
		}
		else if(*lp_starththarg == ' '){
			hth_arg[i][j]='\0';
			i++;
			j=0;
			if(i>=100){
				return FALSE;
			}
			lp_starththarg++;
			while(*lp_starththarg == ' '){
				lp_starththarg++;
				if(lp_starththarg>lp_tmp){
					return FALSE;
				}
			}
		}
		else{
			hth_arg[i][j]=*lp_starththarg;
			j++;
			if(j>5){
				return FALSE;
			}
			hth_arg[i][j]='\0';
			lp_starththarg++;
		}
	}
	
	//第二次分解,把字符串中有‘-’分隔的赋连续值到目标字符串数组中
	count=0;
	for(k=0;k<=i;k++){
		j=0;
		ls_chara=&hth_arg[k][0];
		while(hth_arg[k][j] != '\0'){
			if(hth_arg[k][j]=='-'){
				hth_arg[k][j]='\0';
				li_a=atoi(ls_chara);
				if((li_a>100)||(li_a<=0)){
					return FALSE;
				}
				ls_chara=&hth_arg[k][j+1];
				li_b=atoi(ls_chara);
				if((li_b>100)||(li_b<=0)){
					return FALSE;
				}
				for(m=li_a;m<=li_b;m++){
					itoa(m,htharg[count],10);
					if(m<10){
						strcpy(ls_tmphtharg,"0");
						strcat(ls_tmphtharg,htharg[count]);
						sprintf(htharg[count],ls_tmphtharg);
					}
					count++;
				}
				li_flag=1;
				break;
			}
			li_flag=0;
			j++;
		}
		if(li_flag==0){
			li_a=atoi(hth_arg[k]);
			if((li_a>100)||(li_a<=0)){
				return FALSE;
			}
			strcpy(htharg[count],hth_arg[k]);
			count++;
		}
	}
	hthcounts=count;
	lp_hthargtmp=gp_htharg;
	pauseflag=1;
	for(i=0;i<hthcounts;i++){
		strcpy(lp_hthargtmp,htharg[i]);
		lp_hthargtmp=lp_hthargtmp+10;
	}
	pauseflag=0;
	return TRUE;
}

/************************************************************************
*     名称:int Cjtiaojian(MAIN_CJDATA*	lp_rddata)
*     功能:判断是否满足催缴条件
************************************************************************/
int Cjtiaojian(MAIN_CJDATA*	lp_rddata)
{
	char ls_time[TIME_LENGTH];
	CString ls_month;
	CString ls_hth;
	CString cmphth;
	int hth_flag;
	int i;

	//取得当前催缴月份并判断是否超过当月最大催缴次数
	GetTime(ls_time);
	ls_time[7]='\0';
	ls_month=&ls_time[5];

	if((cjarg.max_count == 0)&&(cjarg.maxcount_flag == 1)){	//如果最大催缴次数为0,即表示不催缴用户
		return(-1);
	}
	if(ls_month.Compare( lp_rddata->cjmonth) != 0) {
		lp_rddata->cjcount=0;
		sprintf(lp_rddata->cjmonth,ls_month);
	}
	else
	{
		if((lp_rddata->cjcount >= cjarg.max_count)&&(cjarg.maxcount_flag == 1))
			return(-1);
	}
			
	//如果催缴音标志位为‘9’,不催
	if(lp_rddata->cjyin_flag==9){
		return(-1);
	}

	//合同号为"*"号指代所有合同号
	if(strcmp(gs_htharg[0],"*")==0){
		return(1);
	}

	//判断合同号是否满足催缴条件
	ls_hth=lp_rddata->hth;
	cmphth=ls_hth.Left(2);
	hth_flag=0;
	for(i=0;i<hthcounts;i++){
		if(cmphth==gs_htharg[i]){
			hth_flag=1;
			break;
		}
	}
	if(hth_flag==1){
		return(1);
	}
	else{
		return(-1);
	}
}

/************************************************************************
*     名称:int Miancj(CString sztele)
*     功能:判断是否满足催缴条件(电话号码作为条件)
*	  返回值:-1 数据库错误, 0	不免催,1 免催
************************************************************************/
int Miancj(CString sztele)
{
	char tmp_querySQL[200];
	int mc_flag;
	CString tmphth;

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

	try{
		if(pMiancuiSet.Open( CRecordset::forwardOnly, _T(tmp_querySQL))==0){
			pMiancuiSet.Close();
			mc_flag = -1;
		}
		else{
			if(pMiancuiSet.GetRecordCount()==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), tmphth);
				//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(1);
		}
	}
	return(0);
}

/************************************************************************
*     名称:BOOL Outmaindata(MAIN_CJDATA *rddata)
*     功能:主缓冲区赋值
************************************************************************/
BOOL Outmaindata(MAIN_CJDATA *rddata)
{
	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]=*rddata;
	//SysPrintf("maincjdata %d ,cjcount=%d",writemain,tmp_rddata.cjcount);
	//计数器加一
	maincounts++;
	telecount.rdrecord_count=maincounts;
	//if(maincounts>MAINDATA_COUNTS-1)
	//	maincounts=MAINDATA_COUNTS-1;
			
	if(writemain>=MAINDATA_COUNTS-1)
		writemain=0;
	else
		writemain++;

	return(TRUE);
}

/************************************************************************
*     名称:UINT Writedata(LPVOID pParam)
*     功能:往主缓冲区写数据的线程
************************************************************************/
UINT Writedata(LPVOID pParam)
{
	int rd_flag;
	MAIN_CJDATA	tmp_rddata;
	
	while(1) {
		if(stopdata==STOPTRUE){
			//AfxMessageBox("Stop the writedata thread");
			break;
		}
		//Sleep(10000);
		if((cjdata_flag == CJDATA_NO)||(dba_connect == DBA_FALSE)) {
			Sleep(60000);
			continue;
		}
		//清空上次的内容
		tmp_rddata.hth[0]='\0';
		tmp_rddata.num[0]='\0';
        tmp_rddata.cuijiao[0]='\0';
		tmp_rddata.qfmonth[0]='\0';
		tmp_rddata.cjcount=0;
		tmp_rddata.cjmonth[0]='\0';
		tmp_rddata.cjyin_flag=1;

		if((maincounts < MAINDATA_COUNTS)&&(pauseflag==0)&&(Cmpcjarg(&cjarg))){	//缓冲区未写满,且在催缴时间内就读数据
			//读一条记录
			sLock.Lock();
			if((dba_connect == DBA_TRUE)&&(cjdata_flag == CJDATA_YES)&&(stopdata==STOPFALSE)){
				rd_flag=Readrecord(&tmp_rddata);
			}
			else{
				rd_flag=-1;
			}
			sLock.Unlock();
			//SysPrintf("主缓冲区读数据");
		}
		Sleep(10);
	}
	//退出时关闭数据库
	//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;

⌨️ 快捷键说明

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