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

📄 charge_settle.cpp

📁 通信BOSS计费方面的服务器源码,有很多经典的创意,值得借鉴,在UNIX上运行.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
#include "charge_settle.h"#include "payment.flds.h"CSettle::CSettle(char *pcInp,COracle *pcDatabase){	cDatabase = pcDatabase;	pInp = pcInp;}//-----------------------------------------------------------------//服务PTGetItem实现函数,传入参数staff_id,acct_id//取销户结清费用信息//-----------------------------------------------------------------void CSettle::PTGetItem(){	char  lsSql[2048],lsTemp[500],lsErr[500],lsReturn[1024];	int   i,isqlcode,lpnum,rpnum;	int   li_count=0;	char  staff_id[20],acct_id[20],serv_id[11],acct_nbr_97[20],acct_seq_nbr[20];	char  customer_name[100],acc_nbr[20],systime[20],areacode[6];	char  *lparm[9];	float lf_once_fee=0,lf_once_fee1=0,lf_charge=0,lf_change=0,lf_realcharge=0;	int   li_change,li_realcharge,li_oncecharge;	int   li_method;	char  ls_realtime_info[40];	long  ll_billing_cycle_id;		//userlog(pInp);	lpnum=9;	rpnum=GetInputParm(pInp,lparm,50);	if(rpnum!=lpnum)	{		lpfree(lparm,rpnum);		strcpy(lsTemp,"解析客户端传入参数失败,可能参数传输不正确!\n");		if(WriteLog(cDatabase,"-1","w_p_settle",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-2,lsTemp);	}         	strcpy(staff_id,lparm[0]);	li_method=atol(lparm[5]);	if(li_method==0)	{	  sprintf(acct_id,"%s",lparm[1]);	}	else	{	  strcpy(serv_id,lparm[1]);	}	li_change=atol(lparm[2]);	li_realcharge=atol(lparm[3]);	li_oncecharge=atol(lparm[4]);	ll_billing_cycle_id=atol(lparm[6]);	strcpy(acc_nbr,lparm[7]);	strcpy(areacode,lparm[8]);	lpfree(lparm,rpnum);			if(GetSystime(cDatabase,systime,lsErr)!=1 || systime==NULL)	{		strcpy(lsTemp,"取系统时间出错!\n");		strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-2,lsTemp);	}	strcpy(lsReturn,NULL);	  //按合同号结算	       if(li_method==0)       {	 		sprintf(lsSql,	        "SELECT acct_id  "		"FROM B_ACCT_ITEM_ENTRUST  "	        "WHERE acct_id =%s "	         "AND state = 'E0A' "		,acct_id);					cDatabase->DoSql(lsSql);		isqlcode=cDatabase->GetSqlCode();	//	//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());				if(isqlcode<0) 		{				strcpy(lsTemp,"校验用户是否有费用处于送托状态出错!\n");			strcat(lsTemp,cDatabase->GetSqlErrText());			strcat(lsTemp,"\n");			cDatabase->Rollback();			if(WriteLog(cDatabase,staff_id,"w_p_settle",lsTemp,lsErr)!=1)				strcat(lsTemp,lsErr);					cDatabase->Commit();			StrReturn(-1,lsTemp);		}		else if(isqlcode==0 && cDatabase->GetRowCount()>0)		{			strcpy(lsTemp,"该用户尚有费用处于送托状态,不能做销户结清处理,请先做托收销帐处理!\n");			cDatabase->Rollback();			cDatabase->Commit();			StrReturn(-2,lsTemp);		}				sprintf(lsSql,	        "SELECT acct_id  "		"FROM B_ACCT_ITEM_O  "	        "WHERE acct_id = %s  "	        " AND billing_cycle_id<%ld "	         "AND state in ('20C','20Q') "		,acct_id,ll_billing_cycle_id);				//userlog(lsSql);		cDatabase->DoSql(lsSql);		isqlcode=cDatabase->GetSqlCode();		//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());				if(isqlcode<0) 		{				strcpy(lsTemp,"校验用户是否有欠费出错!\n");			strcat(lsTemp,cDatabase->GetSqlErrText());			strcat(lsTemp,"\n");			cDatabase->Rollback();			if(WriteLog(cDatabase,staff_id,"w_p_settle",lsTemp,lsErr)!=1)				strcat(lsTemp,lsErr);					cDatabase->Commit();			StrReturn(-1,lsTemp);		}		else if(isqlcode==0 && cDatabase->GetRowCount()>0)		{			strcpy(lsTemp,"该用户尚有欠费,不能做销户结清处理,请先做销帐处理!\n");			cDatabase->Rollback();			cDatabase->Commit();			StrReturn(-2,lsTemp);		}	        if(li_realcharge==0)	        {	                           sprintf(lsSql," begin lbas.p_a_acct_realtime_acct(%s,%ld,:returncode ); end;",acct_id,ll_billing_cycle_id);                                                  char ls_return[40];				strcpy(ls_return,cDatabase->ExecProc(lsSql));				if(ls_return[0]>'9') 				{					StrReturn(-1,ls_return);				}				else 				{				   sprintf(lsSql,				   " select sum(charge)*0.01 "				   " from b_acct_item_o "				   " where acct_id = %s "				   " and billing_cycle_id=%ld "				   " and   state in ('20C' ,'20T','20Q','20Y','20S','20Z') "				   ,acct_id,ll_billing_cycle_id );				   //userlog(lsSql);				   cDatabase->DoSql(lsSql);			           isqlcode=cDatabase->GetSqlCode();			           if(isqlcode<0)			           {			           	strcpy(lsTemp,"计算实时费用出错!\n");			           	strcat(lsTemp,cDatabase->GetSqlErrText());			           	strcat(lsTemp,"\n");			           	StrReturn(-1,lsTemp);			           }			       			           lf_charge=atof(cDatabase->GetData());			      			           if(lf_charge!=0)			           {			                sprintf(lsReturn,"%s\t1\t%.2f\tC0C\t%s\r\n",acct_id,lf_charge,systime);					strcat(lsTemp,lsReturn);					////userlog(lsReturn);					li_count++;				   }			        }			//}		}      		     	if(li_change==0)	     	{ 				sprintf(lsSql,		        "SELECT NVL(change,0) / 100.00,''  "			"FROM B_ACCT  "		        "WHERE acct_id = %s  "		         "AND state = '10A'  "			,acct_id);						//userlog(lsSql);			cDatabase->DoSql(lsSql);			isqlcode=cDatabase->GetSqlCode();		//	//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());						if(isqlcode<0) 			{					strcpy(lsTemp,"校验用户是否有费用未销帐出错!\n");				strcat(lsTemp,cDatabase->GetSqlErrText());				strcat(lsTemp,"\n");				cDatabase->Rollback();				if(WriteLog(cDatabase,staff_id,"w_p_settle",lsTemp,lsErr)!=1)					strcat(lsTemp,lsErr);				cDatabase->Commit();				StrReturn(-1,lsTemp);			}			else if(isqlcode==0 && cDatabase->GetRowCount()==0) 			{				lf_change=0;			}			else			{				lf_change=atof(cDatabase->data->GetColData(1,1));			}						if(lf_change!=0)			{				sprintf(lsTemp,"%s\t2\t%f\tC0C\t%s\r\n",acct_id,lf_change,systime);				strcat(lsReturn,lsTemp);				li_count++;			}    		  }      		  if(li_oncecharge==0)		  { 				sprintf(lsSql,		        "SELECT NVL(sum(charge),0) / 100.00,''  "			"FROM LBAS.SERV_ONCE_FEE a,LBAS.SERV b  "		        "WHERE a.serv_id = b.serv_id   "		         "AND a.serv_seq_nbr = b.serv_seq_nbr "		         "AND a.state = '1'   "		         "AND b.state <> 'F0X'  "		         "and a.edit_time>sysdate "		         "AND b.acct_id = %s  "			,acct_id);					//	//userlog(lsSql);			cDatabase->DoSql(lsSql);			isqlcode=cDatabase->GetSqlCode();		//	//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());						if(isqlcode<0) 			{					strcpy(lsTemp,"提取用户一次性费用出错!\n");				strcat(lsTemp,cDatabase->GetSqlErrText());				strcat(lsTemp,"\n");				cDatabase->Rollback();				if(WriteLog(cDatabase,staff_id,"w_p_settle",lsTemp,lsErr)!=1)					strcat(lsTemp,lsErr);					cDatabase->Commit();				StrReturn(-1,lsTemp);			}			else if(isqlcode==0 && cDatabase->GetRowCount()==0) 			{				lf_once_fee1=0;			}			else			{		                 lf_once_fee1=atof(cDatabase->data->GetColData(1,1));			}				sprintf(lsSql,		        "SELECT NVL(sum(charge),0) / 100.00,''  "			"FROM LBAS.ACCT_ONCE_FEE  "		        "WHERE acct_id = %s  "			 "AND state = '1'  "			,acct_id);						//userlog(lsSql);			cDatabase->DoSql(lsSql);			isqlcode=cDatabase->GetSqlCode();			//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());						if(isqlcode<0) 			{					strcpy(lsTemp,"提取帐户一次性费用出错!\n");				strcat(lsTemp,cDatabase->GetSqlErrText());				strcat(lsTemp,"\n");				cDatabase->Rollback();				if(WriteLog(cDatabase,staff_id,"w_p_settle",lsTemp,lsErr)!=1)					strcat(lsTemp,lsErr);						cDatabase->Commit();				StrReturn(-1,lsTemp);			}			else if(isqlcode==0 && cDatabase->GetRowCount()==0) 			{				lf_once_fee=0;			}			else			{				lf_once_fee=atof(cDatabase->data->GetColData(1,1));			}						lf_once_fee = lf_once_fee + lf_once_fee1;						if(lf_once_fee!=0)			{				sprintf(lsTemp,"%s\t3\t%f\tC0C\t%s\r\n",acct_id,lf_once_fee,systime);				strcat(lsReturn,lsTemp);				li_count++;			}						sprintf(lsSql,		        "SELECT NVL(sum(carryover),0) / 100.00 + NVL(sum(last_carryover),0) / 100.00 ,''  "			"FROM COMIT_BALANCE  "		        "WHERE acct_id = %s   "			 "AND state = '01'  "			,acct_id);						//userlog(lsSql);			cDatabase->DoSql(lsSql);			isqlcode=cDatabase->GetSqlCode();			//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());						if(isqlcode<0) 			{					strcpy(lsTemp,"提取用户托收结余出错!\n");				strcat(lsTemp,cDatabase->GetSqlErrText());				strcat(lsTemp,"\n");				cDatabase->Rollback();				if(WriteLog(cDatabase,staff_id,"w_p_settle",lsTemp,lsErr)!=1)					strcat(lsTemp,lsErr);						cDatabase->Commit();				StrReturn(-1,lsTemp);			}			else if(isqlcode==0 && cDatabase->GetRowCount()==0) 			{				lf_charge=0;			}			else			{				lf_charge=atof(cDatabase->data->GetColData(1,1));			}						if(lf_charge!=0)			{				sprintf(lsTemp,"%s\t4\t%f\tC0C\t%s\r\n",acct_id,lf_charge,systime);				strcat(lsReturn,lsTemp);				li_count++;			}						sprintf(lsSql,		        "SELECT NVL(-sum(amount),0) / 100.00,''  "			"FROM BALANCE_HIST_ADMIN  "		        "WHERE acct_id = %s  "			 "AND state='01'  "			,acct_id);						//userlog(lsSql);			cDatabase->DoSql(lsSql);			isqlcode=cDatabase->GetSqlCode();			//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());						if(isqlcode<0) 			{					strcpy(lsTemp,"提取用户预付款金额出错!\n");				strcat(lsTemp,cDatabase->GetSqlErrText());				strcat(lsTemp,"\n");				cDatabase->Rollback();				if(WriteLog(cDatabase,staff_id,"w_p_settle",lsTemp,lsErr)!=1)					strcat(lsTemp,lsErr);						cDatabase->Commit();				StrReturn(-1,lsTemp);			}			else if(isqlcode==0 && cDatabase->GetRowCount()==0) 			{				lf_charge=0;			}			else			{				lf_charge=atof(cDatabase->data->GetColData(1,1));			}						if(lf_charge!=0)			{				sprintf(lsTemp,"%s\t5\t%f\tC0C\t%s\r\n",acct_id,lf_charge,systime);				strcat(lsReturn,lsTemp);	//			//userlog(lsReturn);				li_count++;			}						sprintf(lsSql,		        "SELECT NVL(sum(charge_sum),0) / 100.00 + NVL(sum(charge_current),0) / 100.00,''  "			"FROM INSTALMENT_BALANCE  "		        "WHERE acct_id = %s  "			"AND state='01'  "			,acct_id);						//userlog(lsSql);			cDatabase->DoSql(lsSql);			isqlcode=cDatabase->GetSqlCode();			//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());						if(isqlcode<0) 			{					strcpy(lsTemp,"提取用户分期付款金额出错!\n");				strcat(lsTemp,cDatabase->GetSqlErrText());				strcat(lsTemp,"\n");				cDatabase->Rollback();				if(WriteLog(cDatabase,staff_id,"w_p_settle",lsTemp,lsErr)!=1)					strcat(lsTemp,lsErr);						cDatabase->Commit();				StrReturn(-1,lsTemp);			}			else if(isqlcode==0 && cDatabase->GetRowCount()==0) 			{				lf_charge=0;			}			else			{				lf_charge=atof(cDatabase->data->GetColData(1,1));			}						if(lf_charge!=0)			{				sprintf(lsTemp,"%s\t6\t%f\tC0C\t%s\r\n",acct_id,lf_charge,systime);				strcat(lsReturn,lsTemp);				li_count++;			}		}														       }     //按单机结算       if(li_method==1)       {       		if(li_realcharge==0)	        {	                           sprintf(lsSql," begin lbas.p_a_serv_realtime_acct('%s','%s',%ld,:returncode ); end;",areacode,acc_nbr,ll_billing_cycle_id);                             char ls_return[40];				strcpy(ls_return,cDatabase->ExecProc(lsSql));				if(ls_return[0]>'9') 				{					StrReturn(-1,ls_return);				}				else 				{				   sprintf(lsSql,				   " select sum(charge)*0.01 "				   " from b_acct_item_o "				   " where serv_id = %s "				   " and billing_cycle_id=%ld "				   " and   state in ('20C' ,'20T','20Q','20Y','20S','20Z') "				   ,serv_id,ll_billing_cycle_id );//				   //userlog(lsSql);				   cDatabase->DoSql(lsSql);			           isqlcode=cDatabase->GetSqlCode();			           if(isqlcode<0)			           {			           	strcpy(lsTemp,"计算实时费用出错!\n");			           	strcat(lsTemp,cDatabase->GetSqlErrText());			           	strcat(lsTemp,"\n");			           	StrReturn(-1,lsTemp);			           }			           lf_charge=atof(cDatabase->GetData());			           if(lf_charge!=0)			           {			                sprintf(lsReturn,"%s\t1\t%.2f\tC0C\t%s\r\n",serv_id,lf_charge,systime);					strcat(lsTemp,lsReturn);//					//userlog(lsReturn);					li_count++;				   }			        }			//}		}		      		if(li_oncecharge==0)      		{ 				sprintf(lsSql,         		"SELECT NVL(sum(charge),0) / 100.00,''  "			 "FROM LBAS.SERV_ONCE_FEE a,LBAS.SERV b  "

⌨️ 快捷键说明

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