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

📄 dkcj.c

📁 170话费催交系统
💻 C
📖 第 1 页 / 共 4 页
字号:
        }
        telecount.all_count=0;
	telecount.success_count=0;
        telecount.failure_count=0;
        telecount.success_flag=0;
}      

int cjtime()
{
	char* ls_date;
	char* lp_date;
	time_t ls_t;
	int li_day,li_hour;
	
	time(&ls_t);
	ls_date = ctime(&ls_t);
	
	lp_date = ls_date+8;
	ls_date[10] = '\0';
	li_day = atoi(lp_date);
	lp_date = ls_date+11;
	ls_date[13] = '\0';
	li_hour = atoi(lp_date);
	
	if((li_day>=1)&&(li_day<=7)) {
		cjstate.time_state=TIME_A;
	}
	else if((li_day>=8)&&(li_day<=14)) {
		  cjstate.time_state=TIME_B;
	}
	else if((li_day>=15)&&(li_day<=20)) {
		  cjstate.time_state=TIME_C;
        }
        else
        {
        	cjstate.time_state=TIME_U;
        }
        
        if((li_hour>=19)&&(li_hour<=23)&&(cjstate.time_state!=TIME_U)&&(cj_count())) {
        	return(1);
        }
        else
        {
        	return(0);
        }
}

int cj_count()
{
	if((cjstate.current_number>headermessage.record_number)&&(cjstate.time_oldstate==cjstate.time_state)) {
		      return(0);
	}
	else
	{
		     return(1);
	}
}

void get_number()
{
        if(cjstate.time_oldstate==cjstate.time_state) {
                cjstate.current_number++;
        }
        else
        {
                cjstate.time_oldstate=cjstate.time_state;
        	cjstate.current_number=1;
        	/*telecount.all_count=0;
	        telecount.success_count=0;
                telecount.failure_count=0;
                telecount.success_flag=0;*/
        }
}

int channal_work()
{
	int channum;
	
	for(channum=0;channum<argnum;channum++) {
		if( dxinfo[channum].idlework == ID_WORK )
		      return(1);
        }
        return(0);
}

int Process(int eventdev,int event)
{
         DX_CST *cstp;
         
         int    channum;
         int    mode=EV_ASYNC;

         for(channum=0;channum<argnum;channum++) {
                if( dxinfo[channum].chdev==eventdev ) 
                        break;
         }
         
         if(channum>=argnum) {
         	printf(" %s channal is error \n", argnames[channum]);
         	return (0);
         }
         
         dxinfo[channum].chtime = 0;
         
         switch(event) {
         case TDX_PLAY:
                //printf("tdx_play event occured");
                dxinfo[channum].playflag=0;
                /*if ( ATDX_STATE( dxinfo[channum].chdev ) != CS_IDLE ) {
                       dx_stopch( dxinfo[channum].chdev, EV_SYNC );
                       while ( ATDX_STATE( dxinfo[channum].chdev ) != CS_IDLE );
		}*/
		if(dx_sethook(dxinfo[channum].chdev,DX_ONHOOK,EV_ASYNC)==-1){
			         printf(" error set onhook in channal %s\n", argnames[channum]);
		}
		sleep(1);
		break;
         case TDX_SETHOOK:
                cstp=(DX_CST *)sr_getevtdatap();
	        switch(cstp->cst_event){
		case DX_ONHOOK:
		     dxinfo[channum].idlework = ID_UNWORK;
		     get_number();  //get next record number
	       	     if(cjstate.current_number>headermessage.record_number) {
	       	      	   break;
	       	     }
	       	     if(get_record(channum) == -1) { //取得记录数据
	       	         printf(" Get the number %ld of record error in channal %s \n", cjstate.current_number, argnames[channum]);
	       	         //break;
	       	     }
	       	     if(dx_sethook(dxinfo[channum].chdev,DX_OFFHOOK,mode)==-1){		                
			 printf(" error set offhook in channal %s\n", argnames[channum]);
			 break;
		     }
	       	     dxinfo[channum].idlework = ID_WORK;
		     break;
		case DX_OFFHOOK:
		     telecount.all_count=telecount.all_count+1;
                     if(dial_telephone(channum) == -1) {   //拨号
                           if(dx_sethook(dxinfo[channum].chdev,DX_ONHOOK,mode)==-1){
                           	   dxinfo[channum].idlework = ID_UNWORK;
			           printf(" error set onhook in channal %s\n", argnames[channum]);
		           }
		     }
		     break;
		}
	        break;
         case TDX_CALLP:
                switch (ATDX_CPTERM(dxinfo[channum].chdev)) {
                case CR_BUSY:
                      printf(" In Channal %s Call complete: LineBusy \n", argnames[channum]);
                      if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
		      {
                              printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
		      }
                      break;
                case CR_CEPT:
                      printf(" In Channal %s Call complete: Operator Intercept \n", argnames[channum]);
                      if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
		      {
                              printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
		      }
                      break;
                case CR_CNCT:
                      switch(ATDX_CONNTYPE(dxinfo[channum].chdev)) {
                      case CON_CAD:
                           printf(" In Channal %s Call complete: Connection due to cadence break \n", argnames[channum]);
                           if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
		           {
                              printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
		           }
                           break;
                      case CON_LPC:
                           printf(" In Channal %s Call complete: Connection due to loop current drop \n", argnames[channum]);
                           if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
		           {
                               printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
		           }
                           break;
                      case CON_PVD:
                           telecount.success_flag=1;
                           printf(" In Channal %s Call complete: Connection due to Positive Voice Detection \n", argnames[channum]);
                           Play_value(teleinfo[channum].zzrq,teleinfo[channum].dkbj,teleinfo[channum].dklx, teleinfo[channum].hjje, 1, iott_cjvalue[channum], channum); //play voice 
                           break;
                      case CON_PAMD:
                           printf(" In Channal %s Call complete: Connection due to Positive Answering Machine Detection \n", argnames[channum]);
                           if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
		           {
                              printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
		           }
                           break;
                      }
                      break;
                case CR_ERROR:
                      printf(" In Channal %s Call complete: Error condition \n", argnames[channum]);
                      if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
		      {
                              printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
		      }
                      break;
                case CR_FAXTONE:
                      printf(" In Channal %s Call complete: FAX tone detected \n", argnames[channum]);
                      if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
		      {
                              printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
		      }
		      break;
                case CR_NOANS:
                      printf(" In Channal %s Call complete: No answer \n", argnames[channum]);
                      if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
		      {
                              printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
		      }
                      break;
                case CR_NODIALTONE:
                      printf(" In Channal %s Call complete: No dialtone detected \n", argnames[channum]);
                      if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
		      {
                              printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
		      }
                      break;
                case CR_NORB:
                      printf(" In Channal %s Call complete: No ringback detected \n", argnames[channum]);
                      if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
		      {
                              printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
		      }
                      break;
                case CR_STOPD:
                      printf(" In Channal %s Call complete: User abort \n", argnames[channum]);
                      if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
		      {
                              printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
		      }
                      break;
                }
                if (telecount.success_flag==1) {
                	telecount.success_count=telecount.success_count+1;
                	telecount.success_flag=0;
                }
                else
                {
                	telecount.failure_count=telecount.failure_count+1;
                }
                printf("the success cuijiao number is %ld , the all cuijiao number is %ld in period of %s"\n,
                    telecount.success_count,telecount.all_count,period[cjstate.time_state-1]);
                break;
         default:  
	        printf(" Other Event occured in channal %s\n", argnames[channum]);
	        //printf("event=%d\n",event);
	        if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
		{
                              printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
		}
		break;
         }
         
         return(0);
}
                
int dial_telephone(int channum)
{
	DX_CAP cap;
        int mode = EV_ASYNC;
	
	dx_clrcap(&cap);
        printf(" Dialing %s with PerfectCall in Channal %s\n", teleinfo[channum].telephone, argnames[channum]);
        mode |= DX_CALLP;

        // get parameters for PerfectCall
        cap.ca_dtn_pres = dxinfo[channum].callp.ca_dtn_pres;
        cap.ca_dtn_npres = dxinfo[channum].callp.ca_dtn_npres;
        cap.ca_dtn_deboff = dxinfo[channum].callp.ca_dtn_deboff;
        cap.ca_noanswer = dxinfo[channum].callp.ca_noanswer;
        cap.ca_intflg = dxinfo[channum].callp.ca_intflg;

        if (dx_dial(dxinfo[channum].chdev, teleinfo[channum].telephone, &cap, mode) == -1) {
                printf(" Dialing %s Error in Channal %s\n", teleinfo[channum].telephone, argnames[channum]);
                return(-1);
        }
        return(1);
}

int get_header()
{
     int loop_count;
     int dkbj_find=0;
     int dklx_find=0;
     int hjje_find=0;
     int telephone_find=0;
     unsigned char* record_header;
     char* ls_compare;
     unsigned char* ls_record;

     recordmessage.dkbj_offset=1;
     recordmessage.dkbj_length=0;
     recordmessage.dklx_offset=1;
     recordmessage.dklx_length=0;
     recordmessage.hjje_offset=1;
     recordmessage.hjje_length=0;
     recordmessage.telephone_offset=1;
     recordmessage.telephone_length=0;
     
     if((headermessage.handle=fopen(headermessage.szdbffile,"rb"))==NULL) {
	      printf(" Can't open %s file \n",headermessage.szdbffile);
	      Sys_exit(MAXFILE,argnum);
     }

     if(fseek(headermessage.handle,32,SEEK_CUR)!=0) {
	     printf(" Seek handle of %s file error \n",headermessage.szdbffile);
	     fclose(headermessage.handle);
	     return(0);
     }

     if((record_header=(unsigned char*)malloc(headermessage.header_length-32))==NULL) {
	       printf(" Not enough memory to allocate buffer \n");
	       fclose(headermessage.handle);
	       return(0);
     }

     if(fread(record_header,headermessage.header_length-32,1,headermessage.handle)==0) {
	    printf(" Read %s file's header error \n",headermessage.szdbffile);
	    free(record_header);
	    fclose(headermessage.handle);
	    return(0);
     }
     
     loop_count=headermessage.header_length/32-1;
     ls_record=record_header;
     while((ls_record[0]!=13)&&(loop_count!=0)){
	 loop_count--;
	 ls_compare=(char*)ls_record;
	 if(dkbj_find==0) {
	   if(strcmp(ls_compare,dkbj_name)!=0) {
		  recordmessage.dkbj_offset+=ls_record[16];
	   }
	   else
	   {
		  recordmessage.dkbj_length=ls_record[16];
		  dkbj_find=1;
	   }
	 }
	 if(telephone_find==0) {
	   if(strcmp(ls_compare,telephone_name)!=0) {
		  recordmessage.telephone_offset+=ls_record[16];
	   }
	   else
	   {
		  recordmessage.telephone_length=ls_record[16];
		  telephone_find=1;
	   }
	 }
	 if(dklx_find==0) {
	   if(strcmp(ls_compare,dklx_name)!=0) {
		  recordmessage.dklx_offset+=ls_record[16];
	   }
	   else
	   {
		  recordmessage.dklx_length=ls_record[16];
		  dklx_find=1;
	   }
	 }
	 if(hjje_find==0) {
	   if(strcmp(ls_compare,hjje_name)!=0) {
		  recordmessage.hjje_offset+=ls_record[16];
	   }
	   else
	   {
		  recordmessage.hjje_length=ls_record[16];
		  hjje_find=1;
	   }
	 }
	 if((dkbj_find==1)&&(telephone_find==1)&&(dklx_find==1)&&(hjje_find==1)) {
	     break;
	 }
	 ls_record+=32;
     }
     free(record_header);
     if((dkbj_find==0)||(telephone_find==0)||(dklx_find==0)||(hjje_find==0)) {

⌨️ 快捷键说明

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