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

📄 charge_balance.cpp

📁 通信BOSS计费方面的服务器源码,有很多经典的创意,值得借鉴,在UNIX上运行.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
         "BALANCE_TABLE_ADMIN.present,  "         "BALANCE_TABLE_ADMIN.advance , "         "LBAS.ACCT.change "    "FROM LBAS.ACCT  ,BALANCE_TABLE_ADMIN ,lbas.domain_payment_method "   "WHERE LBAS.ACCT.acct_id = BALANCE_TABLE_ADMIN.acct_id(+)  and "   " ( LBAS.ACCT.acct_id = %s ) AND    "   " '1'=BALANCE_TABLE_ADMIN.state(+) AND "         " ( LBAS.ACCT.state = '10A' ) and "         " (LBAS.ACCT.payment_method=lbas.domain_payment_method.payment_method(+))"          ,pstate,ls_charge,ls_realcharge,acct_id);			//userlog(lsSql);	cDatabase->DoSql(lsSql);	isqlcode=cDatabase->GetSqlCode();	//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());	//userlog("检索返回行数:%d",cDatabase->GetRowCount());		lrow=cDatabase->GetRowCount();	if(isqlcode<0||lrow>1)	{		strcpy(lsTemp,"取帐户及预付款信息出错!\n");		strcpy(lsTemp,cDatabase->GetSqlErrText());strcat(lsTemp,"\n");		if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-1,lsTemp);	}		if(lrow==0) 	{		cDatabase->Commit();		StrReturn(100,"合同号不存在!");	}	cDatabase->Commit();	StrReturn(0,cDatabase->GetData());		 	}//------------------------------------------------------------------------//服务PBApplyBal实现函数,预付款开户//传入参数staff_id,acct_id,acct_seq_nbr,//customer_name,id_crad,pass_word,checknbr,amount//------------------------------------------------------------------------void CBalance::ApplyBalUser(){	char lsSql[2048],lsTemp[1024],lsErr[500];	char *lparm[15],op_flag[2];	char staff_id[20],acct_id[20],acct_seq_nbr[4],customer_name[200],id_card[30];	char pass_word[50],amount[20],checknbr[50];	char paymaxno[30],paymethod[4],systime[20],hist_id[20];	char ls_old_balance[15],present[20],month_num[6],eff_date[15];	int i,isqlcode,lpnum,rpnum;	int rt;		strcpy(lsTemp,pInp);	//userlog(lsTemp);	lpnum=13;		rpnum=GetInputParm(lsTemp,lparm,200);	if(rpnum!=lpnum)	{		lpfree(lparm,rpnum);		strcpy(lsTemp,"解析客户端传入参数失败,可能参数传输不正确!\n");		if(WriteLog(cDatabase,"-1","w_p_balance",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-2,lsTemp);	}	strcpy(staff_id,lparm[0]);	strcpy(acct_id,lparm[1]);	strcpy(acct_seq_nbr,lparm[2]);	strcpy(customer_name,lparm[3]);	strcpy(id_card,lparm[4]);	strcpy(pass_word,lparm[5]);	strcpy(checknbr,lparm[6]);	strcpy(amount,lparm[7]);	strcpy(paymethod,lparm[8]);	strcpy(present,lparm[9]);	strcpy(month_num,ltrim(rtrim(lparm[10])));	strcpy(eff_date,lparm[11]);	strcpy(op_flag,lparm[12]);		lpfree(lparm,rpnum);				//cDatabase->BeginTran();         if(strcmp(paymethod,"40")==0)    {        //乐山预付加入判断是否允许转预付        char ls_allow_flag[3];        if(strcmp(op_flag,"0")==0)        {	        sprintf(lsSql," select 1 from b_serv a,lbas.noallow_to_prepay b "	                      " where a.acct_id=%s "	                      " and a.serv_type_id=b.serv_type_id "	                      " and a.state not in 'F0X' "	                      ,acct_id);	        cDatabase->DoSql(lsSql);	        isqlcode=cDatabase->GetSqlCode();	 	 	if(isqlcode<0)		{			strcpy(lsTemp,"判断是否允许转预付1出错!\n");			strcat(lsTemp,cDatabase->GetSqlErrText());strcat(lsTemp,"\n");			if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1)				strcat(lsTemp,lsErr);			cDatabase->Commit();			StrReturn(-1,lsTemp);		}		strcpy(ls_allow_flag,cDatabase->GetData());				if(atol(ls_allow_flag)==0)		{			sprintf(lsSql," select 1 from b_acct a, lbas.noallow_to_prepay b "			              " where a.acct_id=%s "			              " and a.payment_method=b.payment_method "			              ,acct_id);			//userlog(lsSql);			cDatabase->DoSql(lsSql);	                isqlcode=cDatabase->GetSqlCode();	 		 	if(isqlcode<0)			{				strcpy(lsTemp,"判断是否允许转预付2出错!\n");				strcat(lsTemp,cDatabase->GetSqlErrText());strcat(lsTemp,"\n");				if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1)					strcat(lsTemp,lsErr);				cDatabase->Commit();				StrReturn(-1,lsTemp);			}			strcpy(ls_allow_flag,cDatabase->GetData());		}		else		{			StrReturn(-3,"该帐户下有号码业务类型不符合转预付要求!");		}				if(atol(ls_allow_flag)==0)		{			sprintf(lsSql,"select no_id from lbas.large_no "			              " where no_type='max_products'" );			//userlog(lsSql);				cDatabase->DoSql(lsSql);	                isqlcode=cDatabase->GetSqlCode();	 		 	if(isqlcode<0)			{				strcpy(lsTemp,"判断是否允许转预付2出错!\n");				strcat(lsTemp,cDatabase->GetSqlErrText());strcat(lsTemp,"\n");				if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1)					strcat(lsTemp,lsErr);				cDatabase->Commit();				StrReturn(-1,lsTemp);			}						int li_max_products,li_serv_num;			li_max_products=atoi(cDatabase->GetData());						sprintf(lsSql," select count(*) from b_serv "			              " where acct_id=%s "			              " and state<>'F0X' "			              ,acct_id);			//userlog(lsSql);              			cDatabase->DoSql(lsSql);	                isqlcode=cDatabase->GetSqlCode();					 	if(isqlcode<0)			{				strcpy(lsTemp,"判断是否允许转预付2出错!\n");				strcat(lsTemp,cDatabase->GetSqlErrText());strcat(lsTemp,"\n");				if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1)					strcat(lsTemp,lsErr);				cDatabase->Commit();				StrReturn(-1,lsTemp);			}						li_serv_num=atoi(cDatabase->GetData());						if(li_serv_num>=li_max_products)			{			   strcpy(ls_allow_flag,"1");			}			else			{			   strcpy(ls_allow_flag,"0");			}							}		     else		{			StrReturn(-3,"该帐户付款方式不符合转预付费要求!");		}					if(atoi(ls_allow_flag)>0)		{			StrReturn(-2,"该帐户下电话号码超出标准");		}	}     }        		sprintf(lsSql," delete from BALANCE_TABLE_ADMIN "	              " where 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,"删除BALANCE_TABLE_ADMIN表中旧数据时出错!\n");		strcat(lsTemp,cDatabase->GetSqlErrText());		strcat(lsTemp,"\n");		cDatabase->Rollback();		if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-1,lsTemp);	}	              	#if 0	//广安没有用号线接口表,注释掉该部分的处理	//号线接口插入处理       sprintf(lsSql,         " select b.area_id,substr(c.lbas_code,1,2) "         " from lbas.serv a,lbas.acct b,lbas.serv_type c "         " where a.acct_id = b.acct_id "         " and a.acct_seq_nbr = b.acct_seq_nbr "         " and a.acct_id=%s "         " and a.state <>'F0X' "          " and b.state='10A' "         " and a.serv_type_id=c.serv_type_id "         " and rownum=1 "         ,acct_id);                   //userlog(lsSql);         cDatabase->DoSql(lsSql);         isqlcode=cDatabase->GetSqlCode();         //userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());  	if(isqlcode<0) 	{			strcpy(lsTemp,"向销帐库的BALANCE_TABLE_ADMIN表中插数据时出错!\n");		strcat(lsTemp,cDatabase->GetSqlErrText());		strcat(lsTemp,"\n");		cDatabase->Rollback();		if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-1,lsTemp);	} 		int li_area_id,li_area_type ;	char ls_lbas_code[10];        	li_area_id=atoi(cDatabase->data->GetColData(1,1));	strcpy(ls_lbas_code,cDatabase->data->GetColData(1,2));			if(li_area_id>2 ||(li_area_id==2 && strcmp(ls_lbas_code,"WX")!=0))	{            li_area_type=3;        }                if((li_area_id ==1||li_area_id==2)&& strcmp(ls_lbas_code,"WX")==0)        {            li_area_type=2;         }                if(li_area_id==1 && strcmp(ls_lbas_code,"WX")!=0)         {            li_area_type=1;         } 	sprintf(lsSql,	 " insert into lbas.prepay_hx_interface "	 " (prepay_hx_nbr,acct_nbr_97,payment_method,old_payment_method,created_date, "	 " staff_id,area_id,state,acc_nbr )"	 " select charge.seq_prepay_hx.nextval, b.acct_nbr_97,'%s',b.payment_method,sysdate,"	 " %s,%d,'0',a.acc_nbr from lbas.serv a,lbas.acct b"	 " where a.acct_id=%s "	 " and a.acct_id=b.acct_id "	 " and a.acct_seq_nbr=b.acct_seq_nbr "	 " and a.state <>'F0X' "	 " and b.state ='10A' "	 ,paymethod,staff_id,li_area_type,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_balance",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-1,lsTemp);	} 	 	 #endif 	 //广安没有用号线接口表,注释掉该部分的处理	                   	//向销帐库的BALANCE_TABLE_ADMIN表中插数据	sprintf(lsSql,	"INSERT INTO BALANCE_TABLE_ADMIN  "		"(acct_id,name,password,   "		"id_card_nbr,total_amount,advance,radix,ratio,create_date,state,state_date,present)   "	"VALUES (%s,'%s','%s',   "		"'%s',%s + %s ,%s,0,0,sysdate,'1',sysdate,%s)   "	,acct_id,customer_name,pass_word,id_card,amount,present,amount,present);		//userlog(lsSql);	cDatabase->DoSql(lsSql);	isqlcode=cDatabase->GetSqlCode();	//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());		if(isqlcode<0) 	{			strcpy(lsTemp,"向销帐库的BALANCE_TABLE_ADMIN表中插数据时出错!\n");		strcat(lsTemp,cDatabase->GetSqlErrText());		strcat(lsTemp,"\n");		cDatabase->Rollback();		if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-1,lsTemp);	}		sprintf(lsSql,	 " select seq_balance_hist_admin.nextval from dual ");	 	 cDatabase->DoSql(lsSql);	 isqlcode=cDatabase->GetSqlCode();	 	 if(isqlcode<0)	 {	 	strcpy(lsTemp,"获取预付流水信息出错2!\n");		strcat(lsTemp,cDatabase->GetSqlErrText());		strcat(lsTemp,"\n");		cDatabase->Rollback();		if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-1,lsTemp);		 		 }	 	 if(cDatabase->GetRowCount()>0)	{			sprintf(hist_id,"%s",cDatabase->GetData());	}		//向销帐库的BALANCE_HIST_ADMIN表中插数据		sprintf(lsSql,	"INSERT INTO BALANCE_HIST_ADMIN   "		"(balance_hist_admin_id,acct_id,amount,use_catg,staff_id,balance,use_date,state,present )   "	"VALUES (%s,%s,%s,'1',   "	"%s,%s + %s,sysdate,'01',%s)   "	,hist_id,acct_id,amount,staff_id,amount,present,present);			//userlog(lsSql);	cDatabase->DoSql(lsSql);	isqlcode=cDatabase->GetSqlCode();	//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());		if(isqlcode<0) 	{			strcpy(lsTemp,"向销帐库的BALANCE_HIST_ADMIN表中插数据时出错2!\n");		strcat(lsTemp,cDatabase->GetSqlErrText());		strcat(lsTemp,"\n");		cDatabase->Rollback();		if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1)			strcat(lsTemp,lsErr);		cDatabase->Commit();		StrReturn(-1,lsTemp);	}		if(atol(present)>0)	{		sprintf(lsSql,		 " INSERT INTO BALANCE_HIST_EFF_EXP "		  "(balance_hist_admin_id,acct_id,amount,present,eff_date,eff_month,state,state_date,balance,staff_id) "		  " VALUES(%s,%s,%s,%s,to_date('%s','yyyy-mm-dd'),%s,'01',sysdate,%s + %s,%s )"		  ,hist_id,acct_id,amount,present,eff_date,month_num,amount,present,staff_id);		  	        //userlog(lsSql);		cDatabase->DoSql(lsSql);		isqlcode=cDatabase->GetSqlCode();		//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());				if(isqlcode<0) 		{				strcpy(lsTemp,"向销帐库的BALANCE_HIST_EFF_EXP表中插数据时出错4!\n");			strcat(lsTemp,cDatabase->GetSqlErrText());			strcat(lsTemp,"\n");			cDatabase->Rollback();			if(WriteLog(cDatabase,staff_id,"w_p_balance",lsTemp,lsErr)!=1)				strcat(lsTemp,lsErr);			cDatabase->Commit();			StrReturn(-1,lsTemp);		}		          }	        	//更新收费库B_ACCT表中的balance字段的值/*	sprintf(lsSql,	"UPDATE B_ACCT   "	"SET balance = %s + %s , "

⌨️ 快捷键说明

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