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

📄 charge_balance.cpp

📁 通信BOSS计费方面的服务器源码,有很多经典的创意,值得借鉴,在UNIX上运行.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
				strcat(lsTemp,lsErr);			cDatabase->Commit();			StrReturn(-1,lsTemp);		}           		sprintf(lsSql,"select max(balance_hist_admin_id) from balance_hist_admin where acct_id=%s and staff_id=%s and state='01' and use_catg='1'",				acct_id,staff_id);		cDatabase->DoSql(lsSql);		isqlcode=cDatabase->GetSqlCode();				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);		}				char strMaxHistAdminId[19]; 		memset(strMaxHistAdminId,0,sizeof(strMaxHistAdminId));				strcpy(strMaxHistAdminId,cDatabase->GetData());			    sprintf(lsSql,"INSERT INTO BILL  "		      "( bill_serial_nbr,"		      "pay_serial_nbr,"		      "pay_date,"		      "created_date, "   		      "staff_id, "   		      "print_count, " 		      "state, "   		      "state_date, "   		      "bill_serial_nbs, "		      "amount,"		      "acct_id,"		      "change,"		      "billing_cycle_id,"		      "new_change)"                        "values(%s, "                       "%s,"                      "sysdate,"                      "sysdate,"                      "%s,"                      "0,"                      "'40C',"                      "sysdate,"                      "%s,"                      "%ld,"                      "%s,"                      "%s*100,"                      "%s,"                      "0 )"                      ,bill_serial_nbr,strMaxHistAdminId,staff_id,bill_serial_nbr,total_amount,acct_id,change,billing_cycle_id);		//userlog(lsSql);		cDatabase->DoSql(lsSql);		isqlcode=cDatabase->GetSqlCode();	//	//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());		//userlog("检索返回行数:%d",cDatabase->GetRowCount());					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);		}			//更新销帐库的BALANCE_TABLE_ADMIN表中的数据	sprintf(lsSql,	"UPDATE BALANCE_TABLE_ADMIN   "	"SET total_amount = %ld,  "		 "advance= %ld, "		 "present= %ld, "		 "state_date = sysdate  "	"WHERE acct_id = %s AND   "			"state = '1'  "	,w_balance,w_advance,w_present,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);	}		//向销帐库的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,bill_serial_nbr,present,billing_cycle_id )    "	"VALUES (SEQ_BALANCE_HIST_ADMIN.nextval,%s,%ld,'%s',  "	"%s,%ld,sysdate,'01',%s, %ld, %s)	  "//	,acct_id,-total_amount,"3",staff_id,w_balance,bill_serial_nbr);		,acct_id,-total_amount,"3",staff_id,w_balance,bill_serial_nbr, -writeoff_present,billing_cycle_id);			//userlog(lsSql);	cDatabase->DoSql(lsSql);	isqlcode=cDatabase->GetSqlCode();	//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());		if(isqlcode<0) 	{			strcpy(lsTemp,"向销帐库的BALANCE_HIST_ADMIN表中插数据时出错1!\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,         " update BALANCE_HIST_EFF_EXP "         " set amount=amount-%ld,"         "    present=present - %ld , "         "     balance=%ld "         " where balance_hist_admin_id in ( select max(balance_hist_admin_id) "                                          " from balance_hist_eff_exp "                                          " where acct_id=%s and state='01' ) "         " and  state='01' "         ,writeoff_advance,writeoff_present,w_balance,acct_id);  	//userlog(lsSql);	cDatabase->DoSql(lsSql);	isqlcode=cDatabase->GetSqlCode();	//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());		if(isqlcode<0) 	{			strcpy(lsTemp,"向销帐库的BALANCE_HIST_ADMIN表中插数据时出错1!\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(w_present>0)	{	   		sprintf(lsSql,		        " select nullity_date "		        " from BALANCE_TABLE_ADMIN "		        " where acct_id = %s AND   "			" state = '1'  " 			,acct_id);					cDatabase->DoSql(lsSql);		isqlcode=cDatabase->GetSqlCode();					if(isqlcode<0)		{			strcpy(lsTemp,"取赠费有效期出错!\n");			cDatabase->Rollback();			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(nullity_date,cDatabase->GetData());	        	        if(strcmp(nullity_date,billing_cycle_id)<0)//失效时间在帐期之前赠费作废	        {	        	w_balance=w_balance - w_present;	        	//超过有效期则将预存款金额置零并在添加记录。	        		        	//向销帐库的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 )    "	        		"VALUES (SEQ_BALANCE_HIST_ADMIN.nextval,%s,%ld,'7',  "	        		"%s,%ld,sysdate,'01' )	  "	        	,acct_id,-w_present,staff_id,w_balance );			        	cDatabase->DoSql(lsSql);	        	isqlcode=cDatabase->GetSqlCode();	        	if(isqlcode<0) 	        	{		        		strcpy(lsTemp,"向销帐库的BALANCE_HIST_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);	        	}	        		        		        	//更新销帐库的BALANCE_TABLE_ADMIN表中的数据	        	w_present=0;	        	sprintf(lsSql,	        	"UPDATE BALANCE_TABLE_ADMIN   "	        	"SET total_amount = %ld,  "	        		 "present= %ld  "	        		 "WHERE acct_id = %s AND   "				 "state = '1'  "	        	,w_balance,w_present,acct_id);		        	cDatabase->DoSql(lsSql);	        	isqlcode=cDatabase->GetSqlCode();	        	if(isqlcode<0) 	        	{		        		strcpy(lsTemp,"更新销帐库的BALANCE_TABLE_ADMIN表中的数据时出错(t)!\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 = %ld   "				"WHERE acct_id=%s AND  "				"acct_seq_nbr=%s AND  "				"state='10A'  "			,w_balance,acct_id,acct_seq_nbr);					cDatabase->DoSql(lsSql);			isqlcode=cDatabase->GetSqlCode();			if(isqlcode<0) 			{					strcpy(lsTemp,"更新收费库B_ACCT表中的balance字段的值时出错(t)!\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);			}				//更新计费库ACCT表中的balance字段的值			sprintf(lsSql,				"UPDATE LBAS.ACCT   "				"SET balance = %ld   "				"WHERE acct_id=%s AND  "				"acct_seq_nbr=%s AND  "				"state = '10A'  "			,w_balance,acct_id,acct_seq_nbr);				cDatabase->DoSql(lsSql);			isqlcode=cDatabase->GetSqlCode();			if(isqlcode<0) 			{					strcpy(lsTemp,"更新计费库ACCT表中的balance字段的值时出错!\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);			}	        }		}	*/	//判断赠费有效期完成////////////////////////////////////////////////					strcat(lsTemp,"\t");			strcat(lsTemp,bill_serial_nbr);   }	//销帐完成//////////tets///////////	//追加返回赠送款	if (lde_present>0)	{		strcat(lsTemp,"\t");				strcat(lsTemp,ls_present);		strcat(lsTemp,"\t");				strcat(lsTemp,nullity_date);	}//////////tets///////////	   cDatabase->Commit();	   StrReturn(0,lsTemp);}//////////////////////////////////////////////////服务 PBGetBal 实现函数,取帐户各种费用信息//追加三个返回值:赠款余额、预存款余额、赠款最小存入本金////////////////////////////////////////////////void CBalance::GetBalInfoAcct(){	char lsSql[2048],lsTemp[1024],lsErr[500];	char staff_id[20],acct_id[20];	int isqlcode,lrow;	char pstate[10];	char *lparm[3];	int i,lpnum,rpnum;	char ls_charge[15];	char ls_realcharge[15];		char p_type[2];//读取赠费方式标识		lpnum=2;		rpnum=GetInputParm(pInp,lparm,50);	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]);	lpfree(lparm,rpnum);				//检查帐户是否有费用未缴清	sprintf(lsSql,	"SELECT COUNT(*),sum(charge)  "		"FROM   B_ACCT_ITEM_O   "	"WHERE  acct_id = %s   "	"AND    state in ('20C' ,'20T','20Q','20Y','20S','20Z')	"	 ,acct_id);		 //	//userlog(lsSql);	cDatabase->DoSql(lsSql);	isqlcode=cDatabase->GetSqlCode();//	//userlog("Sqlcode: %d SqlErrText: %s",isqlcode,cDatabase->GetSqlErrText());	//userlog("检索返回行数:%d",cDatabase->GetRowCount());			if(isqlcode<0)	{		strcpy(lsTemp,"检查帐户是否有费用未缴清出错!\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(pstate,cDatabase->data->GetColData(1,1));	strcpy(ls_charge,cDatabase->data->GetColData(1,2));	//userlog(pstate);	if(atol(pstate)>0) strcpy(pstate,"1");	else strcpy(pstate,"0");		if(strcmp(ls_charge,"")==0)	   strcpy(ls_charge,"0");//	广安没有trusted_charge字段,因此从累加中删除//	sprintf(lsSql,"select sum(nvl(call_charge,0)+nvl(lease_charge,0)+nvl(month_acc,0)+nvl(trusted_charge,0)) from lbas.realtime_charge_acc "	sprintf(lsSql,"select sum(nvl(call_charge,0)+nvl(lease_charge,0)+nvl(month_acc,0)) from lbas.realtime_charge_acc "	              " where acct_id = %s "	              ,acct_id);	cDatabase->DoSql(lsSql);	isqlcode=cDatabase->GetSqlCode();	if(isqlcode<0)	{		strcpy(lsTemp,"检查帐户实时费用出错!\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_realcharge,cDatabase->GetData());	 	if(strcmp(ls_realcharge,"")==0)	   strcpy(ls_realcharge,"0"); 			       ///////////////////////////////////////////////	//取身份证号将"LBAS.ACCT.social_id,"修改为"BALANCE_TABLE_ADMIN.id_card_nbr,   "	//取用户帐户及预付款信息	sprintf(lsSql,  "SELECT LBAS.ACCT.acct_id,   "         "LBAS.ACCT.customer_name,   "         "LBAS.ACCT.address_id,   "         "LBAS.ACCT.balance,   "         " nvl(BALANCE_TABLE_ADMIN.password,'0') ,  "         "LBAS.ACCT.acct_seq_nbr,   "         "LBAS.ACCT.state,   "         "'%s',   "         " %s ,   "         "BALANCE_TABLE_ADMIN.id_card_nbr, "         " %s ,   "         " LBAS.ACCT.payment_method, "         " decode(BALANCE_TABLE_ADMIN.state,'1',1,0), "         " lbas.domain_payment_method.payment_method_name, "

⌨️ 快捷键说明

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