📄 datafunc.h
字号:
#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 + -